about summary refs log tree commit diff
path: root/app/models/form
diff options
context:
space:
mode:
authorabcang <abcang1015@gmail.com>2017-07-18 23:38:22 +0900
committerEugen Rochko <eugen@zeonfederated.com>2017-07-18 16:38:22 +0200
commit4d42a389540690b32886f2a38af1f86aee617d27 (patch)
tree7764542d3e92a977444fb1de17d18cc4d364aa11 /app/models/form
parent8387b3928ec7658192907da79df65e65aaa8a7fc (diff)
Improve admin page (#4121)
* Improve admin page

* Fix test

* Add spec

* Improve select style
Diffstat (limited to 'app/models/form')
-rw-r--r--app/models/form/status_batch.rb39
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