Class: SiteSerializer

Inherits:
ApplicationSerializer show all
Includes:
NavigationMenuTagsMixin
Defined in:
app/serializers/site_serializer.rb

Constant Summary collapse

5

Instance Method Summary collapse

Methods included from NavigationMenuTagsMixin

#serialize_tags

Methods inherited from ApplicationSerializer

expire_cache_fragment!, fragment_cache

Methods inherited from ActiveModel::Serializer

#include!

Instance Method Details

#anonymous_default_navigation_menu_tagsObject



274
275
276
277
278
279
280
281
282
283
# File 'app/serializers/site_serializer.rb', line 274

def anonymous_default_navigation_menu_tags
  @anonymous_default_navigation_menu_tags ||=
    begin
      tag_names =
        SiteSetting.default_navigation_menu_tags.split("|") -
          DiscourseTagging.hidden_tag_names(scope)

      serialize_tags(Tag.where(name: tag_names))
    end
end

#anonymous_sidebar_sectionsObject



291
292
293
294
295
296
297
# File 'app/serializers/site_serializer.rb', line 291

def anonymous_sidebar_sections
  SidebarSection
    .public_sections
    .includes(:sidebar_urls)
    .order("(section_type IS NOT NULL) DESC, (public IS TRUE) DESC")
    .map { |section| SidebarSectionSerializer.new(section, root: false) }
end

#anonymous_top_menu_itemsObject



148
149
150
# File 'app/serializers/site_serializer.rb', line 148

def anonymous_top_menu_items
  Discourse.anonymous_top_menu_items.map(&:to_s)
end

#can_associate_groupsObject



172
173
174
# File 'app/serializers/site_serializer.rb', line 172

def can_associate_groups
  scope.can_associate_groups?
end

#can_create_tagObject



160
161
162
# File 'app/serializers/site_serializer.rb', line 160

def can_create_tag
  scope.can_create_tag?
end

#can_tag_pmsObject



168
169
170
# File 'app/serializers/site_serializer.rb', line 168

def can_tag_pms
  scope.can_tag_pms?
end

#can_tag_topicsObject



164
165
166
# File 'app/serializers/site_serializer.rb', line 164

def can_tag_topics
  scope.can_tag_topics?
end

#categoriesObject



236
237
238
# File 'app/serializers/site_serializer.rb', line 236

def categories
  object.categories.map { |c| c.to_h }
end

#censored_regexpObject



212
213
214
# File 'app/serializers/site_serializer.rb', line 212

def censored_regexp
  WordWatcher.serializable_word_matcher_regexp(:censor, engine: :js)
end

#custom_emoji_translationObject



216
217
218
# File 'app/serializers/site_serializer.rb', line 216

def custom_emoji_translation
  Plugin::CustomEmoji.translations
end

#default_archetypeObject



120
121
122
# File 'app/serializers/site_serializer.rb', line 120

def default_archetype
  Archetype.default
end

#default_dark_color_schemeObject



83
84
85
# File 'app/serializers/site_serializer.rb', line 83

def default_dark_color_scheme
  ColorScheme.find_by_id(SiteSetting.default_dark_mode_color_scheme_id).as_json
end

#denied_emojisObject



311
312
313
# File 'app/serializers/site_serializer.rb', line 311

def denied_emojis
  @denied_emojis ||= Emoji.denied
end

#displayed_about_plugin_stat_groupsObject



252
253
254
# File 'app/serializers/site_serializer.rb', line 252

def displayed_about_plugin_stat_groups
  About.displayed_plugin_stat_groups
end

#filtersObject



136
137
138
# File 'app/serializers/site_serializer.rb', line 136

def filters
  Discourse.filters.map(&:to_s)
end

#groupsObject



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/serializers/site_serializer.rb', line 87

def groups
  cache_anon_fragment("group_names") do
    object
      .groups
      .order(:name)
      .select(:id, :name, :flair_icon, :flair_upload_id, :flair_bg_color, :flair_color)
      .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
  end
end

#hashtag_configurationsObject



244
245
246
# File 'app/serializers/site_serializer.rb', line 244

def hashtag_configurations
  HashtagAutocompleteService.contexts_with_ordered_types
end

#hashtag_iconsObject



248
249
250
# File 'app/serializers/site_serializer.rb', line 248

