src/EventSubscriber/UserSubscriber.php line 41

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\User;
  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. final class UserSubscriber implements EventSubscriberInterface
  19. {
  20.     private MailerInterface $mailer;
  21.     private BaseUserService $baseUserService;
  22.     private BaseUserRepository $baseUserRepository;
  23.     public function __construct(MailerInterface $mailerBaseUserService $baseUserServiceBaseUserRepository $baseUserRepository)
  24.     {
  25.         $this->mailer $mailer;
  26.         $this->baseUserService $baseUserService;
  27.         $this->baseUserRepository $baseUserRepository;
  28.     }
  29.     public static function getSubscribedEvents()
  30.     {
  31.         return [
  32.             KernelEvents::VIEW => ['create'EventPriorities::POST_WRITE],
  33.         ];
  34.     }
  35.     public function create(ViewEvent $event): void
  36.     {
  37.         $admins $this->baseUserRepository->findByRole('ROLE_ADMIN');
  38.         $user $event->getControllerResult();
  39.         $request $event->getRequest();
  40.         $method $request->getMethod();
  41.         if (
  42.             !$user instanceof User
  43.             || Request::METHOD_POST !== $method
  44.             || $request->get('_route') !== 'api_users_post_collection'
  45.         ) {
  46.             return;
  47.         }
  48.         /**
  49.          * MAIL:User
  50.          */
  51.         $email = (new TemplatedEmail())
  52.             ->from(new Address('noreply@ores.com''ORES'))
  53.             ->to($user->getEmail())
  54.             ->subject('Inscription sur ORES BFC')
  55.             ->htmlTemplate('mails/user/create.html.twig')
  56.             ->context([
  57.                 'user' => $user
  58.             ])
  59.         ;
  60.         $this->mailer->send($email);
  61.         $this->sendMailCreateForAdmin(array_map(fn (BaseUser $baseUser) => $baseUser->getEmail(), $admins));
  62.         /**
  63.          * PUSH:Admin
  64.          */
  65.         $message = (new ExpoMessage([
  66.             'title' => 'Un nouvel utilisateur s’est inscrit sur ORES BFC.',
  67.             'body' => 'Vous pouvez le consulter sur l’application.',
  68.         ]))
  69.             ->setChannelId('default')
  70.             ->setBadge(0)
  71.             ->playSound()
  72.         ;
  73.         if ($devices $this->baseUserService->getDevicesTokenFromRole('ROLE_ADMIN')) {
  74.             (new Expo)->send($message)->to($devices)->push();
  75.         }
  76.     }
  77.     public function sendMailCreateForAdmin(array $admins)
  78.     {
  79.         /**
  80.          * MAIL:Admin
  81.          */
  82.         $email = (new TemplatedEmail())
  83.             ->from(new Address('noreply@ores.com''ORES'))
  84.             ->to(...$admins)
  85.             ->subject('Nouvel utilisateur - ORES BFC')
  86.             ->htmlTemplate('mails/user/create_admin.html.twig')
  87.             ->context([])
  88.         ;
  89.         $this->mailer->send($email);
  90.     }
  91. }