Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-12-07 11:59:52 +0300
committerRémy Coutable <remy@rymai.me>2016-12-07 11:59:52 +0300
commit96f162125dabb3d3ff21cb95abf97e5af6ee5589 (patch)
tree8b126ff9b543cf57822cdf31ed5b4ca4bf95cf8a /app/controllers/projects/project_members_controller.rb
parentcae90506fb3bdf8412d241a21a1f0fe2d96393b6 (diff)
Handle an edge-case whith invitees
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 <remy@rymai.me>
Diffstat (limited to 'app/controllers/projects/project_members_controller.rb')
-rw-r--r--app/controllers/projects/project_members_controller.rb14
1 files changed, 10 insertions, 4 deletions
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)