From 583fd2c1fd4323d0b9532fa0f9fe88669ced6ebc Mon Sep 17 00:00:00 2001 From: Fire Demon Date: Sun, 20 Sep 2020 17:02:15 -0500 Subject: [Privacy, UI] Split privacy-related preferences into Privacy options section; add option to disable RSS --- app/controllers/accounts_controller.rb | 6 +++- .../settings/preferences/privacy_controller.rb | 9 ++++++ app/controllers/settings/preferences_controller.rb | 1 + app/lib/user_settings_decorator.rb | 5 ++++ app/models/user.rb | 4 +-- .../settings/preferences/appearance/show.html.haml | 3 ++ .../settings/preferences/other/show.html.haml | 22 +-------------- .../settings/preferences/privacy/show.html.haml | 32 ++++++++++++++++++++++ 8 files changed, 58 insertions(+), 24 deletions(-) create mode 100644 app/controllers/settings/preferences/privacy_controller.rb create mode 100644 app/views/settings/preferences/privacy/show.html.haml (limited to 'app') diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 232a5fc71..d648e1a08 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -43,7 +43,7 @@ class AccountsController < ApplicationController end format.rss do - return forbidden if unauthorized? + return render xml: '', status: 404 if rss_disabled? || unauthorized? expires_in 1.minute, public: !current_account? @@ -198,4 +198,8 @@ class AccountsController < ApplicationController def unauthorized? @unauthorized ||= blocked? || (@account.private? && !following?(@account)) end + + def rss_disabled? + current_user.setting_rss_disabled + end end diff --git a/app/controllers/settings/preferences/privacy_controller.rb b/app/controllers/settings/preferences/privacy_controller.rb new file mode 100644 index 000000000..f447fa598 --- /dev/null +++ b/app/controllers/settings/preferences/privacy_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Settings::Preferences::PrivacyController < Settings::PreferencesController + private + + def after_update_redirect_path + settings_preferences_privacy_path + end +end diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index ddbf89665..bbfd82869 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -77,6 +77,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_filter_to_unknown, :setting_filter_from_unknown, :setting_unpublish_on_delete, + :setting_rss_disabled, notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag), interactions: %i(must_be_follower must_be_following must_be_following_dm) ) diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index 386b1dcf6..a58a17166 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -63,6 +63,7 @@ class UserSettingsDecorator user.settings['filter_to_unknown'] = filter_to_unknown_preference if change?('setting_filter_to_unknown') user.settings['filter_from_unknown'] = filter_from_unknown_preference if change?('setting_filter_from_unknown') user.settings['unpublish_on_delete'] = unpublish_on_delete_preference if change?('setting_unpublish_on_delete') + user.settings['rss_disabled'] = rss_disabled_preference if change?('setting_rss_disabled') end def merged_notification_emails @@ -241,6 +242,10 @@ class UserSettingsDecorator boolean_cast_setting 'setting_unpublish_on_delete' end + def rss_disabled_preference + boolean_cast_setting 'setting_rss_disabled' + end + def boolean_cast_setting(key) ActiveModel::Type::Boolean.new.cast(settings[key]) end diff --git a/app/models/user.rb b/app/models/user.rb index 0b2d61862..07a4c9ab8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -123,8 +123,8 @@ class User < ApplicationRecord :style_css_profile_errors, :style_css_webapp, :style_css_webapp_errors, :style_wide_media, :publish_in, :unpublish_in, :unpublish_delete, :boost_every, :boost_jitter, - :boost_random, - :filter_to_unknown, :filter_from_unknown, :unpublish_on_delete, + :boost_random, :filter_to_unknown, :filter_from_unknown, :unpublish_on_delete, + :rss_disabled, to: :settings, prefix: :setting, allow_nil: false attr_reader :invite_code, :sign_in_token_attempt diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 48031a973..87e7b91c5 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -16,6 +16,9 @@ %p.hint= t 'appearance.advanced_web_interface_hint' + .fields-group + = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true + .fields-group = f.input :setting_advanced_layout, as: :boolean, wrapper: :with_label, hint: false diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index a1d3d4357..b85b24a58 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -7,33 +7,13 @@ = simple_form_for current_user, url: settings_preferences_other_path, html: { method: :put, id: 'edit_preferences' } do |f| = render 'shared/error_messages', object: current_user - .fields-group - = f.input :setting_noindex, as: :boolean, wrapper: :with_label - - .fields-group - = f.input :setting_hide_network, as: :boolean, wrapper: :with_label - - .fields-group - = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true - - - unless Setting.hide_followers_count - .fields-group - = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label - %h4= t 'preferences.posting_defaults' - .fields-row - .fields-group.fields-row__column.fields-row__column-6 - = f.input :setting_default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false - - .fields-group.fields-row__column.fields-row__column-6 - = f.input :setting_default_language, collection: [nil] + filterable_languages.sort, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.language_detection') : human_locale(locale) }, required: false, include_blank: false, hint: false - .fields-group = f.input :setting_default_sensitive, as: :boolean, wrapper: :with_label .fields-group - = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true + = f.input :setting_default_language, collection: [nil] + filterable_languages.sort, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.language_detection') : human_locale(locale) }, required: false, include_blank: false, hint: false .fields-group = f.input :setting_default_content_type, collection: ['text/plain', 'text/markdown', 'text/html'], wrapper: :with_label, include_blank: false, label_method: lambda { |item| safe_join([t("simple_form.labels.defaults.setting_default_content_type_#{item.split('/')[1]}"), content_tag(:span, t("simple_form.hints.defaults.setting_default_content_type_#{item.split('/')[1]}"), class: 'hint')]) }, required: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' diff --git a/app/views/settings/preferences/privacy/show.html.haml b/app/views/settings/preferences/privacy/show.html.haml new file mode 100644 index 000000000..fa65c969e --- /dev/null +++ b/app/views/settings/preferences/privacy/show.html.haml @@ -0,0 +1,32 @@ +- content_for :page_title do + = t('settings.preferences') + +- content_for :heading_actions do + = button_tag t('generic.save_changes'), class: 'button', form: 'edit_preferences' + += simple_form_for current_user, url: settings_preferences_privacy_path, html: { method: :put, id: 'edit_preferences' } do |f| + = render 'shared/error_messages', object: current_user + + %h4= t 'preferences.privacy' + + .fields-group + = f.input :setting_default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false + + .fields-group + = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true + + .fields-group + = f.input :setting_noindex, as: :boolean, wrapper: :with_label + + .fields-group + = f.input :setting_hide_network, as: :boolean, wrapper: :with_label + + .fields-group + = f.input :setting_rss_disabled, as: :boolean, wrapper: :with_label + + - unless Setting.hide_followers_count + .fields-group + = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label + + .actions + = f.button :button, t('generic.save_changes'), type: :submit -- cgit