2019-05-02 17:17:27 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-02-05 13:16:51 -06:00
|
|
|
class SiteSerializer < ApplicationSerializer
|
|
|
|
|
2018-03-13 14:59:12 -05:00
|
|
|
attributes(
|
|
|
|
:default_archetype,
|
|
|
|
:notification_types,
|
|
|
|
:post_types,
|
2021-06-01 15:11:48 -05:00
|
|
|
:trust_levels,
|
2018-03-13 14:59:12 -05:00
|
|
|
:groups,
|
|
|
|
:filters,
|
|
|
|
:periods,
|
|
|
|
:top_menu_items,
|
|
|
|
:anonymous_top_menu_items,
|
|
|
|
:uncategorized_category_id, # this is hidden so putting it here
|
|
|
|
:user_field_max_length,
|
|
|
|
: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,
|
2020-08-28 09:36:52 -05:00
|
|
|
:user_color_schemes,
|
|
|
|
:default_dark_color_scheme,
|
2019-07-31 12:33:49 -05:00
|
|
|
:censored_regexp,
|
2020-05-27 13:11:52 -05:00
|
|
|
:shared_drafts_category_id,
|
2021-02-25 06:00:58 -06:00
|
|
|
:custom_emoji_translation,
|
2021-06-02 00:36:49 -05:00
|
|
|
:watched_words_replace,
|
2021-06-23 02:21:11 -05:00
|
|
|
:watched_words_link,
|
|
|
|
:categories
|
2018-03-13 14:59:12 -05:00
|
|
|
)
|
2013-02-20 12:15:50 -06:00
|
|
|
|
2013-02-05 13:16:51 -06:00
|
|
|
has_many :archetypes, embed: :objects, serializer: ArchetypeSerializer
|
2018-07-31 10:18:50 -05:00
|
|
|
has_many :user_fields, embed: :objects, serializer: UserFieldSerializer
|
|
|
|
has_many :auth_providers, embed: :objects, serializer: AuthProviderSerializer
|
2013-02-05 13:16:51 -06:00
|
|
|
|
2017-04-12 09:52:52 -05:00
|
|
|
def user_themes
|
|
|
|
cache_fragment("user_themes") do
|
2018-07-11 23:18:21 -05:00
|
|
|
Theme.where('id = :default OR user_selectable',
|
|
|
|
default: SiteSetting.default_theme_id)
|
2017-07-27 20:20:09 -05:00
|
|
|
.order(:name)
|
2020-08-28 09:36:52 -05:00
|
|
|
.pluck(:id, :name, :color_scheme_id)
|
|
|
|
.map { |id, n, cs| { theme_id: id, name: n, default: id == SiteSetting.default_theme_id, color_scheme_id: cs } }
|
2017-07-27 20:20:09 -05:00
|
|
|
.as_json
|
2017-04-12 09:52:52 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-08-28 09:36:52 -05:00
|
|
|
def user_color_schemes
|
|
|
|
cache_fragment("user_color_schemes") do
|
2021-06-02 00:26:09 -05:00
|
|
|
schemes = ColorScheme.includes(:color_scheme_colors).where('user_selectable').order(:name)
|
2020-08-28 09:36:52 -05:00
|
|
|
ActiveModel::ArraySerializer.new(schemes, each_serializer: ColorSchemeSelectableSerializer).as_json
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def default_dark_color_scheme
|
|
|
|
ColorScheme.find_by_id(SiteSetting.default_dark_mode_color_scheme_id).as_json
|
|
|
|
end
|
|
|
|
|
2015-09-28 01:43:38 -05:00
|
|
|
def groups
|
2019-02-14 17:24:29 -06:00
|
|
|
cache_anon_fragment("group_names") do
|
2021-04-06 10:13:06 -05:00
|
|
|
object.groups.order(:name)
|
2021-08-10 06:55:11 -05:00
|
|
|
.select(:id, :name, :flair_icon, :flair_upload_id, :flair_bg_color, :flair_color)
|
2021-04-06 10:13:06 -05:00
|
|
|
.map do |g|
|
|
|
|
{
|
|
|
|
id: g.id,
|
|
|
|
name: g.name,
|
|
|
|
flair_url: g.flair_url,
|
|
|
|
flair_bg_color: g.flair_bg_color,
|
|
|
|
flair_color: g.flair_color,
|
|
|
|
}
|
|
|
|
end.as_json
|
2019-02-14 17:24:29 -06:00
|
|
|
end
|
2015-09-28 01:43:38 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def post_action_types
|
2015-10-18 19:42:33 -05:00
|
|
|
cache_fragment("post_action_types_#{I18n.locale}") do
|
2019-12-27 05:41:50 -06:00
|
|
|
types = ordered_flags(PostActionType.types.values)
|
2017-10-17 12:31:45 -05:00
|
|
|
ActiveModel::ArraySerializer.new(types).as_json
|
2015-09-28 01:43:38 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def topic_flag_types
|
2015-10-18 19:42:33 -05:00
|
|
|
cache_fragment("post_action_flag_types_#{I18n.locale}") do
|
2019-12-27 05:41:50 -06:00
|
|
|
types = ordered_flags(PostActionType.topic_flag_types.values)
|
2017-10-19 13:27:38 -05:00
|
|
|
ActiveModel::ArraySerializer.new(types, each_serializer: TopicFlagTypeSerializer).as_json
|
2015-09-28 01:43:38 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-02-05 13:16:51 -06:00
|
|
|
def default_archetype
|
|
|
|
Archetype.default
|
|
|
|
end
|
|
|
|
|
2013-02-20 12:15:50 -06:00
|
|
|
def post_types
|
2013-03-18 15:03:46 -05:00
|
|
|
Post.types
|
2013-02-20 12:15:50 -06:00
|
|
|
end
|
2013-02-25 10:42:20 -06:00
|
|
|
|
2014-01-14 11:48:57 -06:00
|
|
|
def filters
|
|
|
|
Discourse.filters.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
|
|
|
def periods
|
|
|
|
TopTopic.periods.map(&:to_s)
|
|
|
|
end
|
2014-02-05 16:54:16 -06:00
|
|
|
|
2014-01-14 11:48:57 -06: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 18:05:51 -05:00
|
|
|
def uncategorized_category_id
|
|
|
|
SiteSetting.uncategorized_category_id
|
2013-05-27 13:15:20 -05:00
|
|
|
end
|
|
|
|
|
2015-02-23 12:02:30 -06:00
|
|
|
def user_field_max_length
|
|
|
|
UserField.max_length
|
|
|
|
end
|
|
|
|
|
2016-04-25 14:55:15 -05:00
|
|
|
def can_create_tag
|
2018-02-13 14:46:25 -06:00
|
|
|
scope.can_create_tag?
|
2016-04-25 14:55:15 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def can_tag_topics
|
2018-02-13 14:46:25 -06:00
|
|
|
scope.can_tag_topics?
|
|
|
|
end
|
|
|
|
|
|
|
|
def can_tag_pms
|
|
|
|
scope.can_tag_pms?
|
2016-04-25 14:55:15 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def include_tags_filter_regexp?
|
|
|
|
SiteSetting.tagging_enabled
|
|
|
|
end
|
2016-07-07 08:17:56 -05:00
|
|
|
|
2016-04-25 14:55:15 -05:00
|
|
|
def tags_filter_regexp
|
|
|
|
DiscourseTagging::TAGS_FILTER_REGEXP.source
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_top_tags?
|
2016-07-07 08:17:56 -05:00
|
|
|
Tag.include_tags?
|
2016-04-25 14:55:15 -05:00
|
|
|
end
|
2016-07-07 08:17:56 -05:00
|
|
|
|
2016-04-25 14:55:15 -05:00
|
|
|
def top_tags
|
2016-09-22 14:23:10 -05:00
|
|
|
Tag.top_tags(guardian: scope)
|
2016-04-25 14:55:15 -05:00
|
|
|
end
|
2016-09-14 15:36:08 -05:00
|
|
|
|
|
|
|
def wizard_required
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_wizard_required?
|
2016-10-18 10:44:25 -05:00
|
|
|
Wizard.user_requires_completion?(scope.user)
|
2016-09-14 15:36:08 -05:00
|
|
|
end
|
2016-12-05 06:31:43 -06: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 15:56:44 -05:00
|
|
|
|
2019-07-31 12:33:49 -05:00
|
|
|
def censored_regexp
|
|
|
|
WordWatcher.word_matcher_regexp(:censor)&.source
|
2017-06-28 15:56:44 -05:00
|
|
|
end
|
2018-03-13 14:59:12 -05:00
|
|
|
|
2020-05-27 13:11:52 -05:00
|
|
|
def custom_emoji_translation
|
|
|
|
Plugin::CustomEmoji.translations
|
|
|
|
end
|
|
|
|
|
2018-03-13 14:59:12 -05:00
|
|
|
def shared_drafts_category_id
|
|
|
|
SiteSetting.shared_drafts_category.to_i
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_shared_drafts_category_id?
|
2021-05-06 14:09:31 -05:00
|
|
|
scope.can_see_shared_draft? && SiteSetting.shared_drafts_enabled?
|
2018-03-13 14:59:12 -05:00
|
|
|
end
|
|
|
|
|
2021-02-25 06:00:58 -06:00
|
|
|
def watched_words_replace
|
2021-05-18 04:09:47 -05:00
|
|
|
WordWatcher.word_matcher_regexps(:replace)
|
2021-02-25 06:00:58 -06:00
|
|
|
end
|
|
|
|
|
2021-06-02 00:36:49 -05:00
|
|
|
def watched_words_link
|
|
|
|
WordWatcher.word_matcher_regexps(:link)
|
|
|
|
end
|
|
|
|
|
2021-06-23 02:21:11 -05:00
|
|
|
def categories
|
|
|
|
object.categories.map { |c| c.to_h }
|
|
|
|
end
|
|
|
|
|
2019-12-27 05:41:50 -06:00
|
|
|
private
|
|
|
|
|
|
|
|
def ordered_flags(flags)
|
|
|
|
notify_moderators_type = PostActionType.flag_types[:notify_moderators]
|
|
|
|
types = flags
|
|
|
|
|
|
|
|
if notify_moderators_flag = types.index(notify_moderators_type)
|
|
|
|
types.insert(types.length, types.delete_at(notify_moderators_flag))
|
|
|
|
end
|
|
|
|
|
|
|
|
types.map { |id| PostActionType.new(id: id) }
|
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|