Mercurial > hg > soundsoftware-site
diff app/models/project.rb @ 1517:dffacf8a6908 redmine-2.5
Update to Redmine SVN revision 13367 on 2.5-stable branch
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:29:00 +0100 |
parents | e248c7af89ec |
children | a1bdbf8a87d5 |
line wrap: on
line diff
--- a/app/models/project.rb Tue Sep 09 09:28:31 2014 +0100 +++ b/app/models/project.rb Tue Sep 09 09:29:00 2014 +0100 @@ -39,7 +39,7 @@ has_many :issues, :dependent => :destroy, :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" - has_many :time_entries, :dependent => :delete_all + has_many :time_entries, :dependent => :destroy has_many :queries, :class_name => 'IssueQuery', :dependent => :delete_all has_many :documents, :dependent => :destroy has_many :news, :dependent => :destroy, :include => :author @@ -56,7 +56,7 @@ :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_nested_set :dependent => :destroy acts_as_attachable :view_permission => :view_files, :delete_permission => :manage_files @@ -249,18 +249,17 @@ # 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 - if Enumeration.overridding_change?(activity, parent_activity) project_activity = self.time_entry_activities.create(activity) - if project_activity.new_record? raise ActiveRecord::Rollback, "Overridding TimeEntryActivity was not successfully saved" else - self.time_entries.update_all("activity_id = #{project_activity.id}", ["activity_id = ?", parent_activity.id]) + self.time_entries. + where(["activity_id = ?", parent_activity.id]). + update_all("activity_id = #{project_activity.id}") end end end @@ -422,6 +421,7 @@ transaction do update_all "lft = NULL, rgt = NULL" rebuild!(false) + all.each { |p| p.set_or_update_position_under(p.parent) } end end @@ -440,7 +440,7 @@ # Closes open and locked project versions that are completed def close_completed_versions Version.transaction do - versions.where(:status => %w(open locked)).all.each do |version| + versions.where(:status => %w(open locked)).each do |version| if version.completed? version.update_attribute(:status, 'closed') end @@ -480,7 +480,7 @@ # Returns a hash of project users grouped by role def users_by_role - members.includes(:user, :roles).all.inject({}) do |h, m| + members.includes(:user, :roles).inject({}) do |h, m| m.roles.each do |r| h[r] ||= [] h[r] << m.user @@ -622,9 +622,16 @@ end end - def module_enabled?(module_name) - module_name = module_name.to_s - enabled_modules.detect {|m| m.name == module_name} + # Return the enabled module with the given name + # or nil if the module is not enabled for the project + def enabled_module(name) + name = name.to_s + enabled_modules.detect {|m| m.name == name} + end + + # Return true if the module with the given name is enabled + def module_enabled?(name) + enabled_module(name).present? end def enabled_module_names=(module_names) @@ -851,7 +858,7 @@ # Get issues sorted by root_id, lft so that parent issues # get copied before their children - project.issues.reorder('root_id, lft').all.each do |issue| + project.issues.reorder('root_id, lft').each do |issue| new_issue = Issue.new new_issue.copy_from(issue, :subtasks => false, :link => false) new_issue.project = self @@ -995,15 +1002,15 @@ # Returns the systemwide active activities merged with the project specific overrides def system_activities_and_project_overrides(include_inactive=false) - if include_inactive - return TimeEntryActivity.shared. - where("id NOT IN (?)", self.time_entry_activities.collect(&:parent_id)).all + - self.time_entry_activities - else - return TimeEntryActivity.shared.active. - where("id NOT IN (?)", self.time_entry_activities.collect(&:parent_id)).all + - self.time_entry_activities.active + t = TimeEntryActivity.table_name + scope = TimeEntryActivity.where( + "(#{t}.project_id IS NULL AND #{t}.id NOT IN (?)) OR (#{t}.project_id = ?)", + time_entry_activities.map(&:parent_id), id + ) + unless include_inactive + scope = scope.active end + scope end # Archives subprojects recursively @@ -1018,6 +1025,8 @@ set_or_update_position_under(parent) end + public + # Inserts/moves the project so that target's children or root projects stay alphabetically sorted def set_or_update_position_under(target_parent) parent_was = parent