From 125e686bf21ee96dbbb7cf0d19242d8b055d4dd6 Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Wed, 15 Jan 2025 14:13:34 +1000 Subject: [PATCH] FIX: Do not allow_any on fonts site_settings (#30780) Both heading_font and body_font should not allow additional user-defined values, these are lists with predefined choices. The UI already prevents this because the font selector dropdown is unique, but we want to make sure the setting definition reflects this too. --- config/site_settings.yml | 2 ++ lib/site_settings/type_supervisor.rb | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config/site_settings.yml b/config/site_settings.yml index 02cd5adad83..fa051214f40 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -414,6 +414,7 @@ basic: type: list list_type: font area: "fonts" + allow_any: false heading_font: default: "arial" choices: "BaseFontSetting.values" @@ -421,6 +422,7 @@ basic: type: list list_type: font area: "fonts" + allow_any: false enable_sitemap: default: true sitemap_page_size: diff --git a/lib/site_settings/type_supervisor.rb b/lib/site_settings/type_supervisor.rb index 5d2a458ef1e..bee07602d17 100644 --- a/lib/site_settings/type_supervisor.rb +++ b/lib/site_settings/type_supervisor.rb @@ -269,7 +269,11 @@ class SiteSettings::TypeSupervisor if type == self.class.types[:list] || type == self.class.types[:string] if @allow_any.key?(name) && !@allow_any[name] split = val.to_s.split("|") - diff = (split - @choices[name]) + resolved_choices = @choices[name] + if resolved_choices.first.is_a?(Hash) + resolved_choices = resolved_choices.map { |c| c[:value] } + end + diff = (split - resolved_choices) if diff.length > 0 raise Discourse::InvalidParameters.new( I18n.t(