diff --git a/eleve/dashboard.php b/eleve/dashboard.php index 5476813..62bba8b 100644 --- a/eleve/dashboard.php +++ b/eleve/dashboard.php @@ -1,7 +1,7 @@ fetchAll($query4Dernieres, [$user['id_utilisateur']]); -// Ajouter le nombre de questions pour chaque évaluation -foreach ($dernieresEvals as &$eval) { - $queryNbQuestions = "SELECT COUNT(*) as nb FROM questions WHERE id_evaluation = ?"; - $result = $db->fetchOne($queryNbQuestions, [$eval['id_evaluation']]); - $eval['nb_questions'] = $result['nb'] ?? 0; -} - -// Calculer la moyenne des 4 dernières +// Calculer la moyenne des 4 dernières (arrondie au demi-point supérieur) $moyenne4Dernieres = 0; if (!empty($dernieresEvals)) { - $notes = array_filter(array_column($dernieresEvals, 'note'), function($n) { - return $n !== null && is_numeric($n); - }); - if (!empty($notes)) { - $moyenne4Dernieres = array_sum($notes) / count($notes); - } + $somme = array_sum(array_column($dernieresEvals, 'note')); + $moyenne_brute = $somme / count($dernieresEvals); + $moyenne4Dernieres = ceil($moyenne_brute * 2) / 2; // Arrondi demi-point sup } // Récupérer TOUTES les évaluations terminées pour le graphique @@ -127,7 +120,6 @@ $queryStats = "SELECT COUNT(CASE WHEN t.statut = 'terminee' THEN 1 END) as nb_evaluations_terminees, AVG(CASE WHEN t.statut = 'terminee' THEN t.note ELSE NULL END) as moyenne_generale FROM tentatives_eleves t - INNER JOIN evaluations e ON t.id_evaluation = e.id_evaluation WHERE t.id_eleve = ?"; $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ @@ -136,6 +128,11 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ 'moyenne_generale' => null ]; +// Arrondir la moyenne générale au demi-point supérieur +if ($stats['moyenne_generale'] !== null) { + $stats['moyenne_generale'] = ceil($stats['moyenne_generale'] * 2) / 2; +} + ?> @@ -262,16 +259,12 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ margin-bottom: 20px; padding-bottom: 10px; border-bottom: 2px solid #f0f0f0; - display: flex; - justify-content: space-between; - align-items: center; } .dernieres-evals-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; - margin-bottom: 20px; } .eval-card-small { @@ -297,10 +290,12 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ text-overflow: ellipsis; } - .eval-card-small .chapitre { + .eval-card-small .description { font-size: 11px; color: #666; margin-bottom: 12px; + height: 32px; + overflow: hidden; } .note-display-large { @@ -311,7 +306,7 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ } .note-fraction { - font-size: 14px; + font-size: 13px; color: #666; font-weight: 600; } @@ -326,6 +321,7 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ font-size: 11px; color: #999; text-align: right; + margin-top: 5px; } .moyenne-4 { @@ -334,6 +330,9 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ padding: 20px; border-radius: 10px; text-align: center; + display: flex; + flex-direction: column; + justify-content: center; } .moyenne-4 h3 { @@ -486,13 +485,6 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ border-color: #2196f3; color: #1565c0; } - - .no-data-message { - text-align: center; - padding: 40px; - color: #999; - font-style: italic; - } @@ -530,7 +522,7 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [

📊 Moyenne générale

1): ?> @@ -553,35 +545,40 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [
-

- 📋 Mes 4 dernières évaluations -

+

📋 Mes 4 dernières évaluations

- +

-
- 50 ? '...' : '') : 'Évaluation terminée' ?> +
+
- 0): ?>
- / questions + / questions
-
- /20 + /20
%
+
+ ⏱️ +
@@ -592,12 +589,10 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ - 0): ?>
-

Moyenne sur ces évaluation 1 ? 's' : '' ?>

-
/20
+

Moyenne sur ces 4 évaluations

+
/20
-
@@ -634,6 +629,7 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [

Durée : min + | Note : /

@@ -648,8 +644,11 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ ?> + - /20 + /20 ✅ Terminé fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ // Données pour le graphique const toutesEvaluations = ; - // Préparer les données + // Préparer les données avec notes arrondies au demi-point supérieur const labels = toutesEvaluations.map((e, index) => { const date = new Date(e.date_fin); return `Eval ${index + 1}\n${date.getDate()}/${date.getMonth() + 1}`; }); - const notes = toutesEvaluations.map(e => parseFloat(e.note)); + // Arrondir toutes les notes au demi-point supérieur + const notes = toutesEvaluations.map(e => { + const note = parseFloat(e.note); + return Math.ceil(note * 2) / 2; + }); // Calculer la moyenne mobile (sur 3 évaluations) const moyennesMobiles = notes.map((note, index, arr) => { if (index < 2) return null; const sum = arr[index - 2] + arr[index - 1] + arr[index]; - return sum / 3; + const avg = sum / 3; + return Math.ceil(avg * 2) / 2; // Arrondir aussi la moyenne mobile }); // Créer le graphique @@ -771,9 +775,9 @@ $stats = $db->fetchOne($queryStats, [$user['id_utilisateur']]) ?? [ const index = context.dataIndex; const eval = toutesEvaluations[index]; if (context.datasetIndex === 0) { - return `Note: ${context.parsed.y.toFixed(2)}/20 (${eval.pourcentage}%)`; + return `Note: ${context.parsed.y.toFixed(1)}/20 (${Math.round(eval.pourcentage)}%)`; } else { - return context.parsed.y ? `Moyenne mobile: ${context.parsed.y.toFixed(2)}/20` : ''; + return context.parsed.y ? `Moyenne mobile: ${context.parsed.y.toFixed(1)}/20` : ''; } }, afterLabel: function(context) {