src/Controller/PublicController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Lot;
  4. use App\Entity\Proposition;
  5. use App\Entity\Prospect;
  6. use App\Repository\HistoriqueRepository;
  7. use App\Repository\LotRepository;
  8. use App\Repository\UtilisateurRepository;
  9. use App\Service\Notification;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\Filesystem\Filesystem;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpFoundation\File\File;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\Validator\Constraints\Length;
  18. use Symfony\Component\HttpFoundation\Session\Session;
  19. use Symfony\Component\Validator\Constraints\NotBlank;
  20. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  21. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  22. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use App\Service\VisiteManager;
  25. class PublicController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/", name="public_index")
  29.      */
  30.     public function index(): Response
  31.     {
  32.         return $this->redirectToRoute('login_index');
  33.     }
  34.     /**
  35.      * @Route("/p/test/{lot}", name="public_page_test_short")
  36.      * @Route("/public/test/{lot}", name="public_page_test_prospect")
  37.      */
  38.     public function pageTestProspect(Request $requestHistoriqueRepository $historiqueRepoLot $lot): Response
  39.     {
  40.         $prospect = new Prospect();
  41.         $proposition = new Proposition();
  42.         $proposition->setProspect($prospect);
  43.         $proposition->setLot($lot);
  44.         $propositions[] = $proposition;
  45.         $request->getSession()->set('propositions'$propositions);
  46.         $recap $request->query->getBoolean('recap'false);
  47.         $interlocuteur null;
  48.         return $this->render('public/index.html.twig', [
  49.             'propositions' => $propositions,
  50.             'prospect' => $prospect,
  51.             'recap' => $recap,
  52.             'interlocuteur' => $interlocuteur
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/p/{token}", name="public_prospect_short")
  57.      * @Route("/public/{token}", name="public_prospect")
  58.      */
  59.     public function prospect(?Prospect $prospectRequest $requestEntityManagerInterface $entityManagerHistoriqueRepository $historiqueRepoLotRepository $lotRepositoryVisiteManager $visiteManagerUtilisateurRepository $utilisateurRepositoryNotification $serviceNotification): Response
  60.     {
  61.         $session = new Session();
  62.         $session->set('propositions'$request->getSession()->get('propositions'));
  63.         $session->start();
  64.         // set and get session attributes
  65.         $interlocuteur null;
  66.         $recap $request->query->getBoolean('recap'false);
  67.         if($prospect == null){
  68.             if($session->get('propositions') == null){
  69.                 return $this->redirectToRoute('login_index');
  70.             }
  71.             $propositions $session->get('propositions');
  72.             $lot $lotRepository->find($propositions[0]->getLot());
  73.             $propositions[0]->setLot($lot);
  74.             $prospect $propositions[0]->getProspect();
  75.             $session->set('token'$propositions[0]->getProspect()->getToken());
  76.         } else {
  77.             $propositions array_values($prospect->getActivePropositions()->toArray());
  78.             $session->set('token'$prospect->getToken());
  79.             if($prospect->getId() != null){
  80.                 if($prospect->getAuteur() != null){
  81.                     $interlocuteur $prospect->getAuteur();
  82.                 }
  83.             }
  84.             
  85.             $mode $request->query->get("mode");
  86.             
  87.             if(!$mode && !$this->getUser() && $recap){
  88.                 $historiques $prospect->getHistoriques();
  89.                 if($historiques->count()){
  90.                     $visiteManager->addVisite($historiques->last());
  91.                 }
  92.             }
  93.         }
  94.         return $this->render('public/index.html.twig', [
  95.             'propositions' => $propositions,
  96.             'prospect' => $prospect,
  97.             'recap' => $recap,
  98.             'interlocuteur' => $interlocuteur
  99.         ]);
  100.     }
  101.     /**
  102.      * @Route("/public/{token}/lot", name="public_lot")
  103.      */
  104.     public function lot(?Prospect $prospectRequest $requestLotRepository $lotRepoHistoriqueRepository $historiqueRepoVisiteManager $visiteManagerNotification $serviceNotificationUtilisateurRepository $utilisateurRepository): Response
  105.     {
  106.         $lot $lotRepo->find($request->query->getInt('id'0));
  107.         $lot->getPlan();
  108.         $programmePjs = []; // $lot->getProgrammeParent()->getPjs();
  109.         $attachments $lot->getPjs();
  110.         foreach ($attachments as $attachment) {
  111.             if (null === $attachment->getFilename()) {
  112.                 $lot->removePj($attachment);
  113.             }
  114.         }
  115.         $session $request->getSession();
  116.         $propositions $session->get('propositions');
  117.         
  118.         if($prospect == null){
  119.             if($request->getSession()->get('propositions') == null){
  120.                 return $this->redirectToRoute('login_index');
  121.             }
  122.             $prospect $request->getSession()->get('propositions')[0]->getProspect();
  123.             $propositions $request->getSession()->get('propositions');
  124.         }
  125.         if(empty($propositions)){
  126.             $propositions array_values($prospect->getActivePropositions()->toArray());
  127.         }
  128.         $request->getSession()->set('token'$prospect->getToken());
  129.         $interlocuteur null;
  130.         if($prospect->getId() != null){
  131.             if($prospect->getAuteur() != null){
  132.                 $interlocuteur $prospect->getAuteur();
  133.             }
  134.         }
  135.         if($prospect->getId() != null) {
  136.             if (!$lot || !$prospect->lotIsProposed($lot->getId())) {
  137.                 return $this->redirectToRoute('public_prospect', [
  138.                     'token' => $prospect->getToken(),
  139.                     'interlocuteur' => $interlocuteur
  140.                 ]);
  141.             }
  142.         }
  143.         if(!$this->getUser()){
  144.             if ((string)$session->get('lot_email_envoye') != $prospect->getToken() && !is_null($prospect) && !is_null($prospect->getAuteur())) {
  145.                 $lastHistorique $prospect->getHistoriques()->last();
  146.                 $serviceNotification->alertVisite($prospect$utilisateurRepository$prospect->getAuteur()->getEmail(), $lastHistorique);
  147.                 $session->set('lot_email_envoye'$prospect->getToken());
  148.             }
  149.             $historiques $prospect->getHistoriques();
  150.             if($historiques->count()){
  151.                 $visiteManager->addVisite($historiques->last());
  152.             }
  153.         }
  154.         return $this->render('public/lot.html.twig', [
  155.             'lot' => $lot,
  156.             'propositions' => $propositions,
  157.             'prospect' => $prospect,
  158.             'interlocuteur' => $interlocuteur,
  159.             'programmePjs' => $programmePjs,
  160.         ]);
  161.     }
  162. }