fetchAll($queryEvals, [$user['id_utilisateur']]); } else { // Élève classe fixe : évaluations de sa classe if ($user['id_classe']) { $queryEvals = "SELECT DISTINCT e.*, ae.date_debut as debut_acces, ae.date_fin as fin_acces, COALESCE(t.statut, 'non_commence') as statut_tentative, t.note as note_obtenue, t.date_debut as date_tentative FROM evaluations e INNER JOIN acces_evaluations ae ON e.id_evaluation = ae.id_evaluation LEFT JOIN tentatives_eleves t ON e.id_evaluation = t.id_evaluation AND t.id_eleve = ? WHERE ae.id_classe = ? AND ae.actif = 1 AND NOW() BETWEEN ae.date_debut AND ae.date_fin AND e.actif = 1 ORDER BY ae.date_fin ASC, e.titre ASC"; $evaluations = $db->fetchAll($queryEvals, [$user['id_utilisateur'], $user['id_classe']]); } else { $evaluations = []; } } // Récupérer les statistiques de l'élève $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 CEILING((t.note / e.note_totale * 20) * 2) / 2 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']]) ?? [ 'nb_evaluations_passees' => 0, 'nb_evaluations_terminees' => 0, 'moyenne_generale' => null ]; ?>
Aucune évaluation disponible pour le moment
Les nouvelles évaluations apparaîtront ici lorsque votre enseignant les publiera.
= htmlspecialchars($eval['description']) ?>
Chapitre : = htmlspecialchars($eval['chapitre'] ?? 'Non spécifié') ?> | Durée : = $eval['duree_minutes'] ?? 'Libre' ?> min | Note : /= $eval['note_totale'] ?? 20 ?>
⏰ Disponible jusqu'au = date('d/m/Y H:i', strtotime($eval['fin_acces'])) ?>