summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2016-12-08 14:45:39 +0000
committerSean McGivern <sean@mcgivern.me.uk>2016-12-08 14:45:39 +0000
commitabb53bb6b718f56d44aa5480c85d29177f03e5c3 (patch)
treec309565429170dac7eb124d517a2b52c3bebd57a /app/controllers
parent1b9bc9f2b1282a628e5e4b0591114c7674810479 (diff)
parent96f162125dabb3d3ff21cb95abf97e5af6ee5589 (diff)
downloadgitlab-ce-abb53bb6b718f56d44aa5480c85d29177f03e5c3.tar.gz
Merge branch 'group-members-in-project-members-view' into 'master'
Shows group members in the project members list Closes #24122 See merge request !7899
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/projects/project_members_controller.rb30
1 files changed, 27 insertions, 3 deletions
diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb
index 699a56ae2f8..3fb8bba3cd0 100644
--- a/app/controllers/projects/project_members_controller.rb
+++ b/app/controllers/projects/project_members_controller.rb
@@ -10,14 +10,38 @@ 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
+ # We need `.where.not(user_id: nil)` here otherwise when a group has an
+ # invitee, it would make the following query return 0 rows since a NULL
+ # user_id would be present in the subquery
+ # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values
+ # FIXME: This whole logic should be moved to a finder!
+ non_null_user_ids = @project_members.where.not(user_id: nil).select(:user_id)
+ group_members = group.group_members.where.not(user_id: non_null_user_ids)
+ 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)
+ user_ids = @project.users.search(params[:search]).select(:id)
+ @project_members = @project_members.where(user_id: user_ids)
+
+ if group_members
+ user_ids = group.users.search(params[:search]).select(:id)
+ group_members = group_members.where(user_id: user_ids)
+ 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])
+ member_ids = @project_members.pluck(:id)
+
+ if group_members
+ member_ids += group_members.pluck(:id)
+ end
+
+ @project_members = Member.where(id: member_ids).order(access_level: :desc).page(params[:page])
@requesters = AccessRequestsFinder.new(@project).execute(current_user)