diff options
-rw-r--r-- | app/controllers/issues_controller.rb | 12 | ||||
-rw-r--r-- | app/views/issues/context_menu.rhtml | 56 | ||||
-rw-r--r-- | test/functional/issues_controller_test.rb | 10 |
3 files changed, 46 insertions, 32 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 6e2de17c9..3f7723226 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -247,7 +247,7 @@ class IssuesController < ApplicationController else flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, @issues.size, '#' + unsaved_issue_ids.join(', #')) end - redirect_to :controller => 'issues', :action => 'index', :project_id => @project + redirect_to(params[:back_to] || {:controller => 'issues', :action => 'index', :project_id => @project}) return end # Find potential statuses the user could be allowed to switch issues to @@ -326,20 +326,22 @@ class IssuesController < ApplicationController if (@issues.size == 1) @issue = @issues.first @allowed_statuses = @issue.new_statuses_allowed_to(User.current) - @assignables = @issue.assignable_users - @assignables << @issue.assigned_to if @issue.assigned_to && !@assignables.include?(@issue.assigned_to) end projects = @issues.collect(&:project).compact.uniq @project = projects.first if projects.size == 1 @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)), :log_time => (@project && User.current.allowed_to?(:log_time, @project)), - :update => (@issue && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && !@allowed_statuses.empty?))), + :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))), :move => (@project && User.current.allowed_to?(:move_issues, @project)), :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)), :delete => (@project && User.current.allowed_to?(:delete_issues, @project)) } - + if @project + @assignables = @project.assignable_users + @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to) + end + @priorities = Enumeration.get_values('IPRI').reverse @statuses = IssueStatus.find(:all, :order => 'position') @back = request.env['HTTP_REFERER'] diff --git a/app/views/issues/context_menu.rhtml b/app/views/issues/context_menu.rhtml index 0cdcd4733..671655db7 100644 --- a/app/views/issues/context_menu.rhtml +++ b/app/views/issues/context_menu.rhtml @@ -11,49 +11,56 @@ <% 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 %> + <li class="folder"> <a href="#" class="submenu"><%= l(:field_priority) %></a> <ul> <% @priorities.each do |p| -%> - <li><%= context_menu_link p.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[priority_id]' => p, :back_to => @back}, :method => :post, - :selected => (p == @issue.priority), :disabled => !@can[:edit] %></li> + <li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'priority_id' => p, :back_to => @back}, :method => :post, + :selected => (@issue && p == @issue.priority), :disabled => !@can[:edit] %></li> <% end -%> </ul> </li> - <% unless @project.versions.empty? -%> + <% unless @project.nil? || @project.versions.empty? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_fixed_version) %></a> <ul> <% @project.versions.sort.each do |v| -%> - <li><%= context_menu_link v.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[fixed_version_id]' => v, :back_to => @back}, :method => :post, - :selected => (v == @issue.fixed_version), :disabled => !@can[:update] %></li> + <li><%= context_menu_link v.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => v, :back_to => @back}, :method => :post, + :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:update] %></li> <% end -%> - <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[fixed_version_id]' => '', :back_to => @back}, :method => :post, - :selected => @issue.fixed_version.nil?, :disabled => !@can[:update] %></li> + <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => 'none', :back_to => @back}, :method => :post, + :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li> </ul> </li> <% end %> + <% unless @assignables.nil? || @assignables.empty? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_assigned_to) %></a> <ul> <% @assignables.each do |u| -%> - <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[assigned_to_id]' => u, :back_to => @back}, :method => :post, - :selected => (u == @issue.assigned_to), :disabled => !@can[:update] %></li> + <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => u, :back_to => @back}, :method => :post, + :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:update] %></li> <% end -%> - <li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[assigned_to_id]' => '', :back_to => @back}, :method => :post, - :selected => @issue.assigned_to.nil?, :disabled => !@can[:update] %></li> + <li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => 'none', :back_to => @back}, :method => :post, + :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li> </ul> </li> - <% unless @project.issue_categories.empty? -%> + <% end %> + <% unless @project.nil? || @project.issue_categories.empty? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_category) %></a> <ul> <% @project.issue_categories.each do |u| -%> - <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[category_id]' => u, :back_to => @back}, :method => :post, - :selected => (u == @issue.category), :disabled => !@can[:update] %></li> + <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => u, :back_to => @back}, :method => :post, + :selected => (@issue && u == @issue.category), :disabled => !@can[:update] %></li> <% end -%> - <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[category_id]' => '', :back_to => @back}, :method => :post, - :selected => @issue.category.nil?, :disabled => !@can[:update] %></li> + <li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => 'none', :back_to => @back}, :method => :post, + :selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li> </ul> </li> <% end -%> @@ -61,22 +68,21 @@ <a href="#" class="submenu"><%= l(:field_done_ratio) %></a> <ul> <% (0..10).map{|x|x*10}.each do |p| -%> - <li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[done_ratio]' => p, :back_to => @back}, :method => :post, - :selected => (p == @issue.done_ratio), :disabled => !@can[:edit] %></li> + <li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'done_ratio' => p, :back_to => @back}, :method => :post, + :selected => (@issue && p == @issue.done_ratio), :disabled => !@can[:edit] %></li> <% end -%> </ul> </li> + +<% if !@issue.nil? %> + <li><%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue}, + :class => 'icon-copy', :disabled => !@can[:copy] %></li> <% if @can[:log_time] -%> <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon-time' %></li> <% end %> - <li><%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue}, - :class => 'icon-copy', :disabled => !@can[:copy] %></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 %> + <li><%= context_menu_link l(:button_move), {:controller => 'issues', :action => 'move', :ids => @issues.collect(&:id)}, :class => 'icon-move', :disabled => !@can[:move] %></li> <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)}, diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 005542f81..a248d8bde 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -532,10 +532,10 @@ class IssuesControllerTest < Test::Unit::TestCase :attributes => { :href => '/issues/edit/1?issue%5Bstatus_id%5D=5', :class => '' } assert_tag :tag => 'a', :content => 'Immediate', - :attributes => { :href => '/issues/edit/1?issue%5Bpriority_id%5D=8', + :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&priority_id=8', :class => '' } assert_tag :tag => 'a', :content => 'Dave Lopper', - :attributes => { :href => '/issues/edit/1?issue%5Bassigned_to_id%5D=3', + :attributes => { :href => '/issues/bulk_edit?assigned_to_id=3&ids%5B%5D=1', :class => '' } assert_tag :tag => 'a', :content => 'Copy', :attributes => { :href => '/projects/ecookbook/issues/new?copy_from=1', @@ -565,6 +565,12 @@ class IssuesControllerTest < Test::Unit::TestCase assert_tag :tag => 'a', :content => 'Edit', :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&ids%5B%5D=2', :class => 'icon-edit' } + assert_tag :tag => 'a', :content => 'Immediate', + :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&ids%5B%5D=2&priority_id=8', + :class => '' } + assert_tag :tag => 'a', :content => 'Dave Lopper', + :attributes => { :href => '/issues/bulk_edit?assigned_to_id=3&ids%5B%5D=1&ids%5B%5D=2', + :class => '' } assert_tag :tag => 'a', :content => 'Move', :attributes => { :href => '/issues/move?ids%5B%5D=1&ids%5B%5D=2', :class => 'icon-move' } |