src/Controller/AjaxController.php line 88

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\Repository\CommuneRepository;
  5. use App\Repository\StructureRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. /**
  11. * Ajax controller.
  12. */
  13. #[Route(path: '/ajax')]
  14. class AjaxController extends AbstractController
  15. {
  16. /**
  17. * autocomplete commune action. search in commune.
  18. */
  19. #[Route(path: '/commune/autocomplete', name: 'autocomplete_commune', options: ['expose' => true])]
  20. public function autoCompleteCommune(CommuneRepository $rep, Request $request): Response
  21. {
  22. $return = [];
  23. $items = [];
  24. $q = $request->query->get('q');
  25. $pageSize = $request->query->get('page_limit');
  26. $page = $request->query->has('page') ? $request->query->get('page') : '1';
  27. $query = $rep->search($q)
  28. ->setFirstResult($pageSize * ($page - 1))
  29. ->setMaxResults($pageSize)
  30. ;
  31. $entities = $query->execute();
  32. foreach ($entities as $entity) {
  33. $label = ''.$entity->__toString();
  34. $items[] = ['id' => $entity->getId(), 'text' => $label, 'label' => $label];
  35. }
  36. $return['results'] = $items;
  37. $return['more'] = true;
  38. $return['length'] = count($entities);
  39. $return['items'] = $items;
  40. return new Response(json_encode($return), [] !== $return ? 200 : 404);
  41. }
  42. /**
  43. * autocomplete structure action. search in structure.
  44. */
  45. #[Route(path: '/structure/autocomplete', name: 'autocomplete_structure', options: ['expose' => true])]
  46. public function autoCompleteStructure(StructureRepository $rep, Request $request): Response
  47. {
  48. $return = [];
  49. $items = [];
  50. $q = $request->query->get('q');
  51. $pageSize = $request->query->get('page_limit');
  52. $page = $request->query->has('page') ? $request->query->get('page') : '1';
  53. $query = $rep->search($q)
  54. ->setFirstResult($pageSize * ($page - 1))
  55. ->setMaxResults($pageSize)
  56. ;
  57. $entities = $query->execute();
  58. foreach ($entities as $entity) {
  59. $label = ''.$entity->__toString();
  60. $items[] = ['id' => $entity->getId(), 'text' => $label, 'label' => $label];
  61. }
  62. $return['results'] = $items;
  63. $return['more'] = true;
  64. $return['length'] = count($entities);
  65. $return['items'] = $items;
  66. return new Response(json_encode($return), [] !== $return ? 200 : 404);
  67. }
  68. /**
  69. * routing ta stay session open.
  70. */
  71. #[Route(path: '/no-expire-sessions', name: 'no-expire-sessions', options: ['expose' => true])]
  72. public function noExpireSessions(Request $request): Response
  73. {
  74. $request->getSession();
  75. $return = $this->getUser();
  76. return new Response(json_encode($return), $return ? 200 : 404);
  77. }
  78. }