##// END OF EJS Templates
set default category_id instead of the object (#11665)...
set default category_id instead of the object (#11665) Rails 2.3 still has issues with synchronizing the association_id and association attributes of an object. That means, if you set the association with an object first and then just set the id afterwards, the object wins and the setting of the id gets lost. This is not an issue in Rails >= 3.1 anymore. Contributed by Holger Just. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.4-stable@10226 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r8168:9e83ee2ddf3c
r10043:14dcefaa97f9
Show More
issue_relation.rb
143 lines | 5.5 KiB | text/x-ruby | RubyLexer
/ app / models / issue_relation.rb
Jean-Philippe Lang
Set a default value for relation type....
r6057 # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385 #
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385 #
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class IssueRelation < ActiveRecord::Base
belongs_to :issue_from, :class_name => 'Issue', :foreign_key => 'issue_from_id'
belongs_to :issue_to, :class_name => 'Issue', :foreign_key => 'issue_to_id'
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 TYPE_RELATES = "relates"
TYPE_DUPLICATES = "duplicates"
Jean-Philippe Lang
Adds 'Blocked by' (#1755) and 'Duplicated by' relation types to the dropdown menu for new relations....
r3398 TYPE_DUPLICATED = "duplicated"
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 TYPE_BLOCKS = "blocks"
Jean-Philippe Lang
Adds 'Blocked by' (#1755) and 'Duplicated by' relation types to the dropdown menu for new relations....
r3398 TYPE_BLOCKED = "blocked"
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 TYPE_PRECEDES = "precedes"
Jean-Philippe Lang
Adds 'follows' relation (#1432)....
r3076 TYPE_FOLLOWS = "follows"
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Adds issue relations to individual issue XML (#5305)....
r3615 TYPES = { TYPE_RELATES => { :name => :label_relates_to, :sym_name => :label_relates_to, :order => 1, :sym => TYPE_RELATES },
TYPE_DUPLICATES => { :name => :label_duplicates, :sym_name => :label_duplicated_by, :order => 2, :sym => TYPE_DUPLICATED },
TYPE_DUPLICATED => { :name => :label_duplicated_by, :sym_name => :label_duplicates, :order => 3, :sym => TYPE_DUPLICATES, :reverse => TYPE_DUPLICATES },
TYPE_BLOCKS => { :name => :label_blocks, :sym_name => :label_blocked_by, :order => 4, :sym => TYPE_BLOCKED },
TYPE_BLOCKED => { :name => :label_blocked_by, :sym_name => :label_blocks, :order => 5, :sym => TYPE_BLOCKS, :reverse => TYPE_BLOCKS },
TYPE_PRECEDES => { :name => :label_precedes, :sym_name => :label_follows, :order => 6, :sym => TYPE_FOLLOWS },
TYPE_FOLLOWS => { :name => :label_follows, :sym_name => :label_precedes, :order => 7, :sym => TYPE_PRECEDES, :reverse => TYPE_PRECEDES }
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 }.freeze
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 validates_presence_of :issue_from, :issue_to, :relation_type
Jean-Philippe Lang
Fixes 'follows' relation validation....
r3077 validates_inclusion_of :relation_type, :in => TYPES.keys
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 validates_numericality_of :delay, :allow_nil => true
validates_uniqueness_of :issue_to_id, :scope => :issue_from_id
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Toshi MARUYAMA
Rails3: replace deprecated 'validate' method at IssueRelation model....
r6817 validate :validate_issue_relation
Jean-Philippe Lang
Fixed: users should not be able to add relations with issues they're not allowed to view (#2589)....
r2321 attr_protected :issue_from_id, :issue_to_id
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Toshi MARUYAMA
Rails3: model: replace deprecated 'before_save' method at IssueRelation model...
r7306 before_save :handle_issue_order
Jean-Philippe Lang
Makes relations resource shallow (#7366)....
r6064 def visible?(user=User.current)
(issue_from.nil? || issue_from.visible?(user)) && (issue_to.nil? || issue_to.visible?(user))
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Makes relations resource shallow (#7366)....
r6064 def deletable?(user=User.current)
visible?(user) &&
((issue_from.nil? || user.allowed_to?(:manage_issue_relations, issue_from.project)) ||
(issue_to.nil? || user.allowed_to?(:manage_issue_relations, issue_to.project)))
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Removed after_initialize methods....
r8168 def initialize(attributes=nil, *args)
super
Jean-Philippe Lang
Set a default value for relation type....
r6057 if new_record?
if relation_type.blank?
self.relation_type = IssueRelation::TYPE_RELATES
end
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Toshi MARUYAMA
Rails3: replace deprecated 'validate' method at IssueRelation model....
r6817 def validate_issue_relation
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 if issue_from && issue_to
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 errors.add :issue_to_id, :invalid if issue_from_id == issue_to_id
errors.add :issue_to_id, :not_same_project unless issue_from.project_id == issue_to.project_id || Setting.cross_project_issue_relations?
Jean-Baptiste Barth
Fixed circular dependencies possibly introduced when using reverse relations, for instance "blocked by" relations (#8616)....
r6004 #detect circular dependencies depending wether the relation should be reversed
if TYPES.has_key?(relation_type) && TYPES[relation_type][:reverse]
Toshi MARUYAMA
Rails3: model: replace deprecated errors.add_to_base at validate_issue_relation of IssueRelation...
r7496 errors.add :base, :circular_dependency if issue_from.all_dependent_issues.include? issue_to
Jean-Baptiste Barth
Fixed circular dependencies possibly introduced when using reverse relations, for instance "blocked by" relations (#8616)....
r6004 else
Toshi MARUYAMA
Rails3: model: replace deprecated errors.add_to_base at validate_issue_relation of IssueRelation...
r7496 errors.add :base, :circular_dependency if issue_to.all_dependent_issues.include? issue_from
Jean-Baptiste Barth
Fixed circular dependencies possibly introduced when using reverse relations, for instance "blocked by" relations (#8616)....
r6004 end
Toshi MARUYAMA
Rails3: model: replace deprecated errors.add_to_base at validate_issue_relation of IssueRelation...
r7496 errors.add :base, :cant_link_an_issue_with_a_descendant if issue_from.is_descendant_of?(issue_to) || issue_from.is_ancestor_of?(issue_to)
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 def other_issue(issue)
(self.issue_from_id == issue.id) ? issue_to : issue_from
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Adds issue relations to individual issue XML (#5305)....
r3615 # Returns the relation type for +issue+
def relation_type_for(issue)
if TYPES[relation_type]
if self.issue_from_id == issue.id
relation_type
else
TYPES[relation_type][:sym]
end
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 def label_for(issue)
TYPES[relation_type] ? TYPES[relation_type][(self.issue_from_id == issue.id) ? :name : :sym_name] : :unknow
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Toshi MARUYAMA
Rails3: model: replace deprecated 'before_save' method at IssueRelation model...
r7306 def handle_issue_order
Jean-Philippe Lang
Fixes 'follows' relation validation....
r3077 reverse_if_needed
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 if TYPE_PRECEDES == relation_type
self.delay ||= 0
else
self.delay = nil
end
set_issue_to_dates
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 def set_issue_to_dates
soonest_start = self.successor_soonest_start
Jean-Philippe Lang
Safer code in IssueRelation (#7018)....
r4353 if soonest_start && issue_to
Jean-Philippe Lang
Makes subtasks rescheduled when a 'precedes' relation is set on a parent task....
r3460 issue_to.reschedule_after(soonest_start)
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 def successor_soonest_start
Jean-Philippe Lang
Safer code in IssueRelation (#7018)....
r4353 if (TYPE_PRECEDES == self.relation_type) && delay && issue_from && (issue_from.start_date || issue_from.due_date)
(issue_from.due_date || issue_from.start_date) + 1 + delay
end
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 def <=>(relation)
TYPES[self.relation_type][:order] <=> TYPES[relation.relation_type][:order]
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Adds 'follows' relation (#1432)....
r3076 private
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_relation.rb....
r6385
Jean-Philippe Lang
Adds 'Blocked by' (#1755) and 'Duplicated by' relation types to the dropdown menu for new relations....
r3398 # Reverses the relation if needed so that it gets stored in the proper way
Jean-Philippe Lang
Document why relation is reversed after validation....
r6058 # Should not be reversed before validation so that it can be displayed back
# as entered on new relation form
Jean-Philippe Lang
Adds 'follows' relation (#1432)....
r3076 def reverse_if_needed
Jean-Philippe Lang
Adds 'Blocked by' (#1755) and 'Duplicated by' relation types to the dropdown menu for new relations....
r3398 if TYPES.has_key?(relation_type) && TYPES[relation_type][:reverse]
Jean-Philippe Lang
Adds 'follows' relation (#1432)....
r3076 issue_tmp = issue_to
self.issue_to = issue_from
self.issue_from = issue_tmp
Jean-Philippe Lang
Adds 'Blocked by' (#1755) and 'Duplicated by' relation types to the dropdown menu for new relations....
r3398 self.relation_type = TYPES[relation_type][:reverse]
Jean-Philippe Lang
Adds 'follows' relation (#1432)....
r3076 end
end
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 end