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



307
308
309
310
311
312
313
314
315
316
# File 'app/serializers/site_serializer.rb', line 307

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).order(:name))
    end
end

#anonymous_top_menu_itemsObject



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

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

#can_associate_groupsObject



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

def can_associate_groups
  scope.can_associate_groups?
end

#can_create_tagObject



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

def can_create_tag
  scope.can_create_tag?
end

#can_tag_pmsObject



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

def can_tag_pms
  scope.can_tag_pms?
end

#can_tag_topicsObject



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

def can_tag_topics
  scope.can_tag_topics?
end

#categoriesObject



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

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

#censored_regexpObject



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

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

#custom_emoji_translationObject



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

def custom_emoji_translation
  Plugin::CustomEmoji.translations
end

#default_archetypeObject



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

def default_archetype
  Archetype.default
end

#default_dark_color_schemeObject



86
87
88
89
90
91
# File 'app/serializers/site_serializer.rb', line 86

def default_dark_color_scheme
  ColorSchemeSerializer.new(
    ColorScheme.find_by_id(SiteSetting.default_dark_mode_color_scheme_id),
    root: false,
  ).as_json
end

#denied_emojisObject



336
337
338
# File 'app/serializers/site_serializer.rb', line 336

def denied_emojis
  @denied_emojis ||= Emoji.denied
end

#filtersObject



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

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

#groupsObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/serializers/site_serializer.rb', line 93

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



281
282
283
# File 'app/serializers/site_serializer.rb', line 281

def hashtag_configurations
  HashtagAutocompleteService.contexts_with_ordered_types
end

#hashtag_iconsObject



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

def hashtag_icons
  HashtagAutocompleteService.data_source_icon_map
end

#include_anonymous_default_navigation_menu_tags?Boolean

Returns:

  • (Boolean)


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

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

#include_anonymous_sidebar_sections?Boolean

Returns:

  • (Boolean)


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

def include_anonymous_sidebar_sections?
  scope.anonymous?
end

#include_can_associate_groups?Boolean

Returns:

  • (Boolean)


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

def include_can_associate_groups?
  scope.is_admin?
end

#include_categories?Boolean

Returns:

  • (Boolean)


273
274
275
# File 'app/serializers/site_serializer.rb', line 273

def include_categories?
  object.categories.present?
end

#include_denied_emojis?Boolean

Returns:

  • (Boolean)


340
341
342
# File 'app/serializers/site_serializer.rb', line 340

def include_denied_emojis?
  denied_emojis.present?
end

#include_lazy_load_categories?Boolean

Returns:

  • (Boolean)


372
373
374
# File 'app/serializers/site_serializer.rb', line 372

def include_lazy_load_categories?
  scope.can_lazy_load_categories?
end

#include_navigation_menu_site_top_tags?Boolean

Returns:

  • (Boolean)


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

def include_navigation_menu_site_top_tags?
  SiteSetting.tagging_enabled
end

#include_privacy_policy_url?Boolean

Returns:

  • (Boolean)


356
357
358
# File 'app/serializers/site_serializer.rb', line 356

def include_privacy_policy_url?
  privacy_policy_url.present?
end

#include_shared_drafts_category_id?Boolean

Returns:

  • (Boolean)


257
258
259
# File 'app/serializers/site_serializer.rb', line 257

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

#include_system_user_avatar_template?Boolean

Returns:

  • (Boolean)


364
365
366
# File 'app/serializers/site_serializer.rb', line 364

def include_system_user_avatar_template?
  SiteSetting.show_user_menu_avatars
end

#include_tags_filter_regexp?Boolean

Returns:

  • (Boolean)


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

def include_tags_filter_regexp?
  SiteSetting.tagging_enabled
end

#include_top_tags?Boolean

Returns:

  • (Boolean)


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

def include_top_tags?
  Tag.include_tags?
end

Returns:

  • (Boolean)


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

def include_topic_featured_link_allowed_category_ids?
  SiteSetting.topic_featured_link_enabled
end

#include_tos_url?Boolean

Returns:

  • (Boolean)


348
349
350
# File 'app/serializers/site_serializer.rb', line 348

def include_tos_url?
  tos_url.present?
end

#include_user_tips?Boolean

Returns:

  • (Boolean)


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

