Class: Jobs::PendingUsersReminder

Inherits:
Scheduled show all
Defined in:
app/jobs/scheduled/pending_users_reminder.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
65
66
# File 'app/jobs/scheduled/pending_users_reminder.rb', line 7

def execute(args)
  if SiteSetting.must_approve_users && SiteSetting.pending_users_reminder_delay_minutes >= 0
    query = AdminUserIndexQuery.new(query: "pending", stats: false).find_users_query # default order is: users.created_at DESC
    if SiteSetting.pending_users_reminder_delay_minutes > 0
      query =
        query.where(
          "users.created_at < ?",
          SiteSetting.pending_users_reminder_delay_minutes.minutes.ago,
        )
    end

    newest_username = query.limit(1).select(:username).first&.username

    return true if newest_username == previous_newest_username # already notified

    count = query.count

    if count > 0
      target_usernames =
        Group[:moderators]
          .users
          .map do |user|
            next if user.bot?

            unseen_count =
              user
                .notifications
                .joins(:topic)
                .where("notifications.id > ?", user.seen_notification_id)
                .where("notifications.read = false")
                .where("topics.subtype = ?", TopicSubtype.pending_users_reminder)
                .count

            unseen_count == 0 ? user.username : nil
          end
          .compact

      unless target_usernames.empty?
        PostCreator.create(
          Discourse.system_user,
          target_usernames: target_usernames,
          archetype: Archetype.private_message,
          subtype: TopicSubtype.pending_users_reminder,
          title:
            I18n.t("system_messages.pending_users_reminder.subject_template", count: count),
          raw:
            I18n.t(
              "system_messages.pending_users_reminder.text_body_template",
              count: count,
              base_url: Discourse.base_url,
            ),
        )

        self.previous_newest_username = newest_username
      end
    end
  end

  true
end

#previous_newest_usernameObject



68
69
70
# File 'app/jobs/scheduled/pending_users_reminder.rb', line 68

def previous_newest_username
  Discourse.redis.get previous_newest_username_cache_key
end

#previous_newest_username=(username) ⇒ Object



72
73
74
# File 'app/jobs/scheduled/pending_users_reminder.rb', line 72

def previous_newest_username=(username)
  Discourse.redis.setex previous_newest_username_cache_key, 7.days, username
end

#previous_newest_username_cache_keyObject



76
77
78
# File 'app/jobs/scheduled/pending_users_reminder.rb', line 76

def previous_newest_username_cache_key
  "pending-users-reminder:newest-username"
end