src/Controller/MessageController.php line 94

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Message;
  4. use App\Entity\MessageReceiver;
  5. use App\Form\MessageType;
  6. use App\Repository\CommercialRepository;
  7. use App\Repository\MessageReceiverRepository;
  8. use App\Repository\MessageRepository;
  9. use App\Repository\MessageStatusRepository;
  10. use App\Repository\PrescriberRepository;
  11. use App\Service\EmailService;
  12. use App\Service\FormService;
  13. use App\Service\InvoiceService;
  14. use App\Service\StatisticsService;
  15. use DateTimeImmutable;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Mailer\MailerInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. #[Route('/message')]
  25. class MessageController extends AbstractController
  26. {
  27.     public function __construct(
  28.         private readonly EntityManagerInterface    $entityManager,
  29.         private readonly MessageRepository         $messageRepository,
  30.         private readonly MessageStatusRepository   $messageStatusRepository,
  31.         private readonly MessageReceiverRepository $messageReceiverRepository,
  32.         private readonly EmailService              $emailService,
  33.         private readonly MailerInterface           $mailer,
  34.     )
  35.     {
  36.     }
  37.     #[Route('/'name'app_message_index'methods: ['GET'])]
  38.     public function index(MessageRepository $messageRepository): Response
  39.     {
  40.         return $this->render('message/index.html.twig', [
  41.             'messages' => $messageRepository->findAll(),
  42.         ]);
  43.     }
  44.     #[Route('/new'name'app_message_new'methods: ['GET''POST'])]
  45.     public function new(Request $requestMessageRepository $messageRepository): Response
  46.     {
  47.         $message = new Message();
  48.         $form    $this->createForm(MessageType::class, $message);
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted() && $form->isValid()) {
  51.             $messageRepository->save($messagetrue);
  52.             return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER);
  53.         }
  54.         return $this->renderForm('message/new.html.twig', [
  55.             'message' => $message,
  56.             'form'    => $form,
  57.         ]);
  58.     }
  59.     #[Route('/newBlank'name'app_message_new_blank'methods: ['GET''POST'])]
  60.     public function newBlank(Request $requestMessageRepository $messageRepository): Response
  61.     {
  62.         $message = new Message();
  63.         $form    $this->createForm(MessageType::class, $message);
  64.         $form->handleRequest($request);
  65.         if ($form->isSubmitted() && $form->isValid()) {
  66.             $messageRepository->save($messagetrue);
  67.             return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER);
  68.         }
  69.         return $this->renderForm('message/new_blank.html.twig', [
  70.             'message' => $message,
  71.             'form'    => $form,
  72.         ]);
  73.     }
  74.     #[Route('/sendMessage'name'app_message_send'methods: ['GET''POST'])]
  75.     public function send(Request $requestMessageRepository $messageRepository): Response
  76.     {
  77.         $receiver $this->messageReceiverRepository->findOneBy(['slug' => 'orders']);
  78.         $message = new Message();
  79.         if ($receiver) {
  80.             $message->setReceiver($receiver);
  81.         }
  82.         $form $this->createForm(MessageType::class, $message);
  83.         $form->handleRequest($request);
  84.         if ($request->isXmlHttpRequest()) {
  85.             if ($form->isSubmitted() && $form->isValid()) {
  86.                 // get message status
  87.                 $status $this->messageStatusRepository->findOneBy(['slug' => 'new']);
  88.                 $message->setStatus($status);
  89.                 // Set the sender as the currently logged-in user
  90.                 $message->setSender($this->getUser());
  91.                 $message->setCreatedAt(new DateTimeImmutable());
  92.                 $messageRepository->save($messagetrue);
  93.                 $receiver       $form->get('receiver')->getData();
  94.                 $messageSubject $form->get('subject')->getData();
  95.                 $body           $form->get('body')->getData();
  96.                 switch ($receiver->getSlug()) {
  97.                     case 'admin':
  98.                         $messageSubject "[ADMINISTRATION] " $messageSubject;
  99.                         break;
  100.                     case 'compta':
  101.                         $messageSubject "[COMPTABILITÉ] " $messageSubject;
  102.                         break;
  103.                     case 'orders':
  104.                         $messageSubject "[COMMANDES] " $messageSubject;
  105.                         break;
  106.                     case 'technical':
  107.                         $messageSubject "[SUPPORT TECHNIQUE] " $messageSubject;
  108.                         break;
  109.                     default:
  110.                         break;
  111.                 }
  112.                 $data = [
  113.                     'body'       => $body,
  114.                     'sender'     => $this->getUser(), // Add the sender to the data
  115.                     'senderMail' => $this->emailService->getEmailSender(),
  116.                     'receiver'   => $this->getUser()?->getEmail(),
  117.                 ];
  118.                 $email $this->emailService->sendEmail(
  119.                     $this->emailService->getEmailSender(),
  120.                     $receiver->getEmail(),
  121.                     $messageSubject,
  122.                     'emails/contact.html.twig',
  123.                     $data,
  124.                 );
  125.                 if ($email$this->mailer->send($email);
  126.                 return new JsonResponse(['message' => 'Message envoyé avec succès'], 200);
  127.             }
  128.         }
  129.         return $this->renderForm('message/send.html.twig', [
  130.             'message' => $message,
  131.             'form'    => $form,
  132.         ]);
  133.     }
  134.     #[Route('/{id}'name'app_message_show'methods: ['GET'])]
  135.     public function show(Message $message): Response
  136.     {
  137.         return $this->render('message/show.html.twig', [
  138.             'message' => $message,
  139.         ]);
  140.     }
  141.     #[Route('/{id}/edit'name'app_message_edit'methods: ['GET''POST'])]
  142.     public function edit(Request $requestMessage $messageMessageRepository $messageRepository): Response
  143.     {
  144.         $form $this->createForm(MessageType::class, $message);
  145.         $form->handleRequest($request);
  146.         if ($form->isSubmitted() && $form->isValid()) {
  147.             $messageRepository->save($messagetrue);
  148.             return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER);
  149.         }
  150.         return $this->renderForm('message/edit.html.twig', [
  151.             'message' => $message,
  152.             'form'    => $form,
  153.         ]);
  154.     }
  155.     #[Route('/{id}'name'app_message_delete'methods: ['POST'])]
  156.     public function delete(Request $requestMessage $messageMessageRepository $messageRepository): Response
  157.     {
  158.         if ($this->isCsrfTokenValid('delete' $message->getId(), $request->request->get('_token'))) {
  159.             $messageRepository->remove($messagetrue);
  160.         }
  161.         return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER);
  162.     }
  163. }