From ea627ca98d2113fd07cc4c231398018e44fa9291 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 26 Aug 2008 10:34:26 +0000 Subject: [PATCH] One-click bulk edition using the issue list context menu within the same project (#1770). git-svn-id: http://redmine.rubyforge.org/svn/trunk@1765 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/issues_controller.rb | 12 +++-- app/views/issues/context_menu.rhtml | 56 +++++++++++++---------- 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 -%> +<% else %> +
  • <%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)}, + :class => 'icon-edit', :disabled => !@can[:edit] %>
  • +<% end %> +
  • <%= l(:field_priority) %>
  • - <% unless @project.versions.empty? -%> + <% unless @project.nil? || @project.versions.empty? -%>
  • <%= l(:field_fixed_version) %>
  • <% end %> + <% unless @assignables.nil? || @assignables.empty? -%>
  • <%= l(:field_assigned_to) %>
  • - <% unless @project.issue_categories.empty? -%> + <% end %> + <% unless @project.nil? || @project.issue_categories.empty? -%>
  • <%= l(:field_category) %>
  • <% end -%> @@ -61,22 +68,21 @@ <%= l(:field_done_ratio) %> + +<% if !@issue.nil? %> +
  • <%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue}, + :class => 'icon-copy', :disabled => !@can[:copy] %>
  • <% if @can[:log_time] -%>
  • <%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon-time' %>
  • <% end %> -
  • <%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue}, - :class => 'icon-copy', :disabled => !@can[:copy] %>
  • -<% else -%> -
  • <%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)}, - :class => 'icon-edit', :disabled => !@can[:edit] %>
  • -<% end -%> - +<% end %> +
  • <%= context_menu_link l(:button_move), {:controller => 'issues', :action => 'move', :ids => @issues.collect(&:id)}, :class => 'icon-move', :disabled => !@can[:move] %>
  • <%= 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' } -- 2.39.5