Files
danbooru/app/models/janitor_trial.rb
Kevin Xiwei Zheng 5082c9ef8c Fix creation of user records after janitor trials
Previously, a negative "demoted from janitor trial" record would
always be created after a janitor trial ended, regardless of whether
or not the user in question was actually demoted or not.  This commit
removes the culprit, an overly aggressive after_destroy callback, and
instead directly invokes user record creation in the "demote!" method.
2013-07-01 21:31:01 -04:00

67 lines
2.1 KiB
Ruby

class JanitorTrial < ActiveRecord::Base
belongs_to :user
before_create :initialize_original_level
after_create :send_dmail
after_create :promote_user
validates_presence_of :user
before_validation :initialize_creator
def self.search(params)
q = scoped
return q if params.blank?
if params[:user_name]
q = q.where("user_id = (select _.id from users _ where lower(_.name) = ?)", params[:user_name].mb_chars.downcase)
end
if params[:user_id]
q = q.where("user_id = ?", params[:user_id].to_i)
end
q
end
def initialize_creator
self.creator_id = CurrentUser.id
end
def initialize_original_level
self.original_level = user.level
end
def user_name
user.try(:name)
end
def user_name=(name)
self.user_id = User.name_to_id(name)
end
def send_dmail
body = "You have been selected as a test janitor. You can now approve pending posts and have access to the moderation interface.\n\nOver the next several weeks your approvals will be monitored. If the majority of them are quality uploads, then you will be promoted to full janitor status which grants you the ability to delete and undelete posts, ban users, and revert tag changes from vandals. If you fail the trial period, you will be demoted back to your original level and you'll receive a negative user record indicating you previously attempted and failed a test janitor trial.\n\nThere is a minimum quota of 5 approvals a week to indicate that you are being active. Remember, the goal isn't to approve as much as possible. It's to filter out borderline-quality art.\n\nIf you have any questions please respond to this message."
Dmail.create_split(:title => "Test Janitor Trial Period", :body => body, :to_id => user_id)
end
def promote_user
user.update_column(:level, User::Levels::JANITOR)
end
def create_feedback
user.feedback.create(
:category => "negative",
:body => "Demoted from janitor trial"
)
end
def promote!
destroy
end
def demote!
user.update_column(:level, original_level)
self.create_feedback
destroy
end
end