| 
									
										
										
										
											2018-02-28 06:54:55 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ReportService < BaseService | 
					
						
							|  |  |  |   def call(source_account, target_account, options = {}) | 
					
						
							|  |  |  |     @source_account = source_account | 
					
						
							|  |  |  |     @target_account = target_account | 
					
						
							|  |  |  |     @status_ids     = options.delete(:status_ids) || [] | 
					
						
							|  |  |  |     @comment        = options.delete(:comment) || '' | 
					
						
							|  |  |  |     @options        = options | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     create_report! | 
					
						
							|  |  |  |     notify_staff! | 
					
						
							|  |  |  |     forward_to_origin! if !@target_account.local? && ActiveModel::Type::Boolean.new.cast(@options[:forward]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @report | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def create_report! | 
					
						
							|  |  |  |     @report = @source_account.reports.create!( | 
					
						
							|  |  |  |       target_account: @target_account, | 
					
						
							|  |  |  |       status_ids: @status_ids, | 
					
						
							| 
									
										
										
										
											2019-03-17 15:34:56 +01:00
										 |  |  |       comment: @comment, | 
					
						
							|  |  |  |       uri: @options[:uri] | 
					
						
							| 
									
										
										
										
											2018-02-28 06:54:55 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def notify_staff! | 
					
						
							| 
									
										
										
										
											2018-09-02 00:11:58 +02:00
										 |  |  |     return if @report.unresolved_siblings? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 06:54:55 +01:00
										 |  |  |     User.staff.includes(:account).each do |u| | 
					
						
							| 
									
										
										
										
											2018-09-02 00:11:58 +02:00
										 |  |  |       next unless u.allows_report_emails? | 
					
						
							| 
									
										
										
										
											2018-02-28 06:54:55 +01:00
										 |  |  |       AdminMailer.new_report(u.account, @report).deliver_later | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def forward_to_origin! | 
					
						
							|  |  |  |     ActivityPub::DeliveryWorker.perform_async( | 
					
						
							|  |  |  |       payload, | 
					
						
							|  |  |  |       some_local_account.id, | 
					
						
							|  |  |  |       @target_account.inbox_url | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def payload | 
					
						
							|  |  |  |     Oj.dump(ActiveModelSerializers::SerializableResource.new( | 
					
						
							|  |  |  |       @report, | 
					
						
							|  |  |  |       serializer: ActivityPub::FlagSerializer, | 
					
						
							|  |  |  |       adapter: ActivityPub::Adapter, | 
					
						
							|  |  |  |       account: some_local_account | 
					
						
							|  |  |  |     ).as_json) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def some_local_account | 
					
						
							| 
									
										
										
										
											2019-01-05 15:17:12 +09:00
										 |  |  |     @some_local_account ||= Account.representative | 
					
						
							| 
									
										
										
										
											2018-02-28 06:54:55 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |