Class: UserSerializer

Inherits:
UserCardSerializer show all
Includes:
UserSidebarMixin, UserTagNotificationsMixin
Defined in:
app/serializers/user_serializer.rb

Direct Known Subclasses

WebHookUserSerializer

Instance Attribute Summary

Attributes inherited from UserCardSerializer

#topic_post_count

Instance Method Summary collapse

Methods included from UserSidebarMixin

#display_sidebar_tags, #include_display_sidebar_tags?, #include_sidebar_category_ids?, #include_sidebar_sections?, #include_sidebar_tags?, #sidebar_category_ids, #sidebar_sections, #sidebar_tags

Methods included from NavigationMenuTagsMixin

#serialize_tags

Methods included from UserTagNotificationsMixin

#muted_tags, #regular_tags, #tag_user_notification_levels, #tags_with_notification_level, #tracked_tags, #watched_tags, #watching_first_post_tags

Methods inherited from UserCardSerializer

#bio_excerpt, #can_ignore_user, #can_mute_user, #can_send_private_message_to_user, #can_send_private_messages, #card_background_upload_url, #custom_fields, #featured_topic, #flair_bg_color, #flair_color, #flair_name, #flair_url, #ignored, #include_email?, #include_pending_posts_count?, #include_status?, #include_suspend_reason?, #include_suspended_till?, #include_timezone?, #include_topic_post_count?, #include_user_fields?, #location, #muted, #primary_group_name, private_attributes, #recent_time_read, staff_attributes, #status, #time_read, #timezone, untrusted_attributes, #user_fields, #website, #website_name

Methods inherited from BasicUserSerializer

#avatar_template, #categories_with_notification_level, #category_user_notification_levels, #include_name?, #name, #user, #user_is_current_user

Methods inherited from ApplicationSerializer

expire_cache_fragment!, fragment_cache

Methods inherited from ActiveModel::Serializer

#include!

Instance Method Details

#allowed_pm_usernamesObject



246
247
248
# File 'app/serializers/user_serializer.rb', line 246

def allowed_pm_usernames
  AllowedPmUser.where(user_id: object.id).joins(:allowed_pm_user).pluck(:username)
end

#bio_cookedObject



171
172
173
# File 'app/serializers/user_serializer.rb', line 171

def bio_cooked
  object..bio_processed
end

#bio_rawObject



167
168
169
# File 'app/serializers/user_serializer.rb', line 167

def bio_raw
  object..bio_raw
end

#can_be_deletedObject



207
208
209
# File 'app/serializers/user_serializer.rb', line 207

def can_be_deleted
  scope.can_delete_user?(object)
end

#can_change_bioObject



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

def can_change_bio
  !(SiteSetting.enable_discourse_connect && SiteSetting.discourse_connect_overrides_bio)
end

#can_change_locationObject



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

def can_change_location
  !(SiteSetting.enable_discourse_connect && SiteSetting.discourse_connect_overrides_location)
end

#can_change_tracking_preferencesObject



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

def can_change_tracking_preferences
  scope.can_change_tracking_preferences?(object)
end

#can_change_websiteObject



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

def can_change_website
  !(SiteSetting.enable_discourse_connect && SiteSetting.discourse_connect_overrides_website)
end

#can_delete_all_postsObject



211
212
213
# File 'app/serializers/user_serializer.rb', line 211

def can_delete_all_posts
  scope.can_delete_all_posts?(object)
end

#can_editObject



175
176
177
# File 'app/serializers/user_serializer.rb', line 175

def can_edit
  scope.can_edit?(object)
end

#can_edit_emailObject



183
184
185
# File 'app/serializers/user_serializer.rb', line 183

def can_edit_email
  scope.can_edit_email?(object)
end

#can_edit_nameObject



187
188
189
# File 'app/serializers/user_serializer.rb', line 187

def can_edit_name
  scope.can_edit_name?(object)
end

#can_edit_usernameObject



179
180
181
# File 'app/serializers/user_serializer.rb', line 179

def can_edit_username
  scope.can_edit_username?(object)
end

