<?php
declare(strict_types=1);
namespace App\Controller;
use App\Entity\SenacsConfiguration;
use App\Services\FolderService;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
private ManagerRegistry $em;
public function __construct(ManagerRegistry $em)
{
$this->em = $em;
}
#[Route(path: '/', name: 'homepage')]
public function index(): Response
{
// mise en place contrôle sur fiche identité pour affichage message éventuel
if ($this->isGranted('ROLE_CSO')) {
$structure = $this->getUser()->getStructure();
if ($structure->getTypeStructure() && 'CSO' == $structure->getTypeStructure()->getNom() && !$structure->getModeGestion() && !$structure->getAdhesionIndividuel() && !$structure->getAdhesionFamiliale()) {
$this->get('session')->getFlashBag()->add(
'warning',
'Votre Fiche d\'identité semble incomplète.<br/> Merci de bien vouloir la compléter via le menu à gauche "Editer ma fiche".'
);
}
}
// get last plaquettes added
$lastFiles = $this->getLastPlaquettes(5);
$homeText = $this->em->getRepository(SenacsConfiguration::class)->findOneBy(['senacsConfigKey' => 'homeText']);
if (!$this->isGranted('ROLE_USER')) {
return $this->render('default/index.html.twig', [
'homeText' => $homeText,
'lastFiles' => $lastFiles,
]);
}
$nbFicheActions = 0;
$nbActiveCso = 0;
$nbActiveCaf = 0;
$nbActiveFdd = 0;
$nbActiveEvs = 0;
$nbCompleted = 0;
$nbInvitation = 0;
$nbEvsCompleted = 0;
$nbEvsInvitation = 0;
// recuperation nbFicheAction
// $nbFicheActions = $this->em->getRepository(FicheAction::class)->countActiveFicheAction();
// $nbActiveCso = $this->em->getRepository(Structure::class)->countActiveStructure(4);
// $nbActiveCaf = $this->em->getRepository(Structure::class)->countActiveStructure(3);
// $nbActiveFdd = $this->em->getRepository(Structure::class)->countActiveStructure(5);
// $nbActiveEvs = $this->em->getRepository(Structure::class)->countActiveStructure(2);
// $rnStructure = $this->em->getRepository(Structure::class)->find(63); // ADMINISTRATEUR NATIONAL
// $nbCompleted = $this->em->getRepository(LimeSurveys::class)->getNbCompletedReponsesForOneSurvey($sidNationalSurvey, $rnStructure);
// $nbInvitation = $this->em->getRepository(LimeSurveys::class)->getNbInvitationForOneSurvey($sidNationalSurvey, $rnStructure);
// $nbEvsCompleted = $this->em->getRepository(LimeSurveys::class)->getNbCompletedReponsesForOneSurvey($sidEvsSurvey, $rnStructure);
// $nbEvsInvitation = $this->em->getRepository(LimeSurveys::class)->getNbInvitationForOneSurvey($sidEvsSurvey, $rnStructure);
return $this->render('default/index.html.twig', [
'nbFicheActions' => $nbFicheActions,
'nbActiveCso' => $nbActiveCso,
'nbActiveCaf' => $nbActiveCaf,
'nbActiveFdd' => $nbActiveFdd,
'nbActiveEvs' => $nbActiveEvs,
'nbCompleted' => $nbCompleted,
'nbInvitation' => $nbInvitation,
'nbEvsCompleted' => $nbEvsCompleted,
'nbEvsInvitation' => $nbEvsInvitation,
'homeText' => $homeText,
'lastFiles' => $lastFiles,
]);
}
/**
* @return array<mixed, array<'absoluteFilePath'|'fileName'|'fileNameWithExtension'|'imagePath'|'path'|'subTitle'|'title', mixed>>
*/
private function getLastPlaquettes(int $nb = 10): array
{
$plaquettesFolder = 'files/plaquettes/';
$folder = $this->getParameter('kernel.project_dir').'/public/'.$plaquettesFolder;
$finder = new Finder();
$finder->files()->in($folder);
$finder->sortByChangedTime()->reverseSorting();
$finder->notName('*.jpeg');
$files = [];
foreach (new \LimitIterator($finder->getIterator(), 0, $nb) as $file) {
$fileTitleInfos = explode('/', $file->getRelativePath());
$files[] = [
'fileName' => $file->getFileName(),
'fileNameWithExtension' => $plaquettesFolder.$file->getRelativePathname(),
'absoluteFilePath' => $file->getRealPath(),
'path' => $file->getPath(),
'title' => str_replace(['SENACS_', 'SENACS-', '.pdf'], '', $file->getFileName()),
'subTitle' => $fileTitleInfos[0],
'imagePath' => $plaquettesFolder.str_replace('pdf', 'jpeg', $file->getRelativePathname()),
];
}
return $files;
}
#[Route(path: '/plaquettes', name: 'plaquettes')]
public function listPlaquette(): Response
{
$folder = $this->getParameter('kernel.project_dir').'/public/files/plaquettes';
$folderService = new FolderService();
$years = $folderService->getsubFolders($folder);
$plaquettesFiles = [];
foreach ($years as $year) {
$subfolders = $folderService->getsubFolders($folder.'/'.$year);
foreach ($subfolders as $subfolder) {
$files = $folderService->getFolderFiles($folder.'/'.$year.'/'.$subfolder);
foreach ($files as $file) {
$plaquettesFiles[$year][$subfolder][] = $file;
}
}
}
return $this->render('default/listPlaquette.html.twig', [
'plaquettesFiles' => $plaquettesFiles,
]);
}
/**
* passage a completer réponse a une enquete pour une un cso donné.
* */
#[Route(path: '/ajax/completeSurvey', name: 'ajaxCompleteSurvey')]
public function postAjaxCompleteSurvey(Request $request): Response
{
$data = $request->request->all();
$sid = $data['sid'];
$token = $data['token'];
$connection = $this->em->getConnection();
$now = new \DateTime();
// recupération des token déjà présents dans la base
$statement = $connection->prepare('UPDATE lime_tokens_'.$sid.' SET completed="'.$now->format('Y-m-d H:i').'" WHERE token="'.$token.'"');
$statement->execute();
$response = new Response();
$response->setContent('les réponses à l\'enquête '.$sid.' pour la structure '.$token.' ont étaient basculées à completé');
return $response;
}
#[Route(path: 'updatehomeText', name: 'ajaxUpdatehomeText')]
public function postAjaxHomeTextContent(Request $request): JsonResponse|Response
{
$data = json_decode($request->getContent(), true);
if (!isset($data['content'])) {
return new JsonResponse(['error' => 'Donnée "content" manquante'], 400);
}
$content = $data['content'];
/* @var $homeTextConfiguration SenacsConfiguration */
$homeTextConfiguration = $this->em->getRepository(SenacsConfiguration::class)->findOneBy(['senacsConfigKey' => 'homeText']);
if (!$homeTextConfiguration) {
throw $this->createNotFoundException('Unable to update configuration.');
}
$homeTextConfiguration->setSenacsConfigValue($content);
$this->em->getManager()->persist($homeTextConfiguration);
$this->em->getManager()->flush();
return new Response(json_encode(['status' => 'ok']), Response::HTTP_OK);
}
#[Route(path: '/initsession')]
public function initsession(): Response
{
// session_start(); inutile car déjà initialisé par symfony
$_SESSION['montest'] = 'youpi';
$_SESSION['temps'] = date('d/m/Y H:i:s', time());
$response = new Response();
$response->setContent('Init session '.print_r($_SESSION, true));
return $response;
}
#[Route(path: '/testsession')]
public function testsession(): Response
{
$response = new Response();
$response->setContent(' Test Session <pre> '.print_r($_SESSION, true).'</pre>');
return $response;
}
}