mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-23 03:26:07 +10:00
Merge branch '18871-check-improve-how-we-display-access-requesters-in-admin-area' into 'master'
Display group/project access requesters separately in admin ## What does this MR do? It displays the access requesters in a separate list in group & project members pages. It also harmonize the members counter UI to use `%span.badge` everywhere (in the admin & non-admin members views). ## Are there points in the code the reviewer needs to double check? No. ## Why was this MR needed? To not confuse access requesters with actual members. ## What are the relevant issue numbers? Closes #18871. ## Screenshots ### Group members | Before | After | | --------- | ---- | |  |  | ### Project members | Before | After | | --------- | ---- | |  |  | ### Admin group members | Before | After | | --------- | ---- | |  |  | ### Admin project members | Before | After | | --------- | ---- | |  |  | ## Does this MR meet the acceptance criteria? - [x] No CHANGELOG since this is related to the original "request access" MR. - [ ] All builds are passing - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !4798 Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
@@ -7,6 +7,7 @@ v 8.9.1 (unreleased)
|
||||
- Add documentation for the export & import features. !4732
|
||||
- Add some docs for Docker Registry configuration. !4738
|
||||
- Ensure we don't send the "access request declined" email to access requesters on project deletion. !4744
|
||||
- Display group/project access requesters separately in the admin area. !4798
|
||||
- Fix MR-auto-close text added to description. !4836
|
||||
- Fix typo in export failure email. !4847
|
||||
|
||||
|
||||
@@ -88,28 +88,17 @@
|
||||
= select_tag :access_level, options_for_select(GroupMember.access_level_roles), class: "project-access-select select2"
|
||||
%hr
|
||||
= button_tag 'Add users to group', class: "btn btn-create"
|
||||
|
||||
= render 'shared/members/requests', membership_source: @group, members: @members.request
|
||||
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
%h3.panel-title
|
||||
Members
|
||||
%span.badge
|
||||
#{@group.group_members.count}
|
||||
%ul.well-list.group-users-list
|
||||
- @members.each do |member|
|
||||
- user = member.user
|
||||
%li{class: dom_class(member), id: (dom_id(user) if user)}
|
||||
.list-item-name
|
||||
- if user
|
||||
%strong
|
||||
= link_to user.name, admin_user_path(user)
|
||||
- else
|
||||
%strong
|
||||
= member.invite_email
|
||||
(invited)
|
||||
%span.pull-right.light
|
||||
= member.human_access
|
||||
- if can?(current_user, :destroy_group_member, member)
|
||||
= link_to group_group_member_path(@group, member), data: { confirm: remove_member_message(member) }, method: :delete, remote: true, class: "btn-xs btn btn-remove", title: 'Remove user from group' do
|
||||
%i.fa.fa-minus.fa-inverse
|
||||
%strong= @group.name
|
||||
group members
|
||||
%span.badge= @group.members.non_request.size
|
||||
.pull-right
|
||||
= link_to icon('pencil-square-o', text: 'Manage Access'), polymorphic_url([@group, :members]), class: "btn btn-xs"
|
||||
%ul.well-list.group-users-list.content-list
|
||||
= render partial: 'shared/members/member', collection: @members.non_request, as: :member, locals: { show_controls: false }
|
||||
.panel-footer
|
||||
= paginate @members, param_name: 'members_page', theme: 'gitlab'
|
||||
= paginate @members.non_request, param_name: 'members_page', theme: 'gitlab'
|
||||
|
||||
@@ -135,44 +135,27 @@
|
||||
- if @group
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
%strong #{@group.name}
|
||||
group members (#{@group.group_members.count})
|
||||
%strong= @group.name
|
||||
group members
|
||||
%span.badge= @group_members.non_request.size
|
||||
.pull-right
|
||||
= link_to admin_group_path(@group), class: 'btn btn-xs' do
|
||||
%i.fa.fa-pencil-square-o
|
||||
%ul.well-list
|
||||
- @group_members.each do |member|
|
||||
= render 'shared/members/member', member: member, show_controls: false
|
||||
= icon('pencil-square-o', text: 'Manage Access')
|
||||
%ul.well-list.content-list
|
||||
= render partial: 'shared/members/member', collection: @group_members.non_request, as: :member, locals: { show_controls: false }
|
||||
.panel-footer
|
||||
= paginate @group_members, param_name: 'group_members_page', theme: 'gitlab'
|
||||
= paginate @group_members.non_request, param_name: 'group_members_page', theme: 'gitlab'
|
||||
|
||||
= render 'shared/members/requests', membership_source: @project, members: @project_members.request
|
||||
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
Project members
|
||||
%small
|
||||
(#{@project.users.count})
|
||||
%strong= @project.name
|
||||
project members
|
||||
%span.badge= @project.users.size
|
||||
.pull-right
|
||||
= link_to namespace_project_project_members_path(@project.namespace, @project), class: "btn btn-xs" do
|
||||
%i.fa.fa-pencil-square-o
|
||||
Manage Access
|
||||
%ul.well-list.project_members
|
||||
- @project_members.each do |project_member|
|
||||
- user = project_member.user
|
||||
%li.project_member
|
||||
.list-item-name
|
||||
- if user
|
||||
%strong
|
||||
= link_to user.name, admin_user_path(user)
|
||||
- else
|
||||
%strong
|
||||
= project_member.invite_email
|
||||
(invited)
|
||||
.pull-right
|
||||
- if project_member.owner?
|
||||
%span.light Owner
|
||||
- else
|
||||
%span.light= project_member.human_access
|
||||
= link_to namespace_project_project_member_path(@project.namespace, @project, project_member), data: { confirm: remove_member_message(project_member)}, method: :delete, remote: true, class: "btn btn-sm btn-remove" do
|
||||
%i.fa.fa-times
|
||||
= link_to icon('pencil-square-o', text: 'Manage Access'), polymorphic_url([@project, :members]), class: "btn btn-xs"
|
||||
%ul.well-list.project_members.content-list
|
||||
= render partial: 'shared/members/member', collection: @project_members.non_request, as: :member, locals: { show_controls: false }
|
||||
.panel-footer
|
||||
= paginate @project_members, param_name: 'project_members_page', theme: 'gitlab'
|
||||
= paginate @project_members.non_request, param_name: 'project_members_page', theme: 'gitlab'
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
.panel-heading
|
||||
%strong #{@group.name}
|
||||
group members
|
||||
%small
|
||||
(#{@members.total_count})
|
||||
%span.badge= @members.non_request.size
|
||||
.controls
|
||||
= form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do
|
||||
.form-group
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
.panel-heading
|
||||
%strong #{@group.name}
|
||||
group members
|
||||
%small
|
||||
(#{members.count})
|
||||
%span.badge= members.size
|
||||
- if can?(current_user, :admin_group_member, @group)
|
||||
.controls
|
||||
= link_to 'Manage group members',
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
- @project_group_links.each do |group_links|
|
||||
- shared_group = group_links.group
|
||||
- shared_group_users_count = group_links.group.group_members.count
|
||||
- shared_group_members = shared_group.members.non_request
|
||||
- shared_group_users_count = shared_group_members.size
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
Shared with
|
||||
@@ -15,7 +16,7 @@
|
||||
Edit group members
|
||||
%ul.content-list
|
||||
= render partial: 'shared/members/member',
|
||||
collection: shared_group.group_members.order(access_level: :desc).limit(20),
|
||||
collection: shared_group_members.order(access_level: :desc).limit(20),
|
||||
as: :member,
|
||||
locals: { show_controls: false, show_roles: false }
|
||||
- if shared_group_users_count > 20
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
.panel-heading
|
||||
%strong #{@project.name}
|
||||
project members
|
||||
%small
|
||||
(#{members.count})
|
||||
%span.badge= members.size
|
||||
.controls
|
||||
= form_tag namespace_project_project_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do
|
||||
.form-group
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
= render 'team', members: @project_members.non_request
|
||||
|
||||
- if @group
|
||||
= render "group_members", members: @group_members
|
||||
= render "group_members", members: @group_members.non_request
|
||||
|
||||
- if @project_group_links.any? && @project.allowed_to_share_with_group?
|
||||
= render "shared_group_members"
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
.panel-heading
|
||||
%strong= membership_source.name
|
||||
access requests
|
||||
%small= "(#{members.size})"
|
||||
%span.badge= members.size
|
||||
%ul.content-list
|
||||
= render partial: 'shared/members/member', collection: members, as: :member
|
||||
|
||||
@@ -26,13 +26,6 @@ Feature: Admin Groups
|
||||
When I visit group page
|
||||
Then I should see project shared with group
|
||||
|
||||
@javascript
|
||||
Scenario: Remove user from group
|
||||
Given we have user "John Doe" in group
|
||||
When I visit admin group page
|
||||
And I remove user "John Doe" from group
|
||||
Then I should not see "John Doe" in team list
|
||||
|
||||
@javascript
|
||||
Scenario: Invite user to a group by e-mail
|
||||
When I visit admin group page
|
||||
|
||||
@@ -62,7 +62,7 @@ class Spinach::Features::AdminGroups < Spinach::FeatureSteps
|
||||
|
||||
step 'I should see "johndoe@gitlab.com" in team list in every project as "Reporter"' do
|
||||
page.within ".group-users-list" do
|
||||
expect(page).to have_content "johndoe@gitlab.com (invited)"
|
||||
expect(page).to have_content "johndoe@gitlab.com – Invited by"
|
||||
expect(page).to have_content "Reporter"
|
||||
end
|
||||
end
|
||||
@@ -92,12 +92,6 @@ class Spinach::Features::AdminGroups < Spinach::FeatureSteps
|
||||
current_group.add_reporter(user_john)
|
||||
end
|
||||
|
||||
step 'I remove user "John Doe" from group' do
|
||||
page.within "#user_#{user_john.id}" do
|
||||
click_link 'Remove user from group'
|
||||
end
|
||||
end
|
||||
|
||||
step 'I should not see "John Doe" in team list' do
|
||||
page.within ".group-users-list" do
|
||||
expect(page).not_to have_content "John Doe"
|
||||
|
||||
@@ -42,7 +42,7 @@ feature 'Groups > Members > Owner manages access requests', feature: true do
|
||||
|
||||
def expect_visible_access_request(group, user)
|
||||
expect(group.members.request.exists?(user_id: user)).to be_truthy
|
||||
expect(page).to have_content "#{group.name} access requests (1)"
|
||||
expect(page).to have_content "#{group.name} access requests 1"
|
||||
expect(page).to have_content user.name
|
||||
end
|
||||
end
|
||||
|
||||
@@ -41,7 +41,7 @@ feature 'Projects > Members > Master manages access requests', feature: true do
|
||||
|
||||
def expect_visible_access_request(project, user)
|
||||
expect(project.members.request.exists?(user_id: user)).to be_truthy
|
||||
expect(page).to have_content "#{project.name} access requests (1)"
|
||||
expect(page).to have_content "#{project.name} access requests 1"
|
||||
expect(page).to have_content user.name
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user