Commit e12c9ee2bc76026b146ea1b29fd0acc5ac696d34

Authored by Dmitriy Zaporozhets
1 parent c9fb7e39

Added UsersGroup scaffold. Simplify adding people to group

app/assets/javascripts/dispatcher.js.coffee
... ... @@ -32,6 +32,8 @@ class Dispatcher
32 32 new Wall(project_id)
33 33 when 'teams:members:index'
34 34 new TeamMembers()
  35 + when 'groups:people'
  36 + new GroupMembers()
35 37  
36 38 switch path.first()
37 39 when 'admin' then new Admin()
... ...
app/assets/javascripts/groups.js.coffee 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +class GroupMembers
  2 + constructor: ->
  3 + $('li.users_group').bind 'ajax:success', ->
  4 + $(this).fadeOut()
  5 +
  6 +@GroupMembers = GroupMembers
... ...
app/controllers/groups_controller.rb
1 1 class GroupsController < ApplicationController
2 2 respond_to :html
3   - before_filter :group, except: [:new, :create]
  3 + before_filter :group, except: [:new, :create, :people]
4 4  
5 5 # Authorize
6 6 before_filter :authorize_read_group!, except: [:new, :create]
... ... @@ -63,20 +63,8 @@ class GroupsController &lt; ApplicationController
63 63  
64 64 def people
65 65 @project = group.projects.find(params[:project_id]) if params[:project_id]
66   -
67   - if @project
68   - @members = @project.users_projects
69   - @team_member = @project.users_projects.new
70   - else
71   - @members = group.users_groups
72   - @team_member = UsersGroup.new
73   - end
74   - end
75   -
76   - def team_members
77   - @group.add_users(params[:user_ids].split(','), params[:group_access])
78   -
79   - redirect_to people_group_path(@group), notice: 'Users were successfully added.'
  66 + @members = group.users_groups
  67 + @users_group = UsersGroup.new
80 68 end
81 69  
82 70 def edit
... ...
app/controllers/users_groups_controller.rb 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +class UsersGroupsController < ApplicationController
  2 + before_filter :group
  3 +
  4 + # Authorize
  5 + before_filter :authorize_admin_group!
  6 +
  7 + layout 'group'
  8 +
  9 + def create
  10 + @group.add_users(params[:user_ids].split(','), params[:group_access])
  11 +
  12 + redirect_to people_group_path(@group), notice: 'Users were successfully added.'
  13 + end
  14 +
  15 + def update
  16 + # TODO: implement
  17 + end
  18 +
  19 + def destroy
  20 + @users_group = @group.users_groups.find(params[:id])
  21 + @users_group.destroy
  22 +
  23 + respond_to do |format|
  24 + format.html { redirect_to people_group_path(@group), notice: 'User was successfully removed from group.' }
  25 + format.js { render nothing: true }
  26 + end
  27 + end
  28 +
  29 + protected
  30 +
  31 + def group
  32 + @group ||= Group.find_by_path(params[:group_id])
  33 + end
  34 +
  35 + def authorize_admin_group!
  36 + unless can?(current_user, :manage_group, group)
  37 + return render_404
  38 + end
  39 + end
  40 +end
... ...
app/helpers/groups_helper.rb
... ... @@ -14,4 +14,8 @@ module GroupsHelper
14 14 merge_requests_group_path(@group, options)
15 15 end
16 16 end
  17 +
  18 + def remove_user_from_group_message(group, user)
  19 + "You are going to remove #{user.name} from #{group.name} Group. Are you sure?"
  20 + end
17 21 end
... ...
app/models/users_group.rb
... ... @@ -32,6 +32,7 @@ class UsersGroup &lt; ActiveRecord::Base
32 32 validates :group_access, inclusion: { in: UsersGroup.group_access_roles.values }, presence: true
33 33 validates :user_id, presence: true
34 34 validates :group_id, presence: true
  35 + validates :user_id, uniqueness: { scope: [:group_id], message: "already exists in group" }
35 36  
36 37 delegate :name, :username, :email, to: :user, prefix: true
37 38  
... ...
app/views/groups/_new_group_member.html.haml
1   -= form_for @team_member, as: :team_member, url: team_members_group_path(@group) do |f|
  1 += form_for @users_group, url: group_users_groups_path(@group) do |f|
2 2 %fieldset
3 3 %legend= "New Group member(s) for #{@group.name}"
4 4  
5 5 %h6 1. Choose people you want in the group
6 6 .clearfix
7 7 = f.label :user_ids, "People"
8   - .input= users_select_tag(:user_ids, multiple: true)
  8 + .input= users_select_tag(:user_ids, multiple: true, class: 'input-large')
