src/Controller/MessageController.php line 199

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\MessagePatient;
  4. use App\Entity\Notification;
  5. use App\Entity\PaperPatient;
  6. use App\Entity\Patient;
  7. use App\Entity\User;
  8. use App\Form\MessagePatientType;
  9. use App\Form\PaperPatientType;
  10. use App\Repository\MessagePatientRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\Cache\Adapter\FilesystemAdapter;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Security\Core\User\UserInterface;
  19. use Symfony\Component\Uid\Uuid;
  20. class MessageController extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/message/professional/{id}", name="index_message_professional", methods={"GET","POST"})
  24.      * @IsGranted("ROLE_PROFESSIONAL")
  25.      */
  26.     public function index(?UserInterface $userEntityManagerInterface $entityManagerPatient $patientRequest $request)
  27.     {
  28.         if (!$user) {
  29.             return $this->redirectToRoute('app_login');
  30.         }
  31.         $haveOffice true;
  32.         if (!$user->getOffice()) {
  33.             $haveOffice false;
  34.         }
  35.         $messagePatient = new MessagePatient();
  36.         $form $this->createForm(MessagePatientType::class, $messagePatient);
  37.         $form->handleRequest($request);
  38.         if ($form->isSubmitted() && $form->isValid()) {
  39.             if ($user->getOffice() === $patient->getUser()->getOffice()) { //vérifie que le professionnel fasse parti du même cabinet que le patient cible
  40.                 $messagePatient->setAuthor($user);
  41.                 $messagePatient->setType(1);
  42.                 $messagePatient->setAffectedPatient($patient);
  43.                 $entityManager->persist($messagePatient);
  44.                 $entityManager->flush();
  45.                 $this->addFlash('info'"Nouveau message envoyé.");
  46.                 return $this->redirectToRoute('index_message_professional', ['id' => $patient->getId()]);
  47.             }
  48.         }
  49.         $messages $entityManager->getRepository('App\Entity\MessagePatient')->findBy(['affectedPatient' => $patient], ['createdAt' => 'DESC']);
  50.         foreach ($messages as &$message) {
  51.             if ($message->getListProfessionalViewed() != null) {
  52.                 $listProfessional explode(';'$message->getListProfessionalViewed());
  53.                 $message->setView(false);
  54.                 $fullName = [];
  55.                 foreach ($listProfessional as $professionalUuid) {
  56.                     $professional $entityManager->getRepository('App\Entity\Professional')->find(Uuid::fromString($professionalUuid));
  57.                     if ($user->getIsProfessional()) {
  58.                         $userProfessional $user->getProfessional();
  59.                         if ($professional == $userProfessional) {
  60.                             $message->setView(true);
  61.                         }
  62.                     }
  63.                     $fistName $professional->getFirstName();
  64.                     $lastName strtoupper($professional->getLastName()[0]);
  65.                     $fullName[] = $lastName '.' $fistName;
  66.                 }
  67.                 $message->setListProfessionalViewed(implode(', '$fullName));
  68.             }
  69.         }
  70.         return $this->render('message/index.html.twig', [
  71.             'form' => $form->createView(),
  72.             'messages' => $messages,
  73.             'current_menu' => 'patient',
  74.             'patient' => $patient,
  75.             'haveOffice' => $haveOffice
  76.         ]);
  77.     }
  78.     /**
  79.      * @Route("/message/update/{idMessage}", name="message_update_view", options = { "expose" = true })
  80.      * définis un message comme vu
  81.      */
  82.     public function ajaxUpdateMessageView($idMessage, ?UserInterface $userEntityManagerInterface $entityManager)
  83.     {
  84.         if (!$user) {
  85.             return $this->redirectToRoute('app_login');
  86.         }
  87.         $messagePatient $entityManager->getRepository('App\Entity\MessagePatient')->find(json_decode($idMessage));
  88.         $patient $messagePatient->getAffectedPatient();
  89.         $userOffice $user->getOffice();
  90.         if ($userOffice === $patient->getUser()->getOffice() || $userOffice === $messagePatient->getAuthor()->getOffice()) {
  91.             if ($user->getIsProfessional()) {
  92.                 $professional $user->getProfessional();
  93.                 $uuid $professional->getId()->toRfc4122();
  94.                 $listProfessional $messagePatient->getListProfessionalViewed();
  95.                 if ($listProfessional === null) {
  96.                     $listProfessional = [];
  97.                 } else {
  98.                     $listProfessional explode(';'$listProfessional);
  99.                 }
  100.                 $listProfessional[] = $uuid;
  101.                 $listProfessional implode(';'$listProfessional);
  102.                 $messagePatient->setListProfessionalViewed($listProfessional);
  103.             }
  104.             $messagePatient->setView(1);
  105.             $entityManager->persist($messagePatient);
  106.             $entityManager->flush();
  107.         }
  108.         return new JsonResponse([
  109.             'status' => 1,
  110.             'msg' => ''
  111.         ]);
  112.     }
  113.     /**
  114.      * @Route("/message/patient", name="index_message_patient", methods={"GET","POST"})
  115.      * @IsGranted("ROLE_PATIENT")
  116.      */
  117.     public function indexPatient(?UserInterface $userEntityManagerInterface $entityManagerRequest $request)
  118.     {
  119.         if (!$user) {
  120.             return $this->redirectToRoute('app_login');
  121.         }
  122.         $haveOffice true;
  123.         if (!$user->getOffice()) {
  124.             $haveOffice false;
  125.         }
  126.         $patient $user->getPatient();
  127.         $messagePatient = new MessagePatient();
  128.         $form $this->createForm(MessagePatientType::class, $messagePatient);
  129.         $form->handleRequest($request);
  130.         if ($form->isSubmitted() && $form->isValid()) {
  131.             //création d'une notification
  132.             $office $user->getOffice();
  133.             $users $entityManager->getRepository('App\Entity\User')->findBy(['office' => $office'isProfessional' => 1]);
  134.             foreach ($users as $oUser) {
  135.                 $notification = new Notification();
  136.                 $notification->setType(2);
  137.                 $notification->setUser($oUser);
  138.                 $entityManager->persist($notification);
  139.             }
  140.             $messagePatient->setAuthor($user);
  141.             $messagePatient->setType(2);
  142.             $messagePatient->setAffectedPatient($patient);
  143.             $entityManager->persist($messagePatient);
  144.             $entityManager->flush();
  145.             $this->addFlash('info'"Nouveau message envoyé.");
  146.             return $this->redirectToRoute('index_message_patient');
  147.         }
  148.         $messages $entityManager->getRepository('App\Entity\MessagePatient')->findBy(['affectedPatient' => $patient], ['createdAt' => 'DESC']);
  149.         return $this->render('message/index.html.twig', [
  150.             'controller_name' => 'MessageController',
  151.             'form' => $form->createView(),
  152.             'messages' => $messages,
  153.             'current_menu' => 'message',
  154.             'haveOffice' => $haveOffice
  155.         ]);
  156.     }
  157.     /**
  158.      * @Route("/json/message/new", name="have_message_new_json", options = { "expose" = true })
  159.      * vérifie s'il existe des messages non lus afin d'afficher une notification
  160.      */
  161.     public function ajaxHaveNewMessage(?UserInterface $userMessagePatientRepository $messagePatientRepositoryEntityManagerInterface $entityManager)
  162.     {
  163.         if (!$user) {
  164.             return new JsonResponse(0);
  165.         }
  166.         if ($user->getIsProfessional()) {//si l'utilisateur est un professionnel
  167.             $idUser $user->getId();
  168.             $notifications $entityManager->getRepository('App\Entity\Notification')->findBy(['user' => $idUser'isViewed' => '0'], ['createdAt' => 'DESC'], 1);
  169.             if (empty($notifications)) {
  170.                 return new JsonResponse(0);
  171.             } else {
  172.                 return new JsonResponse(1);
  173.             }
  174. //            $officeMessagesNotViewInCache = $cache->getItem('number_messages.from.patient');
  175. //            //si le nombre de message est en cache
  176. //            if($officeMessagesNotViewInCache->isHit()){
  177. //                if(count($officeMessagesNotViewInCache->get()) > 0){
  178. //                    return new JsonResponse(1);
  179. //                }
  180. //                return new JsonResponse(0);
  181. //            }
  182. //
  183. //            $office = $user->getOffice();
  184. //            $users = $office->getUsers();
  185. //            $arrayPatient = [];
  186. //            foreach ($users as $user){
  187. //                if(!$user->getIsProfessional()){
  188. //                    $arrayPatient[] = $user->getPatient()->getId();//récupère les patients du cabinet
  189. //                }
  190. //            }
  191. //            $officeMessagesNotView = $messagePatientRepository->getMessageNotViewForPatients($arrayPatient);
  192. //            $officeMessagesNotViewInCache = $cache->getItem('number_messages.from.patient'); //création du cache
  193. //            $officeMessagesNotViewInCache->set($officeMessagesNotView); //mise en cache du nombre de message
  194. //            $officeMessagesNotViewInCache->expiresAfter(7200); //durée du cache
  195. //            $cache->save($officeMessagesNotViewInCache); //sauvegarde du cache
  196. //
  197. //            if(count($officeMessagesNotView) > 0){
  198. //                return new JsonResponse(1);
  199. //            }
  200.         } else {
  201. //            $cache = new FilesystemAdapter();
  202. //            $officeMessagesNotViewInCache = $cache->getItem('number_messages.from.professional');
  203. //
  204. //            //si le nombre de message est en cache
  205. //            if ($officeMessagesNotViewInCache->isHit()) {
  206. //                if (count($officeMessagesNotViewInCache->get()) > 0) {
  207. //                    return new JsonResponse(1);
  208. //                }
  209. //                return new JsonResponse(0);
  210. //            }
  211.             $idPatient $user->getPatient()->getId();
  212.             $officeMessagesNotView $messagePatientRepository->findBy(['view' => 0'type' => 1'affectedPatient' => $idPatient]);
  213. //            $officeMessagesNotViewInCache = $cache->getItem('number_messages.from.professional'); //création du cache
  214. //            $officeMessagesNotViewInCache->set($officeMessagesNotView); //mise en cache du nombre de message
  215. //            $officeMessagesNotViewInCache->expiresAfter(7200); //durée du cache
  216. //            $cache->save($officeMessagesNotViewInCache); //sauvegarde du cache
  217.             if (count($officeMessagesNotView) > 0) {
  218.                 return new JsonResponse(1);
  219.             }
  220.         }
  221.         return new JsonResponse(0);
  222.     }
  223. }