Stand 2026-04-13: PHP/MySQL Infrastruktur, Flussmanagement, Stadt-Prototyp
- PHP/MySQL Backend (XAMPP + Produktionsserver) - Front-Controller, API-Endpunkte, Session-Management - Flussmanagement-Simulation (Echtzeit, Punkt-basierter Fluss) - Stadt & Raumplanung (Prototyp, Top-Down Kachelsystem) - Klimawaechter 3D: Deiche kleiner, Baeume kippen, Budget angepasst - persistence.ts: Dualer Speicher (localStorage + Server-API) - 6 Unit-Test-Dateien fuer bestehende Simulationen Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
/**
|
||||
* API: Lehrkraefte-Dashboard Daten
|
||||
* GET /api/dashboard?class_id=X
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
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 * FROM classes WHERE id = ? AND teacher_id = ?',
|
||||
[$classId, $teacherId]
|
||||
);
|
||||
if (!$class) Response::error('Klasse nicht gefunden', 404);
|
||||
}
|
||||
|
||||
// Klassen des Lehrers
|
||||
$classes = $db->fetchAll('SELECT * 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,
|
||||
]);
|
||||
Reference in New Issue
Block a user