/**
* @param Concrete $object
* @return void
*/
public function save($object)
{
// set the current object again, this is necessary because the related object in $this->object can change (eg. clone & copy & paste, etc.)
$this->setObject($object);
$getters = $this->getBrickGetters();
foreach ($getters as $getter) {
$brick = $this->{$getter}();
if ($brick instanceof Objectbrick\Data\AbstractData) {
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 = AbstractObject::getGetInheritedValues();
AbstractObject::setGetInheritedValues(true);
if (AbstractObject::doGetInheritedValues($object)) {
$container = $object->getValueFromParent($this->fieldname);
if (!empty($container)) {
$parentBrick = $container->{$getter}();
}
}
AbstractObject::setGetInheritedValues($inheritanceModeBackup);
if (!empty($parentBrick)) {
$brickType = "\\Pimcore\\Model\\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 = AbstractObject::getGetInheritedValues();
AbstractObject::setGetInheritedValues(true);
if (AbstractObject::doGetInheritedValues($object)) {
$container = $object->getValueFromParent($this->fieldname);
if (!empty($container)) {
$parentBrick = $container->{$getter}();
}
}
AbstractObject::setGetInheritedValues($inheritanceModeBackup);
if (!empty($parentBrick)) {
$brickType = "\\Pimcore\\Model\\Object\\Objectbrick\\Data\\" . ucfirst($parentBrick->getType());
$brick = new $brickType($object);
$brick->setFieldname($this->getFieldname());
$brick->save($object);
}
}
}
}
}