# frozen_string_literal: true class AdminDetailedUserSerializer < AdminUserSerializer attributes :moderator, :can_grant_admin, :can_revoke_admin, :can_grant_moderation, :can_revoke_moderation, :can_impersonate, :like_count, :like_given_count, :post_count, :topic_count, :post_edits_count, :flags_given_count, :flags_received_count, :private_topics_count, :can_delete_all_posts, :can_be_deleted, :can_be_anonymized, :can_be_merged, :full_suspend_reason, :suspended_till, :silence_reason, :penalty_counts, :next_penalty, :primary_group_id, :badge_count, :warnings_received_count, :user_fields, :bounce_score, :reset_bounce_score_after, :can_view_action_logs, :second_factor_enabled, :can_disable_second_factor, :can_delete_sso_record, :api_key_count, :external_ids, :similar_users, :similar_users_count has_one :approved_by, serializer: BasicUserSerializer, embed: :objects has_one :suspended_by, serializer: BasicUserSerializer, embed: :objects has_one :silenced_by, serializer: BasicUserSerializer, embed: :objects has_one :tl3_requirements, serializer: TrustLevel3RequirementsSerializer, embed: :objects has_many :groups, embed: :object, serializer: BasicGroupSerializer def second_factor_enabled object.totp_enabled? || object.security_keys_enabled? end def can_disable_second_factor scope.is_admin? && (object&.id != scope.user.id) end def can_revoke_admin scope.can_revoke_admin?(object) end def can_grant_admin scope.can_grant_admin?(object) end def can_revoke_moderation scope.can_revoke_moderation?(object) end def can_grant_moderation scope.can_grant_moderation?(object) end def can_delete_all_posts scope.can_delete_all_posts?(object) end def can_be_deleted scope.can_delete_user?(object) end def can_be_anonymized scope.can_anonymize_user?(object) end def can_be_merged scope.can_merge_user?(object) end def topic_count object.topics.count end def include_api_key? scope.is_admin? && api_key.present? end def suspended_by object.suspend_record.try(:acting_user) end def silence_reason object.silence_reason end def penalty_counts TrustLevel3Requirements.new(object).penalty_counts end def next_penalty step_number = penalty_counts.total steps = SiteSetting.penalty_step_hours.split('|') step_number = [step_number, steps.length].min penalty_hours = steps[step_number] Integer(penalty_hours, 10).hours.from_now rescue nil end def silenced_by object.silenced_record.try(:acting_user) end def include_tl3_requirements? object.has_trust_level?(TrustLevel[2]) end def include_user_fields? object.user_fields.present? end def bounce_score object.user_stat.bounce_score end def reset_bounce_score_after object.user_stat.reset_bounce_score_after end def can_view_action_logs scope.can_view_action_logs?(object) end def post_count object.posts.count end def api_key_count object.api_keys.active.count end def external_ids external_ids = {} object.user_associated_accounts.map do |user_associated_account| external_ids[user_associated_account.provider_name] = user_associated_account.provider_uid end external_ids end def similar_users ActiveModel::ArraySerializer.new( @options[:similar_users], each_serializer: SimilarAdminUserSerializer, scope: scope, root: false, ).as_json end def include_similar_users? @options[:similar_users].present? end def similar_users_count @options[:similar_users_count] end def include_similar_users_count? @options[:similar_users].present? end def can_delete_sso_record scope.can_delete_sso_record?(object) end end