diff options
author | Jose Ivan Vargas <jvargas@gitlab.com> | 2016-12-22 16:38:27 -0600 |
---|---|---|
committer | Jose Ivan Vargas <jvargas@gitlab.com> | 2017-01-03 10:52:14 -0600 |
commit | 4cd139e948ad0de3516b6534146b51faffeca610 (patch) | |
tree | 70fba9a4eecc4cb50cdcd47e02558dab64e166a6 /app/controllers/projects/settings | |
parent | 365612ce3602858c51902e735d0daea6e1987ba8 (diff) | |
download | gitlab-ce-4cd139e948ad0de3516b6534146b51faffeca610.tar.gz |
Moved the members (project_members)option to a single controller called members
This controller is going to contain both the project members and groups options
for the settings gear.
Generated the route and modified the routing to point to the new members setting path
Diffstat (limited to 'app/controllers/projects/settings')
-rw-r--r-- | app/controllers/projects/settings/members_controller.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/app/controllers/projects/settings/members_controller.rb b/app/controllers/projects/settings/members_controller.rb new file mode 100644 index 00000000000..ee6be33c701 --- /dev/null +++ b/app/controllers/projects/settings/members_controller.rb @@ -0,0 +1,52 @@ +module Projects + module Settings + class MembersController < Projects::ApplicationController + include SortingHelper + + def show + @sort = params[:sort].presence || sort_value_name + @group_links = @project.project_group_links + + @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? + 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 + + 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 ')). + sort(@sort). + page(params[:page]) + + @requesters = AccessRequestsFinder.new(@project).execute(current_user) + + @project_member = @project.project_members.new + end + end + end +end |