mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 01:22:36 +08:00
3829c78526
As it stands we load up user records quite frequently on the topic pages, this in turn pulls all the columns for the users being selected, just to discard them after they are loaded New structure keeps all options in a discrete table, this is better organised and allows us to easily add more column without worrying about bloating the user table
37 lines
1.3 KiB
Ruby
37 lines
1.3 KiB
Ruby
module Jobs
|
|
|
|
# A daily job that will enqueue digest emails to be sent to users
|
|
class EnqueueDigestEmails < Jobs::Scheduled
|
|
every 6.hours
|
|
|
|
def execute(args)
|
|
unless SiteSetting.disable_digest_emails?
|
|
target_user_ids.each do |user_id|
|
|
Jobs.enqueue(:user_email, type: :digest, user_id: user_id)
|
|
end
|
|
end
|
|
end
|
|
|
|
def target_user_ids
|
|
# Users who want to receive emails and haven't been emailed in the last day
|
|
query = User.real
|
|
.where(active: true, staged: false)
|
|
.joins(:user_option)
|
|
.not_suspended
|
|
.where(user_options: {email_digests: true})
|
|
.where("COALESCE(last_emailed_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * digest_after_days)")
|
|
.where("COALESCE(last_seen_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * digest_after_days)")
|
|
.where("COALESCE(last_seen_at, '2010-01-01') >= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * #{SiteSetting.delete_digest_email_after_days})")
|
|
|
|
# If the site requires approval, make sure the user is approved
|
|
if SiteSetting.must_approve_users?
|
|
query = query.where("approved OR moderator OR admin")
|
|
end
|
|
|
|
query.pluck(:id)
|
|
end
|
|
|
|
end
|
|
|
|
end
|