Tourismustal: iPad-Feedback Runde 2 (5 Punkte)
- Bau-Ablehnung erklaert jetzt immer auch die Bauregeln des Gebaeudes (Toast: Grund + Beschreibung, 7 s). - Lehrer-Schalter fuer den Vorlese-Modus: class_modules.audio_info (Migration, Default AN) + modules-API set_audio_info + Toggle auf der Modul-Karte im Cockpit (Vorlesen an/aus) + Wrapper injiziert TT_FEATURES.audioInfo + Sim blendet den Umschalter aus und erzwingt Lese-Modus, wenn gesperrt. - Bus zeigt bei Rueckfahrt sein Heck: Heckscheibe + rote Ruecklichter, Tuer/Spiegel richtungsabhaengig. - Bikepark-Flowtrails: 3 Stufen hangAUFwaerts (gleiche Richtung wie Lift-Pisten). - Info-Button an jedem Bauwerk im Baumenue: erklaert Wirkung, Kosten, Lage-Regeln und Lehrplan-Wissen VOR dem Bau. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-2
@@ -52,7 +52,7 @@ if ($method === 'GET') {
|
||||
$classId = $session['class_id'];
|
||||
$classMap = [];
|
||||
$settings = $db->fetchAll(
|
||||
'SELECT module_id, mode, current_level, quiz_enabled, due_date, started_at, paused
|
||||
'SELECT module_id, mode, current_level, quiz_enabled, audio_info, due_date, started_at, paused
|
||||
FROM class_modules WHERE class_id = ?', [$classId]);
|
||||
foreach ($settings as $s) $classMap[$s['module_id']] = $s;
|
||||
|
||||
@@ -108,6 +108,7 @@ if ($method === 'GET') {
|
||||
'mode' => $mode,
|
||||
'forcedLevel' => ($mode === 'teacher_started' && $cm) ? (int)($cm['current_level'] ?? 1) : null,
|
||||
'quizEnabled' => (bool)($cm['quiz_enabled'] ?? 0),
|
||||
'audioInfo' => (bool)($cm['audio_info'] ?? 1),
|
||||
'dueDate' => $cm['due_date'] ?? null,
|
||||
'paused' => (bool)($cm['paused'] ?? 0),
|
||||
'assignmentCompleted' => $assignmentCompleted,
|
||||
@@ -129,7 +130,7 @@ if ($method === 'GET') {
|
||||
|
||||
// Klassen-Defaults laden (inkl. Level + Pause-Status für die Lehrer-UI)
|
||||
$settings = $db->fetchAll(
|
||||
'SELECT module_id, mode, current_level, paused, due_date, started_at FROM class_modules WHERE class_id = ?',
|
||||
'SELECT module_id, mode, current_level, paused, audio_info, due_date, started_at FROM class_modules WHERE class_id = ?',
|
||||
[$classId]
|
||||
);
|
||||
$classMap = [];
|
||||
@@ -191,6 +192,7 @@ if ($method === 'GET') {
|
||||
'classMode' => $classMap[$mod['id']] ?? 'locked',
|
||||
'currentLevel' => $meta ? (int)($meta['current_level'] ?? 1) : 1,
|
||||
'paused' => $meta ? (bool)($meta['paused'] ?? 0) : false,
|
||||
'audioInfo' => $meta ? (bool)($meta['audio_info'] ?? 1) : true,
|
||||
'dueDate' => $meta['due_date'] ?? null,
|
||||
'startedAt' => $meta['started_at'] ?? null,
|
||||
];
|
||||
@@ -264,6 +266,18 @@ if ($method === 'POST') {
|
||||
Response::ok();
|
||||
}
|
||||
|
||||
// Vorlese-Modus (Audio-Info) für die Klasse erlauben/sperren
|
||||
if ($action === 'set_audio_info') {
|
||||
$on = !empty($body['enabled']) ? 1 : 0;
|
||||
$db->execute(
|
||||
'INSERT INTO class_modules (class_id, module_id, enabled, audio_info)
|
||||
VALUES (?, ?, 1, ?)
|
||||
ON DUPLICATE KEY UPDATE audio_info = VALUES(audio_info)',
|
||||
[$classId, $moduleId, $on]
|
||||
);
|
||||
Response::ok();
|
||||
}
|
||||
|
||||
// Auftrag pausieren / fortsetzen
|
||||
if ($action === 'pause' || $action === 'resume') {
|
||||
$paused = $action === 'pause' ? 1 : 0;
|
||||
|
||||
Reference in New Issue
Block a user