src/EventSubscriber/DemandeSubscriber.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Demande;
  4. use App\Service\MailerService;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpKernel\Event\ViewEvent;
  10. use ApiPlatform\Core\EventListener\EventPriorities;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. class DemandeSubscriber implements EventSubscriberInterface
  15. {
  16.     const DAY_OFF_REQUEST_EMAIL_SUBJECT "DAY_OFF_REQUEST_EMAIL_SUBJECT";
  17.     const DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT "DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT";
  18.     const LINK_APP_FRONT "link_app_front";
  19.     const REQUEST_DAY_OFF_TEMPLATE "RequestDayOff";
  20.     const UPDATE_DEMENADE 'UpdateDemande';
  21.     const EMAILS_CC "emails_cc";
  22.     private $mailerService;
  23.     private $tokenStorage;
  24.     private $translator;
  25.     private $bag;
  26.     public function __construct(MailerService $mailerService,
  27.                                 TranslatorInterface $translator,
  28.                                 TokenStorageInterface $tokenStorage,
  29.                                 ParameterBagInterface $bag
  30.     )
  31.     {
  32.         $this->mailerService $mailerService;
  33.         $this->translator $translator;
  34.         $this->tokenStorage $tokenStorage;
  35.         $this->bag $bag;
  36.     }
  37.     public function onPostDemande(ViewEvent $event)
  38.     {
  39.         $element $event->getControllerResult();
  40.         $method $event->getRequest()->getMethod();
  41.         if ($element instanceof Demande && Request::METHOD_POST === $method) {
  42.             $subject $this->translator->trans(self::DAY_OFF_REQUEST_EMAIL_SUBJECT);
  43.             $user $this->tokenStorage->getToken()->getUser();
  44.             if ($user->getManagersEmails()) {
  45.                 $this->mailerService->sendEmail(
  46.                     $user->getManagersEmails(),
  47.                     $subject,
  48.                     [
  49.                         'fullname' => $user->getFullName(),
  50.                         'date1' => $element->getDatedebut()->format("d/m/Y"),
  51.                         'date2' => $element->getDatefin()->format("d/m/Y"),
  52.                         'link_app_front' => $this->bag->get(self::LINK_APP_FRONT)
  53.                     ],
  54.                     self::REQUEST_DAY_OFF_TEMPLATE,
  55.                     explode(',',$this->bag->get(self::EMAILS_CC))
  56.                 );
  57.             }
  58.         }
  59.     }
  60.     public function onUpdateDemande(ViewEvent $event)
  61.     {
  62.         $element $event->getControllerResult();
  63.         $method $event->getRequest()->getMethod();
  64.         if ($element instanceof Demande && Request::METHOD_PUT === $method) {
  65.             $subject $this->translator->trans(self::DAY_OFF_REQUEST_UPDATE_EMAIL_SUBJECT);
  66.             $user $this->tokenStorage->getToken()->getUser();
  67.             if ($user->getManagersEmails()) {
  68.                 $this->mailerService->sendEmail(
  69.                     $user->getManagersEmails(),
  70.                     $subject,
  71.                     [
  72.                         'fullname' => $user->getFullName(),
  73.                         'date1' => $element->getDatedebut()->format("d/m/Y"),
  74.                         'date2' => $element->getDatefin()->format("d/m/Y"),
  75.                         'link_app_front' => $this->bag->get(self::LINK_APP_FRONT)
  76.                     ],
  77.                     self::REQUEST_DAY_OFF_TEMPLATE,
  78.                     explode(',',$this->bag->get(self::EMAILS_CC))
  79.                 );
  80.             }
  81.         }
  82.     }
  83.     public static function getSubscribedEvents()
  84.     {
  85.         return [
  86.             KernelEvents::VIEW => [
  87.                 ['onPostDemande'EventPriorities::POST_WRITE],
  88.                 ['onUpdateDemande'EventPriorities::POST_WRITE]
  89.             ]
  90.         ];
  91.     }
  92. }