diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index 5ae7433316a..e1199a190d9 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -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}`); }); diff --git a/app/assets/javascripts/discourse/templates/user/preferences.hbs b/app/assets/javascripts/discourse/templates/user/preferences.hbs index eb80ccd418c..d5e4699834d 100644 --- a/app/assets/javascripts/discourse/templates/user/preferences.hbs +++ b/app/assets/javascripts/discourse/templates/user/preferences.hbs @@ -174,8 +174,10 @@
{{combo-box valueAttribute="value" content=digestFrequencies value=model.user_option.digest_after_minutes}}
+ {{preference-checkbox labelKey="user.include_tl0_in_digests" checked=model.user_option.include_tl0_in_digests}} {{/if}} {{/if}} +
{{combo-box valueAttribute="value" content=previousRepliesOptions value=model.user_option.email_previous_replies}} diff --git a/app/models/topic.rb b/app/models/topic.rb index 1db44a557f2..a38c2b2e4e7 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -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)) diff --git a/app/models/user_option.rb b/app/models/user_option.rb index de4ec067a86..715b98e0c7a 100644 --- a/app/models/user_option.rb +++ b/app/models/user_option.rb @@ -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 diff --git a/app/serializers/user_option_serializer.rb b/app/serializers/user_option_serializer.rb index 6a40c7a2609..591b07e457c 100644 --- a/app/serializers/user_option_serializer.rb +++ b/app/serializers/user_option_serializer.rb @@ -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? diff --git a/app/services/user_updater.rb b/app/services/user_updater.rb index 25510fd2507..e7136f74e97 100644 --- a/app/services/user_updater.rb +++ b/app/services/user_updater.rb @@ -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) diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 9d659236727..0ff27a0c40f 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -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" diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 8385c043f3f..6dd216ece36 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -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." diff --git a/config/site_settings.yml b/config/site_settings.yml index b4c4da72b94..dd1e45019a6 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -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 diff --git a/db/migrate/20160317201955_add_include_tl0_in_digests_to_user_options.rb b/db/migrate/20160317201955_add_include_tl0_in_digests_to_user_options.rb new file mode 100644 index 00000000000..512f5d6df5b --- /dev/null +++ b/db/migrate/20160317201955_add_include_tl0_in_digests_to_user_options.rb @@ -0,0 +1,5 @@ +class AddIncludeTl0InDigestsToUserOptions < ActiveRecord::Migration + def change + add_column :user_options, :include_tl0_in_digests, :boolean, default: false + end +end diff --git a/spec/controllers/post_actions_controller_spec.rb b/spec/controllers/post_actions_controller_spec.rb index 4a828893ab5..0a441a0af0e 100644 --- a/spec/controllers/post_actions_controller_spec.rb +++ b/spec/controllers/post_actions_controller_spec.rb @@ -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 diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 6d0e7074e20..e2ae6c0549f 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -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