mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: New 'Reviewable' model to make reviewable items generic
Includes support for flags, reviewable users and queued posts, with REST API backwards compatibility. Co-Authored-By: romanrizzi <romanalejandro@gmail.com> Co-Authored-By: jjaffeux <j.jaffeux@gmail.com>
This commit is contained in:
@@ -22,47 +22,37 @@ class SpamRule::AutoSilence
|
||||
return false if @user.staged?
|
||||
return false if @user.has_trust_level?(TrustLevel[1])
|
||||
|
||||
if SiteSetting.num_spam_flags_to_silence_new_user > 0 &&
|
||||
if SiteSetting.spam_score_to_silence_new_user > 0 &&
|
||||
SiteSetting.num_users_to_silence_new_user > 0 &&
|
||||
num_spam_flags_against_user >= SiteSetting.num_spam_flags_to_silence_new_user &&
|
||||
num_users_who_flagged_spam_against_user >= SiteSetting.num_users_to_silence_new_user
|
||||
return true
|
||||
end
|
||||
|
||||
if SiteSetting.num_tl3_flags_to_silence_new_user > 0 &&
|
||||
SiteSetting.num_tl3_users_to_silence_new_user > 0 &&
|
||||
num_tl3_flags_against_user >= SiteSetting.num_tl3_flags_to_silence_new_user &&
|
||||
num_tl3_users_who_flagged >= SiteSetting.num_tl3_users_to_silence_new_user
|
||||
user_spam_stats.total_spam_score >= SiteSetting.spam_score_to_silence_new_user &&
|
||||
user_spam_stats.spam_user_count >= SiteSetting.num_users_to_silence_new_user
|
||||
return true
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
def num_spam_flags_against_user
|
||||
Post.where(user_id: @user.id).sum(:spam_count)
|
||||
end
|
||||
def user_spam_stats
|
||||
return @user_spam_stats if @user_spam_stats
|
||||
|
||||
def num_users_who_flagged_spam_against_user
|
||||
post_ids = Post.where('user_id = ? and spam_count > 0', @user.id).pluck(:id)
|
||||
return 0 if post_ids.empty?
|
||||
PostAction.spam_flags.where(post_id: post_ids).pluck(:user_id).uniq.size
|
||||
end
|
||||
params = {
|
||||
user_id: @user.id,
|
||||
spam_type: PostActionType.types[:spam],
|
||||
pending: ReviewableScore.statuses[:pending],
|
||||
agreed: ReviewableScore.statuses[:agreed]
|
||||
}
|
||||
|
||||
def num_tl3_flags_against_user
|
||||
if flagged_post_ids.empty?
|
||||
0
|
||||
else
|
||||
PostAction.where(post_id: flagged_post_ids).joins(:user).where('users.trust_level >= ?', 3).count
|
||||
end
|
||||
end
|
||||
result = DB.query(<<~SQL, params)
|
||||
SELECT COALESCE(SUM(rs.score), 0) AS total_spam_score,
|
||||
COUNT(DISTINCT rs.user_id) AS spam_user_count
|
||||
FROM reviewables AS r
|
||||
INNER JOIN reviewable_scores AS rs ON rs.reviewable_id = r.id
|
||||
WHERE r.target_created_by_id = :user_id
|
||||
AND rs.reviewable_score_type = :spam_type
|
||||
AND rs.status IN (:pending, :agreed)
|
||||
SQL
|
||||
|
||||
def num_tl3_users_who_flagged
|
||||
if flagged_post_ids.empty?
|
||||
0
|
||||
else
|
||||
PostAction.where(post_id: flagged_post_ids).joins(:user).where('users.trust_level >= ?', 3).pluck(:user_id).uniq.size
|
||||
end
|
||||
@user_spam_stats = result[0]
|
||||
end
|
||||
|
||||
def flagged_post_ids
|
||||
|
||||
Reference in New Issue
Block a user