2013-02-06 03:16:51 +08:00
|
|
|
require 'site_setting_extension'
|
2013-11-07 04:47:26 +08:00
|
|
|
require_dependency 'site_settings/yaml_loader'
|
2013-02-06 03:16:51 +08:00
|
|
|
|
|
|
|
class SiteSetting < ActiveRecord::Base
|
|
|
|
extend SiteSettingExtension
|
|
|
|
|
|
|
|
validates_presence_of :name
|
|
|
|
validates_presence_of :data_type
|
|
|
|
|
2014-12-12 00:08:47 +08:00
|
|
|
after_save do |site_setting|
|
|
|
|
DiscourseEvent.trigger(:site_setting_saved, site_setting)
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
2013-11-20 03:43:01 +08:00
|
|
|
def self.load_settings(file)
|
|
|
|
SiteSettings::YamlLoader.new(file).load do |category, name, default, opts|
|
|
|
|
if opts.delete(:client)
|
|
|
|
client_setting(name, default, opts.merge(category: category))
|
|
|
|
else
|
|
|
|
setting(name, default, opts.merge(category: category))
|
|
|
|
end
|
2013-11-07 04:47:26 +08:00
|
|
|
end
|
|
|
|
end
|
2013-10-24 07:05:51 +08:00
|
|
|
|
2013-11-20 03:43:01 +08:00
|
|
|
load_settings(File.join(Rails.root, 'config', 'site_settings.yml'))
|
|
|
|
|
2014-12-12 00:08:47 +08:00
|
|
|
unless Rails.env.test? && ENV['LOAD_PLUGINS'] != "1"
|
|
|
|
Dir[File.join(Rails.root, "plugins", "*", "config", "settings.yml")].each do |file|
|
|
|
|
load_settings(file)
|
|
|
|
end
|
2013-11-20 03:43:01 +08:00
|
|
|
end
|
|
|
|
|
2014-03-28 13:36:17 +08:00
|
|
|
client_settings << :available_locales
|
2014-02-08 11:24:10 +08:00
|
|
|
|
|
|
|
def self.available_locales
|
|
|
|
LocaleSiteSetting.values.map{ |e| e[:value] }.join('|')
|
|
|
|
end
|
2013-11-20 03:43:01 +08:00
|
|
|
|
2013-02-27 00:27:59 +08:00
|
|
|
def self.topic_title_length
|
|
|
|
min_topic_title_length..max_topic_title_length
|
|
|
|
end
|
|
|
|
|
2013-06-05 05:58:25 +08:00
|
|
|
def self.private_message_title_length
|
|
|
|
min_private_message_title_length..max_topic_title_length
|
|
|
|
end
|
|
|
|
|
2013-03-01 02:54:12 +08:00
|
|
|
def self.post_length
|
|
|
|
min_post_length..max_post_length
|
|
|
|
end
|
2013-03-28 21:01:13 +08:00
|
|
|
|
2015-03-19 22:17:55 +08:00
|
|
|
def self.first_post_length
|
|
|
|
min_first_post_length..max_post_length
|
|
|
|
end
|
|
|
|
|
2013-06-13 16:18:17 +08:00
|
|
|
def self.private_message_post_length
|
|
|
|
min_private_message_post_length..max_post_length
|
|
|
|
end
|
|
|
|
|
2013-06-22 04:31:40 +08:00
|
|
|
def self.top_menu_items
|
|
|
|
top_menu.split('|').map { |menu_item| TopMenuItem.new(menu_item) }
|
|
|
|
end
|
|
|
|
|
2013-03-28 21:01:13 +08:00
|
|
|
def self.homepage
|
2013-06-22 04:31:40 +08:00
|
|
|
top_menu_items[0].name
|
2013-03-28 21:01:13 +08:00
|
|
|
end
|
|
|
|
|
2013-07-16 07:59:23 +08:00
|
|
|
def self.anonymous_menu_items
|
2013-12-24 07:50:36 +08:00
|
|
|
@anonymous_menu_items ||= Set.new Discourse.anonymous_filters.map(&:to_s)
|
2013-07-16 07:59:23 +08:00
|
|
|
end
|
|
|
|
|
2014-02-13 04:55:44 +08:00
|
|
|
def self.normalized_embeddable_host
|
|
|
|
return embeddable_host if embeddable_host.blank?
|
|
|
|
embeddable_host.sub(/^https?\:\/\//, '')
|
|
|
|
end
|
|
|
|
|
2013-03-28 21:01:13 +08:00
|
|
|
def self.anonymous_homepage
|
2013-07-16 07:59:23 +08:00
|
|
|
top_menu_items.map { |item| item.name }
|
|
|
|
.select { |item| anonymous_menu_items.include?(item) }
|
|
|
|
.first
|
|
|
|
end
|
|
|
|
|
2014-04-22 04:59:53 +08:00
|
|
|
def self.should_download_images?(src)
|
|
|
|
setting = disabled_image_download_domains
|
|
|
|
return true unless setting.present?
|
|
|
|
|
2014-05-08 01:49:16 +08:00
|
|
|
host = URI.parse(src).host
|
2014-04-22 04:59:53 +08:00
|
|
|
return !(setting.split('|').include?(host))
|
|
|
|
rescue URI::InvalidURIError
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2013-12-16 18:44:59 +08:00
|
|
|
def self.scheme
|
2014-01-09 07:51:38 +08:00
|
|
|
use_https? ? "https" : "http"
|
2013-12-16 18:44:59 +08:00
|
|
|
end
|
|
|
|
|
2014-03-08 01:58:53 +08:00
|
|
|
def self.has_enough_topics_to_redirect_to_top
|
2014-05-08 01:04:39 +08:00
|
|
|
TopTopic.periods.each do |period|
|
2014-06-17 17:26:36 +08:00
|
|
|
topics_per_period = TopTopic.where("#{period}_score > 0")
|
|
|
|
.limit(SiteSetting.topics_per_period_in_top_page)
|
|
|
|
.count
|
|
|
|
return true if topics_per_period >= SiteSetting.topics_per_period_in_top_page
|
2014-05-08 01:04:39 +08:00
|
|
|
end
|
|
|
|
# nothing
|
|
|
|
false
|
2014-03-08 01:58:53 +08:00
|
|
|
end
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
2013-05-24 10:48:32 +08:00
|
|
|
|
|
|
|
# == Schema Information
|
|
|
|
#
|
|
|
|
# Table name: site_settings
|
|
|
|
#
|
|
|
|
# id :integer not null, primary key
|
|
|
|
# name :string(255) not null
|
|
|
|
# data_type :integer not null
|
|
|
|
# value :text
|
2014-08-27 13:30:17 +08:00
|
|
|
# created_at :datetime not null
|
|
|
|
# updated_at :datetime not null
|
2013-05-24 10:48:32 +08:00
|
|
|
#
|