d279cc9408
The columns 'Created on' and 'Last activity' have been added to the admin -> users view. Sorting options have also been added for last activity and the search bar has been moved to match the issues page.
111 lines
3.2 KiB
Ruby
111 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module UsersHelper
|
|
def user_link(user)
|
|
link_to(user.name, user_path(user),
|
|
title: user.email,
|
|
class: 'has-tooltip commit-committer-link')
|
|
end
|
|
|
|
def user_email_help_text(user)
|
|
return 'We also use email for avatar detection if no avatar is uploaded' unless user.unconfirmed_email.present?
|
|
|
|
confirmation_link = link_to 'Resend confirmation e-mail', user_confirmation_path(user: { email: @user.unconfirmed_email }), method: :post
|
|
|
|
h('Please click the link in the confirmation email before continuing. It was sent to ') +
|
|
content_tag(:strong) { user.unconfirmed_email } + h('.') +
|
|
content_tag(:p) { confirmation_link }
|
|
end
|
|
|
|
def profile_tabs
|
|
@profile_tabs ||= get_profile_tabs
|
|
end
|
|
|
|
def profile_tab?(tab)
|
|
profile_tabs.include?(tab)
|
|
end
|
|
|
|
def user_internal_regex_data
|
|
settings = Gitlab::CurrentSettings.current_application_settings
|
|
|
|
pattern, options = if settings.user_default_internal_regex_enabled?
|
|
regex = settings.user_default_internal_regex_instance
|
|
JsRegex.new(regex).to_h.slice(:source, :options).values
|
|
end
|
|
|
|
{ user_internal_regex_pattern: pattern, user_internal_regex_options: options }
|
|
end
|
|
|
|
def current_user_menu_items
|
|
@current_user_menu_items ||= get_current_user_menu_items
|
|
end
|
|
|
|
def current_user_menu?(item)
|
|
current_user_menu_items.include?(item)
|
|
end
|
|
|
|
def max_project_member_access(project)
|
|
current_user&.max_member_access_for_project(project.id) || Gitlab::Access::NO_ACCESS
|
|
end
|
|
|
|
def max_project_member_access_cache_key(project)
|
|
"access:#{max_project_member_access(project)}"
|
|
end
|
|
|
|
def user_status(user)
|
|
return unless user
|
|
|
|
unless user.association(:status).loaded?
|
|
exception = RuntimeError.new("Status was not preloaded")
|
|
Gitlab::Sentry.track_exception(exception, extra: { user: user.inspect })
|
|
end
|
|
|
|
return unless user.status
|
|
|
|
content_tag :span,
|
|
class: 'user-status-emoji has-tooltip',
|
|
title: user.status.message_html,
|
|
data: { html: true, placement: 'top' } do
|
|
emoji_icon user.status.emoji
|
|
end
|
|
end
|
|
|
|
def impersonation_enabled?
|
|
Gitlab.config.gitlab.impersonation_enabled
|
|
end
|
|
|
|
def user_badges_in_admin_section(user)
|
|
[].tap do |badges|
|
|
badges << { text: s_('AdminUsers|Blocked'), variant: 'danger' } if user.blocked?
|
|
badges << { text: s_('AdminUsers|Admin'), variant: 'success' } if user.admin?
|
|
badges << { text: s_('AdminUsers|External'), variant: 'secondary' } if user.external?
|
|
badges << { text: s_("AdminUsers|It's you!"), variant: nil } if current_user == user
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def get_profile_tabs
|
|
tabs = []
|
|
|
|
if can?(current_user, :read_user_profile, @user)
|
|
tabs += [:overview, :activity, :groups, :contributed, :projects, :snippets]
|
|
end
|
|
|
|
tabs
|
|
end
|
|
|
|
def get_current_user_menu_items
|
|
items = []
|
|
|
|
items << :sign_out if current_user
|
|
|
|
return items if current_user&.required_terms_not_accepted?
|
|
|
|
items << :help
|
|
items << :profile if can?(current_user, :read_user, current_user)
|
|
items << :settings if can?(current_user, :update_user, current_user)
|
|
|
|
items
|
|
end
|
|
end
|