diff options
author | Ondřej Hruška <ondra@ondrovo.com> | 2017-07-18 18:58:47 +0200 |
---|---|---|
committer | Ondřej Hruška <ondra@ondrovo.com> | 2017-07-18 18:58:47 +0200 |
commit | d69fa9e1f40124279ec9d772e5f54d1e11724e2d (patch) | |
tree | ef0462e5fcc8cc7962ef42d80f7dd520a574a7c5 /app/models/form | |
parent | c727eae4412ac9e4f1bafdc68fe89dcd46d602ca (diff) | |
parent | 0b4006fc47dcd3d57ffdd0b95c95ad4c40a4918f (diff) |
Merge changes from upstream with the CSS reload fix
Diffstat (limited to 'app/models/form')
-rw-r--r-- | app/models/form/status_batch.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/app/models/form/status_batch.rb b/app/models/form/status_batch.rb new file mode 100644 index 000000000..a97b4aa28 --- /dev/null +++ b/app/models/form/status_batch.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class Form::StatusBatch + include ActiveModel::Model + + attr_accessor :status_ids, :action + + ACTION_TYPE = %w(nsfw_on nsfw_off delete).freeze + + def save + case action + when 'nsfw_on', 'nsfw_off' + change_sensitive(action == 'nsfw_on') + when 'delete' + delete_statuses + end + end + + private + + def change_sensitive(sensitive) + media_attached_status_ids = MediaAttachment.where(status_id: status_ids).pluck(:status_id) + ApplicationRecord.transaction do + Status.where(id: media_attached_status_ids).find_each do |status| + status.update!(sensitive: sensitive) + end + end + true + rescue ActiveRecord::RecordInvalid + false + end + + def delete_statuses + Status.where(id: status_ids).find_each do |status| + RemovalWorker.perform_async(status.id) + end + true + end +end |