diff --git a/app/assets/javascripts/discourse/templates/user/preferences.hbs b/app/assets/javascripts/discourse/templates/user/preferences.hbs index b2fd4443d..eb80ccd41 100644 --- a/app/assets/javascripts/discourse/templates/user/preferences.hbs +++ b/app/assets/javascripts/discourse/templates/user/preferences.hbs @@ -183,7 +183,9 @@ {{preference-checkbox labelKey="user.email_in_reply_to" checked=model.user_option.email_in_reply_to}} {{preference-checkbox labelKey="user.email_private_messages" checked=model.user_option.email_private_messages}} {{preference-checkbox labelKey="user.email_direct" checked=model.user_option.email_direct}} - <span class="pref-mailing-list-mode">{{preference-checkbox labelKey="user.mailing_list_mode" checked=model.user_option.mailing_list_mode}}</span> + {{#unless siteSettings.disable_mailing_list_mode}} + {{preference-checkbox labelKey="user.mailing_list_mode" checked=model.user_option.mailing_list_mode}} + {{/unless}} {{preference-checkbox labelKey="user.email_always" checked=model.user_option.email_always}} {{#unless model.user_option.email_always}} <div class='instructions'> diff --git a/app/models/user_option.rb b/app/models/user_option.rb index 91995e1b1..daa41d0da 100644 --- a/app/models/user_option.rb +++ b/app/models/user_option.rb @@ -44,6 +44,11 @@ class UserOption < ActiveRecord::Base true end + def mailing_list_mode + return false if SiteSetting.disable_mailing_list_mode + super + end + def update_tracked_topics return unless auto_track_topics_after_msecs_changed? TrackedTopicsUpdater.new(id, auto_track_topics_after_msecs).call diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 7811d97b0..a4dcb5554 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1256,6 +1256,7 @@ en: 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." + disable_mailing_list_mode: "Disallow users from enabling mailing list mode." default_email_always: "Send an email notification even when the user is active by default." default_email_previous_replies: "Include previous replies in emails by default." diff --git a/config/site_settings.yml b/config/site_settings.yml index 142090e41..7247038e0 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1083,6 +1083,9 @@ user_preferences: default_email_private_messages: true default_email_direct: true default_email_mailing_list_mode: false + disable_mailing_list_mode: + default: false + client: true default_email_always: false default_email_previous_replies: enum: 'PreviousRepliesSiteSetting' diff --git a/spec/models/user_option_spec.rb b/spec/models/user_option_spec.rb index e3144989a..50cfd6623 100644 --- a/spec/models/user_option_spec.rb +++ b/spec/models/user_option_spec.rb @@ -18,6 +18,28 @@ describe UserOption do end + describe "#mailing_list_mode" do + let!(:forum_user) { Fabricate(:user) } + let!(:mailing_list_user) { Fabricate(:user) } + + before do + forum_user.user_option.update(mailing_list_mode: false) + mailing_list_user.user_option.update(mailing_list_mode: true) + end + + it "should return false when `SiteSetting.disable_mailing_list_mode` is enabled" do + SiteSetting.disable_mailing_list_mode = true + expect(forum_user.user_option.mailing_list_mode).to eq(false) + expect(mailing_list_user.user_option.mailing_list_mode).to eq(false) + end + + it "should return the stored value when `SiteSetting.disable_mailing_list_mode` is disabled" do + SiteSetting.disable_mailing_list_mode = false + expect(forum_user.user_option.mailing_list_mode).to eq(false) + expect(mailing_list_user.user_option.mailing_list_mode).to eq(true) + end + end + describe ".redirected_to_top" do let!(:user) { Fabricate(:user) }