def hashtag_icons
  HashtagAutocompleteService.data_source_icon_map
end

#include_anonymous_default_navigation_menu_tags?Boolean

Returns:

  • (Boolean)


285
286
287
288
289
# File 'app/serializers/site_serializer.rb', line 285

def include_anonymous_default_navigation_menu_tags?
  scope.anonymous? && !SiteSetting.legacy_navigation_menu? && SiteSetting.tagging_enabled &&
    SiteSetting.default_navigation_menu_tags.present? &&
    anonymous_default_navigation_menu_tags.present?
end

#include_anonymous_sidebar_sections?Boolean

Returns:

  • (Boolean)


299
300
301
# File 'app/serializers/site_serializer.rb', line 299

def include_anonymous_sidebar_sections?
  scope.anonymous?
end

#include_can_associate_groups?Boolean

Returns:

  • (Boolean)


176
177
178
# File 'app/serializers/site_serializer.rb', line 176

def include_can_associate_groups?
  scope.is_admin?
end

#include_denied_emojis?Boolean

Returns:

  • (Boolean)


315
316
317
# File 'app/serializers/site_serializer.rb', line 315

def include_denied_emojis?
  denied_emojis.present?
end

#include_navigation_menu_site_top_tags?Boolean

Returns:

  • (Boolean)


270
271
272
# File 'app/serializers/site_serializer.rb', line 270

def include_navigation_menu_site_top_tags?
  !SiteSetting.legacy_navigation_menu? && SiteSetting.tagging_enabled
end

#include_privacy_policy_url?Boolean

Returns:

  • (Boolean)


331
332
333
# File 'app/serializers/site_serializer.rb', line 331

def include_privacy_policy_url?
  privacy_policy_url.present?
end

#include_shared_drafts_category_id?Boolean

Returns:

  • (Boolean)


224
225
226
# File 'app/serializers/site_serializer.rb', line 224

def include_shared_drafts_category_id?
  scope.can_see_shared_draft? && SiteSetting.shared_drafts_enabled?
end

#include_tags_filter_regexp?Boolean

Returns:

  • (Boolean)


180
181
182
# File 'app/serializers/site_serializer.rb', line 180

def include_tags_filter_regexp?
  SiteSetting.tagging_enabled
end

#include_top_tags?Boolean

Returns:

  • (Boolean)


188
189
190
# File 'app/serializers/site_serializer.rb', line 188

def include_top_tags?
  Tag.include_tags?
end

Returns:

  • (Boolean)


204
205
206
# File 'app/serializers/site_serializer.rb', line 204

def include_topic_featured_link_allowed_category_ids?
  SiteSetting.topic_featured_link_enabled
end

#include_tos_url?Boolean

Returns:

  • (Boolean)


323
324
325
# File 'app/serializers/site_serializer.rb', line 323

def include_tos_url?
  tos_url.present?
end

#include_user_tips?Boolean

Returns:

  • (Boolean)


132
133
134
# File 'app/serializers/site_serializer.rb', line 132

def include_user_tips?
  SiteSetting.enable_user_tips
end

#include_whispers_allowed_groups_names?Boolean

Returns:

  • (Boolean)


307
308
309
# File 'app/serializers/site_serializer.rb', line 307

def include_whispers_allowed_groups_names?
  scope.can_see_whispers?
end

#include_wizard_required?Boolean

Returns:

  • (Boolean)


200
201
202
# File 'app/serializers/site_serializer.rb', line 200

def include_wizard_required?
  Wizard.user_requires_completion?(scope.user)
end

#markdown_additional_optionsObject



240
241
242
# File 'app/serializers/site_serializer.rb', line 240

def markdown_additional_options
  Site.markdown_additional_options
end


258
259
260
261
262
263
264
265
266
267
268
# File 'app/serializers/site_serializer.rb', line 258

def navigation_menu_site_top_tags
  if top_tags.present?
    tag_names = top_tags[0...SIDEBAR_TOP_TAGS_TO_SHOW]
    serialized = serialize_tags(Tag.where(name: tag_names))

    # Ensures order of top tags is preserved
    serialized.sort_by { |tag| tag_names.index(tag[:name]) }
  else
    []
  end
end

#periodsObject



140
141
142
# File 'app/serializers/site_serializer.rb', line 140

def periods
  TopTopic.periods.map(&:to_s)
