FEATURE: add option to include topics from trust level 0 users in digest emails

This commit is contained in:
Neil Lalonde 2016-03-17 17:35:23 -04:00
parent 9b77a1a36c
commit 213950e4cf
12 changed files with 32 additions and 5 deletions

View file

@ -168,7 +168,8 @@ const User = RestModel.extend({
'digest_after_minutes',
'new_topic_duration_minutes',
'auto_track_topics_after_msecs',
'like_notification_frequency'
'like_notification_frequency',
'include_tl0_in_digests'
].forEach(s => {
data[s] = this.get(`user_option.${s}`);
});

View file

@ -174,8 +174,10 @@
<div class='controls controls-dropdown'>
{{combo-box valueAttribute="value" content=digestFrequencies value=model.user_option.digest_after_minutes}}
</div>
{{preference-checkbox labelKey="user.include_tl0_in_digests" checked=model.user_option.include_tl0_in_digests}}
{{/if}}
{{/if}}
<br/>
<div class='controls controls-dropdown'>
<label>{{i18n 'user.email_previous_replies.title'}}</label>
{{combo-box valueAttribute="value" content=previousRepliesOptions value=model.user_option.email_previous_replies}}

View file

@ -314,11 +314,14 @@ class Topic < ActiveRecord::Base
.joins("LEFT OUTER JOIN users ON users.id = topics.user_id")
.where(closed: false, archived: false)
.where("COALESCE(topic_users.notification_level, 1) <> ?", TopicUser.notification_levels[:muted])
.where("COALESCE(users.trust_level, 0) > 0")
.created_since(since)
.listable_topics
.includes(:category)
unless user.user_option.try(:include_tl0_in_digests)
topics = topics.where("COALESCE(users.trust_level, 0) > 0")
end
if !!opts[:top_order]
topics = topics.joins("LEFT OUTER JOIN top_topics ON top_topics.topic_id = topics.id")
.order(TopicQuerySQL.order_top_for(score))

View file

@ -49,6 +49,8 @@ class UserOption < ActiveRecord::Base
self.digest_after_minutes ||= SiteSetting.default_email_digest_frequency.to_i
end
self.include_tl0_in_digests = SiteSetting.default_include_tl0_in_digests
true
end

View file

@ -16,7 +16,8 @@ class UserOptionSerializer < ApplicationSerializer
:new_topic_duration_minutes,
:email_previous_replies,
:email_in_reply_to,
:like_notification_frequency
:like_notification_frequency,
:include_tl0_in_digests
def include_edit_history_public?

View file

@ -23,7 +23,8 @@ class UserUpdater
:auto_track_topics_after_msecs,
:email_previous_replies,
:email_in_reply_to,
:like_notification_frequency
:like_notification_frequency,
:include_tl0_in_digests
]
def initialize(actor, user)

View file

@ -652,6 +652,7 @@ en:
weekly: "weekly"
every_two_weeks: "every two weeks"
include_tl0_in_digests: "Include posts from new users in digest emails"
email_in_reply_to: "Include an excerpt of replied to post in emails"
email_direct: "Send me an email when someone quotes me, replies to my post, mentions my @username, or invites me to a topic"
email_private_messages: "Send me an email when someone messages me"

View file

@ -1267,6 +1267,7 @@ en:
notify_about_queued_posts_after: "If there are posts that have been waiting to be reviewed for more than this many hours, an email will be sent to the contact email. Set to 0 to disable these emails."
default_email_digest_frequency: "How often users receive digest emails by default."
default_include_tl0_in_digests: "Include posts from new users in digest emails by default. Users can change this in their preferences."
default_email_private_messages: "Send an email when someone messages the user by default."
default_email_direct: "Send an email when someone quotes/replies to/mentions or invites the user by default."
default_email_mailing_list_mode: "Send an email for every new post by default."

View file

@ -1085,6 +1085,7 @@ user_preferences:
default_email_digest_frequency:
enum: 'DigestEmailSiteSetting'
default: 10080
default_include_tl0_in_digests: false
default_email_private_messages: true
default_email_direct: true
default_email_mailing_list_mode: false

View file

@ -0,0 +1,5 @@
class AddIncludeTl0InDigestsToUserOptions < ActiveRecord::Migration
def change
add_column :user_options, :include_tl0_in_digests, :boolean, default: false
end
end

View file

@ -17,7 +17,6 @@ describe PostActionsController do
PostAction.expects(:act).once.raises(RateLimiter::LimitExceeded.new(60, 'create_like'))
expect(-> {
xhr :post, :create, id: @post.id, post_action_type_id: PostActionType.types[:like]
puts response.success?
}).to change(UserHistory, :count).by(1)
end
end

View file

@ -1303,6 +1303,16 @@ describe Topic do
expect(Topic.for_digest(user, 1.year.ago, top_order: true)).to be_blank
end
it "returns topics from TL0 users if enabled in preferences" do
new_user = Fabricate(:user, trust_level: 0)
topic = Fabricate(:topic, user_id: new_user.id)
u = Fabricate(:user)
u.user_option.include_tl0_in_digests = true
expect(Topic.for_digest(u, 1.year.ago, top_order: true)).to eq([topic])
end
end
describe 'secured' do