Refresh the site after updating certain site settings
This commit is contained in:
@@ -172,6 +172,14 @@ module Discourse
|
||||
!!$redis.get(readonly_mode_key)
|
||||
end
|
||||
|
||||
def self.request_refresh!
|
||||
# Causes refresh on next click for all clients
|
||||
#
|
||||
# This is better than `MessageBus.publish "/file-change", ["refresh"]` because
|
||||
# it spreads the refreshes out over a time period
|
||||
MessageBus.publish '/global/asset-version', 'clobber'
|
||||
end
|
||||
|
||||
def self.git_version
|
||||
return $git_version if $git_version
|
||||
|
||||
|
||||
@@ -42,6 +42,10 @@ module SiteSettingExtension
|
||||
@hidden_settings ||= []
|
||||
end
|
||||
|
||||
def refresh_settings
|
||||
@refresh_settings ||= []
|
||||
end
|
||||
|
||||
def setting(name_arg, default = nil, opts = {})
|
||||
name = name_arg.to_sym
|
||||
mutex.synchronize do
|
||||
@@ -55,6 +59,9 @@ module SiteSettingExtension
|
||||
if opts[:hidden] == true
|
||||
hidden_settings << name
|
||||
end
|
||||
if opts[:refresh] == true
|
||||
refresh_settings << name
|
||||
end
|
||||
setup_methods(name, current_value)
|
||||
end
|
||||
end
|
||||
@@ -204,9 +211,14 @@ module SiteSettingExtension
|
||||
defaults.has_key?(name.to_sym) || defaults.has_key?("#{name}?".to_sym)
|
||||
end
|
||||
|
||||
def requires_refresh?(name)
|
||||
refresh_settings.include?(name.to_sym)
|
||||
end
|
||||
|
||||
def set(name, value)
|
||||
if has_setting?(name)
|
||||
self.send("#{name}=", value)
|
||||
Discourse.request_refresh! if requires_refresh?(name)
|
||||
else
|
||||
raise ArgumentError.new("No setting named #{name} exists")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user