From 65bef1df6567c9ccc4bd6eca8a8d2da72da7095f Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Thu, 6 Apr 2023 18:57:38 +0300 Subject: [PATCH] fix link-parent not-storable --- .../Resources/metadata/fields/linkParent.json | 4 +- upgrades/7.4.0-7.4.1/data.json | 2 + upgrades/7.4.0-7.4.1/scripts/AfterUpgrade.php | 68 +++++++++++++++++++ upgrades/7.4/scripts/AfterUpgrade.php | 24 +++++++ 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 upgrades/7.4.0-7.4.1/data.json create mode 100644 upgrades/7.4.0-7.4.1/scripts/AfterUpgrade.php 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"); + } + } + } + } + } }