. * * 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\Modules\Crm\Classes\FieldProcessing\Call; use Espo\Modules\Crm\Entities\Call; use Espo\Modules\Crm\Entities\Contact; use Espo\Modules\Crm\Entities\Lead; use Espo\Modules\Crm\Entities\Meeting; use Espo\ORM\Entity; use Espo\Core\ORM\Entity as CoreEntity; use Espo\Core\FieldProcessing\Loader; use Espo\Core\FieldProcessing\Loader\Params; use Espo\Core\ORM\EntityManager; use Espo\ORM\Name\Attribute; use stdClass; /** * @implements Loader */ class PhoneNumberMapLoader implements Loader { private const ERASED_PART = 'ERASED:'; public function __construct(private EntityManager $entityManager) {} public function process(Entity $entity, Params $params): void { $map = (object) []; assert($entity instanceof CoreEntity); $contactIdList = $entity->getLinkMultipleIdList(Meeting::LINK_CONTACTS); if (count($contactIdList)) { $this->populate($map, Contact::ENTITY_TYPE, $contactIdList); } $leadIdList = $entity->getLinkMultipleIdList(Meeting::LINK_LEADS); if (count($leadIdList)) { $this->populate($map, Lead::ENTITY_TYPE, $leadIdList); } $entity->set('phoneNumbersMap', $map); } /** * @param string[] $idList */ private function populate(stdClass $map, string $entityType, array $idList): void { $entityList = $this->entityManager ->getRDBRepository($entityType) ->where([ Attribute::ID => $idList, ]) ->select([Attribute::ID, 'phoneNumber']) ->find(); foreach ($entityList as $entity) { $phoneNumber = $entity->get('phoneNumber'); if (!$phoneNumber) { continue; } if (str_starts_with($phoneNumber, self::ERASED_PART)) { continue; } $key = $entity->getEntityType() . '_' . $entity->getId(); $map->$key = $phoneNumber; } } }