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/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