OSDN Git Service

Admin area: add multiple users to project
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Sat, 21 Jan 2012 16:06:14 +0000 (18:06 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Sat, 21 Jan 2012 16:06:14 +0000 (18:06 +0200)
app/controllers/admin/projects_controller.rb
app/models/users_project.rb
app/views/admin/projects/show.html.haml
app/views/admin/projects/team.html.haml [new file with mode: 0644]
config/routes.rb

index 21b25fc..676a40a 100644 (file)
@@ -19,6 +19,24 @@ class Admin::ProjectsController < ApplicationController
     @admin_project = Project.find_by_code(params[:id])
   end
 
+  def team
+    @admin_project = Project.find_by_code(params[:id])
+    @users = User.not_in_project(@admin_project).all
+  end
+
+  def team_update
+    @admin_project = Project.find_by_code(params[:id])
+
+    UsersProject.bulk_import(
+      @admin_project, 
+      params[:user_ids],
+      params[:project_access],
+      params[:repo_access]
+    )
+
+    redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.'
+  end
+
   def create
     @admin_project = Project.new(params[:project])
     @admin_project.owner = current_user
index 6fd067c..b98aa1f 100644 (file)
@@ -13,6 +13,20 @@ class UsersProject < ActiveRecord::Base
 
   delegate :name, :email, :to => :user, :prefix => true
 
+  def self.bulk_import(project, user_ids, project_access, repo_access)
+    UsersProject.transaction do
+      user_ids.each do |user_id|
+        users_project = UsersProject.new(
+          :repo_access => repo_access,
+          :project_access => project_access,
+          :user_id => user_id
+        )
+        users_project.project = project
+        users_project.save
+      end
+    end
+  end
+
   def update_repository
     Gitlabhq::GitHost.system.new.configure do |c|
       c.update_project(project.path, project)
index cd7a3a8..74cfbb7 100644 (file)
@@ -57,3 +57,4 @@
         %td= link_to 'Destroy', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
 
   = link_to 'New Team Member', new_admin_team_member_path(:team_member => {:project_id => @admin_project.id}),  :class => "grey-button"
+  .right= link_to 'Bulk Import', team_admin_project_path(@admin_project),  :class => "grey-button"
diff --git a/app/views/admin/projects/team.html.haml b/app/views/admin/projects/team.html.haml
new file mode 100644 (file)
index 0000000..c032d58
--- /dev/null
@@ -0,0 +1,30 @@
+= form_tag team_update_admin_project_path(@admin_project), :class => "bulk_import", :method => :put  do 
+  .span-6
+    %b Project Access:
+  .span-6
+    = select_tag :project_access, options_for_select(Project.access_options), :class => "project-access-select"
+
+  .span-6
+    %b Repository Access:
+  .span-6
+    = select_tag :repo_access, options_for_select(Repository.access_options), :class => "repo-access-select"
+
+  %br
+  = select_tag :user_ids, options_from_collection_for_select(@users , :id, :name),  :multiple => true
+
+  %br
+  .clear
+  %br
+  .actions
+    = submit_tag 'Save', :class => "grey-button"
+
+:css 
+  form select { 
+    width:300px;
+  }
+
+  
+:javascript 
+  $('select#user_ids').chosen();
+  $('select#repo_access').chosen();
+  $('select#project_access').chosen();
index 4f0e6fc..b8149f8 100644 (file)
@@ -10,7 +10,12 @@ Gitlab::Application.routes.draw do
 
   namespace :admin do
     resources :users
-    resources :projects, :constraints => { :id => /[^\/]+/ }
+    resources :projects, :constraints => { :id => /[^\/]+/ } do 
+      member do 
+        get :team
+        put :team_update
+      end
+    end
     resources :team_members
     get 'emails', :to => 'mailer#preview'
     get 'mailer/preview_note'