<?php
namespace App\EventSubscriber;
use App\Entity\Demande;
use App\Service\MailerService;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use ApiPlatform\Core\EventListener\EventPriorities;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class DemandeSubscriber implements EventSubscriberInterface
{
const DAY_OFF_REQUEST_EMAIL_SUBJECT = "DAY_OFF_REQUEST_EMAIL_SUBJECT";
const DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT = "DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT";
const LINK_APP_FRONT = "link_app_front";
const REQUEST_DAY_OFF_TEMPLATE = "RequestDayOff";
const UPDATE_DEMENADE = 'UpdateDemande';
const EMAILS_CC = "emails_cc";
private $mailerService;
private $tokenStorage;
private $translator;
private $bag;
public function __construct(MailerService $mailerService,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
ParameterBagInterface $bag
)
{
$this->mailerService = $mailerService;
$this->translator = $translator;
$this->tokenStorage = $tokenStorage;
$this->bag = $bag;
}
public function onPostDemande(ViewEvent $event)
{
$element = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if ($element instanceof Demande && Request::METHOD_POST === $method) {
$subject = $this->translator->trans(self::DAY_OFF_REQUEST_EMAIL_SUBJECT);
$user = $this->tokenStorage->getToken()->getUser();
if ($user->getManagersEmails()) {
$this->mailerService->sendEmail(
$user->getManagersEmails(),
$subject,
[
'fullname' => $user->getFullName(),
'date1' => $element->getDatedebut()->format("d/m/Y"),
'date2' => $element->getDatefin()->format("d/m/Y"),
'link_app_front' => $this->bag->get(self::LINK_APP_FRONT)
],
self::REQUEST_DAY_OFF_TEMPLATE,
explode(',',$this->bag->get(self::EMAILS_CC))
);
}
}
}
public function onUpdateDemande(ViewEvent $event)
{
$element = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if ($element instanceof Demande && Request::METHOD_PUT === $method) {
$subject = $this->translator->trans(self::DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT);
$user = $this->tokenStorage->getToken()->getUser();
if ($user->getManagersEmails()) {
$this->mailerService->sendEmail(
$user->getManagersEmails(),
$subject,
[
'fullname' => $user->getFullName(),
'date1' => $element->getDatedebut()->format("d/m/Y"),
'date2' => $element->getDatefin()->format("d/m/Y"),
'link_app_front' => $this->bag->get(self::LINK_APP_FRONT)
],
self::REQUEST_DAY_OFF_TEMPLATE,
explode(',',$this->bag->get(self::EMAILS_CC))
);
}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => [
['onPostDemande', EventPriorities::POST_WRITE],
['onUpdateDemande', EventPriorities::POST_WRITE]
]
];
}
}