Class: Jobs::EnqueueSuspectUsers

Inherits:
Scheduled show all
Defined in:
app/jobs/scheduled/enqueue_suspect_users.rb

Instance Method Summary collapse

Methods inherited from Scheduled

#perform

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Instance Method Details

#execute(_args) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/jobs/scheduled/enqueue_suspect_users.rb', line 7

def execute(_args)
  return unless SiteSetting.approve_suspect_users
  return if SiteSetting.must_approve_users

  users =
    User
      .distinct
      .activated
      .human_users
      .where(approved: false)
      .joins(:user_profile, :user_stat)
      .where("users.created_at <= ? AND users.created_at >= ?", 1.day.ago, 6.months.ago)
      .where("LENGTH(COALESCE(user_profiles.bio_raw, user_profiles.website, '')) > 0")
      .where(
        "user_stats.posts_read_count <= 1 OR user_stats.topics_entered <= 1 OR user_stats.time_read < ?",
        1.minute.to_i,
      )
      .joins(
        "LEFT OUTER JOIN reviewables r ON r.target_id = users.id AND r.target_type = 'User'",
      )
      .where("r.id IS NULL")
      .joins(<<~SQL)
        LEFT OUTER JOIN (
          SELECT user_id
          FROM user_custom_fields
          WHERE user_custom_fields.name = 'import_id'
        ) AS ucf ON ucf.user_id = users.id
      SQL
      .where("ucf.user_id IS NULL")
      .limit(10)

  users.each do |user|
     = user.

    reviewable =
      ReviewableUser.needs_review!(
        target: user,
        created_by: Discourse.system_user,
        reviewable_by_moderator: true,
        payload: {
          username: user.username,
          name: user.name,
          email: user.email,
          bio: .bio_raw,
          website: .website,
        },
      )

    if reviewable.created_new
      reviewable.add_score(
        Discourse.system_user,
        ReviewableScore.types[:needs_approval],
        reason: :suspect_user,
        force_review: true,
      )
    end
  end
end