<?php
namespace App\Controller;
use App\Controller\Helper\HelperController;
use App\Data\SearchItem;
use App\DataForm\SearchProfileForm;
use App\Event\BookingInitiatedEvent;
use App\Repository\Activities\BookingRepository;
use App\Repository\Auth\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class DefaultController extends HelperController
{
/**
* @Route("/", name="homepage")
* @param Request $request
* @param UserRepository $userRepository
* @param BookingRepository $bookingRepository
* @param AuthorizationCheckerInterface $checker
* @param EntityManagerInterface $manager
* @param EventDispatcherInterface $dispatcher
* @param LoggerInterface $logger
* @return Response
*/
public function index(Request $request,
UserRepository $userRepository,
BookingRepository $bookingRepository,
AuthorizationCheckerInterface $checker,
EntityManagerInterface $manager, EventDispatcherInterface $dispatcher,
LoggerInterface $logger)
{
if ($checker->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('admin_dashboard');
}
if ($checker->isGranted('ROLE_PARENT')) {
$user = $this->getUser();
if (!$user->isIsPasswordUpdated() && $user->getMatricule()) {
return $this->redirectToRoute('auth_password_update');
}
}
$data = new SearchItem();
$form = $this->createForm(SearchProfileForm::class, $data);
$form->handleRequest($request);
[$users, $page, $total] = $userRepository->findSearch($data, $request);
[$min, $max] = $userRepository->findMinMax($data);
if ($request->get('ajax')) {
$logger->info('Here come the ajax request Valeur min ' . $data->min);
return new JsonResponse([
'content' => $this->renderView('public/clients/_list.html.twig', ['users' => $users]),
'sorting' => $this->renderView('public/clients/_sorting.html.twig', [
'numbers' => $users->getTotalItemCount() < ($total * $page) ? $users->getTotalItemCount() : ($total * $page),
'total' => $users->getTotalItemCount(),
'pages' => ceil($users->getTotalItemCount() / $users->getItemNumberPerPage()),
'page' => $page,
'users' => $users
]),
'pagination' => $this->renderView('public/clients/_pagination.html.twig', [
'users' => $users,
'total' => $users->getTotalItemCount(),
]),
'page' => $page,
'pages' => ceil($users->getTotalItemCount() / $users->getItemNumberPerPage()),
'min' => $min,
'max' => $max,
'total' => $users->getTotalItemCount(),
'numbers' => $total
]);
}
if ($this->getUser() && $checker->isGranted('ROLE_PARENT')) {
$bookings = $bookingRepository->findBy([
'session' => $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'],
'parent' => null
]);
if (count($bookings) !== 0) {
foreach ($bookings as $booking) {
$booking->setParent($this->getUser())->setSession(null);
$dispatcher->dispatch(new BookingInitiatedEvent($booking));
}
$manager->flush();
}
}
return $this->render('public/home.html.twig', [
'users' => $users,
'form' => $form->createView(),
'min' => $min,
'max' => $max,
'total' => $users->getTotalItemCount(),
'numbers' => $total * $page,
'page' => $page,
'pages' => ceil($users->getTotalItemCount() / $users->getItemNumberPerPage())
]);
}
}