src/EventSubscriber/WorkflowValidationRequestSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\BaseUser;
  4. use App\Entity\ValidationRequest;
  5. use ExpoSDK\Expo;
  6. use ExpoSDK\ExpoMessage;
  7. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Mailer\MailerInterface;
  10. use Symfony\Component\Mime\Address;
  11. use Symfony\Component\Workflow\Event\CompletedEvent;
  12. class WorkflowValidationRequestSubscriber implements EventSubscriberInterface
  13. {
  14.     private MailerInterface $mailer;
  15.     public function __construct(MailerInterface $mailer)
  16.     {
  17.         $this->mailer $mailer;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             'workflow.validation_request.completed.to_validated' => ['completedToValidated'],
  23.             'workflow.validation_request.completed.to_refused' => ['completedToRefused'],
  24.         ];
  25.     }
  26.     public function completedToValidated(CompletedEvent $event)
  27.     {
  28.         /** @var ValidationRequest $validationRequest */
  29.         $validationRequest $event->getSubject();
  30.         $pharmacy $validationRequest->getPharmacy();
  31.         $email = (new TemplatedEmail())
  32.             ->from(new Address('noreply@ores.com''ORES'))
  33.             ->to($validationRequest->getPharmacy()->getEmail())
  34.             ->subject('Validation de l’inscription sur ORES BFC')
  35.             ->htmlTemplate('mails/pharmacy/account_validated.html.twig')
  36.             ->context([
  37.                 'pharmacy' => [
  38.                     'lastname' => $pharmacy->getLastname(),
  39.                     'firstname' => $pharmacy->getFirstname(),
  40.                     'email' => $pharmacy->getEmail(),
  41.                 ],
  42.                 'validationRequest' => $validationRequest
  43.             ])
  44.         ;
  45.         $this->mailer->send($email);
  46.         $message = (new ExpoMessage([
  47.             'title' => 'Votre demande d’inscription sur l’application ORES BFC a été validée par un administrateur.',
  48.             'body' => 'Vous pouvez vous connecter dorénavant sur l’application.',
  49.         ]))
  50.             ->setChannelId('default')
  51.             ->setBadge(0)
  52.             ->playSound()
  53.         ;
  54.         switch ($validationRequest->getPharmacy()->getNotificationType()) {
  55.             case BaseUser::NOTIFICATION_PUSH:
  56.             case BaseUser::NOTIFICATION_PUSH_MAIL:
  57.             if ($devices $validationRequest->getPharmacy()->getDevicesTokensExpo()) {
  58.                 (new Expo)->send($message)->to($devices)->push();
  59.             }
  60.                 break;
  61.         }
  62.     }
  63.     public function completedToRefused(CompletedEvent $event)
  64.     {
  65.         /** @var ValidationRequest $validationRequest */
  66.         $validationRequest $event->getSubject();
  67.         $message = (new ExpoMessage([
  68.             'title' => 'Votre demande d’inscription sur l’application ORES BFC a été refusée par un administrateur.',
  69.         ]))
  70.             ->setChannelId('default')
  71.             ->setBadge(0)
  72.             ->playSound()
  73.         ;
  74.         switch ($validationRequest->getPharmacy()->getNotificationType()) {
  75.             case BaseUser::NOTIFICATION_PUSH:
  76.             case BaseUser::NOTIFICATION_PUSH_MAIL:
  77.                 if ($devices $validationRequest->getPharmacy()->getDevicesTokensExpo()) {
  78.                     (new Expo)->send($message)->to($devices)->push();
  79.                 }
  80.                 break;
  81.         }
  82.     }
  83. }