Merged r9404, r9405 from trunk.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.4-stable@9411 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2012-04-14 06:54:02 +00:00
parent 2c0ba78f70
commit fd450fd2da
5 changed files with 120 additions and 37 deletions
+23 -19
View File
@@ -145,8 +145,8 @@ class Issue < ActiveRecord::Base
end
# Returns an unsaved copy of the issue
def copy(attributes=nil)
copy = self.class.new.copy_from(self)
def copy(attributes=nil, copy_options={})
copy = self.class.new.copy_from(self, copy_options)
copy.attributes = attributes if attributes
copy
end
@@ -511,24 +511,28 @@ class Issue < ActiveRecord::Base
# Returns an array of statuses that user is able to apply
def new_statuses_allowed_to(user=User.current, include_default=false)
initial_status = nil
if new_record?
initial_status = IssueStatus.default
elsif status_id_was
initial_status = IssueStatus.find_by_id(status_id_was)
if new_record? && @copied_from
[IssueStatus.default, @copied_from.status].compact.uniq.sort
else
initial_status = nil
if new_record?
initial_status = IssueStatus.default
elsif status_id_was
initial_status = IssueStatus.find_by_id(status_id_was)
end
initial_status ||= status
statuses = initial_status.find_new_statuses_allowed_to(
user.admin ? Role.all : user.roles_for_project(project),
tracker,
author == user,
assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
)
statuses << initial_status unless statuses.empty?
statuses << IssueStatus.default if include_default
statuses = statuses.compact.uniq.sort
blocked? ? statuses.reject {|s| s.is_closed?} : statuses
end
initial_status ||= status
statuses = initial_status.find_new_statuses_allowed_to(
user.admin ? Role.all : user.roles_for_project(project),
tracker,
author == user,
assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
)
statuses << initial_status unless statuses.empty?
statuses << IssueStatus.default if include_default
statuses = statuses.compact.uniq.sort
blocked? ? statuses.reject {|s| s.is_closed?} : statuses
end
def assigned_to_was