discourse/app/serializers/basic_user_serializer.rb
Andrei Prigorshnev b3a1199493
FEATURE: Hide user status when user is hiding public profile and presence (#24300)
Users can hide their public profile and presence information by checking 
“Hide my public profile and presence features” on the 
`u/{username}/preferences/interface` page. In that case, we also don't 
want to return user status from the server.

This work has been started in https://github.com/discourse/discourse/pull/23946. 
The current PR fixes all the remaining places in Core.

Note that the actual fix is quite simple – a5802f484d. 
But we had a fair amount of duplication in the code responsible for 
the user status serialization, so I had to dry that up first. The refactoring 
as well as adding some additional tests is the main part of this PR.
2024-02-26 17:40:48 +04:00

42 lines
922 B
Ruby

# frozen_string_literal: true
class BasicUserSerializer < ApplicationSerializer
include UserStatusMixin
attributes :id, :username, :name, :avatar_template
def name
Hash === user ? user[:name] : user.try(:name)
end
def include_name?
SiteSetting.enable_names?
end
def avatar_template
if Hash === object
User.avatar_template(user[:username], user[:uploaded_avatar_id])
else
user&.avatar_template
end
end
def user
object[:user] || object.try(:user) || object
end
def user_is_current_user
object.id == scope.user&.id
end
def categories_with_notification_level(lookup_level)
category_user_notification_levels
.select { |id, level| level == CategoryUser.notification_levels[lookup_level] }
.keys
end
def category_user_notification_levels
@category_user_notification_levels ||= CategoryUser.notification_levels_for(user)
end
end