Add appeals (#17364)
* Add appeals * Add ability to reject appeals and ability to browse pending appeals in admin UI * Add strikes to account page in settings * Various fixes and improvements - Add separate notification setting for appeals, separate from reports - Fix style of links in report/strike header - Change approving an appeal to not restore statuses (due to federation complexities) - Change style of successfully appealed strikes on account settings page - Change account settings page to only show unappealed or recently appealed strikes * Change appealed_at to overruled_at * Fix missing method error
This commit is contained in:
parent
5be705e1e0
commit
564efd0651
60 changed files with 1212 additions and 93 deletions
58
app/models/appeal.rb
Normal file
58
app/models/appeal.rb
Normal file
|
@ -0,0 +1,58 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: appeals
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# account_id :bigint(8) not null
|
||||
# account_warning_id :bigint(8) not null
|
||||
# text :text default(""), not null
|
||||
# approved_at :datetime
|
||||
# approved_by_account_id :bigint(8)
|
||||
# rejected_at :datetime
|
||||
# rejected_by_account_id :bigint(8)
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
class Appeal < ApplicationRecord
|
||||
belongs_to :account
|
||||
belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id'
|
||||
belongs_to :approved_by_account, class_name: 'Account', optional: true
|
||||
belongs_to :rejected_by_account, class_name: 'Account', optional: true
|
||||
|
||||
validates :text, presence: true, length: { maximum: 2_000 }
|
||||
validates :account_warning_id, uniqueness: true
|
||||
|
||||
validate :validate_time_frame, on: :create
|
||||
|
||||
scope :approved, -> { where.not(approved_at: nil) }
|
||||
scope :rejected, -> { where.not(rejected_at: nil) }
|
||||
scope :pending, -> { where(approved_at: nil, rejected_at: nil) }
|
||||
|
||||
def pending?
|
||||
!approved? && !rejected?
|
||||
end
|
||||
|
||||
def approved?
|
||||
approved_at.present?
|
||||
end
|
||||
|
||||
def rejected?
|
||||
rejected_at.present?
|
||||
end
|
||||
|
||||
def approve!(current_account)
|
||||
update!(approved_at: Time.now.utc, approved_by_account: current_account)
|
||||
end
|
||||
|
||||
def reject!(current_account)
|
||||
update!(rejected_at: Time.now.utc, rejected_by_account: current_account)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def validate_time_frame
|
||||
errors.add(:base, I18n.t('strikes.errors.too_late')) if Time.now.utc > (strike.created_at + 20.days)
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue