src/Controller/Front/AccommodationController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Controller\AppController;
  4. use App\Entity\Accommodation;
  5. use App\Entity\AccommodationRoom;
  6. use App\Entity\Page;
  7. use App\Entity\UserInfo;
  8. use App\Form\Front\UserInfoType;
  9. use App\Repository\AccommodationRepository;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. /**
  14.  * @Route("colocation", name="front_accommodation_")
  15.  */
  16. class AccommodationController extends AppController
  17. {
  18.     /**
  19.      * @Route("/{id}", name="single")
  20.      */
  21.     public function index(
  22.         Request $request,
  23.         Accommodation $accommodation
  24.     ){
  25.         if($accommodation->getDisabled()) {
  26.             return $this->redirectToRoute("front_search_index");
  27.         }
  28.         $page = new Page();
  29.         $page->setMetaTitle($accommodation->getName());
  30.         $version $request->query->get('version'"4");
  31.         switch($version) {
  32.             case "1":
  33.             case "2":
  34.             case "3":
  35.             case "4":
  36.                 $pageVersion 'accommodation-' $version;
  37.                 break;
  38.         }
  39.         return $this->render('front/accommodation/' $pageVersion '.html.twig', [
  40.             'page' => $page,
  41.             'accommodation' => $accommodation,
  42.         ]);
  43.     }
  44.     /**
  45.      * @Route("/autocomplete", priority=10, name="autocomplete", methods={"GET"})
  46.      */
  47.     public function autocomplete(Request $requestAccommodationRepository $accommodationRepository)
  48.     {
  49.         $results $accommodationRepository->searchAccommodations(["text" => $request->query->get('term')]);
  50.         $json = [
  51.             "results" => []
  52.         ];
  53.         foreach($results as $accommodation){
  54.             $json["results"][] = [
  55.                 "id" => $accommodation->getId(),
  56.                 "text" => $accommodation->getName(),
  57.             ];
  58.         }
  59.         return new JsonResponse($json);
  60.     }
  61.     /**
  62.      * AJAX Login Form
  63.      * @Route("/{id}/modal-waiting-list", priority=10, name="modal_waiting_list", methods={"GET"})
  64.      */
  65.     public function modalWaitingList(Request $requestAccommodationRoom $room)
  66.     {
  67.         $user = new UserInfo();
  68.         $form $this->createForm(UserInfoType::class, $user);
  69.         return $this->json([
  70.             'content' => $this->render(
  71.                 "front/modals/waiting-list.html.twig",
  72.                 [
  73.                     "form" => $form->createView(),
  74.                     "room" => $room,
  75.                 ]
  76.             )->getContent(),
  77.         ]);
  78.     }
  79.     /**
  80.      * AJAX Waiting List
  81.      * @Route("/{id}/waiting-list", priority=10, name="add_waiting_list", methods={"post"})
  82.      */
  83.     public function addToWaitingList(Request $requestAccommodationRoom $room)
  84.     {
  85.         $user = new UserInfo();
  86.         $form $this->createForm(UserInfoType::class, $user);
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             $user->setToken(md5(random_bytes(10)));
  90.             $room->addWaitingListUser($user);
  91.             $this->em->persist($room);
  92.             $this->em->flush();
  93.             return $this->json([
  94.                 'result' => true,
  95.             ]);
  96.         }
  97.         return $this->json([
  98.             'result' => false,
  99.             'form' => $this->render('front/modals/waiting-list.html.twig', [
  100.                 "form" => $form->createView()])->getContent(),
  101.                 "room" => $room,
  102.             ], 500);
  103.     }
  104.     /**
  105.      * Unregister from the waiting list
  106.      * @Route("/{id}/waiting-list/unregister", priority=10, name="remove_waiting_list", methods={"get"})
  107.      */
  108.     public function removeFromWaitingList(Request $requestUserInfo $userInfo)
  109.     {
  110.         $token $request->query->get('token');
  111.         if(empty($userInfo->getToken()) || $userInfo->getToken() === $token) {
  112.             $this->em->remove($userInfo);
  113.             $this->em->flush();
  114.         }
  115.         $page = new Page();
  116.         return $this->render('front/accommodation/waiting-list-unregister.html.twig', [
  117.             'page' => $page,
  118.         ]);
  119.     }
  120. }