mod actions: record the subject of the mod action.
Add a polymorphic `subject` field that records the subject of the mod action. The subject is the post, user, comment, artist, etc the mod action is for. * The subject for the user ban and unban actions is the user, not the ban itself. * The subject for the user feedback update and deletion actions is the user, not the feedback itself. * The subject for the post undeletion action is the post, not the approval itself. * The subject for the move favorites action is the source post where the favorites were moved from, not the destination post where the favorites were moved to. * The subject for the post permanent delete action is nil, because the post itself is hard deleted. * When a post is permanently deleted, all mod actions related to the post are deleted as well.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
class ModAction < ApplicationRecord
|
||||
belongs_to :creator, :class_name => "User"
|
||||
belongs_to :subject, polymorphic: true, optional: true
|
||||
|
||||
# ####DIVISIONS#####
|
||||
# Groups: 0-999
|
||||
@@ -70,6 +71,10 @@ class ModAction < ApplicationRecord
|
||||
other: 2000,
|
||||
}
|
||||
|
||||
def self.model_types
|
||||
%w[Artist Comment CommentVote ForumPost ForumTopic IpBan ModerationReport Pool Post PostVote Tag TagAlias TagImplication User UserFeedback]
|
||||
end
|
||||
|
||||
def self.visible(user)
|
||||
if user.is_moderator?
|
||||
all
|
||||
@@ -79,7 +84,7 @@ class ModAction < ApplicationRecord
|
||||
end
|
||||
|
||||
def self.search(params, current_user)
|
||||
q = search_attributes(params, [:id, :created_at, :updated_at, :category, :description, :creator], current_user: current_user)
|
||||
q = search_attributes(params, [:id, :created_at, :updated_at, :category, :description, :creator, :subject], current_user: current_user)
|
||||
|
||||
case params[:order]
|
||||
when "created_at_asc"
|
||||
@@ -95,8 +100,8 @@ class ModAction < ApplicationRecord
|
||||
self.class.categories[category]
|
||||
end
|
||||
|
||||
def self.log(desc, cat = :other, user = CurrentUser.user)
|
||||
create(creator: user, description: desc, category: categories[cat])
|
||||
def self.log(description, category, subject:, user:)
|
||||
create!(description: description, category: category, subject: subject, creator: user)
|
||||
end
|
||||
|
||||
def self.available_includes
|
||||
|
||||
Reference in New Issue
Block a user