FEATURE:'No Echo' option for mailing list mode.
Mailing list mode now includes the 'no echo' option: to only receive emails of posts not created by you. If you reply to an email thread in mailing list mode, your reply will not then be echoed back to you in a duplicate email by the system.
This commit is contained in:
parent
9f7b529495
commit
aee943486a
|
@ -79,7 +79,8 @@ export default Ember.Controller.extend(CanCheckEmails, {
|
|||
mailingListModeOptions() {
|
||||
return [
|
||||
{name: I18n.t('user.mailing_list_mode.daily'), value: 0},
|
||||
{name: this.get('frequencyEstimate'), value: 1}
|
||||
{name: this.get('frequencyEstimate'), value: 1},
|
||||
{name: I18n.t('user.mailing_list_mode.individual_no_echo'), value: 2}
|
||||
];
|
||||
},
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ module Jobs
|
|||
users =
|
||||
User.activated.not_blocked.not_suspended.real
|
||||
.joins(:user_option)
|
||||
.where(user_options: {mailing_list_mode: true, mailing_list_mode_frequency: 1})
|
||||
.where('user_options.mailing_list_mode AND user_options.mailing_list_mode_frequency > 0')
|
||||
.where('NOT EXISTS(
|
||||
SELECT 1
|
||||
FROM topic_users tu
|
||||
|
@ -46,6 +46,11 @@ module Jobs
|
|||
next
|
||||
end
|
||||
|
||||
if (user.id == post.user_id) && (user.user_option.mailing_list_mode_frequency == 2)
|
||||
skip(user.email, user.id, post.id, I18n.t('email_log.no_echo_mailing_list_mode'))
|
||||
next
|
||||
end
|
||||
|
||||
begin
|
||||
if message = UserNotifications.mailing_list_notify(user, post)
|
||||
EmailLog.unique_email_per_post(post, user) do
|
||||
|
|
|
@ -103,7 +103,7 @@ module Jobs
|
|||
end
|
||||
|
||||
if user.user_option.mailing_list_mode? &&
|
||||
user.user_option.mailing_list_mode_frequency == 1 && # don't catch notifications for users on daily mailing list mode
|
||||
user.user_option.mailing_list_mode_frequency > 0 && # don't catch notifications for users on daily mailing list mode
|
||||
(!post.try(:topic).try(:private_message?)) &&
|
||||
NOTIFICATIONS_SENT_BY_MAILING_LIST.include?(email_args[:notification_type])
|
||||
# no need to log a reason when the mail was already sent via the mailing list job
|
||||
|
|
|
@ -9,7 +9,8 @@ class MailingListModeSiteSetting < EnumSiteSetting
|
|||
def self.values
|
||||
@values ||= [
|
||||
{ name: 'user.mailing_list_mode.daily', value: 0 },
|
||||
{ name: 'user.mailing_list_mode.individual', value: 1 }
|
||||
{ name: 'user.mailing_list_mode.individual', value: 1 },
|
||||
{ name: 'user.mailing_list_mode.individual_no_echo', value: 2 }
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
@ -535,6 +535,7 @@ en:
|
|||
Muted topics and categories are not included in these emails.
|
||||
daily: "Send daily updates"
|
||||
individual: "Send an email for every new post"
|
||||
individual_no_echo: "Send an email for every new post except my own"
|
||||
many_per_day: "Send me an email for every new post (about {{dailyEmailEstimate}} per day)"
|
||||
few_per_day: "Send me an email for every new post (about 2 per day)"
|
||||
tag_settings: "Tags"
|
||||
|
|
|
@ -2614,6 +2614,7 @@ en:
|
|||
message_to_blank: "message.to is blank"
|
||||
text_part_body_blank: "text_part.body is blank"
|
||||
body_blank: "body is blank"
|
||||
no_echo_mailing_list_mode: "Mailing list notifications disabled for user's own posts"
|
||||
|
||||
color_schemes:
|
||||
base_theme_name: "Base"
|
||||
|
|
|
@ -82,6 +82,11 @@ describe Jobs::EnqueueMailingListEmails do
|
|||
expect(subject).to_not include user.id
|
||||
end
|
||||
|
||||
it "doesn't return users with mailing list mode set to 'individual_excluding_own'" do
|
||||
user_option.update(mailing_list_mode_frequency: 2)
|
||||
expect(subject).to_not include user.id
|
||||
end
|
||||
|
||||
it "doesn't return a user who has received the mailing list summary earlier" do
|
||||
user.update(first_seen_at: 5.hours.ago)
|
||||
expect(subject).to_not include user.id
|
||||
|
|
|
@ -47,9 +47,15 @@ describe Jobs::NotifyMailingListSubscribers do
|
|||
end
|
||||
end
|
||||
|
||||
context "with a valid post" do
|
||||
context "with a valid post authored by same user" do
|
||||
let!(:post) { Fabricate(:post, user: user) }
|
||||
|
||||
it "doesn't send the email to the user if the frequency is set to 'always with no echo'" do
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 2)
|
||||
UserNotifications.expects(:mailing_list_notify).never
|
||||
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
||||
end
|
||||
|
||||
it "sends the email to the user if the frequency is set to 'always'" do
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 1)
|
||||
UserNotifications.expects(:mailing_list_notify).with(user, post).once
|
||||
|
@ -63,6 +69,28 @@ describe Jobs::NotifyMailingListSubscribers do
|
|||
end
|
||||
end
|
||||
|
||||
context "with a valid post created by someone other than the user" do
|
||||
let!(:post) { Fabricate(:post, user: user, user_id: 'different') }
|
||||
|
||||
it "sends the email to the user if the frequency is set to 'always with no echo'" do
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 2)
|
||||
UserNotifications.expects(:mailing_list_notify).once
|
||||
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
||||
end
|
||||
|
||||
it "sends the email to the user if the frequency is set to 'always'" do
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 1)
|
||||
UserNotifications.expects(:mailing_list_notify).once
|
||||
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
||||
end
|
||||
|
||||
it "does not send the email to the user if the frequency is set to 'daily'" do
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 0)
|
||||
UserNotifications.expects(:mailing_list_notify).never
|
||||
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
||||
end
|
||||
end
|
||||
|
||||
context "with a deleted post" do
|
||||
let!(:post) { Fabricate(:post, user: user, deleted_at: Time.now) }
|
||||
|
||||
|
|
|
@ -240,6 +240,21 @@ describe Jobs::UserEmail do
|
|||
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id)
|
||||
end
|
||||
|
||||
it "doesn't send the mail if the user is using individual mailing list mode with no echo" do
|
||||
Email::Sender.any_instance.expects(:send).never
|
||||
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 2)
|
||||
# sometimes, we pass the notification_id
|
||||
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_id: notification.id, post_id: post.id)
|
||||
# other times, we only pass the type of notification
|
||||
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id)
|
||||
# When post is nil
|
||||
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted")
|
||||
# When post does not have a topic
|
||||
post = Fabricate(:post)
|
||||
post.topic.destroy
|
||||
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id)
|
||||
end
|
||||
|
||||
it "doesn't send the email if the post has been user deleted" do
|
||||
Email::Sender.any_instance.expects(:send).never
|
||||
post.update_column(:user_deleted, true)
|
||||
|
|
Loading…
Reference in New Issue