Crowdin / Upload translations / upload-translations (push) Skipped
Historical data migration test / test (14-alpine) (push) Canceled after 0s
Historical data migration test / test (15-alpine) (push) Canceled after 0s
Historical data migration test / test (16-alpine) (push) Canceled after 0s
Historical data migration test / test (17-alpine) (push) Canceled after 0s
Bundler Audit / security (push) Canceled after 0s
Haml Linting / lint (push) Canceled after 0s
JavaScript Linting / lint (push) Canceled after 0s
Ruby Linting / lint (push) Canceled after 0s
JavaScript Testing / test (push) Canceled after 0s
Ruby Testing / build (production) (push) Canceled after 0s
Ruby Testing / test (.ruby-version) (push) Canceled after 0s
Ruby Testing / test (3.3) (push) Canceled after 0s
Ruby Testing / test (3.4) (push) Canceled after 0s
Ruby Testing / End to End testing (.ruby-version) (push) Canceled after 0s
Ruby Testing / End to End testing (3.3) (push) Canceled after 0s
Ruby Testing / End to End testing (3.4) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check i18n / check-i18n (push) Canceled after 0s
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (javascript) (push) Canceled after 0s
CodeQL / Analyze (ruby) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.4, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check formatting / lint (push) Canceled after 0s
CSS Linting / lint (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.19.2) (push) Canceled after 0s
Chromatic / Check for relevant changes (push) Canceled after 0s
Chromatic / Run Chromatic (push) Canceled after 0s
Snapshot of upstream tag v4.7.3 (commit 8ff11c2bb7b9f0714e947b10fa3629c6542c7121) from https://github.com/mastodon/mastodon, unmodified.
84 lines
1.7 KiB
Ruby
84 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ApproveAppealService < BaseService
|
|
def call(appeal, current_account)
|
|
@appeal = appeal
|
|
@strike = appeal.strike
|
|
@current_account = current_account
|
|
|
|
ApplicationRecord.transaction do
|
|
undo_strike_action!
|
|
mark_strike_as_appealed!
|
|
end
|
|
|
|
queue_workers!
|
|
notify_target_account!
|
|
end
|
|
|
|
private
|
|
|
|
def target_account
|
|
@strike.target_account
|
|
end
|
|
|
|
def undo_strike_action!
|
|
case @strike.action
|
|
when 'disable'
|
|
undo_disable!
|
|
when 'delete_statuses'
|
|
undo_delete_statuses!
|
|
when 'mark_statuses_as_sensitive'
|
|
undo_mark_statuses_as_sensitive!
|
|
when 'sensitive'
|
|
undo_sensitive!
|
|
when 'silence'
|
|
undo_silence!
|
|
when 'suspend'
|
|
undo_suspend!
|
|
end
|
|
end
|
|
|
|
def mark_strike_as_appealed!
|
|
@appeal.approve!(@current_account)
|
|
@strike.touch(:overruled_at)
|
|
end
|
|
|
|
def undo_disable!
|
|
target_account.user.enable!
|
|
end
|
|
|
|
def undo_delete_statuses!
|
|
# Cannot be undone
|
|
end
|
|
|
|
def undo_mark_statuses_as_sensitive!
|
|
representative_account = Account.representative
|
|
@strike.statuses.kept.includes(:media_attachments).reorder(nil).find_each do |status|
|
|
UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media?
|
|
end
|
|
end
|
|
|
|
def undo_sensitive!
|
|
target_account.unsensitize!
|
|
end
|
|
|
|
def undo_silence!
|
|
target_account.unsilence!
|
|
end
|
|
|
|
def undo_suspend!
|
|
target_account.unsuspend!
|
|
end
|
|
|
|
def queue_workers!
|
|
case @strike.action
|
|
when 'suspend'
|
|
Admin::UnsuspensionWorker.perform_async(target_account.id)
|
|
end
|
|
end
|
|
|
|
def notify_target_account!
|
|
UserMailer.appeal_approved(target_account.user, @appeal).deliver_later
|
|
end
|
|
end
|