summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2014-11-02 15:38:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2014-11-02 15:38:11 +0000
commit32b79b6fd4e3a523ee393d7a3e2bb60dbeed77c3 (patch)
tree5050ce8fcb138d88180d9c3d61e34c05dc03a4d8 /app
parent43f6914f520f9a79220414cdd5d54d6fa2cc0720 (diff)
downloadredmine-32b79b6fd4e3a523ee393d7a3e2bb60dbeed77c3.tar.gz
redmine-32b79b6fd4e3a523ee393d7a3e2bb60dbeed77c3.zip
Fixed that IssueRelation should not be responsible for calling Issue#init_journal (#18237).
git-svn-id: http://svn.redmine.org/redmine/trunk@13534 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/controllers/issue_relations_controller.rb2
-rw-r--r--app/controllers/issues_controller.rb1
-rw-r--r--app/models/issue.rb35
-rw-r--r--app/models/issue_relation.rb47
4 files changed, 59 insertions, 26 deletions
diff --git a/app/controllers/issue_relations_controller.rb b/app/controllers/issue_relations_controller.rb
index 13515df0c..2ff06c582 100644
--- a/app/controllers/issue_relations_controller.rb
+++ b/app/controllers/issue_relations_controller.rb
@@ -45,6 +45,7 @@ class IssueRelationsController < ApplicationController
if params[:relation] && m = params[:relation][:issue_to_id].to_s.strip.match(/^#?(\d+)$/)
@relation.issue_to = Issue.visible.find_by_id(m[1].to_i)
end
+ @relation.init_journals(User.current)
saved = @relation.save
respond_to do |format|
@@ -64,6 +65,7 @@ class IssueRelationsController < ApplicationController
def destroy
raise Unauthorized unless @relation.deletable?
+ @relation.init_journals(User.current)
@relation.destroy
respond_to do |format|
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index f3e27928d..200d8b112 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -406,6 +406,7 @@ class IssuesController < ApplicationController
def build_new_issue_from_params
if params[:id].blank?
@issue = Issue.new
+ @issue.init_journal(User.current)
if params[:copy_from]
begin
@copy_from = Issue.visible.find(params[:copy_from])
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 21a6be587..144dffa9f 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -667,6 +667,11 @@ class Issue < ActiveRecord::Base
@current_journal
end
+ # Returns the current journal or nil if it's not initialized
+ def current_journal
+ @current_journal
+ end
+
# Returns the id of the last journal or nil
def last_journal_id
if new_record?
@@ -1308,6 +1313,9 @@ class Issue < ActiveRecord::Base
return unless copy? && !@after_create_from_copy_handled
if (@copied_from.project_id == project_id || Setting.cross_project_issue_relations?) && @copy_options[:link] != false
+ if @current_journal
+ @copied_from.init_journal(@current_journal.user)
+ end
relation = IssueRelation.new(:issue_from => @copied_from, :issue_to => self, :relation_type => IssueRelation::TYPE_COPIED_TO)
unless relation.save
logger.error "Could not create relation while copying ##{@copied_from.id} to ##{id} due to validation errors: #{relation.errors.full_messages.join(', ')}" if logger
@@ -1328,6 +1336,9 @@ class Issue < ActiveRecord::Base
next
end
copy = Issue.new.copy_from(child, copy_options)
+ if @current_journal
+ copy.init_journal(@current_journal.user)
+ end
copy.author = author
copy.project = project
copy.parent_issue_id = copied_issue_ids[child.parent_id]
@@ -1477,6 +1488,30 @@ class Issue < ActiveRecord::Base
end
end
+ # Called after a relation is added
+ def relation_added(relation)
+ if @current_journal
+ @current_journal.details << JournalDetail.new(
+ :property => 'relation',
+ :prop_key => relation.relation_type_for(self),
+ :value => relation.other_issue(self).try(:id)
+ )
+ @current_journal.save
+ end
+ end
+
+ # Called after a relation is removed
+ def relation_removed(relation)
+ if @current_journal
+ @current_journal.details << JournalDetail.new(
+ :property => 'relation',
+ :prop_key => relation.relation_type_for(self),
+ :old_value => relation.other_issue(self).try(:id)
+ )
+ @current_journal.save
+ end
+ end
+
# Default assignment based on category
def default_assign
if assigned_to.nil? && category && category.assigned_to
diff --git a/app/models/issue_relation.rb b/app/models/issue_relation.rb
index 2659bb2e7..7248a8868 100644
--- a/app/models/issue_relation.rb
+++ b/app/models/issue_relation.rb
@@ -72,8 +72,8 @@ class IssueRelation < ActiveRecord::Base
attr_protected :issue_from_id, :issue_to_id
before_save :handle_issue_order
- after_create :create_journal_after_create
- after_destroy :create_journal_after_delete
+ after_create :call_issues_relation_added_callback
+ after_destroy :call_issues_relation_removed_callback
def visible?(user=User.current)
(issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user))
@@ -168,6 +168,11 @@ class IssueRelation < ActiveRecord::Base
r == 0 ? id <=> relation.id : r
end
+ def init_journals(user)
+ issue_from.init_journal(user) if issue_from
+ issue_to.init_journal(user) if issue_to
+ end
+
private
# Reverses the relation if needed so that it gets stored in the proper way
@@ -182,29 +187,19 @@ class IssueRelation < ActiveRecord::Base
end
end
- def create_journal_after_create
- journal = issue_from.init_journal(User.current)
- journal.details << JournalDetail.new(:property => 'relation',
- :prop_key => relation_type_for(issue_from),
- :value => issue_to.id)
- journal.save
- journal = issue_to.init_journal(User.current)
- journal.details << JournalDetail.new(:property => 'relation',
- :prop_key => relation_type_for(issue_to),
- :value => issue_from.id)
- journal.save
- end
-
- def create_journal_after_delete
- journal = issue_from.init_journal(User.current)
- journal.details << JournalDetail.new(:property => 'relation',
- :prop_key => relation_type_for(issue_from),
- :old_value => issue_to.id)
- journal.save
- journal = issue_to.init_journal(User.current)
- journal.details << JournalDetail.new(:property => 'relation',
- :prop_key => relation_type_for(issue_to),
- :old_value => issue_from.id)
- journal.save
+ def call_issues_relation_added_callback
+ call_issues_callback :relation_added
+ end
+
+ def call_issues_relation_removed_callback
+ call_issues_callback :relation_removed
+ end
+
+ def call_issues_callback(name)
+ [issue_from, issue_to].each do |issue|
+ if issue
+ issue.send name, self
+ end
+ end
end
end