Skip to content
Snippets Groups Projects
Commit ad58dec2 authored by Jose Ivan Vargas Lopez's avatar Jose Ivan Vargas Lopez
Browse files

Added groups to members section, added a members finder

parent def6c43d
No related branches found
No related tags found
No related merge requests found
Loading
@@ -215,8 +215,9 @@
Loading
@@ -215,8 +215,9 @@
new gl.Members(); new gl.Members();
new UsersSelect(); new UsersSelect();
break; break;
case 'projects:project_members:index':
case 'projects:members:show': case 'projects:members:show':
new gl.MemberExpirationDate('.js-access-expiration-date-groups');
new GroupsSelect();
new gl.MemberExpirationDate(); new gl.MemberExpirationDate();
new gl.Members(); new gl.Members();
new UsersSelect(); new UsersSelect();
Loading
@@ -262,10 +263,6 @@
Loading
@@ -262,10 +263,6 @@
case 'projects:artifacts:browse': case 'projects:artifacts:browse':
new BuildArtifacts(); new BuildArtifacts();
break; break;
case 'projects:group_links:index':
new gl.MemberExpirationDate();
new GroupsSelect();
break;
case 'search:show': case 'search:show':
new Search(); new Search();
break; break;
Loading
Loading
Loading
@@ -5,12 +5,16 @@
Loading
@@ -5,12 +5,16 @@
// `js-clear-input` element, then show that element when there is a value in the // `js-clear-input` element, then show that element when there is a value in the
// datepicker, and make clicking on that element clear the field. // datepicker, and make clicking on that element clear the field.
// //
gl.MemberExpirationDate = function() { gl.MemberExpirationDate = function(newSelector) {
function toggleClearInput() { function toggleClearInput() {
$(this).closest('.clearable-input').toggleClass('has-value', $(this).val() !== ''); $(this).closest('.clearable-input').toggleClass('has-value', $(this).val() !== '');
} }
   
var inputs = $('.js-access-expiration-date'); var selector = '.js-access-expiration-date';
if (typeof newSelector !== 'undefined' && newSelector !== '') {
selector = newSelector;
}
var inputs = $(selector);
   
inputs.datepicker({ inputs.datepicker({
dateFormat: 'yy-mm-dd', dateFormat: 'yy-mm-dd',
Loading
@@ -24,7 +28,7 @@
Loading
@@ -24,7 +28,7 @@
inputs.next('.js-clear-input').on('click', function(event) { inputs.next('.js-clear-input').on('click', function(event) {
event.preventDefault(); event.preventDefault();
   
var input = $(this).closest('.clearable-input').find('.js-access-expiration-date'); var input = $(this).closest('.clearable-input').find(selector);
input.datepicker('setDate', null) input.datepicker('setDate', null)
.trigger('change'); .trigger('change');
toggleClearInput.call(input); toggleClearInput.call(input);
Loading
Loading
Loading
@@ -4,10 +4,7 @@ class Projects::GroupLinksController < Projects::ApplicationController
Loading
@@ -4,10 +4,7 @@ class Projects::GroupLinksController < Projects::ApplicationController
before_action :authorize_admin_project_member!, only: [:update] before_action :authorize_admin_project_member!, only: [:update]
   
def index def index
@group_links = project.project_group_links.all redirect_to namespace_project_settings_members_path
@skip_groups = @group_links.pluck(:group_id)
@skip_groups << project.namespace_id unless project.personal?
end end
   
def create def create
Loading
@@ -19,7 +16,7 @@ class Projects::GroupLinksController < Projects::ApplicationController
Loading
@@ -19,7 +16,7 @@ class Projects::GroupLinksController < Projects::ApplicationController
project.project_group_links.create( project.project_group_links.create(
group: group, group: group,
group_access: params[:link_group_access], group_access: params[:link_group_access],
expires_at: params[:expires_at] expires_at: params[:expires_at] || params[:expires_at_groups]
) )
else else
flash[:alert] = 'Please select a group.' flash[:alert] = 'Please select a group.'
Loading
Loading
Loading
@@ -2,7 +2,7 @@ module Projects
Loading
@@ -2,7 +2,7 @@ module Projects
module Settings module Settings
class MembersController < Projects::ApplicationController class MembersController < Projects::ApplicationController
include SortingHelper include SortingHelper
def show def show
@sort = params[:sort].presence || sort_value_name @sort = params[:sort].presence || sort_value_name
@group_links = @project.project_group_links @group_links = @project.project_group_links
Loading
@@ -12,15 +12,18 @@ module Projects
Loading
@@ -12,15 +12,18 @@ module Projects
   
group = @project.group group = @project.group
   
# group links
@group_links = @project.project_group_links.all
@skip_groups = @group_links.pluck(:group_id)
@skip_groups << @project.namespace_id unless project.personal?
if group if group
# We need `.where.not(user_id: nil)` here otherwise when a group has an # 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 # invitee, it would make the following query return 0 rows since a NULL
# user_id would be present in the subquery # user_id would be present in the subquery
# See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values
# FIXME: This whole logic should be moved to a finder! group_members = MembersFinder.new(@project, @group)
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 end
   
if params[:search].present? if params[:search].present?
Loading
Loading
class MembersFinder < Projects::ApplicationController
def initialize(project_members, group)
@project_members = project_members
@group = group
end
def execute
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)
group_members
end
end
Loading
@@ -20,7 +20,7 @@
Loading
@@ -20,7 +20,7 @@
.form-group .form-group
= label_tag :expires_at, 'Access expiration date', class: 'label-light' = label_tag :expires_at, 'Access expiration date', class: 'label-light'
.clearable-input .clearable-input
= text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date' = text_field_tag :expires_at_groups, nil, class: 'form-control js-access-expiration-date-groups', placeholder: 'Select access expiration date'
%i.clear-icon.js-clear-input %i.clear-icon.js-clear-input
.help-block .help-block
On this date, all users in the group will automatically lose access to this project. On this date, all users in the group will automatically lose access to this project.
Loading
Loading
- page_title "Members" - page_title "Members"
   
=render "projects/project_members/index" = render "projects/project_members/index"
= render "projects/group_links/index"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment