discourse/config/site_settings.yml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

2891 lines
63 KiB
YAML
Raw Normal View History

# Available options:
#
# default - The default value of the setting. For upload site settings, use the id of the upload seeded in db/fixtures/010_uploads.rb.
2016-06-29 15:23:29 +08:00
# client - Set to true if the javascript should have access to this setting's value.
# refresh - Set to true if clients should refresh when the setting is changed.
# min - For a string setting, the minimum length. For an integer setting, the minimum value.
# max - For a string setting, the maximum length. For an integer setting, the maximum value.
# regex - A regex that the value must match.
# validator - The name of the class that will be use to validate the value of the setting.
# allow_any - For choice settings allow items not specified in the choice list (default true)
# secret - Set to true if input type should be password and value needs to be scrubbed from logs (default false).
2016-06-29 15:23:29 +08:00
# enum - The setting has a fixed set of allowed values, and only one can be chosen.
# Set to the class name that defines the set.
# locale_default - A hash which overrides according to `SiteSetting.default_locale`.
# The key should be as the same as possible value of default_locale.
#
2016-06-29 15:23:29 +08:00
#
# type: email - Must be a valid email address.
# type: username - Must match the username of an existing user.
# type: list - A list of values, chosen from a set of valid values defined in the choices option.
# type: enum - A single value, chosen from a set of valid values in the choices option.
#
# A type:list setting with the word 'colors' in its name will make color values have a bold line of the corresponding color
#
required:
title:
client: true
default: "Discourse"
site_description:
default: ""
short_site_description:
default: ""
client: true
contact_email:
default: ""
type: email
2015-02-24 01:39:13 +08:00
contact_url:
default: ""
notification_email:
default: "noreply@unconfigured.discourse.org"
type: email
2014-06-12 02:42:41 +08:00
site_contact_username:
default: ""
type: username
site_contact_group_name:
default: ""
type: group
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
exclude_rel_nofollow_domains:
client: true
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
default: ""
type: list
list_type: simple
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
company_name:
default: ""
governing_law:
default: ""
city_for_disputes:
default: ""
branding:
2018-11-14 15:03:02 +08:00
logo:
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
default: -5
client: true
2018-11-14 15:03:02 +08:00
type: upload
logo_small:
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
default: -6
client: true
2018-11-14 15:03:02 +08:00
type: upload
digest_logo:
default: ""
2018-11-14 15:03:02 +08:00
client: true
type: upload
mobile_logo:
default: ""
2014-06-19 03:44:00 +08:00
client: true
2018-11-14 15:03:02 +08:00
type: upload
logo_dark:
default: ""
client: true
type: upload
logo_small_dark:
default: ""
client: true
type: upload
mobile_logo_dark:
default: ""
client: true
type: upload
2018-11-14 15:03:02 +08:00
large_icon:
default: ""
2018-11-14 15:03:02 +08:00
client: true
type: upload
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
manifest_icon:
default: ""
type: upload
manifest_screenshots:
type: list
list_type: simple
default: ""
2018-11-14 15:03:02 +08:00
favicon:
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
default: ""
2013-11-14 03:02:47 +08:00
client: true
2018-11-14 15:03:02 +08:00
type: upload
apple_touch_icon:
FEATURE: Automatically generate optimized site metadata icons (#7372) This change automatically resizes icons for various purposes. Admins can now upload `logo` and `logo_small`, and everything else will be auto-generated. Specific icons can still be uploaded separately if required. ## Core - Adds an SiteIconManager module which manages automatic resizing and fallback - Icons are looked up in the OptimizedImage table at runtime, and then cached in Redis. If the resized version is missing for some reason, then most icons will fall back to the original files. Some icons (e.g. PWA Manifest) will return `nil` (because an incorrectly sized icon is worse than a missing icon). - `SiteSetting.site_large_icon_url` will return the optimized version, including any fallback. `SiteSetting.large_icon` continues to return the upload object. This means that (almost) no changes are required in core/plugins to support this new system. - Icons are resized whenever a relevant site setting is changed, and during post-deploy migrations ## Wizard - Allows `requiresRefresh` wizard steps to reload data via AJAX instead of a full page reload - Add placeholders to the **icons** step of the wizard, which automatically update from the "Square Logo" - Various copy updates to support the changes - Remove the "upload-time" resizing for `large_icon`. This is no longer required. ## Site Settings UX - Move logo/icon settings under a new "Branding" tab - Various copy changes to support the changes - Adds placeholder support to the `image-uploader` component - Automatically reloads site settings after saving. This allows setting placeholders to change based on changes to other settings - Upload site settings will be assigned a placeholder if SiteIconManager `responds_to?` an icon of the same name ## Dashboard Warnings - Remove PWA icon and PWA title warnings. Both are now handled automatically. ## Bonus - Updated the sketch logos to use @awesomerobot's new high-res designs
2019-05-01 21:44:45 +08:00
default: ""
2018-11-14 15:03:02 +08:00
client: true
type: upload
opengraph_image:
default: ""
2018-11-14 15:03:02 +08:00
type: upload
twitter_summary_large_image:
default: ""
2018-11-14 15:03:02 +08:00
type: upload
2013-11-14 03:02:47 +08:00
2013-11-15 04:05:48 +08:00
basic:
display_local_time_in_user_card:
client: true
default: false
allow_user_locale:
client: true
default: false
set_locale_from_accept_language_header:
default: false
client: true
validator: "AllowUserLocaleEnabledValidator"
set_locale_from_cookie:
default: false
hidden: true
client: true
validator: "AllowUserLocaleEnabledValidator"
2018-01-29 10:33:55 +08:00
support_mixed_text_direction:
client: true
default: false
2016-08-18 05:23:16 +08:00
categories_topics:
default: 20
validator: "CategoriesTopicsValidator"
suggested_topics:
client: true
default: 5
max: 2000
limit_suggested_to_category:
default: false
suggested_topics_unread_max_days_old:
default: 90
min: 0
max: 36500
suggested_topics_max_days_old:
default: 365
min: 7
max: 36500
ga_version:
type: enum
default: v4_gtag
choices:
- v3_analytics
- v4_gtag
2014-01-26 08:42:25 +08:00
ga_universal_tracking_code:
client: true
default: ""
regex: "^(UA|G)-[\\w-]+"
2014-01-26 08:42:25 +08:00
ga_universal_domain_name:
client: true
default: "auto"
ga_universal_auto_link_domains:
default: ""
type: list
list_type: simple
gtm_container_id:
client: true
default: ""
regex: "^GTM-"
2013-11-15 04:05:48 +08:00
top_menu:
client: true
refresh: true
type: list
list_type: simple
default: "latest|new|unread|top|categories"
2015-02-27 06:01:29 +08:00
regex: "latest"
regex_error: "site_settings.errors.must_include_latest"
validator: RegexPresenceValidator
allow_any: false
choices:
- latest
- new
- unread
- unseen
- top
- categories
- read
- posted
- bookmarks
2013-11-15 04:05:48 +08:00
post_menu:
client: true
type: list
default: "read|like|share|flag|edit|bookmark|delete|admin|reply"
allow_any: false
choices:
- read
- like
- edit
- flag
- delete
- share
- bookmark
- admin
- reply
post_menu_hidden_items:
client: true
type: list
default: "flag|bookmark|edit|delete|admin"
allow_any: false
choices:
- like
- edit
- flag
- delete
- share
- bookmark
- admin
- reply
2013-11-15 04:05:48 +08:00
share_links:
client: true
type: list
default: "twitter|facebook|email"
allow_any: false
choices:
- twitter
- facebook
- email
allow_username_in_share_links:
client: true
default: true
share_quote_visibility:
client: true
type: enum
default: "anonymous"
choices:
- none
- anonymous
- all
share_quote_buttons:
client: true
type: list
default: "twitter|email"
allow_any: false
choices:
- twitter
- facebook
- email
desktop_category_page_style:
client: true
enum: "CategoryPageStyle"
default: "categories_and_latest_topics"
2013-11-15 04:05:48 +08:00
category_colors:
client: true
type: list
list_type: compact
default: "BF1E2E|F1592A|F7941D|9EB83B|3AB54A|12A89D|25AAE2|0E76BD|652D90|92278F|ED207B|8C6238|231F20|808281|B3B5B4|E45735"
category_style:
client: true
default: "bullet"
type: enum
choices:
- bar
- box
- bullet
- none
max_category_nesting:
client: true
default: 2
min: 2
max: 3
hidden: true
enable_mobile_theme:
client: true
default: true
hidden: true
FEATURE: Initial implementation of direct S3 uploads with uppy and stubs (#13787) This adds a few different things to allow for direct S3 uploads using uppy. **These changes are still not the default.** There are hidden `enable_experimental_image_uploader` and `enable_direct_s3_uploads` settings that must be turned on for any of this code to be used, and even if they are turned on only the User Card Background for the user profile actually uses uppy-image-uploader. A new `ExternalUploadStub` model and database table is introduced in this pull request. This is used to keep track of uploads that are uploaded to a temporary location in S3 with the direct to S3 code, and they are eventually deleted a) when the direct upload is completed and b) after a certain time period of not being used. ### Starting a direct S3 upload When an S3 direct upload is initiated with uppy, we first request a presigned PUT URL from the new `generate-presigned-put` endpoint in `UploadsController`. This generates an S3 key in the `temp` folder inside the correct bucket path, along with any metadata from the clientside (e.g. the SHA1 checksum described below). This will also create an `ExternalUploadStub` and store the details of the temp object key and the file being uploaded. Once the clientside has this URL, uppy will upload the file direct to S3 using the presigned URL. Once the upload is complete we go to the next stage. ### Completing a direct S3 upload Once the upload to S3 is done we call the new `complete-external-upload` route with the unique identifier of the `ExternalUploadStub` created earlier. Only the user who made the stub can complete the external upload. One of two paths is followed via the `ExternalUploadManager`. 1. If the object in S3 is too large (currently 100mb defined by `ExternalUploadManager::DOWNLOAD_LIMIT`) we do not download and generate the SHA1 for that file. Instead we create the `Upload` record via `UploadCreator` and simply copy it to its final destination on S3 then delete the initial temp file. Several modifications to `UploadCreator` have been made to accommodate this. 2. If the object in S3 is small enough, we download it. When the temporary S3 file is downloaded, we compare the SHA1 checksum generated by the browser with the actual SHA1 checksum of the file generated by ruby. The browser SHA1 checksum is stored on the object in S3 with metadata, and is generated via the `UppyChecksum` plugin. Keep in mind that some browsers will not generate this due to compatibility or other issues. We then follow the normal `UploadCreator` path with one exception. To cut down on having to re-upload the file again, if there are no changes (such as resizing etc) to the file in `UploadCreator` we follow the same copy + delete temp path that we do for files that are too large. 3. Finally we return the serialized upload record back to the client There are several errors that could happen that are handled by `UploadsController` as well. Also in this PR is some refactoring of `displayErrorForUpload` to handle both uppy and jquery file uploader errors.
2021-07-28 06:42:25 +08:00
enable_direct_s3_uploads:
client: true
default: false
hidden: true
enable_upload_debug_mode:
default: false
hidden: true
client: true
default_theme_id:
default: -1
hidden: true
default_dark_mode_color_scheme_id:
default: -1
type: enum
enum: "ColorSchemeSetting"
client: true
2013-11-15 04:05:48 +08:00
relative_date_duration:
client: true
default: 30
topics_per_period_in_top_summary:
default: 20
min: 1
topics_per_period_in_top_page:
default: 50
min: 1
top_page_default_timeframe:
client: true
default: "yearly"
type: enum
choices:
- all
- yearly
- quarterly
- monthly
- weekly
- daily
fixed_category_positions:
client: true
default: false
fixed_category_positions_on_create:
client: true
default: false
2014-03-05 20:52:20 +08:00
enable_badges:
client: true
2014-07-02 10:32:16 +08:00
default: true
enable_badge_sql:
client: true
default: false
hidden: true
max_favorite_badges:
client: true
default: 2
min: 0
max: 6
whispers_allowed_groups:
client: true
type: group_list
list_type: compact
default: ""
allow_any: false
refresh: true
hidden_post_visible_groups:
type: group_list
list_type: compact
default: "14"
allow_any: false
2023-06-06 00:08:04 +08:00
refresh: true
Improving bookmarks part 1 (#8466) Note: All of this functionality is hidden behind a hidden, default false, site setting called `enable_bookmarks_with_reminders`. Also, any feedback on Ember code would be greatly appreciated! This is part 1 of the bookmark improvements. The next PR will address the backend logic to send reminder notifications for bookmarked posts to users. This PR adds the following functionality: * We are adding a new `bookmarks` table and `Bookmark` model to make the bookmarks a first-class citizen and to allow attaching reminders to them. * Posts now have a new button in their actions menu that has the icon of an actual book * Clicking the button opens the new bookmark modal. * Both name and the reminder type are optional. * If you close the modal without doing anything, the bookmark is saved with no reminder. * If you click the Cancel button, no bookmark is saved at all. * All of the reminder type tiles are dynamic and the times they show will be based on your user timezone set in your profile (this should already be set for you). * If for some reason a user does not have their timezone set they will not be able to set a reminder, but they will still be able to create a bookmark. * A bookmark can be deleted by clicking on the book icon again which will be red if the post is bookmarked. This PR does NOT do anything to migrate or change existing bookmarks in the form of `PostActions`, the two features live side-by-side here. Also this does nothing to the topic bookmarking.
2019-12-11 12:04:02 +08:00
enable_bookmarks_with_reminders:
client: true
default: true
Improving bookmarks part 1 (#8466) Note: All of this functionality is hidden behind a hidden, default false, site setting called `enable_bookmarks_with_reminders`. Also, any feedback on Ember code would be greatly appreciated! This is part 1 of the bookmark improvements. The next PR will address the backend logic to send reminder notifications for bookmarked posts to users. This PR adds the following functionality: * We are adding a new `bookmarks` table and `Bookmark` model to make the bookmarks a first-class citizen and to allow attaching reminders to them. * Posts now have a new button in their actions menu that has the icon of an actual book * Clicking the button opens the new bookmark modal. * Both name and the reminder type are optional. * If you close the modal without doing anything, the bookmark is saved with no reminder. * If you click the Cancel button, no bookmark is saved at all. * All of the reminder type tiles are dynamic and the times they show will be based on your user timezone set in your profile (this should already be set for you). * If for some reason a user does not have their timezone set they will not be able to set a reminder, but they will still be able to create a bookmark. * A bookmark can be deleted by clicking on the book icon again which will be red if the post is bookmarked. This PR does NOT do anything to migrate or change existing bookmarks in the form of `PostActions`, the two features live side-by-side here. Also this does nothing to the topic bookmarking.
2019-12-11 12:04:02 +08:00
hidden: true
push_notifications_prompt:
default: true
client: true
2018-11-14 15:03:02 +08:00
push_notifications_icon:
default: ""
2018-11-14 15:03:02 +08:00
type: upload
enable_desktop_push_notifications:
default: true
client: true
push_notification_time_window_mins:
default: 10
min: 0
short_title:
default: ""
max: 12
vapid_public_key_bytes:
default: ""
client: true
hidden: true
vapid_public_key:
default: ""
hidden: true
vapid_private_key:
default: ""
hidden: true
vapid_base_url:
default: ""
hidden: true
base_font:
default: "arial"
enum: "BaseFontSetting"
refresh: true
heading_font:
default: "arial"
enum: "BaseFontSetting"
refresh: true
enable_sitemap:
default: true
sitemap_page_size:
default: 10000
2022-05-27 17:15:14 +08:00
enable_user_status:
client: true
default: false
enable_user_tips:
client: true
default: true
refresh: true
page_loading_indicator:
client: true
type: enum
default: "slider"
choices:
- spinner
- slider
2013-11-15 04:05:48 +08:00
2014-07-13 17:23:31 +08:00
login:
2013-11-14 03:02:47 +08:00
invite_only:
refresh: true
client: true
default: false
2013-11-14 03:02:47 +08:00
login_required:
refresh: true
client: true
default: false
must_approve_users:
client: true
default: false
invite_code: ""
enable_local_logins:
client: true
default: true
enable_local_logins_via_email:
client: true
default: true
validator: "EnableLocalLoginsViaEmailValidator"
allow_new_registrations:
client: true
default: true
2015-09-02 07:16:19 +08:00
enable_signup_cta:
client: true
default: true
enable_google_oauth2_logins:
default: false
google_oauth2_client_id: ""
google_oauth2_client_secret:
default: ""
secret: true
google_oauth2_prompt:
default: ""
type: list
choices:
- ""
- "none"
- "consent"
- "select_account"
google_oauth2_hd:
default: ""
google_oauth2_hd_groups:
default: false
validator: GoogleOauth2HdGroupsValidator
google_oauth2_hd_groups_service_account_admin_email:
default: ""
google_oauth2_hd_groups_service_account_json:
default: ""
textarea: true
2013-11-14 03:02:47 +08:00
enable_twitter_logins:
default: false
twitter_consumer_key:
default: ""
regex: "^[\\w+-]+$"
twitter_consumer_secret:
default: ""
regex: "^[\\w+-]+$"
secret: true
2013-11-14 03:02:47 +08:00
enable_facebook_logins:
default: false
facebook_app_id:
client: true
default: ""
regex: "^\\d+$"
facebook_app_secret:
default: ""
regex: "^[a-f0-9]+$"
secret: true
2013-11-14 03:02:47 +08:00
enable_github_logins:
default: false
github_client_id:
default: ""
regex: "^[a-zA-Z0-9\\.]+$"
github_client_secret:
default: ""
regex: "^[a-f0-9]+$"
secret: true
enable_discord_logins:
default: false
discord_client_id:
default: ""
discord_secret:
default: ""
secret: true
discord_trusted_guilds:
default: ""
type: list
list_type: simple
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
auth_skip_create_confirm:
default: false
client: true
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
auth_immediately:
default: true
auth_overrides_email:
default: false
validator: "SsoOverridesEmailValidator"
client: true
auth_overrides_username: false
auth_overrides_name: false
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
enable_discourse_connect:
client: true
default: false
validator: "EnableSsoValidator"
discourse_connect_allowed_redirect_domains:
default: ""
type: list
list_type: simple
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
verbose_discourse_connect_logging: false
verbose_upload_logging:
hidden: true
default: false
verbose_auth_token_logging:
hidden: true
default: false
max_suspicious_distance_km:
hidden: true
default: 100
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
discourse_connect_url:
default: ""
regex: '^https?:\/\/.+[^\/]$'
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
discourse_connect_secret:
default: ""
secret: true
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
discourse_connect_overrides_groups: false
discourse_connect_overrides_bio: false
discourse_connect_overrides_avatar:
default: false
client: true
FEATURE: Rename 'Discourse SSO' to DiscourseConnect (#11978) The 'Discourse SSO' protocol is being rebranded to DiscourseConnect. This should help to reduce confusion when 'SSO' is used in the generic sense. This commit aims to: - Rename `sso_` site settings. DiscourseConnect specific ones are prefixed `discourse_connect_`. Generic settings are prefixed `auth_` - Add (server-side-only) backwards compatibility for the old setting names, with deprecation notices - Copy `site_settings` database records to the new names - Rename relevant translation keys - Update relevant translations This commit does **not** aim to: - Rename any Ruby classes or methods. This might be done in a future commit - Change any URLs. This would break existing integrations - Make any changes to the protocol. This would break existing integrations - Change any functionality. Further normalization across DiscourseConnect and other auth methods will be done separately The risks are: - There is no backwards compatibility for site settings on the client-side. Accessing auth-related site settings in Javascript is fairly rare, and an error on the client side would not be security-critical. - If a plugin is monkey-patching parts of the auth process, changes to locale keys could cause broken error messages. This should also be unlikely. The old site setting names remain functional, so security-related overrides will remain working. A follow-up commit will be made with a post-deploy migration to delete the old `site_settings` rows.
2021-02-08 18:04:33 +08:00
discourse_connect_overrides_profile_background: false
discourse_connect_overrides_location: false
discourse_connect_overrides_website: false
discourse_connect_overrides_card_background: false
discourse_connect_not_approved_url: ""
discourse_connect_csrf_protection:
default: true
hidden: true
enable_discourse_connect_provider: false
discourse_connect_provider_secrets:
default: ""
type: list
list_type: secret
secret: true
placeholder:
key: "sso_provider.key_placeholder"
value: "sso_provider.value_placeholder"
blocked_email_domains:
default: "mailinator.com"
type: host_list
list_type: simple
allowed_email_domains:
default: ""
type: host_list
list_type: simple
normalize_emails:
default: false
auto_approve_email_domains:
default: ""
type: host_list
list_type: simple
hide_email_address_taken:
client: true
default: false
log_out_strict: false
pending_users_reminder_delay_minutes:
min: -1
default: 480
persistent_sessions: true
maximum_session_age:
default: 1440
min: 1
max: 175200
2014-07-13 17:23:31 +08:00
users:
min_username_length:
client: true
default: 3
validator: "MinUsernameLengthValidator"
2014-07-13 17:23:31 +08:00
max_username_length:
client: true
default: 20
validator: "MaxUsernameLengthValidator"
unicode_usernames:
default: false
client: true
validator: "UnicodeUsernameValidator"
allowed_unicode_username_characters:
validator: "UnicodeUsernameAllowlistValidator"
default: ""
locale_default:
cs: "[ěščřžýáíéóůúďťňĚŠČŘŽÝÁÍÉÓŮÚĎŤŇ]"
de: "[äöüßÄÖÜẞ]"
fi: "[åäöÅÄÖ]"
ja: '[\p{Han}\p{Katakana}\p{Hiragana}]'
ko: '\p{Hangul}'
zh_CN: '\p{Han}'
zh_TW: '\p{Han}'
reserved_usernames:
type: list
list_type: compact
default: "admin|moderator|administrator|mod|sys|system|community|info|you|name|username|user|nickname|discourse|discourseorg|discourseforum|support|all|here"
2014-07-13 17:23:31 +08:00
min_password_length:
client: true
default: 10
2017-03-05 17:08:37 +08:00
min: 8
2017-04-28 07:38:50 +08:00
max: 500
min_admin_password_length:
client: true
default: 15
2017-03-05 17:08:37 +08:00
min: 8
2017-04-28 07:38:50 +08:00
max: 500
password_unique_characters:
default: 6
min: 1
2017-04-28 07:39:27 +08:00
max: 10
2014-07-13 17:23:31 +08:00
block_common_passwords: true
2013-11-14 03:02:47 +08:00
username_change_period: 3
email_editable:
client: true
default: true
logout_redirect:
client: true
default: ""
full_name_required:
client: true
default: false
2013-11-14 03:02:47 +08:00
enable_names:
client: true
default: true
invite_expiry_days:
default: 90
client: true
max: 36500
2014-08-01 19:06:31 +08:00
invites_per_page:
client: true
2014-08-01 19:06:31 +08:00
default: 40
2017-05-24 14:00:43 +08:00
hidden: true
delete_user_max_post_age:
client: true
default: 60
delete_all_posts_max:
client: true
default: 15
min: 1
delete_user_self_max_post_count:
default: 1
min: -1
redirect_users_to_top_page: true
prioritize_username_in_ux:
client: true
default: true
email_token_valid_hours:
default: 48
min: 1
purge_unactivated_users_grace_period_days:
default: 14
max: 36500
public_user_custom_fields:
type: list
list_type: simple
default: ""
staff_user_custom_fields:
type: list
list_type: simple
default: ""
enable_user_directory:
client: true
default: true
allow_anonymous_posting:
default: false
client: true
anonymous_posting_min_trust_level:
default: 1
enum: "TrustLevelSetting"
client: true
anonymous_account_duration_minutes:
default: 10080
max: 99000
allow_users_to_hide_profile:
default: true
client: true
hide_user_profiles_from_public:
default: false
client: true
allow_featured_topic_on_user_profiles:
default: true
client: true
show_inactive_accounts:
default: false
allowed_user_website_domains:
default: ""
type: list
list_type: simple
hide_suspension_reasons:
default: false
client: true
2018-01-27 20:51:22 +08:00
log_personal_messages_views: false
ignored_users_count_message_threshold:
default: 5
client: true
min: 1
ignored_users_message_gap_days:
default: 365
client: true
min: 1
max: 36500
clean_up_inactive_users_after_days:
default: 730
min: 0
max: 36500
clean_up_unused_staged_users_after_days:
default: 365
min: 0
max: 36500
user_selected_primary_groups:
default: false
client: true
max_notifications_per_user:
default: 10000
gravatar_name:
default: Gravatar
client: true
gravatar_base_url:
default: www.gravatar.com
client: true
gravatar_login_url:
default: /emails
client: true
max_bookmarks_per_user:
default: 2000
hidden: true
use_email_for_username_and_name_suggestions:
default: false
use_name_for_username_suggestions:
default: true
2014-07-02 07:08:25 +08:00
groups:
enable_group_directory:
client: true
default: true
group_in_subject:
default: false
enable_category_group_moderation:
client: true
default: false
2013-11-14 03:02:47 +08:00
posting:
min_post_length:
client: true
min: 1
default: 20
locale_default:
2018-09-11 17:58:22 +08:00
ja: 8
zh_CN: 8
zh_TW: 8
min_first_post_length:
client: true
min: 1
default: 20
locale_default:
2018-09-11 17:58:22 +08:00
ja: 8
zh_CN: 8
zh_TW: 8
min_personal_message_post_length:
client: true
min: 1
default: 10
locale_default:
2018-09-11 17:58:22 +08:00
ja: 3
zh_CN: 3
zh_TW: 3
max_post_length:
client: true
default: 32000
max: 150000
topic_featured_link_enabled:
client: true
2016-12-10 05:08:17 +08:00
default: true
body_min_entropy:
default: 7
locale_default:
ja: 3
zh_CN: 3
zh_TW: 3
min_topic_views_for_delete_confirm:
client: true
default: 5000
min_topic_title_length:
client: true
default: 15
min: 1
locale_default:
2018-09-11 17:58:22 +08:00
ja: 6
zh_CN: 6
zh_TW: 6
max_topic_title_length:
client: true
default: 255
min: 5
max: 255
title_min_entropy:
default: 10
locale_default:
ja: 3
zh_CN: 3
zh_TW: 3
allow_uppercase_posts:
default: false
locale_default:
2018-09-11 17:58:22 +08:00
ja: true
max_consecutive_replies:
default: 3
enable_filtered_replies_view:
default: false
client: true
title_prettify:
default: true
locale_default:
ja: false
zh_CN: false
zh_TW: false
title_remove_extraneous_space:
default: false
locale_default:
en: true
en_GB: true
2013-11-14 03:02:47 +08:00
title_fancy_entities: true
min_personal_message_title_length:
client: true
default: 2
min: 1
max_emojis_in_title: 1
allow_uncategorized_topics:
client: true
default: false
refresh: true
2013-11-14 03:02:47 +08:00
allow_duplicate_topic_titles: false
allow_duplicate_topic_titles_category: false
2013-11-14 03:02:47 +08:00
min_title_similar_length:
client: true
2013-11-14 03:02:47 +08:00
default: 10
locale_default:
2018-09-11 17:58:22 +08:00
ja: 4
zh_CN: 4
zh_TW: 4
enable_system_message_replies:
default: true
personal_message_enabled_groups:
default: "11" # auto group trust_level_1
type: group_list
client: true
allow_any: false
refresh: true
validator: "PersonalMessageEnabledGroupsValidator"
editing_grace_period: 300
editing_grace_period_max_diff: 100
editing_grace_period_max_diff_high_trust: 400
staff_edit_locks_post: false
shared_drafts_category:
type: category
default: ""
shared_drafts_min_trust_level:
default: "staff"
enum: "TrustLevelAndStaffSetting"
post_edit_time_limit:
default: 1440
max: 10080
tl2_post_edit_time_limit:
default: 43200
max: 525600
2013-11-14 03:02:47 +08:00
edit_history_visible_to_public:
client: true
default: true
2013-11-14 03:02:47 +08:00
delete_removed_posts_after:
client: true
2013-11-14 03:02:47 +08:00
default: 24
max: 876000
notify_users_after_responses_deleted_on_flagged_post:
default: false
2013-11-14 03:02:47 +08:00
traditional_markdown_linebreaks:
client: true
2013-11-14 03:02:47 +08:00
default: false
enable_markdown_typographer:
client: true
default: true
enable_markdown_linkify:
client: true
default: true
markdown_linkify_tlds:
client: true
type: list
default: "com|net|org|io|onion|co|tv|ru|cn|us|uk|me|de|fr|fi|gov"
list_type: compact
validator: "MarkdownLinkifyTldsValidator"
markdown_typographer_quotation_marks:
client: true
type: list
list_type: compact
validator: "MarkdownTypographerQuotationMarksValidator"
default: "“|”||"
locale_default:
de: "„|“||"
fr: "«\xA0|\xA0»|\xA0|\xA0"
enable_rich_text_paste:
client: true
2018-08-01 19:06:16 +08:00
default: true
2013-11-14 03:02:47 +08:00
suppress_reply_directly_below:
client: true
default: true
2013-11-14 03:02:47 +08:00
suppress_reply_directly_above:
client: true
2013-11-14 03:02:47 +08:00
default: true
suppress_reply_when_quoting:
default: true
remove_full_quote:
default: true
max_reply_history:
default: 1
client: true
2013-11-14 03:02:47 +08:00
post_undo_action_window_mins: 10
enable_mentions:
default: true
client: true
2013-11-14 03:02:47 +08:00
max_mentions_per_post: 10
max_users_notified_per_group_mention:
default: 100
client: true
newuser_max_replies_per_topic: 3
2013-11-14 03:02:47 +08:00
newuser_max_mentions_per_post: 2
here_mention:
default: "here"
validator: "NotUsernameValidator"
client: true
max_here_mentioned: 10
min_trust_level_for_here_mention:
default: "2"
enum: "TrustLevelAndStaffSetting"
title_max_word_length:
default: 30
locale_default:
ja: 50
ko: 50
zh_CN: 50
zh_TW: 50
allowed_link_domains:
default: ""
type: list
2013-11-14 03:02:47 +08:00
newuser_max_links: 2
newuser_max_embedded_media:
client: true
2015-09-06 18:11:02 +08:00
default: 1
2013-11-14 03:02:47 +08:00
newuser_max_attachments:
client: true
2013-11-14 03:02:47 +08:00
default: 0
post_excerpt_maxlength:
default: 300
max: 1000
locale_default:
2018-09-11 17:58:22 +08:00
ja: 120
zh_CN: 120
zh_TW: 120
topic_excerpt_maxlength:
default: 220
max: 1000
locale_default:
ja: 120
zh_CN: 120
zh_TW: 120
default_subcategory_on_read_only_category:
client: true
default: false
show_pinned_excerpt_mobile:
client: true
default: true
show_pinned_excerpt_desktop:
client: true
default: true
2013-11-14 03:02:47 +08:00
display_name_on_posts:
client: true
default: false
show_time_gap_days:
default: 7
max: 36500
client: true
short_progress_text_threshold:
client: true
default: 10000
max: 99000
default_code_lang:
client: true
default: "auto"
warn_reviving_old_topic_age: 180
autohighlight_all_code:
client: true
default: false
highlighted_languages:
default: "bash|c|cpp|csharp|css|diff|go|graphql|ini|java|javascript|json|kotlin|lua|makefile|markdown|objectivec|perl|php|php-template|plaintext|python|python-repl|r|ruby|rust|scss|shell|sql|swift|typescript|xml|yaml|wasm"
choices: "HighlightJs.languages"
type: list
client: true
list_type: compact
show_copy_button_on_codeblocks:
client: true
default: false
delete_old_hidden_posts: true
2014-12-23 08:12:26 +08:00
enable_emoji:
default: true
client: true
enable_emoji_shortcuts:
default: true
client: true
2014-12-23 08:12:26 +08:00
emoji_set:
default: "twitter"
2014-12-23 08:12:26 +08:00
client: true
enum: "EmojiSetSiteSetting"
emoji_autocomplete_min_chars:
client: true
default: 0
locale_default:
fr: 1
enable_inline_emoji_translation:
client: true
default: false
locale_default:
zh_CN: true
zh_TW: true
ja: true
ko: true
emoji_deny_list:
type: emoji_list
default: ""
client: true
refresh: true
2015-04-16 00:12:20 +08:00
approve_post_count:
default: 0
approve_unless_trust_level:
default: 0
enum: "TrustLevelSetting"
approve_new_topics_unless_trust_level:
default: 0
enum: "TrustLevelSetting"
approve_suspect_users:
default: true
approve_unless_staged:
default: false
notify_about_queued_posts_after:
type: float
default: 24
min: 0
auto_close_messages_post_count:
default: 500
auto_close_topics_post_count:
default: 10000
auto_close_topics_create_linked_topic:
default: true
code_formatting_style:
client: true
type: enum
default: "code-fences"
choices:
- code-fences
- 4-spaces-indent
embed_any_origin: false
embed_topics_list: false
embed_set_canonical_url: false
embed_unlisted: true
embed_truncate: true
embed_support_markdown: false
allowed_embed_selectors: ""
allowed_href_schemes:
client: true
default: ""
type: list
list_type: compact
max_allowed_message_recipients:
default: 30
min: 1
watched_words_regular_expressions:
client: true
default: false
enable_diffhtml_preview:
default: false
client: true
enable_fast_edit:
default: true
client: true
old_post_notice_days:
default: 14
max: 36500
client: true
new_user_notice_tl:
default: 2
enum: "TrustLevelSetting"
returning_user_notice_tl:
default: 2
enum: "TrustLevelSetting"
returning_users_days:
default: 120
max: 36500
review_media_unless_trust_level:
default: 0
enum: "TrustLevelSetting"
blur_tl0_flagged_posts_media:
default: true
client: true
enable_page_publishing:
default: false
show_published_pages_login_required:
default: false
skip_auto_delete_reply_likes: 5
review_every_post:
default: false
max_draft_length:
default: 400_000
hidden: true
max_form_template_title_length:
default: 100
min: 5
max: 255
max_form_template_content_length:
default: 2000
max: 150000
2013-11-14 03:02:47 +08:00
email:
email_time_window_mins:
default: 10
client: true
personal_email_time_window_seconds: 20
2013-11-14 03:02:47 +08:00
email_posts_context: 5
digest_min_excerpt_length:
default: 100
locale_default:
2018-09-11 17:58:22 +08:00
ja: 50
zh_CN: 50
zh_TW: 50
digest_topics:
default: 5
min: 1
max: 20
digest_posts:
default: 5
min: 0
max: 20
digest_other_topics:
default: 5
min: 0
max: 20
suppress_digest_email_after_days:
default: 180
max: 36500
digest_suppress_categories:
type: category_list
default: ""
2015-01-27 12:46:21 +08:00
disable_digest_emails:
default: false
client: true
apply_custom_styles_to_digest: true
email_accent_bg_color:
type: color
default: "#2F70AC"
validator: "CssColorValidator"
email_accent_fg_color:
type: color
default: "#FFFFFF"
validator: "CssColorValidator"
email_link_color:
type: color
default: "#006699"
validator: "CssColorValidator"
show_topic_featured_link_in_digest: false
email_custom_headers: "Auto-Submitted: auto-generated"
email_subject: "[%{site_name}] %{optional_pm}%{optional_cat}%{topic_title}"
reply_by_email_enabled:
default: false
validator: "ReplyByEmailEnabledValidator"
2014-12-31 16:04:20 +08:00
reply_by_email_address:
default: ""
validator: "ReplyByEmailAddressValidator"
alternative_reply_by_email_addresses:
default: ""
validator: "AlternativeReplyByEmailAddressesValidator"
find_related_post_with_key:
default: true
manual_polling_enabled:
default: false
pop3_polling_enabled:
default: false
validator: "POP3PollingEnabledSettingValidator"
pop3_polling_ssl: true
pop3_polling_openssl_verify: true
pop3_polling_period_mins: 5
pop3_polling_host: ""
pop3_polling_port: 995
pop3_polling_username: ""
pop3_polling_password:
default: ""
secret: true
2017-12-14 23:03:27 +08:00
pop3_polling_delete_from_server: true
log_mail_processing_failures: false
incoming_email_prefer_html: true
strip_incoming_email_lines: false
email_in:
default: false
client: true
email_in_min_trust:
default: 2
enum: "TrustLevelSetting"
email_in_authserv_id:
default: ""
email_in_spam_header:
type: enum
default: "none"
choices:
- none
- X-Spam-Flag
- X-Spam-Status
- X-SES-Spam-Verdict
enable_imap:
default: false
client: true
enable_imap_write:
default: false
enable_imap_idle:
default: false
enable_smtp:
default: false
client: true
imap_polling_period_mins:
default: 5
imap_polling_old_emails:
default: 1000
imap_polling_new_emails:
default: 250
imap_batch_import_email:
default: 100
email_prefix: ""
email_site_title: ""
disable_emails:
client: true
type: enum
default: "no"
choices:
- "no"
- "yes"
- "non-staff"
2014-09-13 13:26:31 +08:00
strip_images_from_short_emails: true
short_email_length: 2800
display_name_on_email_from:
default: true
2016-01-20 17:25:25 +08:00
unsubscribe_via_email:
default: true
unsubscribe_via_email_footer:
default: false
disallow_reply_by_email_after_days:
default: 90
max: 36500
delete_email_logs_after_days:
default: 90
max: 36500
max_emails_per_day_per_user: 100
2016-03-24 01:56:03 +08:00
enable_staged_users: true
maximum_staged_users_per_email: 10
maximum_recipients_per_new_group_email:
default: 10
min: 1
auto_generated_allowlist:
default: ""
type: list
list_type: simple
block_auto_generated_emails: true
ignore_by_title:
type: list
list_type: simple
default: ""
2016-05-30 23:11:17 +08:00
mailgun_api_key:
default: ""
regex: '^((key-)?\h{32}|\h{32}-\h{8}-\h{8})$'
secret: true
sendgrid_verification_key:
default: ""
secret: true
mailjet_webhook_token:
default: ""
secret: true
mandrill_authentication_key:
default: ""
secret: true
postmark_webhook_token:
default: ""
secret: true
sparkpost_webhook_token:
default: ""
secret: true
bounce_score_threshold:
client: true
default: 4
min: 1
bounce_score_erode_on_send:
default: 0.1
hidden: true
soft_bounce_score:
default: 1
min: 1
hard_bounce_score:
default: 2
min: 2
reset_bounce_score_after_days:
default: 30
max: 36500
blocked_attachment_content_types:
type: list
default: "pkcs7|x-vcard|pgp-keys|pgp-signature"
list_type: compact
blocked_attachment_filenames:
type: list
2017-12-14 03:48:04 +08:00
default: "smime.p7s|signature.asc|winmail.dat"
list_type: compact
forwarded_emails_behaviour:
type: enum
default: hide
choices:
- hide
- quote
- create_replies
always_show_trimmed_content: false
trim_incoming_emails: true
private_email: false
email_custom_template:
default: ""
hidden: true
email_custom_css:
default: ""
hidden: true
email_custom_css_compiled:
default: ""
hidden: true
email_total_attachment_size_limit_kb:
default: 0
max: 51200
post_excerpts_in_emails: false
raw_email_max_length: 220000
raw_rejected_email_max_length: 4000
delete_rejected_email_after_days:
default: 90
validator: "DeleteRejectedEmailAfterDaysValidator"
enable_secondary_emails:
client: true
default: true
hidden: true
max_participant_names:
default: 10
hidden: true
require_change_email_confirmation: false
2013-11-14 03:02:47 +08:00
files:
2016-04-07 04:51:28 +08:00
max_image_size_kb:
client: true
default: 4096
max: 102400
2016-04-07 04:51:28 +08:00
max_attachment_size_kb:
client: true
default: 4096
max: 1024000
max_image_megapixels:
default: 40
min: 5
max: 150
max_export_file_size_kb:
hidden: true
default: 50000
max: 1024000
theme_authorized_extensions:
default: "wasm|jpg|jpeg|png|woff|woff2|svg|eot|ttf|otf|gif|webp|avif|js"
type: list
list_type: compact
authorized_extensions:
client: true
default: "jpg|jpeg|png|gif|heic|heif|webp|avif"
refresh: true
type: list
list_type: compact
authorized_extensions_for_staff:
client: true
default: ""
refresh: true
type: list
list_type: compact
export_authorized_extensions:
hidden: true
default: "zip"
type: list
list_type: compact
responsive_post_image_sizes:
default: "1|1.5|2"
type: list
list_type: compact
max_image_width:
client: true
default: 690
max_image_height:
client: true
default: 500
download_remote_images_to_local:
default: true
download_remote_images_threshold: 10
disabled_image_download_domains:
type: list
list_type: simple
default: ""
block_hotlinked_media:
default: false
block_hotlinked_media_exceptions:
default: ""
type: list
regex: '\A((https?:\/\/.+)(\|https?:\/\/.+[|$])*)?\z'
create_thumbnails: true
clean_up_uploads: true
clean_orphan_uploads_grace_period_hours: 48
purge_deleted_uploads_grace_period_days:
default: 30
max: 36500
prevent_anons_from_downloading_files:
default: false
client: true
secure_uploads:
default: false
client: true
secure_uploads_allow_embed_images_in_emails:
default: true
secure_uploads_max_email_embed_image_size_kb:
default: 1024
min: 1
max: 10240
enable_s3_uploads:
default: false
client: true
s3_use_iam_profile:
default: false
s3_access_key_id:
default: ""
secret: true
s3_secret_access_key:
default: ""
secret: true
2013-11-14 03:02:47 +08:00
s3_region:
default: "us-east-1"
enum: "S3RegionSiteSetting"
s3_upload_bucket:
default: ""
regex: '^[a-z0-9\-\/_]+$' # can't use '.' when using HTTPS
s3_endpoint:
default: ""
regex: '^https?:\/\/.+[^\/]$'
s3_http_continue_timeout:
default: 1
hidden: true
s3_install_cors_rule:
default: true
hidden: true
s3_cdn_url:
default: ""
regex: '^https?:\/\/.+[^\/]$'
s3_use_cdn_url_for_all_uploads:
default: false
s3_configure_tombstone_policy:
default: true
s3_use_acls:
default: true
enable_s3_inventory:
default: false
s3_configure_inventory_policy:
default: true
hidden: true
s3_presigned_get_url_expires_after_seconds:
default: 300
hidden: true
min: 60
max: 604800
allow_profile_backgrounds:
client: true
default: true
automatically_download_gravatars: true
2013-11-14 03:02:47 +08:00
allow_uploaded_avatars:
client: true
default: "0"
enum: "TrustLevelAndStaffAndDisabledSetting"
2015-03-03 01:12:19 +08:00
default_avatars:
default: ""
2015-03-03 01:12:19 +08:00
type: url_list
client: true
avatar_sizes:
default: "24|48|72|96|144|288"
type: list
list_type: compact
client: true
external_system_avatars_enabled:
default: true
client: true
validator: "ExternalSystemAvatarsValidator"
external_system_avatars_url:
default: "/letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png"
client: true
regex: '^((https?:)?\/)?\/.+[^\/]'
external_emoji_url:
default: ""
client: true
restrict_letter_avatar_colors:
default: ""
type: list
list_type: compact
validator: "ColorListValidator"
selectable_avatars_mode:
default: disabled
2018-07-18 18:57:43 +08:00
client: true
type: enum
choices:
- disabled
- everyone
- tl1
- tl2
- tl3
- tl4
- staff
- no_one
validator: "SelectableAvatarsModeValidator"
2018-07-18 18:57:43 +08:00
selectable_avatars:
default: ""
client: true
2018-07-18 18:57:43 +08:00
type: uploaded_image_list
allow_all_attachments_for_group_messages: false
png_to_jpg_quality:
default: 95
min: 1
max: 100
recompress_original_jpg_quality:
default: 90
min: 1
max: 100
image_preview_jpg_quality:
default: 90
min: 1
max: 100
allow_staff_to_upload_any_file_in_pm:
default: true
client: true
strip_image_metadata: true
min_ratio_to_crop:
type: float
default: 0.22
min: 0
max: 1
simultaneous_uploads:
client: true
default: 5
min: 0
max: 20
decompressed_theme_max_file_size_mb:
default: 1000
hidden: true
decompressed_backup_max_file_size_mb:
default: 100000
hidden: true
composer_media_optimization_image_enabled:
default: true
client: true
composer_media_optimization_image_bytes_optimization_threshold:
default: 524288
client: true
composer_media_optimization_image_resize_dimensions_threshold:
default: 1920
client: true
composer_media_optimization_image_resize_width_target:
default: 1920
client: true
composer_media_optimization_image_resize_pre_multiply:
default: false
hidden: true
client: true
composer_media_optimization_image_resize_linear_rgb:
default: false
hidden: true
client: true
composer_media_optimization_image_encode_quality:
default: 75
client: true
composer_media_optimization_debug_mode:
default: false
client: true
hidden: true
composer_ios_media_optimisation_image_enabled:
default: false
client: true
hidden: true
video_thumbnails_enabled:
default: true
client: true
hidden: true
2013-11-14 03:02:47 +08:00
trust:
default_trust_level:
default: 0
enum: "TrustLevelSetting"
default_invitee_trust_level:
default: 1
enum: "TrustLevelSetting"
min_trust_to_create_topic:
default: 0
enum: "TrustLevelSetting"
2014-05-13 20:53:11 +08:00
min_trust_to_edit_wiki_post:
default: 1
enum: "TrustLevelSetting"
min_trust_to_edit_post:
default: 0
enum: "TrustLevelSetting"
min_trust_to_allow_self_wiki:
default: 3
enum: "TrustLevelSetting"
min_trust_to_send_email_messages:
default: "4"
enum: "TrustLevelAndStaffSetting"
min_trust_to_flag_posts:
default: 1
enum: "TrustLevelSetting"
min_trust_to_post_links:
default: 0
enum: "TrustLevelSetting"
min_trust_to_post_embedded_media:
default: 0
enum: "TrustLevelSetting"
min_trust_level_to_allow_profile_background:
default: 0
client: true
enum: "TrustLevelSetting"
min_trust_level_to_allow_user_card_background:
default: 0
client: true
enum: "TrustLevelSetting"
min_trust_level_to_allow_invite:
default: 2
enum: "TrustLevelSetting"
min_trust_level_to_allow_ignore:
default: 2
enum: "TrustLevelSetting"
client: true
allow_flagging_staff: true
send_tl1_welcome_message: true
send_tl2_promotion_message: true
tl1_requires_topics_entered: 5
tl1_requires_read_posts:
default: 30
client: true
tl1_requires_time_spent_mins: 10
tl2_requires_topics_entered: 20
tl2_requires_read_posts: 100
tl2_requires_time_spent_mins: 60
tl2_requires_days_visited:
default: 15
max: 36500
tl2_requires_likes_received: 1
tl2_requires_likes_given: 1
tl2_requires_topic_reply_count: 3
tl3_time_period:
default: 100
min: 1
max: 1000000
tl3_requires_days_visited:
default: 50
max: 36500
tl3_requires_topics_replied_to:
default: 10
tl3_requires_topics_viewed:
default: 25
max: 100
tl3_requires_topics_viewed_cap:
default: 500
tl3_requires_posts_read:
default: 25
max: 100
tl3_requires_posts_read_cap:
default: 20000
max: 99000
tl3_requires_topics_viewed_all_time:
default: 200
tl3_requires_posts_read_all_time:
default: 500
tl3_requires_max_flagged:
default: 5
tl3_promotion_min_duration:
default: 14
max: 10000
tl3_requires_likes_given:
default: 30
tl3_requires_likes_received:
default: 20
tl3_links_no_follow:
default: false
client: true
tl4_delete_posts_and_topics:
default: false
client: true
edit_all_topic_groups:
default: "13"
type: group_list
edit_all_post_groups:
default: "14"
type: group_list
2013-11-14 03:02:47 +08:00
2013-11-15 04:05:48 +08:00
security:
detailed_404: false
enforce_second_factor:
client: true
type: enum
default: "no"
choices:
- "no"
- "staff"
- "all"
force_https:
default: false
same_site_cookies:
default: Lax
type: enum
choices:
- Lax
- Strict
- Disabled
- None
regex: "^(Lax|Strict|Disabled|None)$"
enable_escaped_fragments: true
2013-11-15 04:05:48 +08:00
allow_index_in_robots_txt: true
allow_indexing_non_canonical_urls:
default: true
hidden: true
moderators_manage_categories_and_groups:
default: false
client: true
moderators_change_post_ownership:
client: true
default: false
moderators_view_emails:
client: true
default: false
non_crawler_user_agents:
hidden: true
default: "trident|webkit|gecko|chrome|safari|msie|opera|goanna|discourse"
type: list
list_type: compact
crawler_user_agents:
hidden: true
default: "rss|bot|spider|crawler|facebook|archive|wayback|ping|monitor|lighthouse"
type: list
list_type: compact
browser_update_user_agents:
hidden: true
default: "MSIE 6|MSIE 7|MSIE 8|MSIE 9|Xbox|PlayStation"
type: list
list_type: compact
crawler_check_bypass_agents:
hidden: true
default: "cubot"
cors_origins:
default: ""
type: list
list_type: simple
keep_old_ip_address_count:
default: 0
hidden: true
use_admin_ip_allowlist:
default: false
client: true
blocked_ip_blocks:
default: ""
type: list
list_type: compact
allowed_internal_hosts:
default: ""
type: list
allowed_onebox_iframes:
default: "*"
type: list
allow_any: false
choices: "['*'] + Onebox::Engine.all_iframe_origins"
allowed_iframes:
default: "https://www.google.com/maps/embed?|https://www.openstreetmap.org/export/embed.html?|https://calendar.google.com/calendar/embed?|https://codepen.io/|https://www.instagram.com"
type: list
list_type: simple
client: true
allowed_crawler_user_agents:
type: list
default: ""
list_type: compact
blocked_crawler_user_agents:
type: list
default: "mauibot|semrushbot|ahrefsbot|blexbot|seo spider"
list_type: compact
slow_down_crawler_user_agents:
type: list
default: ""
list_type: compact
slow_down_crawler_rate: 60
content_security_policy:
default: true
content_security_policy_report_only:
default: false
content_security_policy_collect_reports:
default: false
hidden: true
content_security_policy_frame_ancestors:
default: true
content_security_policy_script_src:
type: simple_list
default: ""
invalidate_inactive_admin_email_after_days:
default: 365
min: 0
max: 36500
allow_embedding_site_in_an_iframe:
default: false
hidden: true
send_old_credential_reminder_days:
default: 0
hidden: true
disable_onebox_media_download_controls:
default: false
hidden: true
can_permanently_delete:
default: false
client: true
hidden: true
suppress_secured_categories_from_admin:
default: false
hidden: true
include_secure_categories_in_tag_counts:
default: false
display_personal_messages_tag_counts:
default: false
2013-11-15 04:05:48 +08:00
onebox:
post_onebox_maxlength:
default: 500
locale_default:
2018-09-11 17:58:22 +08:00
ja: 200
zh_CN: 200
zh_TW: 200
blocked_onebox_domains:
default: ""
type: host_list
list_type: compact
max_oneboxes_per_post:
default: 50
client: true
allowed_inline_onebox_domains:
default: ""
type: list
list_type: compact
enable_inline_onebox_on_all_domains:
default: true
force_custom_user_agent_hosts:
default: "http://codepen.io"
type: list
force_get_hosts:
default: "us.battle.net|news.yahoo.com|*.medium.com"
type: list
hidden: true
facebook_app_access_token:
default: ""
secret: true
block_onebox_on_redirect:
default: false
cache_onebox_response_body:
default: false
hidden: true
cache_onebox_response_body_domains:
default: ""
type: list
hidden: true
cache_onebox_user_agent:
default: ""
hidden: true
2013-11-14 03:02:47 +08:00
spam:
add_rel_nofollow_to_user_content: true
hide_post_sensitivity:
type: enum
enum: "ReviewableSensitivitySetting"
default: 6
2013-11-14 03:02:47 +08:00
cooldown_minutes_after_hiding_posts: 10
silence_new_user_sensitivity:
type: enum
enum: "ReviewableSensitivitySetting"
2019-05-25 03:49:29 +08:00
default: 3
2017-11-11 01:18:08 +08:00
num_users_to_silence_new_user: 3
notify_mods_when_user_silenced: false
flag_sockpuppets: false
2013-11-14 03:02:47 +08:00
newuser_spam_host_threshold: 3
allowed_spam_host_domains:
default: ""
type: list
list_type: simple
levenshtein_distance_spammer_emails:
default: 2
max: 3
max_new_accounts_per_registration_ip: 3
min_ban_entries_for_roll_up: 5
max_age_unmatched_emails: 365
max_age_unmatched_ips: 365
num_flaggers_to_close_topic: 5
auto_close_topic_sensitivity:
type: enum
enum: "ReviewableSensitivitySetting"
2019-05-25 03:49:29 +08:00
default: 9
num_hours_to_close_topic:
default: 4
min: 1
auto_respond_to_flag_actions: true
min_first_post_typing_time: 3000
2017-11-11 01:18:08 +08:00
auto_silence_fast_typers_on_first_post: true
auto_silence_fast_typers_max_trust_level: 0
auto_silence_first_post_regex: ""
high_trust_flaggers_auto_hide_posts: true
cooldown_hours_until_reflag:
default: 24
min: 0
slow_mode_prevents_editing: true
reviewable_claiming:
client: true
type: enum
default: disabled
choices:
- disabled
- optional
- required
reviewable_default_topics:
default: false
client: true
reviewable_default_visibility:
client: true
type: enum
default: low
enum: "ReviewablePrioritySetting"
reviewable_low_priority_threshold:
default: 0
min: 0
2013-11-14 03:02:47 +08:00
rate_limits:
unique_posts_mins: 5
2014-07-14 15:03:00 +08:00
rate_limit_create_topic: 15
rate_limit_create_post: 5
rate_limit_new_user_create_topic: 120
rate_limit_new_user_create_post: 30
rate_limit_search_anon_global_per_minute:
hidden: true
default: 150
rate_limit_search_anon_user_per_minute:
hidden: true
default: 15
rate_limit_search_anon_global_per_second:
hidden: true
default: 8
rate_limit_search_anon_user_per_second:
hidden: true
default: 2
rate_limit_search_user:
hidden: true
default: 30
max_topics_per_day: 20
max_personal_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_invites_per_day: 10
2015-05-13 15:04:05 +08:00
max_topic_invitations_per_day: 30
max_topic_invitations_per_minute: 5
max_topics_in_first_day: 3
max_replies_in_first_day: 10
tl2_additional_likes_per_day_multiplier: 1.5
tl3_additional_likes_per_day_multiplier: 2
tl4_additional_likes_per_day_multiplier: 3
tl2_additional_edits_per_day_multiplier: 1.5
tl3_additional_edits_per_day_multiplier: 2
tl4_additional_edits_per_day_multiplier: 3
tl2_additional_flags_per_day_multiplier: 1.5
tl3_additional_flags_per_day_multiplier: 2
tl4_additional_flags_per_day_multiplier: 3
alert_admins_if_errors_per_minute:
client: true
default: 0
alert_admins_if_errors_per_hour:
client: true
default: 0
2016-08-05 13:12:35 +08:00
max_prints_per_hour_per_user:
2016-08-09 11:53:08 +08:00
default: 5
2016-08-05 13:12:35 +08:00
client: true
min: 0
max_logins_per_ip_per_hour:
min: 1
default: 30
max_logins_per_ip_per_minute:
min: 1
default: 6
max_post_deletions_per_minute:
min: 0
2018-09-01 04:27:25 +08:00
default: 2
max_post_deletions_per_day:
min: 0
2018-09-01 04:27:25 +08:00
default: 10
invite_link_max_redemptions_limit:
min: 2
max: 1000000
default: 5000
client: true
invite_link_max_redemptions_limit_users:
min: 2
max: 1000000
default: 10
client: true
max_allowed_secondary_emails:
default: 10
hidden: true
client: true
max_batch_presign_multipart_per_minute:
default: 20
hidden: true
max_presigned_put_per_minute:
default: 10
hidden: true
max_create_multipart_per_minute:
default: 10
hidden: true
max_complete_multipart_per_minute:
default: 10
hidden: true
2013-11-14 03:02:47 +08:00
developer:
force_hostname:
hidden: true
default: ""
port:
hidden: true
default: ""
enable_chunked_encoding:
hidden: true
client: true
default: true
long_polling_base_url:
hidden: true
client: true
default: "/"
background_polling_interval:
hidden: true
client: true
default: 60000
max: 99000
polling_interval:
hidden: true
client: true
default: 3000
max: 99000
anon_polling_interval:
hidden: true
client: true
default: 25000
max: 99000
flush_timings_secs:
client: true
default: 60
active_user_rate_limit_secs: 60
2014-08-27 12:12:11 +08:00
verbose_localization:
default: false
client: true
top_topics_formula_log_views_multiplier:
default: 2
top_topics_formula_first_post_likes_multiplier:
default: 0.5
top_topics_formula_least_likes_per_post_multiplier:
default: 3
rebake_old_posts_count:
hidden: true
default: 80
min: 1
migrate_to_new_scheme:
hidden: true
default: false
max_new_topics:
default: 500
client: true
hidden: true
wizard_enabled:
2016-09-15 05:08:34 +08:00
default: true
hidden: true
bypass_wizard_check:
default: false
hidden: true
logging_provider:
hidden: true
default: "default"
type: "list"
choices:
- "default"
- "lograge"
bootstrap_error_pages:
hidden: true
default: false
enable_safe_mode:
default: true
client: true
enable_experimental_hashtag_autocomplete:
default: true
client: true
hidden: true
experimental_hashtag_search_result_limit:
default: 20
client: true
hidden: true
include_associated_account_ids:
default: false
hidden: true
2023-02-09 03:21:39 +08:00
experimental_form_templates:
client: true
default: false
hidden: true
experimental_new_new_view_groups:
client: true
type: group_list
list_type: compact
default: ""
allow_any: false
refresh: true
enable_experimental_lightbox:
default: false
client: true
experimental_topics_filter:
client: true
default: false
DEV: Upgrade search-menu to glimmer (#20482) # Top level view This PR is the first version of converting the search menu and its logic from (deprecated) widgets to glimmer components. The changes are hidden behind a group based feature flag. This will give us the ability to test the new implementation in a production setting before fully committing to the new search menu. # What has changed The majority of the logic from the widget implementation has been updated to fit within the context of a glimmer component, but it has not fundamentally changed. Instead of having a single widget - [search-menu.js](https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/widgets/search-menu.js) - that built the bulk of the search menu logic, we split the logic into (20+) bite size components. This greatly increases the readability and makes extending a component in the search menu much more straightforward. That being said, certain pieces needed to be rewritten from scratch as they did not translate from widget -> glimmer, or there was a general code upgraded needed. There are a few of these changes worth noting: ### Search Service **Search Term** -> In the widget implementation we had a overly complex way of managing the current search term. We tracked the search term across multiple different states (`term`, `opts.term`, `searchData.term`) causing headaches. This PR introduces a single source of truth: ```js this.search.activeGlobalSearchTerm ``` This tracked value is available anywhere the `search` service is injected. In the case the search term should be needs to be updated you can call ```js this.search.activeGlobalSearchTerm = "foo" ``` **event listeners** -> In the widget implementation we defined event listeners **only** on the search input to handle things such as - keyboard navigation / shortcuts - closing the search menu - performing a search with "enter" Having this in one place caused a lot of bloat in our logic as we had to handle multiple different cases in one location. Do _x_ if it is this element, but do _y_ if it is another. This PR updates the event listeners to be attached to individual components, allowing for a more fine tuned set of actions per element. To not duplicate logic across multiple components, we have condensed shared logic to actions on the search service to be reused. For example - `this.search.handleArrowUpOrDown` - to handle keyboard navigation. ### Search Context We have unique logic based on the current search context (topic / tag / category / user / etc). This context is set within a models route file. We have updated the search service with a tracked value `searchContext` that can be utilized and updated from any component where the search service is injected. ```js # before this.searchService.set("searchContext", user.searchContext); # after this.searchService.searchContext = user.searchContext; ``` # Views <img width="434" alt="Screenshot 2023-06-15 at 11 01 01 AM" src="https://github.com/discourse/discourse/assets/50783505/ef57e8e6-4e7b-4ba0-a770-8f2ed6310569"> <img width="418" alt="Screenshot 2023-06-15 at 11 04 11 AM" src="https://github.com/discourse/discourse/assets/50783505/2c1e0b38-d12c-4339-a1d5-04f0c1932b08"> <img width="413" alt="Screenshot 2023-06-15 at 11 04 34 AM" src="https://github.com/discourse/discourse/assets/50783505/b871d164-88cb-405e-9b78-d326a6f63686"> <img width="419" alt="Screenshot 2023-06-15 at 11 07 51 AM" src="https://github.com/discourse/discourse/assets/50783505/c7309a19-f541-47f4-94ef-10fa65658d8c"> <img width="424" alt="Screenshot 2023-06-15 at 11 04 48 AM" src="https://github.com/discourse/discourse/assets/50783505/f3dba06e-b029-431c-b3d0-36727b9e6dce"> <img width="415" alt="Screenshot 2023-06-15 at 11 08 57 AM" src="https://github.com/discourse/discourse/assets/50783505/ad4e7250-040c-4d06-bf06-99652f4c7b7c">
2023-06-16 22:24:07 +08:00
experimental_search_menu_groups:
type: group_list
list_type: compact
default: ""
allow_any: false
refresh: true
max_sidebar_section_links:
default: 50
hidden: true
navigation:
navigation_menu:
client: true
default: "sidebar"
type: enum
enum: "NavigationMenuSiteSetting"
default_navigation_menu_categories:
type: category_list
default: ""
client: true
default_navigation_menu_tags:
type: tag_list
default: ""
client: true
2013-11-14 03:02:47 +08:00
embedding:
2014-06-12 02:42:41 +08:00
embed_by_username:
default: ""
type: username
hidden: true
embed_post_limit:
default: 100
hidden: true
embed_topic_limit_per_page:
default: 200
hidden: true
embed_title_scrubber:
default: ""
hidden: true
blocked_embed_selectors:
default: ""
hidden: true
allowed_embed_classnames:
default: "emoji"
hidden: true
legal:
2013-11-14 03:02:47 +08:00
tos_url:
client: true
default: ""
privacy_policy_url:
2013-11-14 03:02:47 +08:00
client: true
default: ""
faq_url:
client: true
default: ""
log_anonymizer_details:
default: true
backups:
enable_backups:
default: true
client: true
allow_restore:
default: false
backup_location:
default: "local"
type: enum
enum: "BackupLocationSiteSetting"
client: true
maximum_backups:
client: true
default: 5
automatic_backups_enabled:
default: true
backup_frequency:
min: 1
max: 30
default: 7
s3_backup_bucket:
default: ""
regex: '^[a-z0-9\-\/]+$' # can't use '.' when using HTTPS
s3_disable_cleanup:
default: false
backup_time_of_day:
default: "3:30"
regex: "^((0?(0|1|2|3|4|5|6|7|8|9)|(10|11|12|13|14|15|16|17|18|19|20|21|22|23))):\\d\\d$"
backup_with_uploads: true
backup_gzip_compression_level_for_uploads:
default: 1
min: 1
max: 9
include_thumbnails_in_backups:
default: false
include_s3_uploads_in_backups:
default: false
hidden: true
client: true
search:
user_search_similar_results:
default: false
hidden: true
prioritize_exact_search_title_match:
default: true
hidden: true
max_duplicate_search_index_terms:
default: 6
hidden: true
use_pg_headlines_for_excerpt:
default: false
hidden: true
client: true
search_max_indexed_word_length:
default: 100
hidden: true
search_ranking_normalization:
default: "0"
hidden: true
search_ranking_weights:
default: ""
hidden: true
validator: "SearchRankingWeightsValidator"
min_search_term_length:
client: true
default: 3
locale_default:
zh_CN: 1
zh_TW: 1
ko: 1
ja: 1
search_tokenize_chinese:
default: false
validator: "SearchTokenizeChineseValidator"
search_tokenize_japanese:
default: false
validator: "SearchTokenizeJapaneseValidator"
search_prefer_recent_posts: false
search_recent_posts_size:
default: 1000000
max: 10000000
search_recent_regular_posts_offset_post_id:
default: 0
hidden: true
search_enable_recent_regular_posts_offset_size:
default: 200000
hidden: true
log_search_queries:
client: true
default: true
search_query_log_max_size:
default: 1000000
max: 1000000
search_query_log_max_retention_days:
default: 365 # 1 year
max: 1825 # 5 years
search_ignore_accents:
default: false
locale_default:
ar: true
ca: true
cs: true
el: true
es: true
fa_IR: true
fr: true
hu: true
pt: true
pt_BR: true
ro: true
sk: true
tr_TR: true
category_search_priority_low_weight:
default: 0.8
hidden: true
validator: "CategorySearchPriorityWeightsValidator"
category_search_priority_high_weight:
default: 1.2
hidden: true
validator: "CategorySearchPriorityWeightsValidator"
search_page_size:
default: 50
hidden: true
uncategorized:
version_checks:
client: true
default: true
new_version_emails: true
send_welcome_message: true
2013-11-15 04:05:48 +08:00
suppress_uncategorized_badge:
client: true
default: true
header_dropdown_category_count:
client: true
default: 8
2015-04-13 22:50:41 +08:00
slug_generation_method:
default: "ascii"
enum: "SlugSetting"
client: true
locale_default:
ja: "none"
zh_CN: "none"
zh_TW: "none"
2015-04-13 22:50:41 +08:00
permalink_normalizations:
default: ""
type: list
list_type: simple
validator: "RegexpListValidator"
max_similar_results: 5
minimum_topics_similar: 50
2013-11-14 03:02:47 +08:00
previous_visit_timeout_hours: 1
staff_like_weight: 3
topic_view_duration_hours: 8
2015-09-14 15:51:17 +08:00
user_profile_view_duration_hours: 8
# Summary mode
2013-11-19 01:48:26 +08:00
summary_score_threshold: 15
summary_posts_required: 50
summary_likes_required: 1
summary_percent_filter: 20
summary_max_results: 100
summary_timeline_button:
client: true
default: false
summarization_strategy:
client: true
default: ""
enum: "SummarizationStrategy"
validator: "SummarizationValidator"
custom_summarization_allowed_groups:
client: true
type: group_list
list_type: compact
default: "3|13" # 3: @staff, 13: @trust_level_3
automatic_topic_heat_values: true
# View heat thresholds
topic_views_heat_low:
client: true
default: 1000
topic_views_heat_medium:
client: true
default: 2000
topic_views_heat_high:
client: true
default: 3500
# Post/Like heat thresholds
topic_post_like_heat_low:
client: true
default: 0.5
topic_post_like_heat_medium:
client: true
default: 1.0
topic_post_like_heat_high:
client: true
default: 2.0
# History edit heat thresholds
history_hours_low:
client: true
default: 12
history_hours_medium:
client: true
default: 24
history_hours_high:
client: true
default: 48
# Cold map thresholds
cold_age_days_low:
default: 14
max: 36500
client: true
cold_age_days_medium:
default: 90
max: 36500
client: true
cold_age_days_high:
default: 180
max: 36500
client: true
# Warnings
educate_until_posts: 2
sequential_replies_threshold: 2
2017-02-05 04:04:15 +08:00
get_a_room_threshold: 3
dont_feed_the_trolls_threshold: 2
dominating_topic_minimum_percent: 40
disable_avatar_education_message: false
pm_warn_user_last_seen_months_ago: 24
global_notice:
default: ""
client: true
has_login_hint:
default: false
hidden: true
# Nothing past this threshold is ever considered new
# this is calculated dynamically every 15 minutes
min_new_topics_time:
default: 0
hidden: true
# Category IDs
general_category_id:
default: -1
hidden: true
client: true
meta_category_id:
default: -1
hidden: true
staff_category_id:
default: -1
hidden: true
uncategorized_category_id:
default: -1
hidden: true
default_composer_category:
client: true
type: category
default: ""
validator: "DefaultComposerCategoryValidator"
2013-11-14 03:02:47 +08:00
notify_about_reviewable_item_after:
type: float
default: 48
enable_system_avatars:
hidden: true
default: true
use_site_small_logo_as_system_avatar:
default: true
enable_listing_suspended_users_on_search:
default: false
disable_system_edit_notifications: true
disable_category_edit_notifications:
default: false
disable_tags_edit_notifications:
default: false
notification_consolidation_threshold:
default: 3
min: 0
likes_notification_consolidation_window_mins:
default: 120
min: 1
delete_drafts_older_than_n_days:
default: 180
max: 36500
delete_merged_stub_topics_after_days:
default: 7
min: 0
backup_drafts_to_pm_length:
default: 0
hidden: true
view_user_route:
default: "summary"
hidden: true
client: true
tos_topic_id:
default: -1
hidden: true
guidelines_topic_id:
default: -1
hidden: true
privacy_topic_id:
default: -1
hidden: true
welcome_topic_id:
default: -1
hidden: true
admin_quick_start_topic_id:
default: -1
hidden: true
client: true
bootstrap_mode_min_users:
default: 50
client: true
max: 5000
bootstrap_mode_enabled:
default: false
client: true
hidden: true
check_for_new_features:
default: false
hidden: true
automatically_unpin_topics:
default: true
client: true
read_time_word_count:
default: 500
client: true
locale_default:
2018-09-11 17:58:22 +08:00
ja: 350
zh_CN: 350
zh_TW: 350
topic_page_title_includes_category:
default: true
client: true
native_app_install_banner_ios: false
native_app_install_banner_android: false
ios_app_id:
default: "1173672076"
hidden: true
android_app_id:
default: "com.discourse"
hidden: true
pwa_display_browser_regex:
default: "a^"
hidden: true
app_association_android:
default: ""
textarea: true
app_association_ios:
default: ""
textarea: true
2017-03-10 21:16:00 +08:00
share_anonymized_statistics: true
auto_handle_queued_age:
default: 60
min: 0
penalty_step_hours:
default: "24|72|168|720"
type: "list"
list_type: "compact"
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
svg_icon_subset:
default: ""
type: "list"
list_type: "compact"
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
client: true
always_include_topic_excerpts:
default: false
hidden: true
allow_bulk_invite:
default: true
client: true
2019-06-12 17:05:21 +08:00
max_bulk_invites:
default: 50000
hidden: true
overridden_robots_txt:
default: ""
hidden: true
show_category_definitions_in_topic_lists:
default: false
hidden: true
client: true
create_revision_on_bulk_topic_moves:
default: true
allow_changing_staged_user_tracking: false
use_polymorphic_bookmarks:
client: true
default: true
hidden: true
splash_screen:
default: true
suggest_weekends_in_date_pickers:
client: true
default: true
user_preferences:
default_email_digest_frequency:
enum: "DigestEmailSiteSetting"
default: 10080
default_include_tl0_in_digests: false
default_email_level:
enum: "EmailLevelSiteSetting"
default: 1
default_email_messages_level:
enum: "EmailLevelSiteSetting"
default: 0
default_email_mailing_list_mode: false
default_email_mailing_list_mode_frequency:
enum: "MailingListModeSiteSetting"
default: 1
disable_mailing_list_mode:
default: true
client: true
default_email_previous_replies:
enum: "PreviousRepliesSiteSetting"
default: 2
default_email_in_reply_to:
default: false
default_hide_profile_and_presence:
default: false
default_other_new_topic_duration_minutes:
enum: "NewTopicDurationSiteSetting"
default: 2880
default_other_auto_track_topics_after_msecs:
enum: "AutoTrackDurationSiteSetting"
default: 300000
default_other_notification_level_when_replying:
enum: "NotificationLevelWhenReplyingSiteSetting"
default: 2
default_other_external_links_in_new_tab: false
default_other_enable_quoting: true
default_other_enable_defer: false
default_other_dynamic_favicon: false
default_other_skip_new_user_tips: false
default_other_like_notification_frequency:
enum: "LikeNotificationFrequencySiteSetting"
default: 1
default_topics_automatic_unpin:
default: true
client: true
default_categories_watching:
type: category_list
default: ""
default_categories_tracking:
type: category_list
default: ""
default_categories_muted:
type: category_list
default: ""
default_categories_watching_first_post:
type: category_list
default: ""
default_categories_normal:
type: category_list
default: ""
mute_all_categories_by_default:
default: false
client: true
default_tags_watching:
type: tag_list
default: ""
default_tags_tracking:
type: tag_list
default: ""
default_tags_muted:
type: tag_list
default: ""
default_tags_watching_first_post:
type: tag_list
default: ""
default_text_size:
type: enum
default: normal
choices:
- smaller
- normal
- larger
- largest
default_title_count_mode:
type: enum
default: notifications
choices:
- notifications
- contextual
2023-06-06 00:08:04 +08:00
enable_offline_indicator:
default: false
client: true
default_sidebar_link_to_filtered_list: false
default_sidebar_show_count_of_new_items: false
api:
retain_web_hook_events_period_days:
default: 30
max: 36500
retry_web_hook_events:
default: false
api_key_last_used_epoch:
default: "" # Value is added in a migration
hidden: true
revoke_api_keys_days:
default: 180
max: 36500
user_api:
allow_user_api_keys:
default: true
allow_user_api_key_scopes:
default: "read|write|message_bus|push|notifications|session_info|one_time_password"
type: list
push_api_secret_key:
default: ""
hidden: true
min_trust_level_for_user_api_key:
default: 0
enum: "TrustLevelSetting"
allowed_user_api_push_urls:
default: ""
type: list
hidden: true
allowed_user_api_auth_redirects:
default: "https://api.discourse.org/api/auth_redirect|discourse://auth_redirect"
type: list
expire_user_api_keys_days:
default: 180
max: 36500
tags:
tagging_enabled:
client: true
default: true
refresh: true
tag_style:
client: true
type: enum
default: "simple"
choices:
- simple
- bullet
- box
preview: '<div class="discourse-tags"><span class="discourse-tag {{value}}">tag1</span><span class="discourse-tag {{value}}">tag2</span></div>'
max_tags_per_topic:
default: 5
client: true
enable_max_tags_per_email_subject:
default: false
client: true
max_tags_per_email_subject:
default: 5
client: true
min: 0
max_tag_length:
default: 20
client: true
min_trust_to_create_tag:
default: "3"
enum: "TrustLevelAndStaffSetting"
min_trust_level_to_tag_topics:
default: "0"
enum: "TrustLevelAndStaffSetting"
client: true
max_tag_search_results:
client: true
default: 5
min: 1
max_tags_in_filter_list:
client: true
default: 30
min: 1
refresh: true
tags_sort_alphabetically:
client: true
default: false
refresh: true
tags_listed_by_group:
client: true
default: false
pm_tags_allowed_for_groups:
client: true
type: group_list
list_type: compact
default: ""
allow_any: false
refresh: true
suppress_overlapping_tags_in_list:
default: false
client: true
remove_muted_tags_from_latest:
client: true
type: enum
default: always
enum: RemoveMutedTagsFromLatestSiteSetting
watched_precedence_over_muted:
client: true
default: false
force_lowercase_tags:
2018-10-19 22:43:31 +08:00
default: true
client: true
create_post_for_category_and_tag_changes:
default: false
dashboard:
dashboard_hidden_reports:
client: true
type: list
list_type: compact
default: ""
allow_any: true
dashboard_visible_tabs:
client: true
type: list
list_type: compact
default: "moderation|security|reports"
allow_any: false
choices:
- moderation
- security
- reports
dashboard_general_tab_activity_metrics:
client: true
type: list
list_type: compact
default: "page_view_total_reqs|visits|time_to_first_response|likes|flags|user_to_user_private_messages_with_replies"
allow_any: false
choices:
- page_view_total_reqs
- visits
- time_to_first_response
- likes
- flags
- user_to_user_private_messages_with_replies
- signups
verbose_user_stat_count_logging:
hidden: true
default: false