<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
// UX/Chartjs
use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
use Symfony\UX\Chartjs\Model\Chart;
// DateTime
use DateTime;
// Form
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// Controller
use App\Controller\EclacController;
// Classes
use App\Entity\Enseignant;
use App\Entity\Anneeuniversitaire;
use App\Entity\Enseignantcours;
use App\Entity\Cours;
use App\Entity\Parametre;
use App\Entity\Eleve;
use App\Entity\Inscription;
use App\Entity\Semestre;
use App\Entity\Diplome;
use App\Entity\Epreuve;
use App\Entity\Evaluation;
use App\Entity\Cursus;
use App\Entity\Niveau;
use App\Entity\Note;
use App\Entity\Utilisateur;
#[Route('/secured/eleve')]
class EcleleveController extends AbstractController
{
public function __construct(
private EntityManagerInterface $entityManager,
private ChartBuilderInterface $chartBuilder,
private EclacController $EclacController,
) {}
// Espace élève
#[Route('/', name: 'app_ecleleve_index', methods: ['GET', 'POST'])]
public function index(Request $request): Response
{
// La personne a besoin d'être identifiée pour accéder à la ressource
// $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
// Variables communes
$entityManager = $this->entityManager;
$session = $request->getSession();
$parametre = $entityManager->getRepository(Parametre::class)->findOneBy(array(
"idparametre" => 1,
));
$utilisateur = $session->get("utilisateurconnecte");
// Si la session n'est pas encore créée, on redirige sur le choix de l'espace
if ($session->get('typeUtilisateur') == NULL) {
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
} else {
// Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
$this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
}
$semestre = NULL;
if (isset($_POST["frmidsemetre"])) {
$session->set("idsemestre", $_POST["frmidsemetre"]);
}
if ($session->get("idsemestre")) {
$semestre = $entityManager->getRepository(Semestre::class)->find($session->get("idsemestre"));
}
if ($session->get('idelevedemo') != null) {
// Mode DEMO / ADMIN
$eleve = $entityManager->getRepository(Eleve::class)->find($session->get("idelevedemo"));
} else {
$eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
array(
'utilisateur' => $utilisateur->getIdutilisateur()
)
);
}
// On récupère les inscriptions de l'élève
$inscriptions = $entityManager->getRepository(Inscription::class)->findBy(
array(
"eleve" => $eleve
),
array(
'datecrea' => 'DESC'
)
);
$listeIdInscriptions = "";
foreach($inscriptions as $inscription) {
$listeIdInscriptions .= $inscription->getIdinscription() . ",";
}
// On récupère les cursus de l'élève
$query = $entityManager->getConnection()->prepare(
'SELECT C.*
FROM CURSUS AS C
JOIN COURS AS CO ON CO.cursus_id = C.idcursus
JOIN INSCRIPTION AS I ON I.cours_id = CO.idcours
WHERE I.idinscription IN (:listeIdInscriptions)
GROUP BY C.idcursus
ORDER BY I.datecrea DESC'
);
$query->bindValue('listeIdInscriptions', $listeIdInscriptions);
$result = $query->execute();
$cursus = $result->fetchAllAssociative();
$chart = NULL;
$semestres = NULL;
$niveaux = NULL;
$diplome = NULL;
if(!empty($cursus)) {
$cursusActuel = $entityManager->getRepository(Cursus::class)->findOneBy(['idcursus' => $cursus[0]['idcursus']]);
// On récupère les semestres de l'élève à partir de son cursus actuel (Dernier en date)
$query = $entityManager->getConnection()->prepare(
'SELECT S.*, REQ.nb
FROM SEMESTRE AS S
JOIN CURSUSSEMESTRE AS CS ON CS.semestre_id = S.idsemestre
JOIN CURSUS AS C ON C.idcursus = CS.cursus_id
LEFT OUTER JOIN
(SELECT S.*, COUNT(*) AS nb
FROM SEMESTRE AS S
LEFT OUTER JOIN COURS AS C ON C.semestre_id = S.idsemestre
LEFT OUTER JOIN EPREUVE AS E ON E.cours_id = C.idcours
LEFT OUTER JOIN EVALUATIONELEVE AS EE ON EE.epreuve_id = E.idepreuve
LEFT OUTER JOIN ELEVE AS EL ON EL.ideleve = EE.eleve_id
WHERE EL.ideleve = :ideleve
GROUP BY S.idsemestre)
AS REQ ON S.idsemestre = REQ.idsemestre
WHERE C.idcursus = :idcursus
ORDER BY S.ordre'
);
$query->bindValue('ideleve', 0 . $eleve->getIdeleve());
$query->bindValue('idcursus', $cursusActuel->getIdcursus());
$result = $query->execute();
$semestres = $result->fetchAllAssociative();
// On récupère les niveaux de l'élève à partir de son cursus actuel (Dernier en date)
$query = $entityManager->getConnection()->prepare(
'SELECT N.*, CR.*
FROM NIVEAU AS N
JOIN COULEURROSACE AS CR ON CR.idcouleurrosace = N.couleurrosace_id
JOIN CURSUSNIVEAU AS CN ON CN.niveau_id = N.idniveau
JOIN CURSUS AS C ON C.idcursus = CN.cursus_id
WHERE C.idcursus = :idcursus
AND N.codeniveau IS NOT NULL
ORDER BY N.ordre'
);
$query->bindValue('idcursus', $cursusActuel->getIdcursus());
$result = $query->execute();
$niveaux = $result->fetchAllAssociative();
// On récupère le diplôme de l'élève
$diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
array(
'eleve' => $eleve->getIdeleve()
)
);
// On créer la rosace
$chart = $this->createChartRadar($utilisateur, $semestre, $eleve, $cursusActuel);
} else {
$this->addFlash('error', 'Aucun cursus trouvé.');
}
return $this->render('ecleleve/espace-eleve.html.twig', [
'chart' => $chart,
'eleve' => $eleve,
'semestres' => $semestres,
'semestre' => $semestre,
'diplome' => $diplome,
"parametre" => $parametre,
"niveaux" => $niveaux,
"cursus" => $cursus[0] ?? NULL,
]);
}
// Permet de créer la rosace
public function createChartRadar(Utilisateur $utilisateur, Semestre $semestre = null, Eleve $eleve, Cursus $cursus): Chart|bool
{
// Variables communes
$entityManager = $this->entityManager;
$chartBuilder = $this->chartBuilder;
$now = date_format(new DateTime(), ('Y-m-d'));
// On récupère les niveaux de l'élève à partir du cursus
$query = $entityManager->getConnection()->prepare(
'SELECT N.*, CR.*
FROM NIVEAU AS N
JOIN COULEURROSACE AS CR ON CR.idcouleurrosace = N.couleurrosace_id
JOIN CURSUSNIVEAU AS CN ON CN.niveau_id = N.idniveau
JOIN CURSUS AS C ON C.idcursus = CN.cursus_id
WHERE C.idcursus = :idcursus
AND N.codeniveau IS NOT NULL
ORDER BY N.ordre'
);
$query->bindValue('idcursus', $cursus->getIdcursus());
$result = $query->execute();
$niveaux = $result->fetchAllAssociative();
// On recherche si une année existe pour la date actuelle
$query = $entityManager
->createQuery(
'SELECT a
FROM App\Entity\Anneeuniversitaire a
WHERE a.datedebut <= :now
AND a.datefin >= :now'
)
->setParameter('now', $now);
$anneeUniversitaireQuery = $query->getResult();
// Si oui, on la sélectionne
if (!empty($anneeUniversitaireQuery)) {
$anneeUniversitaire = $anneeUniversitaireQuery[0];
} else {
// On récupère la liste des années universitaires
$anneesuniversitaire = $entityManager->getRepository(Anneeuniversitaire::class)->findAll();
$anneeUniversitaire = $anneesuniversitaire[0];
}
// On récupère les composantes de l'année et du cursus sélectionnés
$query = $entityManager
->createQuery(
'SELECT cp
FROM App\Entity\Composante cp
JOIN cp.competence c
JOIN c.anneeuniversitaire a
JOIN c.cursus cu
WHERE a.idanneeuniversitaire = :idanneeuniversitaire
AND cu.idcursus = :idcursus
order by c.codecompetence, cp.codecomposante '
)
->setParameter('idanneeuniversitaire', $anneeUniversitaire->getIdanneeuniversitaire())
->setParameter('idcursus', $cursus->getIdcursus());
$composantes = $query->getResult();
$arrayLabels = array();
$arrayDatasets = array();
if (!empty($composantes))
{
if ($utilisateur != NULL)
{
$tabNotesTotal = array();
$tabNotes = array();
$count = 0;
foreach($niveaux as $niveau)
{
$niveau = $entityManager->getRepository(Niveau::class)->findOneBy(['idniveau' => $niveau['idniveau']]);
$array[$niveau->getCodeniveau()] = [];
$tabNotes[$niveau->getCodeniveau()] = [];
$arrayDataRedirectLabel[$niveau->getCodeniveau()] = [];
$arrayDataTooltipTitle[$niveau->getCodeniveau()] = [];
foreach ($composantes as $composante)
{
if($count == 0)
{
$label = "";
$arrayLabelsLabels = array();
array_push($arrayLabelsLabels, $composante->getCodecomposante());
$arrayLibelle = explode(' ', $composante->getLibellecomposante());
$nbcar = 0;
for ($i = 0; $i < count($arrayLibelle); $i++) {
$nbcar = $nbcar + (strlen($arrayLibelle[$i]));
if ($nbcar < 15) {
$label .= $arrayLibelle[$i] . ' ';
} else {
array_push($arrayLabelsLabels, $label);
$nbcar = strlen($arrayLibelle[$i]);
$label = $arrayLibelle[$i] . ' ';
}
}
if ($label != "") {
array_push($arrayLabelsLabels, $label);
}
array_push($arrayLabels, $arrayLabelsLabels);
}
$maquery = 'SELECT ee, no
FROM App\Entity\Evaluationeleve ee
JOIN ee.epreuve e
JOIN e.composante cp
JOIN e.niveau n
JOIN e.cours c
JOIN c.semestre s
JOIN ee.eleve el
JOIN ee.note no
WHERE el.ideleve = :ideleve
AND n.codeniveau = :codeniveau
AND cp.codecomposante = :codecomposante
AND no.idnote != 4';
if ($semestre)
{
$maquery .= ' AND s.ordre <= :ordre';
}
$maquery .= ' ORDER BY n.ordre DESC';
// On récupère les évaluations de l'élève connecté
$query = $entityManager
->createQuery(
$maquery
)
->setParameter('ideleve', $eleve->getIdeleve())
->setParameter('codeniveau', $niveau->getCodeniveau())
->setParameter('codecomposante', $composante->getCodecomposante());
if ($semestre) {
$query->setParameter('ordre', $semestre->getOrdre());
}
$array[$niveau->getCodeniveau()]['composante'] = $composante;
$array[$niveau->getCodeniveau()]['evaluations'] = $query->getResult();
array_push($tabNotes[$niveau->getCodeniveau()], $array[$niveau->getCodeniveau()]);
array_push($arrayDataTooltipTitle[$niveau->getCodeniveau()], $composante->getLibellecomposante() . ' - ' . $niveau->getLibelleniveau());
array_push($arrayDataRedirectLabel[$niveau->getCodeniveau()], str_replace('_', $niveau->getCodeniveau(), $composante->getCodecomposante()));
}
$tabNotes['niveau'] = $niveau;
$tabNotes['notes'] = $tabNotes[$niveau->getCodeniveau()];
$tabNotes['couleur'] = $niveau->getCouleurrosace()->getHexa();
$tabNotes['couleurName'] = $niveau->getCouleurrosace()->getLibbootstrap();
$tabNotes['tooltips'] = $arrayDataTooltipTitle[$niveau->getCodeniveau()];
$tabNotes['redirectLabels'] = $arrayDataRedirectLabel[$niveau->getCodeniveau()];
array_push($tabNotesTotal, $tabNotes);
$count++;
}
$countNiveau = 0;
foreach ($tabNotesTotal as $tabNoteTotal)
{
$countNiveau++;
$arrayData = array();
$arrayData['label'] = $tabNoteTotal['niveau']->getLibelleniveau();
$arrayData['borderColor'] = 'rgba(255, 255, 255, 0)';
$arrayData['backgroundColor'] = 'rgba(255, 255, 255, 0)';
$arrayData['fill'] = false;
$arrayData['pointBackgroundColor'] = $tabNoteTotal['couleur'];
$arrayData['pointRadius'] = '5';
$arrayData['spanGaps'] = false;
$arrayData['tooltip']['title'] = $tabNoteTotal['tooltips'];
$arrayData['redirectLabels'] = $tabNoteTotal['redirectLabels'];
$arrayDataData = array();
$arrayDataPoints = array();
$arrayDataLabels = array();
foreach ($tabNoteTotal['notes'] as $notes) {
array_push($arrayDataData, $countNiveau);
if (!empty($notes['evaluations'])) {
$meilleureNote = "";
foreach($notes['evaluations'] as $evaluation)
{
switch ($evaluation->getNote()->getCodenote()) {
case 'A':
if($meilleureNote == "" || $meilleureNote == "C" || $meilleureNote == "F")
{
$meilleureNote = "A";
}
break;
case 'C':
if($meilleureNote == "" || $meilleureNote == "F")
{
$meilleureNote = "C";
}
break;
case 'F':
if($meilleureNote == "")
{
$meilleureNote = "F";
}
break;
}
}
switch($meilleureNote)
{
case 'A':
array_push($arrayDataPoints, 'starPoint' . $tabNoteTotal['couleurName']);
break;
case 'C':
array_push($arrayDataPoints, 'checkPoint' . $tabNoteTotal['couleurName']);
break;
case 'F':
array_push($arrayDataPoints, 'squarePointGris');
break;
}
array_push($arrayDataLabels, strval(count($notes['evaluations'])));
} else {
array_push($arrayDataPoints, 'squarePointGris');
array_push($arrayDataLabels, '');
}
}
$arrayData['data'] = $arrayDataData;
$arrayData['pointStyle'] = $arrayDataPoints;
$arrayData['labelValue'] = $arrayDataLabels;
array_push($arrayDatasets, $arrayData);
}
}
else
{
return false;
}
}
else
{
return false;
}
$chartRadar = $chartBuilder->createChart(Chart::TYPE_RADAR);
$chartRadar->setData(
array(
'labels' => $arrayLabels,
'datasets' => $arrayDatasets,
)
);
$chartRadar->setOptions([
'responsive' => true,
'layout' => [
'padding' => 0
],
'elements' => [
'point' => [
'radius' => 3,
'hitRadius' => 0,
'hoverRadius' => 10,
],
],
'plugins' => [
'legend' => [
'display' => false,
],
'datalabels' => [
'align' => 'bottom',
'offset' => 8,
],
'tooltip' => [
'position' => 'nearest',
'yAlign' => 'bottom',
'xAlign' => 'center',
'backgroundColor' => "rgba(57, 127, 197, 0.8)",
'displayColors' => false,
],
],
'scales' => [
'r' => [
'min' => -1,
'max' => $countNiveau,
'ticks' => [
'stepSize' => 1,
'display' => false,
],
'grid' => [
'circular' => true,
],
'angleLines' => [
'display' => true,
'borderDash' => [6, 6],
],
'pointLabels' => [
'padding' => 30,
'font' => [
'size' => 10,
],
],
'beginAtZero' => true,
],
],
]);
return $chartRadar;
}
// Affiche les notes de l'élève
#[Route('/mes-notes', name: 'app_ecleleve_note', methods: ['GET'])]
public function viewNote(Request $request): Response
{
// La personne a besoin d'être identifiée pour accéder à la ressource
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
// Variables communes
$entityManager = $this->entityManager;
$session = $request->getSession();
$utilisateur = $session->get("utilisateurconnecte");
// Si la session n'est pas encore créée, on redirige sur le choix de l'espace
if ($session->get('typeUtilisateur') == NULL) {
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
// Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
$this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
// On récupère les notes
$noteA = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'A'
)
);
$noteC = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'C'
)
);
$noteF = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'F'
)
);
$resultat = array();
if ($utilisateur != NULL)
{
$preResultat = array();
if ($session->get('idelevedemo'))
{
$eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
}
else
{
$eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
array(
'utilisateur' => $utilisateur->getIdutilisateur()
)
);
}
$diplome = NULL;
if($eleve != NULL)
{
$diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
array(
'eleve' => $eleve->getIdeleve()
)
);
}
// On récupère les évaluations de l'élève connecté
$query = $entityManager
->createQuery(
'SELECT ee
FROM App\Entity\Evaluationeleve ee
JOIN ee.eleve el
WHERE el.ideleve = :ideleve'
)
->setParameter('ideleve', $eleve->getIdeleve());
$notes = $query->getResult();
// dd($notes);
// On récupère le détail des niveaux d'exigence de chaque épreuve
foreach ($notes as $n) {
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
->setParameter('idnote', $noteA->getIdnote());
$evaluationA = $query->getResult();
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
->setParameter('idnote', $noteC->getIdnote());
$evaluationC = $query->getResult();
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $n->getEpreuve()->getIdepreuve())
->setParameter('idnote', $noteF->getIdnote());
$evaluationF = $query->getResult();
$preResultat['notesEleve'] = $n;
$preResultat['evaluationA'] = $evaluationA;
$preResultat['evaluationC'] = $evaluationC;
$preResultat['evaluationF'] = $evaluationF;
array_push($resultat, $preResultat);
}
} else {
$this->addFlash('error', 'Profil introuvable');
return $this->redirectToRoute('app_ecleleve_index', [], Response::HTTP_SEE_OTHER);
}
return $this->render('ecleleve/note.html.twig', [
'resultat' => $resultat,
'eleve' => $eleve,
'diplome' => $diplome
]);
}
// Affiche les évaluations à venir
#[Route('/prochaines-evaluations', name: 'app_ecleleve_prochaines-evaluations', methods: ['GET'])]
public function viewProchainesEvaluations(Request $request): Response
{
// La personne a besoin d'être identifiée pour accéder à la ressource
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
// Variables communes
$entityManager = $this->entityManager;
$session = $request->getSession();
$utilisateur = $session->get("utilisateurconnecte");
// Si la session n'est pas encore créée, on redirige sur le choix de l'espace
if ($session->get('typeUtilisateur') == NULL) {
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
// Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
$this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
// récupération eleve à montrer
if ($session->get('idelevedemo')) {
$eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
} else {
$eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
array(
'utilisateur' => $utilisateur->getIdutilisateur()
)
);
}
$diplome = NULL;
if($eleve != NULL)
{
$diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
array(
'eleve' => $eleve->getIdeleve()
)
);
}
// On récupère les notes
$noteA = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'A'
)
);
$noteC = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'C'
)
);
$noteF = $entityManager->getRepository(Note::class)->findOneBy(
array(
'codenote' => 'F'
)
);
$resultat = array();
if ($utilisateur != NULL) {
$preResultat = array();
if ($session->get('idelevedemo')) {
$eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
} else {
// On récupère l'élève
$eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
array(
'utilisateur' => $utilisateur->getIdutilisateur()
)
);
}
// On récupère les cours auxquels l'élève est inscrit
$query = $entityManager
->createQuery(
'SELECT i
FROM App\Entity\Inscription i
JOIN i.eleve el
WHERE el.ideleve = :ideleve'
)
->setParameter('ideleve', $eleve->getIdeleve());
$cours = $query->getResult();
//dd($cours);
// On récupère les epreuve qu'a déjà passé l"'élève
$query = $entityManager
->createQuery(
'SELECT ep.idepreuve
FROM App\Entity\Evaluationeleve ev
JOIN ev.epreuve ep
join ev.eleve el
WHERE el.ideleve = :ideleve'
)
->setParameter('ideleve', $eleve->getidEleve());
// on exclut les epréuves ou on a déjà une note
$evalfaites = $query->getResult();
// On récupère les épreuves de chaque cours
foreach ($cours as $c) {
if ($evalfaites == null) {
$evalfaites = 0;
}
$query = $entityManager
->createQuery(
'SELECT ep
FROM App\Entity\Epreuve ep
JOIN ep.cours c
WHERE c.idcours = :idcours
AND ep.idepreuve NOT IN (:listepreuve)'
)
->setParameter('idcours', $c->getCours()->getIdcours())
->setParameter('listepreuve', $evalfaites);
// on exclut les epréuves ou on a déjà une note
$epreuves = $query->getResult();
// On récupère le détail des niveaux d'exigence de chaque épreuve
foreach ($epreuves as $e) {
//dd($epreuves);
//dd($e);
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $e->getIdepreuve())
->setParameter('idnote', $noteA->getIdnote());
$evaluationA = $query->getResult();
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $e->getIdepreuve())
->setParameter('idnote', $noteC->getIdnote());
$evaluationC = $query->getResult();
$query = $entityManager
->createQuery(
'SELECT ev
FROM App\Entity\Evaluation ev
JOIN ev.epreuve e
JOIN ev.note n
WHERE e.idepreuve = :idepreuve
AND n.idnote = :idnote
ORDER BY n.codenote ASC'
)
->setParameter('idepreuve', $e->getIdepreuve())
->setParameter('idnote', $noteF->getIdnote());
$evaluationF = $query->getResult();
$preResultat['epreuve'] = $e;
$preResultat['evaluationA'] = $evaluationA;
$preResultat['evaluationC'] = $evaluationC;
$preResultat['evaluationF'] = $evaluationF;
array_push($resultat, $preResultat);
}
}
} else {
$this->addFlash('error', 'Profil introuvable');
return $this->redirectToRoute('app_ecleleve_index', [], Response::HTTP_SEE_OTHER);
}
//dd($resultat);
return $this->render('ecleleve/prochaine-evaluation.html.twig', [
'resultat' => $resultat,
'eleve' => $eleve,
'diplome' => $diplome
]);
}
// Affiche la liste des cours
#[Route('/cours', name: 'app_ecleleve_cours', methods: ['GET', 'POST'])]
public function viewCours(Request $request): Response
{
// La personne a besoin d'être identifiée pour accéder à la ressource
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED');
// Variables communes
$entityManager = $this->entityManager;
$session = $request->getSession();
$utilisateur = $session->get("utilisateurconnecte");
// Si la session n'est pas encore créée, on redirige sur le choix de l'espace
if ($session->get('typeUtilisateur') == NULL) {
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
// Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
// Si l'utilisateur n'est pas de type élève, on le redirige vers le choix de son espace
if (($session->get('typeUtilisateur') != 'Élève') && ($session->get('idelevedemo') == null)) {
$this->addFlash('error', 'Vous n\'avez pas les droits d\'accéder à cette ressource');
return $this->redirectToRoute('app_eclac_choix-espace', [], Response::HTTP_SEE_OTHER);
}
$eleve = null;
if ($utilisateur != NULL) {
if ($session->get('idelevedemo')) {
$eleve = $entityManager->getRepository(Eleve::class)->find($session->get('idelevedemo'));
} else {
// On récupère l'élève
$eleve = $entityManager->getRepository(Eleve::class)->findOneBy(
array(
'utilisateur' => $utilisateur->getIdutilisateur()
)
);
}
}
$diplome = NULL;
if($eleve != NULL)
{
$diplome = $entityManager->getRepository(Diplome::class)->findOneBy(
array(
'eleve' => $eleve->getIdeleve()
)
);
}
$now = date_format(new DateTime(), ('Y-m-d'));
if ($session->get('anneeUniversitaire') == NULL) {
// On recherche si une année existe pour la date actuelle
$query = $entityManager
->createQuery(
'SELECT a
FROM App\Entity\Anneeuniversitaire a
WHERE a.datedebut <= :now
AND a.datefin >= :now
order by a.libelleanneeuniversitaire DESC'
)
->setParameter('now', $now);
$anneeUniversitaireQuery = $query->getResult();
// Si oui, on la sélectionne
if (!empty($anneeUniversitaireQuery)) {
$session->set('anneeUniversitaire', $anneeUniversitaireQuery[0]);
} // Sinon on choisit la dernière année créée
else
{
// On récupère la liste des années universitaires
$anneesuniversitaire = $entityManager->getRepository(Anneeuniversitaire::class)->findAll();
$session->set('anneeUniversitaire', $anneesuniversitaire[0]);
}
}
$annee = $entityManager->getRepository(Anneeuniversitaire::class)->findOneBy(array(
'idanneeuniversitaire' => $session->get('anneeUniversitaire')->getIdanneeuniversitaire()
));
// On récupère la liste des cursus
$cursus = $entityManager->getRepository(Cursus::class)->findAll();
// On défini la variable session si elle n'existe pas
if ($session->get('cursus') == null) {
$query = $entityManager
->createQuery(
'SELECT c
FROM App\Entity\Cursus c
ORDER BY c.libellecursus ASC'
);
$cursus = $query->getResult();
$session->set('cursus', $cursus[0]);
}
$cursu = $entityManager->getRepository(Cursus::class)->findOneBy(array(
'idcursus' => $session->get('cursus')->getIdcursus()
));
$semestre = null;
if ($session->get('semestre')) {
$semestre = $entityManager->getRepository(Semestre::class)->findOneBy(array(
'idsemestre' => $session->get('semestre')->getIdsemestre()
));
}
$form2 = $this->createFormBuilder()
->add('anneeuniversitaire', EntityType::class, [
'class' => Anneeuniversitaire::class,
'label' => "annee",
'translation_domain' => 'libelles',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.libelleanneeuniversitaire', 'DESC');
},
'data' => $annee,
'attr' => ['onChange' => 'submit()']
])
->add('cursus', EntityType::class, [
'class' => Cursus::class,
'label' => 'cursus',
'translation_domain' => 'libelles',
'data' => $cursu,
'attr' => ['onChange' => 'submit()'],
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.libellecursus', 'ASC');
}
])
->add('semestre', EntityType::class, [
'class' => Semestre::class,
'label' => "periode",
'translation_domain' => 'libelles',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.ordre', 'DESC');
},
'placeholder' => 'tous',
'data' => $semestre,
'attr' => ['onChange' => 'submit()']
])->getForm();
$form2->handleRequest($request);
if ($form2->isSubmitted() && $form2->isValid()) {
if ($form2['anneeuniversitaire']->getData() != null) {
$session->set('anneeUniversitaire', $form2['anneeuniversitaire']->getData());
}
if ($form2['cursus']->getData() != null) {
$session->set('cursus', $form2['cursus']->getData());
}
if ($form2['semestre']->getData() != null) {
$session->set('semestre', $form2['semestre']->getData());
} else {
$session->set('semestre', null);
}
}
$conn = $entityManager->getConnection();
$sql = "SELECT idcours FROM COURS WHERE 1 = 1";
if ($session->get('anneeUniversitaire')) {
$sql .= " AND COURS.anneeuniversitaire_id = " . $session->get('anneeUniversitaire')->getIdanneeuniversitaire();
}
if ($session->get('cursus')) {
$sql .= " and COURS.cursus_id = " . $session->get('cursus')->getIdcursus();
}
if ($session->get('semestre')) {
$sql = $sql . " and COURS.semestre_id = " . $session->get('semestre')->getIdsemestre();
}
$resultatidcours = $conn->executeQuery($sql)->fetchAll();
// On récupère la liste de tous les cours pour l'année définie année
$query = $entityManager
->createQuery(
'SELECT c
FROM App\Entity\Cours c
WHERE c.idcours IN (:mesidcours)'
)
->setParameter('mesidcours', $resultatidcours);
$cours = $query->getResult();
$resultat = array();
foreach ($cours as $c) {
$preResultat = array();
// On récupère toutes les épreuves du cours
$epreuves = $entityManager->getRepository(Epreuve::class)->findBy(
array(
'cours' => $c->getIdcours()
),
array(
'referencecomposante' => 'ASC'
),
);
$inscriptioneleve = $entityManager->getRepository(Inscription::class)->findBy(
array(
'cours' => $c->getIdcours(),
'eleve' => $eleve->getIdeleve()
)
);
// On récupère toutes les évaluations des épreuves
$evaluations = $entityManager->getRepository(Evaluation::class)->findBy(
array(
'epreuve' => $epreuves
),
array(
'idevaluation' => 'ASC'
),
);
$preResultat['cours'] = $c;
$preResultat['epreuves'] = $epreuves;
$preResultat['evaluations'] = $evaluations;
$preResultat['inscriptioneleve'] = $inscriptioneleve;
array_push($resultat, $preResultat);
}
return $this->renderForm('ecleleve/cours.html.twig', [
'form2' => $form2,
'resultat' => $resultat,
'eleve' => $eleve,
'diplome' => $diplome
]);
}
}