| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Form::StatusBatch | 
					
						
							|  |  |  |   include ActiveModel::Model | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  |   include AccountableConcern | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  |   attr_accessor :status_ids, :action, :current_account | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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) | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |     ApplicationRecord.transaction do | 
					
						
							| 
									
										
										
										
											2018-08-21 12:25:50 +02:00
										 |  |  |       Status.where(id: media_attached_status_ids).reorder(nil).find_each do |status| | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |         status.update!(sensitive: sensitive) | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  |         log_action :update, status | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |     true | 
					
						
							|  |  |  |   rescue ActiveRecord::RecordInvalid | 
					
						
							|  |  |  |     false | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def delete_statuses | 
					
						
							| 
									
										
										
										
											2018-08-21 12:25:50 +02:00
										 |  |  |     Status.where(id: status_ids).reorder(nil).find_each do |status| | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |       RemovalWorker.perform_async(status.id) | 
					
						
							| 
									
										
										
										
											2019-05-10 05:03:03 +09:00
										 |  |  |       Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true) | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  |       log_action :destroy, status | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-11-24 02:05:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 23:38:22 +09:00
										 |  |  |     true | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |