In rails 5, belongs_to associations automatically validate that the associated item is present, meaning that we don't need to validate these things manually any more.
103 lines
2.4 KiB
Ruby
103 lines
2.4 KiB
Ruby
class ModAction < ApplicationRecord
|
|
belongs_to :creator, :class_name => "User"
|
|
before_validation :initialize_creator, :on => :create
|
|
|
|
#####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,
|
|
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,
|
|
pool_delete: 62,
|
|
pool_undelete: 63,
|
|
artist_ban: 184,
|
|
artist_unban: 185,
|
|
comment_update: 81,
|
|
comment_delete: 82,
|
|
forum_topic_delete: 202,
|
|
forum_topic_undelete: 203,
|
|
forum_topic_lock: 206,
|
|
forum_post_update: 101,
|
|
forum_post_delete: 102,
|
|
tag_alias_create: 120,
|
|
tag_alias_update: 121,
|
|
tag_implication_create: 140,
|
|
tag_implication_update: 141,
|
|
ip_ban_create: 160,
|
|
ip_ban_delete: 162,
|
|
mass_update: 1000,
|
|
bulk_revert: 1001,
|
|
other: 2000
|
|
}
|
|
|
|
def self.search(params)
|
|
q = super
|
|
|
|
q = q.attribute_matches(:description, params[:description_matches])
|
|
|
|
if params[:creator_id].present?
|
|
q = q.where("creator_id = ?", params[:creator_id].to_i)
|
|
end
|
|
|
|
if params[:creator_name].present?
|
|
q = q.where("creator_id = (select _.id from users _ where lower(_.name) = ?)", params[:creator_name].mb_chars.downcase)
|
|
end
|
|
|
|
if params[:category].present?
|
|
q = q.attribute_matches(:category, params[:category])
|
|
end
|
|
|
|
q.apply_default_order(params)
|
|
end
|
|
|
|
def filtered_description
|
|
if (ip_ban_create? || ip_ban_delete?) && !CurrentUser.user.is_moderator?
|
|
description.gsub(/(created|deleted) ip ban for .*/, "\\1 ip ban")
|
|
else
|
|
description
|
|
end
|
|
end
|
|
|
|
def category_id
|
|
self.class.categories[category]
|
|
end
|
|
|
|
def method_attributes
|
|
super + [:category_id]
|
|
end
|
|
|
|
def serializable_hash(*args)
|
|
super(*args).merge("description" => filtered_description)
|
|
end
|
|
|
|
def self.log(desc, cat = :other)
|
|
create(:description => desc,:category => categories[cat])
|
|
end
|
|
|
|
def initialize_creator
|
|
self.creator_id = CurrentUser.id
|
|
end
|
|
end
|