summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-01-16 21:27:48 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-01-16 21:27:48 +0000
commit049051103b02efdef64f4119959d95d23d45e392 (patch)
treecfb967b5c44fdbdb2e5fc5aa328a058128238379 /app/models
parent18066ba8bf68da4b00b7e740e6c67f8d8b1e0093 (diff)
downloadredmine-049051103b02efdef64f4119959d95d23d45e392.tar.gz
redmine-049051103b02efdef64f4119959d95d23d45e392.zip
On the calendar, the gantt and in the Tracker filter on the issue list, only active trackers of the project (and its sub projects) can be selected.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1071 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r--app/models/project.rb9
-rw-r--r--app/models/query.rb5
-rw-r--r--app/models/tracker.rb1
3 files changed, 14 insertions, 1 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 60a7a84a4..0e7f8284c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -146,6 +146,15 @@ class Project < ActiveRecord::Base
children.select {|child| child.active?}
end
+ # Returns an array of the trackers used by the project and its sub projects
+ def rolled_up_trackers
+ @rolled_up_trackers ||=
+ Tracker.find(:all, :include => :projects,
+ :select => "DISTINCT #{Tracker.table_name}.*",
+ :conditions => ["#{Project.table_name}.id = ? OR #{Project.table_name}.parent_id = ?", id, id],
+ :order => "#{Tracker.table_name}.position")
+ end
+
# Deletes all project's members
def delete_all_members
Member.delete_all(['project_id = ?', id])
diff --git a/app/models/query.rb b/app/models/query.rb
index 09dc0d581..3a1b5a19e 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -132,8 +132,11 @@ class Query < ActiveRecord::Base
def available_filters
return @available_filters if @available_filters
+
+ trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers
+
@available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
- "tracker_id" => { :type => :list, :order => 2, :values => Tracker.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
+ "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },
"priority_id" => { :type => :list, :order => 3, :values => Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect{|s| [s.name, s.id.to_s] } },
"subject" => { :type => :text, :order => 8 },
"created_on" => { :type => :date_past, :order => 9 },
diff --git a/app/models/tracker.rb b/app/models/tracker.rb
index 8d8647747..07253a227 100644
--- a/app/models/tracker.rb
+++ b/app/models/tracker.rb
@@ -19,6 +19,7 @@ class Tracker < ActiveRecord::Base
before_destroy :check_integrity
has_many :issues
has_many :workflows, :dependent => :delete_all
+ has_and_belongs_to_many :projects
has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
acts_as_list