src/EventListener/ContactListener.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Component\Configuration\Util\Config;
  4. use App\Entity\Subscription;
  5. use App\Event\ContactSubmitEvent;
  6. use App\Event\NewsletterEvent;
  7. use App\Sendgrid\MailerInterface;
  8. use App\Util\StringToEntityUtil;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Gedmo\Translatable\TranslatableListener;
  11. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  12. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  13. class ContactListener extends FormSubmitEventListener
  14. {
  15.     /**
  16.      * @var EntityManagerInterface
  17.      */
  18.     private $em;
  19.     /**
  20.      * @var EventDispatcherInterface
  21.      */
  22.     private $eventDispatcher;
  23.     /**
  24.      * ContactListener constructor.
  25.      */
  26.     public function __construct(
  27.         EntityManagerInterface $em,
  28.         EventDispatcherInterface $eventDispatcher,
  29.         MailerInterface $mailer,
  30.         ParameterBagInterface $parameterBag,
  31.         StringToEntityUtil $stringToEntityUtil,
  32.         ?TranslatableListener $translatableListener,
  33.         Config $config
  34.     ) {
  35.         parent::__construct($mailer$parameterBag$stringToEntityUtil$translatableListener$config);
  36.         $this->em $em;
  37.         $this->eventDispatcher $eventDispatcher;
  38.     }
  39.     public function postContactSubmit(ContactSubmitEvent $event)
  40.     {
  41.         $contact $event->getContact();
  42.         $siteRecipient $this->config->get('site_contact_custom_system_recipient') ?:
  43.             $this->parameterBag->get('site_company_email_address')
  44.         ;
  45.         if ($event->getSendToEntity() && $event->getSendToId()) {
  46.             try {
  47.                 $className $this->stringToEntityUtil->classByTag($event->getSendToEntity());
  48.                 $entity $this->stringToEntityUtil->stringToEntity($className.':'.$event->getSendToId());
  49.                 $siteRecipient $entity->getEmail();
  50.             } catch (\Exception $exception) {
  51.             }
  52.         }
  53.         if ($siteOwnerMail $this->getMail('site_contact_mail_site_owner')) {
  54.             if ($contact->getContactedCompany()) {
  55.                 $siteRecipient $contact->getContactedCompany()->getEmail() ?? $siteRecipient;
  56.             }
  57.             $this->mailer->mail(
  58.                 $siteOwnerMail,
  59.                 $this->getCompanyEmailSender(),
  60.                 [$siteRecipient],
  61.                 ['contact' => $contact]
  62.             );
  63.         }
  64.         if ($visitorMail $this->getMail('site_contact_mail_visitor')) {
  65.             $senderEmail $this->config->get('site_contact_sender_mail') ?: $this->config->get('site_company_email_address');
  66.             $senderName $this->config->get('site_contact_sender_name') ?: $this->config->get('site_company_name');
  67.             $this->mailer->mail(
  68.                 $visitorMail,
  69.                 [$senderEmail => $senderName],
  70.                 [$contact->getEmail()],
  71.                 ['contact' => $contact]
  72.             );
  73.         }
  74.         if ($event->getForm() && $event->getForm()->has('subscribeToNewsletter') && $event->getForm()->get('subscribeToNewsletter')->getData()) {
  75.             $emailSubscription = (new Subscription())->setEmail($contact->getEmail());
  76.             $this->em->persist($emailSubscription);
  77.             $this->em->flush();
  78.             $this->eventDispatcher->dispatch(new NewsletterEvent($contact->getEmail()), NewsletterEvent::SUBSCRIBED);
  79.         }
  80.     }
  81. }