From 8c6144d116f77e4f46f04993c0c08c5320f7ef1d Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Tue, 9 Jan 2024 09:06:27 +1000 Subject: [PATCH] DEV: Change enable_admin_sidebar_navigation to group setting (#25159) This will make it easier to do more focused testing of this change. --- .../admin/addon/controllers/admin.js | 10 +++++++-- .../admin/addon/routes/admin-revamp.js | 7 +++++- .../javascripts/admin/addon/routes/admin.js | 15 +++++++++++-- .../instance-initializers/admin-sidebar.js | 7 +++++- .../admin-revamp-section-link.js | 5 ++++- config/locales/server.de.yml | 1 - config/locales/server.en.yml | 2 +- config/locales/server.it.yml | 1 - config/locales/server.pl_PL.yml | 1 - config/locales/server.ro.yml | 1 - config/locales/server.uk.yml | 1 - config/site_settings.yml | 8 +++++-- ...e_admin_sidebar_to_group_post_migration.rb | 22 +++++++++++++++++++ .../system/admin_sidebar_navigation_spec.rb | 2 +- .../admin_revamp_sidebar_navigation_spec.rb | 4 ++-- 15 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb diff --git a/app/assets/javascripts/admin/addon/controllers/admin.js b/app/assets/javascripts/admin/addon/controllers/admin.js index bb82a5c136d..8b9e280aeb0 100644 --- a/app/assets/javascripts/admin/addon/controllers/admin.js +++ b/app/assets/javascripts/admin/addon/controllers/admin.js @@ -1,13 +1,19 @@ import Controller from "@ember/controller"; -import { readOnly } from "@ember/object/computed"; import { inject as service } from "@ember/service"; import { dasherize } from "@ember/string"; import discourseComputed from "discourse-common/utils/decorators"; export default class AdminController extends Controller { @service router; + @service currentUser; - @readOnly("siteSettings.enable_admin_sidebar_navigation") showAdminSidebar; + @discourseComputed("siteSettings.admin_sidebar_enabled_groups") + showAdminSidebar() { + return this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ); + } @discourseComputed("siteSettings.enable_group_directory") showGroups(enableGroupDirectory) { diff --git a/app/assets/javascripts/admin/addon/routes/admin-revamp.js b/app/assets/javascripts/admin/addon/routes/admin-revamp.js index c24449cef4d..8c94766e881 100644 --- a/app/assets/javascripts/admin/addon/routes/admin-revamp.js +++ b/app/assets/javascripts/admin/addon/routes/admin-revamp.js @@ -14,7 +14,12 @@ export default class AdminRoute extends DiscourseRoute { } activate() { - if (!this.siteSettings.enable_admin_sidebar_navigation) { + if ( + !this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ) + ) { return DiscourseURL.redirectTo("/admin"); } diff --git a/app/assets/javascripts/admin/addon/routes/admin.js b/app/assets/javascripts/admin/addon/routes/admin.js index f824af8de8c..306872c4aa6 100644 --- a/app/assets/javascripts/admin/addon/routes/admin.js +++ b/app/assets/javascripts/admin/addon/routes/admin.js @@ -6,13 +6,19 @@ import I18n from "discourse-i18n"; export default class AdminRoute extends DiscourseRoute { @service sidebarState; @service siteSettings; + @service currentUser; titleToken() { return I18n.t("admin_title"); } activate() { - if (this.siteSettings.enable_admin_sidebar_navigation) { + if ( + this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ) + ) { this.sidebarState.setPanel(ADMIN_PANEL); this.sidebarState.setSeparatedMode(); this.sidebarState.hideSwitchPanelButtons(); @@ -26,7 +32,12 @@ export default class AdminRoute extends DiscourseRoute { deactivate(transition) { this.controllerFor("application").set("showTop", true); - if (this.siteSettings.enable_admin_sidebar_navigation) { + if ( + this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ) + ) { if (!transition?.to.name.startsWith("admin")) { this.sidebarState.setPanel(MAIN_PANEL); } diff --git a/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js b/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js index 4d2fb70cbf2..ae8dac2899a 100644 --- a/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js +++ b/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js @@ -181,7 +181,12 @@ export default { return; } - if (!this.siteSettings.enable_admin_sidebar_navigation) { + if ( + !this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ) + ) { return; } diff --git a/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js b/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js index fa28d36f10a..575206d54b3 100644 --- a/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js +++ b/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js @@ -31,7 +31,10 @@ export default class AdminRevampSectionLink extends BaseSectionLink { return ( this.currentUser.staff && - this.siteSettings.enable_admin_sidebar_navigation + this.siteSettings.userInAnyGroups( + "admin_sidebar_enabled_groups", + this.currentUser + ) ); } diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index 9107343cbe8..f0ba9100165 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -2237,7 +2237,6 @@ de: experimental_search_menu_groups: "EXPERIMENTELL: Das neue Suchmenü aktivieren, das für die Verwendung von Glimmer aktualisiert wurde" enable_experimental_lightbox: "EXPERIMENTELL: Die Standard-Bild-Lightbox durch das überarbeitete Design ersetzen." experimental_form_templates: "EXPERIMENTELL: Aktiviere die Funktion der Formularvorlagen. Nachdem du sie aktiviert hast, verwalte die Vorlagen unter Anpassen / Vorlagen." - enable_admin_sidebar_navigation: "EXPERIMENTELL: Aktiviere die Seitenleisten-Navigation für die Admin-Benutzeroberfläche, die die Admin-Navigationsschaltflächen auf oberster Ebene ersetzt." page_loading_indicator: "Die Ladeanzeige konfigurieren, die bei der Seitennavigation in Discourse erscheint. „Spinner“ ist ein ganzseitiger Indikator. „Slider“ zeigt einen schmalen Balken am oberen Rand des Bildschirms an." show_user_menu_avatars: "Benutzeravatare im Benutzermenü anzeigen" errors: diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 45d86d0c1e5..cc535970b28 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -2499,7 +2499,7 @@ en: enable_experimental_lightbox: "EXPERIMENTAL: Replace the default image lightbox with the revamped design." experimental_form_templates: "EXPERIMENTAL: Enable the form templates feature. After enabled, manage the templates at Customize / Templates." - enable_admin_sidebar_navigation: "EXPERIMENTAL: Enable sidebar navigation for the admin UI, which replaces the top-level admin navigation buttons." + admin_sidebar_enabled_groups: "EXPERIMENTAL: Enable sidebar navigation for the admin UI for the specified groups, which replaces the top-level admin navigation buttons." page_loading_indicator: "Configure the loading indicator which appears during page navigations within Discourse. 'Spinner' is a full page indicator. 'Slider' shows a narrow bar at the top of the screen." show_user_menu_avatars: "Show user avatars in the user menu" diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml index 116e947cceb..5f6318b7082 100644 --- a/config/locales/server.it.yml +++ b/config/locales/server.it.yml @@ -2181,7 +2181,6 @@ it: experimental_search_menu_groups: "SPERIMENTALE: attiva il nuovo menu di ricerca che è stato aggiornato per utilizzare glimmer." enable_experimental_lightbox: "SPERIMENTALE: sostituisci la lightbox dell'immagine predefinita con il design rinnovato." experimental_form_templates: "SPERIMENTALE: abilita la funzionalità dei modelli di modulo. Dopo l'abilitazione, gestisci i modelli in Personalizza / Modelli." - enable_admin_sidebar_navigation: "SPERIMENTALE: abilita la navigazione della barra laterale per l'interfaccia di amministrazione, che sostituisce i pulsanti di navigazione dell'amministratore di livello superiore." page_loading_indicator: "Configura l'indicatore di caricamento che appare durante la navigazione delle pagine all'interno di Discourse. 'Spinner' come un indicatore a pagina intera. 'Slider' mostra una barra stretta nella parte superiore dello schermo." errors: invalid_css_color: "Colore non valido. Immettere un nome o un valore esadecimale per il colore." diff --git a/config/locales/server.pl_PL.yml b/config/locales/server.pl_PL.yml index 741aa4dfde8..e327da1fb53 100644 --- a/config/locales/server.pl_PL.yml +++ b/config/locales/server.pl_PL.yml @@ -2330,7 +2330,6 @@ pl_PL: experimental_search_menu_groups: "EKSPERYMENTALNE: Włącza nowe menu wyszukiwania, które zostało ulepszone tak, by korzystało z glimmer" enable_experimental_lightbox: "EKSPERYMENTALNIE: Zastąp domyślny lightbox obrazu odświeżonym projektem." experimental_form_templates: "EKSPERYMENTALNIE: Włącz funkcję szablonów formularzy. Po włączeniu zarządzaj szablonami w Dostosuj / Szablony." - enable_admin_sidebar_navigation: "EKSPERYMENTALNE: Włącz nawigację na pasku bocznym interfejsu administratora, która zastępuje przyciski nawigacyjne administratora najwyższego poziomu." page_loading_indicator: "Skonfiguruj wskaźnik ładowania, który pojawia się podczas nawigacji po stronie w Discourse. \"Spinner\" to wskaźnik na pełnym ekranie. \"Slider\" wyświetla wąski pasek u góry ekranu." show_user_menu_avatars: "Pokaż awatary użytkowników w menu użytkownika" errors: diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml index da3145b677b..5735a02cbbe 100644 --- a/config/locales/server.ro.yml +++ b/config/locales/server.ro.yml @@ -1144,7 +1144,6 @@ ro: min_trust_level_to_tag_topics: "Nivelul minim de încredere necesar pentru a pune etichete pe subiecte." suppress_overlapping_tags_in_list: "Dacă etichetele corespund exact cu cuvintele din titlul subiectelor, nu mai afișa aceste etichete." shared_drafts_allowed_groups: "Permit utilizatorilor din aceste grupuri să vadă și să editeze ciorne comune." - enable_admin_sidebar_navigation: "EXPERIMENTAL: Activează navigarea în bara laterală pentru interfața de administrare care înlocuiește butoanele de navigare de la nivelul superior al administratorului." show_user_menu_avatars: "Arată avatare utilizator în meniul utilizatorului" errors: invalid_email: "Adresă de email invalidă." diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml index 1730cd5dafb..4c5956141c8 100644 --- a/config/locales/server.uk.yml +++ b/config/locales/server.uk.yml @@ -2344,7 +2344,6 @@ uk: experimental_search_menu_groups: "ЕКСПЕРИМЕНТАЛЬНЕ: Вмикає нове меню пошуку, в якому використовується мерехтіння" enable_experimental_lightbox: "ЕКСПЕРИМЕНТАЛЬНЕ: оновлений дизайн стандартного лайтбоксу зображень." experimental_form_templates: "ЕКСПЕРИМЕНТАЛЬНО: Увімкніть функцію шаблонів форм. Після увімкнення керуйте шаблонами за адресою Налаштування/Шаблони." - enable_admin_sidebar_navigation: "ЕКСПЕРИМЕНТАЛЬНО: Увімкніть бічну панель навігації для інтерфейсу адміністратора, яка замінить кнопки навігації адміністратора верхнього рівня." page_loading_indicator: "Вибір індикатора завантаження, який з’являється під час навігації сторінкою в Discourse. «Спіннер» – це індикатор на всю сторінку. «Слайдер» — вузька смужка у верхній частині екрана." show_user_menu_avatars: "Показувати аватари користувачів у меню користувача" errors: diff --git a/config/site_settings.yml b/config/site_settings.yml index 5a12b0d8575..1c24de4dc28 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -2302,9 +2302,13 @@ developer: refresh: true hidden: true client: true - enable_admin_sidebar_navigation: - default: false + admin_sidebar_enabled_groups: client: true + type: group_list + list_type: compact + default: "" + allow_any: false + refresh: true lazy_load_categories: default: false client: true diff --git a/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb b/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb new file mode 100644 index 00000000000..ffe705b310e --- /dev/null +++ b/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class ChangeEnableAdminSidebarToGroupPostMigration < ActiveRecord::Migration[7.0] + def change + enable_admin_sidebar_navigation_raw = + DB.query_single( + "SELECT value FROM site_settings WHERE name = 'enable_admin_sidebar_navigation'", + ).first + + if enable_admin_sidebar_navigation_raw.present? + DB.exec( + "INSERT INTO site_settings(name, value, data_type, created_at, updated_at) + VALUES('admin_sidebar_enabled_groups', :setting, '20', NOW(), NOW())", + setting: "1", # 1 is the Group::AUTO_GROUPS[:admins] group id + ) + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb index 55ee42cbe81..e79f6e955e9 100644 --- a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb +++ b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb @@ -6,7 +6,7 @@ describe "Admin Revamp | Sidebar Navigation | Plugin Links", type: :system do before do chat_system_bootstrap - SiteSetting.enable_admin_sidebar_navigation = true + SiteSetting.admin_sidebar_enabled_groups = Group::AUTO_GROUPS[:admins] sign_in(admin) end diff --git a/spec/system/admin_revamp_sidebar_navigation_spec.rb b/spec/system/admin_revamp_sidebar_navigation_spec.rb index 6a235c3c673..2aa85ef9c89 100644 --- a/spec/system/admin_revamp_sidebar_navigation_spec.rb +++ b/spec/system/admin_revamp_sidebar_navigation_spec.rb @@ -5,7 +5,7 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new } before do - SiteSetting.enable_admin_sidebar_navigation = true + SiteSetting.admin_sidebar_enabled_groups = Group::AUTO_GROUPS[:admins] sign_in(admin) end @@ -21,7 +21,7 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do end context "when the setting is disabled" do - before { SiteSetting.enable_admin_sidebar_navigation = false } + before { SiteSetting.admin_sidebar_enabled_groups = "" } it "does not show the admin sidebar" do visit("/latest")