diff --git a/dataobject_manager/code/AssetManager.php b/dataobject_manager/code/AssetManager.php index 358c2ec..c7ea141 100644 --- a/dataobject_manager/code/AssetManager.php +++ b/dataobject_manager/code/AssetManager.php @@ -24,7 +24,7 @@ class AssetManager extends FileDataObjectManager $fields->push(new SimpleTreeDropdownField('ParentID','Folder',"Folder")); $fields->push(new HiddenField('ID','',$controller->ID)); - parent::__construct($controller, $name, $sourceClass, null, $headings, $fields, "Classname != 'Folder'"); + parent::__construct($controller, $name, $sourceClass, null, $headings, $fields, "\"Classname\" != 'Folder'"); } function FieldHolder() diff --git a/dataobject_manager/code/AssetManagerFolder.php b/dataobject_manager/code/AssetManagerFolder.php index eb34ea2..5947ea9 100644 --- a/dataobject_manager/code/AssetManagerFolder.php +++ b/dataobject_manager/code/AssetManagerFolder.php @@ -15,7 +15,7 @@ class AssetManagerFolder extends DataObjectDecorator 'Title' => 30, 'Filename' => 70 )); - $folder_filter = "(Classname != 'Folder' AND ParentID = ".$this->owner->ID.")"; + $folder_filter = "(\"Classname\" != 'Folder' AND \"ParentID\" = ".$this->owner->ID.")"; $filter = $a->sourceFilter ? "({$a->sourceFilter}) AND $folder_filter" : $folder_filter; $a->setSourceFilter($filter); $a->setParentClass("Folder"); diff --git a/dataobject_manager/code/DataObjectManager.php b/dataobject_manager/code/DataObjectManager.php index c4bf4eb..db7aa0b 100644 --- a/dataobject_manager/code/DataObjectManager.php +++ b/dataobject_manager/code/DataObjectManager.php @@ -201,10 +201,10 @@ class DataObjectManager extends ComplexTableField if($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { $this->sort = "SortOrder"; - $this->sourceSort = "SortOrder ASC"; + $this->sourceSort = "\"SortOrder\" ASC"; } elseif(isset($_REQUEST['ctf'][$this->Name()]['sort']) && !empty($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = $_REQUEST['ctf'][$this->Name()]['sort'] . " " . $this->sort_dir; + $this->sourceSort = "\"" . $_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; } else { $this->sourceSort = singleton($this->sourceClass())->stat('default_sort'); @@ -749,7 +749,7 @@ class DataObjectManager_Controller extends Controller if(!isset($relationName)) return false; list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($ownerClass)->many_many($relationName); foreach($map as $sort => $id) - DB::query("UPDATE `$table` SET SortOrder = $sort WHERE {$className}ID = $id AND {$ownerClass}ID = $controllerID"); + DB::query("UPDATE \"$table\" SET \"SortOrder\" = $sort WHERE \"{$className}ID\" = $id AND \"{$ownerClass}ID\" = $controllerID"); } else { foreach($map as $sort => $id) { diff --git a/dataobject_manager/code/FileDataObjectManager.php b/dataobject_manager/code/FileDataObjectManager.php index 92ced06..9ac3829 100644 --- a/dataobject_manager/code/FileDataObjectManager.php +++ b/dataobject_manager/code/FileDataObjectManager.php @@ -138,11 +138,11 @@ class FileDataObjectManager extends DataObjectManager protected function getImportFolderHierarchy($parentID, $level = 0) { $options = array(); - if($children = DataObject::get("Folder", "ParentID = $parentID")) { + if($children = DataObject::get("Folder", "\"ParentID\" = $parentID")) { foreach($children as $child) { $indent=""; for($i=0;$i<$level;$i++) $indent .= "  "; - $files = DataObject::get($this->importClass, "ClassName != 'Folder' AND ParentID = $child->ID"); + $files = DataObject::get($this->importClass, "\"ClassName\" != 'Folder' AND \"ParentID\" = $child->ID"); $count = $files ? $files->Count() : "0"; $options[$this->importLinkFor($child)] = $indent.$child->Title . " ($count files)"; $options += $this->getImportFolderHierarchy($child->ID, $level+1); @@ -154,7 +154,7 @@ class FileDataObjectManager extends DataObjectManager protected function getUploadFolderHierarchy($parentID, $level = 0) { $options = array(); - if($children = DataObject::get("Folder", "ParentID = $parentID")) { + if($children = DataObject::get("Folder", "\"ParentID\" = $parentID")) { foreach($children as $child) { $indent=""; for($i=0;$i<$level;$i++) $indent .= "  "; @@ -565,7 +565,7 @@ class FileDataObjectManager extends DataObjectManager protected function ImportForm($folder_id = null) { $folder_id = isset($_POST['folder_id']) ? $_POST['folder_id'] : $this->importFolderID;; - if($files = DataObject::get($this->importClass, "ClassName != 'Folder' AND ParentID = $folder_id")) + if($files = DataObject::get($this->importClass, "\"ClassName\" != 'Folder' AND \"ParentID\" = $folder_id")) $fields = $this->getImportFields(); $fields->push(new HiddenField('folder_id','',$folder_id)); $fields->push(new LiteralField('select','
Select: all | none
')); diff --git a/dataobject_manager/code/HasManyDataObjectManager.php b/dataobject_manager/code/HasManyDataObjectManager.php index add6956..c91962d 100644 --- a/dataobject_manager/code/HasManyDataObjectManager.php +++ b/dataobject_manager/code/HasManyDataObjectManager.php @@ -62,9 +62,9 @@ class HasManyDataObjectManager extends DataObjectManager function getQuery($limitClause = null) { if($this->customQuery) { $query = $this->customQuery; - $query->select[] = "{$this->sourceClass}.ID AS ID"; - $query->select[] = "{$this->sourceClass}.ClassName AS ClassName"; - $query->select[] = "{$this->sourceClass}.ClassName AS RecordClassName"; + $query->select[] = "\"{$this->sourceClass}\".\"ID\" AS \"ID\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"ClassName\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"RecordClassName\""; } else { $query = singleton($this->sourceClass)->extendedSQL($this->sourceFilter, $this->sourceSort, $limitClause, $this->sourceJoin); diff --git a/dataobject_manager/code/HasManyFileDataObjectManager.php b/dataobject_manager/code/HasManyFileDataObjectManager.php index 1af7d02..d69d0c2 100644 --- a/dataobject_manager/code/HasManyFileDataObjectManager.php +++ b/dataobject_manager/code/HasManyFileDataObjectManager.php @@ -59,9 +59,9 @@ class HasManyFileDataObjectManager extends FileDataObjectManager function getQuery($limitClause = null) { if($this->customQuery) { $query = $this->customQuery; - $query->select[] = "{$this->sourceClass}.ID AS ID"; - $query->select[] = "{$this->sourceClass}.ClassName AS ClassName"; - $query->select[] = "{$this->sourceClass}.ClassName AS RecordClassName"; + $query->select[] = "\"{$this->sourceClass}\".\"ID\" AS \"ID\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"ClassName\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"RecordClassName\""; } else { $query = singleton($this->sourceClass)->extendedSQL($this->sourceFilter, $this->sourceSort, $limitClause, $this->sourceJoin); diff --git a/dataobject_manager/code/HasOneDataObjectManager.php b/dataobject_manager/code/HasOneDataObjectManager.php index 18042b7..dd9ba63 100644 --- a/dataobject_manager/code/HasOneDataObjectManager.php +++ b/dataobject_manager/code/HasOneDataObjectManager.php @@ -37,7 +37,7 @@ class HasOneDataObjectManager extends HasManyDataObjectManager } function isChildSet($childID) { - return DataObject::get($this->controllerClass(), '`' . $this->joinField . "` = '$childID'"); + return DataObject::get($this->controllerClass(), '"' . $this->joinField . "\" = '$childID'"); } function ExtraData() { diff --git a/dataobject_manager/code/HasOneFileDataObjectManager.php b/dataobject_manager/code/HasOneFileDataObjectManager.php index a504400..0b62258 100644 --- a/dataobject_manager/code/HasOneFileDataObjectManager.php +++ b/dataobject_manager/code/HasOneFileDataObjectManager.php @@ -37,7 +37,7 @@ class HasOneFileDataObjectManager extends HasManyFileDataObjectManager } function isChildSet($childID) { - return DataObject::get($this->controllerClass(), '`' . $this->joinField . "` = '$childID'"); + return DataObject::get($this->controllerClass(), '"' . $this->joinField . "\" = '$childID'"); } function ExtraData() { diff --git a/dataobject_manager/code/ImageAssetManager.php b/dataobject_manager/code/ImageAssetManager.php index ad1fd35..1c2ff4f 100644 --- a/dataobject_manager/code/ImageAssetManager.php +++ b/dataobject_manager/code/ImageAssetManager.php @@ -23,7 +23,7 @@ class ImageAssetManager extends ImageDataObjectManager $fields->push(new SimpleTreeDropdownField('ParentID','Folder',"Folder")); $fields->push(new HiddenField('ID','',$controller->ID)); - parent::__construct($controller, $name, $sourceClass, null, $headings, $fields, "Classname != 'Folder'"); + parent::__construct($controller, $name, $sourceClass, null, $headings, $fields, "\"Classname\" != 'Folder'"); } } \ No newline at end of file diff --git a/dataobject_manager/code/ManyManyDataObjectManager.php b/dataobject_manager/code/ManyManyDataObjectManager.php index d962b9f..5c16af6 100644 --- a/dataobject_manager/code/ManyManyDataObjectManager.php +++ b/dataobject_manager/code/ManyManyDataObjectManager.php @@ -60,7 +60,7 @@ class ManyManyDataObjectManager extends HasManyDataObjectManager $sourceField = 'Child'; $parentID = $this->controller->ID; - $this->sourceJoin .= " LEFT JOIN `$manyManyTable` ON (`$source`.`ID` = `{$sourceField}ID` AND `$manyManyTable`.`{$this->manyManyParentClass}ID` = '$parentID')"; + $this->sourceJoin .= " LEFT JOIN \"$manyManyTable\" ON (\"$source\".\"ID\" = \"{$sourceField}ID\" AND \"$manyManyTable\".\"{$this->manyManyParentClass}ID\" = '$parentID')"; $this->joinField = 'Checked'; if(isset($_REQUEST['ctf'][$this->Name()]['only_related'])) @@ -80,32 +80,32 @@ class ManyManyDataObjectManager extends HasManyDataObjectManager } - protected function loadSort() - { + protected function loadSort() { if($this->ShowAll()) $this->setPageSize(999); + $original_sort = $this->sourceSort; if(SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($this->controllerClass())->many_many($this->Name()); $sort_column = "MMSort"; if(!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == $sort_column) { $this->sort = $sort_column; - $this->sourceSort = "$sort_column " . SortableDataObject::$sort_dir; - $this->sourceSort .= ",Checked DESC"; + $this->sourceSort = "\"$sort_column\" " . SortableDataObject::$sort_dir; + $this->sourceSort .= ", \"Checked\" DESC"; } } elseif($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { $this->sort = "SortOrder"; - $this->sourceSort = "SortOrder " . SortableDataObject::$sort_dir; - $this->sourceSort .= ", Checked DESC"; + $this->sourceSort = "\"SortOrder\" " . SortableDataObject::$sort_dir; + $this->sourceSort .= ", \"Checked\" DESC"; } elseif(isset($_REQUEST['ctf'][$this->Name()]['sort']) && !empty($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = $_REQUEST['ctf'][$this->Name()]['sort'] . " " . $this->sort_dir; + $this->sourceSort = "\"".$_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; } - + if ($original_sort && $original_sort != $this->sourceSort) $this->sourceSort .= ', '.$original_sort; } @@ -140,9 +140,9 @@ class ManyManyDataObjectManager extends HasManyDataObjectManager function getQuery($limitClause = null) { if($this->customQuery) { $query = $this->customQuery; - $query->select[] = "{$this->sourceClass}.ID AS ID"; - $query->select[] = "{$this->sourceClass}.ClassName AS ClassName"; - $query->select[] = "{$this->sourceClass}.ClassName AS RecordClassName"; + $query->select[] = "\"{$this->sourceClass}\".\"ID\" AS \"ID\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"ClassName\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"RecordClassName\""; } else { $query = singleton($this->sourceClass)->extendedSQL($this->sourceFilter, $this->sourceSort, $limitClause, $this->sourceJoin); @@ -151,18 +151,27 @@ class ManyManyDataObjectManager extends HasManyDataObjectManager $SNG = singleton($this->sourceClass); foreach($this->FieldList() as $k => $title) { - if(! $SNG->hasField($k) && ! $SNG->hasMethod('get' . $k)) + if(! $SNG->hasField($k) && ! $SNG->hasMethod('get' . $k)) { + // everything we add to select must be added to groupby too... $query->select[] = $k; + $query->groupby[] = $k; + } } $parent = $this->controllerClass(); $mm = $this->manyManyTable; - $if_clause = "IF(`$mm`.`{$this->manyManyParentClass}ID` IS NULL, '0', '1')"; - $query->select[] = "$if_clause AS Checked"; - if(SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) - $query->select[] = "IFNULL(`$mm`.SortOrder,9999999) AS MMSort"; + $when_clause = "CASE WHEN \"$mm\".\"{$this->manyManyParentClass}ID\" IS NULL THEN '0' ELSE '1' END"; + $query->select[] = "$when_clause AS \"Checked\""; + // everything we add to select must be added to groupby too... + $query->groupby[] = $when_clause; + + if (SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { + $query->select[] = "COALESCE(\"$mm\".\"SortOrder\",9999999) AS \"MMSort\""; + // everything we add to select must be added to groupby too... + $query->groupby[] = "COALESCE(\"$mm\".\"SortOrder\",9999999)"; + } if($this->OnlyRelated()) - $query->where[] = $if_clause; + $query->where[] = "(\"$mm\".\"{$this->manyManyParentClass}ID\" IS NOT NULL)"; } return clone $query; } diff --git a/dataobject_manager/code/ManyManyFileDataObjectManager.php b/dataobject_manager/code/ManyManyFileDataObjectManager.php index 7aa480a..132207b 100644 --- a/dataobject_manager/code/ManyManyFileDataObjectManager.php +++ b/dataobject_manager/code/ManyManyFileDataObjectManager.php @@ -56,7 +56,7 @@ class ManyManyFileDataObjectManager extends HasManyFileDataObjectManager $sourceField = 'Child'; $parentID = $this->controller->ID; - $this->sourceJoin .= " LEFT JOIN `$manyManyTable` ON (`$source`.`ID` = `{$sourceField}ID` AND `$manyManyTable`.`{$this->manyManyParentClass}ID` = '$parentID')"; + $this->sourceJoin .= " LEFT JOIN \"$manyManyTable\" ON (\"$source\".\"ID\" = \"{$sourceField}ID\" AND \"$manyManyTable\".\"{$this->manyManyParentClass}ID\" = '$parentID')"; $this->joinField = 'Checked'; if(isset($_REQUEST['ctf'][$this->Name()]['only_related'])) @@ -77,28 +77,27 @@ class ManyManyFileDataObjectManager extends HasManyFileDataObjectManager } - protected function loadSort() - { + protected function loadSort() { if($this->ShowAll()) $this->setPageSize(999); - if(SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { - list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($this->controllerClass())->many_many($this->Name()); - $sort_column = "`$table`.SortOrder"; - if(!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == $sort_column) { - $this->sort = $sort_column; - $this->sourceSort = "$sort_column " . SortableDataObject::$sort_dir; - } - } - - elseif($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { + $original_sort = $this->sourceSort; + if (SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { + list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($this->controllerClass())->many_many($this->Name()); + $sort_column = "$table.SortOrder"; + if (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == $sort_column) { + $this->sort = $sort_column; + $this->sourceSort = "\"$table\".\"SortOrder\" " . SortableDataObject::$sort_dir; + } + } elseif ($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { $this->sort = "SortOrder"; - $this->sourceSort = "SortOrder " . SortableDataObject::$sort_dir; + $this->sourceSort = "\"SortOrder\" " . SortableDataObject::$sort_dir; + } elseif (isset($_REQUEST['ctf'][$this->Name()]['sort'])) { + $this->sourceSort = "\"" . $_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; } - elseif(isset($_REQUEST['ctf'][$this->Name()]['sort'])) - $this->sourceSort = $_REQUEST['ctf'][$this->Name()]['sort'] . " " . $this->sort_dir; + if ($original_sort && $original_sort != $this->sourceSort) $this->sourceSort .= ', '.$original_sort; } @@ -133,9 +132,9 @@ class ManyManyFileDataObjectManager extends HasManyFileDataObjectManager function getQuery($limitClause = null) { if($this->customQuery) { $query = $this->customQuery; - $query->select[] = "{$this->sourceClass}.ID AS ID"; - $query->select[] = "{$this->sourceClass}.ClassName AS ClassName"; - $query->select[] = "{$this->sourceClass}.ClassName AS RecordClassName"; + $query->select[] = "\"{$this->sourceClass}\".\"ID\" AS \"ID\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"ClassName\""; + $query->select[] = "\"{$this->sourceClass}\".\"ClassName\" AS \"RecordClassName\""; } else { $query = singleton($this->sourceClass)->extendedSQL($this->sourceFilter, $this->sourceSort, $limitClause, $this->sourceJoin); @@ -144,16 +143,21 @@ class ManyManyFileDataObjectManager extends HasManyFileDataObjectManager $SNG = singleton($this->sourceClass); foreach($this->FieldList() as $k => $title) { - if(! $SNG->hasField($k) && ! $SNG->hasMethod('get' . $k)) + if(! $SNG->hasField($k) && ! $SNG->hasMethod('get' . $k)) { $query->select[] = $k; + // everything we add to select must be added to groupby too... + $query->groupby[] = $k; + } } $parent = $this->controllerClass(); $mm = $this->manyManyTable; - $if_clause = "IF(`$mm`.`{$this->manyManyParentClass}ID` IS NULL, '0', '1')"; - $query->select[] = "$if_clause AS Checked"; + $when_clause = "CASE WHEN \"$mm\".\"{$this->manyManyParentClass}ID\" IS NULL THEN '0' ELSE '1' END"; + $query->select[] = "$when_clause AS \"Checked\""; + // everything we add to select must be added to groupby too... + $query->groupby[] = $when_clause; if($this->OnlyRelated()) - $query->where[] = $if_clause; + $query->where[] = "(\"$mm\".\"{$this->manyManyParentClass}ID\" IS NOT NULL)"; } return clone $query; } diff --git a/dataobject_manager/code/SortableDataObject.php b/dataobject_manager/code/SortableDataObject.php index 0393460..7366ad4 100644 --- a/dataobject_manager/code/SortableDataObject.php +++ b/dataobject_manager/code/SortableDataObject.php @@ -99,13 +99,13 @@ class SortableDataObject extends DataObjectDecorator if($sort_field) break; foreach($join_tables as $join_table) { if(stristr($from,$join_table)) { - $sort_field = "`$join_table`.SortOrder"; + $sort_field = "\"$join_table\".\"SortOrder\""; break; } } } } - if(!$sort_field) $sort_field = "SortOrder"; + if(!$sort_field) $sort_field = "\"SortOrder\""; if(!$query->orderby || ($query->orderby == $this->owner->stat('default_sort'))) $query->orderby = "$sort_field " . self::$sort_dir; diff --git a/dataobject_manager/code/dropdown_fields/SimpleTreeDropdownField.php b/dataobject_manager/code/dropdown_fields/SimpleTreeDropdownField.php index 0d7cdfe..f0d93d5 100644 --- a/dataobject_manager/code/dropdown_fields/SimpleTreeDropdownField.php +++ b/dataobject_manager/code/dropdown_fields/SimpleTreeDropdownField.php @@ -21,7 +21,7 @@ class SimpleTreeDropdownField extends HTMLDropdownField { $options = array(); $class = ($this->sourceClass == "SiteTree" || is_subclass_of($this->sourceClass, "SiteTree")) ? "SiteTree" : $this->sourceClass; - if($children = DataObject::get($class, "ParentID = $parentID")) { + if($children = DataObject::get($class, "\"ParentID\" = $parentID")) { foreach($children as $child) { $indent=""; for($i=0;$i<$level;$i++) $indent .= "  "; diff --git a/dataobject_manager/code/flv/FLV.php b/dataobject_manager/code/flv/FLV.php index 93afedd..7aca3fa 100644 --- a/dataobject_manager/code/flv/FLV.php +++ b/dataobject_manager/code/flv/FLV.php @@ -189,7 +189,7 @@ class FLV extends File public function getThumbnail() { - if($img = DataObject::get_one("Image","Title = 'flv_thumb_{$this->ID}'")) + if($img = DataObject::get_one("Image","\"Title\" = 'flv_thumb_{$this->ID}'")) return Director::fileExists($img->Filename) ? $img : false; return false; } @@ -209,7 +209,7 @@ class FLV extends File private function createThumbnail() { $img_title = "flv_thumb_".$this->ID; - if($existing = DataObject::get("Image","Title = '$img_title'")) { + if($existing = DataObject::get("Image","\"Title\" = '$img_title'")) { foreach($existing as $file) $file->delete(); } $folder = Folder::findOrMake(self::$thumbnail_folder);