src/EventSubscriber/Messaging/MessageSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Messaging;
  3. use App\Entity\Messaging\Conversation;
  4. use App\Entity\Messaging\Message;
  5. use App\Entity\User;
  6. use App\Event\Messaging\MessageCreatedEvent;
  7. use App\EventSubscriber\AbstractEmailSubscriber;
  8. use App\Manager\ConversationManager;
  9. use App\Manager\Mailer;
  10. use App\Manager\MailTypeInterface;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. use Twig\Environment;
  13. class MessageSubscriber extends AbstractEmailSubscriber
  14. {
  15.     use MailerTeamTrait;
  16.     public function __construct(
  17.         Mailer $mailer,
  18.         Environment $templating,
  19.         TranslatorInterface $translator,
  20.         protected readonly ConversationManager $conversationManager
  21.     ) {
  22.         parent::__construct($mailer$templating$translator);
  23.     }
  24.     public function onMessageCreated(MessageCreatedEvent $event): void
  25.     {
  26.         $message $event->getMessage();
  27.         $conversation $message->getConversation();
  28.         if (!$conversation instanceof Conversation || !$conversation->getUser() instanceof User) {
  29.             throw new \LogicException();
  30.         }
  31.         if (Message::SCP_TYPE === $message->getType()) {
  32.             $this->notifyCustomer($message$conversation);
  33.         } else {
  34.             $this->notifyTeam($message$conversation);
  35.         }
  36.     }
  37.     public static function getSubscribedEvents(): array
  38.     {
  39.         return [
  40.             MessageCreatedEvent::class => 'onMessageCreated',
  41.         ];
  42.     }
  43.     protected function notifyCustomer(Message $messageConversation $conversation): void
  44.     {
  45.         $user $conversation->getUser();
  46.         $subject $this->transEmail('conversation.new_message.subject');
  47.         $messageBody $this->templating->render('email/messaging/new_message.html.twig', [
  48.             'customer'     => $conversation->getUser(),
  49.             'conversation' => $conversation,
  50.             'isSCPInitConversation' => $this->conversationManager->isSCPInitConversation($conversation),
  51.             'message'      => $message,
  52.         ]);
  53.         $to $user->getEmail();
  54.         $this->mailer->sendMail([$to], $subject$messageBodyMailTypeInterface::MESSAGING_CONVERSATION_NEW_MESSAGE_CUSTOMER);
  55.     }
  56.     protected function notifyTeam(Message $messageConversation $conversation): void
  57.     {
  58.         $subject $this->transEmail('conversation.new_message_customer.subject');
  59.         $messageBody $this->templating->render('email/messaging/new_message_customer.html.twig', [
  60.             'customer'     => $conversation->getUser(),
  61.             'contrat'      => $conversation->getContractNumbers(),
  62.             'conversation' => $conversation,
  63.             'message'      => $message,
  64.         ]);
  65.         $this->sendEmailToTeam(
  66.             $this->mailer,
  67.             $conversation->getTeam(),
  68.             $messageBody,
  69.             $subject,
  70.             MailTypeInterface::MESSAGING_CONVERSATION_NEW_MESSAGE_TEAM
  71.         );
  72.     }
  73. }