1e51ef7def
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
40 lines
1.4 KiB
PHP
40 lines
1.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/../../lib/bootstrap.php';
|
|
|
|
$method = v2_validate_method_in(['GET', 'PUT']);
|
|
$auth = v2_auth_require('student');
|
|
$studentId = (int) ($auth['sub'] ?? 0);
|
|
|
|
if ($method === 'GET') {
|
|
$slug = $_GET['slug'] ?? '';
|
|
if (!$slug) v2_response_error(400, 'missing_slug', 'Parameter "slug" fehlt.');
|
|
|
|
// Mock: alle State-Files unter mock/uploads/state/<slug>-<sid>.json
|
|
$file = __DIR__ . "/../../uploads/state/$slug-$studentId.json";
|
|
if (!file_exists($file)) {
|
|
mock_log('GET /api/module/state', ['slug' => $slug, 'exists' => false]);
|
|
v2_response_ok(['exists' => false]);
|
|
}
|
|
$data = json_decode(file_get_contents($file), true);
|
|
mock_log('GET /api/module/state', ['slug' => $slug, 'exists' => true]);
|
|
v2_response_ok([
|
|
'exists' => true,
|
|
'lastUpdated' => date('c', filemtime($file)),
|
|
'state' => $data['state'] ?? [],
|
|
'summary' => $data['summary'] ?? '',
|
|
]);
|
|
}
|
|
|
|
// PUT
|
|
$body = v2_request_body_json_required();
|
|
v2_validate_required($body, ['moduleSlug', 'state']);
|
|
|
|
$slug = (string) $body['moduleSlug'];
|
|
$dir = __DIR__ . '/../../uploads/state';
|
|
@mkdir($dir, 0775, true);
|
|
file_put_contents("$dir/$slug-$studentId.json", json_encode($body, JSON_UNESCAPED_UNICODE));
|
|
|
|
mock_log('PUT /api/module/state', $body);
|
|
v2_response_ok(['ok' => true, 'savedAt' => date('c')]);
|