61 lines
1.5 KiB
Ruby
61 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Admin
|
|
class SuspensionsController < BaseController
|
|
before_action :set_account
|
|
|
|
def new
|
|
@suspension = Form::AdminSuspensionConfirmation.new(report_id: params[:report_id])
|
|
end
|
|
|
|
def create
|
|
authorize @account, :suspend?
|
|
|
|
@suspension = Form::AdminSuspensionConfirmation.new(suspension_params)
|
|
|
|
if suspension_params[:acct] == @account.acct
|
|
resolve_report! if suspension_params[:report_id]
|
|
perform_suspend!
|
|
mark_reports_resolved!
|
|
redirect_to admin_accounts_path
|
|
else
|
|
flash.now[:alert] = I18n.t('admin.suspensions.bad_acct_msg')
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
authorize @account, :unsuspend?
|
|
@account.unsuspend!
|
|
log_action :unsuspend, @account
|
|
redirect_to admin_accounts_path
|
|
end
|
|
|
|
private
|
|
|
|
def set_account
|
|
@account = Account.find(params[:account_id])
|
|
end
|
|
|
|
def suspension_params
|
|
params.require(:form_admin_suspension_confirmation).permit(:acct, :report_id)
|
|
end
|
|
|
|
def resolve_report!
|
|
report = Report.find(suspension_params[:report_id])
|
|
report.resolve!(current_account)
|
|
log_action :resolve, report
|
|
end
|
|
|
|
def perform_suspend!
|
|
@account.suspend!
|
|
Admin::SuspensionWorker.perform_async(@account.id)
|
|
log_action :suspend, @account
|
|
end
|
|
|
|
def mark_reports_resolved!
|
|
Report.where(target_account: @account).unresolved.update_all(action_taken: true, action_taken_by_account_id: current_account.id)
|
|
end
|
|
end
|
|
end
|