diff --git a/app/assets/javascripts/admin/addon/controllers/admin-config-notifications-settings.js b/app/assets/javascripts/admin/addon/controllers/admin-config-notifications-settings.js new file mode 100644 index 00000000000..142e74beaf2 --- /dev/null +++ b/app/assets/javascripts/admin/addon/controllers/admin-config-notifications-settings.js @@ -0,0 +1,3 @@ +import AdminAreaSettingsBaseController from "admin/controllers/admin-area-settings-base"; + +export default class AdminConfigNotificationsSettingsController extends AdminAreaSettingsBaseController {} diff --git a/app/assets/javascripts/admin/addon/routes/admin-config-notifications.js b/app/assets/javascripts/admin/addon/routes/admin-config-notifications.js new file mode 100644 index 00000000000..1c437d8b632 --- /dev/null +++ b/app/assets/javascripts/admin/addon/routes/admin-config-notifications.js @@ -0,0 +1,8 @@ +import DiscourseRoute from "discourse/routes/discourse"; +import { i18n } from "discourse-i18n"; + +export default class AdminConfigNotificationsRoute extends DiscourseRoute { + titleToken() { + return i18n("admin.community.sidebar_link.notifications"); + } +} diff --git a/app/assets/javascripts/admin/addon/routes/admin-route-map.js b/app/assets/javascripts/admin/addon/routes/admin-route-map.js index 5e5be006f7c..ca5bb6edfd7 100644 --- a/app/assets/javascripts/admin/addon/routes/admin-route-map.js +++ b/app/assets/javascripts/admin/addon/routes/admin-route-map.js @@ -206,9 +206,18 @@ export default function () { }); this.route("about"); - this.route("loginAndAuthentication", { path: "/" }, function () { + this.route( + "loginAndAuthentication", + { path: "/login-and-authentication" }, + function () { + this.route("settings", { + path: "/", + }); + } + ); + this.route("notifications", function () { this.route("settings", { - path: "/login-and-authentication", + path: "/", }); }); this.route("lookAndFeel", { path: "/look-and-feel" }, function () { diff --git a/app/assets/javascripts/admin/addon/templates/config-notifications-settings.hbs b/app/assets/javascripts/admin/addon/templates/config-notifications-settings.hbs new file mode 100644 index 00000000000..2a5340c0799 --- /dev/null +++ b/app/assets/javascripts/admin/addon/templates/config-notifications-settings.hbs @@ -0,0 +1,21 @@ + + <:breadcrumbs> + + + + + +
+ +
\ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/lib/sidebar/admin-nav-map.js b/app/assets/javascripts/discourse/app/lib/sidebar/admin-nav-map.js index 72289eba9cd..4bde262ab47 100644 --- a/app/assets/javascripts/discourse/app/lib/sidebar/admin-nav-map.js +++ b/app/assets/javascripts/discourse/app/lib/sidebar/admin-nav-map.js @@ -48,9 +48,7 @@ export const ADMIN_NAV_MAP = [ }, { name: "admin_notifications", - route: "adminSiteSettingsCategory", - routeModels: ["all_results"], - query: { filter: "notifications" }, + route: "adminConfig.notifications.settings", label: "admin.community.sidebar_link.notifications", icon: "bell", }, diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index c1394963bb3..88c8d9fcc43 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class SiteSetting < ActiveRecord::Base - VALID_AREAS = %w[flags about emojis permalinks] + VALID_AREAS = %w[flags about emojis permalinks notifications] extend GlobalPath extend SiteSettingExtension diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index a8ef98ab1eb..d2d25f39810 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -5137,6 +5137,9 @@ en: login_and_authentication: title: "Login and authentication" header_description: "Configure how users log in and authenticate, secrets and keys, OAuth2 providers, and more." + notifications: + title: "Notifications" + header_description: "Configure how notifications are managed and delivered for users, including email preferences, push notifications, mention limits, and notification consolidation." new_features: title: "What's new?" diff --git a/config/routes.rb b/config/routes.rb index c9aaf7a691b..2568503daa0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -391,9 +391,9 @@ Discourse::Application.routes.draw do end namespace :config, constraints: StaffConstraint.new do resources :site_settings, only: %i[index] - resources :login_and_authentication, only: %i[index] get "login-and-authentication" => "site_settings#index" + get "notifications" => "site_settings#index" resources :flags, only: %i[index new create update destroy] do put "toggle" diff --git a/config/site_settings.yml b/config/site_settings.yml index 6f439651416..494cbb64955 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -53,7 +53,7 @@ required: contact_email: default: "" type: email - area: "about" + area: "about|notifications" contact_url: default: "" area: "about" @@ -369,15 +369,19 @@ basic: push_notifications_prompt: default: true client: true + area: "notifications" push_notifications_icon: default: "" type: upload + area: "notifications" enable_desktop_push_notifications: default: true client: true + area: "notifications" push_notification_time_window_mins: default: 1 min: 0 + area: "notifications" short_title: default: "" max: 12 @@ -817,6 +821,7 @@ users: max_notifications_per_user: default: 10000 hidden: true + area: "notifications" gravatar_name: default: Gravatar client: true @@ -1034,12 +1039,17 @@ posting: enable_mentions: default: true client: true - max_mentions_per_post: 10 + max_mentions_per_post: + default: 10 + area: "notifications" max_users_notified_per_group_mention: default: 100 client: true + area: "notifications" newuser_max_replies_per_topic: 3 - newuser_max_mentions_per_post: 2 + newuser_max_mentions_per_post: + default: 2 + area: "notifications" here_mention: default: "here" validator: "NotUsernameValidator" @@ -1188,6 +1198,7 @@ posting: type: float default: 24 min: 0 + area: "notifications" auto_close_messages_post_count: default: 500 auto_close_topics_post_count: @@ -2832,25 +2843,32 @@ uncategorized: enable_listing_suspended_users_on_search: default: false - disable_system_edit_notifications: true + disable_system_edit_notifications: + default: true + area: "notifications" disable_category_edit_notifications: default: false + area: "notifications" disable_tags_edit_notifications: default: false + area: "notifications" notification_consolidation_threshold: default: 3 min: 0 + area: "notifications" likes_notification_consolidation_window_mins: default: 120 min: 1 + area: "notifications" linked_notification_consolidation_window_mins: default: 120 min: 1 + area: "notifications" delete_drafts_older_than_n_days: default: 180 @@ -3050,6 +3068,7 @@ user_preferences: default_other_notification_level_when_replying: enum: "NotificationLevelWhenReplyingSiteSetting" default: 2 + area: "notifications" default_other_external_links_in_new_tab: false default_other_enable_quoting: true default_other_enable_defer: false @@ -3059,6 +3078,7 @@ user_preferences: default_other_like_notification_frequency: enum: "LikeNotificationFrequencySiteSetting" default: 1 + area: "notifications" default_topics_automatic_unpin: default: true diff --git a/plugins/chat/config/settings.yml b/plugins/chat/config/settings.yml index 6fe491e7fc4..06179c87ae7 100644 --- a/plugins/chat/config/settings.yml +++ b/plugins/chat/config/settings.yml @@ -114,6 +114,7 @@ chat: default: 5 max: 10 min: 0 + area: "notifications" max_chat_draft_length: default: 50_000 hidden: true