/** * @param Object_Concrete $object * @return array */ public function load(Object_Concrete $object) { $fieldDef = $object->getClass()->getFieldDefinition($this->model->getFieldname()); $values = array(); foreach ($fieldDef->getAllowedTypes() as $type) { try { $definition = Object_Objectbrick_Definition::getByKey($type); } catch (Exception $e) { continue; } $tableName = $definition->getTableName($object->getClass(), false); try { $results = $this->db->fetchAll("SELECT * FROM " . $tableName . " WHERE o_id = ? AND fieldname = ?", array($object->getId(), $this->model->getFieldname())); } catch (Exception $e) { $results = array(); } $allRelations = $this->db->fetchAll("SELECT * FROM object_relations_" . $object->getO_classId() . " WHERE src_id = ? AND ownertype = 'objectbrick' AND ownername = ?", array($object->getO_id(), $this->model->getFieldname())); $fieldDefinitions = $definition->getFieldDefinitions(); $brickClass = "Object_Objectbrick_Data_" . ucfirst($type); foreach ($results as $result) { $brick = new $brickClass($object); $brick->setFieldname($result["fieldname"]); $brick->setObject($object); foreach ($fieldDefinitions as $key => $fd) { /*if ($fd->isRelationType()) { $relations = array(); foreach ($allRelations as $relation) { if ($relation["fieldname"] == $key) { $relations[] = $relation; } } $brick->setValue( $key, $fd->getDataFromResource($relations)); }*/ if (method_exists($fd, "load")) { // datafield has it's own loader $value = $fd->load($brick); if ($value === 0 || !empty($value)) { $brick->setValue($key, $value); } } else { if (is_array($fd->getColumnType())) { $multidata = array(); foreach ($fd->getColumnType() as $fkey => $fvalue) { $multidata[$key . "__" . $fkey] = $result[$key . "__" . $fkey]; } $brick->setValue($key, $fd->getDataFromResource($multidata)); } else { $brick->setValue($key, $fd->getDataFromResource($result[$key])); } } } $setter = "set" . ucfirst($type); $this->model->{$setter}($brick); $values[] = $brick; } } return $values; }
public function save(Object_Concrete $object) { $tableName = $this->model->getDefinition()->getTableName($object->getClass()); $data = array("o_id" => $object->getId(), "index" => $this->model->getIndex(), "fieldname" => $this->model->getFieldname()); try { foreach ($this->model->getDefinition()->getFieldDefinitions() as $fd) { $getter = "get" . ucfirst($fd->getName()); if (method_exists($fd, "save")) { // for fieldtypes which have their own save algorithm eg. objects, multihref, ... $fd->save($this->model); } else { if ($fd->getColumnType()) { if (is_array($fd->getColumnType())) { $insertDataArray = $fd->getDataForResource($this->model->{$getter}(), $object); $data = array_merge($data, $insertDataArray); } else { $data[$fd->getName()] = $fd->getDataForResource($this->model->{$getter}(), $object); } } } } $this->db->insert($tableName, $data); } catch (Exception $e) { throw $e; } }
/** * @static * @return bool */ public static function doGetInheritedValues(Object_Concrete $object = null) { if (self::$getInheritedValues && $object !== null) { $class = $object->getClass(); return $class->getAllowInherit(); } return self::$getInheritedValues; }
public function delete(Object_Concrete $object) { // empty or create all relevant tables $fieldDef = $object->getClass()->getFieldDefinition($this->model->getFieldname()); foreach ($fieldDef->getAllowedTypes() as $type) { try { $definition = Object_Fieldcollection_Definition::getByKey($type); } catch (Exception $e) { continue; } $tableName = $definition->getTableName($object->getClass()); try { $this->db->delete($tableName, $this->db->quoteInto("o_id = ?", $object->getId()) . " AND " . $this->db->quoteInto("fieldname = ?", $this->model->getFieldname())); } catch (Exception $e) { // create definition if it does not exist $definition->createUpdateTable($object->getClass()); } } // empty relation table $this->db->delete("object_relations_" . $object->getO_classId(), "ownertype = 'fieldcollection' AND " . $this->db->quoteInto("ownername = ?", $this->model->getFieldname()) . " AND " . $this->db->quoteInto("src_id = ?", $object->getId())); }
private function getDataForObject(Object_Concrete $object, $objectFromVersion = false) { foreach ($object->getClass()->getFieldDefinitions() as $key => $def) { $this->getDataForField($object, $key, $def, $objectFromVersion); } }
/** * @param Object_Concrete $object * @return void */ public function delete(Object_Concrete $object) { // update data for store table $tableName = $this->model->getDefinition()->getTableName($object->getClass(), false); $this->db->delete($tableName, $this->db->quoteInto("o_id = ?", $object->getId())); // update data for query table $tableName = $this->model->getDefinition()->getTableName($object->getClass(), true); $this->db->delete($tableName, $this->db->quoteInto("o_id = ?", $object->getId())); //update data for relations table $this->db->delete("object_relations_" . $object->getO_classId(), "src_id = " . $object->getId() . " AND ownertype = 'objectbrick' AND ownername = '" . $this->model->getFieldname() . "'"); }
/** * @param Object_Concrete $object * @return void */ public function save($object, $params = array()) { $getter = "get" . ucfirst($this->getName()); $objectsMetadata = $object->{$getter}(); $classId = null; $objectId = null; if ($object instanceof Object_Concrete) { $objectId = $object->getId(); $classId = $object->getClassId(); $class = $object->getClass(); } else { if ($object instanceof Object_Fieldcollection_Data_Abstract) { $objectId = $object->getObject()->getId(); $classId = $object->getObject()->getClassId(); $class = $object->getObject()->getClass(); } else { if ($object instanceof Object_Localizedfield) { $objectId = $object->getObject()->getId(); $classId = $object->getObject()->getClassId(); $class = $object->getObject()->getClass(); } else { if ($object instanceof Object_Objectbrick_Data_Abstract) { $objectId = $object->getObject()->getId(); $classId = $object->getObject()->getClassId(); $class = $object->getObject()->getClass(); } } } } $table = "object_metadata_" . $classId; $db = Pimcore_Resource::get(); if (!empty($objectsMetadata)) { $objectsMetadata[0]->getResource()->createOrUpdateTable($class); } $db->delete($table, $db->quoteInto("o_id = ?", $objectId) . " AND " . $db->quoteInto("fieldname = ?", $this->getName())); if (!empty($objectsMetadata)) { foreach ($objectsMetadata as $meta) { $meta->save($object); } } parent::save($object, $params); }