Commit fa8c0c78136c1a3bcff2bff042affcfee973c6e1

Authored by Dmitriy Zaporozhets
1 parent f6f72d4b

Admin area: add multiple users to project

app/controllers/admin/projects_controller.rb
... ... @@ -19,6 +19,24 @@ class Admin::ProjectsController < ApplicationController
19 19 @admin_project = Project.find_by_code(params[:id])
20 20 end
21 21  
  22 + def team
  23 + @admin_project = Project.find_by_code(params[:id])
  24 + @users = User.not_in_project(@admin_project).all
  25 + end
  26 +
  27 + def team_update
  28 + @admin_project = Project.find_by_code(params[:id])
  29 +
  30 + UsersProject.bulk_import(
  31 + @admin_project,
  32 + params[:user_ids],
  33 + params[:project_access],
  34 + params[:repo_access]
  35 + )
  36 +
  37 + redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.'
  38 + end
  39 +
22 40 def create
23 41 @admin_project = Project.new(params[:project])
24 42 @admin_project.owner = current_user
... ...
app/models/users_project.rb
... ... @@ -13,6 +13,20 @@ class UsersProject < ActiveRecord::Base
13 13  
14 14 delegate :name, :email, :to => :user, :prefix => true
15 15  
  16 + def self.bulk_import(project, user_ids, project_access, repo_access)
  17 + UsersProject.transaction do
  18 + user_ids.each do |user_id|
  19 + users_project = UsersProject.new(
  20 + :repo_access => repo_access,
  21 + :project_access => project_access,
  22 + :user_id => user_id
  23 + )
  24 + users_project.project = project
  25 + users_project.save
  26 + end
  27 + end
  28 + end
  29 +
16 30 def update_repository
17 31 Gitlabhq::GitHost.system.new.configure do |c|
18 32 c.update_project(project.path, project)
... ...
app/views/admin/projects/show.html.haml
... ... @@ -57,3 +57,4 @@
57 57 %td= link_to 'Destroy', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
58 58  
59 59 = link_to 'New Team Member', new_admin_team_member_path(:team_member => {:project_id => @admin_project.id}), :class => "grey-button"
  60 + .right= link_to 'Bulk Import', team_admin_project_path(@admin_project), :class => "grey-button"
... ...
app/views/admin/projects/team.html.haml 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 += form_tag team_update_admin_project_path(@admin_project), :class => "bulk_import", :method => :put do
  2 + .span-6
  3 + %b Project Access:
  4 + .span-6
  5 + = select_tag :project_access, options_for_select(Project.access_options), :class => "project-access-select"
  6 +
  7 + .span-6
  8 + %b Repository Access:
  9 + .span-6
  10 + = select_tag :repo_access, options_for_select(Repository.access_options), :class => "repo-access-select"
  11 +
  12 + %br
  13 + = select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), :multiple => true
  14 +
  15 + %br
  16 + .clear
  17 + %br
  18 + .actions
  19 + = submit_tag 'Save', :class => "grey-button"
  20 +
  21 +:css
  22 + form select {
  23 + width:300px;
  24 + }
  25 +
  26 +
  27 +:javascript
  28 + $('select#user_ids').chosen();
  29 + $('select#repo_access').chosen();
  30 + $('select#project_access').chosen();
... ...
config/routes.rb
... ... @@ -10,7 +10,12 @@ Gitlab::Application.routes.draw do
10 10  
11 11 namespace :admin do
12 12 resources :users
13   - resources :projects, :constraints => { :id => /[^\/]+/ }
  13 + resources :projects, :constraints => { :id => /[^\/]+/ } do
  14 + member do
  15 + get :team
  16 + put :team_update
  17 + end
  18 + end
14 19 resources :team_members
15 20 get 'emails', :to => 'mailer#preview'
16 21 get 'mailer/preview_note'
... ...