##// END OF EJS Templates
Added cache for application settings (Setting model)....
Added cache for application settings (Setting model). Once the values are cached, only one database query is done at each user request (to check if the cache is still valid). git-svn-id: http://redmine.rubyforge.org/svn/trunk@685 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r673:404bfce44691
r674:6bdc13b33d8d
Show More
project.rb
124 lines | 5.0 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
#
# 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.
#
# 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.
#
# 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 Project < ActiveRecord::Base
Jean-Philippe Lang
Added the ability to archive projects:...
r546 # Project statuses
STATUS_ACTIVE = 1
STATUS_ARCHIVED = 9
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 has_many :members, :dependent => :delete_all, :include => :user, :conditions => "#{User.table_name}.status=#{User::STATUS_ACTIVE}"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 has_many :users, :through => :members
has_many :custom_values, :dependent => :delete_all, :as => :customized
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 has_many :issues, :dependent => :destroy, :order => "#{Issue.table_name}.created_on DESC", :include => [:status, :tracker]
Jean-Philippe Lang
Activity view improvements:...
r640 has_many :issue_changes, :through => :issues, :source => :journals
Jean-Philippe Lang
Fixed an error when trying to delete a project (versions/issues dependency)...
r571 has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
Jean-Philippe Lang
Simple time tracking functionality added. Time can be logged at issue or project level....
r365 has_many :time_entries, :dependent => :delete_all
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 has_many :queries, :dependent => :delete_all
has_many :documents, :dependent => :destroy
has_many :news, :dependent => :delete_all, :include => :author
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
Jean-Philippe Lang
Per project forums added....
r526 has_many :boards, :order => "position ASC"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 has_one :repository, :dependent => :destroy
has_one :wiki, :dependent => :destroy
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 acts_as_tree :order => "name", :counter_cache => true
Jean-Philippe Lang
Initial commit for svn repository management and access control:...
r393
Jean-Philippe Lang
Added the ability to archive projects:...
r546 attr_protected :status
Jean-Philippe Lang
Initial commit for svn repository management and access control:...
r393 validates_presence_of :name, :description, :identifier
validates_uniqueness_of :name, :identifier
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 validates_associated :custom_values, :on => :update
validates_associated :repository, :wiki
Jean-Philippe Lang
Added some attributes length validations....
r397 validates_length_of :name, :maximum => 30
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
Jean-Philippe Lang
Added some attributes length validations....
r397 validates_length_of :description, :maximum => 255
validates_length_of :identifier, :in => 3..12
Jean-Philippe Lang
Initial commit for svn repository management and access control:...
r393 validates_format_of :identifier, :with => /^[a-z0-9\-]*$/
def identifier=(identifier)
super unless identifier_frozen?
end
def identifier_frozen?
errors[:identifier].nil? && !(new_record? || identifier.blank?)
end
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 def issues_with_subprojects(include_subprojects=false)
conditions = nil
Jean-Philippe Lang
Added the ability to archive projects:...
r546 if include_subprojects && !active_children.empty?
ids = [id] + active_children.collect {|c| c.id}
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 conditions = ["#{Issue.table_name}.project_id IN (#{ids.join(',')})"]
end
Jean-Philippe Lang
Added the ability to archive projects:...
r546 conditions ||= ["#{Issue.table_name}.project_id = ?", id]
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 Issue.with_scope :find => { :conditions => conditions } do
yield
end
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # returns latest created projects
# non public projects will be returned only if user is a member of those
def self.latest(user=nil, count=5)
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def self.visible_by(user=nil)
Jean-Philippe Lang
Projects menu item now shows the list of public projects and projects for which the user is a member (marked with a star)....
r457 if user && user.admin?
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
Jean-Philippe Lang
Fixed an error on welcome screen for users with no membership...
r566 elsif user && user.memberships.any?
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
Jean-Philippe Lang
Added the ability to archive projects:...
r546 end
end
def active?
self.status == STATUS_ACTIVE
end
def archive
# Archive subprojects if any
children.each do |subproject|
subproject.archive
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Added the ability to archive projects:...
r546 update_attribute :status, STATUS_ARCHIVED
end
def unarchive
return false if parent && !parent.active?
update_attribute :status, STATUS_ACTIVE
end
def active_children
children.select {|child| child.active?}
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Returns an array of all custom fields enabled for project issues
# (explictly associated custom fields and custom fields enabled for all projects)
def custom_fields_for_issues(tracker)
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 all_custom_fields.select {|c| tracker.custom_fields.include? c }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def all_custom_fields
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @all_custom_fields ||= (IssueCustomField.for_all + custom_fields).uniq
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
protected
def validate
errors.add(parent_id, " must be a root project") if parent and parent.parent
errors.add_to_base("A project with subprojects can't be a subproject") if parent and children.size > 0
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
Initial commit...
r2 end