From e87548c94aa1e156ff4b1a54dbaedd4c73755d1d Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 15 Nov 2023 12:05:51 +0200 Subject: [PATCH 1/2] metadata set allow empty array --- application/Espo/Core/Utils/Metadata.php | 6 ++++-- application/Espo/Tools/EntityManager/EntityManager.php | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/application/Espo/Core/Utils/Metadata.php b/application/Espo/Core/Utils/Metadata.php index b997afcd86..e991d7b118 100644 --- a/application/Espo/Core/Utils/Metadata.php +++ b/application/Espo/Core/Utils/Metadata.php @@ -358,12 +358,14 @@ class Metadata * Set Metadata data. * * @param array|scalar|null $data + * @param bool $allowEmptyArray As of v8.0.6. To fix an issue. Maybe will be removed. */ - public function set(string $key1, string $key2, $data): void + public function set(string $key1, string $key2, $data, bool $allowEmptyArray = false): void { - if (is_array($data)) { + if (!$allowEmptyArray && is_array($data)) { foreach ($data as $key => $item) { if (is_array($item) && empty($item)) { + // @todo Revise. unset($data[$key]); } } diff --git a/application/Espo/Tools/EntityManager/EntityManager.php b/application/Espo/Tools/EntityManager/EntityManager.php index 0a3f577f4f..905b0de2b8 100644 --- a/application/Espo/Tools/EntityManager/EntityManager.php +++ b/application/Espo/Tools/EntityManager/EntityManager.php @@ -726,7 +726,7 @@ class EntityManager $value = $data[$param]; - $this->metadata->set($location, $entityType, [$param => $value]); + $this->metadata->set($location, $entityType, [$param => $value], true); } } From 9f6e2b4ac6e18799df21b4d0b1884639be20747b Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 15 Nov 2023 12:14:21 +0200 Subject: [PATCH 2/2] metadata set param --- application/Espo/Core/Utils/Metadata.php | 23 ++++++++++++++++--- .../Tools/EntityManager/EntityManager.php | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/application/Espo/Core/Utils/Metadata.php b/application/Espo/Core/Utils/Metadata.php index e991d7b118..7a91521400 100644 --- a/application/Espo/Core/Utils/Metadata.php +++ b/application/Espo/Core/Utils/Metadata.php @@ -355,12 +355,29 @@ class Metadata } /** - * Set Metadata data. + * Set metadata. Will be merged with the current data. * * @param array|scalar|null $data - * @param bool $allowEmptyArray As of v8.0.6. To fix an issue. Maybe will be removed. */ - public function set(string $key1, string $key2, $data, bool $allowEmptyArray = false): void + public function set(string $key1, string $key2, $data): void + { + $this->setInternal($key1, $key2, $data); + } + + /** + * Set a first-level param. Allows setting empty arrays. + * + * @since 8.0.6 + */ + public function setParam(string $key1, string $key2, string $param, mixed $value): void + { + $this->setInternal($key1, $key2, [$param => $value], true); + } + + /** + * @param array|scalar|null $data + */ + private function setInternal(string $key1, string $key2, $data, bool $allowEmptyArray = false): void { if (!$allowEmptyArray && is_array($data)) { foreach ($data as $key => $item) { diff --git a/application/Espo/Tools/EntityManager/EntityManager.php b/application/Espo/Tools/EntityManager/EntityManager.php index 905b0de2b8..fe7c0e8f9f 100644 --- a/application/Espo/Tools/EntityManager/EntityManager.php +++ b/application/Espo/Tools/EntityManager/EntityManager.php @@ -726,7 +726,7 @@ class EntityManager $value = $data[$param]; - $this->metadata->set($location, $entityType, [$param => $value], true); + $this->metadata->setParam($location, $entityType, $param, $value); } }