From da16d6cd621fd60ad6c0beddefbc96ecac4fd5ea Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 9 Dec 2024 10:56:48 +0200 Subject: [PATCH] metadata: filter fields and links without type --- .../AdditionalBuilder/FilterFields.php | 67 +++++++++++++++++++ .../Espo/Resources/metadata/app/metadata.json | 1 + 2 files changed, 68 insertions(+) create mode 100644 application/Espo/Core/Utils/Metadata/AdditionalBuilder/FilterFields.php diff --git a/application/Espo/Core/Utils/Metadata/AdditionalBuilder/FilterFields.php b/application/Espo/Core/Utils/Metadata/AdditionalBuilder/FilterFields.php new file mode 100644 index 0000000000..12709f6f19 --- /dev/null +++ b/application/Espo/Core/Utils/Metadata/AdditionalBuilder/FilterFields.php @@ -0,0 +1,67 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Core\Utils\Metadata\AdditionalBuilder; + +use Espo\Core\Utils\Metadata\AdditionalBuilder; +use stdClass; + +/** + * @noinspection PhpUnused + */ +class FilterFields implements AdditionalBuilder +{ + public function __construct() + {} + + public function build(stdClass $data): void + { + if (!isset($data->entityDefs)) { + return; + } + + foreach (get_object_vars($data->entityDefs) as $entityDefsItem) { + if (isset($entityDefsItem->fields) && is_object($entityDefsItem->fields)) { + foreach (get_object_vars($entityDefsItem->fields) as $field => $fieldDefsItem) { + if (!isset($fieldDefsItem->type)) { + unset($entityDefsItem->fields->$field); + } + } + } + + if (isset($entityDefsItem->links) && is_object($entityDefsItem->links)) { + foreach (get_object_vars($entityDefsItem->links) as $link => $linkDefsItem) { + if (!isset($linkDefsItem->type)) { + unset($entityDefsItem->links->$link); + } + } + } + } + } +} diff --git a/application/Espo/Resources/metadata/app/metadata.json b/application/Espo/Resources/metadata/app/metadata.json index 200ba057ed..2751fe38a6 100644 --- a/application/Espo/Resources/metadata/app/metadata.json +++ b/application/Espo/Resources/metadata/app/metadata.json @@ -43,6 +43,7 @@ ["aclDefs"] ], "additionalBuilderClassNameList": [ + "Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\FilterFields", "Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\Fields", "Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\DeleteIdField", "Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\StreamUpdatedAtField"