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.
67 lines
2.1 KiB
Ruby
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
|