diff --git a/application/Espo/Resources/metadata/fields/linkParent.json b/application/Espo/Resources/metadata/fields/linkParent.json index e4b1653817..7c54908c5b 100644 --- a/application/Espo/Resources/metadata/fields/linkParent.json +++ b/application/Espo/Resources/metadata/fields/linkParent.json @@ -38,9 +38,7 @@ ], "filter": true, "notCreatable": true, - "fieldDefs": { - "notStorable": true - }, + "valueFactoryClassName": "Espo\\Core\\Field\\LinkParent\\LinkParentFactory", "attributeExtractorClassName": "Espo\\Core\\Field\\LinkParent\\LinkParentAttributeExtractor" } diff --git a/upgrades/7.4.0-7.4.1/data.json b/upgrades/7.4.0-7.4.1/data.json new file mode 100644 index 0000000000..2c63c08510 --- /dev/null +++ b/upgrades/7.4.0-7.4.1/data.json @@ -0,0 +1,2 @@ +{ +} diff --git a/upgrades/7.4.0-7.4.1/scripts/AfterUpgrade.php b/upgrades/7.4.0-7.4.1/scripts/AfterUpgrade.php new file mode 100644 index 0000000000..2e8e7837ec --- /dev/null +++ b/upgrades/7.4.0-7.4.1/scripts/AfterUpgrade.php @@ -0,0 +1,68 @@ +updateMetadata($container->get('metadata')); + } + + private function updateMetadata(Metadata $metadata): void + { + $this->fixParent($metadata); + + $metadata->save(); + } + + private function fixParent(Metadata $metadata): void + { + foreach ($metadata->get(['entityDefs']) as $scope => $defs) { + foreach ($metadata->get(['entityDefs', $scope, 'fields']) as $field => $fieldDefs) { + $custom = $metadata->getCustom('entityDefs', $scope); + + if (!$custom) { + continue; + } + + if ( + ($fieldDefs['type'] ?? null) === 'linkParent' && + ($fieldDefs['notStorable'] ?? false) + ) { + if ($custom?->fields?->$field?->notStorable) { + $metadata->delete('entityDefs', $scope, "fields.{$field}.notStorable"); + } + } + } + } + } +} diff --git a/upgrades/7.4/scripts/AfterUpgrade.php b/upgrades/7.4/scripts/AfterUpgrade.php index cf9e35e45c..64112d12a6 100644 --- a/upgrades/7.4/scripts/AfterUpgrade.php +++ b/upgrades/7.4/scripts/AfterUpgrade.php @@ -43,6 +43,30 @@ class AfterUpgrade 'length' => 24, ]); + $this->fixParent($metadata); + $metadata->save(); } + + private function fixParent(Metadata $metadata): void + { + foreach ($metadata->get(['entityDefs']) as $scope => $defs) { + foreach ($metadata->get(['entityDefs', $scope, 'fields']) as $field => $fieldDefs) { + $custom = $metadata->getCustom('entityDefs', $scope); + + if (!$custom) { + continue; + } + + if ( + ($fieldDefs['type'] ?? null) === 'linkParent' && + ($fieldDefs['notStorable'] ?? false) + ) { + if ($custom?->fields?->$field?->notStorable) { + $metadata->delete('entityDefs', $scope, "fields.{$field}.notStorable"); + } + } + } + } + } }