src/Controller/EcleleveController.php line 198

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Doctrine\ORM\EntityRepository;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. // UX/Chartjs
  12. use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
  13. use Symfony\UX\Chartjs\Model\Chart;
  14. // DateTime
  15. use DateTime;
  16. // Form
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. // Controller
  19. use App\Controller\EclacController;
  20. // Classes
  21. use App\Entity\Enseignant;
  22. use App\Entity\Anneeuniversitaire;
  23. use App\Entity\Enseignantcours;
  24. use App\Entity\Cours;
  25. use App\Entity\Parametre;
  26. use App\Entity\Eleve;
  27. use App\Entity\Inscription;
  28. use App\Entity\Semestre;
  29. use App\Entity\Diplome;
  30. use App\Entity\Epreuve;
  31. use App\Entity\Evaluation;
  32. use App\Entity\Cursus;
  33. use App\Entity\Niveau;
  34. use App\Entity\Note;
  35. use App\Entity\Utilisateur;
  36. #[Route('/secured/eleve')]
  37. class EcleleveController extends AbstractController
  38. {
  39. public function __construct(
  40. private EntityManagerInterface $entityManager,
  41. private ChartBuilderInterface $chartBuilder,
  42. private EclacController $EclacController,
  43. ) {}
  44. // Espace élève
  45. #[Route('/', name: 'app_ecleleve_index', methods: ['GET', 'POST'])]
  46. public function index(Request $request): Response
  47. {
  48. // La personne a besoin d'être identifiée pour accéder à la ressource
  49. // $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
  50. // Variables communes
  51. $entityManager = $this->entityManager;
  52. $session = $request->getSession();
  53. $parametre = $entityManager->getRepository(Parametre::class)->findOneBy(array(
  54. "idparametre" => 1,
  55. ));
  56. $utilisateur = $session->get("utilisateurconnecte");
  57. // Si la session n'est pas encore créée, on redirige sur le choix de l'espace
  58. if ($session->get('typeUtilisateur') == NULL) {
  59. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  60. } else {
  61. // Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
  62. if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
  63. $this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
  64. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  65. }
  66. }
  67. $semestre = NULL;
  68. if (isset($_POST["frmidsemetre"])) {
  69. $session->set("idsemestre", $_POST["frmidsemetre"]);
  70. }
  71. if ($session->get("idsemestre")) {
  72. $semestre = $entityManager->getRepository(Semestre::class)->find($session->get("idsemestre"));
  73. }
  74. if ($session->get('idelevedemo') != null) {
  75. // Mode DEMO / ADMIN
  76. $eleve = $entityManager->getRepository(Eleve::class)->find($session->get("idelevedemo"));
  77. } else {
  78. $eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
  79. array(
  80. 'utilisateur' => $utilisateur->getIdutilisateur()
  81. )
  82. );
  83. }
  84. // On récupère les inscriptions de l'élève
  85. $inscriptions = $entityManager->getRepository(Inscription::class)->findBy(
  86. array(
  87. "eleve" => $eleve
  88. ),
  89. array(
  90. 'datecrea' => 'DESC'
  91. )
  92. );
  93. $listeIdInscriptions = "";
  94. foreach($inscriptions as $inscription) {
  95. $listeIdInscriptions .= $inscription->getIdinscription() . ",";
  96. }
  97. // On récupère les cursus de l'élève
  98. $query = $entityManager->getConnection()->prepare(
  99. 'SELECT C.*
  100. FROM CURSUS AS C
  101. JOIN COURS AS CO ON CO.cursus_id = C.idcursus
  102. JOIN INSCRIPTION AS I ON I.cours_id = CO.idcours
  103. WHERE I.idinscription IN (:listeIdInscriptions)
  104. GROUP BY C.idcursus
  105. ORDER BY I.datecrea DESC'
  106. );
  107. $query->bindValue('listeIdInscriptions', $listeIdInscriptions);
  108. $result = $query->execute();
  109. $cursus = $result->fetchAllAssociative();
  110. $chart = NULL;
  111. $semestres = NULL;
  112. $niveaux = NULL;
  113. $diplome = NULL;
  114. if(!empty($cursus)) {
  115. $cursusActuel = $entityManager->getRepository(Cursus::class)->findOneBy(['idcursus' => $cursus[0]['idcursus']]);
  116. // On récupère les semestres de l'élève à partir de son cursus actuel (Dernier en date)
  117. $query = $entityManager->getConnection()->prepare(
  118. 'SELECT S.*, REQ.nb
  119. FROM SEMESTRE AS S
  120. JOIN CURSUSSEMESTRE AS CS ON CS.semestre_id = S.idsemestre
  121. JOIN CURSUS AS C ON C.idcursus = CS.cursus_id
  122. LEFT OUTER JOIN
  123. (SELECT S.*, COUNT(*) AS nb
  124. FROM SEMESTRE AS S
  125. LEFT OUTER JOIN COURS AS C ON C.semestre_id = S.idsemestre
  126. LEFT OUTER JOIN EPREUVE AS E ON E.cours_id = C.idcours
  127. LEFT OUTER JOIN EVALUATIONELEVE AS EE ON EE.epreuve_id = E.idepreuve
  128. LEFT OUTER JOIN ELEVE AS EL ON EL.ideleve = EE.eleve_id
  129. WHERE EL.ideleve = :ideleve
  130. GROUP BY S.idsemestre)
  131. AS REQ ON S.idsemestre = REQ.idsemestre
  132. WHERE C.idcursus = :idcursus
  133. ORDER BY S.ordre'
  134. );
  135. $query->bindValue('ideleve', 0 . $eleve->getIdeleve());
  136. $query->bindValue('idcursus', $cursusActuel->getIdcursus());
  137. $result = $query->execute();
  138. $semestres = $result->fetchAllAssociative();
  139. // On récupère les niveaux de l'élève à partir de son cursus actuel (Dernier en date)
  140. $query = $entityManager->getConnection()->prepare(
  141. 'SELECT N.*, CR.*
  142. FROM NIVEAU AS N
  143. JOIN COULEURROSACE AS CR ON CR.idcouleurrosace = N.couleurrosace_id
  144. JOIN CURSUSNIVEAU AS CN ON CN.niveau_id = N.idniveau
  145. JOIN CURSUS AS C ON C.idcursus = CN.cursus_id
  146. WHERE C.idcursus = :idcursus
  147. AND N.codeniveau IS NOT NULL
  148. ORDER BY N.ordre'
  149. );
  150. $query->bindValue('idcursus', $cursusActuel->getIdcursus());
  151. $result = $query->execute();
  152. $niveaux = $result->fetchAllAssociative();
  153. // On récupère le diplôme de l'élève
  154. $diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
  155. array(
  156. 'eleve' => $eleve->getIdeleve()
  157. )
  158. );
  159. // On créer la rosace
  160. $chart = $this->createChartRadar($utilisateur, $semestre, $eleve, $cursusActuel);
  161. } else {
  162. $this->addFlash('error', 'Aucun cursus trouvé.');
  163. }
  164. return $this->render('ecleleve/espace-eleve.html.twig', [
  165. 'chart' => $chart,
  166. 'eleve' => $eleve,
  167. 'semestres' => $semestres,
  168. 'semestre' => $semestre,
  169. 'diplome' => $diplome,
  170. "parametre" => $parametre,
  171. "niveaux" => $niveaux,
  172. "cursus" => $cursus[0] ?? NULL,
  173. ]);
  174. }
  175. // Permet de créer la rosace
  176. public function createChartRadar(Utilisateur $utilisateur, Semestre $semestre = null, Eleve $eleve, Cursus $cursus): Chart|bool
  177. {
  178. // Variables communes
  179. $entityManager = $this->entityManager;
  180. $chartBuilder = $this->chartBuilder;
  181. $now = date_format(new DateTime(), ('Y-m-d'));
  182. // On récupère les niveaux de l'élève à partir du cursus
  183. $query = $entityManager->getConnection()->prepare(
  184. 'SELECT N.*, CR.*
  185. FROM NIVEAU AS N
  186. JOIN COULEURROSACE AS CR ON CR.idcouleurrosace = N.couleurrosace_id
  187. JOIN CURSUSNIVEAU AS CN ON CN.niveau_id = N.idniveau
  188. JOIN CURSUS AS C ON C.idcursus = CN.cursus_id
  189. WHERE C.idcursus = :idcursus
  190. AND N.codeniveau IS NOT NULL
  191. ORDER BY N.ordre'
  192. );
  193. $query->bindValue('idcursus', $cursus->getIdcursus());
  194. $result = $query->execute();
  195. $niveaux = $result->fetchAllAssociative();
  196. // On recherche si une année existe pour la date actuelle
  197. $query = $entityManager
  198. ->createQuery(
  199. 'SELECT a
  200. FROM App\Entity\Anneeuniversitaire a
  201. WHERE a.datedebut <= :now
  202. AND a.datefin >= :now'
  203. )
  204. ->setParameter('now', $now);
  205. $anneeUniversitaireQuery = $query->getResult();
  206. // Si oui, on la sélectionne
  207. if (!empty($anneeUniversitaireQuery)) {
  208. $anneeUniversitaire = $anneeUniversitaireQuery[0];
  209. } else {
  210. // On récupère la liste des années universitaires
  211. $anneesuniversitaire = $entityManager->getRepository(Anneeuniversitaire::class)->findAll();
  212. $anneeUniversitaire = $anneesuniversitaire[0];
  213. }
  214. // On récupère les composantes de l'année et du cursus sélectionnés
  215. $query = $entityManager
  216. ->createQuery(
  217. 'SELECT cp
  218. FROM App\Entity\Composante cp
  219. JOIN cp.competence c
  220. JOIN c.anneeuniversitaire a
  221. JOIN c.cursus cu
  222. WHERE a.idanneeuniversitaire = :idanneeuniversitaire
  223. AND cu.idcursus = :idcursus
  224. order by c.codecompetence, cp.codecomposante '
  225. )
  226. ->setParameter('idanneeuniversitaire', $anneeUniversitaire->getIdanneeuniversitaire())
  227. ->setParameter('idcursus', $cursus->getIdcursus());
  228. $composantes = $query->getResult();
  229. $arrayLabels = array();
  230. $arrayDatasets = array();
  231. if (!empty($composantes))
  232. {
  233. if ($utilisateur != NULL)
  234. {
  235. $tabNotesTotal = array();
  236. $tabNotes = array();
  237. $count = 0;
  238. foreach($niveaux as $niveau)
  239. {
  240. $niveau = $entityManager->getRepository(Niveau::class)->findOneBy(['idniveau' => $niveau['idniveau']]);
  241. $array[$niveau->getCodeniveau()] = [];
  242. $tabNotes[$niveau->getCodeniveau()] = [];
  243. $arrayDataRedirectLabel[$niveau->getCodeniveau()] = [];
  244. $arrayDataTooltipTitle[$niveau->getCodeniveau()] = [];
  245. foreach ($composantes as $composante)
  246. {
  247. if($count == 0)
  248. {
  249. $label = "";
  250. $arrayLabelsLabels = array();
  251. array_push($arrayLabelsLabels, $composante->getCodecomposante());
  252. $arrayLibelle = explode(' ', $composante->getLibellecomposante());
  253. $nbcar = 0;
  254. for ($i = 0; $i < count($arrayLibelle); $i++) {
  255. $nbcar = $nbcar + (strlen($arrayLibelle[$i]));
  256. if ($nbcar < 15) {
  257. $label .= $arrayLibelle[$i] . ' ';
  258. } else {
  259. array_push($arrayLabelsLabels, $label);
  260. $nbcar = strlen($arrayLibelle[$i]);
  261. $label = $arrayLibelle[$i] . ' ';
  262. }
  263. }
  264. if ($label != "") {
  265. array_push($arrayLabelsLabels, $label);
  266. }
  267. array_push($arrayLabels, $arrayLabelsLabels);
  268. }
  269. $maquery = 'SELECT ee, no
  270. FROM App\Entity\Evaluationeleve ee
  271. JOIN ee.epreuve e
  272. JOIN e.composante cp
  273. JOIN e.niveau n
  274. JOIN e.cours c
  275. JOIN c.semestre s
  276. JOIN ee.eleve el
  277. JOIN ee.note no
  278. WHERE el.ideleve = :ideleve
  279. AND n.codeniveau = :codeniveau
  280. AND cp.codecomposante = :codecomposante
  281. AND no.idnote != 4';
  282. if ($semestre)
  283. {
  284. $maquery .= ' AND s.ordre <= :ordre';
  285. }
  286. $maquery .= ' ORDER BY n.ordre DESC';
  287. // On récupère les évaluations de l'élève connecté
  288. $query = $entityManager
  289. ->createQuery(
  290. $maquery
  291. )
  292. ->setParameter('ideleve', $eleve->getIdeleve())
  293. ->setParameter('codeniveau', $niveau->getCodeniveau())
  294. ->setParameter('codecomposante', $composante->getCodecomposante());
  295. if ($semestre) {
  296. $query->setParameter('ordre', $semestre->getOrdre());
  297. }
  298. $array[$niveau->getCodeniveau()]['composante'] = $composante;
  299. $array[$niveau->getCodeniveau()]['evaluations'] = $query->getResult();
  300. array_push($tabNotes[$niveau->getCodeniveau()], $array[$niveau->getCodeniveau()]);
  301. array_push($arrayDataTooltipTitle[$niveau->getCodeniveau()], $composante->getLibellecomposante() . ' - ' . $niveau->getLibelleniveau());
  302. array_push($arrayDataRedirectLabel[$niveau->getCodeniveau()], str_replace('_', $niveau->getCodeniveau(), $composante->getCodecomposante()));
  303. }
  304. $tabNotes['niveau'] = $niveau;
  305. $tabNotes['notes'] = $tabNotes[$niveau->getCodeniveau()];
  306. $tabNotes['couleur'] = $niveau->getCouleurrosace()->getHexa();
  307. $tabNotes['couleurName'] = $niveau->getCouleurrosace()->getLibbootstrap();
  308. $tabNotes['tooltips'] = $arrayDataTooltipTitle[$niveau->getCodeniveau()];
  309. $tabNotes['redirectLabels'] = $arrayDataRedirectLabel[$niveau->getCodeniveau()];
  310. array_push($tabNotesTotal, $tabNotes);
  311. $count++;
  312. }
  313. $countNiveau = 0;
  314. foreach ($tabNotesTotal as $tabNoteTotal)
  315. {
  316. $countNiveau++;
  317. $arrayData = array();
  318. $arrayData['label'] = $tabNoteTotal['niveau']->getLibelleniveau();
  319. $arrayData['borderColor'] = 'rgba(255, 255, 255, 0)';
  320. $arrayData['backgroundColor'] = 'rgba(255, 255, 255, 0)';
  321. $arrayData['fill'] = false;
  322. $arrayData['pointBackgroundColor'] = $tabNoteTotal['couleur'];
  323. $arrayData['pointRadius'] = '5';
  324. $arrayData['spanGaps'] = false;
  325. $arrayData['tooltip']['title'] = $tabNoteTotal['tooltips'];
  326. $arrayData['redirectLabels'] = $tabNoteTotal['redirectLabels'];
  327. $arrayDataData = array();
  328. $arrayDataPoints = array();
  329. $arrayDataLabels = array();
  330. foreach ($tabNoteTotal['notes'] as $notes) {
  331. array_push($arrayDataData, $countNiveau);
  332. if (!empty($notes['evaluations'])) {
  333. $meilleureNote = "";
  334. foreach($notes['evaluations'] as $evaluation)
  335. {
  336. switch ($evaluation->getNote()->getCodenote()) {
  337. case 'A':
  338. if($meilleureNote == "" || $meilleureNote == "C" || $meilleureNote == "F")
  339. {
  340. $meilleureNote = "A";
  341. }
  342. break;
  343. case 'C':
  344. if($meilleureNote == "" || $meilleureNote == "F")
  345. {
  346. $meilleureNote = "C";
  347. }
  348. break;
  349. case 'F':
  350. if($meilleureNote == "")
  351. {
  352. $meilleureNote = "F";
  353. }
  354. break;
  355. }
  356. }
  357. switch($meilleureNote)
  358. {
  359. case 'A':
  360. array_push($arrayDataPoints, 'starPoint' . $tabNoteTotal['couleurName']);
  361. break;
  362. case 'C':
  363. array_push($arrayDataPoints, 'checkPoint' . $tabNoteTotal['couleurName']);
  364. break;
  365. case 'F':
  366. array_push($arrayDataPoints, 'squarePointGris');
  367. break;
  368. }
  369. array_push($arrayDataLabels, strval(count($notes['evaluations'])));
  370. } else {
  371. array_push($arrayDataPoints, 'squarePointGris');
  372. array_push($arrayDataLabels, '');
  373. }
  374. }
  375. $arrayData['data'] = $arrayDataData;
  376. $arrayData['pointStyle'] = $arrayDataPoints;
  377. $arrayData['labelValue'] = $arrayDataLabels;
  378. array_push($arrayDatasets, $arrayData);
  379. }
  380. }
  381. else
  382. {
  383. return false;
  384. }
  385. }
  386. else
  387. {
  388. return false;
  389. }
  390. $chartRadar = $chartBuilder->createChart(Chart::TYPE_RADAR);
  391. $chartRadar->setData(
  392. array(
  393. 'labels' => $arrayLabels,
  394. 'datasets' => $arrayDatasets,
  395. )
  396. );
  397. $chartRadar->setOptions([
  398. 'responsive' => true,
  399. 'layout' => [
  400. 'padding' => 0
  401. ],
  402. 'elements' => [
  403. 'point' => [
  404. 'radius' => 3,
  405. 'hitRadius' => 0,
  406. 'hoverRadius' => 10,
  407. ],
  408. ],
  409. 'plugins' => [
  410. 'legend' => [
  411. 'display' => false,
  412. ],
  413. 'datalabels' => [
  414. 'align' => 'bottom',
  415. 'offset' => 8,
  416. ],
  417. 'tooltip' => [
  418. 'position' => 'nearest',
  419. 'yAlign' => 'bottom',
  420. 'xAlign' => 'center',
  421. 'backgroundColor' => "rgba(57, 127, 197, 0.8)",
  422. 'displayColors' => false,
  423. ],
  424. ],
  425. 'scales' => [
  426. 'r' => [
  427. 'min' => -1,
  428. 'max' => $countNiveau,
  429. 'ticks' => [
  430. 'stepSize' => 1,
  431. 'display' => false,
  432. ],
  433. 'grid' => [
  434. 'circular' => true,
  435. ],
  436. 'angleLines' => [
  437. 'display' => true,
  438. 'borderDash' => [6, 6],
  439. ],
  440. 'pointLabels' => [
  441. 'padding' => 30,
  442. 'font' => [
  443. 'size' => 10,
  444. ],
  445. ],
  446. 'beginAtZero' => true,
  447. ],
  448. ],
  449. ]);
  450. return $chartRadar;
  451. }
  452. // Affiche les notes de l'élève
  453. #[Route('/mes-notes', name: 'app_ecleleve_note', methods: ['GET'])]
  454. public function viewNote(Request $request): Response
  455. {
  456. // La personne a besoin d'être identifiée pour accéder à la ressource
  457. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
  458. // Variables communes
  459. $entityManager = $this->entityManager;
  460. $session = $request->getSession();
  461. $utilisateur = $session->get("utilisateurconnecte");
  462. // Si la session n'est pas encore créée, on redirige sur le choix de l'espace
  463. if ($session->get('typeUtilisateur') == NULL) {
  464. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  465. }
  466. // Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
  467. if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
  468. $this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
  469. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  470. }
  471. // On récupère les notes
  472. $noteA = $entityManager->getRepository(Note::class)->findOneBy(
  473. array(
  474. 'codenote' => 'A'
  475. )
  476. );
  477. $noteC = $entityManager->getRepository(Note::class)->findOneBy(
  478. array(
  479. 'codenote' => 'C'
  480. )
  481. );
  482. $noteF = $entityManager->getRepository(Note::class)->findOneBy(
  483. array(
  484. 'codenote' => 'F'
  485. )
  486. );
  487. $resultat = array();
  488. if ($utilisateur != NULL)
  489. {
  490. $preResultat = array();
  491. if ($session->get('idelevedemo'))
  492. {
  493. $eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
  494. }
  495. else
  496. {
  497. $eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
  498. array(
  499. 'utilisateur' => $utilisateur->getIdutilisateur()
  500. )
  501. );
  502. }
  503. $diplome = NULL;
  504. if($eleve != NULL)
  505. {
  506. $diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
  507. array(
  508. 'eleve' => $eleve->getIdeleve()
  509. )
  510. );
  511. }
  512. // On récupère les évaluations de l'élève connecté
  513. $query = $entityManager
  514. ->createQuery(
  515. 'SELECT ee
  516. FROM App\Entity\Evaluationeleve ee
  517. JOIN ee.eleve el
  518. WHERE el.ideleve = :ideleve'
  519. )
  520. ->setParameter('ideleve', $eleve->getIdeleve());
  521. $notes = $query->getResult();
  522. // dd($notes);
  523. // On récupère le détail des niveaux d'exigence de chaque épreuve
  524. foreach ($notes as $n) {
  525. $query = $entityManager
  526. ->createQuery(
  527. 'SELECT ev
  528. FROM App\Entity\Evaluation ev
  529. JOIN ev.epreuve e
  530. JOIN ev.note n
  531. WHERE e.idepreuve = :idepreuve
  532. AND n.idnote = :idnote
  533. ORDER BY n.codenote ASC'
  534. )
  535. ->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
  536. ->setParameter('idnote', $noteA->getIdnote());
  537. $evaluationA = $query->getResult();
  538. $query = $entityManager
  539. ->createQuery(
  540. 'SELECT ev
  541. FROM App\Entity\Evaluation ev
  542. JOIN ev.epreuve e
  543. JOIN ev.note n
  544. WHERE e.idepreuve = :idepreuve
  545. AND n.idnote = :idnote
  546. ORDER BY n.codenote ASC'
  547. )
  548. ->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
  549. ->setParameter('idnote', $noteC->getIdnote());
  550. $evaluationC = $query->getResult();
  551. $query = $entityManager
  552. ->createQuery(
  553. 'SELECT ev
  554. FROM App\Entity\Evaluation ev
  555. JOIN ev.epreuve e
  556. JOIN ev.note n
  557. WHERE e.idepreuve = :idepreuve
  558. AND n.idnote = :idnote
  559. ORDER BY n.codenote ASC'
  560. )
  561. ->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
  562. ->setParameter('idnote', $noteF->getIdnote());
  563. $evaluationF = $query->getResult();
  564. $preResultat['notesEleve'] = $n;
  565. $preResultat['evaluationA'] = $evaluationA;
  566. $preResultat['evaluationC'] = $evaluationC;
  567. $preResultat['evaluationF'] = $evaluationF;
  568. array_push($resultat, $preResultat);
  569. }
  570. } else {
  571. $this->addFlash('error', 'Profil introuvable');
  572. return $this->redirectToRoute('app_ecleleve_index', [], Response::HTTP_SEE_OTHER);
  573. }
  574. return $this->render('ecleleve/note.html.twig', [
  575. 'resultat' => $resultat,
  576. 'eleve' => $eleve,
  577. 'diplome' => $diplome
  578. ]);
  579. }
  580. // Affiche les évaluations à venir
  581. #[Route('/prochaines-evaluations', name: 'app_ecleleve_prochaines-evaluations', methods: ['GET'])]
  582. public function viewProchainesEvaluations(Request $request): Response
  583. {
  584. // La personne a besoin d'être identifiée pour accéder à la ressource
  585. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
  586. // Variables communes
  587. $entityManager = $this->entityManager;
  588. $session = $request->getSession();
  589. $utilisateur = $session->get("utilisateurconnecte");
  590. // Si la session n'est pas encore créée, on redirige sur le choix de l'espace
  591. if ($session->get('typeUtilisateur') == NULL) {
  592. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  593. }
  594. // Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
  595. if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
  596. $this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
  597. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  598. }
  599. // récupération eleve à montrer
  600. if ($session->get('idelevedemo')) {
  601. $eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
  602. } else {
  603. $eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
  604. array(
  605. 'utilisateur' => $utilisateur->getIdutilisateur()
  606. )
  607. );
  608. }
  609. $diplome = NULL;
  610. if($eleve != NULL)
  611. {
  612. $diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
  613. array(
  614. 'eleve' => $eleve->getIdeleve()
  615. )
  616. );
  617. }
  618. // On récupère les notes
  619. $noteA = $entityManager->getRepository(Note::class)->findOneBy(
  620. array(
  621. 'codenote' => 'A'
  622. )
  623. );
  624. $noteC = $entityManager->getRepository(Note::class)->findOneBy(
  625. array(
  626. 'codenote' => 'C'
  627. )
  628. );
  629. $noteF = $entityManager->getRepository(Note::class)->findOneBy(
  630. array(
  631. 'codenote' => 'F'
  632. )
  633. );
  634. $resultat = array();
  635. if ($utilisateur != NULL) {
  636. $preResultat = array();
  637. if ($session->get('idelevedemo')) {
  638. $eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
  639. } else {
  640. // On récupère l'élève
  641. $eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
  642. array(
  643. 'utilisateur' => $utilisateur->getIdutilisateur()
  644. )
  645. );
  646. }
  647. // On récupère les cours auxquels l'élève est inscrit
  648. $query = $entityManager
  649. ->createQuery(
  650. 'SELECT i
  651. FROM App\Entity\Inscription i
  652. JOIN i.eleve el
  653. WHERE el.ideleve = :ideleve'
  654. )
  655. ->setParameter('ideleve', $eleve->getIdeleve());
  656. $cours = $query->getResult();
  657. //dd($cours);
  658. // On récupère les epreuve qu'a déjà passé l"'élève
  659. $query = $entityManager
  660. ->createQuery(
  661. 'SELECT ep.idepreuve
  662. FROM App\Entity\Evaluationeleve ev
  663. JOIN ev.epreuve ep
  664. join ev.eleve el
  665. WHERE el.ideleve = :ideleve'
  666. )
  667. ->setParameter('ideleve', $eleve->getidEleve());
  668. // on exclut les epréuves ou on a déjà une note
  669. $evalfaites = $query->getResult();
  670. // On récupère les épreuves de chaque cours
  671. foreach ($cours as $c) {
  672. if ($evalfaites == null) {
  673. $evalfaites = 0;
  674. }
  675. $query = $entityManager
  676. ->createQuery(
  677. 'SELECT ep
  678. FROM App\Entity\Epreuve ep
  679. JOIN ep.cours c
  680. WHERE c.idcours = :idcours
  681. AND ep.idepreuve NOT IN (:listepreuve)'
  682. )
  683. ->setParameter('idcours', $c->getCours()->getIdcours())
  684. ->setParameter('listepreuve', $evalfaites);
  685. // on exclut les epréuves ou on a déjà une note
  686. $epreuves = $query->getResult();
  687. // On récupère le détail des niveaux d'exigence de chaque épreuve
  688. foreach ($epreuves as $e) {
  689. //dd($epreuves);
  690. //dd($e);
  691. $query = $entityManager
  692. ->createQuery(
  693. 'SELECT ev
  694. FROM App\Entity\Evaluation ev
  695. JOIN ev.epreuve e
  696. JOIN ev.note n
  697. WHERE e.idepreuve = :idepreuve
  698. AND n.idnote = :idnote
  699. ORDER BY n.codenote ASC'
  700. )
  701. ->setParameter('idepreuve', $e->getIdepreuve())
  702. ->setParameter('idnote', $noteA->getIdnote());
  703. $evaluationA = $query->getResult();
  704. $query = $entityManager
  705. ->createQuery(
  706. 'SELECT ev
  707. FROM App\Entity\Evaluation ev
  708. JOIN ev.epreuve e
  709. JOIN ev.note n
  710. WHERE e.idepreuve = :idepreuve
  711. AND n.idnote = :idnote
  712. ORDER BY n.codenote ASC'
  713. )
  714. ->setParameter('idepreuve', $e->getIdepreuve())
  715. ->setParameter('idnote', $noteC->getIdnote());
  716. $evaluationC = $query->getResult();
  717. $query = $entityManager
  718. ->createQuery(
  719. 'SELECT ev
  720. FROM App\Entity\Evaluation ev
  721. JOIN ev.epreuve e
  722. JOIN ev.note n
  723. WHERE e.idepreuve = :idepreuve
  724. AND n.idnote = :idnote
  725. ORDER BY n.codenote ASC'
  726. )
  727. ->setParameter('idepreuve', $e->getIdepreuve())
  728. ->setParameter('idnote', $noteF->getIdnote());
  729. $evaluationF = $query->getResult();
  730. $preResultat['epreuve'] = $e;
  731. $preResultat['evaluationA'] = $evaluationA;
  732. $preResultat['evaluationC'] = $evaluationC;
  733. $preResultat['evaluationF'] = $evaluationF;
  734. array_push($resultat, $preResultat);
  735. }
  736. }
  737. } else {
  738. $this->addFlash('error', 'Profil introuvable');
  739. return $this->redirectToRoute('app_ecleleve_index', [], Response::HTTP_SEE_OTHER);
  740. }
  741. //dd($resultat);
  742. return $this->render('ecleleve/prochaine-evaluation.html.twig', [
  743. 'resultat' => $resultat,
  744. 'eleve' => $eleve,
  745. 'diplome' => $diplome
  746. ]);
  747. }
  748. // Affiche la liste des cours
  749. #[Route('/cours', name: 'app_ecleleve_cours', methods: ['GET', 'POST'])]
  750. public function viewCours(Request $request): Response
  751. {
  752. // La personne a besoin d'être identifiée pour accéder à la ressource
  753. $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
  754. // Variables communes
  755. $entityManager = $this->entityManager;
  756. $session = $request->getSession();
  757. $utilisateur = $session->get("utilisateurconnecte");
  758. // Si la session n'est pas encore créée, on redirige sur le choix de l'espace
  759. if ($session->get('typeUtilisateur') == NULL) {
  760. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  761. }
  762. // Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
  763. // Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
  764. if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
  765. $this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
  766. return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
  767. }
  768. $eleve = null;
  769. if ($utilisateur != NULL) {
  770. if ($session->get('idelevedemo')) {
  771. $eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
  772. } else {
  773. // On récupère l'élève
  774. $eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
  775. array(
  776. 'utilisateur' => $utilisateur->getIdutilisateur()
  777. )
  778. );
  779. }
  780. }
  781. $diplome = NULL;
  782. if($eleve != NULL)
  783. {
  784. $diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
  785. array(
  786. 'eleve' => $eleve->getIdeleve()
  787. )
  788. );
  789. }
  790. $now = date_format(new DateTime(), ('Y-m-d'));
  791. if ($session->get('anneeUniversitaire') == NULL) {
  792. // On recherche si une année existe pour la date actuelle
  793. $query = $entityManager
  794. ->createQuery(
  795. 'SELECT a
  796. FROM App\Entity\Anneeuniversitaire a
  797. WHERE a.datedebut <= :now
  798. AND a.datefin >= :now
  799. order by a.libelleanneeuniversitaire DESC'
  800. )
  801. ->setParameter('now', $now);
  802. $anneeUniversitaireQuery = $query->getResult();
  803. // Si oui, on la sélectionne
  804. if (!empty($anneeUniversitaireQuery)) {
  805. $session->set('anneeUniversitaire', $anneeUniversitaireQuery[0]);
  806. } // Sinon on choisit la dernière année créée
  807. else
  808. {
  809. // On récupère la liste des années universitaires
  810. $anneesuniversitaire = $entityManager->getRepository(Anneeuniversitaire::class)->findAll();
  811. $session->set('anneeUniversitaire', $anneesuniversitaire[0]);
  812. }
  813. }
  814. $annee = $entityManager->getRepository(Anneeuniversitaire::class)->findOneBy(array(
  815. 'idanneeuniversitaire' => $session->get('anneeUniversitaire')->getIdanneeuniversitaire()
  816. ));
  817. // On récupère la liste des cursus
  818. $cursus = $entityManager->getRepository(Cursus::class)->findAll();
  819. // On défini la variable session si elle n'existe pas
  820. if ($session->get('cursus') == null) {
  821. $query = $entityManager
  822. ->createQuery(
  823. 'SELECT c
  824. FROM App\Entity\Cursus c
  825. ORDER BY c.libellecursus ASC'
  826. );
  827. $cursus = $query->getResult();
  828. $session->set('cursus', $cursus[0]);
  829. }
  830. $cursu = $entityManager->getRepository(Cursus::class)->findOneBy(array(
  831. 'idcursus' => $session->get('cursus')->getIdcursus()
  832. ));
  833. $semestre = null;
  834. if ($session->get('semestre')) {
  835. $semestre = $entityManager->getRepository(Semestre::class)->findOneBy(array(
  836. 'idsemestre' => $session->get('semestre')->getIdsemestre()
  837. ));
  838. }
  839. $form2 = $this->createFormBuilder()
  840. ->add('anneeuniversitaire', EntityType::class, [
  841. 'class' => Anneeuniversitaire::class,
  842. 'label' => "annee",
  843. 'translation_domain' => 'libelles',
  844. 'query_builder' => function (EntityRepository $er) {
  845. return $er->createQueryBuilder('u')
  846. ->orderBy('u.libelleanneeuniversitaire', 'DESC');
  847. },
  848. 'data' => $annee,
  849. 'attr' => ['onChange' => 'submit()']
  850. ])
  851. ->add('cursus', EntityType::class, [
  852. 'class' => Cursus::class,
  853. 'label' => 'cursus',
  854. 'translation_domain' => 'libelles',
  855. 'data' => $cursu,
  856. 'attr' => ['onChange' => 'submit()'],
  857. 'query_builder' => function (EntityRepository $er) {
  858. return $er->createQueryBuilder('c')
  859. ->orderBy('c.libellecursus', 'ASC');
  860. }
  861. ])
  862. ->add('semestre', EntityType::class, [
  863. 'class' => Semestre::class,
  864. 'label' => "periode",
  865. 'translation_domain' => 'libelles',
  866. 'query_builder' => function (EntityRepository $er) {
  867. return $er->createQueryBuilder('u')
  868. ->orderBy('u.ordre', 'DESC');
  869. },
  870. 'placeholder' => 'tous',
  871. 'data' => $semestre,
  872. 'attr' => ['onChange' => 'submit()']
  873. ])->getForm();
  874. $form2->handleRequest($request);
  875. if ($form2->isSubmitted() && $form2->isValid()) {
  876. if ($form2['anneeuniversitaire']->getData() != null) {
  877. $session->set('anneeUniversitaire', $form2['anneeuniversitaire']->getData());
  878. }
  879. if ($form2['cursus']->getData() != null) {
  880. $session->set('cursus', $form2['cursus']->getData());
  881. }
  882. if ($form2['semestre']->getData() != null) {
  883. $session->set('semestre', $form2['semestre']->getData());
  884. } else {
  885. $session->set('semestre', null);
  886. }
  887. }
  888. $conn = $entityManager->getConnection();
  889. $sql = "SELECT idcours FROM COURS WHERE 1 = 1";
  890. if ($session->get('anneeUniversitaire')) {
  891. $sql .= " AND COURS.anneeuniversitaire_id = " . $session->get('anneeUniversitaire')->getIdanneeuniversitaire();
  892. }
  893. if ($session->get('cursus')) {
  894. $sql .= " and COURS.cursus_id = " . $session->get('cursus')->getIdcursus();
  895. }
  896. if ($session->get('semestre')) {
  897. $sql = $sql . " and COURS.semestre_id = " . $session->get('semestre')->getIdsemestre();
  898. }
  899. $resultatidcours = $conn->executeQuery($sql)->fetchAll();
  900. // On récupère la liste de tous les cours pour l'année définie année
  901. $query = $entityManager
  902. ->createQuery(
  903. 'SELECT c
  904. FROM App\Entity\Cours c
  905. WHERE c.idcours IN (:mesidcours)'
  906. )
  907. ->setParameter('mesidcours', $resultatidcours);
  908. $cours = $query->getResult();
  909. $resultat = array();
  910. foreach ($cours as $c) {
  911. $preResultat = array();
  912. // On récupère toutes les épreuves du cours
  913. $epreuves = $entityManager->getRepository(Epreuve::class)->findBy(
  914. array(
  915. 'cours' => $c->getIdcours()
  916. ),
  917. array(
  918. 'referencecomposante' => 'ASC'
  919. ),
  920. );
  921. $inscriptioneleve = $entityManager->getRepository(Inscription::class)->findBy(
  922. array(
  923. 'cours' => $c->getIdcours(),
  924. 'eleve' => $eleve->getIdeleve()
  925. )
  926. );
  927. // On récupère toutes les évaluations des épreuves
  928. $evaluations = $entityManager->getRepository(Evaluation::class)->findBy(
  929. array(
  930. 'epreuve' => $epreuves
  931. ),
  932. array(
  933. 'idevaluation' => 'ASC'
  934. ),
  935. );
  936. $preResultat['cours'] = $c;
  937. $preResultat['epreuves'] = $epreuves;
  938. $preResultat['evaluations'] = $evaluations;
  939. $preResultat['inscriptioneleve'] = $inscriptioneleve;
  940. array_push($resultat, $preResultat);
  941. }
  942. return $this->renderForm('ecleleve/cours.html.twig', [
  943. 'form2' => $form2,
  944. 'resultat' => $resultat,
  945. 'eleve' => $eleve,
  946. 'diplome' => $diplome
  947. ]);
  948. }
  949. }