summaryrefslogtreecommitdiff
path: root/app/helpers/groups/group_members_helper.rb
blob: dcff2be34daca4903172e2f3b5f26de7c2324b99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true

module Groups::GroupMembersHelper
  include AvatarsHelper

  AVATAR_SIZE = 40

  def group_member_select_options
    { multiple: true, class: 'input-clamp qa-member-select-field ', scope: :all, email_user: true }
  end

  def render_invite_member_for_group(group, default_access_level)
    render 'shared/members/invite_member', submit_url: group_group_members_path(group), access_levels: GroupMember.access_level_roles, default_access_level: default_access_level
  end

  def linked_groups_data_json(group_links)
    GroupGroupLinkSerializer.new.represent(group_links).to_json
  end

  def members_data_json(group, members)
    members_data(group, members).to_json
  end

  private

  def members_data(group, members)
    members.map do |member|
      user = member.user
      source = member.source

      data = {
        id: member.id,
        created_at: member.created_at,
        expires_at: member.expires_at&.to_time,
        requested_at: member.requested_at,
        can_update: member.can_update?,
        can_remove: member.can_remove?,
        can_override: member.can_override?,
        access_level: {
          string_value: member.human_access,
          integer_value: member.access_level
        },
        source: {
          id: source.id,
          name: source.full_name,
          web_url: Gitlab::UrlBuilder.build(source)
        }
      }.merge(member_created_by_data(member.created_by))

      if user.present?
        data[:user] = member_user_data(user)
      else
        data[:invite] = member_invite_data(member)
      end

      data
    end
  end

  def member_created_by_data(created_by)
    return {} unless created_by.present?

    {
      created_by: {
        name: created_by.name,
        web_url: Gitlab::UrlBuilder.build(created_by)
      }
    }
  end

  def member_user_data(user)
    {
      id: user.id,
      name: user.name,
      username: user.username,
      web_url: Gitlab::UrlBuilder.build(user),
      avatar_url: avatar_icon_for_user(user, AVATAR_SIZE),
      blocked: user.blocked?,
      two_factor_enabled: user.two_factor_enabled?
    }
  end

  def member_invite_data(member)
    {
      email: member.invite_email,
      avatar_url: avatar_icon_for_email(member.invite_email, AVATAR_SIZE),
      can_resend: member.can_resend_invite?
    }
  end
end

Groups::GroupMembersHelper.prepend_if_ee('EE::Groups::GroupMembersHelper')