summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-11-20 20:29:03 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-11-20 20:29:03 +0000
commit8d91afc33e3b5e7ef491fb30fb5ccbda35a1d02d (patch)
tree8318d86019c2000aa720c737b50e77a5aee8bce6 /app/models
parent987a5aa22114ec2e931464782351431e4dfec97c (diff)
downloadredmine-8d91afc33e3b5e7ef491fb30fb5ccbda35a1d02d.tar.gz
redmine-8d91afc33e3b5e7ef491fb30fb5ccbda35a1d02d.zip
Added per-project tracker selection. Trackers can be selected on project settings.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@920 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r--app/models/custom_value.rb4
-rw-r--r--app/models/issue.rb6
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/tracker.rb4
4 files changed, 12 insertions, 3 deletions
diff --git a/app/models/custom_value.rb b/app/models/custom_value.rb
index afe4c1afb..c3d6b7bb9 100644
--- a/app/models/custom_value.rb
+++ b/app/models/custom_value.rb
@@ -31,9 +31,9 @@ protected
when 'float'
begin; !value.blank? && Kernel.Float(value); rescue; errors.add(:value, :activerecord_error_invalid) end
when 'date'
- errors.add(:value, :activerecord_error_not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/ or value.empty?
+ errors.add(:value, :activerecord_error_not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/ or value.blank?
when 'list'
- errors.add(:value, :activerecord_error_inclusion) unless custom_field.possible_values.include? value or value.empty?
+ errors.add(:value, :activerecord_error_inclusion) unless custom_field.possible_values.include?(value) or value.blank?
end
end
end
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 60cca4051..f7b01ea6a 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -40,7 +40,7 @@ class Issue < ActiveRecord::Base
acts_as_event :title => Proc.new {|o| "#{o.tracker.name} ##{o.id}: #{o.subject}"},
:url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.id}}
- validates_presence_of :subject, :description, :priority, :tracker, :author, :status
+ validates_presence_of :subject, :description, :priority, :project, :tracker, :author, :status
validates_length_of :subject, :maximum => 255
validates_inclusion_of :done_ratio, :in => 0..100
validates_numericality_of :estimated_hours, :allow_nil => true
@@ -106,6 +106,10 @@ class Issue < ActiveRecord::Base
end
end
+ def validate_on_create
+ errors.add :tracker_id, :activerecord_error_invalid unless project.trackers.include?(tracker)
+ end
+
def before_create
# default assignment based on category
if assigned_to.nil? && category && category.assigned_to
diff --git a/app/models/project.rb b/app/models/project.rb
index afaa049c6..be46d6189 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -24,6 +24,7 @@ class Project < ActiveRecord::Base
has_many :users, :through => :members
has_many :custom_values, :dependent => :delete_all, :as => :customized
has_many :enabled_modules, :dependent => :delete_all
+ has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
has_many :issues, :dependent => :destroy, :order => "#{Issue.table_name}.created_on DESC", :include => [:status, :tracker]
has_many :issue_changes, :through => :issues, :source => :journals
has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
diff --git a/app/models/tracker.rb b/app/models/tracker.rb
index 90ef31912..6de2a098c 100644
--- a/app/models/tracker.rb
+++ b/app/models/tracker.rb
@@ -29,6 +29,10 @@ class Tracker < ActiveRecord::Base
def to_s; name end
+ def self.all
+ find(:all, :order => 'position')
+ end
+
private
def check_integrity
raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id])