<?php
namespace App\EventListener;
use App\Component\Configuration\Util\Config;
use App\Entity\Subscription;
use App\Event\ContactCompanySubmitEvent;
use App\Event\NewsletterEvent;
use App\Sender\ContactCompanySender;
use App\Sendgrid\MailerInterface;
use App\Util\StringToEntityUtil;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class ContactCompanyListener extends FormSubmitEventListener
{
/**
* @var ContactCompanySender
*/
private $sender;
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var EventDispatcherInterface
*/
private $eventDispatcher;
/**
* ContactListener constructor.
*/
public function __construct(
EntityManagerInterface $em,
EventDispatcherInterface $eventDispatcher,
MailerInterface $mailer,
ParameterBagInterface $parameterBag,
StringToEntityUtil $stringToEntityUtil,
Config $config
) {
parent::__construct($mailer, $parameterBag, $stringToEntityUtil, null, $config);
$this->em = $em;
$this->eventDispatcher = $eventDispatcher;
}
public function postContactSubmit(ContactCompanySubmitEvent $event)
{
$contact = $event->getContact();
if ($visitorMail = $this->getMail('site_contact_company_mail_visitor')) {
$this->mailer->mail(
$visitorMail,
$this->getCompanyEmailSender(),
[$event->getContact()->getEmail()],
['contact' => $contact]
);
}
if ($siteOwnerMail = $this->getMail('site_contact_company_mail_site_owner')) {
$recipient = $this->getCompanyEmailaddress();
if ($this->config->get('site_contact_company_custom_system_recipient')) {
$recipient = $this->config->get('site_contact_company_custom_system_recipient');
}
$this->mailer->mail(
$siteOwnerMail,
$this->getCompanyEmailSender(),
[$recipient],
['contact' => $contact]
);
}
if ($event->getForm()->has('subscribeToNewsletter') && $event->getForm()->get('subscribeToNewsletter')->getData()) {
$emailSubscription = (new Subscription())->setEmail($contact->getEmail());
$this->em->persist($emailSubscription);
$this->em->flush();
$this->eventDispatcher->dispatch(new NewsletterEvent($contact->getEmail()), NewsletterEvent::SUBSCRIBED);
}
}
}