/** * @param Object_Concrete $object * @return void */ public function save($object) { $getters = $this->getBrickGetters(); foreach ($getters as $getter) { $brick = $this->{$getter}(); if ($brick instanceof Object_Objectbrick_Data_Abstract) { if ($brick->getDoDelete()) { $brick->delete($object); $setter = "s" . substr($getter, 1); $this->{$setter}(null); //check if parent object has brick, and if so, create an empty brick to enable inheritance $parentBrick = null; $inheritanceModeBackup = Object_Abstract::getGetInheritedValues(); Object_Abstract::setGetInheritedValues(true); if (Object_Abstract::doGetInheritedValues($object)) { $container = $object->getValueFromParent($this->fieldname); if (!empty($container)) { $parentBrick = $container->{$getter}(); } } Object_Abstract::setGetInheritedValues($inheritanceModeBackup); if (!empty($parentBrick)) { $brickType = "Object_Objectbrick_Data_" . ucfirst($parentBrick->getType()); $brick = new $brickType($object); $brick->setFieldname($this->getFieldname()); $brick->save($object); $this->{$setter}($brick); } } else { $brick->setFieldname($this->getFieldname()); $brick->save($object); } } else { if ($brick == null) { $parentBrick = null; $inheritanceModeBackup = Object_Abstract::getGetInheritedValues(); Object_Abstract::setGetInheritedValues(true); if (Object_Abstract::doGetInheritedValues($object)) { $container = $object->getValueFromParent($this->fieldname); if (!empty($container)) { $parentBrick = $container->{$getter}(); } } Object_Abstract::setGetInheritedValues($inheritanceModeBackup); if (!empty($parentBrick)) { $brickType = "Object_Objectbrick_Data_" . ucfirst($parentBrick->getType()); $brick = new $brickType($object); $brick->setFieldname($this->getFieldname()); $brick->save($object); } } } } }