Class: SiteSetting
  
  
  
Overview
  
    
Represents a site setting. Site settings control the operation and display of most aspects of the site, such as reputation awards, additional content, and site constants such as name and logo.
   
 
  
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  
  #attributes_print, fuzzy_search, match_search, #match_search, sanitize_for_search, sanitize_name, sanitize_sql_in, useful_err_msg, with_lax_group_rules
  
  
    Class Method Details
    
      
  
  
    .[](name)  ⇒ Object 
  
  
  
  
    
      
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 
     | 
    
      # File 'app/models/site_setting.rb', line 12
def self.[](name)
  key = "SiteSettings/#{RequestContext.}/#{name}"
  cached = Rails.cache.fetch key, include_community: false do
    SiteSetting.applied_setting(name)&.typed
  end
  if cached.nil?
    Rails.cache.delete key, include_community: false
    value = SiteSetting.applied_setting(name)&.typed
    Rails.cache.write key, value, include_community: false
    value
  else
    cached
  end
end
     | 
  
 
    
      
  
  
    .all_communities(name)  ⇒ Object 
  
  
  
  
    
      
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 
     | 
    
      # File 'app/models/site_setting.rb', line 51
def self.all_communities(name)
  communities = Community.all
  keys = (communities.map { |c| [c.id, "SiteSetting/#{c.id}/#{name}"] } + [[nil, "SiteSetting//#{name}"]]).to_h
  cached = Rails.cache.read_multi(*keys.values, include_community: false)
  missing = keys.reject { |_k, v| cached.include?(v) }.map { |k, _v| k }
  settings = if missing.empty?
               {}
             else
               SiteSetting.where(name: name, community_id: missing).to_h { |s| [s., s] }
             end
  Rails.cache.write_multi(missing.to_h { |cid| [keys[cid], settings[cid]&.typed] }, include_community: false)
  communities.to_h do |c|
    [
      c.id,
      if cached.include?(keys[c.id])
        cached[keys[c.id]]
      elsif settings.include?(c.id)
        settings[c.id]&.typed
      elsif cached.include?(keys[nil])
        cached[keys[nil]]
      elsif settings.include?(nil)
        settings[nil]&.typed
      end
    ]
  end
end
     | 
  
 
    
      
  
  
    .applied_setting(name)  ⇒ Object 
  
  
  
  
    
      
47
48
49 
     | 
    
      # File 'app/models/site_setting.rb', line 47
def self.applied_setting(name)
  SiteSetting.(RequestContext.).or(global).where(name: name).priority_order.first
end 
     | 
  
 
    
      
  
  
    .exist?(name)  ⇒ Boolean 
  
  
  
  
    
      
28
29
30
31 
     | 
    
      # File 'app/models/site_setting.rb', line 28
def self.exist?(name)
  Rails.cache.exist?("SiteSettings/#{RequestContext.}/#{name}", include_community: false) ||
    SiteSetting.where(name: name).count.positive?
end
     | 
  
 
    
      
  
  
    .typed(setting)  ⇒ Object 
  
  
  
  
    
      
43
44
45 
     | 
    
      # File 'app/models/site_setting.rb', line 43
def self.typed(setting)
  SettingConverter.new(setting.value).send("as_#{setting.value_type.downcase}")
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #global?  ⇒ Boolean 
  
  
  
  
    
Checks whether the setting is a global site setting
   
 
  
    
      
35
36
37 
     | 
    
      # File 'app/models/site_setting.rb', line 35
def global?
  .nil?
end 
     | 
  
 
    
      
  
  
    #typed  ⇒ Object 
  
  
  
  
    
      
39
40
41 
     | 
    
      # File 'app/models/site_setting.rb', line 39
def typed
  SettingConverter.new(value).send("as_#{value_type.downcase}")
end
     |