Load site settings from config/site_settings.yml
This commit is contained in:
parent
968c0672ef
commit
791f5ac94e
|
@ -1,4 +1,5 @@
|
||||||
require 'site_setting_extension'
|
require 'site_setting_extension'
|
||||||
|
require_dependency 'site_settings/yaml_loader'
|
||||||
|
|
||||||
class SiteSetting < ActiveRecord::Base
|
class SiteSetting < ActiveRecord::Base
|
||||||
extend SiteSettingExtension
|
extend SiteSettingExtension
|
||||||
|
@ -6,273 +7,15 @@ class SiteSetting < ActiveRecord::Base
|
||||||
validates_presence_of :name
|
validates_presence_of :name
|
||||||
validates_presence_of :data_type
|
validates_presence_of :data_type
|
||||||
|
|
||||||
# settings available in javascript under Discourse.SiteSettings
|
SiteSettings::YamlLoader.new("#{Rails.root}/config/site_settings.yml").load do |category, name, default, opts|
|
||||||
client_setting(:title, "Discourse")
|
# TODO: category support
|
||||||
setting(:site_description, '')
|
if opts.delete(:client)
|
||||||
client_setting(:logo_url, '/assets/d-logo-sketch.png')
|
client_setting(name.to_sym, default)
|
||||||
client_setting(:logo_small_url, '/assets/d-logo-sketch-small.png')
|
else
|
||||||
setting(:contact_email, '')
|
setting(name.to_sym, default, opts)
|
||||||
setting(:company_full_name, 'My Unconfigured Forum Ltd.')
|
end
|
||||||
setting(:company_short_name, 'Unconfigured Forum')
|
end
|
||||||
setting(:company_domain, 'www.example.com')
|
|
||||||
client_setting(:tos_url, '')
|
|
||||||
client_setting(:faq_url, '')
|
|
||||||
client_setting(:privacy_policy_url, '')
|
|
||||||
client_setting(:traditional_markdown_linebreaks, false)
|
|
||||||
client_setting(:top_menu, 'latest|new|unread|favorited|categories')
|
|
||||||
client_setting(:post_menu, 'like|edit|flag|delete|share|bookmark|reply')
|
|
||||||
client_setting(:share_links, 'twitter|facebook|google+|email')
|
|
||||||
client_setting(:track_external_right_clicks, false)
|
|
||||||
client_setting(:must_approve_users, false)
|
|
||||||
client_setting(:ga_tracking_code, "")
|
|
||||||
client_setting(:ga_domain_name, "")
|
|
||||||
client_setting(:enable_escaped_fragments, false)
|
|
||||||
client_setting(:enable_noscript_support, true)
|
|
||||||
client_setting(:enable_long_polling, true)
|
|
||||||
client_setting(:polling_interval, 3000)
|
|
||||||
client_setting(:anon_polling_interval, 30000)
|
|
||||||
client_setting(:min_post_length, Rails.env.test? ? 5 : 20)
|
|
||||||
client_setting(:min_private_message_post_length, Rails.env.test? ? 5 : 10)
|
|
||||||
client_setting(:max_post_length, 32000)
|
|
||||||
client_setting(:min_topic_title_length, 15)
|
|
||||||
client_setting(:max_topic_title_length, 255)
|
|
||||||
client_setting(:min_private_message_title_length, 2)
|
|
||||||
client_setting(:allow_uncategorized_topics, true)
|
|
||||||
client_setting(:min_search_term_length, 3)
|
|
||||||
client_setting(:flush_timings_secs, 5)
|
|
||||||
client_setting(:suppress_reply_directly_below, true)
|
|
||||||
client_setting(:suppress_reply_directly_above, true)
|
|
||||||
client_setting(:email_domains_blacklist, 'mailinator.com')
|
|
||||||
client_setting(:email_domains_whitelist)
|
|
||||||
client_setting(:version_checks, true)
|
|
||||||
setting(:new_version_emails, true)
|
|
||||||
client_setting(:min_title_similar_length, 10)
|
|
||||||
client_setting(:min_body_similar_length, 15)
|
|
||||||
# cf. https://github.com/discourse/discourse/pull/462#issuecomment-14991562
|
|
||||||
client_setting(:category_colors, 'BF1E2E|F1592A|F7941D|9EB83B|3AB54A|12A89D|25AAE2|0E76BD|652D90|92278F|ED207B|8C6238|231F20|808281|B3B5B4|283890')
|
|
||||||
client_setting(:enable_wide_category_list, false)
|
|
||||||
|
|
||||||
# auto-replace rules for title
|
|
||||||
setting(:title_prettify, true)
|
|
||||||
|
|
||||||
client_setting(:max_image_size_kb, 2048)
|
|
||||||
client_setting(:max_attachment_size_kb, 1.kilobyte)
|
|
||||||
client_setting(:authorized_extensions, '.jpg|.jpeg|.png|.gif')
|
|
||||||
|
|
||||||
# settings only available server side
|
|
||||||
setting(:auto_track_topics_after, 240000)
|
|
||||||
setting(:new_topic_duration_minutes, 60 * 48)
|
|
||||||
setting(:long_polling_interval, 15000)
|
|
||||||
setting(:flags_required_to_hide_post, 3)
|
|
||||||
setting(:cooldown_minutes_after_hiding_posts, 10)
|
|
||||||
|
|
||||||
setting(:max_topics_in_first_day, 5)
|
|
||||||
setting(:max_replies_in_first_day, 10)
|
|
||||||
|
|
||||||
setting(:num_flags_to_block_new_user, 3)
|
|
||||||
setting(:num_users_to_block_new_user, 3)
|
|
||||||
setting(:notify_mods_when_user_blocked, false)
|
|
||||||
|
|
||||||
setting(:flag_sockpuppets, true)
|
|
||||||
|
|
||||||
# used mainly for dev, force hostname for Discourse.base_url
|
|
||||||
# You would usually use multisite for this
|
|
||||||
setting(:force_hostname, '')
|
|
||||||
setting(:port, Rails.env.development? ? 3000 : '')
|
|
||||||
setting(:enable_private_messages, true)
|
|
||||||
setting(:use_ssl, false)
|
|
||||||
setting(:queue_jobs, !Rails.env.test?)
|
|
||||||
setting(:crawl_images, !Rails.env.test?)
|
|
||||||
client_setting(:max_image_width, 690)
|
|
||||||
client_setting(:max_image_height, 500)
|
|
||||||
setting(:create_thumbnails, true)
|
|
||||||
client_setting(:category_featured_topics, 6)
|
|
||||||
setting(:topics_per_page, 30)
|
|
||||||
client_setting(:posts_per_page, 20)
|
|
||||||
setting(:invite_expiry_days, 14)
|
|
||||||
setting(:active_user_rate_limit_secs, 60)
|
|
||||||
setting(:previous_visit_timeout_hours, 1)
|
|
||||||
client_setting(:favicon_url, '/assets/default-favicon.ico')
|
|
||||||
setting(:apple_touch_icon_url, '/assets/default-apple-touch-icon.png')
|
|
||||||
|
|
||||||
setting(:ninja_edit_window, 5.minutes.to_i)
|
|
||||||
client_setting(:edit_history_visible_to_public, true)
|
|
||||||
client_setting(:delete_removed_posts_after, 24) # hours
|
|
||||||
setting(:post_undo_action_window_mins, 10)
|
|
||||||
setting(:site_contact_username, '')
|
|
||||||
setting(:max_mentions_per_post, 10)
|
|
||||||
setting(:newuser_max_mentions_per_post, 2)
|
|
||||||
|
|
||||||
setting(:unique_posts_mins, Rails.env.test? ? 0 : 5)
|
|
||||||
|
|
||||||
# Rate Limits
|
|
||||||
setting(:rate_limit_create_topic, 5)
|
|
||||||
setting(:rate_limit_create_post, 5)
|
|
||||||
setting(:max_topics_per_day, 20)
|
|
||||||
setting(:max_private_messages_per_day, 20)
|
|
||||||
setting(:max_likes_per_day, 50)
|
|
||||||
setting(:max_bookmarks_per_day, 20)
|
|
||||||
setting(:max_flags_per_day, 20)
|
|
||||||
setting(:max_edits_per_day, 30)
|
|
||||||
setting(:max_favorites_per_day, 20)
|
|
||||||
|
|
||||||
setting(:email_time_window_mins, 10)
|
|
||||||
setting(:email_posts_context, 5)
|
|
||||||
setting(:default_digest_email_frequency, '7', enum: 'DigestEmailSiteSetting')
|
|
||||||
|
|
||||||
# How many characters we can import into a onebox
|
|
||||||
setting(:onebox_max_chars, 5000)
|
|
||||||
|
|
||||||
setting(:suggested_topics, 5)
|
|
||||||
|
|
||||||
setting(:allow_duplicate_topic_titles, false)
|
|
||||||
|
|
||||||
setting(:staff_like_weight, 3)
|
|
||||||
|
|
||||||
setting(:add_rel_nofollow_to_user_content, true)
|
|
||||||
setting(:exclude_rel_nofollow_domains, '')
|
|
||||||
setting(:post_excerpt_maxlength, 300)
|
|
||||||
setting(:post_onebox_maxlength, 500)
|
|
||||||
setting(:best_of_score_threshold, 15)
|
|
||||||
setting(:best_of_posts_required, 50)
|
|
||||||
setting(:best_of_likes_required, 1)
|
|
||||||
setting(:best_of_percent_filter, 20)
|
|
||||||
|
|
||||||
# we need to think of a way to force users to enter certain settings, this is a minimal config thing
|
|
||||||
setting(:notification_email, 'info@discourse.org')
|
|
||||||
setting(:email_custom_headers, 'Auto-Submitted: auto-generated')
|
|
||||||
|
|
||||||
setting(:allow_index_in_robots_txt, true)
|
|
||||||
|
|
||||||
setting(:send_welcome_message, true)
|
|
||||||
|
|
||||||
client_setting(:invite_only, false)
|
|
||||||
|
|
||||||
client_setting(:login_required, false)
|
|
||||||
|
|
||||||
client_setting(:enable_local_logins, true)
|
|
||||||
client_setting(:enable_local_account_create, true)
|
|
||||||
|
|
||||||
client_setting(:enable_google_logins, true)
|
|
||||||
client_setting(:enable_yahoo_logins, true)
|
|
||||||
|
|
||||||
client_setting(:enable_twitter_logins, true)
|
|
||||||
setting(:twitter_consumer_key, '')
|
|
||||||
setting(:twitter_consumer_secret, '')
|
|
||||||
|
|
||||||
# note we set this (and twitter to true for 2 reasons)
|
|
||||||
# 1. its an upgrade nightmare to change it to false, lots of people will complain
|
|
||||||
# 2. it advertises the feature (even though it is broken)
|
|
||||||
client_setting(:enable_facebook_logins, true)
|
|
||||||
setting(:facebook_app_id, '')
|
|
||||||
setting(:facebook_app_secret, '')
|
|
||||||
|
|
||||||
client_setting(:enable_cas_logins, false)
|
|
||||||
setting(:cas_hostname, '')
|
|
||||||
setting(:cas_domainname, '')
|
|
||||||
|
|
||||||
client_setting(:enable_github_logins, false)
|
|
||||||
setting(:github_client_id, '')
|
|
||||||
setting(:github_client_secret, '')
|
|
||||||
|
|
||||||
client_setting(:enable_persona_logins, false)
|
|
||||||
|
|
||||||
setting(:enforce_global_nicknames, true)
|
|
||||||
setting(:discourse_org_access_key, '')
|
|
||||||
|
|
||||||
setting(:clean_up_uploads, false)
|
|
||||||
setting(:uploads_grace_period_in_hours, 1)
|
|
||||||
setting(:enable_s3_uploads, false)
|
|
||||||
setting(:s3_access_key_id, '')
|
|
||||||
setting(:s3_secret_access_key, '')
|
|
||||||
setting(:s3_region, '', enum: 'S3RegionSiteSetting')
|
|
||||||
setting(:s3_upload_bucket, '')
|
|
||||||
|
|
||||||
setting(:enable_flash_video_onebox, false)
|
|
||||||
|
|
||||||
setting(:default_trust_level, 0)
|
|
||||||
setting(:default_invitee_trust_level, 1)
|
|
||||||
|
|
||||||
# Import/Export settings
|
|
||||||
setting(:allow_import, false)
|
|
||||||
|
|
||||||
# Trust related
|
|
||||||
setting(:basic_requires_topics_entered, 5)
|
|
||||||
setting(:basic_requires_read_posts, 50)
|
|
||||||
setting(:basic_requires_time_spent_mins, 15)
|
|
||||||
|
|
||||||
setting(:regular_requires_topics_entered, 20)
|
|
||||||
setting(:regular_requires_read_posts, 100)
|
|
||||||
setting(:regular_requires_time_spent_mins, 60)
|
|
||||||
setting(:regular_requires_days_visited, 15)
|
|
||||||
setting(:regular_requires_likes_received, 1)
|
|
||||||
setting(:regular_requires_likes_given, 1)
|
|
||||||
setting(:regular_requires_topic_reply_count, 3)
|
|
||||||
|
|
||||||
setting(:min_trust_to_create_topic, 0, enum: 'MinTrustToCreateTopicSetting')
|
|
||||||
|
|
||||||
# Reply by Email Settings
|
|
||||||
setting(:reply_by_email_enabled, false)
|
|
||||||
setting(:reply_by_email_address, '')
|
|
||||||
|
|
||||||
setting(:pop3s_polling_enabled, false)
|
|
||||||
setting(:pop3s_polling_host, '')
|
|
||||||
setting(:pop3s_polling_port, 995)
|
|
||||||
setting(:pop3s_polling_username, '')
|
|
||||||
setting(:pop3s_polling_password, '')
|
|
||||||
|
|
||||||
# Entropy checks
|
|
||||||
setting(:title_min_entropy, 10)
|
|
||||||
setting(:body_min_entropy, 7)
|
|
||||||
setting(:max_word_length, 30)
|
|
||||||
|
|
||||||
setting(:newuser_max_links, 2)
|
|
||||||
client_setting(:newuser_max_images, 0)
|
|
||||||
client_setting(:newuser_max_attachments, 0)
|
|
||||||
|
|
||||||
setting(:newuser_spam_host_threshold, 3)
|
|
||||||
|
|
||||||
setting(:title_fancy_entities, true)
|
|
||||||
|
|
||||||
# The default locale for the site
|
|
||||||
setting(:default_locale, 'en', enum: 'LocaleSiteSetting')
|
|
||||||
|
|
||||||
client_setting(:educate_until_posts, 2)
|
|
||||||
|
|
||||||
setting(:max_similar_results, 7)
|
|
||||||
|
|
||||||
# Settings for topic heat
|
|
||||||
client_setting(:topic_views_heat_low, 1000)
|
|
||||||
client_setting(:topic_views_heat_medium, 2000)
|
|
||||||
client_setting(:topic_views_heat_high, 5000)
|
|
||||||
|
|
||||||
setting(:minimum_topics_similar, 50)
|
|
||||||
|
|
||||||
client_setting(:relative_date_duration, 30)
|
|
||||||
|
|
||||||
client_setting(:delete_user_max_age, 14)
|
|
||||||
setting(:delete_all_posts_max, 15)
|
|
||||||
|
|
||||||
setting(:username_change_period, 3) # days
|
|
||||||
setting(:email_editable, true)
|
|
||||||
|
|
||||||
client_setting(:allow_uploaded_avatars, true)
|
|
||||||
client_setting(:allow_animated_avatars, false)
|
|
||||||
|
|
||||||
setting(:detect_custom_avatars, true)
|
|
||||||
setting(:max_daily_gravatar_crawls, 500)
|
|
||||||
|
|
||||||
setting(:sequential_replies_threshold, 2)
|
|
||||||
client_setting(:enable_mobile_theme, true)
|
|
||||||
|
|
||||||
setting(:dominating_topic_minimum_percent, 20)
|
|
||||||
|
|
||||||
# hidden setting only used by system
|
|
||||||
setting(:uncategorized_category_id, -1, hidden: true)
|
|
||||||
|
|
||||||
client_setting(:display_name_on_posts, false)
|
|
||||||
client_setting(:enable_names, true)
|
|
||||||
client_setting(:invites_shown, 30)
|
|
||||||
|
|
||||||
def self.call_discourse_hub?
|
def self.call_discourse_hub?
|
||||||
self.enforce_global_nicknames? && self.discourse_org_access_key.present?
|
self.enforce_global_nicknames? && self.discourse_org_access_key.present?
|
||||||
|
|
|
@ -0,0 +1,363 @@
|
||||||
|
all:
|
||||||
|
title:
|
||||||
|
client: true
|
||||||
|
default: 'Discourse'
|
||||||
|
site_description: ''
|
||||||
|
logo_url:
|
||||||
|
client: true
|
||||||
|
default: '/assets/d-logo-sketch.png'
|
||||||
|
logo_small_url:
|
||||||
|
client: true
|
||||||
|
default: '/assets/d-logo-sketch-small.png'
|
||||||
|
contact_email: ''
|
||||||
|
company_full_name: 'My Unconfigured Forum Ltd.'
|
||||||
|
company_short_name: 'Unconfigured Forum'
|
||||||
|
company_domain: 'www.example.com'
|
||||||
|
tos_url:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
faq_url:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
privacy_policy_url:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
traditional_markdown_linebreaks:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
top_menu:
|
||||||
|
client: true
|
||||||
|
default: 'latest|new|unread|favorited|categories'
|
||||||
|
post_menu:
|
||||||
|
client: true
|
||||||
|
default: 'like|edit|flag|delete|share|bookmark|reply'
|
||||||
|
share_links:
|
||||||
|
client: true
|
||||||
|
default: 'twitter|facebook|google+|email'
|
||||||
|
track_external_right_clicks:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
must_approve_users:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
ga_tracking_code:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
ga_domain_name:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
enable_escaped_fragments:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
enable_noscript_support:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
enable_long_polling:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
polling_interval:
|
||||||
|
client: true
|
||||||
|
default: 3000
|
||||||
|
anon_polling_interval:
|
||||||
|
client: true
|
||||||
|
default: 30000
|
||||||
|
min_post_length:
|
||||||
|
client: true
|
||||||
|
default:
|
||||||
|
test: 5
|
||||||
|
default: 20
|
||||||
|
min_private_message_post_length:
|
||||||
|
client: true
|
||||||
|
default:
|
||||||
|
test: 5
|
||||||
|
default: 10
|
||||||
|
max_post_length:
|
||||||
|
client: true
|
||||||
|
default: 32000
|
||||||
|
min_topic_title_length:
|
||||||
|
client: true
|
||||||
|
default: 15
|
||||||
|
max_topic_title_length:
|
||||||
|
client: true
|
||||||
|
default: 255
|
||||||
|
min_private_message_title_length:
|
||||||
|
client: true
|
||||||
|
default: 2
|
||||||
|
allow_uncategorized_topics:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
min_search_term_length:
|
||||||
|
client: true
|
||||||
|
default: 3
|
||||||
|
flush_timings_secs:
|
||||||
|
client: true
|
||||||
|
default: 5
|
||||||
|
suppress_reply_directly_below:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
suppress_reply_directly_above:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
email_domains_blacklist:
|
||||||
|
client: true
|
||||||
|
default: 'mailinator.com'
|
||||||
|
email_domains_whitelist:
|
||||||
|
client: true
|
||||||
|
default: ''
|
||||||
|
version_checks:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
new_version_emails: true
|
||||||
|
min_title_similar_length:
|
||||||
|
client: true
|
||||||
|
default: 10
|
||||||
|
min_body_similar_length:
|
||||||
|
client: true
|
||||||
|
default: 15
|
||||||
|
category_colors:
|
||||||
|
client: true
|
||||||
|
default: 'BF1E2E|F1592A|F7941D|9EB83B|3AB54A|12A89D|25AAE2|0E76BD|652D90|92278F|ED207B|8C6238|231F20|808281|B3B5B4|283890'
|
||||||
|
enable_wide_category_list:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
title_prettify: true
|
||||||
|
max_image_size_kb:
|
||||||
|
client: true
|
||||||
|
default: 2048
|
||||||
|
max_attachment_size_kb:
|
||||||
|
client: true
|
||||||
|
default: 1024
|
||||||
|
authorized_extensions:
|
||||||
|
client: true
|
||||||
|
default: '.jpg|.jpeg|.png|.gif'
|
||||||
|
auto_track_topics_after: 240000
|
||||||
|
new_topic_duration_minutes: 2880
|
||||||
|
long_polling_interval: 15000
|
||||||
|
flags_required_to_hide_post: 3
|
||||||
|
cooldown_minutes_after_hiding_posts: 10
|
||||||
|
max_topics_in_first_day: 5
|
||||||
|
max_replies_in_first_day: 10
|
||||||
|
num_flags_to_block_new_user: 3
|
||||||
|
num_users_to_block_new_user: 3
|
||||||
|
notify_mods_when_user_blocked: false
|
||||||
|
flag_sockpuppets: true
|
||||||
|
force_hostname: ''
|
||||||
|
port:
|
||||||
|
default:
|
||||||
|
development: 3000
|
||||||
|
default: ''
|
||||||
|
enable_private_messages: true
|
||||||
|
use_ssl: false
|
||||||
|
queue_jobs:
|
||||||
|
default:
|
||||||
|
test: false
|
||||||
|
default: true
|
||||||
|
crawl_images:
|
||||||
|
default:
|
||||||
|
test: false
|
||||||
|
default: true
|
||||||
|
max_image_width:
|
||||||
|
client: true
|
||||||
|
default: 690
|
||||||
|
max_image_height:
|
||||||
|
client: true
|
||||||
|
default: 500
|
||||||
|
create_thumbnails: true
|
||||||
|
category_featured_topics:
|
||||||
|
client: true
|
||||||
|
default: 6
|
||||||
|
topics_per_page: 30
|
||||||
|
posts_per_page:
|
||||||
|
client: true
|
||||||
|
default: 20
|
||||||
|
invite_expiry_days: 14
|
||||||
|
active_user_rate_limit_secs: 60
|
||||||
|
previous_visit_timeout_hours: 1
|
||||||
|
favicon_url:
|
||||||
|
client: true
|
||||||
|
default: '/assets/default-favicon.ico'
|
||||||
|
apple_touch_icon_url: /assets/default-apple-touch-icon.png'
|
||||||
|
ninja_edit_window: 300
|
||||||
|
edit_history_visible_to_public:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
delete_removed_posts_after:
|
||||||
|
client: true
|
||||||
|
default: 24
|
||||||
|
post_undo_action_window_mins: 10
|
||||||
|
site_contact_username: ''
|
||||||
|
max_mentions_per_post: 10
|
||||||
|
newuser_max_mentions_per_post: 2
|
||||||
|
unique_posts_mins:
|
||||||
|
default:
|
||||||
|
test: 0
|
||||||
|
default: 5
|
||||||
|
rate_limit_create_topic: 5
|
||||||
|
rate_limit_create_post: 5
|
||||||
|
max_topics_per_day: 20
|
||||||
|
max_private_messages_per_day: 20
|
||||||
|
max_likes_per_day: 50
|
||||||
|
max_bookmarks_per_day: 20
|
||||||
|
max_flags_per_day: 20
|
||||||
|
max_edits_per_day: 30
|
||||||
|
max_favorites_per_day: 20
|
||||||
|
email_time_window_mins: 10
|
||||||
|
email_posts_context: 5
|
||||||
|
default_digest_email_frequency:
|
||||||
|
default: 7
|
||||||
|
enum: 'DigestEmailSiteSetting'
|
||||||
|
onebox_max_chars: 5000
|
||||||
|
suggested_topics: 5
|
||||||
|
allow_duplicate_topic_titles: false
|
||||||
|
staff_like_weight: 3
|
||||||
|
add_rel_nofollow_to_user_content: true
|
||||||
|
exclude_rel_nofollow_domains: ''
|
||||||
|
post_excerpt_maxlength: 300
|
||||||
|
post_onebox_maxlength: 500
|
||||||
|
best_of_score_threshold: 15
|
||||||
|
best_of_posts_required: 50
|
||||||
|
best_of_likes_required: 1
|
||||||
|
best_of_percent_filter: 20
|
||||||
|
notification_email: 'info@discourse.org'
|
||||||
|
email_custom_headers: 'Auto-Submitted: auto-generated'
|
||||||
|
allow_index_in_robots_txt: true
|
||||||
|
send_welcome_message: true
|
||||||
|
invite_only:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
login_required:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
enable_local_logins:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
enable_local_account_create:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
enable_google_logins:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
enable_yahoo_logins:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
enable_twitter_logins:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
twitter_consumer_key: ''
|
||||||
|
twitter_consumer_secret: ''
|
||||||
|
enable_facebook_logins:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
facebook_app_id: ''
|
||||||
|
facebook_app_secret: ''
|
||||||
|
enable_cas_logins:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
cas_hostname: ''
|
||||||
|
cas_domainname: ''
|
||||||
|
enable_github_logins:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
github_client_id: ''
|
||||||
|
github_client_secret: ''
|
||||||
|
enable_persona_logins:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
enforce_global_nicknames: true
|
||||||
|
discourse_org_access_key: ''
|
||||||
|
clean_up_uploads: false
|
||||||
|
uploads_grace_period_in_hours: 1
|
||||||
|
enable_s3_uploads: false
|
||||||
|
s3_access_key_id: ''
|
||||||
|
s3_secret_access_key: ''
|
||||||
|
s3_region:
|
||||||
|
default: ''
|
||||||
|
enum: 'S3RegionSiteSetting'
|
||||||
|
s3_upload_bucket: ''
|
||||||
|
enable_flash_video_onebox: false
|
||||||
|
default_trust_level: 0
|
||||||
|
default_invitee_trust_level: 1
|
||||||
|
allow_import: false
|
||||||
|
basic_requires_topics_entered: 5
|
||||||
|
basic_requires_read_posts: 50
|
||||||
|
basic_requires_time_spent_mins: 15
|
||||||
|
regular_requires_topics_entered: 20
|
||||||
|
regular_requires_read_posts: 100
|
||||||
|
regular_requires_time_spent_mins: 60
|
||||||
|
regular_requires_days_visited: 15
|
||||||
|
regular_requires_likes_received: 1
|
||||||
|
regular_requires_likes_given: 1
|
||||||
|
regular_requires_topic_reply_count: 3
|
||||||
|
min_trust_to_create_topic:
|
||||||
|
default: 0
|
||||||
|
enum: 'MinTrustToCreateTopicSetting'
|
||||||
|
reply_by_email_enabled: false
|
||||||
|
reply_by_email_address: ''
|
||||||
|
pop3s_polling_enabled: false
|
||||||
|
pop3s_polling_host: ''
|
||||||
|
pop3s_polling_port: 995
|
||||||
|
pop3s_polling_username: ''
|
||||||
|
pop3s_polling_password: ''
|
||||||
|
title_min_entropy: 10
|
||||||
|
body_min_entropy: 7
|
||||||
|
max_word_length: 30
|
||||||
|
newuser_max_links: 2
|
||||||
|
newuser_max_images:
|
||||||
|
client: true
|
||||||
|
default: 0
|
||||||
|
newuser_max_attachments:
|
||||||
|
client: true
|
||||||
|
default: 0
|
||||||
|
newuser_spam_host_threshold: 3
|
||||||
|
title_fancy_entities: true
|
||||||
|
default_locale:
|
||||||
|
default: 'en'
|
||||||
|
enum: 'LocaleSiteSetting'
|
||||||
|
educate_until_posts:
|
||||||
|
client: true
|
||||||
|
default: 2
|
||||||
|
max_similar_results: 7
|
||||||
|
topic_views_heat_low:
|
||||||
|
client: true
|
||||||
|
default: 1000
|
||||||
|
topic_views_heat_medium:
|
||||||
|
client: true
|
||||||
|
default: 2000
|
||||||
|
topic_views_heat_high:
|
||||||
|
client: true
|
||||||
|
default: 5000
|
||||||
|
minimum_topics_similar: 50
|
||||||
|
relative_date_duration:
|
||||||
|
client: true
|
||||||
|
default: 30
|
||||||
|
delete_user_max_age:
|
||||||
|
client: true
|
||||||
|
default: 14
|
||||||
|
delete_all_posts_max: 15
|
||||||
|
username_change_period: 3
|
||||||
|
email_editable: true
|
||||||
|
allow_uploaded_avatars:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
allow_animated_avatars:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
detect_custom_avatars: true
|
||||||
|
max_daily_gravatar_crawls: 500
|
||||||
|
sequential_replies_threshold: 2
|
||||||
|
enable_mobile_theme:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
dominating_topic_minimum_percent: 20
|
||||||
|
uncategorized_category_id:
|
||||||
|
default: -1
|
||||||
|
hidden: true
|
||||||
|
display_name_on_posts:
|
||||||
|
client: true
|
||||||
|
default: false
|
||||||
|
enable_names:
|
||||||
|
client: true
|
||||||
|
default: true
|
||||||
|
invites_shown:
|
||||||
|
client: true
|
||||||
|
default: 30
|
|
@ -0,0 +1,30 @@
|
||||||
|
module SiteSettings; end
|
||||||
|
|
||||||
|
class SiteSettings::YamlLoader
|
||||||
|
|
||||||
|
def initialize(file)
|
||||||
|
@file = file
|
||||||
|
end
|
||||||
|
|
||||||
|
def load
|
||||||
|
yaml = YAML.load_file(@file)
|
||||||
|
yaml.keys.each do |category|
|
||||||
|
yaml[category].each do |setting_name, hash|
|
||||||
|
if hash.is_a?(Hash)
|
||||||
|
# Get default value for the site setting:
|
||||||
|
value = hash.delete('default')
|
||||||
|
|
||||||
|
# If there's a different default value for each environment, choose the right one:
|
||||||
|
if value.is_a?(Hash)
|
||||||
|
value = value.has_key?(Rails.env) ? value[Rails.env] : value['default']
|
||||||
|
end
|
||||||
|
|
||||||
|
yield category, setting_name, value, hash.symbolize_keys!
|
||||||
|
else
|
||||||
|
# Simplest case. site_setting_name: 'default value'
|
||||||
|
yield category, setting_name, hash, {}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,83 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'site_settings/yaml_loader'
|
||||||
|
|
||||||
|
describe SiteSettings::YamlLoader do
|
||||||
|
|
||||||
|
class Receiver
|
||||||
|
attr_reader :settings, :client_settings, :categories
|
||||||
|
|
||||||
|
def load_yaml(file_arg)
|
||||||
|
SiteSettings::YamlLoader.new(file_arg).load do |category, name, default, opts|
|
||||||
|
if opts.delete(:client)
|
||||||
|
client_setting(category, name, default, opts)
|
||||||
|
else
|
||||||
|
setting(category, name, default, opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setting(category, name, default = nil, opts = {})
|
||||||
|
@settings ||= []
|
||||||
|
@settings << name
|
||||||
|
@categories ||= []
|
||||||
|
@categories << category
|
||||||
|
@categories.uniq!
|
||||||
|
end
|
||||||
|
|
||||||
|
def client_setting(category, name, default = nil)
|
||||||
|
@client_settings ||= []
|
||||||
|
@client_settings << name
|
||||||
|
setting(category, name, default)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
let!(:receiver) { Receiver.new }
|
||||||
|
let(:simple) { "#{Rails.root}/spec/fixtures/site_settings/simple.yml" }
|
||||||
|
let(:client) { "#{Rails.root}/spec/fixtures/site_settings/client.yml" }
|
||||||
|
let(:enum) { "#{Rails.root}/spec/fixtures/site_settings/enum.yml" }
|
||||||
|
let(:enum_client) { "#{Rails.root}/spec/fixtures/site_settings/enum_client.yml" }
|
||||||
|
let(:env) { "#{Rails.root}/spec/fixtures/site_settings/env.yml" }
|
||||||
|
|
||||||
|
it "loads simple settings" do
|
||||||
|
receiver.expects(:setting).with('category1', 'title', 'My Site', {}).once
|
||||||
|
receiver.expects(:setting).with('category1', 'contact_email', 'webmaster@example.com', {}).once
|
||||||
|
receiver.expects(:setting).with('category2', 'ninja_edit_window', true, {}).once
|
||||||
|
receiver.expects(:setting).with('category3', 'reply_by_email_address', '', {}).once
|
||||||
|
receiver.load_yaml(simple)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'can take a File argument' do
|
||||||
|
receiver.expects(:setting).at_least_once
|
||||||
|
receiver.load_yaml( File.new(simple) )
|
||||||
|
end
|
||||||
|
|
||||||
|
it "maintains order of categories" do
|
||||||
|
receiver.load_yaml(simple)
|
||||||
|
receiver.categories.should == ['category1', 'category2', 'category3']
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can load client settings" do
|
||||||
|
receiver.expects(:client_setting).with('category1', 'title', 'Discourse', {})
|
||||||
|
receiver.expects(:client_setting).with('category2', 'tos_url', '', {})
|
||||||
|
receiver.expects(:client_setting).with('category2', 'must_approve_users', false, {})
|
||||||
|
receiver.load_yaml(client)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can load enum settings" do
|
||||||
|
receiver.expects(:setting).with('email', 'default_digest_email_frequency', 7, {enum: 'DigestEmailSiteSetting'})
|
||||||
|
receiver.load_yaml(enum)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can load enum client settings" do
|
||||||
|
receiver.expects(:client_setting).with do |category, name, default, opts|
|
||||||
|
category == 'basics' and name == 'default_locale' and default == 'en' and opts[:enum] == 'LocaleSiteSetting'
|
||||||
|
end
|
||||||
|
receiver.load_yaml(enum_client)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can load settings based on environment" do
|
||||||
|
receiver.expects(:setting).with('misc', 'port', '', {})
|
||||||
|
receiver.expects(:client_setting).with('misc', 'crawl_images', false, {})
|
||||||
|
receiver.load_yaml(env)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,12 @@
|
||||||
|
category1:
|
||||||
|
title:
|
||||||
|
default: Discourse
|
||||||
|
client: true
|
||||||
|
|
||||||
|
category2:
|
||||||
|
tos_url:
|
||||||
|
default: ''
|
||||||
|
client: true
|
||||||
|
must_approve_users:
|
||||||
|
default: false
|
||||||
|
client: true
|
|
@ -0,0 +1,4 @@
|
||||||
|
email:
|
||||||
|
default_digest_email_frequency:
|
||||||
|
default: 7
|
||||||
|
enum: 'DigestEmailSiteSetting'
|
|
@ -0,0 +1,5 @@
|
||||||
|
basics:
|
||||||
|
default_locale:
|
||||||
|
client: true
|
||||||
|
default: 'en'
|
||||||
|
enum: 'LocaleSiteSetting'
|
|
@ -0,0 +1,10 @@
|
||||||
|
misc:
|
||||||
|
port:
|
||||||
|
default:
|
||||||
|
development: 3000
|
||||||
|
default: ''
|
||||||
|
crawl_images:
|
||||||
|
client: true
|
||||||
|
default:
|
||||||
|
test: false
|
||||||
|
default: true
|
|
@ -0,0 +1,9 @@
|
||||||
|
category1:
|
||||||
|
title: 'My Site'
|
||||||
|
contact_email: 'webmaster@example.com'
|
||||||
|
|
||||||
|
category2:
|
||||||
|
ninja_edit_window: true
|
||||||
|
|
||||||
|
category3:
|
||||||
|
reply_by_email_address: ''
|
Loading…
Reference in New Issue