def include_user_tips?
  SiteSetting.enable_user_tips
end

#include_valid_flag_applies_to_types?Boolean

Returns:

  • (Boolean)


380
381
382
# File 'app/serializers/site_serializer.rb', line 380

def include_valid_flag_applies_to_types?
  scope.is_admin?
end

#include_whispers_allowed_groups_names?Boolean

Returns:

  • (Boolean)


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

def include_whispers_allowed_groups_names?
  scope.can_see_whispers?
end

#include_wizard_required?Boolean

Returns:

  • (Boolean)


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

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

#lazy_load_categoriesObject



368
369
370
# File 'app/serializers/site_serializer.rb', line 368

def lazy_load_categories
  true
end

#markdown_additional_optionsObject



277
278
279
# File 'app/serializers/site_serializer.rb', line 277

def markdown_additional_options
  Site.markdown_additional_options
end


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

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



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

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

#post_action_typesObject



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/serializers/site_serializer.rb', line 112

def post_action_types
  Discourse
    .cache
    .fetch("post_action_types_#{I18n.locale}") do
      if PostActionType.overridden_by_plugin_or_skipped_db?
        types = ordered_flags(PostActionType.types.values)
        ActiveModel::ArraySerializer.new(types).as_json
      else
        ActiveModel::ArraySerializer.new(
          Flag.unscoped.order(:position).where(score_type: false).all,
          each_serializer: FlagSerializer,
          target: :post_action,
          used_flag_ids: Flag.used_flag_ids,
        ).as_json
      end
    end
end

#post_typesObject



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

def post_types
  Post.types
end

#privacy_policy_urlObject



352
353
354
# File 'app/serializers/site_serializer.rb', line 352

def privacy_policy_url
  Discourse.privacy_policy_url
end

#shared_drafts_category_idObject



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

def shared_drafts_category_id
  SiteSetting.shared_drafts_category.to_i
end

#system_user_avatar_templateObject



360
361
362
# File 'app/serializers/site_serializer.rb', line 360

def system_user_avatar_template
  Discourse.system_user.avatar_template
end

#tags_filter_regexpObject



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

def tags_filter_regexp
  DiscourseTagging::TAGS_FILTER_REGEXP.source
end

#top_menu_itemsObject



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

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

#top_tagsObject



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

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


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

def topic_featured_link_allowed_category_ids
  scope.topic_featured_link_allowed_category_ids
end

#topic_flag_typesObject



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'app/serializers/site_serializer.rb', line 130

def topic_flag_types
  Discourse
    .cache
    .fetch("post_action_flag_types_#{I18n.locale}") do
      if PostActionType.overridden_by_plugin_or_skipped_db?
        types = ordered_flags(PostActionType.topic_flag_types.values)
        ActiveModel::ArraySerializer.new(types, each_serializer: TopicFlagTypeSerializer).as_json
      else
        ActiveModel::ArraySerializer.new(
          Flag
            .unscoped
            .where("'Topic' = ANY(applies_to)")
            .where(score_type: false)
            .order(:position)
            .all,
          each_serializer: FlagSerializer,
          target: :topic_flag,
          used_flag_ids: Flag.used_flag_ids,
        ).as_json
      end
    end
end

#tos_urlObject



344
345
346
# File 'app/serializers/site_serializer.rb', line 344

def tos_url
  Discourse.tos_url
end

#uncategorized_category_idObject



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

def uncategorized_category_id
  SiteSetting.uncategorized_category_id
end

#user_color_schemesObject



76
77
78
79
80
81
82
83
84
# File 'app/serializers/site_serializer.rb', line 76

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



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

def user_field_max_length
  UserField.max_length
end

#user_themesObject



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

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



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

def user_tips
  User.user_tips
end

#valid_flag_applies_to_typesObject



376
377
378
# File 'app/serializers/site_serializer.rb', line 376

def valid_flag_applies_to_types
  Flag.valid_applies_to_types
end


265
266
267
# File 'app/serializers/site_serializer.rb', line 265

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

#watched_words_replaceObject



261
262
263
# File 'app/serializers/site_serializer.rb', line 261

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

#whispers_allowed_groups_namesObject



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

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

#wizard_requiredObject



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

def wizard_required
  true
end