work on #2408
This commit is contained in:
29
app/logical/janitor_pruner.rb
Normal file
29
app/logical/janitor_pruner.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
class JanitorPruner
|
||||
def inactive_janitors
|
||||
admin = User.admins.first
|
||||
|
||||
User.where("level = ?", User::Levels::JANITOR).select do |user|
|
||||
approval_count = Post.where("created_at >= ? and approver_id = ?", 2.months.ago, user.id).count
|
||||
approval_count == 0
|
||||
end
|
||||
end
|
||||
|
||||
def prune!
|
||||
inactive_janitors.each do |user|
|
||||
CurrentUser.scoped(admin, "127.0.0.1") do
|
||||
Dmail.create_split(
|
||||
:to_id => user.id,
|
||||
:title => "Janitor inactivity",
|
||||
:body => "You haven't approved a post in the past two months. In order to make sure the list of active janitors is up-to-date, you have lost your janitor privileges. Please reply to this message if you want to be reinstated."
|
||||
)
|
||||
|
||||
janitor_trial = JanitorTrial.where(user_id: user.id).first
|
||||
if janitor_trial
|
||||
user.promote_to!(janitor_trial.original_level, :skip_feedback => true)
|
||||
else
|
||||
user.promote_to!(User::Levels::GOLD, :skip_feedback => true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
6
app/logical/monthly_maintenance.rb
Normal file
6
app/logical/monthly_maintenance.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
class MonthlyMaintenance
|
||||
def run
|
||||
ActiveRecord::Base.connection.execute("set statement_timeout = 0")
|
||||
JanitorTrial.new.message_candidates!
|
||||
end
|
||||
end
|
||||
@@ -2,5 +2,6 @@ class WeeklyMaintenance
|
||||
def run
|
||||
ActiveRecord::Base.connection.execute("set statement_timeout = 0")
|
||||
UserPasswordResetNonce.prune!
|
||||
JanitorPruner.new.prune!
|
||||
end
|
||||
end
|
||||
|
||||
@@ -22,6 +22,27 @@ class JanitorTrial < ActiveRecord::Base
|
||||
q
|
||||
end
|
||||
|
||||
def self.message_candidates!
|
||||
admin = User.admins.first
|
||||
|
||||
User.where("last_logged_in_at >= ? and created_at <= ? and email is not null and favorite_count >= 200 and level between ? and ?", 1.week.ago, 6.months.ago, User::Levels::MEMBER, User::Levels::CONTRIBUTOR).order("random()").limit(5).each do |user|
|
||||
if !Dmail.where("from_id = ? and to_id = ? and title = ?", admin.id, user.id, "Test Janitor Invitation").exists?
|
||||
favorites = user.favorites.order("random()").limit(400)
|
||||
p50 = ActiveRecord::Base.select_value_sql("select percentile_cont(0.50) within group (order by score) from posts where id in (?)", favorites.map(&:post_id)).to_f
|
||||
|
||||
if p50 > 3 and p50 <= 10
|
||||
CurrentUser.scoped(admin, "127.0.0.1") do
|
||||
body = <<-EOS
|
||||
Janitors on #{Danbooru.config.app_name} are responsible for helping maintain a high level of quality on the site. They approve uploads from other users and help with other moderation efforts. You would be expected at a minimum to approve a few posts a week. If you are interested, please respond to this message.
|
||||
EOS
|
||||
|
||||
Dmail.create_split(:title => "Test Janitor Invitation", :body => body, :to_id => user_id, :from_id => admin.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_creator
|
||||
self.creator_id = CurrentUser.id
|
||||
end
|
||||
@@ -39,7 +60,7 @@ class JanitorTrial < ActiveRecord::Base
|
||||
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."
|
||||
body = "You have been selected as a test janitor. You can now approve pending posts and have access to the moderation interface. You should reacquaint yourself with the [[howto:upload]] guide to make sure you understand the site rules.\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 1 approval a month 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
|
||||
|
||||
@@ -19,6 +19,10 @@ every 1.week, :at => "1:30 am" do
|
||||
runner "WeeklyMaintenance.new.run"
|
||||
end
|
||||
|
||||
every 1.month, :at => "2:00 am" do
|
||||
runner "MonthlyMaintenance.new.run"
|
||||
end
|
||||
|
||||
if environment == "production"
|
||||
every 1.hour do
|
||||
runner "AmazonBackup.execute"
|
||||
|
||||
@@ -149,7 +149,7 @@ http_interactions:
|
||||
recorded_at: Fri, 12 Jun 2015 04:57:35 GMT
|
||||
- request:
|
||||
method: post
|
||||
uri: https://ocqPCKeWr01mvWzCIcveJYRTY:8GECMr2Ves7oK3bmAneHYMLSfDPoJvTizh5gSd4pLBNbJfYNz5@api.twitter.com/oauth2/token
|
||||
uri: https://SENSITIVE:SENSITIVE@api.twitter.com/oauth2/token
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: grant_type=client_credentials
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
http_interactions:
|
||||
- request:
|
||||
method: post
|
||||
uri: https://ocqPCKeWr01mvWzCIcveJYRTY:8GECMr2Ves7oK3bmAneHYMLSfDPoJvTizh5gSd4pLBNbJfYNz5@api.twitter.com/oauth2/token
|
||||
uri: https://SENSITIVE:SENSITIVE@api.twitter.com/oauth2/token
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: grant_type=client_credentials
|
||||
|
||||
Reference in New Issue
Block a user