From: Jean-Philippe Lang Date: Mon, 5 Mar 2012 13:04:36 +0000 (+0000) Subject: Merged r8865 from trunk. X-Git-Tag: 1.3.2~24 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f587807f6b86f352eb8bf0e1b3f5fe9b2e75c6c1;p=redmine.git Merged r8865 from trunk. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.3-stable@9115 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/project.rb b/app/models/project.rb index cdb460ed6..d6ae40498 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -390,16 +390,21 @@ class Project < ActiveRecord::Base # Returns a scope of the Versions used by the project def shared_versions - @shared_versions ||= begin - r = root? ? self : root + if new_record? Version.scoped(:include => :project, - :conditions => "#{Project.table_name}.id = #{id}" + - " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + + :conditions => "#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND #{Version.table_name}.sharing = 'system'") + else + @shared_versions ||= begin + r = root? ? self : root + Version.scoped(:include => :project, + :conditions => "#{Project.table_name}.id = #{id}" + + " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + " #{Version.table_name}.sharing = 'system'" + " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" + " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + "))") + end end end diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 152d096c6..9ae389885 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -586,6 +586,13 @@ class ProjectTest < ActiveSupport::TestCase assert !versions.collect(&:id).include?(6) end + def test_shared_versions_for_new_project_should_include_system_shared_versions + p = Project.find(5) + v = Version.create!(:name => 'system_sharing', :project => p, :sharing => 'system') + + assert_include v, Project.new.shared_versions + end + def test_next_identifier ProjectCustomField.delete_all Project.create!(:name => 'last', :identifier => 'p2008040')