<?php
namespace App\Controller\Front;
use App\Controller\AppController;
use App\Entity\Accommodation;
use App\Entity\AccommodationRoom;
use App\Entity\Page;
use App\Entity\UserInfo;
use App\Form\Front\UserInfoType;
use App\Repository\AccommodationRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("colocation", name="front_accommodation_")
*/
class AccommodationController extends AppController
{
/**
* @Route("/{id}", name="single")
*/
public function index(
Request $request,
Accommodation $accommodation
){
if($accommodation->getDisabled()) {
return $this->redirectToRoute("front_search_index");
}
$page = new Page();
$page->setMetaTitle($accommodation->getName());
$version = $request->query->get('version', "1");
switch($version) {
case "1":
case "2":
case "3":
$pageVersion = 'accommodation-' . $version;
break;
}
return $this->render('front/accommodation/' . $pageVersion . '.html.twig', [
'page' => $page,
'accommodation' => $accommodation,
]);
}
/**
* @Route("/autocomplete", priority=10, name="autocomplete", methods={"GET"})
*/
public function autocomplete(Request $request, AccommodationRepository $accommodationRepository)
{
$results = $accommodationRepository->searchAccommodations(["text" => $request->query->get('term')]);
$json = [
"results" => []
];
foreach($results as $accommodation){
$json["results"][] = [
"id" => $accommodation->getId(),
"text" => $accommodation->getName(),
];
}
return new JsonResponse($json);
}
/**
* AJAX Login Form
* @Route("/{id}/modal-waiting-list", priority=10, name="modal_waiting_list", methods={"GET"})
*/
public function modalWaitingList(Request $request, AccommodationRoom $room)
{
$user = new UserInfo();
$form = $this->createForm(UserInfoType::class, $user);
return $this->json([
'content' => $this->render(
"front/modals/waiting-list.html.twig",
[
"form" => $form->createView(),
"room" => $room,
]
)->getContent(),
]);
}
/**
* AJAX Waiting List
* @Route("/{id}/waiting-list", priority=10, name="add_waiting_list", methods={"post"})
*/
public function addToWaitingList(Request $request, AccommodationRoom $room)
{
$user = new UserInfo();
$form = $this->createForm(UserInfoType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setToken(md5(random_bytes(10)));
$room->addWaitingListUser($user);
$this->em->persist($room);
$this->em->flush();
return $this->json([
'result' => true,
]);
}
return $this->json([
'result' => false,
'form' => $this->render('front/modals/waiting-list.html.twig', [
"form" => $form->createView()])->getContent(),
"room" => $room,
], 500);
}
/**
* Unregister from the waiting list
* @Route("/{id}/waiting-list/unregister", priority=10, name="remove_waiting_list", methods={"get"})
*/
public function removeFromWaitingList(Request $request, UserInfo $userInfo)
{
$token = $request->query->get('token');
if(empty($userInfo->getToken()) || $userInfo->getToken() === $token) {
$this->em->remove($userInfo);
$this->em->flush();
}
$page = new Page();
return $this->render('front/accommodation/waiting-list-unregister.html.twig', [
'page' => $page,
]);
}
}