discourse/app/jobs/scheduled/pending_users_reminder.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

69 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require_dependency 'admin_user_index_query'
module Jobs
class PendingUsersReminder < Jobs::Scheduled
every 1.hour
def execute(args)
if SiteSetting.must_approve_users && SiteSetting.pending_users_reminder_delay >= 0
query = AdminUserIndexQuery.new(query: 'pending', stats: false).find_users_query # default order is: users.created_at DESC
if SiteSetting.pending_users_reminder_delay > 0
query = query.where('users.created_at < ?', SiteSetting.pending_users_reminder_delay.hours.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
def previous_newest_username
$redis.get previous_newest_username_cache_key
end
def previous_newest_username=(username)
$redis.setex previous_newest_username_cache_key, 7.days, username
end
def previous_newest_username_cache_key
"pending-users-reminder:newest-username".freeze
end
end
end