- The only string works much the same as before with its comma separation -- Nested includes are indicated with square brackets "[ ]" -- The nested include is the value immediately preceding the square brackets -- The only string is the comma separated string inside those brackets - Default includes are split between format types when necessary -- This prevents unnecessary includes from being added on page load - Available includes are those items which are allowed to be accessible to the user -- Some aren't because they are sensitive, such as the creator of a flag -- Some aren't because the number of associated items is too large - The amount of times the same model can be included to prevent recursions -- One exception is the root model may include the same model once --- e.g. the user model can include the inviter which is also the user model -- Another exception is if the include is a has_many association --- e.g. artist urls can include the artist, and then artist urls again
48 lines
1.2 KiB
Ruby
48 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_status_locked?
|
|
errors.add(:post, "is locked and cannot be approved")
|
|
end
|
|
|
|
if post.status == "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.approved_by?(user)
|
|
errors.add(:base, "You have previously approved this post and cannot approve it again")
|
|
end
|
|
end
|
|
|
|
def approve_post
|
|
is_undeletion = post.is_deleted
|
|
|
|
post.flags.each(&:resolve!)
|
|
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!(post, incremental: !is_undeletion)
|
|
end
|
|
|
|
def self.search(params)
|
|
q = super
|
|
q = q.search_attributes(params, :user, :post)
|
|
q.apply_default_order(params)
|
|
end
|
|
|
|
def self.available_includes
|
|
[:user, :post]
|
|
end
|
|
end
|