Files
geograsim/App/php/api/dashboard.php
T
Adminator 32ed869f23 Simplify: PHP page dedup, secure UUID, input validation, remove redundant headers
- pages/*.php: 11 files reduced to 1-liners via shared renderPage() helper
- Session: UUID generation uses random_bytes() instead of mt_rand()
- Session: logout cookie uses same security options as create
- API saves: size limits on key (100) and data (500KB)
- API sessions: displayName capped at 64 chars
- API: removed redundant Content-Type headers (Response::json handles it)
- API dashboard: replaced SELECT * with explicit columns

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:54:43 +02:00

67 lines
1.9 KiB
PHP

<?php
/**
* API: Lehrkraefte-Dashboard Daten
* GET /api/dashboard?class_id=X
*/
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
Response::error('Nur GET erlaubt', 405);
}
$teacherId = Session::requireTeacher();
$db = Database::get();
$classId = (int)($_GET['class_id'] ?? 0);
// Verifizieren dass die Klasse dem Lehrer gehoert
if ($classId) {
$class = $db->fetchOne(
'SELECT id, name, school_year, join_code, created_at FROM classes WHERE id = ? AND teacher_id = ?',
[$classId, $teacherId]
);
if (!$class) Response::error('Klasse nicht gefunden', 404);
}
// Klassen des Lehrers
$classes = $db->fetchAll('SELECT id, name, school_year, join_code, created_at FROM classes WHERE teacher_id = ? ORDER BY created_at DESC', [$teacherId]);
if (!$classId && !empty($classes)) {
$classId = $classes[0]['id'];
}
// Aktive Schueler (letzte 60 Minuten)
$activeStudents = $db->fetchAll(
'SELECT id, display_name, last_seen FROM student_sessions
WHERE class_id = ? AND last_seen > DATE_SUB(NOW(), INTERVAL 60 MINUTE)
ORDER BY last_seen DESC',
[$classId]
);
// Alle Schueler der Klasse
$allStudents = $db->fetchAll(
'SELECT id, display_name, created_at, last_seen FROM student_sessions WHERE class_id = ? ORDER BY display_name',
[$classId]
);
// Assessments fuer diese Klasse
$assessments = $db->fetchAll(
'SELECT a.*, s.display_name FROM assessments a
JOIN student_sessions s ON s.id = a.session_id
WHERE a.class_id = ?
ORDER BY a.submitted_at DESC
LIMIT 100',
[$classId]
);
// Modulfreigaben
$modules = $db->fetchAll('SELECT * FROM class_modules WHERE class_id = ?', [$classId]);
Response::ok([
'classes' => $classes,
'currentClassId' => $classId,
'activeStudents' => $activeStudents,
'allStudents' => $allStudents,
'assessments' => $assessments,
'modules' => $modules,
]);