Allow admins to delete media asset files. This only deletes the image file itself, not the upload or media asset record. The upload will still be in the user's upload list, but the image will be gone. The media asset page will still exist, but it will only show the file's metadata, not the image itself. We don't delete the metadata so we have a record of what the file's MD5 was and who uploaded it, to prevent the file from being uploaded again and to take action against the user if necessary.
111 lines
2.8 KiB
Ruby
111 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ModAction < ApplicationRecord
|
|
belongs_to :creator, :class_name => "User"
|
|
belongs_to :subject, polymorphic: true, optional: true
|
|
|
|
# ####DIVISIONS#####
|
|
# Groups: 0-999
|
|
# Individual: 1000-1999
|
|
# ####Actions#####
|
|
# Create: 0
|
|
# Update: 1
|
|
# Delete: 2
|
|
# Undelete: 3
|
|
# Ban: 4
|
|
# Unban: 5
|
|
# Misc: 6-19
|
|
enum category: {
|
|
user_delete: 2,
|
|
user_ban: 4,
|
|
user_unban: 5,
|
|
user_name_change: 6,
|
|
user_level_change: 7,
|
|
user_approval_privilege: 8,
|
|
user_upload_privilege: 9,
|
|
user_account_upgrade: 19, # XXX unused
|
|
user_feedback_update: 21,
|
|
user_feedback_delete: 22,
|
|
post_delete: 42,
|
|
post_undelete: 43,
|
|
post_ban: 44,
|
|
post_unban: 45,
|
|
post_permanent_delete: 46,
|
|
post_move_favorites: 47,
|
|
post_regenerate: 48,
|
|
post_regenerate_iqdb: 49,
|
|
post_note_lock_create: 210,
|
|
post_note_lock_delete: 212,
|
|
post_rating_lock_create: 220,
|
|
post_rating_lock_delete: 222,
|
|
post_vote_delete: 232,
|
|
post_vote_undelete: 233,
|
|
pool_delete: 62,
|
|
pool_undelete: 63,
|
|
media_asset_delete: 72,
|
|
media_asset_expunge: 76,
|
|
artist_ban: 184,
|
|
artist_unban: 185,
|
|
comment_update: 81,
|
|
comment_delete: 82,
|
|
comment_vote_delete: 92,
|
|
comment_vote_undelete: 93,
|
|
forum_topic_delete: 202,
|
|
forum_topic_undelete: 203,
|
|
forum_topic_lock: 206,
|
|
forum_post_update: 101,
|
|
forum_post_delete: 102,
|
|
moderation_report_handled: 306,
|
|
moderation_report_rejected: 307,
|
|
tag_alias_create: 120,
|
|
tag_alias_update: 121, # XXX unused
|
|
tag_alias_delete: 122,
|
|
tag_implication_create: 140,
|
|
tag_implication_update: 141, # XXX unused
|
|
tag_implication_delete: 142,
|
|
tag_deprecate: 240,
|
|
tag_undeprecate: 242,
|
|
ip_ban_create: 160,
|
|
ip_ban_delete: 162,
|
|
ip_ban_undelete: 163,
|
|
mass_update: 1000, # XXX unused
|
|
}
|
|
|
|
def self.model_types
|
|
%w[Artist Comment CommentVote ForumPost ForumTopic IpBan ModerationReport Pool Post PostVote Tag TagAlias TagImplication User]
|
|
end
|
|
|
|
def self.visible(user)
|
|
if user.is_moderator?
|
|
all
|
|
else
|
|
where.not(category: [:ip_ban_create, :ip_ban_delete, :ip_ban_undelete, :moderation_report_handled, :moderation_report_rejected])
|
|
end
|
|
end
|
|
|
|
def self.search(params, 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"
|
|
q = q.order(created_at: :asc, id: :asc)
|
|
else
|
|
q = q.apply_default_order(params)
|
|
end
|
|
|
|
q
|
|
end
|
|
|
|
def category_id
|
|
self.class.categories[category]
|
|
end
|
|
|
|
def self.log(description, category, subject:, user:)
|
|
create!(description: description, category: category, subject: subject, creator: user)
|
|
end
|
|
|
|
def self.available_includes
|
|
[:creator]
|
|
end
|
|
end
|