mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: allow TL3 promotions for overturned penalties
Restore tl3 reachability by calculating penalty counts vs unsuspend/unsilence. Only count unsuspend or unsilences that have been made by a user other than the Discourse system user.
This commit is contained in:
@@ -104,18 +104,33 @@ class TrustLevel3Requirements
|
||||
def penalty_counts
|
||||
args = {
|
||||
user_id: @user.id,
|
||||
system_user_id: Discourse.system_user.id,
|
||||
silence_user: UserHistory.actions[:silence_user],
|
||||
unsilence_user: UserHistory.actions[:unsilence_user],
|
||||
suspend_user: UserHistory.actions[:suspend_user],
|
||||
unsuspend_user: UserHistory.actions[:unsuspend_user],
|
||||
since: FORGIVENESS_PERIOD.ago
|
||||
}
|
||||
|
||||
sql = <<~SQL
|
||||
SELECT
|
||||
SUM(CASE WHEN action = :silence_user THEN 1 ELSE 0 END) AS silence_count,
|
||||
SUM(CASE WHEN action = :suspend_user THEN 1 ELSE 0 END) AS suspend_count
|
||||
SUM(
|
||||
CASE
|
||||
WHEN action = :silence_user THEN 1
|
||||
WHEN action = :unsilence_user AND acting_user_id != :system_user_id THEN -1
|
||||
ELSE 0
|
||||
END
|
||||
) AS silence_count,
|
||||
SUM(
|
||||
CASE
|
||||
WHEN action = :suspend_user THEN 1
|
||||
WHEN action = :unsuspend_user AND acting_user_id != :system_user_id THEN -1
|
||||
ELSE 0
|
||||
END
|
||||
) AS suspend_count
|
||||
FROM user_histories AS uh
|
||||
WHERE uh.target_user_id = :user_id
|
||||
AND uh.action IN (:silence_user, :suspend_user)
|
||||
AND uh.action IN (:silence_user, :suspend_user, :unsilence_user, :unsuspend_user)
|
||||
AND uh.created_at > :since
|
||||
SQL
|
||||
|
||||
|
||||
Reference in New Issue
Block a user