9 9  
10 10 %h6 2. Set access level for them
11 11 .clearfix
12 12 = f.label :group_access, "Group Access"
13   - .input= select_tag :group_access, options_for_select(UsersGroup.group_access_roles, @team_member.group_access), class: "project-access-select chosen"
  13 + .input= select_tag :group_access, options_for_select(UsersGroup.group_access_roles, @users_group.group_access), class: "project-access-select chosen"
14 14  
15 15 .form-actions
16 16 = hidden_field_tag :redirect_to, people_group_path(@group)
... ...
app/views/groups/_new_member.html.haml
... ... @@ -1,18 +0,0 @@
1   -= form_for @team_member, as: :team_member, url: project_team_members_path(@project, @team_member) do |f|
2   - %fieldset
3   - %legend= "New Project member(s) for #{@project.name}"
4   -
5   - %h6 1. Choose people you want in the project
6   - .clearfix
7   - = f.label :user_ids, "People"
8   - .input= users_select_tag(:user_ids, multiple: true)
9   -
10   - %h6 2. Set access level for them
11   - .clearfix
12   - = f.label :project_access, "Project Access"
13   - .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select chosen"
14   -
15   - .form-actions
16   - = hidden_field_tag :redirect_to, people_group_path(@group, project_id: @project.id)
17   - = f.submit 'Add users into project', class: "btn btn-create"
18   -
app/views/groups/_people_filter.html.haml
... ... @@ -1,22 +0,0 @@
1   -%fieldset
2   - %legend Group members:
3   - %ul.nav.nav-pills.nav-stacked
4   - %li{class: ("active" if params[:project_id].blank?)}
5   - = link_to people_group_path(@group) do
6   - #{@group.name} Group
7   - %small.pull-right= @group.users.count
8   -
9   -
10   -= form_tag people_group_path(@group), method: 'get' do
11   - %fieldset
12   - %legend Project members:
13   - %ul.nav.nav-pills.nav-stacked
14   - - @projects.each do |project|
15   - %li{class: ("active" if params[:project_id] == project.id.to_s)}
16   - = link_to people_group_path(@group, project_id: project.id) do
17   - = project.name_with_namespace
18   - %small.pull-right= project.users.count
19   - - if @projects.blank?
20   - %p.nothing_here_message This group has no projects yet
21   -
22   -
app/views/groups/people.html.haml
  1 +- can_manage_group = current_user.can? :manage_group, @group
1 2 .row
2   - .span3
3   - = render 'people_filter'
4   - .span9
5   - - if can?(current_user, :manage_group, @group)
6   - = render (@project ? "new_member" : "new_group_member")
  3 + .span6
  4 + = render "new_group_member"
  5 + .span6
7 6 .ui-box
8 7 %h5.title
9   - - if @project
10   - #{@project.name} Project Members
11   - %small
12   - (#{@members.count})
13   - - else
14   - #{@group.name} Group Members
15   - %small
16   - (#{@members.count})
  8 + #{@group.name} Group Members
  9 + %small
  10 + (#{@members.count})
17 11 %ul.well-list
18 12 - @members.each do |member|
19   - = render 'users_groups/users_group', member: member
  13 + = render 'users_groups/users_group', member: member, show_controls: can_manage_group
  14 + %p.light
  15 + Group members get access to all projects in this group
... ...
app/views/users_groups/_users_group.html.haml
1 1 - user = member.user
2 2 - return unless user
3   -%li
  3 +%li{class: dom_class(member)}
4 4 = image_tag gravatar_icon(user.email, 16), class: "avatar s16"
5 5 %strong= user.name
6 6 %span.cgray= user.username
... ... @@ -10,3 +10,7 @@
10 10 %span.label.label-info Group Owner
11 11 - else
12 12 = member.human_access
  13 +
  14 + - if show_controls && user != current_user
  15 + = link_to group_users_group_path(@group, member), confirm: remove_user_from_group_message(@group, user), method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
  16 + %i.icon-minus.icon-white
... ...
config/routes.rb
... ... @@ -149,10 +149,10 @@ Gitlab::Application.routes.draw do
149 149 member do
150 150 get :issues
151 151 get :merge_requests
152   - get :search
153 152 get :people
154   - post :team_members
155 153 end
  154 +
  155 + resources :users_groups, only: [:create, :update, :destroy]
156 156 end
157 157  
158 158 #
... ...