BUGFIX Fixed error in Folder::getUsedFilesList() if ID column wasn't selected

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@76544 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sean Harvey 2009-05-11 05:30:29 +00:00
parent b9e72a89f8
commit e41c0e2e55

View File

@ -371,13 +371,15 @@ class Folder extends File {
public function getUsedFilesList() { public function getUsedFilesList() {
$result = DB::query("SELECT DISTINCT \"FileID\" FROM \"SiteTree_ImageTracking\""); $result = DB::query("SELECT DISTINCT \"FileID\" FROM \"SiteTree_ImageTracking\"");
$usedFiles = array(); $usedFiles = array();
$where = ""; $where = '';
$classes = ClassInfo::subclassesFor('SiteTree');
if($result->numRecords() > 0) { if($result->numRecords() > 0) {
while($nextResult = $result->next()) { while($nextResult = $result->next()) {
$where .= $nextResult['FileID'] . ','; $where .= $nextResult['FileID'] . ',';
} }
} }
$classes = ClassInfo::subclassesFor('SiteTree');
foreach($classes as $className) { foreach($classes as $className) {
$query = singleton($className)->extendedSQL(); $query = singleton($className)->extendedSQL();
$ids = $query->execute()->column(); $ids = $query->execute()->column();
@ -386,8 +388,8 @@ class Folder extends File {
foreach(singleton($className)->has_one() as $fieldName => $joinClass) { foreach(singleton($className)->has_one() as $fieldName => $joinClass) {
if($joinClass == 'Image' || $joinClass == 'File') { if($joinClass == 'Image' || $joinClass == 'File') {
foreach($ids as $id) { foreach($ids as $id) {
$object = DataObject::get_by_id($className, $id); $object = DataObject::get_by_id($className, (int) $id);
if($object->$fieldName != NULL) $usedFiles[] = $object->$fieldName; if($object && $object->$fieldName != NULL) $usedFiles[] = $object->$fieldName;
unset($object); unset($object);
} }
} elseif($joinClass == 'Folder') { } elseif($joinClass == 'Folder') {
@ -395,9 +397,11 @@ class Folder extends File {
} }
} }
} }
foreach($usedFiles as $file) { foreach($usedFiles as $file) {
$where .= $file->ID . ','; $where .= $file->ID . ',';
} }
if($where == "") return "(\"ClassName\" = 'File' OR \"ClassName\" = 'Image')"; if($where == "") return "(\"ClassName\" = 'File' OR \"ClassName\" = 'Image')";
$where = substr($where, 0, strlen($where) - 1); $where = substr($where, 0, strlen($where) - 1);
$where = "\"File\".\"ID\" NOT IN (" . $where . ") AND (\"ClassName\" = 'File' OR \"ClassName\" = 'Image')"; $where = "\"File\".\"ID\" NOT IN (" . $where . ") AND (\"ClassName\" = 'File' OR \"ClassName\" = 'Image')";