From: Toshi MARUYAMA Date: Sun, 21 Aug 2011 08:46:33 +0000 (+0000) Subject: remove trailing white-spaces from app/models/project.rb. X-Git-Tag: 1.3.0~1444 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=44147ee8f290c6e353e15b8a60fafad202e66bcd;p=redmine.git remove trailing white-spaces from app/models/project.rb. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6517 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/project.rb b/app/models/project.rb index b4872a3b4..a2626f130 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -5,36 +5,36 @@ # 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 include Redmine::SafeAttributes - + # Project statuses STATUS_ACTIVE = 1 STATUS_ARCHIVED = 9 - + # Maximum length for project identifiers IDENTIFIER_MAX_LENGTH = 100 - + # Specific overidden Activities has_many :time_entry_activities has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}" has_many :memberships, :class_name => 'Member' - has_many :member_principals, :class_name => 'Member', + has_many :member_principals, :class_name => 'Member', :include => :principal, :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{User::STATUS_ACTIVE})" has_many :users, :through => :members has_many :principals, :through => :member_principals, :source => :principal - + 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] @@ -50,12 +50,12 @@ class Project < ActiveRecord::Base has_many :changesets, :through => :repository has_one :wiki, :dependent => :destroy # Custom field for the project issues - has_and_belongs_to_many :issue_custom_fields, + has_and_belongs_to_many :issue_custom_fields, :class_name => 'IssueCustomField', :order => "#{CustomField.table_name}.position", :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", :association_foreign_key => 'custom_field_id' - + acts_as_nested_set :order => 'name', :dependent => :destroy acts_as_attachable :view_permission => :view_files, :delete_permission => :manage_files @@ -67,7 +67,7 @@ class Project < ActiveRecord::Base :author => nil attr_protected :status - + validates_presence_of :name, :identifier validates_uniqueness_of :identifier validates_associated :repository, :wiki @@ -85,12 +85,12 @@ class Project < ActiveRecord::Base named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"} named_scope :all_public, { :conditions => { :is_public => true } } named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }} - + def initialize(attributes = nil) super - + initialized = (attributes || {}).stringify_keys - if !initialized.key?('identifier') && Setting.sequential_project_identifiers? + if !initialized.key?('identifier') && Setting.sequential_project_identifiers? self.identifier = Project.next_identifier end if !initialized.key?('is_public') @@ -103,11 +103,11 @@ class Project < ActiveRecord::Base self.trackers = Tracker.all end end - + def identifier=(identifier) super unless identifier_frozen? end - + def identifier_frozen? errors[:identifier].nil? && !(new_record? || identifier.blank?) end @@ -122,12 +122,12 @@ class Project < ActiveRecord::Base def visible?(user=User.current) user.allowed_to?(:view_project, self) end - + def self.visible_by(user=nil) ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead." visible_condition(user || User.current) end - + # Returns a SQL conditions string used to find all projects visible by the specified user. # # Examples: @@ -137,7 +137,7 @@ class Project < ActiveRecord::Base def self.visible_condition(user, options={}) allowed_to_condition(user, :view_project, options) end - + # Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+ # # Valid options: @@ -157,7 +157,7 @@ class Project < ActiveRecord::Base project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects] base_statement = "(#{project_statement}) AND (#{base_statement})" end - + if user.admin? base_statement else @@ -211,14 +211,14 @@ class Project < ActiveRecord::Base activity.update_attributes(activity_hash) if activity end end - + # Create a new TimeEntryActivity if it overrides a system TimeEntryActivity # # This will raise a ActiveRecord::Rollback if the TimeEntryActivity # does not successfully save. def create_time_entry_activity_if_needed(activity) if activity['parent_id'] - + parent_activity = TimeEntryActivity.find(activity['parent_id']) activity['name'] = parent_activity.name activity['position'] = parent_activity.position @@ -245,7 +245,7 @@ class Project < ActiveRecord::Base cond = "(#{cond} OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt}))" if with_subprojects cond end - + def self.find(*args) if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/) project = find_by_identifier(*args) @@ -255,20 +255,20 @@ class Project < ActiveRecord::Base super end end - + def to_param # id is used for projects with a numeric identifier (compatibility) @to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier) end - + def active? self.status == STATUS_ACTIVE end - + def archived? self.status == STATUS_ARCHIVED end - + # Archives the project and its descendants def archive # Check that there is no issue of a non descendant project that is assigned @@ -284,14 +284,14 @@ class Project < ActiveRecord::Base end true end - + # Unarchives the project # All its ancestors must be active def unarchive return false if ancestors.detect {|a| !a.active?} update_attribute :status, STATUS_ACTIVE end - + # Returns an array of projects the project can be moved to # by the current user def allowed_parents @@ -306,7 +306,7 @@ class Project < ActiveRecord::Base end @allowed_parents end - + # Sets the parent of the project with authorization check def set_allowed_parent!(p) unless p.nil? || p.is_a?(Project) @@ -326,7 +326,7 @@ class Project < ActiveRecord::Base end set_parent!(p) end - + # Sets the parent of the project # Argument can be either a Project, a String, a Fixnum or nil def set_parent!(p) @@ -365,7 +365,7 @@ class Project < ActiveRecord::Base false end end - + # Returns an array of the trackers used by the project and its active sub projects def rolled_up_trackers @rolled_up_trackers ||= @@ -374,7 +374,7 @@ class Project < ActiveRecord::Base :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt], :order => "#{Tracker.table_name}.position") end - + # Closes open and locked project versions that are completed def close_completed_versions Version.transaction do @@ -392,7 +392,7 @@ class Project < ActiveRecord::Base Version.scoped(:include => :project, :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt]) end - + # Returns a scope of the Versions used by the project def shared_versions @shared_versions ||= begin @@ -418,31 +418,31 @@ class Project < ActiveRecord::Base h end end - + # Deletes all project's members def delete_all_members me, mr = Member.table_name, MemberRole.table_name connection.delete("DELETE FROM #{mr} WHERE #{mr}.member_id IN (SELECT #{me}.id FROM #{me} WHERE #{me}.project_id = #{id})") Member.delete_all(['project_id = ?', id]) end - + # Users/groups issues can be assigned to def assignable_users assignable = Setting.issue_group_assignment? ? member_principals : members assignable.select {|m| m.roles.detect {|role| role.assignable?}}.collect {|m| m.principal}.sort end - + # Returns the mail adresses of users that should be always notified on project events def recipients notified_users.collect {|user| user.mail} end - + # Returns the users that should be notified on project events def notified_users # TODO: User part should be extracted to User#notify_about? members.select {|m| m.mail_notification? || m.user.mail_notification == 'all'}.collect {|m| m.user} end - + # Returns an array of all custom fields enabled for project issues # (explictly associated custom fields and custom fields enabled for all projects) def all_issue_custom_fields @@ -454,19 +454,19 @@ class Project < ActiveRecord::Base def all_time_entry_custom_fields @all_time_entry_custom_fields ||= (TimeEntryCustomField.for_all + time_entry_custom_fields).uniq.sort end - + def project self end - + def <=>(project) name.downcase <=> project.name.downcase end - + def to_s name end - + # Returns a short description of the projects (first lines) def short_description(length = 255) description.gsub(/^(.{#{length}}[^\n\r]*).*$/m, '\1...').strip if description @@ -519,7 +519,7 @@ class Project < ActiveRecord::Base end end end - + # Return true if this project is allowed to do the specified action. # action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') @@ -531,12 +531,12 @@ class Project < ActiveRecord::Base allowed_permissions.include? action end end - + def module_enabled?(module_name) module_name = module_name.to_s enabled_modules.detect {|m| m.name == module_name} end - + def enabled_module_names=(module_names) if module_names && module_names.is_a?(Array) module_names = module_names.collect(&:to_s).reject(&:blank?) @@ -545,7 +545,7 @@ class Project < ActiveRecord::Base enabled_modules.clear end end - + # Returns an array of the enabled modules names def enabled_module_names enabled_modules.collect(&:name) @@ -583,7 +583,7 @@ class Project < ActiveRecord::Base safe_attributes 'enabled_module_names', :if => lambda {|project, user| project.new_record? || user.allowed_to?(:select_project_modules, project) } - + # Returns an array of projects that are in this project's hierarchy # # Example: parents, children, siblings @@ -592,7 +592,7 @@ class Project < ActiveRecord::Base descendants = project.descendants || [] project_hierarchy = parents | descendants # Set union end - + # Returns an auto-generated project identifier based on the last identifier used def self.next_identifier p = Project.find(:first, :order => 'created_on DESC') @@ -616,10 +616,10 @@ class Project < ActiveRecord::Base # project.copy(1, :only => ['members', 'versions']) # => copies members and versions def copy(project, options={}) project = project.is_a?(Project) ? project : Project.find(project) - + to_be_copied = %w(wiki versions issue_categories issues members queries boards) to_be_copied = to_be_copied & options[:only].to_a unless options[:only].nil? - + Project.transaction do if save reload @@ -632,7 +632,7 @@ class Project < ActiveRecord::Base end end - + # Copies +project+ and returns the new instance. This will not save # the copy def self.copy_from(project) @@ -659,16 +659,16 @@ class Project < ActiveRecord::Base def self.project_tree(projects, &block) ancestors = [] projects.sort_by(&:lft).each do |project| - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) ancestors.pop end yield project, ancestors.size ancestors << project end end - + private - + # Copies wiki from +project+ def copy_wiki(project) # Check that the source project has a wiki first @@ -713,14 +713,14 @@ class Project < ActiveRecord::Base self.issue_categories << new_issue_category end end - + # Copies issues from +project+ # Note: issues assigned to a closed version won't be copied due to validation rules def copy_issues(project) # Stores the source issue id as a key and the copied issues as the # value. Used to map the two togeather for issue relations. issues_map = {} - + # Get issues sorted by root_id, lft so that parent issues # get copied before their children project.issues.find(:all, :order => 'root_id, lft').each do |issue| @@ -743,7 +743,7 @@ class Project < ActiveRecord::Base new_issue.parent_issue_id = copied_parent.id end end - + self.issues << new_issue if new_issue.new_record? logger.info "Project#copy_issues: issue ##{issue.id} could not be copied: #{new_issue.errors.full_messages}" if logger && logger.info @@ -759,7 +759,7 @@ class Project < ActiveRecord::Base # Issue was not copied next end - + # Relations issue.relations_from.each do |source_relation| new_issue_relation = IssueRelation.new @@ -770,7 +770,7 @@ class Project < ActiveRecord::Base end new_issue.relations_from << new_issue_relation end - + issue.relations_to.each do |source_relation| new_issue_relation = IssueRelation.new new_issue_relation.attributes = source_relation.attributes.dup.except("id", "issue_from_id", "issue_to_id") @@ -789,7 +789,7 @@ class Project < ActiveRecord::Base members_to_copy = [] members_to_copy += project.memberships.select {|m| m.principal.is_a?(User)} members_to_copy += project.memberships.select {|m| !m.principal.is_a?(User)} - + members_to_copy.each do |member| new_member = Member.new new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on") @@ -823,7 +823,7 @@ class Project < ActiveRecord::Base self.boards << new_board end end - + def allowed_permissions @allowed_permissions ||= begin module_names = enabled_modules.all(:select => :name).collect {|m| m.name} @@ -838,7 +838,7 @@ class Project < ActiveRecord::Base # Returns all the active Systemwide and project specific activities def active_activities overridden_activity_ids = self.time_entry_activities.collect(&:parent_id) - + if overridden_activity_ids.empty? return TimeEntryActivity.shared.active else @@ -872,7 +872,7 @@ class Project < ActiveRecord::Base self.time_entry_activities.active end end - + # Archives subprojects recursively def archive! children.each do |subproject|