diff --git a/application/Espo/Core/Utils/Metadata.php b/application/Espo/Core/Utils/Metadata.php index 5988470ce6..3807934121 100644 --- a/application/Espo/Core/Utils/Metadata.php +++ b/application/Espo/Core/Utils/Metadata.php @@ -155,8 +155,8 @@ class Metadata $this->data = $this->getFileManager()->getPhpContents($this->cacheFile); } else { $this->clearVars(); - $this->data = $this->getUnifier()->unify('metadata', $this->paths, true); - $this->data = $this->addAdditionalFields($this->data); + $objData = $this->getAllObjects(false, $reload); + $this->data = Util::objectToArray($objData); if ($this->useCache) { $isSaved = $this->getFileManager()->putPhpContents($this->cacheFile, $this->data); @@ -206,7 +206,7 @@ class Metadata public function getAll($isJSON = false, $reload = false) { if ($reload) { - $this->init(true); + $this->init($reload); } if ($isJSON) { @@ -280,37 +280,6 @@ class Metadata return $data; } - /** - * todo: move to a separate file - * Add additional fields defined from metadata -> fields - * - * @param array $data - */ - protected function addAdditionalFields(array $data) - { - $dataCopy = $data; - $definitionList = $data['fields']; - - foreach ($dataCopy['entityDefs'] as $entityName => $entityParams) { - foreach ($entityParams['fields'] as $fieldName => $fieldParams) { - - $additionalFields = $this->getMetadataHelper()->getAdditionalFieldList($fieldName, $fieldParams, $definitionList); - if (!empty($additionalFields)) { - //merge or add to the end of data array - foreach ($additionalFields as $subFieldName => $subFieldParams) { - if (isset($entityParams['fields'][$subFieldName])) { - $data['entityDefs'][$entityName]['fields'][$subFieldName] = Util::merge($subFieldParams, $entityParams['fields'][$subFieldName]); - } else { - $data['entityDefs'][$entityName]['fields'][$subFieldName] = $subFieldParams; - } - } - } - } - } - - return $data; - } - protected function addAdditionalFieldsObj($data) { if (!isset($data->entityDefs)) return $data; @@ -319,6 +288,7 @@ class Metadata if (!isset($entityDefsItem->fields)) continue; foreach (get_object_vars($entityDefsItem->fields) as $field => $fieldDefsItem) { $additionalFields = $this->getMetadataHelper()->getAdditionalFieldList($field, Util::objectToArray($fieldDefsItem), Util::objectToArray($data->fields)); + if (!$additionalFields) continue; foreach ($additionalFields as $subFieldName => $subFieldParams) { if (isset($entityDefsItem->fields->$subFieldName)) { diff --git a/application/Espo/Core/Utils/Metadata/Helper.php b/application/Espo/Core/Utils/Metadata/Helper.php index 1f6a91a07c..c227c3f4f2 100644 --- a/application/Espo/Core/Utils/Metadata/Helper.php +++ b/application/Espo/Core/Utils/Metadata/Helper.php @@ -139,10 +139,14 @@ class Helper return; } - $fieldType = $fieldParams['type']; - $fieldDefinition = isset($definitionList[$fieldType]) ? $definitionList[$fieldType] : $this->getMetadata()->get('fields.'.$fieldType); + if (!isset($definitionList)) { + $definitionList = $this->getMetadata()->get('fields'); + } - if (!empty($fieldDefinition['fields']) && is_array($fieldDefinition['fields'])) { + $fieldType = $fieldParams['type']; + $fieldDefinition = isset($definitionList[$fieldType]) ? $definitionList[$fieldType] : null; + + if (isset($fieldDefinition) && !empty($fieldDefinition['fields']) && is_array($fieldDefinition['fields'])) { $copiedParams = array_intersect_key($fieldParams, array_flip($this->copiedDefParams));