1
0
mirror of https://github.com/mastodon/mastodon synced 2024-11-25 15:46:24 +09:00
mastodon/app/models/report.rb
Yamagishi Kazutoshi 9613a53cb3 Update dependencies for Ruby (2018-04-23) (#7237)
* Update annotate to version 2.7.3

* Update aws-sdk-s3 to version 1.9.2

* Update browser to version 2.5.3

* Update capistrano to version 3.10.2

* Update domain_name to version 0.5.20180417

* Update http to version 3.2.0

* Update lograge to version 0.10.0

* Update oj to version 3.5.1

* Update parallel_tests to version 2.21.3

* Update puma to version 3.11.4

* Update rubocop to version 0.55.0

* Update scss_lint to version 0.57.0

* Update simplecov to version 0.16.1

* Update tty-command to version 0.8.0

* Update tty-prompt to version 0.16.0

* Update pkg-config to version 1.3.0

* Update fog-local to version 0.5.0

* Update fog-openstack to version 0.1.25

* Update devise-two-factor to version 3.0.3

* bundle update
2018-04-23 11:29:17 +02:00

89 lines
2.4 KiB
Ruby

# frozen_string_literal: true
# == Schema Information
#
# Table name: reports
#
# id :bigint(8) not null, primary key
# status_ids :bigint(8) default([]), not null, is an Array
# comment :text default(""), not null
# action_taken :boolean default(FALSE), not null
# created_at :datetime not null
# updated_at :datetime not null
# account_id :bigint(8) not null
# action_taken_by_account_id :bigint(8)
# target_account_id :bigint(8) not null
# assigned_account_id :bigint(8)
#
class Report < ApplicationRecord
belongs_to :account
belongs_to :target_account, class_name: 'Account'
belongs_to :action_taken_by_account, class_name: 'Account', optional: true
belongs_to :assigned_account, class_name: 'Account', optional: true
has_many :notes, class_name: 'ReportNote', foreign_key: :report_id, inverse_of: :report, dependent: :destroy
scope :unresolved, -> { where(action_taken: false) }
scope :resolved, -> { where(action_taken: true) }
validates :comment, length: { maximum: 1000 }
def object_type
:flag
end
def statuses
Status.where(id: status_ids).includes(:account, :media_attachments, :mentions)
end
def media_attachments
MediaAttachment.where(status_id: status_ids)
end
def assign_to_self!(current_account)
update!(assigned_account_id: current_account.id)
end
def unassign!
update!(assigned_account_id: nil)
end
def resolve!(acting_account)
update!(action_taken: true, action_taken_by_account_id: acting_account.id)
end
def unresolve!
update!(action_taken: false, action_taken_by_account_id: nil)
end
def unresolved?
!action_taken?
end
def history
time_range = created_at..updated_at
sql = [
Admin::ActionLog.where(
target_type: 'Report',
target_id: id,
created_at: time_range
).unscope(:order),
Admin::ActionLog.where(
target_type: 'Account',
target_id: target_account_id,
created_at: time_range
).unscope(:order),
Admin::ActionLog.where(
target_type: 'Status',
target_id: status_ids,
created_at: time_range
).unscope(:order),
].map { |query| "(#{query.to_sql})" }.join(' UNION ALL ')
Admin::ActionLog.from("(#{sql}) AS admin_action_logs")
end
end