##// END OF EJS Templates
added a condition on project -> members association so that only active users are considered as members...
Jean-Philippe Lang -
r113:718de6c7fd2c
parent child
Show More
@@ -1,61 +1,61
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class Project < ActiveRecord::Base
18 class Project < ActiveRecord::Base
19 has_many :versions, :dependent => true, :order => "versions.effective_date DESC, versions.name DESC"
19 has_many :versions, :dependent => true, :order => "versions.effective_date DESC, versions.name DESC"
20 has_many :members, :dependent => true
20 has_many :members, :dependent => true, :include => :user, :conditions => "users.status=#{User::STATUS_ACTIVE}"
21 has_many :users, :through => :members
21 has_many :users, :through => :members
22 has_many :custom_values, :dependent => true, :as => :customized
22 has_many :custom_values, :dependent => true, :as => :customized
23 has_many :issues, :dependent => true, :order => "issues.created_on DESC", :include => [:status, :tracker]
23 has_many :issues, :dependent => true, :order => "issues.created_on DESC", :include => [:status, :tracker]
24 has_many :queries, :dependent => true
24 has_many :queries, :dependent => true
25 has_many :documents, :dependent => true
25 has_many :documents, :dependent => true
26 has_many :news, :dependent => true, :include => :author
26 has_many :news, :dependent => true, :include => :author
27 has_many :issue_categories, :dependent => true, :order => "issue_categories.name"
27 has_many :issue_categories, :dependent => true, :order => "issue_categories.name"
28 has_one :repository, :dependent => true
28 has_one :repository, :dependent => true
29 has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => 'custom_fields_projects', :association_foreign_key => 'custom_field_id'
29 has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => 'custom_fields_projects', :association_foreign_key => 'custom_field_id'
30 acts_as_tree :order => "name", :counter_cache => true
30 acts_as_tree :order => "name", :counter_cache => true
31
31
32 validates_presence_of :name, :description
32 validates_presence_of :name, :description
33 validates_uniqueness_of :name
33 validates_uniqueness_of :name
34 validates_associated :custom_values, :on => :update
34 validates_associated :custom_values, :on => :update
35 validates_associated :repository
35 validates_associated :repository
36 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
36 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
37
37
38 # returns 5 last created projects
38 # returns 5 last created projects
39 def self.latest
39 def self.latest
40 find(:all, :limit => 5, :order => "created_on DESC")
40 find(:all, :limit => 5, :order => "created_on DESC")
41 end
41 end
42
42
43 # Returns an array of all custom fields enabled for project issues
43 # Returns an array of all custom fields enabled for project issues
44 # (explictly associated custom fields and custom fields enabled for all projects)
44 # (explictly associated custom fields and custom fields enabled for all projects)
45 def custom_fields_for_issues(tracker)
45 def custom_fields_for_issues(tracker)
46 tracker.custom_fields.find(:all, :include => :projects,
46 tracker.custom_fields.find(:all, :include => :projects,
47 :conditions => ["is_for_all=? or project_id=?", true, self.id])
47 :conditions => ["is_for_all=? or project_id=?", true, self.id])
48 #(CustomField.for_all + custom_fields).uniq
48 #(CustomField.for_all + custom_fields).uniq
49 end
49 end
50
50
51 def all_custom_fields
51 def all_custom_fields
52 @all_custom_fields ||= IssueCustomField.find(:all, :include => :projects,
52 @all_custom_fields ||= IssueCustomField.find(:all, :include => :projects,
53 :conditions => ["is_for_all=? or project_id=?", true, self.id])
53 :conditions => ["is_for_all=? or project_id=?", true, self.id])
54 end
54 end
55
55
56 protected
56 protected
57 def validate
57 def validate
58 errors.add(parent_id, " must be a root project") if parent and parent.parent
58 errors.add(parent_id, " must be a root project") if parent and parent.parent
59 errors.add_to_base("A project with subprojects can't be a subproject") if parent and projects_count > 0
59 errors.add_to_base("A project with subprojects can't be a subproject") if parent and projects_count > 0
60 end
60 end
61 end
61 end
General Comments 0
You need to be logged in to leave comments. Login now