diff --git a/eleve/dashboard.php b/eleve/dashboard.php index 6cee88b..6702ee1 100644 --- a/eleve/dashboard.php +++ b/eleve/dashboard.php @@ -32,6 +32,7 @@ if ($isEleveLibre) { $queryEvals = "SELECT DISTINCT e.*, COALESCE(t.statut, 'non_commence') as statut_tentative, t.note as note_obtenue, + t.note_sur as note_sur_obtenue, t.date_debut as date_tentative FROM evaluations e INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation @@ -53,6 +54,7 @@ if ($isEleveLibre) { ae.date_fin as fin_acces, COALESCE(t.statut, 'non_commence') as statut_tentative, t.note as note_obtenue, + t.note_sur as note_sur_obtenue, t.date_debut as date_tentative FROM evaluations e INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation @@ -95,7 +97,7 @@ $moyenne4Dernieres = 0; if (!empty($dernieresEvals)) { $somme_notes_sur_20 = 0; foreach ($dernieresEvals as $eval) { - $note_sur_20 = $eval['nb_questions'] > 0 ? ($eval['note'] / $eval['nb_questions']) * 20 : 0; + $note_sur_20 = $eval['note_sur'] > 0 ? ($eval['note'] / $eval['note_sur']) * 20 : 0; $somme_notes_sur_20 += $note_sur_20; } $moyenne_brute = $somme_notes_sur_20 / count($dernieresEvals); @@ -108,6 +110,7 @@ $queryToutesEvals = "SELECT e.titre, e.description, te.note, + te.note_sur, te.pourcentage, te.date_fin FROM tentatives_eleves te @@ -122,8 +125,8 @@ $toutesEvals = $db->fetchAll($queryToutesEvals, [$user['id_utilisateur']]); $queryStats = "SELECT COUNT(DISTINCT t.id_evaluation) as nb_evaluations_passees, COUNT(CASE WHEN t.statut = 'terminee' THEN 1 END) as nb_evaluations_terminees, - AVG(CASE WHEN t.statut = 'terminee' - THEN (t.note / (SELECT COUNT(*) FROM questions WHERE id_evaluation = t.id_evaluation)) * 20 + AVG(CASE WHEN t.statut = 'terminee' AND t.note_sur > 0 + THEN (t.note / t.note_sur) * 20 ELSE NULL END) as moyenne_generale FROM tentatives_eleves t WHERE t.id_eleve = ?"; @@ -555,8 +558,9 @@ if ($stats['moyenne_generale'] !== null) {
0 ? ($eval['note'] / $eval['nb_questions']) * 20 : 0; + // Convertir la note brute en note sur 20 en utilisant le barème réel + // note_sur = barème total (80, 50, 20, etc.) + $note_sur_20 = $eval['note_sur'] > 0 ? ($eval['note'] / $eval['note_sur']) * 20 : 0; // Arrondir au demi-point supérieur $note_arrondie = ceil($note_sur_20 * 2) / 2; @@ -575,7 +579,7 @@ if ($stats['moyenne_generale'] !== null) {
- / questions + / points
/20 @@ -654,13 +658,16 @@ if ($stats['moyenne_generale'] !== null) { fetchOne($queryNbQ, [$eval['id_evaluation']]); - $nb_q = $resultNbQ['nb'] ?? 1; - - // Calculer la note sur 20 - $note_sur_20 = ($eval['note_obtenue'] / $nb_q) * 20; + // Utiliser note_sur si disponible, sinon calculer avec nb questions + if (isset($eval['note_sur_obtenue']) && $eval['note_sur_obtenue'] > 0) { + $note_sur_20 = ($eval['note_obtenue'] / $eval['note_sur_obtenue']) * 20; + } else { + // Fallback : calculer avec nb questions + $queryNbQ = "SELECT COUNT(*) as nb FROM questions WHERE id_evaluation = ?"; + $resultNbQ = $db->fetchOne($queryNbQ, [$eval['id_evaluation']]); + $nb_q = $resultNbQ['nb'] ?? 1; + $note_sur_20 = ($eval['note_obtenue'] / $nb_q) * 20; + } $note_affichee = ceil($note_sur_20 * 2) / 2; ?> @@ -705,13 +712,11 @@ if ($stats['moyenne_generale'] !== null) { return `Eval ${index + 1}\n${date.getDate()}/${date.getMonth() + 1}`; }); - // Récupérer le nombre de questions pour chaque évaluation (via AJAX) - // Pour simplifier, on utilise le pourcentage pour recalculer + // Récupérer le nombre de questions pour chaque évaluation + // Utiliser note_sur (barème total) pour calculer la note sur 20 const notes = toutesEvaluations.map(e => { - // note brute → note sur 20 via le pourcentage - // pourcentage = (note / nb_questions) * 100 - // donc note_sur_20 = (pourcentage / 100) * 20 = pourcentage / 5 - const note_sur_20 = parseFloat(e.pourcentage) / 5; + // note / note_sur * 20 + const note_sur_20 = (parseFloat(e.note) / parseFloat(e.note_sur)) * 20; return Math.ceil(note_sur_20 * 2) / 2; // Arrondir demi-point sup });