<?php
namespace App\Controller;
use App\Entity\Projet;
use App\Form\SearchProjetArType;
use App\Form\SearchProjetType;
use App\Repository\CommuneRepository;
use App\Repository\PartenaireRepository;
use App\Repository\ProjetRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\GouvernoratRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class FrontController extends AbstractController
{
#[Route(path: '/', name: 'app_front_404', )]
public function front_404(): Response
{
return $this->redirectToRoute('app_front', ['_locale' => 'ar']);
}
#[Route(path: '/{_locale}/', name: 'app_front', requirements: ['_locale' => 'fr|ar'])]
public function front(
Request $request,
EntityManagerInterface $entityManager,
PartenaireRepository $partenaireRepository,
GouvernoratRepository $gouvernoratRepository,
ProjetRepository $projetRepository,
CommuneRepository $communeRepository
): Response {
$stats = [];
$tab_gov = [];
$locale = $request->getLocale();
$stats['NbrPartenaire']['valeur'][] = 0;
$stats['NbrPartenaire']['label'][] = '';
$stats['SumPartenaire']['valeur'][] = 0;
$stats['SumPartenaire']['label'][] = '';
$stats['SIntervention']['valeur'][] = 0;
$stats['SIntervention']['label'][] = '';
$stats['Status']['valeur'][] = 0;
$stats['Status']['label'][] = '';
$indicateurs['reg_local'] = 0;
$indicateurs['central'] = 0;
$indicateurs['regional'] = 0;
$indicateurs['local'] = 0;
$indicateurs['centrals'] = 0;
$gouvs = $gouvernoratRepository->getGouvernorat();
$projetAlaUne = $projetRepository->findBy(['isAlaUne' => true], ['id' => 'DESC'], 5);
$partenaires = $partenaireRepository->findBy([], ['id' => 'DESC'], 20);
$resultTunis = $communeRepository->findCommuneByGovCode('tn-tu');
$NbrPartenaire = $projetRepository->chartNbrPartenaireProjets();
$SumPartenaire = $projetRepository->chartSumPartenaireProjets();
$Status = $projetRepository->chartStatusProjets();
$SIntervention = $projetRepository->chartSInterventionProjets();
$indicateurs['reg_local'] = $projetRepository->findNbrProjetRegionalLocal();
$indicateurs['central'] = $projetRepository->findNbrProjetCentral();
$indicateurs['regional'] = $projetRepository->findNbrProjetRegional();
$indicateurs['local'] = $projetRepository->findNbrProjetLocal();
$indicateurs['centrals'] = $projetRepository->findNbrProjetCentrals();
foreach ($NbrPartenaire as $NbrPart) {
$stats['NbrPartenaire']['valeur'][] = $NbrPart['nbr'];
$stats['NbrPartenaire']['label'][] = $NbrPart['nom_fr'];
}
foreach ($SumPartenaire as $SumPart) {
$stats['SumPartenaire']['valeur'][] = $SumPart['nbr'];
$stats['SumPartenaire']['label'][] = $SumPart['nom_fr'];
}
foreach ($Status as $Stat) {
$stats['Status']['valeur'][] = $Stat['nbr'];
$stats['Status']['label'][] = $Stat['nom_fr'];
}
foreach ($SIntervention as $SInter) {
$stats['SIntervention']['valeur'][] = $SInter['nbr'];
$stats['SIntervention']['label'][] = $SInter['nom_fr'];
}
if ($locale == 'ar') {
$form = $this->createForm(SearchProjetArType::class);
} else {
$form = $this->createForm(SearchProjetType::class);
}
$form->handleRequest($request);
if (!empty($gouvs)) {
foreach ($gouvs as $gouv) {
$array_commmune = [];
$comms = $communeRepository->findCommuneByGov($gouv ? $gouv['id'] : null);
array_push($array_commmune, $comms);
$tab_gov[$gouv['nom_fr']]['communes'] = $array_commmune;
$tab_gov[$gouv['nom_fr']]['code'] = $gouv['code'];
$tab_gov[$gouv['nom_fr']]['ar'] = $gouv['nom_ar'];
}
}
return $this->render('__front__pages/index.html.twig', [
'projetsAlaUne' => $projetAlaUne,
'partenaires' => $partenaires,
'search_form' => $form->createView(),
'tab_gov' => $tab_gov,
'tab_tn' => $resultTunis,
'stats' => $stats,
'indicateurs' => $indicateurs,
]);
}
#[Route('/{_locale}/mes-projets', name: 'mes_projets')]
public function mesProjet(Request $request, ProjetRepository $projetRepository): Response
{
$projets = [];
$value = null;
$locale = $request->getLocale();
if ($locale == 'ar') {
$form = $this->createForm(SearchProjetArType::class);
} else {
$form = $this->createForm(SearchProjetType::class);
}
$form->handleRequest($request);
$projets = $projetRepository->findProjetByCriteria($value, $value, $value, $value, $value, $value, $value);
if ($form->isSubmitted() && $form->isValid()) {
$results = $request->request->all();
$date = $results['search_projet']['date'] ?? null;
$budget = $results['search_projet']['budget'] ?? null;
$programme = $results['search_projet']['programme'] ?? null;
$communes = $results['search_projet']['communes'] ?? null;
$envIntervention = $results['search_projet']['envIntervention'] ?? null;
$modExecution = $results['search_projet']['modExecution'] ?? null;
$gouveronarat = $results['search_projet']['gouvernorat'] ?? null;
if (isset($results['submit']) && $results['submit'] == 1) {
$projets = $projetRepository->findProjetByCriteria($date, $budget, $programme, $communes, $envIntervention, $modExecution, $gouveronarat);
}
}
return $this->render('__front__pages/mes-projets.html.twig', [
'search_form' => $form->createView(),
'projets' => $projets,
]);
}
#[Route('/{_locale}/detail-projet/{id}', name: 'detail_projet_front')]
public function detailProjetFront($id, ProjetRepository $projetRepository): Response
{
$projet = $projetRepository->find($id ? $id : null);
return $this->render('__front__pages/detail-projet.html.twig', [
"projet" => $projet,
]);
}
#[Route('/{_locale}/mes-partenaires', name: 'mes_partenaires')]
public function mesPartenaires(Request $request, PartenaireRepository $partenaireRepository): Response
{
$partenaires = $partenaireRepository->findAll();
return $this->render('__front__pages/mes-partenaires.html.twig', [
'partenaires' => $partenaires,
]);
}
#[Route('/{_locale}/detail-partenaire/{id}', name: 'detail_partenaire_front')]
public function detailPartenaireFront($id, PartenaireRepository $partenaireRepository): Response
{
$partenaire = $partenaireRepository->find($id ? $id : null);
return $this->render('__front__pages/detail-partenaire.html.twig', [
"partenaire" => $partenaire ? $partenaire : null,
]);
}
#[Route('/{_locale}/a-propos', name: 'a_propos_front')]
public function aProposFront(): Response
{
return $this->render('__front__pages/a-propos.html.twig', []);
}
#[Route('/{_locale}/contact', name: 'contact_front')]
public function contactFront(): Response
{
return $this->render('__front__pages/contact.html.twig', []);
}
/*
#[Route('/redirect_langue', name: 'redirect_front', requirements: ['_locale' => 'fr|ar'])]
public function redirectLangue(Request $request): Response
{
$this->get('session')->set('_locale', $locale);
$request->setLocale($locale);
$referer = $request->headers->get('referer');
return new RedirectResponse($referer);
}
*/
}