From 87c5371846bb1978bb2f728feb672c83ba7ad36b Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 9 Dec 2022 13:23:53 +0200 Subject: [PATCH] formula attribute fetch phone email --- .../Espo/Core/Formula/AttributeFetcher.php | 42 +++++++++++++++++++ .../Core/Utils/Database/Orm/Fields/Email.php | 6 ++- .../Core/Utils/Database/Orm/Fields/Phone.php | 6 ++- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/application/Espo/Core/Formula/AttributeFetcher.php b/application/Espo/Core/Formula/AttributeFetcher.php index 8c227e0f81..7460a8ee68 100644 --- a/application/Espo/Core/Formula/AttributeFetcher.php +++ b/application/Espo/Core/Formula/AttributeFetcher.php @@ -29,9 +29,13 @@ namespace Espo\Core\Formula; +use Espo\Entities\EmailAddress; +use Espo\Entities\PhoneNumber; use Espo\ORM\Entity; use Espo\Core\ORM\Entity as CoreEntity; use Espo\ORM\EntityManager; +use Espo\Repositories\EmailAddress as EmailAddressRepository; +use Espo\Repositories\PhoneNumber as PhoneNumberRepository; /** * Fetches attributes from an entity. @@ -111,6 +115,44 @@ class AttributeFetcher return; } + + if ($entity->getAttributeParam($attribute, 'isEmailAddressData')) { + /** @var ?string $fieldName */ + $fieldName = $entity->getAttributeParam($attribute, 'field'); + + if (!$fieldName) { + return; + } + + /** @var EmailAddressRepository $emailAddressRepository */ + $emailAddressRepository = $this->entityManager->getRepository(EmailAddress::ENTITY_TYPE); + + $data = $emailAddressRepository->getEmailAddressData($entity); + + $entity->set($attribute, $data); + $entity->setFetched($attribute, $data);; + + return; + } + + if ($entity->getAttributeParam($attribute, 'isPhoneNumberData')) { + /** @var ?string $fieldName */ + $fieldName = $entity->getAttributeParam($attribute, 'field'); + + if (!$fieldName) { + return; + } + + /** @var PhoneNumberRepository $phoneNumberRepository */ + $phoneNumberRepository = $this->entityManager->getRepository(PhoneNumber::ENTITY_TYPE); + + $data = $phoneNumberRepository->getPhoneNumberData($entity); + + $entity->set($attribute, $data); + $entity->setFetched($attribute, $data);; + + return; + } } public function resetRuntimeCache(): void diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Email.php b/application/Espo/Core/Utils/Database/Orm/Fields/Email.php index 1d3b742113..a47bc6d374 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Email.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Email.php @@ -29,6 +29,8 @@ namespace Espo\Core\Utils\Database\Orm\Fields; +use Espo\ORM\Entity; + class Email extends Base { /** @@ -174,9 +176,11 @@ class Email extends Base 'fields' => [ $fieldName => $mainFieldDefs, $fieldName . 'Data' => [ - 'type' => 'text', + 'type' => Entity::JSON_ARRAY, 'notStorable' => true, 'notExportable' => true, + 'isEmailAddressData' => true, + 'field' => $fieldName, ], $fieldName .'IsOptedOut' => [ 'type' => 'bool', diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php b/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php index 301f45d2a6..4188e86373 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php @@ -29,6 +29,8 @@ namespace Espo\Core\Utils\Database\Orm\Fields; +use Espo\ORM\Entity; + class Phone extends Base { /** @@ -270,9 +272,11 @@ class Phone extends Base 'fields' => [ $fieldName => $mainFieldDefs, $fieldName . 'Data' => [ - 'type' => 'text', + 'type' => Entity::JSON_ARRAY, 'notStorable' => true, 'notExportable' => true, + 'isPhoneNumberData' => true, + 'field' => $fieldName, ], $fieldName .'IsOptedOut' => [ 'type' => 'bool',