mirror of
https://github.com/discourse/discourse.git
synced 2024-12-21 10:38:14 +08:00
9c5eb7952e
Previously when attempting to edit a globally shadowed setting, the error message was not very helpful, it said "You are not allowed to change hidden settings". This commit changes the error message to reflect the actual problem, which is that the setting is shadowed by a global setting via ENV var.
68 lines
1.7 KiB
Ruby
68 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SiteSetting::Update
|
|
include Service::Base
|
|
|
|
options { attribute :allow_changing_hidden, :boolean, default: false }
|
|
|
|
policy :current_user_is_admin
|
|
|
|
params do
|
|
attribute :setting_name
|
|
attribute :new_value
|
|
|
|
before_validation do
|
|
self.setting_name = setting_name&.to_sym
|
|
self.new_value = new_value.to_s.strip
|
|
end
|
|
|
|
validates :setting_name, presence: true
|
|
|
|
after_validation do
|
|
next if setting_name.blank?
|
|
self.new_value =
|
|
case SiteSetting.type_supervisor.get_type(setting_name)
|
|
when :integer
|
|
new_value.tr("^-0-9", "").to_i
|
|
when :file_size_restriction
|
|
new_value.tr("^0-9", "").to_i
|
|
when :uploaded_image_list
|
|
new_value.blank? ? "" : Upload.get_from_urls(new_value.split("|")).to_a
|
|
when :upload
|
|
Upload.get_from_url(new_value) || ""
|
|
else
|
|
new_value
|
|
end
|
|
end
|
|
end
|
|
|
|
policy :setting_is_shadowed_globally
|
|
policy :setting_is_visible
|
|
policy :setting_is_configurable
|
|
step :save
|
|
|
|
private
|
|
|
|
def current_user_is_admin(guardian:)
|
|
guardian.is_admin?
|
|
end
|
|
|
|
def setting_is_shadowed_globally(params:)
|
|
!SiteSetting.shadowed_settings.include?(params.setting_name)
|
|
end
|
|
|
|
def setting_is_visible(params:, options:)
|
|
options.allow_changing_hidden || !SiteSetting.hidden_settings.include?(params.setting_name)
|
|
end
|
|
|
|
def setting_is_configurable(params:)
|
|
return true if !SiteSetting.plugins[params.setting_name]
|
|
|
|
Discourse.plugins_by_name[SiteSetting.plugins[params.setting_name]].configurable?
|
|
end
|
|
|
|
def save(params:, guardian:)
|
|
SiteSetting.set_and_log(params.setting_name, params.new_value, guardian.user)
|
|
end
|
|
end
|