FEATURE: More digest email frequency options. Digests can be sent as often as every 30 minutes.

This commit is contained in:
Neil Lalonde
2016-03-02 15:26:27 -05:00
parent be257225b6
commit c1aea91d63
15 changed files with 47 additions and 26 deletions

View File

@@ -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 },

View File

@@ -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'

View File

@@ -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}}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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,