diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index d67f038..4a12b9b 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -95,6 +95,9 @@ class GroupsController < ApplicationController
end
end
+ def new_users
+ end
+
def add_users
@users = User.where(:id => (params[:user_id] || params[:user_ids])).to_a
@group.users << @users if request.post?
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 315be99..4275f29 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -32,7 +32,10 @@ module GroupsHelper
principal_pages = Redmine::Pagination::Paginator.new principal_count, 100, params['page']
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).to_a
- s = content_tag('div', principals_check_box_tags('user_ids[]', principals), :id => 'principals')
+ s = content_tag('div',
+ content_tag('div', principals_check_box_tags('user_ids[]', principals), :id => 'principals'),
+ :class => 'objects-selection'
+ )
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, autocomplete_for_user_group_path(group, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
diff --git a/app/views/groups/_new_users_form.html.erb b/app/views/groups/_new_users_form.html.erb
new file mode 100644
index 0000000..5c33a96
--- /dev/null
+++ b/app/views/groups/_new_users_form.html.erb
@@ -0,0 +1,9 @@
+
diff --git a/app/views/groups/_new_users_modal.html.erb b/app/views/groups/_new_users_modal.html.erb
new file mode 100644
index 0000000..eb2e985
--- /dev/null
+++ b/app/views/groups/_new_users_modal.html.erb
@@ -0,0 +1,9 @@
+<%= l(:label_user_new) %>
+
+<%= form_for(@group, :url => group_users_path(@group), :remote => true, :method => :post) do |f| %>
+ <%= render :partial => 'new_users_form' %>
+
+ <%= submit_tag l(:button_add) %>
+ <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
+
+<% end %>
diff --git a/app/views/groups/_users.html.erb b/app/views/groups/_users.html.erb
index 13f85c8..391edf4 100644
--- a/app/views/groups/_users.html.erb
+++ b/app/views/groups/_users.html.erb
@@ -1,4 +1,5 @@
-
+
<%= link_to l(:label_user_new), new_group_users_path(@group), :remote => true, :class => "icon icon-add" %>
+
<% if @group.users.any? %>
@@ -19,21 +20,3 @@
<% else %>
<%= l(:label_no_data) %>
<% end %>
-
-
-
- <%= form_for(@group, :remote => true, :url => group_users_path(@group),
- :html => {:method => :post}) do |f| %>
-
- <% end %>
-
diff --git a/app/views/groups/add_users.js.erb b/app/views/groups/add_users.js.erb
index 460527b..e4af93a 100644
--- a/app/views/groups/add_users.js.erb
+++ b/app/views/groups/add_users.js.erb
@@ -1,3 +1,4 @@
+hideModal();
$('#tab-content-users').html('<%= escape_javascript(render :partial => 'groups/users') %>');
<% @users.each do |user| %>
$('#user-<%= user.id %>').effect("highlight");
diff --git a/app/views/groups/new_users.html.erb b/app/views/groups/new_users.html.erb
new file mode 100644
index 0000000..8875a83
--- /dev/null
+++ b/app/views/groups/new_users.html.erb
@@ -0,0 +1,6 @@
+<%= l(:label_user_new) %>
+
+<%= form_for(@group, :url => group_users_path(@group), :method => :post) do |f| %>
+ <%= render :partial => 'new_users_form' %>
+ <%= submit_tag l(:button_add) %>
+<% end %>
diff --git a/app/views/groups/new_users.js.erb b/app/views/groups/new_users.js.erb
new file mode 100644
index 0000000..1775abe
--- /dev/null
+++ b/app/views/groups/new_users.js.erb
@@ -0,0 +1,2 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'groups/new_users_modal') %>');
+showModal('ajax-modal', '700px');
diff --git a/config/routes.rb b/config/routes.rb
index f2ddba1..5fe1cf7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -274,8 +274,9 @@ Rails.application.routes.draw do
end
end
- match 'groups/:id/users', :controller => 'groups', :action => 'add_users', :id => /\d+/, :via => :post, :as => 'group_users'
- match 'groups/:id/users/:user_id', :controller => 'groups', :action => 'remove_user', :id => /\d+/, :via => :delete, :as => 'group_user'
+ get 'groups/:id/users/new', :to => 'groups#new_users', :id => /\d+/, :as => 'new_group_users'
+ post 'groups/:id/users', :to => 'groups#add_users', :id => /\d+/, :as => 'group_users'
+ delete 'groups/:id/users/:user_id', :to => 'groups#remove_user', :id => /\d+/, :as => 'group_user'
resources :trackers, :except => :show do
collection do
diff --git a/test/functional/groups_controller_test.rb b/test/functional/groups_controller_test.rb
index 778b3f3..f2fa5f0 100644
--- a/test/functional/groups_controller_test.rb
+++ b/test/functional/groups_controller_test.rb
@@ -113,6 +113,18 @@ class GroupsControllerTest < ActionController::TestCase
assert_redirected_to '/groups'
end
+ def test_new_users
+ get :new_users, :id => 10
+ assert_response :success
+ assert_template 'new_users'
+ end
+
+ def test_xhr_new_users
+ xhr :get, :new_users, :id => 10
+ assert_response :success
+ assert_equal 'text/javascript', response.content_type
+ end
+
def test_add_users
assert_difference 'Group.find(10).users.count', 2 do
post :add_users, :id => 10, :user_ids => ['2', '3']
diff --git a/test/integration/routing/groups_test.rb b/test/integration/routing/groups_test.rb
index ea6e737..4171a0e 100644
--- a/test/integration/routing/groups_test.rb
+++ b/test/integration/routing/groups_test.rb
@@ -79,6 +79,10 @@ class RoutingGroupsTest < ActionDispatch::IntegrationTest
def test_groups
assert_routing(
+ { :method => 'get', :path => "/groups/567/users/new" },
+ { :controller => 'groups', :action => 'new_users', :id => '567' }
+ )
+ assert_routing(
{ :method => 'post', :path => "/groups/567/users" },
{ :controller => 'groups', :action => 'add_users', :id => '567' }
)