docbrown/app/helpers/admin/users_helper.rb
2022-11-11 15:29:48 +02:00

111 lines
3.7 KiB
Ruby

module Admin
module UsersHelper
def role_options(logged_in_user)
options = { "Statuses" => Constants::Role::BASE_ROLES }
if logged_in_user.super_admin?
special_roles = Constants::Role::SPECIAL_ROLES
if FeatureFlag.enabled?(:moderator_role)
special_roles = special_roles.dup << "Super Moderator"
end
options["Roles"] = special_roles
end
options
end
def format_last_activity_timestamp(timestamp)
return if timestamp.blank?
if timestamp.today?
I18n.t("helpers.admin.user_helper.today", date: I18n.l(timestamp, format: :members))
elsif timestamp.yesterday?
I18n.t("helpers.admin.user_helper.yesterday", date: I18n.l(timestamp, format: :members))
else
I18n.l(timestamp, format: :members_with_year)
end
end
def cascading_high_level_roles(user)
if user.super_admin?
I18n.t("views.admin.users.roles.Super Admin")
elsif user.admin?
I18n.t("views.admin.users.roles.Admin")
elsif user.single_resource_admin_for?(:any)
I18n.t("views.admin.users.roles.Resource Admin")
end
end
def format_role_tooltip(user)
if user.super_admin?
I18n.t("views.admin.users.roles.Super Admin")
elsif user.admin?
I18n.t("views.admin.users.roles.Admin")
elsif user.single_resource_admin_for?(:any)
role = "Resource Admin: #{user.roles.pluck(:resource_type).compact.join(', ')}"
I18n.t("views.admin.users.roles.#{role}", default: role)
end
end
def user_status(user)
if user.suspended?
I18n.t("views.admin.users.statuses.Suspended")
elsif user.warned?
I18n.t("views.admin.users.statuses.Warned")
elsif user.comment_suspended?
I18n.t("views.admin.users.statuses.Comment Suspended")
elsif user.trusted?
I18n.t("views.admin.users.statuses.Trusted")
else
I18n.t("views.admin.users.statuses.Good Standing")
end
end
# We de-scoped filtering by "Good standing" due to the complexity of it not mapping directly to a specific role
def filterable_statuses
Constants::Role::BASE_ROLES.reject { |status| status == "Good standing" }
end
# Provides the remaining count when a limit for a resource is imposed on the UI.
#
# @param [Integer] The total count
# @param [Integer] A limit that we show
# @return [Integer] The overflow that is calculated
def overflow_count(count, imposed_limit: 0)
return if count <= imposed_limit
count - imposed_limit
end
# Returns a string for the organization tooltip outlining the first three organizations
# as comma seperated values and then appending the remaining organizations (if any)
# as a count.
#
# @param {Array} [array] The array of organization names
# @param [Integer] The total count of organizations
# @param [Integer] The limit of organizations that we show
# @return [String]
def organization_tooltip(organization_names, count, imposed_limit: 0)
str = organization_names.first(imposed_limit).join(I18n.t("helpers.admin.user_helper.org_join")).to_s
return str unless count > imposed_limit
I18n.t("helpers.admin.user_helper.org_overflow", count: overflow_count(count, imposed_limit: imposed_limit),
orgs: str)
end
# Returns a string hex code representing the indicator color for the given status (also known as BASE_ROLE)
def status_to_indicator_color(status)
case status
when "Suspended"
"#DC2626"
when "Warned"
"#F59E0B"
when "Comment Suspended"
"#DC2626"
when "Trusted"
"#059669"
else
"#A3A3A3"
end
end
end
end