Change deletes to preserve soft-deleted statuses in unresolved reports (#11805)
Change all account actions except "none" to resolve all unresolved reports Refactor `SuspendAccountService` to be more readable
This commit is contained in:
parent
4fe127664b
commit
c5d37f18cb
21 changed files with 98 additions and 45 deletions
|
@ -115,6 +115,7 @@ class Account < ApplicationRecord
|
|||
:approved?,
|
||||
:pending?,
|
||||
:disabled?,
|
||||
:unconfirmed_or_pending?,
|
||||
:role,
|
||||
:admin?,
|
||||
:moderator?,
|
||||
|
|
|
@ -83,19 +83,23 @@ class Admin::AccountAction
|
|||
|
||||
# A log entry is only interesting if the warning contains
|
||||
# custom text from someone. Otherwise it's just noise.
|
||||
|
||||
log_action(:create, warning) if warning.text.present?
|
||||
end
|
||||
|
||||
def process_reports!
|
||||
return if report_id.blank?
|
||||
# If we're doing "mark as resolved" on a single report,
|
||||
# then we want to keep other reports open in case they
|
||||
# contain new actionable information.
|
||||
#
|
||||
# Otherwise, we will mark all unresolved reports about
|
||||
# the account as resolved.
|
||||
|
||||
authorize(report, :update?)
|
||||
reports.each { |report| authorize(report, :update?) }
|
||||
|
||||
if type == 'none'
|
||||
reports.each do |report|
|
||||
log_action(:resolve, report)
|
||||
report.resolve!(current_account)
|
||||
else
|
||||
Report.where(target_account: target_account).unresolved.update_all(action_taken: true, action_taken_by_account_id: current_account.id)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -141,6 +145,16 @@ class Admin::AccountAction
|
|||
@report.status_ids if @report && include_statuses
|
||||
end
|
||||
|
||||
def reports
|
||||
@reports ||= begin
|
||||
if type == 'none' && with_report?
|
||||
[report]
|
||||
else
|
||||
Report.where(target_account: target_account).unresolved
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def warning_preset
|
||||
@warning_preset ||= AccountWarningPreset.find(warning_preset_id) if warning_preset_id.present?
|
||||
end
|
||||
|
|
|
@ -69,6 +69,6 @@ class Form::AccountBatch
|
|||
records = accounts.includes(:user)
|
||||
|
||||
records.each { |account| authorize(account.user, :reject?) }
|
||||
.each { |account| SuspendAccountService.new.call(account, including_user: true, destroy: true, skip_distribution: true) }
|
||||
.each { |account| SuspendAccountService.new.call(account, reserve_email: false, reserve_username: false) }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -35,7 +35,7 @@ class Form::StatusBatch
|
|||
def delete_statuses
|
||||
Status.where(id: status_ids).reorder(nil).find_each do |status|
|
||||
status.discard
|
||||
RemovalWorker.perform_async(status.id, redraft: false)
|
||||
RemovalWorker.perform_async(status.id, immediate: true)
|
||||
Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true)
|
||||
log_action :destroy, status
|
||||
end
|
||||
|
|
|
@ -59,6 +59,7 @@ class Report < ApplicationRecord
|
|||
end
|
||||
|
||||
def resolve!(acting_account)
|
||||
RemovalWorker.push_bulk(Status.with_discarded.discarded.where(id: status_ids).pluck(:id)) { |status_id| [status_id, { immediate: true }] }
|
||||
update!(action_taken: true, action_taken_by_account_id: acting_account.id)
|
||||
end
|
||||
|
||||
|
|
|
@ -214,6 +214,10 @@ class Status < ApplicationRecord
|
|||
!sensitive? && with_media?
|
||||
end
|
||||
|
||||
def reported?
|
||||
@reported ||= Report.where(target_account: account).unresolved.where('? = ANY(status_ids)', id).exists?
|
||||
end
|
||||
|
||||
def emojis
|
||||
return @emojis if defined?(@emojis)
|
||||
|
||||
|
|
|
@ -171,6 +171,10 @@ class User < ApplicationRecord
|
|||
confirmed? && approved? && !disabled? && !account.suspended?
|
||||
end
|
||||
|
||||
def unconfirmed_or_pending?
|
||||
!(confirmed? && approved?)
|
||||
end
|
||||
|
||||
def inactive_message
|
||||
!approved? ? :pending : super
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue