From 156eca4d223efce4abd67c9ef7b129a3d07d83e6 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Fri, 8 Oct 2010 03:09:51 +0000 Subject: [PATCH] Added ability to edit issues from different project through contextual menu (#5332) git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4242 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/context_menus_controller.rb | 8 +++- app/controllers/issues_controller.rb | 8 ++-- app/views/context_menus/issues.html.erb | 5 +- app/views/issues/bulk_edit.rhtml | 9 +++- .../context_menus_controller_test.rb | 12 +++++ test/functional/issues_controller_test.rb | 46 +++++++++++++++++++ 6 files changed, 78 insertions(+), 10 deletions(-) diff --git a/app/controllers/context_menus_controller.rb b/app/controllers/context_menus_controller.rb index ae8517243..3e1438306 100644 --- a/app/controllers/context_menus_controller.rb +++ b/app/controllers/context_menus_controller.rb @@ -16,9 +16,9 @@ class ContextMenusController < ApplicationController @projects = @issues.collect(&:project).compact.uniq @project = @projects.first if @projects.size == 1 - @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)), + @can = {:edit => User.current.allowed_to?(:edit_issues, @projects), :log_time => (@project && User.current.allowed_to?(:log_time, @project)), - :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))), + :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)), :move => (@project && User.current.allowed_to?(:move_issues, @project)), :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)), :delete => User.current.allowed_to?(:delete_issues, @projects) @@ -27,6 +27,10 @@ class ContextMenusController < ApplicationController @assignables = @project.assignable_users @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to) @trackers = @project.trackers + else + #when multiple projects, we only keep the intersection of each set + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end @priorities = IssuePriority.all.reverse diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 2221db871..67488b753 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -21,7 +21,7 @@ class IssuesController < ApplicationController before_filter :find_issue, :only => [:show, :edit, :update] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy] - before_filter :check_project_uniqueness, :only => [:bulk_edit, :bulk_update, :move, :perform_move] + before_filter :check_project_uniqueness, :only => [:move, :perform_move] before_filter :find_project, :only => [:new, :create] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => [:index] @@ -194,8 +194,10 @@ class IssuesController < ApplicationController # Bulk edit a set of issues def bulk_edit @issues.sort! - @available_statuses = Workflow.available_statuses(@project) - @custom_fields = @project.all_issue_custom_fields + @available_statuses = @projects.map{|p|Workflow.available_statuses(p)}.inject{|memo,w|memo & w} + @custom_fields = @projects.map{|p|p.all_issue_custom_fields}.inject{|memo,c|memo & c} + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end def bulk_update diff --git a/app/views/context_menus/issues.html.erb b/app/views/context_menus/issues.html.erb index 3f45f4ea2..3109ac4dd 100644 --- a/app/views/context_menus/issues.html.erb +++ b/app/views/context_menus/issues.html.erb @@ -33,7 +33,6 @@ <% end %> - <% if @projects.size == 1 %>
  • <%= l(:field_priority) %>
  • - <% end %> + <% #TODO: allow editing versions when multiple projects %> <% unless @project.nil? || @project.shared_versions.open.empty? -%>
  • <%= l(:field_fixed_version) %> @@ -85,7 +84,7 @@
  • <% end -%> - <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %> + <% if Issue.use_field_for_done_ratio? %>
  • <%= l(:field_done_ratio) %>