#can_upload_profile_headerObject



191
192
193
# File 'app/serializers/user_serializer.rb', line 191

def can_upload_profile_header
  scope.can_upload_profile_header?(object)
end

#can_upload_user_card_backgroundObject



195
196
197
# File 'app/serializers/user_serializer.rb', line 195

def can_upload_user_card_background
  scope.can_upload_user_card_background?(object)
end

#custom_avatar_templateObject



286
287
288
# File 'app/serializers/user_serializer.rb', line 286

def custom_avatar_template
  User.avatar_template(object.username, object.user_avatar.custom_upload_id)
end

#custom_avatar_upload_idObject



278
279
280
# File 'app/serializers/user_serializer.rb', line 278

def custom_avatar_upload_id
  object.user_avatar.custom_upload_id
end

#gravatar_avatar_templateObject



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

def gravatar_avatar_template
  User.avatar_template(object.username, object.user_avatar.gravatar_upload_id)
end

#gravatar_avatar_upload_idObject



262
263
264
# File 'app/serializers/user_serializer.rb', line 262

def gravatar_avatar_upload_id
  object.user_avatar.gravatar_upload_id
end

#group_usersObject



88
89
90
# File 'app/serializers/user_serializer.rb', line 88

def group_users
  object.group_users.order(:group_id)
end

#groupsObject



84
85
86
# File 'app/serializers/user_serializer.rb', line 84

def groups
  object.groups.order(:id).visible_groups(scope.user).members_visible_groups(scope.user)
end

#has_title_badgesObject



290
291
292
# File 'app/serializers/user_serializer.rb', line 290

def has_title_badges
  object.badges.where(allow_title: true).exists?
end

#ignored_usernamesObject



242
243
244
# File 'app/serializers/user_serializer.rb', line 242

def ignored_usernames
  IgnoredUser.where(user_id: object.id).joins(:ignored_user).pluck(:username)
end

#include_associated_accounts?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'app/serializers/user_serializer.rb', line 96

def include_associated_accounts?
  user_is_current_user
end

#include_custom_avatar_template?Boolean

Returns:

  • (Boolean)


282
283
284
# File 'app/serializers/user_serializer.rb', line 282

def include_custom_avatar_template?
  include_custom_avatar_upload_id?
end

#include_custom_avatar_upload_id?Boolean

Returns:

  • (Boolean)


274
275
276
# File 'app/serializers/user_serializer.rb', line 274

def include_custom_avatar_upload_id?
  object.user_avatar&.custom_upload_id
end

#include_gravatar_avatar_template?Boolean

Returns:

  • (Boolean)


266
267
268
# File 'app/serializers/user_serializer.rb', line 266

def include_gravatar_avatar_template?
  include_gravatar_avatar_upload_id?
end

#include_gravatar_avatar_upload_id?Boolean

Returns:

  • (Boolean)


258
259
260
# File 'app/serializers/user_serializer.rb', line 258

def include_gravatar_avatar_upload_id?
  object.user_avatar&.gravatar_upload_id
end

#include_group_users?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'app/serializers/user_serializer.rb', line 92

def include_group_users?
  user_is_current_user || scope.is_admin?
end

#include_second_factor_backup_enabled?Boolean

Returns:

  • (Boolean)


108
109
110
# File 'app/serializers/user_serializer.rb', line 108

def include_second_factor_backup_enabled?
  user_is_current_user
end

#include_second_factor_enabled?Boolean

Returns:

  • (Boolean)


100
101
102
# File 'app/serializers/user_serializer.rb', line 100

def include_second_factor_enabled?
  user_is_current_user || scope.is_admin?
end

#include_second_factor_remaining_backup_codes?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'app/serializers/user_serializer.rb', line 116

def include_second_factor_remaining_backup_codes?
  user_is_current_user && object.backup_codes_enabled?
end

#include_user_option?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'app/serializers/user_serializer.rb', line 30

def include_user_option?
  can_edit
end

#mailing_list_posts_per_dayObject



79
80
81
82
# File 'app/serializers/user_serializer.rb', line 79

