From 5b51413be7f8adabd4dde6e5a984edfbd482e36d Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 18 May 2023 09:43:26 +0900 Subject: [PATCH] Add default_reblog_privacy setting --- app/models/concerns/has_user_settings.rb | 4 ++++ app/models/status.rb | 4 ++++ app/models/user_settings.rb | 1 + app/services/reblog_service.rb | 3 ++- app/views/settings/preferences/other/show.html.haml | 10 +++++++--- config/locales/ja.yml | 2 ++ config/locales/simple_form.en.yml | 1 + config/locales/simple_form.ja.yml | 1 + 8 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/models/concerns/has_user_settings.rb b/app/models/concerns/has_user_settings.rb index ffb1bb0cac..19ab0bf073 100644 --- a/app/models/concerns/has_user_settings.rb +++ b/app/models/concerns/has_user_settings.rb @@ -151,6 +151,10 @@ module HasUserSettings settings['default_privacy'] || (account.locked? ? 'private' : 'public') end + def setting_default_reblog_privacy + settings['default_reblog_privacy'] || 'unset' + end + def setting_default_searchability settings['default_searchability'] || 'private' end diff --git a/app/models/status.rb b/app/models/status.rb index 8cfa648ee1..bdca40efbc 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -404,6 +404,10 @@ class Status < ApplicationRecord visibilities.keys - %w(direct limited) end + def selectable_reblog_visibilities + %w(unset) + visibilities.keys - %w(direct limited) + end + def selectable_searchabilities searchabilities.keys - %w(public_unlisted limited) end diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 4eab568c27..43e16318fa 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -19,6 +19,7 @@ class UserSettings setting :default_language, default: nil setting :default_sensitive, default: false setting :default_privacy, default: nil + setting :default_reblog_privacy, default: nil setting :default_searchability, default: :private setting :public_post_to_unlisted, default: false setting :reject_public_unlisted_subscription, default: false diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb index 6ec0944744..42db4d199a 100644 --- a/app/services/reblog_service.rb +++ b/app/services/reblog_service.rb @@ -23,7 +23,8 @@ class ReblogService < BaseService visibility = if reblogged_status.hidden? reblogged_status.visibility else - options[:visibility] || account.user&.setting_default_privacy + options[:visibility] || + (account.user&.setting_default_reblog_privacy == 'unset' ? account.user&.setting_default_privacy : account.user&.setting_default_reblog_privacy) end reblog = account.statuses.create!(reblog: reblogged_status, text: '', visibility: visibility, rate_limit: options[:with_rate_limit]) diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index 7b1ef2d0c2..69e1d8f430 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -24,10 +24,14 @@ = ff.input :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, label: I18n.t('simple_form.labels.defaults.setting_default_privacy') .fields-group.fields-row__column.fields-row__column-6 - = ff.input :default_language, collection: [nil] + filterable_languages, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, required: false, include_blank: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_language') + = ff.input :default_reblog_privacy, collection: Status.selectable_reblog_visibilities, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_reblog_privacy') - .fields-group - = ff.input :default_searchability, collection: Status.selectable_searchabilities, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability') + .fields-row + .fields-group.fields-row__column.fields-row__column-6 + = ff.input :default_searchability, collection: Status.selectable_searchabilities, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability') + + .fields-group.fields-row__column.fields-row__column-6 + = ff.input :default_language, collection: [nil] + filterable_languages, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, required: false, include_blank: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_language') .fields-group = ff.input :public_post_to_unlisted, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_public_post_to_unlisted'), hint: I18n.t('simple_form.hints.defaults.setting_public_post_to_unlisted') diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b08d58e1e1..8ae370a76e 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1662,6 +1662,8 @@ ja: public_unlisted_long: 誰でも見ることができますが、連合タイムラインには表示されません unlisted: 未収載 unlisted_long: 誰でも見ることができますが、連合・ローカルタイムラインには表示されません + unset: 設定なし + unset_long: デフォルトの挙動に従います statuses_cleanup: enabled: 古い投稿を自動的に削除する enabled_hint: 設定した期間を過ぎた投稿は、以下の例外に該当しない限り、自動的に削除されます diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 2de346faf2..7613ff85b0 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -209,6 +209,7 @@ en: setting_crop_images: Crop images in non-expanded posts to 16x9 setting_default_language: Posting language setting_default_privacy: Posting privacy + setting_default_reblog_privacy: Reblogging privacy setting_default_searchability: Searchability setting_default_sensitive: Always mark media as sensitive setting_delete_modal: Show confirmation dialog before deleting a post diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index f0418cf61c..01910ac509 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -216,6 +216,7 @@ ja: setting_crop_images: 投稿の詳細以外では画像を16:9に切り抜く setting_default_language: 投稿する言語 setting_default_privacy: 投稿の公開範囲 + setting_default_reblog_privacy: BTの公開範囲 setting_default_searchability: 投稿の検索を許可する範囲 setting_default_sensitive: メディアを常に閲覧注意としてマークする setting_delete_modal: 投稿を削除する前に確認ダイアログを表示する