<?php
declare(strict_types=1);
namespace App\Controller;
use App\Entity\Action;
use App\Entity\ActionEconomique;
use App\Entity\ActionFamiliale;
use App\Entity\ActionPolitique;
use App\Entity\ActionPublic;
use App\Entity\ActionTag;
use App\Entity\Departement;
use App\Entity\Region;
use Doctrine\Persistence\ManagerRegistry;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Action controller.
*/
#[Route(path: '/action')]
class ActionController extends AbstractController
{
private PaginatorInterface $paginator;
private ManagerRegistry $em;
public function __construct(PaginatorInterface $paginator, ManagerRegistry $em)
{
$this->paginator = $paginator;
$this->em = $em;
}
/**
* Lists all actions.
*/
#[Route(path: '/actions', name: 'list_actions')]
public function listActions(Request $request): Response
{
$query = $request->query;
$filter_public = $query->get('public', '');
$filter_familiale = $query->get('familiale', '');
$filter_economique = $query->get('economique', '');
$filter_culturel = $query->get('culturel', '');
$filter_politique = $query->get('politique', '');
$filter_departement = $query->get('departement', '');
$filter_region = $query->get('region', '');
$filter_annee = $query->get('annee', '');
$filter_tag = $query->get('tag', '');
// recuperations des items de liste
$departements = $this->em->getRepository(Departement::class)->getAllByRegion($filter_region);
$regions = $this->em->getRepository(Region::class)->findAll();
$publics = $this->em->getRepository(ActionPublic::class)->findAll();
$actionFamiliales = $this->em->getRepository(ActionFamiliale::class)->findAll();
$actionEconomiques = $this->em->getRepository(ActionEconomique::class)->findAll();
$actionCulturels = $this->em->getRepository(ActionEconomique::class)->findAll();
$actionPolitiques = $this->em->getRepository(ActionPolitique::class)->findAll();
$actionTags = $this->em->getRepository(ActionTag::class)->findAll();
$pagination = $this->paginator->paginate(
$this->em->getRepository(Action::class)->getListAction(
$query->get('sort', 'e.created'),
$query->get('direction', 'DESC'),
$filter_public,
$filter_familiale,
$filter_economique,
$filter_culturel,
$filter_politique,
$filter_departement,
$filter_region,
$filter_annee,
$filter_tag
),
$query->getInt('page', 1), /* page number */
25 /* limit per page */
);
return $this->render('Action/index.html.twig', [
'filter_public' => $filter_public,
'filter_familiale' => $filter_familiale,
'filter_economique' => $filter_economique,
'filter_culturel' => $filter_culturel,
'filter_politique' => $filter_politique,
'filter_departement' => $filter_departement,
'filter_region' => $filter_region,
'filter_annee' => $filter_annee,
'filter_tag' => $filter_tag,
'pagination' => $pagination,
'departements' => $departements,
'regions' => $regions,
'publics' => $publics,
'actionFamiliales' => $actionFamiliales,
'actionEconomiques' => $actionEconomiques,
'actionCulturels' => $actionCulturels,
'actionPolitiques' => $actionPolitiques,
'actionTags' => $actionTags,
]);
}
/**
* Afficher les infos d'une action.
*/
#[Route(path: '/show/{id}', name: 'show_action', methods: ['GET'])]
public function show($id = null): Response
{
$entity = $this->em->getRepository(Action::class)->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Action entity.');
}
return $this->render('Action/show.html.twig', [
'entity' => $entity,
]);
}
/**
* Recherche geographique et par mots cles.
*/
#[Route(path: '/geographical-and-tag-search', name: 'geographical_and_tag_search_action')]
public function geographicalAndTagSearch(): Response
{
$connection = $this->em->getConnection();
// tags
$statement = $connection->prepare('SELECT at.action_tag_id, t.nom, count(at.action_tag_id) as count
FROM actions_tag at
LEFT JOIN ActionTag t ON at.action_tag_id = t.id
GROUP BY at.action_tag_id
ORDER BY t.nom ASC');
$results_tags = $statement->execute()->fetchAll();
$baseFontSize = '0.8';
$maxFontSize = '2.5';
// map
$BaseQuery = 'SELECT * FROM Action a LEFT JOIN Structure s ON a.structure_id = s.id LEFT JOIN Departement d ON s.departement_id=d.id ';
$statement1 = $connection->prepare('SELECT * FROM imap_departements');
$GetImapDepartements = $statement1->execute()->fetchAll();
$map_array = [];
foreach ($GetImapDepartements as $result) {
$statement2 = $connection->prepare($BaseQuery." WHERE d.num='".$result['id']."'");
$Get_All = $statement2->execute()->fetchAll();
$total_resultats = is_countable($Get_All) ? count($Get_All) : 0;
$map_array[$result['id']]['id'] = $result['id'];
$map_array[$result['id']]['departement'] = $result['departement'];
$map_array[$result['id']]['total_resultats'] = $total_resultats;
$map_array[$result['id']]['coords'] = $result['coords'];
}
return $this->render('Action/geographical_and_tag_search.html.twig', [
'results_tags' => $results_tags,
'baseFontSize' => $baseFontSize,
'maxFontSize' => $maxFontSize,
'map_array' => $map_array,
]);
}
}