<?php
namespace App\EventSubscriber;
use App\Entity\BaseUser;
use App\Entity\ValidationRequest;
use ExpoSDK\Expo;
use ExpoSDK\ExpoMessage;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Workflow\Event\CompletedEvent;
class WorkflowValidationRequestSubscriber implements EventSubscriberInterface
{
private MailerInterface $mailer;
public function __construct(MailerInterface $mailer)
{
$this->mailer = $mailer;
}
public static function getSubscribedEvents()
{
return [
'workflow.validation_request.completed.to_validated' => ['completedToValidated'],
'workflow.validation_request.completed.to_refused' => ['completedToRefused'],
];
}
public function completedToValidated(CompletedEvent $event)
{
/** @var ValidationRequest $validationRequest */
$validationRequest = $event->getSubject();
$pharmacy = $validationRequest->getPharmacy();
$email = (new TemplatedEmail())
->from(new Address('noreply@ores.com', 'ORES'))
->to($validationRequest->getPharmacy()->getEmail())
->subject('Validation de l’inscription sur ORES BFC')
->htmlTemplate('mails/pharmacy/account_validated.html.twig')
->context([
'pharmacy' => [
'lastname' => $pharmacy->getLastname(),
'firstname' => $pharmacy->getFirstname(),
'email' => $pharmacy->getEmail(),
],
'validationRequest' => $validationRequest
])
;
$this->mailer->send($email);
$message = (new ExpoMessage([
'title' => 'Votre demande d’inscription sur l’application ORES BFC a été validée par un administrateur.',
'body' => 'Vous pouvez vous connecter dorénavant sur l’application.',
]))
->setChannelId('default')
->setBadge(0)
->playSound()
;
switch ($validationRequest->getPharmacy()->getNotificationType()) {
case BaseUser::NOTIFICATION_PUSH:
case BaseUser::NOTIFICATION_PUSH_MAIL:
if ($devices = $validationRequest->getPharmacy()->getDevicesTokensExpo()) {
(new Expo)->send($message)->to($devices)->push();
}
break;
}
}
public function completedToRefused(CompletedEvent $event)
{
/** @var ValidationRequest $validationRequest */
$validationRequest = $event->getSubject();
$message = (new ExpoMessage([
'title' => 'Votre demande d’inscription sur l’application ORES BFC a été refusée par un administrateur.',
]))
->setChannelId('default')
->setBadge(0)
->playSound()
;
switch ($validationRequest->getPharmacy()->getNotificationType()) {
case BaseUser::NOTIFICATION_PUSH:
case BaseUser::NOTIFICATION_PUSH_MAIL:
if ($devices = $validationRequest->getPharmacy()->getDevicesTokensExpo()) {
(new Expo)->send($message)->to($devices)->push();
}
break;
}
}
}