<?php
namespace App\Controller;
use App\Search\SearchManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="homepage")
*/
public function index(): Response
{
if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_ADMIN_ADV')) {
return $this->redirectToRoute('admin_dashboard');
}
if ($this->isGranted('ROLE_RETAILER')) {
return $this->redirectToRoute('retailer_dashboard');
}
return $this->redirectToRoute('app_login');
}
/**
* @Route("/switch-language/{locale}", name="switch_language"): Response
*/
public function switchLanguage(string $locale, Request $request, EntityManagerInterface $entityManager): Response
{
$request->getSession()->set('_locale', $locale);
if (null !== $this->getUser()) {
$this->getUser()->setLocale($locale);
$entityManager->flush();
}
return $this->redirect($request->headers->get('referer') ?? $request->query->get('from_page') ?? '/');
}
/**
* @Route("/search", name="search")
*/
public function search(Request $request, SearchManager $manager): Response
{
if (false === $this->isGranted('ROLE_ADMIN') && false === $this->isGranted('ROLE_RETAILER')) {
return $this->redirectToRoute('app_login');
}
if (null === ($searchTerm = $request->query->get('q'))) {
return $this->redirect($request->headers->get('referer') ?? $request->query->get('from_page') ?? '/');
}
$paginatedSearchResults = $manager->searchTerm($searchTerm, $request->query->all());
return $this->render('search/index.html.twig', [
'results' => $paginatedSearchResults->getPaginationContainer(),
'boundaries_info' => $paginatedSearchResults->getPaginationBoundaries(),
'info' => $paginatedSearchResults,
]);
}
}