def mailing_list_posts_per_day
  val = Post.estimate_posts_per_day
  [val, SiteSetting.max_emails_per_day_per_user].min
end

#muted_category_idsObject

PRIVATE ATTRIBUTES



218
219
220
# File 'app/serializers/user_serializer.rb', line 218

def muted_category_ids
  categories_with_notification_level(:muted)
end

#muted_usernamesObject



238
239
240
# File 'app/serializers/user_serializer.rb', line 238

def muted_usernames
  MutedUser.where(user_id: object.id).joins(:muted_user).pluck(:username)
end

#pending_countObject



294
295
296
# File 'app/serializers/user_serializer.rb', line 294

def pending_count
  0
end

#post_countObject

STAFF ATTRIBUTES



203
204
205
# File 'app/serializers/user_serializer.rb', line 203

def post_count
  object.user_stat.try(:post_count)
end

#profile_background_upload_urlObject



302
303
304
# File 'app/serializers/user_serializer.rb', line 302

def profile_background_upload_url
  object.profile_background_upload&.url
end

#profile_view_countObject



298
299
300
# File 'app/serializers/user_serializer.rb', line 298

def profile_view_count
  object..views
end

#regular_category_idsObject



222
223
224
# File 'app/serializers/user_serializer.rb', line 222

def regular_category_ids
  categories_with_notification_level(:regular)
end

#second_factor_backup_enabledObject



112
113
114
# File 'app/serializers/user_serializer.rb', line 112

def second_factor_backup_enabled
  object.backup_codes_enabled?
end

#second_factor_enabledObject



104
105
106
# File 'app/serializers/user_serializer.rb', line 104

def second_factor_enabled
  object.totp_enabled? || object.security_keys_enabled?
end

#second_factor_remaining_backup_codesObject



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

def second_factor_remaining_backup_codes
  object.remaining_backup_codes
end

#system_avatar_templateObject



254
255
256
# File 'app/serializers/user_serializer.rb', line 254

def system_avatar_template
  User.system_avatar_template(object.username)
end

#system_avatar_upload_idObject



250
251
252
# File 'app/serializers/user_serializer.rb', line 250

def system_avatar_upload_id
  # should be left blank
end

#tracked_category_idsObject



226
227
228
# File 'app/serializers/user_serializer.rb', line 226

def tracked_category_ids
  categories_with_notification_level(:tracking)
end

#use_logo_small_as_avatarObject



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

def use_logo_small_as_avatar
  object.is_system_user? && SiteSetting.logo_small &&
    SiteSetting.use_site_small_logo_as_system_avatar
end

#user_api_keysObject



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'app/serializers/user_serializer.rb', line 140

def user_api_keys
  keys =
    object
      .user_api_keys
      .where(revoked_at: nil)
      .map do |k|
        {
          id: k.id,
          application_name: k.application_name,
          scopes: k.scopes.map { |s| I18n.t("user_api_key.scopes.#{s.name}") },
          created_at: k.created_at,
          last_used_at: k.last_used_at,
        }
      end

  keys.sort! { |a, b| a[:last_used_at].to_time <=> b[:last_used_at].to_time }
  keys.length > 0 ? keys : nil
end

#user_auth_tokensObject



159
160
161
162
163
164
165
# File 'app/serializers/user_serializer.rb', line 159

def user_auth_tokens
  ActiveModel::ArraySerializer.new(
    object.user_auth_tokens,
    each_serializer: UserAuthTokenSerializer,
    scope: scope,
  )
end

#user_notification_scheduleObject

ATTRIBUTES



75
76
77
# File 'app/serializers/user_serializer.rb', line 75

def user_notification_schedule
  object.user_notification_schedule || UserNotificationSchedule::DEFAULT
end

#watched_category_idsObject



230
231
232
# File 'app/serializers/user_serializer.rb', line 230

def watched_category_ids
  categories_with_notification_level(:watching)
end

#watched_first_post_category_idsObject



234
235
236
# File 'app/serializers/user_serializer.rb', line 234

def 
  categories_with_notification_level(:watching_first_post)
end