<?php
namespace App\Controller\Espacepros;
use App\Data\SearchhotelsData;
use App\Entity\Hotels\Annonceshotels;
use App\Entity\Hotels\Hotels;
use App\Form\Hotels\SearchFormHotelsType;
use App\Repository\Hotels\HotelsRepository;
use App\Repository\Posts\PostsRepository;
use Knp\Component\Pager\PaginatorInterface;
use MercurySeries\FlashyBundle\FlashyNotifier;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/sejourner/hotels")
*/
class HotelsController extends AbstractController
{
/**
* @var FlashyNotifier
*/
private $flashy;
/**
* @var HotelsRepository
*/
private $hotelsRepository;
/**
* @var PostsRepository
*/
private $postsRepository;
public function __construct(HotelsRepository $hotelsRepository, PostsRepository $postsRepository, FlashyNotifier $flashy)
{
$this->hotelsRepository = $hotelsRepository;
$this->flashy = $flashy;
$this->postsRepository = $postsRepository;
}
/**
* @Route("/", name="hotels.index")
* @param Request $request
* @param PaginatorInterface $paginator
* @return Response
*/
public function index(Request $request, PaginatorInterface $paginator)
{
$data = new SearchhotelsData();
$data->page = $request->get('page', 1);
$formsearch = $this->createForm(SearchFormHotelsType::class, $data);
$formsearch->handleRequest($request);
$hotels = $this->hotelsRepository->findSearch($data);
if ($request->get('ajax')) {
return new JsonResponse([
'content' => $this->renderView('pages/espacepro/hotels/partials/__card.html.twig', ['hotels' => $hotels]),
'sorting' => $this->renderView('pages/espacepro/hotels/partials/__sorting.html.twig', ['hotels' => $hotels]),
'pagination' => $this->renderView('pages/espacepro/hotels/partials/__pagination.html.twig', ['hotels' => $hotels]),
]);
}
$posts = $paginator->paginate(
$this->postsRepository->findBy(['categories' => 1, 'online' => true], ['id' => 'DESC']), /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
$request->query->getInt('limit', 12)/*limit per page*/
);
$min = [];
$minPrice = [];
foreach ($hotels as $hotel){
foreach ($hotel->getAnnonceshotels() as $annonceshotel){
$min[$annonceshotel->getId()] = $annonceshotel->getPrice();
$minPrice[$hotel->getId()] = min($min );
}
}
//$hotels = $this->hotelsRepository->findHotelsByActivated($request->query->getInt('page', 1));
return $this->render('pages/espacepro/hotels/index.html.twig', [
'title' => 'Hôtels à reserver',
'hotels' => $hotels,
'minPrice' => $minPrice,
'posts' => $posts,
'formsearch' => $formsearch->createView(),
'menu' => "Séjourner",
'current_page' => 'sejourner'
]);
}
/**
* @Route("/details/{slug}/{id}", name="hotels.show")
* @param Request $request
* @param $slug
* @param Hotels $hotels
* @param PaginatorInterface $paginator
* @return Response
*/
public function show(Request $request, $slug, Hotels $hotels, PaginatorInterface $paginator)
{
if ($hotels->getSlug() !== $slug) {
return $this->redirectToRoute('hotels.show', [
'id' => $hotels->getId(),
'slug' => $hotels->getSlug(),
], 301);
}
$othersHotels = $this->hotelsRepository->getHotelRandom($hotels, 3);
$chambres = $paginator->paginate(
$this->getDoctrine()->getRepository(Annonceshotels::class)->findBy(['hotels' => $hotels->getId(), 'online' => true]), /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
$request->query->getInt('limit', 12)/*limit per page*/
);
return $this->render('pages/espacepro/hotels/show.html.twig', [
'title' => $hotels->getName(),
'hotel' => $hotels,
'chambres' => $chambres,
'othersHotels' => $othersHotels,
'menu' => "Séjourner",
'current_page' => 'sejourner'
]);
}
}