32ed869f23
- 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>
40 lines
1.2 KiB
PHP
40 lines
1.2 KiB
PHP
<?php
|
|
/**
|
|
* API: Assessment-Daten speichern
|
|
* POST /api/assessment {simId, processLog, predictions, results, reflections, duration, completedPhases}
|
|
*/
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
Response::error('Nur POST erlaubt', 405);
|
|
}
|
|
|
|
$sessionId = Session::requireStudent();
|
|
$body = json_decode(file_get_contents('php://input'), true);
|
|
if (!$body || !isset($body['simId'])) {
|
|
Response::error('simId erforderlich');
|
|
}
|
|
|
|
$db = Database::get();
|
|
|
|
// class_id aus student_session holen
|
|
$session = $db->fetchOne('SELECT class_id FROM student_sessions WHERE id = ?', [$sessionId]);
|
|
$classId = $session ? $session['class_id'] : null;
|
|
|
|
$db->execute(
|
|
'INSERT INTO assessments (session_id, sim_id, class_id, process_log, predictions, results, reflections, duration_ms, completed_phases)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[
|
|
$sessionId,
|
|
$body['simId'],
|
|
$classId,
|
|
json_encode($body['processLog'] ?? []),
|
|
json_encode($body['predictions'] ?? []),
|
|
json_encode($body['results'] ?? []),
|
|
json_encode($body['reflections'] ?? []),
|
|
$body['duration'] ?? 0,
|
|
json_encode($body['completedPhases'] ?? []),
|
|
]
|
|
);
|
|
|
|
Response::ok(['id' => $db->lastInsertId()]);
|