public function getDiffDataFromEditmode($data, $object = null, $params = [])
{
$valueGetter = "get" . ucfirst($this->getName());
$valueSetter = "set" . ucfirst($this->getName());
$brickdata = $object->{$valueGetter}();
foreach ($data as $item) {
$subdata = $item["data"];
if (!$subdata) {
continue;
}
$brickname = $subdata["brick"];
$getter = "get" . ucfirst($brickname);
$setter = "set" . ucfirst($brickname);
$brick = $brickdata->{$getter}();
if (!$brick) {
// brick must be added to object
$brickClass = "\\Pimcore\\Model\\Object\\Objectbrick\\Data\\" . ucfirst($brickname);
$brick = new $brickClass($object);
}
$fieldname = $subdata["name"];
$fielddata = [$subdata["subdata"]];
$collectionDef = Object\Objectbrick\Definition::getByKey($brickname);
$fd = $collectionDef->getFieldDefinition($fieldname);
if ($fd && $fd->isDiffChangeAllowed($object, $params)) {
$value = $fd->getDiffDataFromEditmode($fielddata, $object, $params);
$brick->setValue($fieldname, $value);
$brickdata->{$setter}($brick);
}
$object->{$valueSetter}($brickdata);
}
return $brickdata;
}