diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index cf70af993..2a7676be9 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -32,6 +32,7 @@ var initialize_modules = function() { App.Stats.initialize(); App.Dropdown.initialize(); App.LocationChanger.initialize(); + App.CheckAllNone.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/check_all_none.js.coffee b/app/assets/javascripts/check_all_none.js.coffee new file mode 100644 index 000000000..f49801a73 --- /dev/null +++ b/app/assets/javascripts/check_all_none.js.coffee @@ -0,0 +1,13 @@ +App.CheckAllNone = + + initialize: -> + $('[data-check-all]').on 'click', -> + target_name = $(this).data('check-all') + $("[name='" + target_name + "']").prop('checked', true) + + $('[data-check-none]').on 'click', -> + target_name = $(this).data('check-none') + $("[name='" + target_name + "']").prop('checked', false) + + + diff --git a/app/controllers/moderation/bulk_controller.rb b/app/controllers/moderation/bulk_controller.rb new file mode 100644 index 000000000..aa28b3213 --- /dev/null +++ b/app/controllers/moderation/bulk_controller.rb @@ -0,0 +1,18 @@ +class Moderation::BulkController < Moderation::BaseController + + def index + @debates = Debate.sort_for_moderation.page(params[:page]).per(100).includes(:author) + end + + def hide + debates = Debate.where(id: params[:debate_ids]) + if params[:commit] == t('moderation.bulk.index.hide_debates') + debates.each(&:hide) + elsif params[:commit] == t('moderation.bulk.index.block_authors') + debates.includes(:author).map(&:author).uniq.each(&:block) + end + + redirect_to action: :index + end + +end diff --git a/app/controllers/moderation/users_controller.rb b/app/controllers/moderation/users_controller.rb index 9e38a79bf..39f4c200a 100644 --- a/app/controllers/moderation/users_controller.rb +++ b/app/controllers/moderation/users_controller.rb @@ -1,28 +1,26 @@ class Moderation::UsersController < Moderation::BaseController + before_filter :load_users, only: :index + + load_and_authorize_resource + def index - @users = User.with_hidden.search(params[:name_or_email]).page(params[:page]).for_render end def hide_in_moderation_screen - hide_user + @user.block redirect_to request.query_parameters.merge(action: :index), notice: I18n.t('moderation.users.notice_hide') end def hide - hide_user + @user.block redirect_to debates_path end private - def hide_user - user = User.find(params[:id]) - debates_ids = Debate.where(author_id: user.id).pluck(:id) - comments_ids = Comment.where(user_id: user.id).pluck(:id) - user.hide - Debate.hide_all debates_ids - Comment.hide_all comments_ids - end + def load_users + @users = User.with_hidden.search(params[:name_or_email]).page(params[:page]).for_render + end -end \ No newline at end of file +end diff --git a/app/models/user.rb b/app/models/user.rb index 8c11ddad9..a806de7c3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -117,6 +117,15 @@ class User < ActiveRecord::Base update official_position: nil, official_level: 0 end + def block + debates_ids = Debate.where(author_id: id).pluck(:id) + comments_ids = Comment.where(user_id: id).pluck(:id) + + self.hide + Debate.hide_all debates_ids + Comment.hide_all comments_ids + end + def self.search(term) term.present? ? where("email = ? OR username ILIKE ?", term, "%#{term}%") : none end diff --git a/app/views/moderation/_menu.html.erb b/app/views/moderation/_menu.html.erb index 2b5f938bd..2f8954290 100644 --- a/app/views/moderation/_menu.html.erb +++ b/app/views/moderation/_menu.html.erb @@ -24,5 +24,12 @@ <%= t("moderation.menu.users") %> <% end %> + +
+ <%= t('moderation.bulk.index.check') %>: + <%= link_to t('moderation.bulk.index.check_all'), '#', data: {check_all: "debate_ids[]"} %> + | + <%= link_to t('moderation.bulk.index.check_none'), '#', data: {check_none: "debate_ids[]"} %> +
+ +| + <%= t("moderation.bulk.index.headers.debate") %> + | +<%= t("moderation.bulk.index.headers.flags") %> | ++ <%= t("moderation.bulk.index.headers.moderate") %> + | +
|---|---|---|
|
+ <%= link_to debate.title, debate, target: "_blank" %>
+ •
+ <%= debate.author.username %>
+ •
+ <%= l debate.updated_at.to_date %>
+ + <%= debate.description %> + |
+ <%= debate.flags_count %> | ++ <%= check_box_tag "debate_ids[]", debate.id, nil, id: "#{dom_id(debate)}_check" %> + | +