. * * 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\Classes\FieldProcessing\LeadCapture; use Espo\Core\FieldProcessing\Loader; use Espo\Core\FieldProcessing\Loader\Params; use Espo\Core\Utils\Config; use Espo\Core\Utils\Config\ApplicationConfig; use Espo\Core\Utils\FieldUtil; use Espo\Core\Utils\Util; use Espo\Entities\LeadCapture; use Espo\Modules\Crm\Entities\Lead; use Espo\ORM\Entity; use Espo\ORM\EntityManager; use Espo\ORM\Type\AttributeType; /** * @implements Loader */ class ExampleLoader implements Loader { public function __construct( private FieldUtil $fieldUtil, private ApplicationConfig $applicationConfig, private EntityManager $entityManager, private Config $config, ) {} public function process(Entity $entity, Params $params): void { $entity->set('exampleRequestMethod', 'POST'); $entity->set('exampleRequestHeaders', [ 'Content-Type: application/json', ]); $this->processRequestUrl($entity); $this->processRequestPayload($entity); $this->processFormUrl($entity); } private function processRequestUrl(LeadCapture $entity): void { $apiKey = $entity->getApiKey(); $siteUrl = $this->applicationConfig->getSiteUrl(); if (!$apiKey) { return; } $requestUrl = "$siteUrl/api/v1/LeadCapture/$apiKey"; $entity->set('exampleRequestUrl', $requestUrl); } private function processRequestPayload(LeadCapture $entity): void { $requestPayload = "```\n{\n"; $attributeList = []; $attributeIgnoreList = [ 'emailAddressIsOptedOut', 'phoneNumberIsOptedOut', 'emailAddressIsInvalid', 'phoneNumberIsInvalid', 'emailAddressData', 'phoneNumberData', ]; foreach ($entity->getFieldList() as $field) { foreach ($this->fieldUtil->getActualAttributeList(Lead::ENTITY_TYPE, $field) as $attribute) { if (!in_array($attribute, $attributeIgnoreList)) { $attributeList[] = $attribute; } } } $seed = $this->entityManager->getNewEntity(Lead::ENTITY_TYPE); foreach ($attributeList as $i => $attribute) { $value = strtoupper(Util::camelCaseToUnderscore($attribute)); if ( in_array( $seed->getAttributeType($attribute), [ Entity::VARCHAR, Entity::TEXT, AttributeType::DATETIME, AttributeType::DATE, ] ) ) { $value = '"' . $value . '"'; } $requestPayload .= " \"" . $attribute . "\": " . $value; if ($i < count($attributeList) - 1) { $requestPayload .= ","; } $requestPayload .= "\n"; } $requestPayload .= "}\n```"; $entity->set('exampleRequestPayload', $requestPayload); } private function processFormUrl(LeadCapture $entity): void { $formId = $entity->getFormId(); $siteUrl = $this->getSiteUrl(); if (!$entity->hasFormEnabled() || !$formId) { /** @noinspection PhpRedundantOptionalArgumentInspection */ $entity->set('formUrl', null); return; } $formUrl = "$siteUrl?entryPoint=leadCaptureForm&id=$formId"; $entity->set('formUrl', $formUrl); } private function getSiteUrl(): string { return $this->config->get('leadCaptureSiteUrl') ?? $this->applicationConfig->getSiteUrl(); } }