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) {
- = number_format($questions_reussies, 1) ?>/= $eval['nb_questions'] ?> questions
+ = number_format($questions_reussies, 1) ?>/= number_format($eval['note_sur'], 0) ?> points
= number_format($note_arrondie, 1) ?>/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
});