2016-04-25 15:55:15 -04:00
|
|
|
require_dependency 'discourse_tagging'
|
2016-09-14 16:36:08 -04:00
|
|
|
require_dependency 'wizard'
|
|
|
|
require_dependency 'wizard/builder'
|
2016-04-25 15:55:15 -04:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
class SiteSerializer < ApplicationSerializer
|
|
|
|
|
2018-03-13 15:59:12 -04:00
|
|
|
attributes(
|
|
|
|
:default_archetype,
|
|
|
|
:notification_types,
|
|
|
|
:post_types,
|
|
|
|
:groups,
|
|
|
|
:filters,
|
|
|
|
:periods,
|
|
|
|
:top_menu_items,
|
|
|
|
:anonymous_top_menu_items,
|
|
|
|
:uncategorized_category_id, # this is hidden so putting it here
|
|
|
|
:is_readonly,
|
|
|
|
:disabled_plugins,
|
|
|
|
:user_field_max_length,
|
|
|
|
:suppressed_from_latest_category_ids,
|
|
|
|
:post_action_types,
|
|
|
|
:topic_flag_types,
|
|
|
|
:can_create_tag,
|
|
|
|
:can_tag_topics,
|
|
|
|
:can_tag_pms,
|
|
|
|
:tags_filter_regexp,
|
|
|
|
:top_tags,
|
|
|
|
:wizard_required,
|
|
|
|
:topic_featured_link_allowed_category_ids,
|
|
|
|
:user_themes,
|
|
|
|
:censored_words,
|
|
|
|
:shared_drafts_category_id
|
|
|
|
)
|
2013-02-20 13:15:50 -05:00
|
|
|
|
2013-05-13 04:04:03 -04:00
|
|
|
has_many :categories, serializer: BasicCategorySerializer, embed: :objects
|
2013-02-05 14:16:51 -05:00
|
|
|
has_many :trust_levels, embed: :objects
|
|
|
|
has_many :archetypes, embed: :objects, serializer: ArchetypeSerializer
|
2014-09-26 14:48:34 -04:00
|
|
|
has_many :user_fields, embed: :objects, serialzer: UserFieldSerializer
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2017-04-12 10:52:52 -04:00
|
|
|
def user_themes
|
|
|
|
cache_fragment("user_themes") do
|
|
|
|
Theme.where('key = :default OR user_selectable',
|
|
|
|
default: SiteSetting.default_theme_key)
|
2017-07-27 21:20:09 -04:00
|
|
|
.order(:name)
|
|
|
|
.pluck(:key, :name)
|
|
|
|
.map { |k, n| { theme_key: k, name: n, default: k == SiteSetting.default_theme_key } }
|
|
|
|
.as_json
|
2017-04-12 10:52:52 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-09-28 02:43:38 -04:00
|
|
|
def groups
|
|
|
|
cache_fragment("group_names") do
|
2017-07-27 21:20:09 -04:00
|
|
|
Group.order(:name).pluck(:id, :name).map { |id, name| { id: id, name: name } }.as_json
|
2015-09-28 02:43:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def post_action_types
|
2015-10-18 20:42:33 -04:00
|
|
|
cache_fragment("post_action_types_#{I18n.locale}") do
|
2017-10-17 13:31:45 -04:00
|
|
|
types = PostActionType.types.values.map { |id| PostActionType.new(id: id) }
|
|
|
|
ActiveModel::ArraySerializer.new(types).as_json
|
2015-09-28 02:43:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def topic_flag_types
|
2015-10-18 20:42:33 -04:00
|
|
|
cache_fragment("post_action_flag_types_#{I18n.locale}") do
|
2017-10-19 14:27:38 -04:00
|
|
|
types = PostActionType.topic_flag_types.values.map { |id| PostActionType.new(id: id) }
|
|
|
|
ActiveModel::ArraySerializer.new(types, each_serializer: TopicFlagTypeSerializer).as_json
|
2015-09-28 02:43:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
def default_archetype
|
|
|
|
Archetype.default
|
|
|
|
end
|
|
|
|
|
2013-02-20 13:15:50 -05:00
|
|
|
def post_types
|
2013-03-18 16:03:46 -04:00
|
|
|
Post.types
|
2013-02-20 13:15:50 -05:00
|
|
|
end
|
2013-02-25 11:42:20 -05:00
|
|
|
|
2014-01-14 12:48:57 -05:00
|
|
|
def filters
|
|
|
|
Discourse.filters.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
|
|
|
def periods
|
|
|
|
TopTopic.periods.map(&:to_s)
|
|
|
|
end
|
2014-02-05 17:54:16 -05:00
|
|
|
|
2014-01-14 12:48:57 -05:00
|
|
|
def top_menu_items
|
|
|
|
Discourse.top_menu_items.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
|
|
|
def anonymous_top_menu_items
|
|
|
|
Discourse.anonymous_top_menu_items.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
2013-10-23 19:05:51 -04:00
|
|
|
def uncategorized_category_id
|
|
|
|
SiteSetting.uncategorized_category_id
|
2013-05-27 14:15:20 -04:00
|
|
|
end
|
|
|
|
|
2014-02-12 23:37:28 -05:00
|
|
|
def is_readonly
|
|
|
|
Discourse.readonly_mode?
|
|
|
|
end
|
|
|
|
|
2015-02-04 16:23:39 -05:00
|
|
|
def disabled_plugins
|
|
|
|
Discourse.disabled_plugin_names
|
|
|
|
end
|
|
|
|
|
2015-02-23 13:02:30 -05:00
|
|
|
def user_field_max_length
|
|
|
|
UserField.max_length
|
|
|
|
end
|
|
|
|
|
2016-04-25 15:55:15 -04:00
|
|
|
def can_create_tag
|
2018-02-13 15:46:25 -05:00
|
|
|
scope.can_create_tag?
|
2016-04-25 15:55:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def can_tag_topics
|
2018-02-13 15:46:25 -05:00
|
|
|
scope.can_tag_topics?
|
|
|
|
end
|
|
|
|
|
|
|
|
def can_tag_pms
|
|
|
|
scope.can_tag_pms?
|
2016-04-25 15:55:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def include_tags_filter_regexp?
|
|
|
|
SiteSetting.tagging_enabled
|
|
|
|
end
|
2016-07-07 09:17:56 -04:00
|
|
|
|
2016-04-25 15:55:15 -04:00
|
|
|
def tags_filter_regexp
|
|
|
|
DiscourseTagging::TAGS_FILTER_REGEXP.source
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_top_tags?
|
2016-07-07 09:17:56 -04:00
|
|
|
Tag.include_tags?
|
2016-04-25 15:55:15 -04:00
|
|
|
end
|
2016-07-07 09:17:56 -04:00
|
|
|
|
2016-04-25 15:55:15 -04:00
|
|
|
def top_tags
|
2016-09-22 15:23:10 -04:00
|
|
|
Tag.top_tags(guardian: scope)
|
2016-04-25 15:55:15 -04:00
|
|
|
end
|
2016-09-14 16:36:08 -04:00
|
|
|
|
|
|
|
def wizard_required
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_wizard_required?
|
2016-10-18 11:44:25 -04:00
|
|
|
Wizard.user_requires_completion?(scope.user)
|
2016-09-14 16:36:08 -04:00
|
|
|
end
|
2016-12-05 07:31:43 -05:00
|
|
|
|
|
|
|
def include_topic_featured_link_allowed_category_ids?
|
|
|
|
SiteSetting.topic_featured_link_enabled
|
|
|
|
end
|
|
|
|
|
|
|
|
def topic_featured_link_allowed_category_ids
|
|
|
|
scope.topic_featured_link_allowed_category_ids
|
|
|
|
end
|
2017-06-28 16:56:44 -04:00
|
|
|
|
|
|
|
def censored_words
|
|
|
|
WordWatcher.words_for_action(:censor).join('|')
|
|
|
|
end
|
2018-03-13 15:59:12 -04:00
|
|
|
|
|
|
|
def shared_drafts_category_id
|
|
|
|
SiteSetting.shared_drafts_category.to_i
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_shared_drafts_category_id?
|
|
|
|
scope.can_create_shared_draft?
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|