2013-02-05 14:16:51 -05:00
class UserSerializer < BasicUserSerializer
2013-02-07 16:45:24 +01:00
2015-03-24 12:33:17 -04:00
attr_accessor :omit_stats ,
:topic_post_count
2015-02-24 13:31:23 +11:00
2014-06-30 22:46:47 +02:00
def self . staff_attributes ( * attrs )
attributes ( * attrs )
attrs . each do | attr |
define_method " include_ #{ attr } ? " do
scope . is_staff?
end
end
end
def self . private_attributes ( * attrs )
attributes ( * attrs )
attrs . each do | attr |
define_method " include_ #{ attr } ? " do
can_edit
end
end
end
2014-11-26 19:20:03 +01:00
# attributes that are hidden for TL0 users when seen by anonymous
def self . untrusted_attributes ( * attrs )
attrs . each do | attr |
method_name = " include_ #{ attr } ? "
define_method ( method_name ) do
2014-11-27 19:51:13 +01:00
return false if scope . restrict_user_fields? ( object )
2014-11-26 19:20:03 +01:00
send ( attr ) . present?
end
end
end
2013-02-07 16:45:24 +01:00
attributes :name ,
:email ,
:last_posted_at ,
:last_seen_at ,
2013-02-05 14:16:51 -05:00
:bio_raw ,
2013-02-07 16:45:24 +01:00
:bio_cooked ,
:created_at ,
:website ,
2015-08-10 13:37:53 +05:30
:website_name ,
2014-02-28 21:12:51 +01:00
:profile_background ,
2014-10-20 12:11:36 -04:00
:card_background ,
2014-05-27 13:54:04 -04:00
:location ,
2013-02-07 16:45:24 +01:00
:can_edit ,
2013-08-12 14:54:52 -04:00
:can_edit_username ,
2013-09-08 11:42:41 +09:00
:can_edit_email ,
2014-03-13 13:26:40 -07:00
:can_edit_name ,
2013-02-07 16:45:24 +01:00
:stats ,
2014-11-30 15:09:34 +13:00
:can_send_private_messages ,
2013-02-05 14:16:51 -05:00
:can_send_private_message_to_user ,
:bio_excerpt ,
2013-05-02 17:40:44 +10:00
:trust_level ,
:moderator ,
2013-06-25 18:39:20 -04:00
:admin ,
2013-11-07 16:34:18 -05:00
:title ,
:suspend_reason ,
2014-03-28 14:19:30 +05:30
:suspended_till ,
2014-06-02 12:59:54 +10:00
:uploaded_avatar_id ,
2014-07-09 15:31:49 +10:00
:badge_count ,
2014-07-27 12:12:36 -05:00
:has_title_badges ,
2014-09-26 14:48:34 -04:00
:custom_fields ,
2015-03-24 12:33:17 -04:00
:user_fields ,
2015-04-21 14:36:46 -04:00
:topic_post_count ,
2015-09-14 15:51:17 +08:00
:pending_count ,
2016-02-17 15:46:19 +11:00
:profile_view_count
2013-02-05 14:16:51 -05:00
2013-05-21 12:03:51 -04:00
has_one :invited_by , embed : :object , serializer : BasicUserSerializer
2015-12-17 18:06:04 +11:00
has_many :groups , embed : :object , serializer : BasicGroupSerializer
2014-03-28 14:19:30 +05:30
has_many :featured_user_badges , embed : :ids , serializer : UserBadgeSerializer , root : :user_badges
2014-10-20 13:15:58 -04:00
has_one :card_badge , embed : :object , serializer : BadgeSerializer
2016-02-17 15:46:19 +11:00
has_one :user_option , embed : :object , serializer : UserOptionSerializer
def include_user_option?
can_edit
end
2013-02-05 14:16:51 -05:00
2014-12-02 18:52:56 +01:00
staff_attributes :post_count ,
2014-11-14 15:23:09 -05:00
:can_be_deleted ,
:can_delete_all_posts
2013-06-04 12:05:36 -04:00
2014-09-29 22:31:05 +02:00
private_attributes :locale ,
2014-01-02 17:58:49 +11:00
:muted_category_ids ,
2014-01-06 11:57:17 +11:00
:tracked_category_ids ,
2014-05-02 22:36:52 +02:00
:watched_category_ids ,
2014-05-26 16:39:03 -04:00
:private_messages_stats ,
2015-09-11 12:56:34 +02:00
:system_avatar_upload_id ,
:system_avatar_template ,
2014-05-22 17:37:02 +10:00
:gravatar_avatar_upload_id ,
2015-09-11 12:56:34 +02:00
:gravatar_avatar_template ,
2014-06-11 15:50:37 +10:00
:custom_avatar_upload_id ,
2015-09-11 12:56:34 +02:00
:custom_avatar_template ,
2014-10-20 13:15:58 -04:00
:has_title_badges ,
:card_image_badge ,
2015-03-24 11:55:22 +11:00
:card_image_badge_id ,
:muted_usernames
2013-05-20 16:52:37 -04:00
2014-11-26 19:20:03 +01:00
untrusted_attributes :bio_raw ,
:bio_cooked ,
:bio_excerpt ,
:location ,
:website ,
:profile_background ,
:card_background
2014-06-30 22:46:47 +02:00
###
### ATTRIBUTES
###
2015-12-17 18:06:04 +11:00
def groups
if scope . is_admin? || object . id == scope . user . try ( :id )
object . groups
else
object . groups . where ( visible : true )
end
end
2014-09-29 22:31:05 +02:00
def include_email?
object . id && object . id == scope . user . try ( :id )
end
2014-10-20 13:15:58 -04:00
def card_badge
object . user_profile . card_image_badge
end
2014-06-30 22:46:47 +02:00
def bio_raw
object . user_profile . bio_raw
2014-05-22 17:37:02 +10:00
end
2014-06-30 22:46:47 +02:00
def bio_cooked
object . user_profile . bio_processed
2013-02-05 14:16:51 -05:00
end
2013-02-25 19:42:20 +03:00
2014-06-30 22:46:47 +02:00
def website
object . user_profile . website
2013-02-14 17:32:58 +11:00
end
2013-02-05 14:16:51 -05:00
2015-08-10 13:37:53 +05:30
def website_name
website_host = URI ( website . to_s ) . host rescue nil
discourse_host = Discourse . current_hostname
return if website_host . nil?
if website_host == discourse_host
# example.com == example.com
website_host + URI ( website . to_s ) . path
elsif ( website_host . split ( '.' ) . length == discourse_host . split ( '.' ) . length ) && discourse_host . split ( '.' ) . length > 2
# www.example.com == forum.example.com
website_host . split ( '.' ) [ 1 .. - 1 ] . join ( '.' ) == discourse_host . split ( '.' ) [ 1 .. - 1 ] . join ( '.' ) ? website_host + URI ( website . to_s ) . path : website_host
else
# example.com == forum.example.com
discourse_host . ends_with? ( " . " << website_host ) ? website_host + URI ( website . to_s ) . path : website_host
end
end
def include_website_name
website . present?
end
2014-10-20 13:15:58 -04:00
def card_image_badge_id
object . user_profile . card_image_badge . try ( :id )
end
def include_card_image_badge_id?
card_image_badge_id . present?
end
def card_image_badge
object . user_profile . card_image_badge . try ( :image )
end
def include_card_image_badge?
card_image_badge . present?
end
2014-06-30 22:46:47 +02:00
def profile_background
object . user_profile . profile_background
end
2014-10-20 12:11:36 -04:00
def card_background
object . user_profile . card_background
2014-10-16 15:05:36 -04:00
end
2014-06-30 22:46:47 +02:00
def location
object . user_profile . location
end
2013-02-05 14:16:51 -05:00
def can_edit
scope . can_edit? ( object )
end
2013-08-12 14:54:52 -04:00
def can_edit_username
scope . can_edit_username? ( object )
end
2013-09-08 11:42:41 +09:00
def can_edit_email
scope . can_edit_email? ( object )
end
2014-03-13 13:26:40 -07:00
def can_edit_name
scope . can_edit_name? ( object )
end
2015-02-24 13:31:23 +11:00
def include_stats?
! omit_stats == true
end
2014-06-30 22:46:47 +02:00
def stats
UserAction . stats ( object . id , scope )
2014-05-27 13:54:04 -04:00
end
2014-11-30 15:09:34 +13:00
# Needed because 'send_private_message_to_user' will always return false
# when the current user is being serialized
def can_send_private_messages
scope . can_send_private_message? ( Discourse . system_user )
end
2014-06-30 22:46:47 +02:00
def can_send_private_message_to_user
scope . can_send_private_message? ( object )
2014-06-06 21:54:32 -07:00
end
2014-06-30 22:46:47 +02:00
def bio_excerpt
2015-12-14 21:46:15 +08:00
object . user_profile . bio_excerpt ( 350 , { keep_newlines : true , keep_emoji_images : true } )
2014-06-10 01:19:08 -04:00
end
2014-06-30 22:46:47 +02:00
def include_suspend_reason?
object . suspended?
2014-06-10 01:19:08 -04:00
end
2014-06-30 22:46:47 +02:00
def include_suspended_till?
object . suspended?
2014-06-10 01:19:08 -04:00
end
2014-06-30 22:46:47 +02:00
###
### STAFF ATTRIBUTES
###
2014-12-02 18:52:56 +01:00
def post_count
object . user_stat . try ( :post_count )
end
2014-11-14 15:23:09 -05:00
def can_be_deleted
scope . can_delete_user? ( object )
end
def can_delete_all_posts
scope . can_delete_all_posts? ( object )
end
2014-06-30 22:46:47 +02:00
###
### PRIVATE ATTRIBUTES
###
2014-01-02 17:58:49 +11:00
def muted_category_ids
CategoryUser . lookup ( object , :muted ) . pluck ( :category_id )
end
2014-01-06 11:57:17 +11:00
def tracked_category_ids
CategoryUser . lookup ( object , :tracking ) . pluck ( :category_id )
end
2014-01-02 17:58:49 +11:00
def watched_category_ids
CategoryUser . lookup ( object , :watching ) . pluck ( :category_id )
end
2014-03-28 14:19:30 +05:30
2015-03-24 11:55:22 +11:00
def muted_usernames
MutedUser . where ( user_id : object . id ) . joins ( :muted_user ) . pluck ( :username )
end
2015-09-10 17:18:43 +10:00
def include_private_messages_stats?
2015-02-24 13:39:31 +11:00
can_edit && ! ( omit_stats == true )
end
2014-05-02 22:36:52 +02:00
def private_messages_stats
UserAction . private_messages_stats ( object . id , scope )
end
2014-06-30 22:46:47 +02:00
2015-09-11 12:56:34 +02:00
def system_avatar_upload_id
# should be left blank
end
def system_avatar_template
User . system_avatar_template ( object . username )
end
2014-06-30 22:46:47 +02:00
def gravatar_avatar_upload_id
object . user_avatar . try ( :gravatar_upload_id )
end
2015-09-11 12:56:34 +02:00
def gravatar_avatar_template
return unless gravatar_upload_id = object . user_avatar . try ( :gravatar_upload_id )
User . avatar_template ( object . username , gravatar_upload_id )
end
2014-06-30 22:46:47 +02:00
def custom_avatar_upload_id
object . user_avatar . try ( :custom_upload_id )
end
2015-09-11 12:56:34 +02:00
def custom_avatar_template
return unless custom_upload_id = object . user_avatar . try ( :custom_upload_id )
User . avatar_template ( object . username , custom_upload_id )
end
2014-07-09 15:31:49 +10:00
def has_title_badges
object . badges . where ( allow_title : true ) . count > 0
end
2014-09-26 14:48:34 -04:00
def user_fields
object . user_fields
end
def include_user_fields?
user_fields . present?
end
2015-03-24 12:33:17 -04:00
def include_topic_post_count?
topic_post_count . present?
end
2014-08-19 11:05:35 -04:00
def custom_fields
fields = nil
2015-12-05 17:50:03 +11:00
if scope . can_edit? ( object )
fields = DiscoursePluginRegistry . serialized_current_user_fields . to_a
end
2014-08-19 11:05:35 -04:00
if SiteSetting . public_user_custom_fields . present?
2015-12-05 17:50:03 +11:00
fields || = [ ]
fields += SiteSetting . public_user_custom_fields . split ( '|' )
2014-08-19 11:05:35 -04:00
end
if fields . present?
User . custom_fields_for_ids ( [ object . id ] , fields ) [ object . id ]
else
{ }
end
end
2015-04-21 14:36:46 -04:00
def pending_count
0
end
2015-09-11 02:12:40 +02:00
2015-09-14 15:51:17 +08:00
def profile_view_count
object . user_profile . views
end
2013-02-05 14:16:51 -05:00
end