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'"1");
  31.         switch($version) {
  32.             case "1":
  33.             case "2":
  34.             case "3":
  35.                 $pageVersion 'accommodation-' $version;
  36.                 break;
  37.         }
  38.         return $this->render('front/accommodation/' $pageVersion '.html.twig', [
  39.             'page' => $page,
  40.             'accommodation' => $accommodation,
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/autocomplete", priority=10, name="autocomplete", methods={"GET"})
  45.      */
  46.     public function autocomplete(Request $requestAccommodationRepository $accommodationRepository)
  47.     {
  48.         $results $accommodationRepository->searchAccommodations(["text" => $request->query->get('term')]);
  49.         $json = [
  50.             "results" => []
  51.         ];
  52.         foreach($results as $accommodation){
  53.             $json["results"][] = [
  54.                 "id" => $accommodation->getId(),
  55.                 "text" => $accommodation->getName(),
  56.             ];
  57.         }
  58.         return new JsonResponse($json);
  59.     }
  60.     /**
  61.      * AJAX Login Form
  62.      * @Route("/{id}/modal-waiting-list", priority=10, name="modal_waiting_list", methods={"GET"})
  63.      */
  64.     public function modalWaitingList(Request $requestAccommodationRoom $room)
  65.     {
  66.         $user = new UserInfo();
  67.         $form $this->createForm(UserInfoType::class, $user);
  68.         return $this->json([
  69.             'content' => $this->render(
  70.                 "front/modals/waiting-list.html.twig",
  71.                 [
  72.                     "form" => $form->createView(),
  73.                     "room" => $room,
  74.                 ]
  75.             )->getContent(),
  76.         ]);
  77.     }
  78.     /**
  79.      * AJAX Waiting List
  80.      * @Route("/{id}/waiting-list", priority=10, name="add_waiting_list", methods={"post"})
  81.      */
  82.     public function addToWaitingList(Request $requestAccommodationRoom $room)
  83.     {
  84.         $user = new UserInfo();
  85.         $form $this->createForm(UserInfoType::class, $user);
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()) {
  88.             $user->setToken(md5(random_bytes(10)));
  89.             $room->addWaitingListUser($user);
  90.             $this->em->persist($room);
  91.             $this->em->flush();
  92.             return $this->json([
  93.                 'result' => true,
  94.             ]);
  95.         }
  96.         return $this->json([
  97.             'result' => false,
  98.             'form' => $this->render('front/modals/waiting-list.html.twig', [
  99.                 "form" => $form->createView()])->getContent(),
  100.                 "room" => $room,
  101.             ], 500);
  102.     }
  103.     /**
  104.      * Unregister from the waiting list
  105.      * @Route("/{id}/waiting-list/unregister", priority=10, name="remove_waiting_list", methods={"get"})
  106.      */
  107.     public function removeFromWaitingList(Request $requestUserInfo $userInfo)
  108.     {
  109.         $token $request->query->get('token');
  110.         if(empty($userInfo->getToken()) || $userInfo->getToken() === $token) {
  111.             $this->em->remove($userInfo);
  112.             $this->em->flush();
  113.         }
  114.         $page = new Page();
  115.         return $this->render('front/accommodation/waiting-list-unregister.html.twig', [
  116.             'page' => $page,
  117.         ]);
  118.     }
  119. }