DEV: Use default admin routes for plugins with settings (#30941)

This change adds a sidebar link for each plugin that fulfils the following criteria:

- Does not have an explicit admin route defined in the plugin.
- Has at least one site setting (not including enabled/disabled.)

That sidebar link leads to the automatically generated plugin show settings page.
This commit is contained in:
Ted Johansson
2025-02-04 14:57:28 +08:00
committed by GitHub
parent 9991eacef4
commit 503f9b6f02
13 changed files with 70 additions and 49 deletions

View File

@ -120,7 +120,12 @@ class Plugin::Instance
def full_admin_route
route = self.admin_route
return unless route
if route.blank?
return if !any_settings?
route = default_admin_route
end
route
.slice(:location, :label, :use_new_show_route)
@ -130,6 +135,14 @@ class Plugin::Instance
end
end
def any_settings?
return false if !configurable?
SiteSetting
.all_settings(filter_plugin: self.name)
.any? { |s| s[:setting] != @enabled_site_setting }
end
def configurable?
true
end
@ -146,7 +159,11 @@ class Plugin::Instance
delegate :name, to: :metadata
def humanized_name
(setting_category_name || name).delete_prefix("Discourse ").delete_prefix("discourse-")
(setting_category_name || name)
.delete_prefix("Discourse ")
.delete_prefix("discourse-")
.gsub("-", " ")
.upcase_first
end
def add_to_serializer(
@ -1476,4 +1493,8 @@ class Plugin::Instance
def register_permitted_bulk_action_parameter(name)
DiscoursePluginRegistry.register_permitted_bulk_action_parameter(name, self)
end
def default_admin_route
{ label: "#{name.underscore}.title", location: name, use_new_show_route: true }
end
end