Merge pull request #4497 from sminnee/fix-regression-from-classinfo

FIX: Fixed regression from ClassInfo case-sensitivity fix.
This commit is contained in:
Damian Mooyman 2015-08-07 14:42:39 +12:00
commit b53c174efb
2 changed files with 17 additions and 4 deletions

View File

@ -61,6 +61,8 @@ class ClassInfo {
* @return array List of subclasses
*/
public static function getValidSubClasses($class = 'SiteTree', $includeUnbacked = false) {
if(is_string($class) && !class_exists($class)) return null;
$class = self::class_name($class);
$classes = DB::get_schema()->enumValuesForField($class, 'ClassName');
if (!$includeUnbacked) $classes = array_filter($classes, array('ClassInfo', 'exists'));
@ -76,6 +78,8 @@ class ClassInfo {
* @return array
*/
public static function dataClassesFor($class) {
if(is_string($class) && !class_exists($class)) return null;
$result = array();
$class = self::class_name($class);
@ -100,6 +104,8 @@ class ClassInfo {
* @return string
*/
public static function baseDataClass($class) {
if(is_string($class) && !class_exists($class)) return null;
$class = self::class_name($class);
if (!is_subclass_of($class, 'DataObject')) {
@ -134,6 +140,8 @@ class ClassInfo {
* @return array Names of all subclasses as an associative array.
*/
public static function subclassesFor($class) {
if(is_string($class) && !class_exists($class)) return null;
//normalise class case
$className = self::class_name($class);
$descendants = SS_ClassLoader::instance()->getManifest()->getDescendantsOf($class);
@ -159,6 +167,7 @@ class ClassInfo {
if (is_object($nameOrObject)) {
return get_class($nameOrObject);
}
$reflection = new ReflectionClass($nameOrObject);
return $reflection->getName();
}
@ -172,6 +181,8 @@ class ClassInfo {
* @return array
*/
public static function ancestry($class, $tablesOnly = false) {
if(is_string($class) && !class_exists($class)) return null;
$class = self::class_name($class);
$lClass = strtolower($class);

View File

@ -232,10 +232,12 @@ class DataQuery {
foreach($collisions as $collision) {
if(preg_match('/^"([^"]+)"/', $collision, $matches)) {
$collisionBase = $matches[1];
$collisionClasses = ClassInfo::subclassesFor($collisionBase);
$collisionClasses = Convert::raw2sql($collisionClasses, true);
$caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN ("
. implode(", ", $collisionClasses) . ") THEN $collision";
if(class_exists($collisionBase)) {
$collisionClasses = ClassInfo::subclassesFor($collisionBase);
$collisionClasses = Convert::raw2sql($collisionClasses, true);
$caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN ("
. implode(", ", $collisionClasses) . ") THEN $collision";
}
} else {
user_error("Bad collision item '$collision'", E_USER_WARNING);
}