mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: More digest email frequency options. Digests can be sent as often as every 30 minutes.
This commit is contained in:
@@ -68,10 +68,12 @@ export default Ember.Controller.extend(CanCheckEmails, {
|
||||
{name: I18n.t('user.email_previous_replies.never'), value: 2}
|
||||
],
|
||||
|
||||
digestFrequencies: [{ name: I18n.t('user.email_digests.daily'), value: 1 },
|
||||
{ name: I18n.t('user.email_digests.every_three_days'), value: 3 },
|
||||
{ name: I18n.t('user.email_digests.weekly'), value: 7 },
|
||||
{ name: I18n.t('user.email_digests.every_two_weeks'), value: 14 }],
|
||||
digestFrequencies: [{ name: I18n.t('user.email_digests.every_30_minutes'), value: 30 },
|
||||
{ name: I18n.t('user.email_digests.every_hour'), value: 60 },
|
||||
{ name: I18n.t('user.email_digests.daily'), value: 1440 },
|
||||
{ name: I18n.t('user.email_digests.every_three_days'), value: 4320 },
|
||||
{ name: I18n.t('user.email_digests.weekly'), value: 10080 },
|
||||
{ name: I18n.t('user.email_digests.every_two_weeks'), value: 20160 }],
|
||||
|
||||
likeNotificationFrequencies: [{ name: I18n.t('user.like_notification_frequency.always'), value: 0 },
|
||||
{ name: I18n.t('user.like_notification_frequency.first_time_and_daily'), value: 1 },
|
||||
|
||||
@@ -165,7 +165,7 @@ const User = RestModel.extend({
|
||||
'enable_quoting',
|
||||
'disable_jump_reply',
|
||||
'automatically_unpin_topics',
|
||||
'digest_after_days',
|
||||
'digest_after_minutes',
|
||||
'new_topic_duration_minutes',
|
||||
'auto_track_topics_after_msecs',
|
||||
'like_notification_frequency'
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
{{preference-checkbox labelKey="user.email_digests.title" checked=model.user_option.email_digests}}
|
||||
{{#if model.user_option.email_digests}}
|
||||
<div class='controls controls-dropdown'>
|
||||
{{combo-box valueAttribute="value" content=digestFrequencies value=model.user_option.digest_after_days}}
|
||||
{{combo-box valueAttribute="value" content=digestFrequencies value=model.user_option.digest_after_minutes}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
@@ -2,7 +2,7 @@ module Jobs
|
||||
|
||||
# A daily job that will enqueue digest emails to be sent to users
|
||||
class EnqueueDigestEmails < Jobs::Scheduled
|
||||
every 6.hours
|
||||
every 30.minutes
|
||||
|
||||
def execute(args)
|
||||
unless SiteSetting.disable_digest_emails?
|
||||
@@ -13,14 +13,14 @@ module Jobs
|
||||
end
|
||||
|
||||
def target_user_ids
|
||||
# Users who want to receive emails and haven't been emailed in the last day
|
||||
# Users who want to receive digest email within their chosen digest email frequency
|
||||
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 * user_options.digest_after_days)")
|
||||
.where("COALESCE(last_seen_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * user_options.digest_after_days)")
|
||||
.where("COALESCE(last_emailed_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * user_options.digest_after_minutes)")
|
||||
.where("COALESCE(last_seen_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * user_options.digest_after_minutes)")
|
||||
.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
|
||||
|
||||
@@ -10,10 +10,12 @@ class DigestEmailSiteSetting < EnumSiteSetting
|
||||
def self.values
|
||||
@values ||= [
|
||||
{ name: 'never', value: 0 },
|
||||
{ name: 'daily', value: 1 },
|
||||
{ name: 'every_three_days', value: 3 },
|
||||
{ name: 'weekly', value: 7 },
|
||||
{ name: 'every_two_weeks', value: 14 }
|
||||
{ name: 'every_30_minutes', value: 30 },
|
||||
{ name: 'every_hour', value: 60 },
|
||||
{ name: 'daily', value: 1440 },
|
||||
{ name: 'every_three_days', value: 4320 },
|
||||
{ name: 'weekly', value: 10080 },
|
||||
{ name: 'every_two_weeks', value: 20160 }
|
||||
]
|
||||
end
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class UserOption < ActiveRecord::Base
|
||||
self.email_digests = false
|
||||
else
|
||||
self.email_digests = true
|
||||
self.digest_after_days ||= SiteSetting.default_email_digest_frequency.to_i
|
||||
self.digest_after_minutes ||= SiteSetting.default_email_digest_frequency.to_i
|
||||
end
|
||||
|
||||
true
|
||||
@@ -127,7 +127,7 @@ end
|
||||
# disable_jump_reply :boolean default(FALSE), not null
|
||||
# edit_history_public :boolean default(FALSE), not null
|
||||
# automatically_unpin_topics :boolean default(TRUE), not null
|
||||
# digest_after_days :integer
|
||||
# digest_after_minutes :integer
|
||||
# auto_track_topics_after_msecs :integer
|
||||
# new_topic_duration_minutes :integer
|
||||
# last_redirected_to_top_at :datetime
|
||||
|
||||
@@ -9,7 +9,7 @@ class UserOptionSerializer < ApplicationSerializer
|
||||
:dynamic_favicon,
|
||||
:enable_quoting,
|
||||
:disable_jump_reply,
|
||||
:digest_after_days,
|
||||
:digest_after_minutes,
|
||||
:automatically_unpin_topics,
|
||||
:edit_history_public,
|
||||
:auto_track_topics_after_msecs,
|
||||
|
||||
@@ -18,7 +18,7 @@ class UserUpdater
|
||||
:disable_jump_reply,
|
||||
:edit_history_public,
|
||||
:automatically_unpin_topics,
|
||||
:digest_after_days,
|
||||
:digest_after_minutes,
|
||||
:new_topic_duration_minutes,
|
||||
:auto_track_topics_after_msecs,
|
||||
:email_previous_replies,
|
||||
|
||||
Reference in New Issue
Block a user