Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
 /**
  * @param mixed $data
  * @param Object_Concrete $ownerObject
  * @param array $blockedTags
  */
 public function getCacheTags($data, $ownerObject, $tags = array())
 {
     $tags = is_array($tags) ? $tags : array();
     if ($data instanceof Document || $data instanceof Asset || $data instanceof Object_Abstract) {
         if (!array_key_exists($data->getCacheTag(), $tags)) {
             if (!$ownerObject instanceof Element_Interface || $data->getId() != $ownerObject->getId()) {
                 $tags = $data->getCacheTags($tags);
             }
         }
     }
     return $tags;
 }
 /**
  * @param  Object_Concrete $object
  * @param  array $toDelete
  * @param  array $toAdd
  * @param  string $ownerFieldName
  * @return void
  */
 protected function processRemoteOwnerRelations($object, $toDelete, $toAdd, $ownerFieldName)
 {
     $getter = "get" . ucfirst($ownerFieldName);
     $setter = "set" . ucfirst($ownerFieldName);
     foreach ($toDelete as $id) {
         $owner = Object_Abstract::getById($id);
         //TODO: lock ?!
         if (method_exists($owner, $getter)) {
             $currentData = $owner->{$getter}();
             if (is_array($currentData)) {
                 for ($i = 0; $i < count($currentData); $i++) {
                     if ($currentData[$i]->getId() == $object->getId()) {
                         unset($currentData[$i]);
                         $owner->{$setter}($currentData);
                         $owner->save();
                         Logger::debug("Saved object id [ " . $owner->getId() . " ] by remote modification through [" . $object->getId() . "], Action: deleted [ " . $object->getId() . " ] from [ {$ownerFieldName}]");
                         break;
                     }
                 }
             }
         }
     }
     foreach ($toAdd as $id) {
         $owner = Object_Abstract::getById($id);
         //TODO: lock ?!
         if (method_exists($owner, $getter)) {
             $currentData = $owner->{$getter}();
             $currentData[] = $object;
             $owner->{$setter}($currentData);
             $owner->save();
             Logger::debug("Saved object id [ " . $owner->getId() . " ] by remote modification through [" . $object->getId() . "], Action: added [ " . $object->getId() . " ] to [ {$ownerFieldName} ]");
         }
     }
 }
Пример #5
0
 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()));
 }
Пример #6
0
 /**
  * @param mixed $data
  * @param Object_Concrete $ownerObject
  * @param array $blockedTags
  */
 public function getCacheTags($data, $ownerObject, $tags = array())
 {
     $tags = is_array($tags) ? $tags : array();
     if (is_array($data) && count($data) > 0) {
         foreach ($data as $object) {
             if (!array_key_exists($object->getCacheTag(), $tags)) {
                 if (!$ownerObject instanceof Element_Interface || $object->getId() != $ownerObject->getId()) {
                     $tags = $object->getCacheTags($tags);
                 }
             }
         }
     }
     return $tags;
 }
Пример #7
0
 /**
  * @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() . "'");
 }
Пример #8
0
 /**
  * @param Object_Concrete $object
  * @return void
  */
 public function delete($object)
 {
     $db = Pimcore_Resource::get();
     $db->delete("object_metadata_" . $object->getO_classId(), $db->quoteInto("o_id = ?", $object->getId()) . " AND " . $db->quoteInto("fieldname = ?", $this->getName()));
 }