src/EventSubscriber/PharmacySubscriber.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\BaseUser;
  5. use App\Entity\Pharmacy;
  6. use App\Repository\BaseUserRepository;
  7. use App\Services\BaseUserService;
  8. use ExpoSDK\Expo;
  9. use ExpoSDK\ExpoMessage;
  10. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Event\ViewEvent;
  14. use Symfony\Component\HttpKernel\KernelEvents;
  15. use Symfony\Component\Mime\Address;
  16. use Symfony\Component\Mime\Email;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. use Symfony\Component\Security\Core\Security;
  19. final class PharmacySubscriber implements EventSubscriberInterface
  20. {
  21.     private MailerInterface $mailer;
  22.     private BaseUserRepository $baseUserRepository;
  23.     private Security $security;
  24.     private BaseUserService $baseUserService;
  25.     public function __construct(MailerInterface $mailerBaseUserRepository $baseUserRepositorySecurity $securityBaseUserService $baseUserService)
  26.     {
  27.         $this->mailer $mailer;
  28.         $this->baseUserRepository $baseUserRepository;
  29.         $this->security $security;
  30.         $this->baseUserService $baseUserService;
  31.     }
  32.     public static function getSubscribedEvents()
  33.     {
  34.         return [
  35.             KernelEvents::VIEW => ['create'EventPriorities::POST_WRITE],
  36.         ];
  37.     }
  38.     public function create(ViewEvent $event): void
  39.     {
  40.         $pharmacy $event->getControllerResult();
  41.         $request $event->getRequest();
  42.         $method $request->getMethod();
  43.         if (
  44.             !$pharmacy instanceof Pharmacy
  45.             || Request::METHOD_POST !== $method
  46.             || $request->get('_route') !== 'api_pharmacies_post_collection'
  47.         ) {
  48.             return;
  49.         }
  50.         /** Check si ça a été créé par un admin ou non */
  51.         if (!$this->security->isGranted('ROLE_ADMIN')) {
  52.             /**
  53.              * MAIL:Pharmacy
  54.              */
  55.             $email = (new TemplatedEmail())
  56.                 ->from(new Address('noreply@ores.com''ORES'))
  57.                 ->to($pharmacy->getEmail())
  58.                 ->subject('Inscription sur ORES BFC')
  59.                 ->htmlTemplate('mails/pharmacy/create.html.twig')
  60.                 ->context([
  61.                     'pharmacy' => $pharmacy
  62.                 ])
  63.             ;
  64.             $this->mailer->send($email);
  65.             /** Envoi les mails aux admins */
  66.             $admins $this->baseUserRepository->findByRole('ROLE_ADMIN');
  67.             /**
  68.              * MAIL:Admin
  69.              */
  70.             foreach ($admins as $admin) {
  71.                 $email = (new TemplatedEmail())
  72.                     ->from(new Address('noreply@ores.com''ORES'))
  73.                     ->to($admin->getEmail(), 'secretariat@urpspharmaciens-bfc.com''contact@urps-pharmaciens-bfc.com''kevin.akyos@gmail.com')
  74.                     ->subject('Nouveau propriétaire d’officine - ORES BFC')
  75.                     ->htmlTemplate('mails/base_user/admin_create_pharmacy.html.twig')
  76.                     ->context([
  77.                         'admin' => $admin
  78.                     ])
  79.                 ;
  80.                 $this->mailer->send($email);
  81.             }
  82.             /**
  83.              * PUSH:Admin
  84.              */
  85.             $message = (new ExpoMessage([
  86.                 'title' => 'Propriétaire d’officine en attente de validation',
  87.                 'body' => 'Vous pouvez consulter la demande sur l’application.',
  88.             ]))
  89.                 ->setChannelId('default')
  90.                 ->setBadge(0)
  91.                 ->playSound()
  92.             ;
  93.             if ($devices $this->baseUserService->getDevicesTokenFromRole('ROLE_ADMIN')) {
  94.                 (new Expo)->send($message)->to($devices)->push();
  95.             }
  96.         } else {
  97.             /** Todo: mails quand c'est créé par un admin ? */
  98.         }
  99.     }
  100. }