src/Frontend/Modules/Mailmotor/EventListener/FormBuilderSubmittedMailmotorSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace Frontend\Modules\Mailmotor\EventListener;
  3. use Frontend\Core\Language\Locale;
  4. use MailMotor\Bundle\MailMotorBundle\Factory\MailMotorFactory;
  5. use MailMotor\Bundle\MailMotorBundle\Gateway\SubscriberGateway;
  6. use Common\ModulesSettings;
  7. use Frontend\Modules\FormBuilder\Event\FormBuilderSubmittedEvent;
  8. use MailMotor\Bundle\MailMotorBundle\Helper\Subscriber;
  9. /**
  10.  * A Formbuilder submitted event subscriber that will subscribe the email when the checkbox is checked
  11.  */
  12. final class FormBuilderSubmittedMailmotorSubscriber
  13. {
  14.     /**
  15.      * @var ModulesSettings
  16.      */
  17.     private $modulesSettings;
  18.     /**
  19.      * @var Subscriber
  20.      */
  21.     private $mailmotorSubscriber;
  22.     public function __construct(ModulesSettings $modulesSettingsSubscriber $mailmotorSubscriber)
  23.     {
  24.         $this->modulesSettings $modulesSettings;
  25.         $this->mailmotorSubscriber $mailmotorSubscriber;
  26.     }
  27.     public function onFormSubmitted(FormBuilderSubmittedEvent $event): void
  28.     {
  29.         $listId $this->findListId($event->getForm()['fields']);
  30.         if ($listId === null) {
  31.             return;
  32.         }
  33.         $emailAddresses $this->findEmailAddressesToSubscribe($event->getForm()['fields'], $event->getData());
  34.         if (empty($emailAddresses)) {
  35.             return;
  36.         }
  37.         foreach ($emailAddresses as $emailAddress) {
  38.             $this->mailmotorSubscriber->subscribe(
  39.                 $emailAddress,
  40.                 Locale::frontendLanguage(),
  41.                 [],
  42.                 [],
  43.                 $this->modulesSettings->get('Mailmotor''double_opt_in'true),
  44.                 $listId
  45.             );
  46.         }
  47.     }
  48.     private function findEmailAddressesToSubscribe(array $formFields, array $formData): array
  49.     {
  50.         $fieldIds array_keys(
  51.             array_filter(
  52.                 $formFields,
  53.                 function (array $formField): bool {
  54.                     return $formField['settings']['use_to_subscribe_with_mailmotor'] ?? false;
  55.                 }
  56.             )
  57.         );
  58.         return array_map(
  59.             function (array $fieldData) {
  60.                 return unserialize($fieldData['value'], ['allowed_classes' => false]);
  61.             },
  62.             array_filter(
  63.                 $formData,
  64.                 function ($key) use ($fieldIds) {
  65.                     return in_array($key$fieldIdstrue);
  66.                 },
  67.                 ARRAY_FILTER_USE_KEY
  68.             )
  69.         );
  70.     }
  71.     private function findListId(array $formFields): ?string
  72.     {
  73.         foreach ($formFields as $formField) {
  74.             if ($formField['type'] === 'mailmotor') {
  75.                 return $formField['settings']['list_id'];
  76.             }
  77.         }
  78.         return null;
  79.     }
  80. }