From 89c22ed5af490f250800030ee4342c185dbc5358 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 2 Dec 2016 14:34:08 +0000 Subject: Shows group members in the project members list Closes #24122 --- .../projects/project_members_controller.rb | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'app/controllers/projects/project_members_controller.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) -- cgit v1.2.1 From cc66ec2b73d6fa581f5300957597615ed1b58c55 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 2 Dec 2016 16:48:34 +0000 Subject: Fixed Ruby to be better for performance Fixed controls not showing in groups which fixes tests --- .../projects/project_members_controller.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'app/controllers/projects/project_members_controller.rb') diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index ccf5ff35171..10bc75b4c5e 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -10,20 +10,20 @@ 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 + group = @project.group - if @group - @group_members = @group.group_members - @group_members = @group_members.non_invite unless can?(current_user, :admin_group, @group) + if group + group_members = group.group_members.where.not(user_id: @project_members.select(:user_id)) + 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 - users = @group.users.search(params[:search]).to_a - @group_members = @group_members.where(user_id: users) + 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)) @@ -31,8 +31,8 @@ class Projects::ProjectMembersController < Projects::ApplicationController 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) + if group_members + members_id << group_members.pluck(:id) end @project_members = Member.where(id: members_id.flatten).order(access_level: :desc).page(params[:page]) -- cgit v1.2.1 From 96f162125dabb3d3ff21cb95abf97e5af6ee5589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 7 Dec 2016 09:59:52 +0100 Subject: Handle an edge-case whith invitees MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the project has invitees, no group members were returned due to a `user_id NOT IN (42, NULL)` query which always returned [] since a `user_id` would be NULL, thus the condition could never match. Signed-off-by: Rémy Coutable --- app/controllers/projects/project_members_controller.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'app/controllers/projects/project_members_controller.rb') diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 10bc75b4c5e..3fb8bba3cd0 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -13,7 +13,13 @@ class Projects::ProjectMembersController < Projects::ApplicationController group = @project.group if group - group_members = group.group_members.where.not(user_id: @project_members.select(:user_id)) + # 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 @@ -29,13 +35,13 @@ class Projects::ProjectMembersController < Projects::ApplicationController @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id)) end - members_id = @project_members.pluck(:id) + member_ids = @project_members.pluck(:id) if group_members - members_id << group_members.pluck(:id) + member_ids += group_members.pluck(:id) end - @project_members = Member.where(id: members_id.flatten).order(access_level: :desc).page(params[:page]) + @project_members = Member.where(id: member_ids).order(access_level: :desc).page(params[:page]) @requesters = AccessRequestsFinder.new(@project).execute(current_user) -- cgit v1.2.1 From d74ad9263048549e4d90e6a22313768109eaf2c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 8 Dec 2016 18:29:25 +0100 Subject: Use a single query in Projects::ProjectMembersController to fetch members MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- app/controllers/projects/project_members_controller.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'app/controllers/projects/project_members_controller.rb') diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 3fb8bba3cd0..53308948f62 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -35,13 +35,12 @@ class Projects::ProjectMembersController < Projects::ApplicationController @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id)) end - member_ids = @project_members.pluck(:id) + wheres = ["id IN (#{@project_members.select(:id).to_sql})"] + wheres << "id IN (#{group_members.select(:id).to_sql})" if group_members - if group_members - member_ids += group_members.pluck(:id) - end - - @project_members = Member.where(id: member_ids).order(access_level: :desc).page(params[:page]) + @project_members = Member. + where(wheres.join(' OR ')). + order(access_level: :desc).page(params[:page]) @requesters = AccessRequestsFinder.new(@project).execute(current_user) -- cgit v1.2.1 From 09388b2021034173156ba8958fa290b01e3a447d Mon Sep 17 00:00:00 2001 From: Nur Rony Date: Tue, 18 Oct 2016 18:22:18 +0600 Subject: Adds sort dropdown for group members --- app/controllers/projects/project_members_controller.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'app/controllers/projects/project_members_controller.rb') diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index 53308948f62..e4aba4b700e 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -1,10 +1,12 @@ class Projects::ProjectMembersController < Projects::ApplicationController include MembershipActions + include SortingHelper # Authorize before_action :authorize_admin_project_member!, except: [:index, :leave, :request_access] def index + @sort = params[:sort].presence || sort_value_name @group_links = @project.project_group_links @project_members = @project.project_members @@ -40,7 +42,8 @@ class Projects::ProjectMembersController < Projects::ApplicationController @project_members = Member. where(wheres.join(' OR ')). - order(access_level: :desc).page(params[:page]) + sort(@sort). + page(params[:page]) @requesters = AccessRequestsFinder.new(@project).execute(current_user) -- cgit v1.2.1 From e644b8d683d7b9fa2c411fe65e1c828ba9908b57 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Fri, 9 Dec 2016 17:19:47 -0200 Subject: Fix query in Projects::ProjectMembersController to fetch members --- app/controllers/projects/project_members_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/controllers/projects/project_members_controller.rb') diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index e4aba4b700e..3aec6f18e27 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -37,8 +37,8 @@ class Projects::ProjectMembersController < Projects::ApplicationController @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id)) end - wheres = ["id IN (#{@project_members.select(:id).to_sql})"] - wheres << "id IN (#{group_members.select(:id).to_sql})" if group_members + wheres = ["members.id IN (#{@project_members.select(:id).to_sql})"] + wheres << "members.id IN (#{group_members.select(:id).to_sql})" if group_members @project_members = Member. where(wheres.join(' OR ')). -- cgit v1.2.1