0
0
Fork 0

Add batch suspend for accounts in admin UI (#17009)

This commit is contained in:
Eugen Rochko 2021-12-05 21:48:39 +01:00 committed by GitHub
parent 2e2ea6bb6b
commit 0fb9536d38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 312 additions and 278 deletions

View file

@ -3,6 +3,7 @@
class Form::AccountBatch
include ActiveModel::Model
include Authorization
include AccountableConcern
include Payloadable
attr_accessor :account_ids, :action, :current_account
@ -25,19 +26,21 @@ class Form::AccountBatch
suppress_follow_recommendation!
when 'unsuppress_follow_recommendation'
unsuppress_follow_recommendation!
when 'suspend'
suspend!
end
end
private
def follow!
accounts.find_each do |target_account|
accounts.each do |target_account|
FollowService.new.call(current_account, target_account)
end
end
def unfollow!
accounts.find_each do |target_account|
accounts.each do |target_account|
UnfollowService.new.call(current_account, target_account)
end
end
@ -61,23 +64,31 @@ class Form::AccountBatch
end
def approve!
users = accounts.includes(:user).map(&:user)
users.each { |user| authorize(user, :approve?) }
.each(&:approve!)
accounts.includes(:user).find_each do |account|
approve_account(account)
end
end
def reject!
records = accounts.includes(:user)
accounts.includes(:user).find_each do |account|
reject_account(account)
end
end
records.each { |account| authorize(account.user, :reject?) }
.each { |account| DeleteAccountService.new.call(account, reserve_email: false, reserve_username: false) }
def suspend!
accounts.find_each do |account|
if account.user_pending?
reject_account(account)
else
suspend_account(account)
end
end
end
def suppress_follow_recommendation!
authorize(:follow_recommendation, :suppress?)
accounts.each do |account|
accounts.find_each do |account|
FollowRecommendationSuppression.create(account: account)
end
end
@ -87,4 +98,24 @@ class Form::AccountBatch
FollowRecommendationSuppression.where(account_id: account_ids).destroy_all
end
def reject_account(account)
authorize(account.user, :reject?)
log_action(:reject, account.user, username: account.username)
account.suspend!(origin: :local)
AccountDeletionWorker.perform_async(account.id, reserve_username: false)
end
def suspend_account(account)
authorize(account, :suspend?)
log_action(:suspend, account)
account.suspend!(origin: :local)
Admin::SuspensionWorker.perform_async(account.id)
end
def approve_account(account)
authorize(account.user, :approve?)
log_action(:approve, account.user)
account.user.approve!
end
end