From 89c22ed5af490f250800030ee4342c185dbc5358 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 2 Dec 2016 14:34:08 +0000 Subject: [PATCH] Shows group members in the project members list Closes #24122 --- .../projects/project_members_controller.rb | 20 +++++++++++++++++- app/views/shared/members/_member.html.haml | 6 +++++- .../group-members-in-project-members-view.yml | 4 ++++ .../projects/members/group_members_spec.rb | 21 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/group-members-in-project-members-view.yml create mode 100644 spec/features/projects/members/group_members_spec.rb diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 699a56ae2f8..ccf5ff35171 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -10,14 +10,32 @@ class Projects::ProjectMembersController < Projects::ApplicationController @project_members = @project.project_members @project_members = @project_members.non_invite unless can?(current_user, :admin_project, @project) + @group = @project.group + + if @group + @group_members = @group.group_members + @group_members = @group_members.non_invite unless can?(current_user, :admin_group, @group) + end + if params[:search].present? users = @project.users.search(params[:search]).to_a @project_members = @project_members.where(user_id: users) + if @group_members + users = @group.users.search(params[:search]).to_a + @group_members = @group_members.where(user_id: users) + end + @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id)) end - @project_members = @project_members.order(access_level: :desc).page(params[:page]) + members_id = @project_members.pluck(:id) + + if @group_members + members_id << @group_members.select{ |member| !@project_members.find_by(user_id: member.user_id) }.select(&:id) + end + + @project_members = Member.where(id: members_id.flatten).order(access_level: :desc).page(params[:page]) @requesters = AccessRequestsFinder.new(@project).execute(current_user) diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml index 432047a1c4e..bf42c9080a6 100644 --- a/app/views/shared/members/_member.html.haml +++ b/app/views/shared/members/_member.html.haml @@ -12,6 +12,10 @@ = link_to user.name, user_path(user) %span.cgray= user.to_reference + - if member.real_source_type == 'Group' + · + %span.cblue=member.group.name + - if user == current_user %span.label.label-success.prepend-left-5 It's you @@ -45,7 +49,7 @@ = time_ago_with_tooltip(member.created_at) - if show_roles .controls.member-controls - - if show_controls + - if show_controls && member.real_source_type == 'Project' - if user != current_user = form_for member, remote: true, html: { class: 'form-horizontal js-edit-member-form' } do |f| = f.select :access_level, options_for_select(member.class.access_level_roles, member.access_level), {}, class: 'form-control member-form-control append-right-5 js-member-update-control', id: "member_access_level_#{member.id}", disabled: !can_admin_member diff --git a/changelogs/unreleased/group-members-in-project-members-view.yml b/changelogs/unreleased/group-members-in-project-members-view.yml new file mode 100644 index 00000000000..415e2b6b1e2 --- /dev/null +++ b/changelogs/unreleased/group-members-in-project-members-view.yml @@ -0,0 +1,4 @@ +--- +title: Shows group members in project members list +merge_request: +author: diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb new file mode 100644 index 00000000000..39235a1cd4f --- /dev/null +++ b/spec/features/projects/members/group_members_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +feature 'Projects members', feature: true do + let(:user) { create(:user) } + let(:group) { create(:group) } + let(:project) { create(:project, group: group) } + + background do + group.add_owner(user) + login_as(user) + visit namespace_project_project_members_path(project.namespace, project) + end + + it 'shows group members in list' do + expect(page).to have_selector('.group_member') + + page.within first('.content-list .member') do + expect(page).to have_content(group.name) + end + end +end