2013-02-05 14:16:51 -05:00
require 'site_setting_extension'
class SiteSetting < ActiveRecord :: Base
extend SiteSettingExtension
validates_presence_of :name
validates_presence_of :data_type
# settings available in javascript under Discourse.SiteSettings
client_setting ( :title , " Discourse " )
2013-02-12 15:06:34 +11:00
client_setting ( :logo_url , '/assets/d-logo-sketch.png' )
client_setting ( :logo_small_url , '/assets/d-logo-sketch-small.png' )
2013-04-24 11:15:37 -04:00
setting ( :contact_email , '' )
2013-02-26 15:50:29 -05:00
setting ( :company_full_name , 'My Unconfigured Forum Ltd.' )
setting ( :company_short_name , 'Unconfigured Forum' )
setting ( :company_domain , 'www.example.com' )
2013-06-27 13:01:04 -04:00
client_setting ( :tos_url , '' )
2013-06-27 17:15:59 +10:00
client_setting ( :faq_url , '' )
2013-06-27 13:01:04 -04:00
client_setting ( :privacy_policy_url , '' )
2013-03-25 18:04:28 -07:00
setting ( :api_key , '' )
2013-02-05 14:16:51 -05:00
client_setting ( :traditional_markdown_linebreaks , false )
2013-04-24 18:05:35 +10:00
client_setting ( :top_menu , 'latest|new|unread|favorited|categories' )
2013-02-05 14:16:51 -05:00
client_setting ( :post_menu , 'like|edit|flag|delete|share|bookmark|reply' )
2013-04-12 18:06:36 -04:00
client_setting ( :share_links , 'twitter|facebook|google+|email' )
2013-02-05 14:16:51 -05:00
client_setting ( :track_external_right_clicks , false )
client_setting ( :must_approve_users , false )
client_setting ( :ga_tracking_code , " " )
2013-05-03 21:58:10 +02:00
client_setting ( :ga_domain_name , " " )
2013-02-05 14:16:51 -05:00
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 )
2013-06-13 18:18:17 +10:00
client_setting ( :min_private_message_post_length , Rails . env . test? ? 5 : 10 )
2013-02-05 14:16:51 -05:00
client_setting ( :max_post_length , 16000 )
2013-03-10 22:45:55 -07:00
client_setting ( :min_topic_title_length , 15 )
2013-02-05 14:16:51 -05:00
client_setting ( :max_topic_title_length , 255 )
2013-06-04 17:58:25 -04:00
client_setting ( :min_private_message_title_length , 2 )
2013-05-24 16:49:08 -04:00
client_setting ( :allow_uncategorized_topics , true )
2013-03-07 16:52:01 +01:00
client_setting ( :min_search_term_length , 3 )
2013-02-05 14:16:51 -05:00
client_setting ( :flush_timings_secs , 5 )
2013-06-20 23:41:04 -05:00
client_setting ( :suppress_reply_directly_below , true )
2013-02-13 22:24:32 -05:00
client_setting ( :email_domains_blacklist , 'mailinator.com' )
2013-03-18 15:48:56 -04:00
client_setting ( :email_domains_whitelist )
2013-02-21 10:19:02 -05:00
client_setting ( :version_checks , true )
2013-03-14 14:45:29 -04:00
client_setting ( :min_title_similar_length , 10 )
client_setting ( :min_body_similar_length , 15 )
2013-03-17 01:24:52 +01:00
# 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' )
2013-02-05 14:16:51 -05:00
2013-04-10 11:00:50 +02:00
# auto-replace rules for title
setting ( :title_prettify , true )
2013-06-30 11:35:33 +02:00
client_setting ( :max_upload_size_kb , 2048 )
2013-03-19 00:19:05 -07:00
2013-02-05 14:16:51 -05:00
# settings only available server side
2013-04-19 15:11:38 -07:00
setting ( :auto_track_topics_after , 240000 )
2013-02-14 17:32:58 +11:00
setting ( :new_topic_duration_minutes , 60 * 48 )
2013-02-05 14:16:51 -05:00
setting ( :long_polling_interval , 15000 )
setting ( :flags_required_to_hide_post , 3 )
setting ( :cooldown_minutes_after_hiding_posts , 10 )
2013-02-06 16:22:11 +11:00
2013-05-31 11:41:40 -04:00
setting ( :num_flags_to_block_new_user , 3 )
setting ( :num_users_to_block_new_user , 3 )
2013-02-06 16:22:11 +11:00
# used mainly for dev, force hostname for Discourse.base_url
# You would usually use multisite for this
setting ( :force_hostname , '' )
2013-02-07 16:45:24 +01:00
setting ( :port , Rails . env . development? ? 3000 : '' )
2013-02-05 14:16:51 -05:00
setting ( :enable_private_messages , true )
setting ( :use_ssl , false )
setting ( :queue_jobs , ! Rails . env . test? )
2013-02-07 16:45:24 +01:00
setting ( :crawl_images , ! Rails . env . test? )
2013-02-05 14:16:51 -05:00
setting ( :max_image_width , 690 )
2013-06-17 00:59:34 +02:00
setting ( :create_thumbnails , false )
2013-02-20 13:15:50 -05:00
client_setting ( :category_featured_topics , 6 )
2013-02-05 14:16:51 -05:00
setting ( :topics_per_page , 30 )
setting ( :posts_per_page , 20 )
setting ( :invite_expiry_days , 14 )
setting ( :active_user_rate_limit_secs , 60 )
setting ( :previous_visit_timeout_hours , 1 )
2013-06-07 17:15:49 -07:00
client_setting ( :favicon_url , '/assets/default-favicon.ico' )
2013-06-06 14:32:34 -07:00
setting ( :apple_touch_icon_url , '/assets/default-apple-touch-icon.png' )
2013-02-05 14:16:51 -05:00
setting ( :ninja_edit_window , 5 . minutes . to_i )
setting ( :post_undo_action_window_mins , 10 )
setting ( :system_username , '' )
2013-04-01 14:31:07 -07:00
setting ( :max_mentions_per_post , 10 )
2013-04-17 16:11:13 -07:00
setting ( :newuser_max_mentions_per_post , 2 )
2013-02-05 14:16:51 -05:00
2013-05-06 11:22:39 -04:00
client_setting ( :uncategorized_name , 'uncategorized' )
client_setting ( :uncategorized_color , 'AB9364' ) ;
client_setting ( :uncategorized_text_color , 'FFFFFF' ) ;
2013-02-05 14:16:51 -05:00
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 )
2013-04-30 12:45:27 -07:00
setting ( :max_likes_per_day , 50 )
2013-02-05 14:16:51 -05:00
setting ( :max_bookmarks_per_day , 20 )
setting ( :max_flags_per_day , 20 )
setting ( :max_edits_per_day , 30 )
setting ( :max_favorites_per_day , 20 )
2013-02-19 17:57:14 +11:00
setting ( :auto_link_images_wider_than , 50 )
2013-02-05 14:16:51 -05:00
2013-04-19 14:59:11 -07:00
setting ( :email_time_window_mins , 10 )
2013-02-07 16:45:24 +01:00
2013-02-05 14:16:51 -05:00
# How many characters we can import into a onebox
setting ( :onebox_max_chars , 5000 )
setting ( :suggested_topics , 5 )
setting ( :allow_duplicate_topic_titles , false )
2013-02-07 16:45:24 +01:00
2013-05-27 12:45:10 -04:00
setting ( :staff_like_weight , 3 )
2013-02-11 11:43:07 +11:00
setting ( :add_rel_nofollow_to_user_content , true )
2013-02-11 18:58:19 +11:00
setting ( :exclude_rel_nofollow_domains , '' )
2013-02-05 14:16:51 -05:00
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 )
2013-03-23 11:14:07 -04:00
setting ( :best_of_percent_filter , 20 )
2013-02-05 14:16:51 -05:00
2013-02-07 16:45:24 +01:00
# we need to think of a way to force users to enter certain settings, this is a minimal config thing
2013-02-05 14:16:51 -05:00
setting ( :notification_email , 'info@discourse.org' )
2013-02-11 11:02:57 +11:00
setting ( :allow_index_in_robots_txt , true )
2013-02-05 14:16:51 -05:00
setting ( :send_welcome_message , true )
2013-06-05 11:06:05 -07:00
client_setting ( :invite_only , false )
2013-06-04 15:30:16 -07:00
client_setting ( :login_required , false )
2013-05-23 13:44:14 -07:00
client_setting ( :enable_local_logins , true )
client_setting ( :enable_local_account_create , true )
2013-02-28 03:46:56 +00:00
client_setting ( :enable_google_logins , true )
client_setting ( :enable_yahoo_logins , true )
client_setting ( :enable_twitter_logins , true )
2013-02-05 14:16:51 -05:00
setting ( :twitter_consumer_key , '' )
setting ( :twitter_consumer_secret , '' )
2013-02-07 16:45:24 +01:00
2013-02-28 03:46:56 +00:00
client_setting ( :enable_facebook_logins , true )
2013-02-05 14:16:51 -05:00
setting ( :facebook_app_id , '' )
setting ( :facebook_app_secret , '' )
2013-05-23 13:40:50 -07:00
client_setting ( :enable_cas_logins , false )
setting ( :cas_hostname , '' )
setting ( :cas_domainname , '' )
2013-02-26 04:28:32 +00:00
client_setting ( :enable_github_logins , false )
setting ( :github_client_id , '' )
setting ( :github_client_secret , '' )
2013-03-04 12:01:20 -05:00
client_setting ( :enable_persona_logins , false )
2013-03-01 13:51:00 -06:00
2013-02-05 14:16:51 -05:00
setting ( :enforce_global_nicknames , true )
setting ( :discourse_org_access_key , '' )
2013-06-13 18:18:17 +10:00
2013-02-05 14:16:51 -05:00
setting ( :enable_s3_uploads , false )
2013-05-31 03:13:37 +02:00
setting ( :s3_access_key_id , '' )
setting ( :s3_secret_access_key , '' )
2013-06-11 14:23:52 -04:00
setting ( :s3_region , '' , enum : 'S3RegionSiteSetting' )
2013-02-05 14:16:51 -05:00
setting ( :s3_upload_bucket , '' )
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 )
2013-02-13 01:23:02 -08:00
setting ( :basic_requires_read_posts , 50 )
2013-03-23 23:52:34 -07:00
setting ( :basic_requires_time_spent_mins , 15 )
2013-02-05 14:16:51 -05:00
2013-06-23 14:32:37 +10:00
setting ( :regular_requires_topics_entered , 20 )
2013-04-05 15:29:46 +11:00
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 )
2013-06-10 16:46:08 -04:00
# Reply by Email Settings
setting ( :reply_by_email_enabled , false )
2013-06-13 18:11:10 -04:00
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 , '' )
2013-06-10 16:46:08 -04:00
2013-02-06 20:09:31 -05:00
# Entropy checks
setting ( :title_min_entropy , 10 )
setting ( :body_min_entropy , 7 )
setting ( :max_word_length , 30 )
2013-04-17 16:11:13 -07:00
setting ( :newuser_max_links , 2 )
setting ( :newuser_max_images , 0 )
2013-02-13 16:12:30 -05:00
2013-05-10 16:58:23 -04:00
setting ( :newuser_spam_host_threshold , 3 )
2013-02-19 16:08:23 -05:00
setting ( :title_fancy_entities , true )
2013-02-28 14:31:39 -05:00
# The default locale for the site
2013-06-11 11:39:55 -04:00
setting ( :default_locale , 'en' , enum : 'LocaleSiteSetting' )
2013-02-28 14:31:39 -05:00
2013-02-14 12:10:53 -05:00
client_setting ( :educate_until_posts , 2 )
2013-03-19 13:51:25 -04:00
setting ( :max_similar_results , 7 )
2013-04-23 15:06:13 -04:00
# 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 )
2013-06-19 13:13:12 -04:00
setting ( :minimum_topics_similar , 50 )
2013-03-25 18:04:28 -07:00
def self . generate_api_key!
2013-03-27 16:17:49 -04:00
self . api_key = SecureRandom . hex ( 32 )
2013-03-25 18:04:28 -07:00
end
def self . api_key_valid? ( tested )
2013-03-27 16:17:49 -04:00
t = tested . strip
2013-03-25 18:04:28 -07:00
t . length == 64 && t == self . api_key
end
2013-02-14 12:57:26 -05:00
def self . call_discourse_hub?
2013-03-05 01:42:44 +01:00
self . enforce_global_nicknames? && self . discourse_org_access_key . present?
2013-02-05 14:16:51 -05:00
end
2013-02-26 19:27:59 +03:00
def self . topic_title_length
min_topic_title_length .. max_topic_title_length
end
2013-06-04 17:58:25 -04:00
def self . private_message_title_length
min_private_message_title_length .. max_topic_title_length
end
2013-02-28 21:54:12 +03:00
def self . post_length
min_post_length .. max_post_length
end
2013-03-28 14:01:13 +01:00
2013-06-13 18:18:17 +10:00
def self . private_message_post_length
min_private_message_post_length .. max_post_length
end
2013-06-21 13:31:40 -07:00
def self . top_menu_items
top_menu . split ( '|' ) . map { | menu_item | TopMenuItem . new ( menu_item ) }
end
2013-03-28 14:01:13 +01:00
def self . homepage
2013-06-21 13:31:40 -07:00
top_menu_items [ 0 ] . name
2013-03-28 14:01:13 +01:00
end
def self . anonymous_homepage
2013-06-21 13:31:40 -07:00
list = [ 'latest' , 'hot' , 'categories' , 'category' ]
top_menu_items . map { | item | item . name } . select { | item | list . include? ( item ) } . first
2013-03-28 14:01:13 +01:00
end
2013-02-05 14:16:51 -05:00
end
2013-05-24 12:48:32 +10: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
# created_at :datetime not null
# updated_at :datetime not null
#