diff options
author | abcang <abcang1015@gmail.com> | 2017-07-18 23:38:22 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-07-18 16:38:22 +0200 |
commit | 4d42a389540690b32886f2a38af1f86aee617d27 (patch) | |
tree | 7764542d3e92a977444fb1de17d18cc4d364aa11 /app/models | |
parent | 8387b3928ec7658192907da79df65e65aaa8a7fc (diff) |
Improve admin page (#4121)
* Improve admin page * Fix test * Add spec * Improve select style
Diffstat (limited to 'app/models')
-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 |