diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-01-06 19:50:02 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-01-06 19:50:02 +0000 |
commit | b3c678da871332480526df6ec280f57730f09603 (patch) | |
tree | 01e55848aebd513d846d110d8a6b551c7c27cecd /app/models/issue.rb | |
parent | 266521a1d3c687dcb0504c64508977fd087fd22e (diff) | |
download | redmine-b3c678da871332480526df6ec280f57730f09603.tar.gz redmine-b3c678da871332480526df6ec280f57730f09603.zip |
Extracted some code from #move_to_project to a callback.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8524 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/issue.rb')
-rw-r--r-- | app/models/issue.rb | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 4c7323c6d..f43ff0d83 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -75,6 +75,7 @@ class Issue < ActiveRecord::Base before_create :default_assign before_save :close_duplicates, :update_done_ratio_from_issue_status + after_save {|issue| issue.send :after_project_change if !issue.id_changed? && issue.project_id_changed?} after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal after_destroy :update_parent_attributes @@ -153,23 +154,7 @@ class Issue < ActiveRecord::Base end if new_project && issue.project_id != new_project.id - # delete issue relations - unless Setting.cross_project_issue_relations? - issue.relations_from.clear - issue.relations_to.clear - end - # issue is moved to another project - # reassign to the category with same name if any - new_category = issue.category.nil? ? nil : new_project.issue_categories.find_by_name(issue.category.name) - issue.category = new_category - # Keep the fixed_version if it's still valid in the new_project - unless new_project.shared_versions.include?(issue.fixed_version) - issue.fixed_version = nil - end issue.project = new_project - if issue.parent && issue.parent.project_id != issue.project_id - issue.parent_issue_id = nil - end end if new_tracker issue.tracker = new_tracker @@ -192,19 +177,7 @@ class Issue < ActiveRecord::Base issue.init_journal(User.current, options[:notes]) issue.current_journal.notify = false end - if issue.save - unless options[:copy] - # Manually update project_id on related time entries - TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id}) - - issue.children.each do |child| - unless child.move_to_project_without_transaction(new_project) - # Move failed and transaction was rollback'd - return false - end - end - end - else + unless issue.save return false end issue @@ -227,6 +200,32 @@ class Issue < ActiveRecord::Base result end + def project_id=(project_id) + if project_id.to_s != self.project_id.to_s + self.project = (project_id.present? ? Project.find_by_id(project_id) : nil) + end + end + + def project=(project) + project_was = self.project + write_attribute(:project_id, project ? project.id : nil) + association_instance_set('project', project) + if project_was && project && project_was != project + # Reassign to the category with same name if any + if category + self.category = project.issue_categories.find_by_name(category.name) + end + # Keep the fixed_version if it's still valid in the new_project + if fixed_version && fixed_version.project != project && !project.shared_versions.include?(fixed_version) + self.fixed_version = nil + end + if parent && parent.project_id != project_id + self.parent_issue_id = nil + end + @custom_field_values = nil + end + end + def description=(arg) if arg.is_a?(String) arg = arg.gsub(/(\r\n|\n|\r)/, "\r\n") @@ -763,6 +762,25 @@ class Issue < ActiveRecord::Base private + def after_project_change + # Update project_id on related time entries + TimeEntry.update_all(["project_id = ?", project_id], {:issue_id => id}) + + # Delete issue relations + unless Setting.cross_project_issue_relations? + relations_from.clear + relations_to.clear + end + + # Move subtasks + children.each do |child| + child.project = project + unless child.save + raise ActiveRecord::Rollback + end + end + end + def update_nested_set_attributes if root_id.nil? # issue was just created |