src/Controller/PointController.php line 142

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\GroupContact;
  4. use App\Entity\Meeting;
  5. use App\Entity\Period;
  6. use App\Entity\PersonalNotes;
  7. use App\Entity\Point;
  8. use App\Entity\PointFile;
  9. use App\Entity\ProcessedPoint;
  10. use App\Entity\Service;
  11. use App\Form\PointFileType;
  12. use App\Form\PointLiveType;
  13. use App\Form\PointSearchFilterType;
  14. use App\Form\PointType;
  15. use App\Ldap\LdapCommunication;
  16. use App\Manager\PeriodManager;
  17. use App\Repository\DomainRepository;
  18. use App\Repository\GroupContactRepository;
  19. use App\Repository\MeetingRepository;
  20. use App\Repository\PeriodRepository;
  21. use App\Repository\PersonalNotesRepository;
  22. use App\Repository\PointFileRepository;
  23. use App\Repository\PointRepository;
  24. use App\Repository\PointStatusRepository;
  25. use App\Repository\ProcessedPointRepository;
  26. use App\Repository\ServiceRepository;
  27. use App\Service\DataProvider;
  28. use Carbon\Carbon;
  29. use Doctrine\Common\Collections\Collection;
  30. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  31. use Symfony\Component\HttpFoundation\JsonResponse;
  32. use Symfony\Component\HttpFoundation\Request;
  33. use Symfony\Component\HttpFoundation\Response;
  34. use Symfony\Component\Routing\Annotation\Route;
  35. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  36. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  37. use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
  38. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  39. use Symfony\Component\Serializer\Serializer;
  40. use Symfony\Component\Serializer\SerializerInterface;
  41. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  42. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  43. use Doctrine\Common\Collections\ArrayCollection;
  44. use Knp\Component\Pager\PaginatorInterface;
  45. use stdClass;
  46. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  47. use Symfony\Component\HttpFoundation\Cookie;
  48. /**
  49.  * @Route("/point")
  50.  */
  51. class PointController extends AbstractController
  52. {
  53.     /**
  54.      * @Route("/", name="point_index", methods={"GET"})
  55.      */
  56.     public function index(DataProvider $dataProviderPaginatorInterface $paginatorPointRepository $pointRepositoryRequest $request): Response
  57.     {
  58.         $pointPagination $paginator->paginate(
  59.             $dataProvider->getUserPoints($this->getUser()),
  60.             $request->query->getInt('page'1),
  61.             18,
  62.             [
  63.               'pageParameterName' => 'page',
  64.               'align' => 'center',
  65.             ]
  66.         );
  67.         return $this->render('point/index.html.twig', [
  68.             'points' => $pointPagination,
  69.         ]);
  70.     }
  71.     /**
  72.      * @Route("/searchPoint", name="point_search_point", methods={"GET","POST"})
  73.      */
  74.     public function searchPoint(Request $requestPointRepository $pointRepositoryDataProvider $dataProvider): Response
  75.     {
  76.         $points $pointRepository->findSearch();
  77.         $inDataProvider $dataProvider->getUserPointsSearch($this->getUser());
  78.         $pointCanAdd = [];
  79.         foreach ($points as $value) {
  80.             if (in_array($value$inDataProvider)) {
  81.                 $pointCanAdd[] = $value;
  82.             }
  83.         }
  84.         $form $this->createForm(PointSearchFilterType::class);
  85.         $form->handleRequest($request);
  86.         if ($form->isSubmitted() && $form->isValid()) {
  87.             $points $pointRepository->findSearch($form->getData());
  88.             $pointCanAdd = [];
  89.             foreach ($points as $value) {
  90.                 if (in_array($value$inDataProvider)) {
  91.                     $pointCanAdd[] = $value;
  92.                 }
  93.             }
  94.         }
  95.         return $this->render('point/search.html.twig', [
  96.             // 'points' => $points,
  97.             'form' => $form->createView(),
  98.             'jsonFile' => $this->Json($pointCanAdd200, [], ['groups' => 'searchPoints'])
  99.         ]);
  100.     }
  101.     /**
  102.      * @Route("/searchPoint/{id}/show", name="point_show", methods={"GET"})
  103.      */
  104.     public function show(Point $pointProcessedPointRepository $processedPointRepositoryPersonalNotesRepository $personalNotesRepositoryPointFileRepository $pointFileRepository): Response
  105.     {
  106.         $allNotes $personalNotesRepository->findPersonalNotes($this->getUser(), $point);
  107.         // $allCommDiscu = $processedPointRepository->findByNotInMeeting($meeting, $point);
  108.         $processedPoint $processedPointRepository->findByProcessedPointPoint($point, array('processedPointMeeting' => 'ASC'));
  109.         return $this->render('point/show.html.twig', [
  110.             'point' => $point,
  111.             'processedPoint' => $processedPoint,
  112.             'allNotes' => $allNotes,
  113.             'files' => $pointFileRepository->findByFilePoint(array($point)),
  114.             // 'allCommDiscu' => $allCommDiscu,
  115.         ]);
  116.     }
  117.     /**
  118.      * @Route("/new", name="point_new", methods={"GET","POST"})
  119.      */
  120.     public function new(Request $requestDataProvider $dataProviderMeetingRepository $meetingRepositoryGroupContactRepository $groupContactRepositoryGroupContactRepository $pointContactRepositoryPointStatusRepository $pointStatusRepositoryDomainRepository $domainRepositoryServiceRepository $serviceRepositorySerializerInterface $serializer): Response
  121.     {
  122.         $point = new Point();
  123.         $processedPoint = new ProcessedPoint();
  124.         $user $this->getUser();
  125.         $meetings $meetingRepository->findAll();
  126.         if ($user->getUserDomain()->count() == 1) {
  127.             $point->setPointDomain($user->getUserDomain(){
  128.                 0
  129.             });
  130.         }
  131.         $form $this->createForm(PointType::class, $point, array('meetings' => $meetings));
  132.         $form->remove('pointDomain');
  133.         $form->remove('pointService');
  134.         $form->remove('priorNotice');
  135.         $form->remove('priorNoticeReason');
  136.         if (!$this->isGranted('ROLE_CHANCELLOR')) {
  137.             $form->remove('pointStatus');
  138.         }
  139.         $form->handleRequest($request);
  140.         if ($form->isSubmitted() && $form->isValid()) {
  141.             $entityManager $this->getDoctrine()->getManager();
  142.             foreach ($point->getPointContact() as $key => $value) {
  143.                 $contact $pointContactRepository->findOneBy(array('email' => $value->getEmail()));
  144.                 if ($contact) {
  145.                     $point->removePointContact($value);
  146.                     $point->addPointContact($contact);
  147.                 }
  148.             }
  149.             $point->setPointStatus($pointStatusRepository->findOneByName('Ouvert'));
  150.             $point->setPointUser($user);
  151.             $point->setTagAdvisor(false);
  152.             $point->setTagResponsible(false);
  153.             $entityManager->persist($point);
  154.             $response = new Response();
  155.             $response->headers->setCookie(Cookie::create('lastService'$point->getPointService()->getId(), 0'/'nullfalsefalse));
  156.             $response->headers->setCookie(Cookie::create('lastDomain'$point->getPointDomain()->getId(), 0'/'nullfalsefalse));
  157.             $response->sendHeaders();
  158.             $entityManager->flush();
  159.             return $this->redirectToRoute('point_index');
  160.         }
  161.         $contacts $groupContactRepository->findAll();
  162.         $array $dataProvider->getUserDomainsAndServices($user);
  163.         $result = [];
  164.         $result['domains'] = json_decode($serializer->serialize($array['domains'], 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''shortName']]));
  165.         $result['services'] = json_decode($serializer->serialize($array['services'], 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''serviceDomain' => ['id']]]));
  166.         return $this->render('point/new.html.twig', [
  167.             'point' => $point,
  168.             'props' => $result,
  169.             'props_notice' => json_decode($serializer->serialize(new stdClass(), 'json', [])),
  170.             'contacts' => $contacts,
  171.             'form' => $form->createView(),
  172.         ]);
  173.     }
  174.     /**
  175.      * @Route("/newPointMeeting/{meeting}", name="point_new_meeting", methods={"GET","POST"})
  176.      */
  177.     public function newPointMeeting(Request $requestMeeting $meetingGroupContactRepository $groupContactRepositoryGroupContactRepository $pointContactRepositoryPointStatusRepository $pointStatusRepositoryPointRepository $pointRepositoryDataProvider $dataProviderSerializerInterface $serializer): Response
  178.     {
  179.         $point = new Point();
  180.         $processedPoint = new ProcessedPoint();
  181.         $user $this->getUser();
  182.         $form $this->createForm(PointType::class, $point);
  183.         $form->remove('meeting');
  184.         $form->remove('pointDomain');
  185.         $form->remove('pointService');
  186.         $form->remove('priorNotice');
  187.         $form->remove('priorNoticeReason');
  188.         $form->remove('communication');
  189.         $form->remove('discussions');
  190.         if (!$this->isGranted('ROLE_CHANCELLOR')) {
  191.             $form->remove('pointStatus');
  192.         }
  193.         $form->handleRequest($request);
  194.         if ($form->isSubmitted() && $form->isValid()) {
  195.             $entityManager $this->getDoctrine()->getManager();
  196.             $lastIndexPriority $pointRepository->findByPriorityIndex($meeting->getId())[1];
  197.             $lastIndexPriority++;
  198.             foreach ($point->getPointContact() as $key => $value) {
  199.                 $contact $pointContactRepository->findOneBy(array('email' => $value->getEmail()));
  200.                 if ($contact) {
  201.                     $point->removePointContact($value);
  202.                     $point->addPointContact($contact);
  203.                 }
  204.             }
  205.             $point->setPointStatus($pointStatusRepository->findOneByName('Ouvert'));
  206.             $point->setPointUser($user);
  207.             $point->setTagAdvisor(false);
  208.             $point->setTagResponsible(false);
  209.             $entityManager->persist($point);
  210.             $processedPoint->setProcessedPointPoint($point);
  211.             $processedPoint->setProcessedPointMeeting($meeting);
  212.             $processedPoint->setProcessedPointStatus($point->getPointStatus());
  213.             $processedPoint->setIndexPriority($lastIndexPriority);
  214.             $entityManager->persist($processedPoint);
  215.             $response = new Response();
  216.             $response->headers->setCookie(Cookie::create('lastService'$point->getPointService()->getId(), 0'/'nullfalsefalse));
  217.             $response->headers->setCookie(Cookie::create('lastDomain'$point->getPointDomain()->getId(), 0'/'nullfalsefalse));
  218.             $response->sendHeaders();
  219.             $entityManager->flush();
  220.             return $this->redirectToRoute('meeting_index');
  221.         }
  222.         $contacts $groupContactRepository->findAll();
  223.         $array $dataProvider->getUserDomainsAndServices($user);
  224.         $result = [];
  225.         $result['domains'] = json_decode($serializer->serialize($array['domains'], 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''shortName']]));
  226.         $result['services'] = json_decode($serializer->serialize($array['services'], 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''serviceDomain' => ['id']]]));
  227.         return $this->render('point/new.html.twig', [
  228.             'point' => $point,
  229.             'props' => $result,
  230.             'props_notice' => json_decode($serializer->serialize(new stdClass(), 'json', [])),
  231.             'contacts' => $contacts,
  232.             'form' => $form->createView(),
  233.         ]);
  234.         // }
  235.     }
  236.     /**
  237.      * @Route("/{id}/edit", name="point_edit", methods={"GET","POST"})
  238.      */
  239.     public function edit(Request $requestDataProvider $dataProviderPoint $pointGroupContactRepository $groupContactRepositoryMeetingRepository $meetingRepositoryGroupContactRepository $pointContactRepositoryPointFileRepository $pointFileRepositoryPersonalNotesRepository $personalNotesRepositorySerializerInterface $serializerProcessedPointRepository $processedPointRepository): Response
  240.     {
  241.         $oldPoint = clone $point;
  242.         $meetings $meetingRepository->findAll();
  243.         $pointFile = new PointFile();
  244.         $files $pointFileRepository->findByFilePoint(array($point));
  245.         if (!empty($point->getProcessedPoints()->getValues())) {
  246.             $selectedMeeting $meetingRepository->findOneById(array($point->getProcessedPoints()->toArray()[0]->getProcessedPointMeeting()->getId()));
  247.             $form $this->createForm(PointType::class, $point, array('meetings' => $meetings'selectedMeeting' => $selectedMeeting'edit' => true));
  248.         } else {
  249.             $validationGroup $request->get('validation') != null false true;
  250.             $form $this->createForm(PointType::class, $point, array('meetings' => $meetings'edit' => true'validation_groups' => $validationGroup));
  251.         }
  252.         $formFile $this->createForm(PointFileType::class, $pointFile);
  253.         $form->remove('pointDomain');
  254.         $form->remove('pointService');
  255.         $form->remove('priorNotice');
  256.         $form->remove('priorNoticeReason');
  257.         if ($point->getPointStatus()->getName() != "Ouvert" && $point->getPointStatus()->getName() != 'Incomplet' || !$this->isGranted('ROLE_CHANCELLOR')) {
  258.             $form->remove('pointStatus');
  259.         }
  260.         $formFile->handleRequest($request);
  261.         if (!$formFile->isSubmitted()) {
  262.             if (!$formFile->isSubmitted()) {
  263.                 $form->handleRequest($request);
  264.             }
  265.         }
  266.         if ($formFile->isSubmitted() && $formFile->isValid()) {
  267.             if (!$this->isGranted('ROLE_CHANCELLOR') && $this->getUser()->getId() != $point->getPointUser()->getId()) {
  268.                 if ($point->getPointStatus() != "Ouvert" || $point->getPointStatus() != 'Incomplet') {
  269.                     $this->addFlash('error''error.point_status_not_autorized');
  270.                     return $this->redirectToRoute('meeting_index');
  271.                 }
  272.             }
  273.             $entityManager $this->getDoctrine()->getManager();
  274.             $pointFile->setFilePoint($point);
  275.             $pointFile->setName($pointFile->getFiles()->getClientOriginalName());
  276.             $entityManager->persist($pointFile);
  277.             $entityManager->flush();
  278.             return $this->redirectToRoute('point_edit', array('id' => $point->getId()));
  279.         }
  280.         if ($form->isSubmitted() && $form->isValid()) {
  281.             if (!$this->isGranted('ROLE_CHANCELLOR') && $this->getUser()->getId() != $point->getPointUser()->getId()) {
  282.                 if ($point->getPointStatus() != "Ouvert" || $point->getPointStatus() != 'Incomplet') {
  283.                     $this->addFlash('error''error.point_status_not_autorized');
  284.                     return $this->redirectToRoute('meeting_index');
  285.                 }
  286.             }
  287.             $entityManager $this->getDoctrine()->getManager();
  288.             foreach ($point->getPointContact() as $key => $value) {
  289.                 $contact $pointContactRepository->findOneBy(array('email' => $value->getEmail()));
  290.                 if ($contact) {
  291.                     $point->removePointContact($value);
  292.                     $point->addPointContact($contact);
  293.                 }
  294.             }
  295.             if ($point->getPointDomain() == null) {
  296.                 $point->setPointDomain($oldPoint->getPointDomain());
  297.             }
  298.             if ($point->getPointService() == null) {
  299.                 $point->setPointService($oldPoint->getPointService());
  300.             }
  301.             $entityManager->flush();
  302.             return $this->redirectToRoute('point_index');
  303.         }
  304.         $contactList = [];
  305.         if ($point->getPointGroup()) {
  306.             if (!empty($point->getPointGroup()->getGroupContact()->toArray())) {
  307.                 foreach ($point->getPointGroup()->getGroupContact() as $contact) {
  308.                     $contactList['group'][$contact->getId()] = $contact->getEmail();
  309.                 }
  310.             }
  311.         }
  312.         if (!empty($point->getPointContact()->toArray())) {
  313.             foreach ($point->getPointContact() as $contact) {
  314.                 $contactList['pointList'][$contact->getId()] = $contact->getEmail();
  315.             }
  316.         }
  317.         $contacts $groupContactRepository->findAll();
  318.         $array $dataProvider->getUserDomainsAndServices($this->getUser());
  319.         $domains =  new ArrayCollection($array['domains']);
  320.         $services = new ArrayCollection($array['services']);
  321.         if (!($domains->contains($point->getPointDomain()))) {
  322.             $domains->add($point->getPointDomain());
  323.         }
  324.         if (!($services->contains($point->getPointService()))) {
  325.             $services->add($point->getPointService());
  326.         }
  327.         $result = [];
  328.         $result['domains'] = json_decode($serializer->serialize($domains'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''shortName']]));
  329.         $result['services'] = json_decode($serializer->serialize($services'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''serviceDomain' => ['id']]]));
  330.         $result['domain'] = json_decode($serializer->serialize($point->getPointDomain(), 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''shortName']]));
  331.         $result['service'] = json_decode($serializer->serialize($point->getPointService(), 'json', [AbstractNormalizer::ATTRIBUTES  => ['id''name''serviceDomain' => ['id']]]));
  332.         $meetingList $meetingRepository->findLastMeetingByPP($point->getProcessedPoints());
  333.         $meeting null;
  334.         if (!empty($meetingList)) {
  335.             $meeting $meetingList[0];
  336.         }
  337.         $meetingNumber = [];
  338.         foreach ($meetingList as $key => $value) {
  339.             $date Carbon::createFromDate($value->getDate()->format('Y-m-d'));
  340.             $meetingNumber[$value->getId()] =array_search($value,$meetingRepository->findByNumber($date->startOfYear()->format('Y-m-d'), $date->endOfYear()->format('Y-m-d')))+1;
  341.         }
  342.         return $this->render('point/edit.html.twig', [
  343.             'point' => $point,
  344.             'props' => $result,
  345.             'props_notice' => json_decode($serializer->serialize($point'json', [AbstractNormalizer::ATTRIBUTES  => ['priorNotice''priorNoticeReason']]), true),
  346.             'contacts' => $contacts,
  347.             'contactList' => $contactList,
  348.             'files' => $files,
  349.             'form' => $form->createView(),
  350.             'formFile' => $formFile->createView(),
  351.             'processedPoint' => $processedPointRepository->findByProcessedPointPoint($point, array('processedPointMeeting' => 'ASC')),
  352.             'allNotes' => $personalNotesRepository->findPersonalNotes($this->getUser(), $point),
  353.             'meeting' => $meeting,
  354.             'meetingList' => $meetingList,
  355.             'number' => $meetingNumber,
  356.         ]);
  357.     }
  358.     /**
  359.      * @Route("/{id}/getNote/{meeting}", name="point_get_note", methods={"GET", "POST"})
  360.      */
  361.     public function getNote(Point $pointMeeting $meetingPersonalNotesRepository $personalNotesRepository): Response
  362.     {
  363.         $note $personalNotesRepository->findOneBy(['notePoint' => $point'noteMeeting' => $meeting'noteUser' => $this->getUser()]);
  364.         if ($note == null) {
  365.             $note '';
  366.         }else{
  367.             $note $note->getNote();
  368.         }
  369.         return $this->json($note);
  370.     }
  371.     /**
  372.      * @Route("/{id}/editNote/{meeting}", name="point_edit_note", methods={"GET", "POST"})
  373.      */
  374.     public function editNote(Point $pointMeeting $meetingRequest $requestPersonalNotesRepository $personalNotesRepository): Response
  375.     {
  376.         $user $this->getUser();
  377.         $entityManager $this->getDoctrine()->getManager();
  378.         $noteExist $personalNotesRepository->findOneBy(['notePoint' => $point'noteMeeting' => $meeting'noteUser' => $user]);
  379.         $note json_decode($request->getContent(), true)['note'];
  380.         if ($noteExist == null) {
  381.             $newNote = new PersonalNotes();
  382.             $newNote->setNote($note);
  383.             $newNote->setNoteMeeting($meeting);
  384.             $newNote->setNotePoint($point);
  385.             $newNote->setNoteUser($user);
  386.             $entityManager->persist($newNote);
  387.         }else{
  388.             $noteExist->setNote($note);
  389.         }
  390.         $entityManager->flush();
  391.         return new Response();
  392.     }
  393.     /**
  394.      * @Route("/{id}/remove/{pointFile}", name="point_remove_file", methods={"DELETE"})
  395.      */
  396.     public function removeFile(Request $requestPoint $pointPointFile $pointFile): Response
  397.     {
  398.         if ($this->isCsrfTokenValid('delete' $point->getId(), $request->request->get('_token'))) {
  399.             $entityManager $this->getDoctrine()->getManager();
  400.             $entityManager->remove($pointFile);
  401.             $entityManager->flush();
  402.         }
  403.         return $this->redirectToRoute('point_edit', array('id' => $point->getId()));
  404.     }
  405.     /**
  406.      * @Route("/{id}", name="point_delete", methods={"DELETE"})
  407.      */
  408.     public function delete(Request $requestPoint $point): Response
  409.     {
  410.         if ($this->isCsrfTokenValid('delete' $point->getId(), $request->request->get('_token'))) {
  411.             $entityManager $this->getDoctrine()->getManager();
  412.             $entityManager->remove($point);
  413.             $entityManager->flush();
  414.         }
  415.         return $this->redirectToRoute('point_index');
  416.     }
  417.     /**
  418.      * @Route("/{id}/editLivePoint/{meeting}", name="point_edit_live_point", methods={"GET", "POST"})
  419.      */
  420.     public function editLivePoint(Request $requestPoint $pointMeeting $meetingPointFileRepository $pointFileRepositoryProcessedPointRepository $processedPointRepositoryPersonalNotesRepository $personalNotesRepositoryPeriodRepository $periodRepositoryPeriodManager $periodManagerGroupContactRepository $groupContactRepository): Response
  421.     {
  422.         $files $pointFileRepository->findByFilePoint(array($point));
  423.         $form $this->createForm(PointLiveType::class, $point);
  424.         if (!$this->isGranted('ROLE_CHANCELLOR')) {
  425.             $form->remove('pointStatus');
  426.         }
  427.         $contactList = [];
  428.         if ($point->getPointGroup()) {
  429.             if (!empty($point->getPointGroup()->getGroupContact()->toArray())) {
  430.                 foreach ($point->getPointGroup()->getGroupContact() as $contact) {
  431.                     $contactList['group'][$contact->getId()] = $contact->getEmail();
  432.                 }
  433.             }
  434.         }
  435.         if (!empty($point->getPointContact()->toArray())) {
  436.             foreach ($point->getPointContact() as $contact) {
  437.                 $contactList['pointList'][$contact->getId()] = $contact->getEmail();
  438.             }
  439.         }
  440.         $contacts $groupContactRepository->findAll();
  441.         $personalNote $personalNotesRepository->findOneBy(array('noteUser' => $this->getUser(), 'noteMeeting' => $meeting'notePoint' => $point));
  442.         $processedPoint $processedPointRepository->findOneBy(array('processedPointMeeting' => $meeting'processedPointPoint' => $point));
  443.         $allNotes $personalNotesRepository->findByNotInMeeting($this->getUser(), $meeting$point);
  444.         $allCommDiscu $processedPointRepository->findByNotInMeeting($meeting$point);
  445.         $note null;
  446.         if ($personalNote) {
  447.             $note $personalNote->getNote();
  448.         }
  449.         $communication $processedPoint->getCommunication();
  450.         $discussions $processedPoint->getDiscussions();
  451.         $validationGroup $request->get('validation') != null false true;
  452.         $form $this->createForm(PointLiveType::class, $point, ['personalNote' => $note'communication' => $communication'discussions' => $discussions'validation_groups' => $validationGroup]);
  453.         if (!$this->isGranted('ROLE_CHANCELLOR') || $meeting->getStatus() != 'IN_PROGRESS') {
  454.             $form->remove('pointStatus');
  455.             $form->remove('tagAdvisor');
  456.             $form->remove('tagResponsible');
  457.         }
  458.         $form->handleRequest($request);
  459.         if ($form->isSubmitted() && $form->isValid()) {
  460.             $entityManager $this->getDoctrine()->getManager();
  461.             if ($form->get('communication')->getData()) {
  462.                 $processedPoint->setCommunication($form->get('communication')->getData());
  463.             }
  464.             if ($form->get('discussions')->getData()) {
  465.                 $processedPoint->setDiscussions($form->get('discussions')->getData());
  466.             }
  467.             if (!$personalNote) {
  468.                 $note = new PersonalNotes();
  469.                 $note->setNotePoint($point);
  470.                 $note->setNoteMeeting($meeting);
  471.                 $note->setNoteUser($this->getUser());
  472.                 if ($form->get('personalNotes')->getData()) {
  473.                     $note->setNote($form->get('personalNotes')->getData());
  474.                 }else{
  475.                     $note->setNote("");
  476.                 }
  477.                 $entityManager->persist($note);
  478.             } else {
  479.                 if ($form->get('personalNotes')->getData()) {
  480.                     $personalNote->setNote($form->get('personalNotes')->getData());
  481.                 }
  482.             }
  483.             $processedPoint->setProcessedPointStatus($point->getPointStatus());
  484.             $entityManager->flush();
  485.             return $this->redirectToRoute('meeting_live', ['id' => $meeting->getId(), 'selectedPoint' => $point->getId()]);
  486.         }
  487.         $currrentPeriod $processedPoint->getProcessedPointPeriod()->last();
  488.         $previousPeriods = [];
  489.         $previousPoint null;
  490.         if ($request->cookies->get('previousPoint') && $request->cookies->get('previousPoint') != $point->getId()) {
  491.             $previousPoint $request->cookies->get('previousPoint');
  492.             $previousPeriods $periodRepository->findByStartAndEnd($previousPoint$meeting);
  493.         }
  494.         if ($this->isGranted('ROLE_CHANCELLOR') && $meeting->getStatus() == 'IN_PROGRESS' && $request->cookies->get('previousPoint') != $point->getId()) {
  495.             // Update current time cache for the current selected live point
  496.             if (!empty($previousPeriods)) {
  497.                 $previousProcessedPoint $processedPointRepository->findOneBy(array('processedPointMeeting' => $meeting'processedPointPoint' => $previousPoint));
  498.                 foreach ($previousPeriods as $period) {
  499.                     $period->setEndTime(Carbon::now());
  500.                     $periodManager->updateTimeCache($previousProcessedPointCarbon::now()->DiffInSeconds($period->getStartTime()));
  501.                 }
  502.                 $previousProcessedPoint->setIsActive(false);
  503.                 $response = new Response();
  504.                 $response->headers->clearCookie('previousPoint');
  505.                 $response->sendHeaders();
  506.             }else{
  507.                 if ($currrentPeriod) {
  508.                     $periodManager->updateTimeCache($processedPointCarbon::now()->DiffInSeconds($currrentPeriod->getStartTime()));
  509.                 }
  510.             }
  511.             // Close every other period
  512.             foreach ($periodRepository->findByEndTime(null) as $period) {
  513.                 $period->setEndTime(Carbon::now());
  514.                 $periodManager->updateTimeCache($period->getProcessedPoints(), Carbon::now()->DiffInSeconds($period->getStartTime()));
  515.             }
  516.             // Start a new period and persist all changes into database
  517.             if (!$currrentPeriod || $currrentPeriod->getEndTime()) {
  518.                 $response = new Response();
  519.                 $response->headers->setCookie(Cookie::create('previousPoint'$point->getId()));
  520.                 $response->sendHeaders();
  521.                 $entityManager $this->getDoctrine()->getManager();
  522.                 $period = new Period();
  523.                 $period->setStartTime(Carbon::now());
  524.                 $processedPoint->setIsActive(true);
  525.                 $period->setProcessedPoints($processedPoint);
  526.                 $entityManager->persist($period);
  527.                 $entityManager->flush();
  528.             }
  529.         }
  530.         return $this->render('point/edit_live.html.twig', [
  531.             'form' => $form->createView(),
  532.             'point' => $point,
  533.             'files' => $files,
  534.             'allNotes' => $allNotes,
  535.             'allCommDiscu' => $allCommDiscu,
  536.             'meeting' => $meeting,
  537.             'contacts' => $contacts,
  538.             'contactList' => $contactList,
  539.         ]);
  540.     }
  541.         /**
  542.      * @Route("/{id}/addContactPoint/{contact}", name="point_add_contact_point", methods={"GET", "POST"})
  543.      */
  544.     public function addContactPoint(Point $pointstring $contactGroupContactRepository $groupContactRepository): Response
  545.     {
  546.         $entityManager $this->getDoctrine()->getManager();
  547.         $contactExist $groupContactRepository->findOneBy(array('email' => $contact));
  548.         if ($contactExist == null) {
  549.             $newContact = new GroupContact();
  550.             $newContact->setEmail($contact);
  551.             // $newContact->addPoint($point);
  552.             $entityManager->persist($newContact);
  553.             $point->addPointContact($newContact);
  554.         }else{
  555.             $point->addPointContact($groupContactRepository->findOneBy(array('email' => $contact)));
  556.         }
  557.         foreach ($point->getPointContact() as $key => $value) {
  558.             $contact $groupContactRepository->findOneBy(array('email' => $value->getEmail()));
  559.             if ($contact) {
  560.                 $point->removePointContact($value);
  561.                 $point->addPointContact($contact);
  562.             }
  563.         }
  564.         $entityManager->flush();
  565.         $contacts = [];
  566.         if (!empty($point->getPointContact()->toArray())) {
  567.             foreach ($point->getPointContact() as $contact) {
  568.                 $contacts['pointList'][$contact->getId()] = $contact->getEmail();
  569.             }
  570.         }
  571.         return $this->render('point/_contact_list_point.html.twig', [
  572.             'contactList'=> $contacts,
  573.             'contact' => $contact,
  574.             'point' => $point,
  575.             'meetingList' => false,
  576.         ]);
  577.     }
  578.     /**
  579.      * @Route("/{id}/addContact/{contact}/{meeting}", name="point_add_contact", methods={"GET", "POST"})
  580.      */
  581.     public function addContact(Point $pointstring $contactMeeting $meetingGroupContactRepository $groupContactRepository): Response
  582.     {
  583.         $entityManager $this->getDoctrine()->getManager();
  584.         $contactExist $groupContactRepository->findOneBy(array('email' => $contact));
  585.         if ($contactExist == null) {
  586.             $newContact = new GroupContact();
  587.             $newContact->setEmail($contact);
  588.             $entityManager->persist($newContact);
  589.             $point->addPointContact($newContact);
  590.         }else{
  591.             $point->addPointContact($groupContactRepository->findOneBy(array('email' => $contact)));
  592.         }
  593.         foreach ($point->getPointContact() as $key => $value) {
  594.             $contact $groupContactRepository->findOneBy(array('email' => $value->getEmail()));
  595.             if ($contact) {
  596.                 $point->removePointContact($value);
  597.                 $point->addPointContact($contact);
  598.             }
  599.         }
  600.         $entityManager->flush();
  601.         $contacts = [];
  602.         if (!empty($point->getPointContact()->toArray())) {
  603.             foreach ($point->getPointContact() as $contact) {
  604.                 $contacts['pointList'][$contact->getId()] = $contact->getEmail();
  605.             }
  606.         }
  607.         return $this->render('point/_contact_list.html.twig', [
  608.             'contactList'=> $contacts,
  609.             'contact' => $contact,
  610.             'meeting' => $meeting,
  611.             'point' => $point,
  612.         ]);
  613.     }
  614.     /**
  615.      * @Route("/{id}/removeContact/{contact}", name="point_remove_contact", methods={"GET", "POST"})
  616.      */
  617.     public function removeContact(Point $pointGroupContact $contact): Response
  618.     {
  619.         $entityManager $this->getDoctrine()->getManager();
  620.         $point->removePointContact($contact);
  621.         $entityManager->flush();
  622.         $contacts = [];
  623.         if (!empty($point->getPointContact()->toArray())) {
  624.             foreach ($point->getPointContact() as $contact) {
  625.                 $contacts['pointList'][$contact->getId()] = $contact->getEmail();
  626.             }
  627.         }
  628.         return new JsonResponse('OK');
  629.     }
  630.     /**
  631.      * @Route("/search/autocomplete", name="point_search_autocomplete", methods={"GET", "POST"})
  632.      */
  633.     public function autocomplete(Request $requestPointRepository $pointRepositoryDataProvider $dataProvider): Response
  634.     {
  635.         $search $request->query->get('search');
  636.         $pointsNotInMeeting null;
  637.         if ($search === null) {
  638.             $pointsNotInMeeting $pointRepository->findPointNotInOpenMeeting();
  639.         }else{
  640.             $pointsNotInMeeting $pointRepository->findPointNotInOpenMeeting($search);
  641.         }
  642.     
  643.         $user $this->getUser();
  644.         $isChancellorOrAdvisor $this->isGranted('ROLE_CHANCELLOR') || $this->isGranted('ROLE_ADVISOR');
  645.         $userServices $user->getUserService();
  646.         $userServiceArray $userServices $userServices->toArray() : [];
  647.         $userReferentDomains $user->getUserReferentDomain();
  648.         $userReferentDomainArray $userReferentDomains $userReferentDomains->toArray() : [];
  649.         $userPoints $dataProvider->getUserPoints($user);
  650.         
  651.         $pointCanAdd = [];
  652.         foreach ($pointsNotInMeeting as $value) {
  653.             if ($isChancellorOrAdvisor || $userServices == null || in_array($value->getPointService(), $userServiceArray) || $userReferentDomains == null || in_array($value->getPointDomain(), $userReferentDomainArray)) {
  654.                 if (in_array($value$userPoints)) {
  655.                     $pointCanAdd[] = $value;
  656.                 }
  657.             }
  658.         }
  659.         return $this->Json($pointCanAdd200, [], ['groups' => 'searchPoints']);
  660.     }
  661. }