diff --git a/app/assets/fonts/icons.eot b/app/assets/fonts/icons.eot
index 9bb4f6a68..fed38cb4b 100644
Binary files a/app/assets/fonts/icons.eot and b/app/assets/fonts/icons.eot differ
diff --git a/app/assets/fonts/icons.svg b/app/assets/fonts/icons.svg
index 31e98dac3..602058baf 100644
--- a/app/assets/fonts/icons.svg
+++ b/app/assets/fonts/icons.svg
@@ -7,7 +7,6 @@
-
@@ -44,5 +43,5 @@
-icons.eot
+
diff --git a/app/assets/fonts/icons.ttf b/app/assets/fonts/icons.ttf
index 3524044cf..96e944231 100644
Binary files a/app/assets/fonts/icons.ttf and b/app/assets/fonts/icons.ttf differ
diff --git a/app/assets/fonts/icons.woff b/app/assets/fonts/icons.woff
index f9944c812..fb76f3b26 100644
Binary files a/app/assets/fonts/icons.woff and b/app/assets/fonts/icons.woff differ
diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss
index 9d73002e5..85423df75 100644
--- a/app/assets/stylesheets/admin.scss
+++ b/app/assets/stylesheets/admin.scss
@@ -27,6 +27,12 @@ body.admin {
.button {
margin-top: 0;
}
+
+ input[type="text"] {
+ height: 36px\9;
+ line-height: 36px\9;
+ margin-bottom: 24px\9;
+ }
}
.dashboard {
@@ -58,6 +64,18 @@ body.admin {
.admin-content {
margin-top: rem-calc(24);
+
+ .filters h2 {
+ margin-top: 0;
+ }
+
+ .proposal-new, .proposal-edit {
+ padding-top: 0;
+ }
+
+ .proposal-show {
+ padding-top: rem-calc(54);
+ }
}
.is-featured {
@@ -79,6 +97,10 @@ body.admin {
margin-left: rem-calc(-20);
}
+ a {
+ color: white\9 !important;
+ }
+
ul {
list-style-type: none;
margin-left: 0;
@@ -89,6 +111,8 @@ body.admin {
font-size: rem-calc(24);
padding-right: rem-calc(24);
padding-top: rem-calc(4);
+ padding-left: 12px\9 !important;
+ padding-right: 12px\9 !important;
}
li {
@@ -277,11 +301,6 @@ body.admin {
// 05. Management
// - - - - - - - - - - - - - - - - - - - - - - - - -
-.postfix {
- height: rem-calc(48);
- line-height: rem-calc(48);
-}
-
.user-permissions {
ul {
diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss
index 1afa5cea2..5e7c189bb 100644
--- a/app/assets/stylesheets/layout.scss
+++ b/app/assets/stylesheets/layout.scss
@@ -450,7 +450,7 @@ header {
}
.top-bar {
- background: none;
+ background: #112E51 !important;
color: white;
height: rem-calc(48);
max-width: 1170px !important;
@@ -958,8 +958,7 @@ form {
em {
background: white;
- display: inline-block;
- padding-left: rem-calc(6);
+ display: block;
}
}
@@ -1147,9 +1146,9 @@ img.avatar, img.admin-avatar, img.moderator-avatar, img.initialjs-avatar {
background-color: rgba(255,255,255,.5);
color: rgba(0,0,0,.4);
font-size: rem-calc(40);
- left: 11px;
+ left: rem-calc(11);
position: absolute;
- top: 63px;
+ top: rem-calc(72);
}
.user-deleted {
diff --git a/app/assets/stylesheets/print.css b/app/assets/stylesheets/print.css
index b4495d459..9418d5ee0 100644
--- a/app/assets/stylesheets/print.css
+++ b/app/assets/stylesheets/print.css
@@ -2,40 +2,58 @@
/* Print proposals */
-.top-links, .tags a, .supports, .label-proposal,
-#print_link, .admin-sidebar, img.left, .proposal-info a,
-.icon-comments, .menu-icon, .icon-proposals, li.name span,
-p.proposal-info span:nth-child(3) {
- display: none !important;
-}
+.tags a { display: none !important; }
+
+.supports { display: none !important; }
+
+.label-proposal { display: none !important; }
+
+#print_link { display: none !important; }
+
+.admin-sidebar { display: none !important; }
+
+img.left { display: none !important; }
+
+.proposal-info a { display: none !important; }
+
+.icon-comments { display: none !important; }
+
+.menu-icon { display: none !important; }
+
+.icon-proposals { display: none !important; }
+
+.captcha { display: none !important; }
+
+li.name span { display: none !important; }
+
+p.proposal-info span:nth-child(3) { display: none !important; }
+
+.top-links { display: none !important; }
+
+.button { display: none !important; }
+
+input[type="submit"] { display: none !important; }
.select-order {
border: 0;
font-size: 24px;
font-weight: bold;
- margin-left: -12px;
-}
-
-p.proposal-info {
margin-left: -6px;
}
-a {
- text-decoration: none !important;
-}
+p.proposal-info { margin-left: -6px; }
-a:after {
- content: none !important;
-}
+a { text-decoration: none !important; }
-.proposal .panel, .proposal .panel .proposal-content,
-.proposal .panel h3 {
- min-height: auto !important;
-}
+a:after { content: none !important; }
-.proposal .panel .proposal-description {
- height: auto;
-}
+.proposal .panel { min-height: auto !important; }
+
+.proposal .panel .proposal-content { min-height: auto !important; }
+
+.proposal .panel h3 { min-height: auto !important; }
+
+.proposal .panel .proposal-description { height: auto; }
.proposal .panel {
border-left: 0 !important;
diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb
index ce1db310b..e98906f04 100644
--- a/app/controllers/concerns/commentable_actions.rb
+++ b/app/controllers/concerns/commentable_actions.rb
@@ -1,5 +1,6 @@
module CommentableActions
extend ActiveSupport::Concern
+ include Polymorphic
def index
@resources = @search_terms.present? ? resource_model.search(@search_terms) : resource_model.all
@@ -59,29 +60,6 @@ module CommentableActions
end
private
- def resource
- @resource ||= instance_variable_get("@#{resource_name}")
- end
-
- def resource_name
- @resource_name ||= resource_model.to_s.downcase
- end
-
- def set_resource_instance
- instance_variable_set("@#{resource_name}", @resource)
- end
-
- def set_resources_instance
- instance_variable_set("@#{resource_name.pluralize}", @resources)
- end
-
- def set_resource_votes(instance)
- send("set_#{resource_name}_votes", instance)
- end
-
- def strong_params
- send("#{resource_name}_params")
- end
def track_event
ahoy.track "#{resource_name}_created".to_sym, "#{resource_name}_id": resource.id
@@ -104,4 +82,8 @@ module CommentableActions
def parse_search_terms
@search_terms = params[:search] if params[:search].present?
end
+
+ def set_resource_votes(instance)
+ send("set_#{resource_name}_votes", instance)
+ end
end
\ No newline at end of file
diff --git a/app/controllers/concerns/moderate_actions.rb b/app/controllers/concerns/moderate_actions.rb
new file mode 100644
index 000000000..792dacde0
--- /dev/null
+++ b/app/controllers/concerns/moderate_actions.rb
@@ -0,0 +1,60 @@
+module ModerateActions
+ extend ActiveSupport::Concern
+ include Polymorphic
+
+ def index
+ @resources = @resources.send(@current_filter)
+ .send("sort_by_#{@current_order}")
+ .page(params[:page])
+ .per(50)
+ set_resources_instance
+ end
+
+ def hide
+ hide_resource resource
+ end
+
+ def moderate
+ set_resource_params
+ @resources = @resources.where(id: params[:resource_ids])
+
+ if params[:hide_resources].present?
+ @resources.accessible_by(current_ability, :hide).each {|resource| hide_resource resource}
+
+ elsif params[:ignore_flags].present?
+ @resources.accessible_by(current_ability, :ignore_flag).each(&:ignore_flag)
+
+ elsif params[:block_authors].present?
+ author_ids = @resources.pluck(author_id).uniq
+ User.where(id: author_ids).accessible_by(current_ability, :block).each {|user| block_user user}
+ end
+
+ redirect_to request.query_parameters.merge(action: :index)
+ end
+
+ private
+
+ def load_resources
+ @resources = resource_model.accessible_by(current_ability, :moderate)
+ end
+
+ def hide_resource(resource)
+ resource.hide
+ Activity.log(current_user, :hide, resource)
+ end
+
+ def block_user(user)
+ user.block
+ Activity.log(current_user, :block, user)
+ end
+
+ def set_resource_params
+ params[:resource_ids] = params["#{resource_name}_ids"]
+ params[:hide_resources] = params["hide_#{resource_name.pluralize}"]
+ end
+
+ def author_id
+ :author_id
+ end
+
+end
\ No newline at end of file
diff --git a/app/controllers/concerns/polymorphic.rb b/app/controllers/concerns/polymorphic.rb
new file mode 100644
index 000000000..51c5768c9
--- /dev/null
+++ b/app/controllers/concerns/polymorphic.rb
@@ -0,0 +1,24 @@
+module Polymorphic
+
+ private
+ def resource
+ @resource ||= instance_variable_get("@#{resource_name}")
+ end
+
+ def resource_name
+ @resource_name ||= resource_model.to_s.downcase
+ end
+
+ def set_resource_instance
+ instance_variable_set("@#{resource_name}", @resource)
+ end
+
+ def set_resources_instance
+ instance_variable_set("@#{resource_name.pluralize}", @resources)
+ end
+
+ def strong_params
+ send("#{resource_name}_params")
+ end
+
+end
\ No newline at end of file
diff --git a/app/controllers/management/base_controller.rb b/app/controllers/management/base_controller.rb
index 7d6c89b5f..144a28bfe 100644
--- a/app/controllers/management/base_controller.rb
+++ b/app/controllers/management/base_controller.rb
@@ -12,7 +12,7 @@ class Management::BaseController < ActionController::Base
end
def current_manager
- @current_manager ||= Manager.find(session["manager_id"]) if session["manager_id"]
+ session["manager"]
end
def managed_user
diff --git a/app/controllers/management/document_verifications_controller.rb b/app/controllers/management/document_verifications_controller.rb
index 32d38c748..1b8fabcc2 100644
--- a/app/controllers/management/document_verifications_controller.rb
+++ b/app/controllers/management/document_verifications_controller.rb
@@ -1,5 +1,6 @@
class Management::DocumentVerificationsController < Management::BaseController
+ before_action :clean_document_number, only: :check
before_action :set_document, only: :check
def index
@@ -41,4 +42,8 @@ class Management::DocumentVerificationsController < Management::BaseController
session[:document_number] = params[:document_verification][:document_number]
end
+ def clean_document_number
+ params[:document_verification][:document_number] = params[:document_verification][:document_number].gsub(/[^a-z0-9]+/i, "").upcase unless params[:document_verification][:document_number].blank?
+ end
+
end
\ No newline at end of file
diff --git a/app/controllers/management/proposals_controller.rb b/app/controllers/management/proposals_controller.rb
index 3e9e7541f..340a6481c 100644
--- a/app/controllers/management/proposals_controller.rb
+++ b/app/controllers/management/proposals_controller.rb
@@ -6,7 +6,7 @@ class Management::ProposalsController < Management::BaseController
before_action :set_proposal, only: [:vote, :show]
before_action :parse_search_terms, only: :index
- has_orders %w{hot_score confidence_score created_at most_commented random}, only: [:index, :print]
+ has_orders %w{confidence_score hot_score created_at most_commented random}, only: [:index, :print]
def vote
@proposal.register_vote(current_user, 'yes')
@@ -34,7 +34,7 @@ class Management::ProposalsController < Management::BaseController
def check_verified_user
unless current_user.level_two_or_three_verified?
- redirect_to management_root_path, alert: t("management.proposals.alert.unverified_user")
+ redirect_to management_document_verifications_path, alert: t("management.proposals.alert.unverified_user")
end
end
diff --git a/app/controllers/management/sessions_controller.rb b/app/controllers/management/sessions_controller.rb
index 78f5a14c8..72bfdda14 100644
--- a/app/controllers/management/sessions_controller.rb
+++ b/app/controllers/management/sessions_controller.rb
@@ -1,9 +1,11 @@
+require "manager_authenticator"
+
class Management::SessionsController < ActionController::Base
def create
destroy_session
- if manager = Manager.valid_manager(params[:login], params[:clave_usuario])
- session["manager_id"] = manager.id
+ if manager = ManagerAuthenticator.new(params).auth
+ session["manager"] = manager
redirect_to management_root_path
else
raise ActionController::RoutingError.new('Not Found')
@@ -18,7 +20,7 @@ class Management::SessionsController < ActionController::Base
private
def destroy_session
- session["manager_id"] = nil
+ session["manager"] = nil
end
end
\ No newline at end of file
diff --git a/app/controllers/moderation/comments_controller.rb b/app/controllers/moderation/comments_controller.rb
index 7177911e8..cf3197383 100644
--- a/app/controllers/moderation/comments_controller.rb
+++ b/app/controllers/moderation/comments_controller.rb
@@ -1,53 +1,20 @@
class Moderation::CommentsController < Moderation::BaseController
+ include ModerateActions
+
has_filters %w{pending_flag_review all with_ignored_flag}, only: :index
has_orders %w{flags created_at}, only: :index
- before_action :load_comments, only: [:index, :moderate]
+ before_action :load_resources, only: [:index, :moderate]
load_and_authorize_resource
- def index
- @comments = @comments.send(@current_filter)
- .send("sort_by_#{@current_order}")
- .page(params[:page])
- .per(50)
- end
-
- def hide
- hide_comment @comment
- end
-
- def moderate
- @comments = @comments.where(id: params[:comment_ids])
-
- if params[:hide_comments].present?
- @comments.accessible_by(current_ability, :hide).each {|comment| hide_comment comment}
-
- elsif params[:ignore_flags].present?
- @comments.accessible_by(current_ability, :ignore_flag).each(&:ignore_flag)
-
- elsif params[:block_authors].present?
- author_ids = @comments.pluck(:user_id).uniq
- User.where(id: author_ids).accessible_by(current_ability, :block).each {|user| block_user user}
- end
-
- redirect_to request.query_parameters.merge(action: :index)
- end
-
private
- def load_comments
- @comments = Comment.accessible_by(current_ability, :moderate)
+ def resource_model
+ Comment
end
- def hide_comment(comment)
- comment.hide
- Activity.log(current_user, :hide, comment)
+ def author_id
+ :user_id
end
-
- def block_user(user)
- user.block
- Activity.log(current_user, :block, user)
- end
-
end
diff --git a/app/controllers/moderation/debates_controller.rb b/app/controllers/moderation/debates_controller.rb
index 57c6a0e05..e2a6ba2a0 100644
--- a/app/controllers/moderation/debates_controller.rb
+++ b/app/controllers/moderation/debates_controller.rb
@@ -1,53 +1,17 @@
class Moderation::DebatesController < Moderation::BaseController
+ include ModerateActions
+
has_filters %w{pending_flag_review all with_ignored_flag}, only: :index
has_orders %w{flags created_at}, only: :index
- before_action :load_debates, only: [:index, :moderate]
+ before_action :load_resources, only: [:index, :moderate]
load_and_authorize_resource
- def index
- @debates = @debates.send(@current_filter)
- .send("sort_by_#{@current_order}")
- .page(params[:page])
- .per(50)
- end
-
- def hide
- hide_debate @debate
- end
-
- def moderate
- @debates = @debates.where(id: params[:debate_ids])
-
- if params[:hide_debates].present?
- @debates.accessible_by(current_ability, :hide).each {|debate| hide_debate debate}
-
- elsif params[:ignore_flags].present?
- @debates.accessible_by(current_ability, :ignore_flag).each(&:ignore_flag)
-
- elsif params[:block_authors].present?
- author_ids = @debates.pluck(:author_id).uniq
- User.where(id: author_ids).accessible_by(current_ability, :block).each {|user| block_user user}
- end
-
- redirect_to request.query_parameters.merge(action: :index)
- end
-
private
- def load_debates
- @debates = Debate.accessible_by(current_ability, :moderate)
- end
-
- def hide_debate(debate)
- debate.hide
- Activity.log(current_user, :hide, debate)
- end
-
- def block_user(user)
- user.block
- Activity.log(current_user, :block, user)
+ def resource_model
+ Debate
end
end
diff --git a/app/controllers/moderation/proposals_controller.rb b/app/controllers/moderation/proposals_controller.rb
index e59f3c79f..7d48a7c07 100644
--- a/app/controllers/moderation/proposals_controller.rb
+++ b/app/controllers/moderation/proposals_controller.rb
@@ -1,54 +1,16 @@
class Moderation::ProposalsController < Moderation::BaseController
+ include ModerateActions
has_filters %w{pending_flag_review all with_ignored_flag}, only: :index
has_orders %w{flags created_at}, only: :index
- before_filter :load_proposals, only: [:index, :moderate]
+ before_filter :load_resources, only: [:index, :moderate]
load_and_authorize_resource
- def index
- @proposals = @proposals.send(@current_filter)
- .send("sort_by_#{@current_order}")
- .page(params[:page])
- .per(50)
- end
-
- def hide
- hide_proposal @proposal
- end
-
- def moderate
- @proposals = @proposals.where(id: params[:proposal_ids])
-
- if params[:hide_proposals].present?
- @proposals.accessible_by(current_ability, :hide).each {|proposal| hide_proposal proposal}
-
- elsif params[:ignore_flags].present?
- @proposals.accessible_by(current_ability, :ignore_flag).each(&:ignore_flag)
-
- elsif params[:block_authors].present?
- author_ids = @proposals.pluck(:author_id).uniq
- User.where(id: author_ids).accessible_by(current_ability, :block).each {|user| block_user user}
- end
-
- redirect_to request.query_parameters.merge(action: :index)
- end
-
private
- def load_proposals
- @proposals = Proposal.accessible_by(current_ability, :moderate)
+ def resource_model
+ Proposal
end
-
- def hide_proposal(proposal)
- proposal.hide
- Activity.log(current_user, :hide, proposal)
- end
-
- def block_user(user)
- user.block
- Activity.log(current_user, :block, user)
- end
-
end
diff --git a/app/models/concerns/taggable.rb b/app/models/concerns/taggable.rb
index 52efc04a7..9126e271a 100644
--- a/app/models/concerns/taggable.rb
+++ b/app/models/concerns/taggable.rb
@@ -3,7 +3,7 @@ module Taggable
included do
acts_as_taggable
- validate :max_number_of_tags
+ validate :max_number_of_tags, on: :create
end
def tag_list_with_limit(limit = nil)
diff --git a/app/models/manager.rb b/app/models/manager.rb
deleted file mode 100644
index 6dc5cceea..000000000
--- a/app/models/manager.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class Manager < ActiveRecord::Base
- validates :username, presence: true, uniqueness: true
- validates :password_digest, presence: true
-
- has_secure_password
-
- def self.valid_manager(username = nil, password = nil)
- return false unless username.present? && password.present?
- Manager.find_by(username: username).try(:authenticate, password)
- end
-
-end
\ No newline at end of file
diff --git a/app/models/verification/management/document.rb b/app/models/verification/management/document.rb
index 6c9a8897f..ee9e5462d 100644
--- a/app/models/verification/management/document.rb
+++ b/app/models/verification/management/document.rb
@@ -1,5 +1,6 @@
class Verification::Management::Document
include ActiveModel::Model
+ include ActiveModel::Dates
attr_accessor :document_type
attr_accessor :document_number
@@ -17,7 +18,21 @@ class Verification::Management::Document
end
def in_census?
- CensusApi.new.call(document_type, document_number).valid?
+ response = CensusApi.new.call(document_type, document_number)
+ response.valid? && valid_age?(response)
+ end
+
+ def valid_age?(response)
+ if under_sixteen?(response)
+ errors.add(:age, true)
+ return false
+ else
+ return true
+ end
+ end
+
+ def under_sixteen?(response)
+ 16.years.ago < string_to_date(response.date_of_birth)
end
def verified?
@@ -28,7 +43,4 @@ class Verification::Management::Document
user.update(verified_at: Time.now) if user?
end
-end
-
-
-
+end
\ No newline at end of file
diff --git a/app/views/layouts/management.html.erb b/app/views/layouts/management.html.erb
index 019f3c44c..354fae1a1 100644
--- a/app/views/layouts/management.html.erb
+++ b/app/views/layouts/management.html.erb
@@ -4,7 +4,7 @@
-
+
<%= content_for?(:title) ? yield(:title) : "Admin" %>
<%= stylesheet_link_tag "application", media: "all" %>
<%= stylesheet_link_tag "print", media: "print" %>
@@ -17,17 +17,17 @@