Defect #17068 » #17068-copy-subtask-issue-relationships_for5.3.1.patch
| app/models/issue.rb | ||
|---|---|---|
| 1750 | 1750 | |
| 1751 | 1751 |
unless @copied_from.leaf? || @copy_options[:subtasks] == false |
| 1752 | 1752 |
copy_options = (@copy_options || {}).merge(:subtasks => false)
|
| 1753 |
copied_issue_ids = {@copied_from.id => self.id}
|
|
| 1753 |
copied_issues = {@copied_from.id => self}
|
|
| 1754 | 1754 |
@copied_from.reload.descendants.reorder("#{Issue.table_name}.lft").each do |child|
|
| 1755 | 1755 |
# Do not copy self when copying an issue as a descendant of the copied issue |
| 1756 | 1756 |
next if child == self |
| 1757 | 1757 |
# Do not copy subtasks of issues that were not copied |
| 1758 |
next unless copied_issue_ids[child.parent_id]
|
|
| 1758 |
next unless copied_issues[child.parent_id] |
|
| 1759 | 1759 | |
| 1760 | 1760 |
# Do not copy subtasks that are not visible to avoid potential disclosure of private data |
| 1761 | 1761 |
unless child.visible? |
| 1762 | 1762 |
if logger |
| app/models/issue.rb | ||
|---|---|---|
| 1773 | 1773 |
end |
| 1774 | 1774 |
copy.author = author |
| 1775 | 1775 |
copy.project = project |
| 1776 |
copy.parent_issue_id = copied_issue_ids[child.parent_id]
|
|
| 1776 |
copy.parent_issue_id = copied_issues[child.parent_id].id
|
|
| 1777 | 1777 |
unless child.fixed_version.present? && child.fixed_version.status == 'open' |
| 1778 | 1778 |
copy.fixed_version_id = nil |
| 1779 | 1779 |
end |
| 1780 | 1780 |
unless child.assigned_to_id.present? && |
| 1781 | 1781 |
child.assigned_to.status == User::STATUS_ACTIVE |
| 1782 | 1782 |
copy.assigned_to = nil |
| 1783 | 1783 |
end |
| 1784 | 1784 |
unless copy.save |
| 1785 | 1785 |
if logger |
| 1786 | 1786 |
logger.error( |
| 1787 | 1787 |
"Could not copy subtask ##{child.id} " \
|
| 1788 | 1788 |
"while copying ##{@copied_from.id} to ##{id} due to validation errors: " \
|
| 1789 | 1789 |
"#{copy.errors.full_messages.join(', ')}"
|
| 1790 | 1790 |
) |
| 1791 | 1791 |
end |
| 1792 | 1792 |
next |
| 1793 | 1793 |
end |
| 1794 |
copied_issue_ids[child.id] = copy.id |
|
| 1794 |
copied_issues[child.id] = copy |
|
| 1795 |
end |
|
| 1796 | ||
| 1797 |
# Replicate dependencies between copied children |
|
| 1798 |
@copied_from.reload.descendants.reorder("#{Issue.table_name}.lft").each do |child|
|
|
| 1799 |
copy = copied_issues[child.id] |
|
| 1800 |
next unless copy |
|
| 1801 |
child.relations_to.each do |rel| |
|
| 1802 |
next unless copied_issues.key?(rel.issue_from.id) |
|
| 1803 |
from = Issue.find_by_id(copied_issues[rel.issue_from.id].id) |
|
| 1804 |
next unless from |
|
| 1805 |
relation = IssueRelation.new(:issue_from => from, :issue_to => copy, :relation_type => rel.relation_type) |
|
| 1806 |
unless relation.save |
|
| 1807 |
logger.error "Could not create relation while copying ##{child.id} to ##{copy.id} due to validation errors: #{relation.errors.full_messages.join(', ')}" if logger
|
|
| 1808 |
end |
|
| 1809 |
end |
|
| 1795 | 1810 |
end |
| 1796 | 1811 |
end |
| 1797 | 1812 |
@after_create_from_copy_handled = true |
- « Previous
- 1
- 2
- Next »