private function doGetDataForEditMode($data, $object, &$fieldData, &$metaData, $level = 1)
{
$class = $object->getClass();
$inheritanceAllowed = $class->getAllowInherit();
$inherited = false;
$items = $data->getItems();
foreach ($items as $groupId => $keys) {
foreach ($keys as $keyId => $languages) {
$keyConfig = Object\Classificationstore\DefinitionCache::get($keyId);
if ($keyConfig->getEnabled()) {
$fd = Object\Classificationstore\Service::getFieldDefinitionFromKeyConfig($keyConfig);
foreach ($languages as $language => $value) {
$fdata = $value;
if (!isset($fieldData[$language][$groupId][$keyId]) || $fd->isEmpty($fieldData[$language][$groupId][$keyId])) {
// never override existing data
$fieldData[$language][$groupId][$keyId] = $fdata;
if (!$fd->isEmpty($fdata)) {
$metaData[$language][$groupId][$keyId] = ["inherited" => $level > 1, "objectid" => $object->getId()];
}
}
}
}
}
}
// TODO
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
if ($this->localized) {
$validLanguages = Tool::getValidLanguages();
} else {
$validLanguages = [];
}
array_unshift($validLanguages, "default");
$foundEmptyValue = false;
$activeGroupIds = $this->recursiveGetActiveGroupsIds($object);
foreach ($validLanguages as $language) {
foreach ($activeGroupIds as $groupId => $enabled) {
if (!$enabled) {
continue;
}
$relation = new Object\Classificationstore\KeyGroupRelation\Listing();
$relation->setCondition("groupId = " . $relation->quote($groupId));
$relation = $relation->load();
foreach ($relation as $key) {
$keyId = $key->getKeyId();
$fd = Object\Classificationstore\Service::getFieldDefinitionFromKeyConfig($key);
if ($fd->isEmpty($fieldData[$language][$groupId][$keyId])) {
$foundEmptyValue = true;
$inherited = true;
$metaData[$language][$groupId][$keyId] = ["inherited" => true, "objectid" => $parent->getId()];
}
}
}
}
if ($foundEmptyValue) {
// still some values are passing, ask the parent
$getter = "get" . ucfirst($this->getName());
$parentData = $parent->{$getter}();
$parentResult = $this->doGetDataForEditMode($parentData, $parent, $fieldData, $metaData, $level + 1);
}
}
}
$result = ["data" => $fieldData, "metaData" => $metaData, "inherited" => $inherited];
return $result;
}