]> source.dussan.org Git - redmine.git/commitdiff
Fixes repository user mapping submission when a repository username is blank (#2339...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 15 Dec 2008 18:02:25 +0000 (18:02 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 15 Dec 2008 18:02:25 +0000 (18:02 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2137 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/repositories_controller.rb
app/views/repositories/committers.rhtml
test/functional/repositories_controller_test.rb

index 4b1ecc221f9c890d5659ec5cd56d65f6f4af3cd6..dc2acee3a02c7c5c5559c71146a6b608db794add 100644 (file)
@@ -51,8 +51,9 @@ class RepositoriesController < ApplicationController
     @users += User.find_all_by_id(additional_user_ids) unless additional_user_ids.empty?
     @users.compact!
     @users.sort!
-    if request.post?
-      @repository.committer_ids = params[:committers]
+    if request.post? && params[:committers].is_a?(Hash)
+      # Build a hash with repository usernames as keys and corresponding user ids as values
+      @repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h}
       flash[:notice] = l(:notice_successful_update)
       redirect_to :action => 'committers', :id => @project
     end
index 6e3ba83b42d75827a7a0db78e1c7bd136490bcff..597a414aa481f29cc0fba92f18b4839989a2d8c8 100644 (file)
        </tr>
 </thead>
 <tbody>
+<% i = 0 -%>
 <% @committers.each do |committer, user_id| -%>
        <tr class="<%= cycle 'odd', 'even' %>">
                <td><%=h committer %></td>
-               <td><%= select_tag "committers[#{committer}]", content_tag('option', "-- #{l :actionview_instancetag_blank_option} --", :value => '') + options_from_collection_for_select(@users, 'id', 'name', user_id.to_i) %></td>
+               <td>
+                       <%= hidden_field_tag "committers[#{i}][]", committer %>
+                       <%= select_tag "committers[#{i}][]", content_tag('option', "-- #{l :actionview_instancetag_blank_option} --", :value => '') + options_from_collection_for_select(@users, 'id', 'name', user_id.to_i) %>
+               </td>
        </tr>
+       <% i += 1 -%>
 <% end -%>
 </tbody>
 </table>
index 4bb9c3fa39f0222503a301c8dd979754ebf88dd3..972c57e00bd3ac59e126a6bc125a80bc88ebd17d 100644 (file)
@@ -73,12 +73,12 @@ class RepositoriesControllerTest < Test::Unit::TestCase
     
     assert_tag :td, :content => 'dlopper',
                     :sibling => { :tag => 'td',
-                                  :child => { :tag => 'select', :attributes => { :name => 'committers[dlopper]' },
+                                  :child => { :tag => 'select', :attributes => { :name => %r{^committers\[\d+\]\[\]$} },
                                                                 :child => { :tag => 'option', :content => 'Dave Lopper',
                                                                                               :attributes => { :value => '3', :selected => 'selected' }}}}
     assert_tag :td, :content => 'foo',
                     :sibling => { :tag => 'td',
-                                  :child => { :tag => 'select', :attributes => { :name => 'committers[foo]' }}}
+                                  :child => { :tag => 'select', :attributes => { :name => %r{^committers\[\d+\]\[\]$} }}}
     assert_no_tag :td, :content => 'foo',
                        :sibling => { :tag => 'td',
                                      :descendant => { :tag => 'option', :attributes => { :selected => 'selected' }}}
@@ -90,7 +90,7 @@ class RepositoriesControllerTest < Test::Unit::TestCase
     c = Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
     
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
-      post :committers, :id => 1, :committers => { 'foo' => '2', 'dlopper' => '3'}
+      post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
       assert_redirected_to '/repositories/committers/ecookbook'
       assert_equal User.find(2), c.reload.user
     end