private function doGetDataForEditMode($data, $object, &$fieldData, &$metaData, $level = 1)
{
$class = $object->getClass();
$inheritanceAllowed = $class->getAllowInherit();
$inherited = false;
foreach ($data->getItems() as $language => $values) {
foreach ($this->getFieldDefinitions() as $fd) {
$key = $fd->getName();
$fdata = isset($values[$fd->getName()]) ? $values[$fd->getName()] : null;
if (!isset($fieldData[$language][$key]) || $fd->isEmpty($fieldData[$language][$key])) {
// never override existing data
$fieldData[$language][$key] = $fdata;
if (!$fd->isEmpty($fdata)) {
$metaData[$language][$key] = ["inherited" => $level > 1, "objectid" => $object->getId()];
}
}
}
}
if ($inheritanceAllowed) {
// check if there is a parent with the same type
$parent = Object\Service::hasInheritableParentObject($object);
if ($parent) {
// same type, iterate over all language and all fields and check if there is something missing
$validLanguages = Tool::getValidLanguages();
$foundEmptyValue = false;
foreach ($validLanguages as $language) {
$fieldDefinitions = $this->getFieldDefinitions();
foreach ($fieldDefinitions as $fd) {
$key = $fd->getName();
if ($fd->isEmpty($fieldData[$language][$key])) {
$foundEmptyValue = true;
$inherited = true;
$metaData[$language][$key] = ["inherited" => true, "objectid" => $parent->getId()];
}
}
}
if ($foundEmptyValue) {
// still some values are passing, ask the parent
$parentData = $parent->getLocalizedFields();
$parentResult = $this->doGetDataForEditMode($parentData, $parent, $fieldData, $metaData, $level + 1);
}
}
}
$result = ["data" => $fieldData, "metaData" => $metaData, "inherited" => $inherited];
return $result;
}