FEATURE: Upload Site Settings. (#6573)

This commit is contained in:
Guo Xiang Tan
2018-11-14 15:03:02 +08:00
committed by GitHub
parent 17bc82765b
commit 44391ee8ab
59 changed files with 892 additions and 244 deletions

View File

@@ -190,7 +190,11 @@ module SiteSettingExtension
end
def client_settings_json_uncached
MultiJson.dump(Hash[*@client_settings.map { |n| [n, self.send(n)] }.flatten])
MultiJson.dump(Hash[*@client_settings.map do |name|
value = self.public_send(name)
value = value.to_s if type_supervisor.get_type(name) == :upload
[name, value]
end.flatten])
end
# Retrieve all settings
@@ -212,7 +216,9 @@ module SiteSettingExtension
defaults.all(default_locale)
.reject { |s, _| !include_hidden && hidden_settings.include?(s) }
.map do |s, v|
value = send(s)
opts = {
setting: s,
description: description(s),
@@ -312,6 +318,7 @@ module SiteSettingExtension
def remove_override!(name)
provider.destroy(name)
current[name] = defaults.get(name, default_locale)
uploads.delete(name)
clear_cache!
end
@@ -319,6 +326,7 @@ module SiteSettingExtension
val, type = type_supervisor.to_db_value(name, val)
provider.save(name, val, type)
current[name] = type_supervisor.to_rb_value(name, val)
uploads.delete(name)
notify_clients!(name) if client_settings.include? name
clear_cache!
end
@@ -410,12 +418,31 @@ module SiteSettingExtension
def setup_methods(name)
clean_name = name.to_s.sub("?", "").to_sym
define_singleton_method clean_name do
if (c = current[name]).nil?
refresh!
current[name]
else
c
if type_supervisor.get_type(name) == :upload
define_singleton_method clean_name do
upload = uploads[name]
return upload if upload
if (value = current[name]).nil?
refresh!
value = current[name]
end
value = value.to_i
if value > 0
upload = Upload.find_by(id: value)
uploads[name] = upload if upload
end
end
else
define_singleton_method clean_name do
if (c = current[name]).nil?
refresh!
current[name]
else
c
end
end
end
@@ -448,6 +475,11 @@ module SiteSettingExtension
private
def uploads
@uploads ||= {}
@uploads[provider.current_site] ||= {}
end
def logger
Rails.logger
end