diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-03-01 16:20:27 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-03-01 16:20:27 +0000 |
commit | b0fa5e7305f812d61e1a9a02e9181d01035d75f6 (patch) | |
tree | 5f01240f40688b1413ffd4789ef6f51c68da7212 /app | |
parent | 5bb2f5e211b7641a1b92a088e7250cd33d7d663d (diff) | |
download | redmine-b0fa5e7305f812d61e1a9a02e9181d01035d75f6.tar.gz redmine-b0fa5e7305f812d61e1a9a02e9181d01035d75f6.zip |
Merged r11513 from trunk (#13328).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.3-stable@11515 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/models/issue.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index e20208484..36beed6c4 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1146,20 +1146,27 @@ class Issue < ActiveRecord::Base end unless @copied_from.leaf? || @copy_options[:subtasks] == false - @copied_from.children.each do |child| + copy_options = (@copy_options || {}).merge(:subtasks => false) + copied_issue_ids = {@copied_from.id => self.id} + @copied_from.reload.descendants.reorder("#{Issue.table_name}.lft").each do |child| + # Do not copy self when copying an issue as a descendant of the copied issue + next if child == self + # Do not copy subtasks of issues that were not copied + next unless copied_issue_ids[child.parent_id] + # Do not copy subtasks that are not visible to avoid potential disclosure of private data unless child.visible? - # Do not copy subtasks that are not visible to avoid potential disclosure of private data logger.error "Subtask ##{child.id} was not copied during ##{@copied_from.id} copy because it is not visible to the current user" if logger next end - copy = Issue.new.copy_from(child, @copy_options) + copy = Issue.new.copy_from(child, copy_options) copy.author = author copy.project = project - copy.parent_issue_id = id - # Children subtasks are copied recursively + copy.parent_issue_id = copied_issue_ids[child.parent_id] unless copy.save logger.error "Could not copy subtask ##{child.id} while copying ##{@copied_from.id} to ##{id} due to validation errors: #{copy.errors.full_messages.join(', ')}" if logger + next end + copied_issue_ids[child.id] = copy.id end end @after_create_from_copy_handled = true |