Add batch actions for approving and rejecting pending accounts (#10469)
parent
2c63e0292a
commit
e1d0390e29
@ -0,0 +1,52 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Admin |
||||
class PendingAccountsController < BaseController |
||||
before_action :set_accounts, only: :index |
||||
|
||||
def index |
||||
@form = Form::AccountBatch.new |
||||
end |
||||
|
||||
def update |
||||
@form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button)) |
||||
@form.save |
||||
rescue ActionController::ParameterMissing |
||||
# Do nothing |
||||
ensure |
||||
redirect_to admin_pending_accounts_path(current_params) |
||||
end |
||||
|
||||
def approve_all |
||||
Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'approve').save |
||||
redirect_to admin_pending_accounts_path(current_params) |
||||
end |
||||
|
||||
def reject_all |
||||
Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'reject').save |
||||
redirect_to admin_pending_accounts_path(current_params) |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_accounts |
||||
@accounts = Account.joins(:user).merge(User.pending).page(params[:page]) |
||||
end |
||||
|
||||
def form_account_batch_params |
||||
params.require(:form_account_batch).permit(:action, account_ids: []) |
||||
end |
||||
|
||||
def action_from_button |
||||
if params[:approve] |
||||
'approve' |
||||
elsif params[:reject] |
||||
'reject' |
||||
end |
||||
end |
||||
|
||||
def current_params |
||||
params.slice(:page).permit(:page) |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,14 @@ |
||||
.batch-table__row |
||||
%label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox |
||||
= f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id |
||||
.batch-table__row__content.batch-table__row__content--unpadded |
||||
%table.accounts-table |
||||
%tbody |
||||
%tr |
||||
%td |
||||
= account.user_email |
||||
= "(@#{account.username})" |
||||
%br/ |
||||
= account.user_current_sign_in_ip |
||||
%td.accounts-table__count |
||||
= table_link_to 'pencil', t('admin.accounts.edit'), admin_account_path(account.id) |
@ -0,0 +1,33 @@ |
||||
- content_for :page_title do |
||||
= t('admin.pending_accounts.title', count: User.pending.count) |
||||
|
||||
- content_for :header_tags do |
||||
= javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' |
||||
|
||||
= form_for(@form, url: admin_pending_accounts_path, method: :patch) do |f| |
||||
= hidden_field_tag :page, params[:page] || 1 |
||||
|
||||
.batch-table |
||||
.batch-table__toolbar |
||||
%label.batch-table__toolbar__select.batch-checkbox-all |
||||
= check_box_tag :batch_checkbox_all, nil, false |
||||
.batch-table__toolbar__actions |
||||
= f.button safe_join([fa_icon('check'), t('admin.accounts.approve')]), name: :approve, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } |
||||
|
||||
= f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } |
||||
.batch-table__body |
||||
- if @accounts.empty? |
||||
= nothing_here 'nothing-here--under-tabs' |
||||
- else |
||||
= render partial: 'account', collection: @accounts, locals: { f: f } |
||||
|
||||
= paginate @accounts |
||||
|
||||
%hr.spacer/ |
||||
|
||||
%div{ style: 'overflow: hidden' } |
||||
%div{ style: 'float: right' } |
||||
= link_to t('admin.accounts.reject_all'), reject_all_admin_pending_accounts_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' |
||||
|
||||
%div |
||||
= link_to t('admin.accounts.approve_all'), approve_all_admin_pending_accounts_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' |
Loading…
Reference in new issue