end

#post_action_typesObject



106
107
108
109
110
111
# File 'app/serializers/site_serializer.rb', line 106

def post_action_types
  cache_fragment("post_action_types_#{I18n.locale}") do
    types = ordered_flags(PostActionType.types.values)
    ActiveModel::ArraySerializer.new(types).as_json
  end
end

#post_typesObject



124
125
126
# File 'app/serializers/site_serializer.rb', line 124

def post_types
  Post.types
end

#privacy_policy_urlObject



327
328
329
# File 'app/serializers/site_serializer.rb', line 327

def privacy_policy_url
  Discourse.privacy_policy_url
end

#shared_drafts_category_idObject



220
221
222
# File 'app/serializers/site_serializer.rb', line 220

def shared_drafts_category_id
  SiteSetting.shared_drafts_category.to_i
end

#tags_filter_regexpObject



184
185
186
# File 'app/serializers/site_serializer.rb', line 184

def tags_filter_regexp
  DiscourseTagging::TAGS_FILTER_REGEXP.source
end

#top_menu_itemsObject



144
145
146
# File 'app/serializers/site_serializer.rb', line 144

def top_menu_items
  Discourse.top_menu_items.map(&:to_s)
end

#top_tagsObject



192
193
194
# File 'app/serializers/site_serializer.rb', line 192

def top_tags
  @top_tags ||= Tag.top_tags(guardian: scope)
end


208
209
210
# File 'app/serializers/site_serializer.rb', line 208

def topic_featured_link_allowed_category_ids
  scope.topic_featured_link_allowed_category_ids
end

#topic_flag_typesObject



113
114
115
116
117
118
# File 'app/serializers/site_serializer.rb', line 113

def topic_flag_types
  cache_fragment("post_action_flag_types_#{I18n.locale}") do
    types = ordered_flags(PostActionType.topic_flag_types.values)
    ActiveModel::ArraySerializer.new(types, each_serializer: TopicFlagTypeSerializer).as_json
  end
end

#tos_urlObject



319
320
321
# File 'app/serializers/site_serializer.rb', line 319

def tos_url
  Discourse.tos_url
end

#uncategorized_category_idObject



152
153
154
# File 'app/serializers/site_serializer.rb', line 152

def uncategorized_category_id
  SiteSetting.uncategorized_category_id
end

#user_color_schemesObject



73
74
75
76
77
78
79
80
81
# File 'app/serializers/site_serializer.rb', line 73

def user_color_schemes
  cache_fragment("user_color_schemes") do
    schemes = ColorScheme.includes(:color_scheme_colors).where("user_selectable").order(:name)
    ActiveModel::ArraySerializer.new(
      schemes,
      each_serializer: ColorSchemeSelectableSerializer,
    ).as_json
  end
end

#user_field_max_lengthObject



156
157
158
# File 'app/serializers/site_serializer.rb', line 156

def user_field_max_length
  UserField.max_length
end

#user_themesObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/serializers/site_serializer.rb', line 55

def user_themes
  cache_fragment("user_themes") do
    Theme
      .where("id = :default OR user_selectable", default: SiteSetting.default_theme_id)
      .order("lower(name)")
      .pluck(:id, :name, :color_scheme_id)
      .map do |id, n, cs|
        {
          theme_id: id,
          name: n,
          default: id == SiteSetting.default_theme_id,
          color_scheme_id: cs,
        }
      end
      .as_json
  end
end

#user_tipsObject



128
129
130
# File 'app/serializers/site_serializer.rb', line 128

def user_tips
  User.user_tips
end


232
233
234
# File 'app/serializers/site_serializer.rb', line 232

def watched_words_link
  WordWatcher.word_matcher_regexps(:link, engine: :js)
end

#watched_words_replaceObject



228
229
230
# File 'app/serializers/site_serializer.rb', line 228

def watched_words_replace
  WordWatcher.word_matcher_regexps(:replace, engine: :js)
end

#whispers_allowed_groups_namesObject



303
304
305
# File 'app/serializers/site_serializer.rb', line 303

def whispers_allowed_groups_names
  Group.where(id: SiteSetting.whispers_allowed_groups_map).pluck(:name)
end

#wizard_requiredObject



196
197
198
# File 'app/serializers/site_serializer.rb', line 196

def wizard_required
  true
end