Exemplo n.º 1
0
 public static function getFieldForBrickType(Object_Class $class, $bricktype)
 {
     $fieldDefinitions = $class->getFieldDefinitions();
     foreach ($fieldDefinitions as $key => $fd) {
         if ($fd instanceof Object_Class_Data_Objectbricks) {
             if (in_array($bricktype, $fd->getAllowedTypes())) {
                 return $key;
             }
         }
     }
     return null;
 }
Exemplo n.º 2
0
 /**
  * Save changes to database, it's an good idea to use save() instead
  *
  * @return void
  */
 public function update()
 {
     $class = get_object_vars($this->model);
     foreach ($class as $key => $value) {
         if (in_array($key, $this->validColumns)) {
             if (is_array($value) || is_object($value)) {
                 $value = Pimcore_Tool_Serialize::serialize($value);
             } else {
                 if (is_bool($value)) {
                     $value = (int) $value;
                 }
             }
             $data[$key] = $value;
         }
     }
     $this->db->update("classes", $data, $this->db->quoteInto("id = ?", $this->model->getId()));
     // only for logging
     $setsql = array();
     foreach ($data as $key => $value) {
         $setsql[] = "`" . $key . "` = '" . $value . "'";
     }
     $this->logSql("UPDATE classes SET " . implode(",", $setsql) . " WHERE id = " . $this->db->quote($this->model->getId()) . ";");
     // save definition as a serialized file
     $definitionFile = PIMCORE_CLASS_DIRECTORY . "/definition_" . $this->model->getId() . ".psf";
     if (!is_writable(dirname($definitionFile)) || is_file($definitionFile) && !is_writable($definitionFile)) {
         throw new Exception("Cannot write definition file in: " . $definitionFile . " please check write permission on this directory.");
     }
     file_put_contents($definitionFile, Pimcore_Tool_Serialize::serialize($this->model->layoutDefinitions));
     chmod($definitionFile, 0766);
     $objectTable = "object_query_" . $this->model->getId();
     $objectDatastoreTable = "object_store_" . $this->model->getId();
     $objectDatastoreTableRelation = "object_relations_" . $this->model->getId();
     $objectView = "object_" . $this->model->getId();
     // create object table if not exists
     $protectedColums = array("oo_id", "oo_classId", "oo_className");
     $protectedDatastoreColumns = array("oo_id");
     $this->dbexec("CREATE TABLE IF NOT EXISTS `" . $objectTable . "` (\r\n\t\t\t  `oo_id` int(11) NOT NULL default '0',\r\n\t\t\t  `oo_classId` int(11) default '" . $this->model->getId() . "',\r\n\t\t\t  `oo_className` varchar(255) default '" . $this->model->getName() . "',\r\n\t\t\t  PRIMARY KEY  (`oo_id`)\r\n\t\t\t) DEFAULT CHARSET=utf8;");
     $this->dbexec("CREATE TABLE IF NOT EXISTS `" . $objectDatastoreTable . "` (\r\n\t\t\t  `oo_id` int(11) NOT NULL default '0',\r\n\t\t\t  PRIMARY KEY  (`oo_id`)\r\n\t\t\t) DEFAULT CHARSET=utf8;");
     $this->dbexec("CREATE TABLE IF NOT EXISTS `" . $objectDatastoreTableRelation . "` (\r\n              `src_id` int(11) NOT NULL DEFAULT '0',\r\n              `dest_id` int(11) NOT NULL DEFAULT '0',\r\n              `type` varchar(50) NOT NULL DEFAULT '',\r\n              `fieldname` varchar(70) NOT NULL DEFAULT '0',\r\n              `index` int(11) unsigned NOT NULL DEFAULT '0',\r\n              `ownertype` enum('object','fieldcollection','localizedfield','objectbrick') NOT NULL DEFAULT 'object',\r\n              `ownername` varchar(70) NOT NULL DEFAULT '',\r\n              `position` varchar(11) NOT NULL DEFAULT '0',\r\n              PRIMARY KEY (`src_id`,`dest_id`,`ownertype`,`ownername`,`fieldname`,`type`,`position`),\r\n              KEY `index` (`index`),\r\n              KEY `src_id` (`src_id`),\r\n              KEY `dest_id` (`dest_id`),\r\n              KEY `fieldname` (`fieldname`),\r\n              KEY `position` (`position`),\r\n              KEY `ownertype` (`ownertype`),\r\n              KEY `type` (`type`),\r\n              KEY `ownername` (`ownername`)\r\n            ) DEFAULT CHARSET=utf8;");
     $existingColumns = $this->getValidTableColumns($objectTable, false);
     // no caching of table definition
     $existingDatastoreColumns = $this->getValidTableColumns($objectDatastoreTable, false);
     // no caching of table definition
     $columnsToRemove = $existingColumns;
     $datastoreColumnsToRemove = $existingDatastoreColumns;
     // add non existing columns in the table
     if (is_array($this->model->getFieldDefinitions()) && count($this->model->getFieldDefinitions())) {
         foreach ($this->model->getFieldDefinitions() as $key => $value) {
             // nullable & default value
             list($defaultvalue, $nullable) = $this->getDefaultValueAndNullableForField($value);
             // if a datafield requires more than one column in the query table
             if (is_array($value->getQueryColumnType())) {
                 foreach ($value->getQueryColumnType() as $fkey => $fvalue) {
                     $this->addModifyColumn($objectTable, $key . "__" . $fkey, $fvalue, $defaultvalue, $nullable);
                     $protectedColums[] = $key . "__" . $fkey;
                 }
             }
             // if a datafield requires more than one column in the datastore table => only for non-relation types
             if (!$value->isRelationType() && is_array($value->getColumnType())) {
                 foreach ($value->getColumnType() as $fkey => $fvalue) {
                     $this->addModifyColumn($objectDatastoreTable, $key . "__" . $fkey, $fvalue, $defaultvalue, $nullable);
                     $protectedDatastoreColumns[] = $key . "__" . $fkey;
                 }
             }
             // everything else
             //                if (!is_array($value->getQueryColumnType()) && !is_array($value->getColumnType())) {
             if (!is_array($value->getQueryColumnType()) && $value->getQueryColumnType()) {
                 $this->addModifyColumn($objectTable, $key, $value->getQueryColumnType(), $defaultvalue, $nullable);
                 $protectedColums[] = $key;
             }
             if (!is_array($value->getColumnType()) && $value->getColumnType() && !$value->isRelationType()) {
                 $this->addModifyColumn($objectDatastoreTable, $key, $value->getColumnType(), $defaultvalue, $nullable);
                 $protectedDatastoreColumns[] = $key;
             }
             //                }
             // add indices
             $this->addIndexToField($value, $objectTable);
             $this->addIndexToField($value, $objectDatastoreTable);
         }
     }
     // remove unused columns in the table
     $this->removeUnusedColumns($objectTable, $columnsToRemove, $protectedColums);
     $this->removeUnusedColumns($objectDatastoreTable, $datastoreColumnsToRemove, $protectedDatastoreColumns, true);
     // create view
     try {
         //$this->dbexec('CREATE OR REPLACE VIEW `' . $objectView . '` AS SELECT * FROM `objects` left JOIN `' . $objectTable . '` ON `objects`.`o_id` = `' . $objectTable . '`.`oo_id` WHERE `objects`.`o_classId` = ' . $this->model->getId() . ';');
         $this->dbexec('CREATE OR REPLACE VIEW `' . $objectView . '` AS SELECT * FROM `' . $objectTable . '` JOIN `objects` ON `objects`.`o_id` = `' . $objectTable . '`.`oo_id`;');
     } catch (Exception $e) {
         Logger::debug($e);
     }
 }