2014-06-28 00:26:03 +08:00
module Jobs
2014-09-25 08:19:26 +08:00
class Tl3Promotions < Jobs :: Scheduled
2014-06-28 00:26:03 +08:00
daily at : 4 . hours
def execute ( args )
# Demotions
demoted_user_ids = [ ]
2018-08-25 06:41:03 +08:00
User . real
. joins ( " LEFT JOIN (SELECT gu.user_id, MAX(g.grant_trust_level) AS group_granted_trust_level FROM groups g, group_users gu WHERE g.id = gu.group_id GROUP BY gu.user_id) tl ON users.id = tl.user_id " )
. where (
trust_level : TrustLevel [ 3 ] ,
manual_locked_trust_level : nil
)
. where ( " group_granted_trust_level IS NULL OR group_granted_trust_level < ? " , TrustLevel [ 3 ] )
. find_each do | u |
2014-07-09 05:39:36 +08:00
# Don't demote too soon after being promoted
2014-09-25 08:19:26 +08:00
next if u . on_tl3_grace_period?
2014-07-09 05:39:36 +08:00
2014-09-05 13:20:39 +08:00
if Promotion . tl3_lost? ( u )
2014-06-28 00:26:03 +08:00
demoted_user_ids << u . id
2014-09-05 13:20:39 +08:00
Promotion . new ( u ) . change_trust_level! ( TrustLevel [ 2 ] )
2014-06-28 00:26:03 +08:00
end
end
# Promotions
2018-02-06 06:54:07 +08:00
User . real . not_suspended . where (
trust_level : TrustLevel [ 2 ] ,
2018-08-10 08:42:23 +08:00
manual_locked_trust_level : nil
2018-02-06 06:54:07 +08:00
) . where . not ( id : demoted_user_ids )
. joins ( :user_stat )
. where ( " user_stats.days_visited >= ? " , SiteSetting . tl3_requires_days_visited )
. where ( " user_stats.topic_reply_count >= ? " , SiteSetting . tl3_requires_topics_replied_to )
. where ( " user_stats.topics_entered >= ? " , SiteSetting . tl3_requires_topics_viewed_all_time )
. where ( " user_stats.posts_read_count >= ? " , SiteSetting . tl3_requires_posts_read_all_time )
. where ( " user_stats.likes_given >= ? " , SiteSetting . tl3_requires_likes_given )
. where ( " user_stats.likes_received >= ? " , SiteSetting . tl3_requires_likes_received )
. find_each do | u |
2014-09-05 13:20:39 +08:00
Promotion . new ( u ) . review_tl2
2014-06-28 00:26:03 +08:00
end
2018-02-06 06:54:07 +08:00
2014-06-28 00:26:03 +08:00
end
end
end