OSDN Git Service

Allow mass status update through context menu. #3411
authorJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Fri, 3 Sep 2010 19:54:24 +0000 (19:54 +0000)
committerJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Fri, 3 Sep 2010 19:54:24 +0000 (19:54 +0000)
NB: it cannot be done with issues from different projects, same as
other fields. This will be addressed separately, see #5332.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4055 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/context_menus_controller.rb
app/views/context_menus/issues.html.erb
test/functional/context_menus_controller_test.rb

index 442f85b..e437a18 100644 (file)
@@ -6,6 +6,12 @@ class ContextMenusController < ApplicationController
     if (@issues.size == 1)
       @issue = @issues.first
       @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
+    else
+      @allowed_statuses = @issues.map do |i|
+        i.new_statuses_allowed_to(User.current)
+      end.inject do |memo,s|
+        memo & s
+      end
     end
     projects = @issues.collect(&:project).compact.uniq
     @project = projects.first if projects.size == 1
index dc11b5f..efd8cde 100644 (file)
@@ -4,19 +4,22 @@
 <% if !@issue.nil? -%>
        <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
                :class => 'icon-edit', :disabled => !@can[:edit] %></li>
+<% else %>
+       <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
+               :class => 'icon-edit', :disabled => !@can[:edit] %></li>
+<% end %>
+
+  <% unless @allowed_statuses.empty? %>
        <li class="folder">                     
                <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
                <ul>
                <% @statuses.each do |s| -%>
-                   <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'update', :id => @issue, :issue => {:status_id => s}, :back_url => @back}, :method => :put,
-                                             :selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
+                   <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {:status_id => s}, :back_url => @back}, :method => :post,
+                                             :selected => (@issue && s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
                <% end -%>
                </ul>
        </li>
-<% else %>
-       <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
-               :class => 'icon-edit', :disabled => !@can[:edit] %></li>
-<% end %>
+  <% end %>
 
        <% unless @trackers.nil? %>
        <li class="folder">                     
index 7643508..0ebae69 100644 (file)
@@ -12,7 +12,7 @@ class ContextMenusControllerTest < ActionController::TestCase
                             :attributes => { :href => '/issues/1/edit',
                                              :class => 'icon-edit' }
     assert_tag :tag => 'a', :content => 'Closed',
-                            :attributes => { :href => '/issues/1?issue%5Bstatus_id%5D=5',
+                            :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;issue%5Bstatus_id%5D=5',
                                              :class => '' }
     assert_tag :tag => 'a', :content => 'Immediate',
                             :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;issue%5Bpriority_id%5D=8',
@@ -59,6 +59,9 @@ class ContextMenusControllerTest < ActionController::TestCase
     assert_tag :tag => 'a', :content => 'Edit',
                             :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;ids%5B%5D=2',
                                              :class => 'icon-edit' }
+    assert_tag :tag => 'a', :content => 'Closed',
+                            :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;ids%5B%5D=2&amp;issue%5Bstatus_id%5D=5',
+                                             :class => '' }
     assert_tag :tag => 'a', :content => 'Immediate',
                             :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;ids%5B%5D=2&amp;issue%5Bpriority_id%5D=8',
                                              :class => '' }