/** * add object with mainModel (if not already added) * @param Object $pObject * @param boolean $pThrowException throw exception if object can't be added (no complete id or object already added) * @throws \Exception */ public function addObject(Object $pObject, $pThrowException = true) { if (!$pObject->getModel() instanceof MainModel) { throw new \Exception('mdodel must be instance of MainModel'); } if ($pObject->hasCompleteId()) { if ($pObject->getModel()->hasIdProperty()) { $lModelName = $pObject->getModel()->getModelName(); $lId = $pObject->getId(); if (!array_key_exists($lModelName, $this->mMap)) { $this->mMap[$lModelName] = array(); } // if object NOT already added, we can add it and create attached LocalObjectCollection if (!array_key_exists($lId, $this->mMap[$lModelName])) { $this->mMap[$lModelName][$lId] = $pObject; } else { if ($pThrowException) { throw new \Exception('object already added'); } } } } else { if ($pThrowException) { trigger_error(json_encode($pObject->toObject())); trigger_error($pObject->getModel()->getModelName()); trigger_error(json_encode($pObject->getModel()->getIdproperties())); throw new \Exception('object can\'t be added, object has no id or id is incomplete'); } } }
public function loadValue(Object $pObject) { if ($pObject->getModel() !== $this->getUniqueModel()) { throw new \Exception('object not compatible with property '); } $lSerializationUnit = $this->getUniqueModel()->getSerialization(); if (is_null($lSerializationUnit)) { trigger_error("+++++++++ no serial +++++++++"); return false; } return $lSerializationUnit->loadObject($pObject); }
/** * execute controller * @param Oject $pObject * @param array $pParams * @param array $pVisitRootObject * @return unknown|boolean */ public final function execute(Object $pObject, $pParams = array()) { $this->_verifParameters($pParams); if ($pObject->getModel() instanceof Model || $pObject->getModel() instanceof ModelArray) { $this->mPropertyNameStack = array(); $this->mMainObject = $pObject; $this->mParams = $pParams; $this->_init($pObject); if ($this->_isVisitRootObject()) { $lModelName = $pObject->getModel()->getModelName(); $lProperty = new ForeignProperty($pObject->getModel(), $lModelName); $lCustomModel = new ModelCustom('modelCustom', array($lProperty)); $lRootObject = $lCustomModel->getObjectInstance(); $lRootObject->setValue($lModelName, $pObject); $this->_accept($lRootObject, $lModelName, $lModelName); } else { $this->_acceptChildren($pObject); } return $this->_finalize($pObject); } return false; }
/** * add object with localModel (only if not already added) * @param Object $pObject * @param boolean $pThrowException throw exception if an object with same id already exists * @return boolean true if object is added */ public function addObject(Object $pObject, $pThrowException = true) { if (!$pObject->getModel() instanceof LocalModel) { throw new \Exception('mdodel must be instance of LocalModel'); } $lReturn = false; $lId = $pObject->getId(); if (!$pObject->getModel()->hasIdProperty() || !$pObject->hasCompleteId()) { return $lReturn; } $pModelName = $pObject->getModel()->getModelName(); if (!array_key_exists($pModelName, $this->mMap)) { $this->mMap[$pModelName] = array(); } if (!array_key_exists($lId, $this->mMap[$pModelName])) { $this->mMap[$pModelName][$lId] = $pObject; $lReturn = true; } else { if ($pThrowException) { throw new \Exception('object already added'); } } return $lReturn; }
/** * load instancied object with serialized object * @param Object $pObject * @param boolean $pForceLoad if object already exists and is already loaded, force to reload object * @throws \Exception * @return Object|null null if load is unsuccessfull */ public function loadAndFillObject(Object $pObject, $pForceLoad = false) { $lSuccess = false; $this->load(); if (is_null($lSerializationUnit = $this->getSerialization())) { throw new \Exception("model doesn't have serialization"); } if (!$pObject->isLoaded() || $pForceLoad) { $lSuccess = $lSerializationUnit->loadObject($pObject); } return $lSuccess; }
} }'; $lResult = ObjectService::getObjects(json_decode($Json)); if (!is_object($lResult) || !isset($lResult->success) || !$lResult->success || !isset($lResult->result) || !is_array($lResult->result)) { throw new Exception('bad ObjectService::getObjects return ' . json_encode($lResult)); } if (json_encode($lResult->result) != '[{"id1":"1","id2":"23","date":"2016-05-01T14:53:54+02:00","timestamp":"2016-10-16T21:50:19+02:00","string":"aaaa","integer":"0","mainParentTestDb":"1"},{"id1":"1","id2":"101","date":"2016-04-13T09:14:33+02:00","timestamp":"2016-10-16T21:50:19+02:00","object":{"plop":"plop","plop2":"plop2"},"objectWithId":{"plop":"plop","plop2":"plop2"},"string":"cccc","integer":"2","mainParentTestDb":"1"}]') { throw new Exception('bad objects : ' . json_encode($lResult->result)); } /** ****************************** test following export import objects ****************************** **/ $lBasedObjects = [json_decode('{"id1":"1","id2":"23","date":"2016-05-01T14:53:54+02:00","timestamp":"2016-10-16T21:50:19+02:00","string":"aaaa","integer":0,"mainParentTestDb":"1"}'), json_decode('{"id1":"1","id2":"101","date":"2016-04-13T09:14:33+02:00","timestamp":"2016-10-16T21:50:19+02:00","string":"cccc","integer":2,"object":{"plop":"plop","plop2":"plop2"},"objectWithId":{"plop":"plop","plop2":"plop2"},"mainParentTestDb":"1"}')]; $lObject = null; foreach ($lResult->result as $lIndex => $lPhpObject) { $lObject = new Object('testDb'); $lObject->fromObject($lPhpObject); $lObject2 = new Object('testDb'); $lObject2->fromXml($lObject->toXml(false)); if (json_encode($lObject2->toObject(false, 'Europe/Berlin')) !== json_encode($lBasedObjects[$lIndex])) { throw new Exception('bad object : ' . json_encode($lObject2->toObject(false, 'Europe/Berlin'))); } } /** ****************************** test DateTime/DateTimeZone with database serialization ****************************** **/ $lDbTestModel = InstanceModel::getInstance()->getInstanceModel('testDb'); $lObject = $lDbTestModel->loadObject('[1,1501774389]'); $lObjectJson = $lObject->toObject(); $lObject->getValue('timestamp')->sub(new DateInterval('P0Y0M0DT5H0M0S')); $lObject->save(SqlTable::UPDATE); $lObject = $lDbTestModel->loadObject('[1,1501774389]', true); $lObject->getValue('timestamp')->add(new DateInterval('P0Y0M0DT5H0M0S')); $lObject->save(SqlTable::UPDATE); $lObject = $lDbTestModel->loadObject('[1,1501774389]', true);
protected function _fillObjectwithId(Object $pObject, $pId) { if (!is_null($pId)) { $lIdProperties = $this->getIdProperties(); if (count($lIdProperties) == 1) { $pObject->setValue($lIdProperties[0], $pId); } else { $lIdValues = $this->decodeId($pId); foreach ($this->getIdProperties() as $lIndex => $lPropertyName) { $pObject->setValue($lPropertyName, $lIdValues[$lIndex]); } } } return $pObject; }
/** * (non-PHPdoc) * @see \comhon\object\object\SerializationUnit::_loadObject() */ protected function _loadObject(Object $pObject) { $lWhereColumns = []; $lModel = $pObject->getModel(); foreach ($lModel->getIdProperties() as $lPropertyName) { $lWhereColumns[$lModel->getProperty($lPropertyName)->getSerializationName()] = $pObject->getValue($lPropertyName); } $lReturn = $this->_loadObjectFromDatabase($pObject, array(), $lWhereColumns, LogicalJunction::CONJUNCTION); return $lReturn; }