Makes related issues available for display and filtering on the issue list (#3239, #3265).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10513 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang committed 2012-09-29 12:57:38 +00:00
1 parent 69b8931e92
commit 1b6da80e16
12 files changed
+271 -37

No files matched your search

+20 -1
View File
@@ -752,7 +752,7 @@ class Issue < ActiveRecord::Base
end
def relations
@relations ||= (relations_from + relations_to).sort
@relations ||= IssueRelations.new(self, (relations_from + relations_to).sort)
end
# Preloads relations for a collection of issues
@@ -775,6 +775,25 @@ class Issue < ActiveRecord::Base
end
end
# Preloads visible relations for a collection of issues
def self.load_visible_relations(issues, user=User.current)
if issues.any?
issue_ids = issues.map(&:id)
# Relations with issue_from in given issues and visible issue_to
relations_from = IssueRelation.includes(:issue_to => [:status, :project]).where(visible_condition(user)).where(:issue_from_id => issue_ids).all
# Relations with issue_to in given issues and visible issue_from
relations_to = IssueRelation.includes(:issue_from => [:status, :project]).where(visible_condition(user)).where(:issue_to_id => issue_ids).all
issues.each do |issue|
relations =
relations_from.select {|relation| relation.issue_from_id == issue.id} +
relations_to.select {|relation| relation.issue_to_id == issue.id}
issue.instance_variable_set "@relations", IssueRelations.new(issue, relations.sort)
end
end
end
# Finds an issue relation given its id.
def find_relation(relation_id)
IssueRelation.find(relation_id, :conditions => ["issue_to_id = ? OR issue_from_id = ?", id, id])