DEV: the ability to define setting areas (#28570)

A new setting attribute is used to define the areas (separated by `|`).

In addition, endpoint `/admin/config/site_settings.json` accepts new `filter_area` data.
This commit is contained in:
Krzysztof Kotlarek
2024-09-03 09:25:45 +10:00
committed by GitHub
parent 050c665160
commit 7577231ba2
9 changed files with 123 additions and 23 deletions

View File

@ -87,6 +87,10 @@ module SiteSettingExtension
@categories ||= {}
end
def areas
@areas ||= {}
end
def mandatory_values
@mandatory_values ||= {}
end
@ -194,7 +198,8 @@ module SiteSettingExtension
filter_categories: nil,
filter_plugin: nil,
filter_names: nil,
filter_allowed_hidden: nil
filter_allowed_hidden: nil,
filter_area: nil
)
locale_setting_hash = {
setting: "default_locale",
@ -231,6 +236,13 @@ module SiteSettingExtension
true
end
end
.select do |setting_name, _|
if filter_area
Array.wrap(areas[setting_name]).include?(filter_area)
else
true
end
end
.select do |setting_name, _|
if filter_plugin
plugins[setting_name] == filter_plugin
@ -681,6 +693,15 @@ module SiteSettingExtension
categories[name] = opts[:category] || :uncategorized
if opts[:area]
split_areas = opts[:area].split("|")
if split_areas.any? { |area| !SiteSetting::VALID_AREAS.include?(area) }
raise Discourse::InvalidParameters.new(
"Area is incorrect. Valid areas: #{SiteSetting::VALID_AREAS.join(", ")}",
)
end
areas[name] = split_areas
end
hidden_settings_provider.add_hidden(name) if opts[:hidden]
if GlobalSetting.respond_to?(name)