src/Controller/DefaultController.php line 26

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\Entity\SenacsConfiguration;
  5. use App\Services\FolderService;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Finder\Finder;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class DefaultController extends AbstractController
  13. {
  14. private ManagerRegistry $em;
  15. public function __construct(ManagerRegistry $em)
  16. {
  17. $this->em = $em;
  18. }
  19. #[Route(path: '/', name: 'homepage')]
  20. public function index(): Response
  21. {
  22. // mise en place contrôle sur fiche identité pour affichage message éventuel
  23. if ($this->isGranted('ROLE_CSO')) {
  24. $structure = $this->getUser()->getStructure();
  25. if ($structure->getTypeStructure() && 'CSO' == $structure->getTypeStructure()->getNom() && !$structure->getModeGestion() && !$structure->getAdhesionIndividuel() && !$structure->getAdhesionFamiliale()) {
  26. $this->get('session')->getFlashBag()->add(
  27. 'warning',
  28. 'Votre Fiche d\'identité semble incomplète.<br/> Merci de bien vouloir la compléter via le menu à gauche "Editer ma fiche".'
  29. );
  30. }
  31. }
  32. // get last plaquettes added
  33. $lastFiles = $this->getLastPlaquettes(5);
  34. $homeText = $this->em->getRepository(SenacsConfiguration::class)->findOneBy(['senacsConfigKey' => 'homeText']);
  35. if (!$this->isGranted('ROLE_USER')) {
  36. return $this->render('default/index.html.twig', [
  37. 'homeText' => $homeText,
  38. 'lastFiles' => $lastFiles,
  39. ]);
  40. }
  41. $nbFicheActions = 0;
  42. $nbActiveCso = 0;
  43. $nbActiveCaf = 0;
  44. $nbActiveFdd = 0;
  45. $nbActiveEvs = 0;
  46. $nbCompleted = 0;
  47. $nbInvitation = 0;
  48. $nbEvsCompleted = 0;
  49. $nbEvsInvitation = 0;
  50. // recuperation nbFicheAction
  51. // $nbFicheActions = $this->em->getRepository(FicheAction::class)->countActiveFicheAction();
  52. // $nbActiveCso = $this->em->getRepository(Structure::class)->countActiveStructure(4);
  53. // $nbActiveCaf = $this->em->getRepository(Structure::class)->countActiveStructure(3);
  54. // $nbActiveFdd = $this->em->getRepository(Structure::class)->countActiveStructure(5);
  55. // $nbActiveEvs = $this->em->getRepository(Structure::class)->countActiveStructure(2);
  56. // $rnStructure = $this->em->getRepository(Structure::class)->find(63); // ADMINISTRATEUR NATIONAL
  57. // $nbCompleted = $this->em->getRepository(LimeSurveys::class)->getNbCompletedReponsesForOneSurvey($sidNationalSurvey, $rnStructure);
  58. // $nbInvitation = $this->em->getRepository(LimeSurveys::class)->getNbInvitationForOneSurvey($sidNationalSurvey, $rnStructure);
  59. // $nbEvsCompleted = $this->em->getRepository(LimeSurveys::class)->getNbCompletedReponsesForOneSurvey($sidEvsSurvey, $rnStructure);
  60. // $nbEvsInvitation = $this->em->getRepository(LimeSurveys::class)->getNbInvitationForOneSurvey($sidEvsSurvey, $rnStructure);
  61. return $this->render('default/index.html.twig', [
  62. 'nbFicheActions' => $nbFicheActions,
  63. 'nbActiveCso' => $nbActiveCso,
  64. 'nbActiveCaf' => $nbActiveCaf,
  65. 'nbActiveFdd' => $nbActiveFdd,
  66. 'nbActiveEvs' => $nbActiveEvs,
  67. 'nbCompleted' => $nbCompleted,
  68. 'nbInvitation' => $nbInvitation,
  69. 'nbEvsCompleted' => $nbEvsCompleted,
  70. 'nbEvsInvitation' => $nbEvsInvitation,
  71. 'homeText' => $homeText,
  72. 'lastFiles' => $lastFiles,
  73. ]);
  74. }
  75. /**
  76. * @return array<mixed, array<'absoluteFilePath'|'fileName'|'fileNameWithExtension'|'imagePath'|'path'|'subTitle'|'title', mixed>>
  77. */
  78. private function getLastPlaquettes(int $nb = 10): array
  79. {
  80. $plaquettesFolder = 'files/plaquettes/';
  81. $folder = $this->getParameter('kernel.project_dir').'/public/'.$plaquettesFolder;
  82. $finder = new Finder();
  83. $finder->files()->in($folder);
  84. $finder->sortByChangedTime()->reverseSorting();
  85. $finder->notName('*.jpeg');
  86. $files = [];
  87. foreach (new \LimitIterator($finder->getIterator(), 0, $nb) as $file) {
  88. $fileTitleInfos = explode('/', $file->getRelativePath());
  89. $files[] = [
  90. 'fileName' => $file->getFileName(),
  91. 'fileNameWithExtension' => $plaquettesFolder.$file->getRelativePathname(),
  92. 'absoluteFilePath' => $file->getRealPath(),
  93. 'path' => $file->getPath(),
  94. 'title' => str_replace(['SENACS_', 'SENACS-', '.pdf'], '', $file->getFileName()),
  95. 'subTitle' => $fileTitleInfos[0],
  96. 'imagePath' => $plaquettesFolder.str_replace('pdf', 'jpeg', $file->getRelativePathname()),
  97. ];
  98. }
  99. return $files;
  100. }
  101. #[Route(path: '/plaquettes', name: 'plaquettes')]
  102. public function listPlaquette(): Response
  103. {
  104. $folder = $this->getParameter('kernel.project_dir').'/public/files/plaquettes';
  105. $folderService = new FolderService();
  106. $years = $folderService->getsubFolders($folder);
  107. $plaquettesFiles = [];
  108. foreach ($years as $year) {
  109. $subfolders = $folderService->getsubFolders($folder.'/'.$year);
  110. foreach ($subfolders as $subfolder) {
  111. $files = $folderService->getFolderFiles($folder.'/'.$year.'/'.$subfolder);
  112. foreach ($files as $file) {
  113. $plaquettesFiles[$year][$subfolder][] = $file;
  114. }
  115. }
  116. }
  117. return $this->render('default/listPlaquette.html.twig', [
  118. 'plaquettesFiles' => $plaquettesFiles,
  119. ]);
  120. }
  121. /**
  122. * passage a completer réponse a une enquete pour une un cso donné.
  123. * */
  124. #[Route(path: '/ajax/completeSurvey', name: 'ajaxCompleteSurvey')]
  125. public function postAjaxCompleteSurvey(Request $request): Response
  126. {
  127. $data = $request->request->all();
  128. $sid = $data['sid'];
  129. $token = $data['token'];
  130. $connection = $this->em->getConnection();
  131. $now = new \DateTime();
  132. // recupération des token déjà présents dans la base
  133. $statement = $connection->prepare('UPDATE lime_tokens_'.$sid.' SET completed="'.$now->format('Y-m-d H:i').'" WHERE token="'.$token.'"');
  134. $statement->execute();
  135. $response = new Response();
  136. $response->setContent('les réponses à l\'enquête '.$sid.' pour la structure '.$token.' ont étaient basculées à completé');
  137. return $response;
  138. }
  139. #[Route(path: 'updatehomeText', name: 'ajaxUpdatehomeText')]
  140. public function postAjaxHomeTextContent(Request $request): JsonResponse|Response
  141. {
  142. $data = json_decode($request->getContent(), true);
  143. if (!isset($data['content'])) {
  144. return new JsonResponse(['error' => 'Donnée "content" manquante'], 400);
  145. }
  146. $content = $data['content'];
  147. /* @var $homeTextConfiguration SenacsConfiguration */
  148. $homeTextConfiguration = $this->em->getRepository(SenacsConfiguration::class)->findOneBy(['senacsConfigKey' => 'homeText']);
  149. if (!$homeTextConfiguration) {
  150. throw $this->createNotFoundException('Unable to update configuration.');
  151. }
  152. $homeTextConfiguration->setSenacsConfigValue($content);
  153. $this->em->getManager()->persist($homeTextConfiguration);
  154. $this->em->getManager()->flush();
  155. return new Response(json_encode(['status' => 'ok']), Response::HTTP_OK);
  156. }
  157. #[Route(path: '/initsession')]
  158. public function initsession(): Response
  159. {
  160. // session_start(); inutile car déjà initialisé par symfony
  161. $_SESSION['montest'] = 'youpi';
  162. $_SESSION['temps'] = date('d/m/Y H:i:s', time());
  163. $response = new Response();
  164. $response->setContent('Init session '.print_r($_SESSION, true));
  165. return $response;
  166. }
  167. #[Route(path: '/testsession')]
  168. public function testsession(): Response
  169. {
  170. $response = new Response();
  171. $response->setContent(' Test Session <pre> '.print_r($_SESSION, true).'</pre>');
  172. return $response;
  173. }
  174. }