<?php
declare(strict_types=1);
namespace App\Controller;
use App\Repository\CommuneRepository;
use App\Repository\StructureRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Ajax controller.
*/
#[Route(path: '/ajax')]
class AjaxController extends AbstractController
{
/**
* autocomplete commune action. search in commune.
*/
#[Route(path: '/commune/autocomplete', name: 'autocomplete_commune', options: ['expose' => true])]
public function autoCompleteCommune(CommuneRepository $rep, Request $request): Response
{
$return = [];
$items = [];
$q = $request->query->get('q');
$pageSize = $request->query->get('page_limit');
$page = $request->query->has('page') ? $request->query->get('page') : '1';
$query = $rep->search($q)
->setFirstResult($pageSize * ($page - 1))
->setMaxResults($pageSize)
;
$entities = $query->execute();
foreach ($entities as $entity) {
$label = ''.$entity->__toString();
$items[] = ['id' => $entity->getId(), 'text' => $label, 'label' => $label];
}
$return['results'] = $items;
$return['more'] = true;
$return['length'] = count($entities);
$return['items'] = $items;
return new Response(json_encode($return), [] !== $return ? 200 : 404);
}
/**
* autocomplete structure action. search in structure.
*/
#[Route(path: '/structure/autocomplete', name: 'autocomplete_structure', options: ['expose' => true])]
public function autoCompleteStructure(StructureRepository $rep, Request $request): Response
{
$return = [];
$items = [];
$q = $request->query->get('q');
$pageSize = $request->query->get('page_limit');
$page = $request->query->has('page') ? $request->query->get('page') : '1';
$query = $rep->search($q)
->setFirstResult($pageSize * ($page - 1))
->setMaxResults($pageSize)
;
$entities = $query->execute();
foreach ($entities as $entity) {
$label = ''.$entity->__toString();
$items[] = ['id' => $entity->getId(), 'text' => $label, 'label' => $label];
}
$return['results'] = $items;
$return['more'] = true;
$return['length'] = count($entities);
$return['items'] = $items;
return new Response(json_encode($return), [] !== $return ? 200 : 404);
}
/**
* routing ta stay session open.
*/
#[Route(path: '/no-expire-sessions', name: 'no-expire-sessions', options: ['expose' => true])]
public function noExpireSessions(Request $request): Response
{
$request->getSession();
$return = $this->getUser();
return new Response(json_encode($return), $return ? 200 : 404);
}
}