Files
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- 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>
2026-07-08 02:27:02 +02:00

64 lines
2.1 KiB
PHP

<?php
/**
* GET /api/admin/platform-config — alle Konfig-Einträge mit Schema (gruppiert)
* PATCH /api/admin/platform-config { key, value }
*
* Nur für role=admin.
*/
declare(strict_types=1);
require_once __DIR__ . '/../../bootstrap.php';
$method = v2_validate_method_in(['GET', 'PATCH']);
$auth = v2_auth_require('admin');
if ($method === 'GET') {
$rows = v2_db_all("
SELECT config_key, config_value, value_type, min_value, max_value,
label, label_easy, help_text, group_name, display_order, updated_at
FROM platform_config_v2
ORDER BY group_name, display_order, config_key
");
$groups = [];
foreach ($rows as $r) {
$groups[$r['group_name']][] = [
'key' => $r['config_key'],
'value' => $r['config_value'],
'type' => $r['value_type'],
'min' => $r['min_value'],
'max' => $r['max_value'],
'label' => $r['label'],
'labelEasy' => $r['label_easy'],
'help' => $r['help_text'],
'updatedAt' => $r['updated_at'],
];
}
v2_response_ok(['groups' => $groups]);
}
// PATCH
$body = v2_request_body_json_required();
v2_validate_required($body, ['key', 'value']);
$key = (string) $body['key'];
$value = (string) $body['value'];
$row = v2_db_one("SELECT value_type, min_value, max_value FROM platform_config_v2 WHERE config_key = :k", [':k' => $key]);
if (!$row) v2_response_error(404, 'not_found', "Konfig-Eintrag '$key' nicht gefunden.");
// Range-Check
if ($row['value_type'] === 'int') {
$v = (int) $value;
if ($row['min_value'] !== null && $v < (int) $row['min_value']) {
v2_response_error(400, 'out_of_range', "Wert < min ({$row['min_value']})");
}
if ($row['max_value'] !== null && $v > (int) $row['max_value']) {
v2_response_error(400, 'out_of_range', "Wert > max ({$row['max_value']})");
}
}
v2_db_exec(
"UPDATE platform_config_v2 SET config_value = :v, updated_by = :u WHERE config_key = :k",
[':v' => $value, ':k' => $key, ':u' => (int) ($auth['sub'] ?? 0)]
);
v2_response_ok(['ok' => true]);