diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2016-12-08 14:45:39 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2016-12-08 14:45:39 +0000 |
commit | abb53bb6b718f56d44aa5480c85d29177f03e5c3 (patch) | |
tree | c309565429170dac7eb124d517a2b52c3bebd57a /app/controllers | |
parent | 1b9bc9f2b1282a628e5e4b0591114c7674810479 (diff) | |
parent | 96f162125dabb3d3ff21cb95abf97e5af6ee5589 (diff) | |
download | gitlab-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.rb | 30 |
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) |