Class: SiteSerializer
- Inherits:
-
ApplicationSerializer
- Object
- ActiveModel::Serializer
- ApplicationSerializer
- SiteSerializer
- Includes:
- NavigationMenuTagsMixin
- Defined in:
- app/serializers/site_serializer.rb
Constant Summary collapse
- SIDEBAR_TOP_TAGS_TO_SHOW =
5
Instance Method Summary collapse
- #anonymous_default_navigation_menu_tags ⇒ Object
- #anonymous_top_menu_items ⇒ Object
- #can_associate_groups ⇒ Object
- #can_create_tag ⇒ Object
- #can_tag_pms ⇒ Object
- #can_tag_topics ⇒ Object
- #categories ⇒ Object
- #censored_regexp ⇒ Object
- #custom_emoji_translation ⇒ Object
- #default_archetype ⇒ Object
- #default_dark_color_scheme ⇒ Object
- #denied_emojis ⇒ Object
- #filters ⇒ Object
- #groups ⇒ Object
- #hashtag_configurations ⇒ Object
- #hashtag_icons ⇒ Object
- #include_anonymous_default_navigation_menu_tags? ⇒ Boolean
- #include_anonymous_sidebar_sections? ⇒ Boolean
- #include_can_associate_groups? ⇒ Boolean
- #include_categories? ⇒ Boolean
- #include_denied_emojis? ⇒ Boolean
- #include_lazy_load_categories? ⇒ Boolean
- #include_navigation_menu_site_top_tags? ⇒ Boolean
- #include_privacy_policy_url? ⇒ Boolean
- #include_shared_drafts_category_id? ⇒ Boolean
- #include_system_user_avatar_template? ⇒ Boolean
- #include_tags_filter_regexp? ⇒ Boolean
- #include_top_tags? ⇒ Boolean
- #include_topic_featured_link_allowed_category_ids? ⇒ Boolean
- #include_tos_url? ⇒ Boolean
- #include_user_tips? ⇒ Boolean
- #include_valid_flag_applies_to_types? ⇒ Boolean
- #include_whispers_allowed_groups_names? ⇒ Boolean
- #include_wizard_required? ⇒ Boolean
- #lazy_load_categories ⇒ Object
- #markdown_additional_options ⇒ Object
- #navigation_menu_site_top_tags ⇒ Object
- #periods ⇒ Object
- #post_action_types ⇒ Object
- #post_types ⇒ Object
- #privacy_policy_url ⇒ Object
- #shared_drafts_category_id ⇒ Object
- #system_user_avatar_template ⇒ Object
- #tags_filter_regexp ⇒ Object
- #top_menu_items ⇒ Object
- #top_tags ⇒ Object
- #topic_featured_link_allowed_category_ids ⇒ Object
- #topic_flag_types ⇒ Object
- #tos_url ⇒ Object
- #uncategorized_category_id ⇒ Object
- #user_color_schemes ⇒ Object
- #user_field_max_length ⇒ Object
- #user_themes ⇒ Object
- #user_tips ⇒ Object
- #valid_flag_applies_to_types ⇒ Object
- #watched_words_link ⇒ Object
- #watched_words_replace ⇒ Object
- #whispers_allowed_groups_names ⇒ Object
- #wizard_required ⇒ Object
Methods included from NavigationMenuTagsMixin
Methods inherited from ApplicationSerializer
expire_cache_fragment!, fragment_cache
Methods inherited from ActiveModel::Serializer
Instance Method Details
#anonymous_default_navigation_menu_tags ⇒ Object
307 308 309 310 311 312 313 314 315 316 |
# File 'app/serializers/site_serializer.rb', line 307 def @anonymous_default_navigation_menu_tags ||= begin tag_names = SiteSetting..split("|") - DiscourseTagging.hidden_tag_names(scope) (Tag.where(name: tag_names).order(:name)) end end |
#anonymous_top_menu_items ⇒ Object
181 182 183 |
# File 'app/serializers/site_serializer.rb', line 181 def Discourse..map(&:to_s) end |
#can_associate_groups ⇒ Object
205 206 207 |
# File 'app/serializers/site_serializer.rb', line 205 def can_associate_groups scope.can_associate_groups? end |
#can_create_tag ⇒ Object
193 194 195 |
# File 'app/serializers/site_serializer.rb', line 193 def can_create_tag scope.can_create_tag? end |
#can_tag_pms ⇒ Object
201 202 203 |
# File 'app/serializers/site_serializer.rb', line 201 def can_tag_pms scope.can_tag_pms? end |
#can_tag_topics ⇒ Object
197 198 199 |
# File 'app/serializers/site_serializer.rb', line 197 def can_tag_topics scope.can_tag_topics? end |
#categories ⇒ Object
269 270 271 |
# File 'app/serializers/site_serializer.rb', line 269 def categories object.categories.map { |c| c.to_h } end |
#censored_regexp ⇒ Object
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_translation ⇒ Object
249 250 251 |
# File 'app/serializers/site_serializer.rb', line 249 def custom_emoji_translation Plugin::CustomEmoji.translations end |
#default_archetype ⇒ Object
153 154 155 |
# File 'app/serializers/site_serializer.rb', line 153 def default_archetype Archetype.default end |
#default_dark_color_scheme ⇒ Object
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_emojis ⇒ Object
336 337 338 |
# File 'app/serializers/site_serializer.rb', line 336 def denied_emojis @denied_emojis ||= Emoji.denied end |
#filters ⇒ Object
169 170 171 |
# File 'app/serializers/site_serializer.rb', line 169 def filters Discourse.filters.map(&:to_s) end |
#groups ⇒ Object
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_configurations ⇒ Object
281 282 283 |
# File 'app/serializers/site_serializer.rb', line 281 def hashtag_configurations HashtagAutocompleteService.contexts_with_ordered_types end |
#hashtag_icons ⇒ Object
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
318 319 320 321 322 |
# File 'app/serializers/site_serializer.rb', line 318 def scope.anonymous? && SiteSetting.tagging_enabled && SiteSetting..present? && .present? end |
#include_anonymous_sidebar_sections? ⇒ Boolean
324 325 326 |
# File 'app/serializers/site_serializer.rb', line 324 def scope.anonymous? end |
#include_can_associate_groups? ⇒ Boolean
209 210 211 |
# File 'app/serializers/site_serializer.rb', line 209 def include_can_associate_groups? scope.is_admin? end |
#include_categories? ⇒ Boolean
273 274 275 |
# File 'app/serializers/site_serializer.rb', line 273 def include_categories? object.categories.present? end |
#include_denied_emojis? ⇒ 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
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
303 304 305 |
# File 'app/serializers/site_serializer.rb', line 303 def SiteSetting.tagging_enabled end |
#include_privacy_policy_url? ⇒ 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
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
364 365 366 |
# File 'app/serializers/site_serializer.rb', line 364 def include_system_user_avatar_template? SiteSetting. end |
#include_tags_filter_regexp? ⇒ Boolean
213 214 215 |
# File 'app/serializers/site_serializer.rb', line 213 def SiteSetting.tagging_enabled end |
#include_top_tags? ⇒ Boolean
221 222 223 |
# File 'app/serializers/site_serializer.rb', line 221 def Tag. end |
#include_topic_featured_link_allowed_category_ids? ⇒ 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
348 349 350 |
# File 'app/serializers/site_serializer.rb', line 348 def include_tos_url? tos_url.present? end |
#include_user_tips? ⇒ 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
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
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
233 234 235 |
# File 'app/serializers/site_serializer.rb', line 233 def include_wizard_required? Wizard.user_requires_completion?(scope.user) end |
#lazy_load_categories ⇒ Object
368 369 370 |
# File 'app/serializers/site_serializer.rb', line 368 def lazy_load_categories true end |
#markdown_additional_options ⇒ Object
277 278 279 |
# File 'app/serializers/site_serializer.rb', line 277 def Site. end |
#navigation_menu_site_top_tags ⇒ Object
291 292 293 294 295 296 297 298 299 300 301 |
# File 'app/serializers/site_serializer.rb', line 291 def if .present? tag_names = [0...SIDEBAR_TOP_TAGS_TO_SHOW] serialized = (Tag.where(name: tag_names)) # Ensures order of top tags is preserved serialized.sort_by { |tag| tag_names.index(tag[:name]) } else [] end end |
#periods ⇒ Object
173 174 175 |
# File 'app/serializers/site_serializer.rb', line 173 def periods TopTopic.periods.map(&:to_s) end |
#post_action_types ⇒ Object
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_types ⇒ Object
157 158 159 |
# File 'app/serializers/site_serializer.rb', line 157 def post_types Post.types end |
#privacy_policy_url ⇒ Object
352 353 354 |
# File 'app/serializers/site_serializer.rb', line 352 def privacy_policy_url Discourse.privacy_policy_url end |
#shared_drafts_category_id ⇒ Object
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_template ⇒ Object
360 361 362 |
# File 'app/serializers/site_serializer.rb', line 360 def system_user_avatar_template Discourse.system_user.avatar_template end |
#tags_filter_regexp ⇒ Object
217 218 219 |
# File 'app/serializers/site_serializer.rb', line 217 def DiscourseTagging::TAGS_FILTER_REGEXP.source end |
#top_menu_items ⇒ Object
177 178 179 |
# File 'app/serializers/site_serializer.rb', line 177 def Discourse..map(&:to_s) end |
#top_tags ⇒ Object
225 226 227 |
# File 'app/serializers/site_serializer.rb', line 225 def @top_tags ||= Tag.(guardian: scope) end |
#topic_featured_link_allowed_category_ids ⇒ Object
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_types ⇒ Object
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_url ⇒ Object
344 345 346 |
# File 'app/serializers/site_serializer.rb', line 344 def tos_url Discourse.tos_url end |
#uncategorized_category_id ⇒ Object
185 186 187 |
# File 'app/serializers/site_serializer.rb', line 185 def uncategorized_category_id SiteSetting.uncategorized_category_id end |
#user_color_schemes ⇒ Object
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_length ⇒ Object
189 190 191 |
# File 'app/serializers/site_serializer.rb', line 189 def user_field_max_length UserField.max_length end |
#user_themes ⇒ Object
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_tips ⇒ Object
161 162 163 |
# File 'app/serializers/site_serializer.rb', line 161 def user_tips User.user_tips end |
#valid_flag_applies_to_types ⇒ Object
376 377 378 |
# File 'app/serializers/site_serializer.rb', line 376 def valid_flag_applies_to_types Flag.valid_applies_to_types end |
#watched_words_link ⇒ Object
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_replace ⇒ Object
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_names ⇒ Object
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_required ⇒ Object
229 230 231 |
# File 'app/serializers/site_serializer.rb', line 229 def wizard_required true end |