Remove the ability for users to lock ratings, note, and post statuses. Historically the majority of locked posts were from 10+ years ago when certain users habitually locked ratings and notes on every post they touched for no reason. Nowadays most posts have been unlocked. Only a handful of locked posts are left, none of which deserve to be locked. The is_rating_locked, is_note_locked, and is_status_locked columns still exist in the database, but aren't used.
46 lines
1.2 KiB
Ruby
46 lines
1.2 KiB
Ruby
class PostApproval < ApplicationRecord
|
|
belongs_to :user
|
|
belongs_to :post, inverse_of: :approvals
|
|
|
|
validate :validate_approval
|
|
after_create :approve_post
|
|
|
|
def validate_approval
|
|
post.lock!
|
|
|
|
if post.is_active?
|
|
errors.add(:post, "is already active and cannot be approved")
|
|
end
|
|
|
|
if post.uploader == user
|
|
errors.add(:base, "You cannot approve a post you uploaded")
|
|
end
|
|
|
|
if post.approver == user || post.approvals.exists?(user: user)
|
|
errors.add(:base, "You have previously approved this post and cannot approve it again")
|
|
end
|
|
end
|
|
|
|
def approve_post
|
|
is_pending = post.is_pending
|
|
is_undeletion = post.is_deleted
|
|
|
|
post.flags.pending.update!(status: :rejected)
|
|
post.appeals.pending.update!(status: :succeeded)
|
|
|
|
post.update(approver: user, is_flagged: false, is_pending: false, is_deleted: false)
|
|
ModAction.log("undeleted post ##{post_id}", :post_undelete) if is_undeletion
|
|
|
|
post.uploader.upload_limit.update_limit!(is_pending, true)
|
|
end
|
|
|
|
def self.search(params)
|
|
q = search_attributes(params, :id, :created_at, :updated_at, :user, :post)
|
|
q.apply_default_order(params)
|
|
end
|
|
|
|
def self.available_includes
|
|
[:user, :post]
|
|
end
|
|
end
|