Files
justice/www/html/Admin/api/system-settings.php
T
2026-07-31 03:36:58 +00:00

76 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
require __DIR__ . '/_common.php';
require_login();
const ROOM_RETENTION_MIN_DAYS = 3;
const ROOM_RETENTION_MAX_DAYS = 7;
const GAME_SYSTEM_SETTINGS = __DIR__ . '/../../Game/data/system-settings.json';
function clamp_room_retention_days($value): int
{
$n = (int)$value;
if ($n < ROOM_RETENTION_MIN_DAYS) {
return ROOM_RETENTION_MIN_DAYS;
}
if ($n > ROOM_RETENTION_MAX_DAYS) {
return ROOM_RETENTION_MAX_DAYS;
}
return $n;
}
function system_settings_payload(array $store): array
{
$settings = $store['systemSettings'] ?? [];
return [
'roomRetentionDays' => clamp_room_retention_days($settings['roomRetentionDays'] ?? ROOM_RETENTION_MIN_DAYS),
'minRoomRetentionDays' => ROOM_RETENTION_MIN_DAYS,
'maxRoomRetentionDays' => ROOM_RETENTION_MAX_DAYS,
];
}
function sync_game_system_settings(array $payload): bool
{
$dir = dirname(GAME_SYSTEM_SETTINGS);
if (!is_dir($dir) && !@mkdir($dir, 0755, true)) {
return false;
}
$data = [
'roomRetentionDays' => $payload['roomRetentionDays'],
'updatedAt' => gmdate('c'),
];
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
return $json !== false && file_put_contents(GAME_SYSTEM_SETTINGS, $json, LOCK_EX) !== false;
}
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
if ($method === 'GET') {
$store = read_store();
$payload = system_settings_payload($store);
sync_game_system_settings($payload);
json_response(['ok' => true] + $payload);
}
if ($method === 'PATCH' || $method === 'PUT' || $method === 'POST') {
$body = require_json_body();
if (!array_key_exists('roomRetentionDays', $body)) {
json_response(['ok' => false, 'error' => 'กรุณาระบุจำนวนวันจัดเก็บห้อง'], 400);
}
$store = read_store();
$store['systemSettings'] = $store['systemSettings'] ?? [];
$store['systemSettings']['roomRetentionDays'] = clamp_room_retention_days($body['roomRetentionDays']);
if (!write_store($store)) {
json_response(['ok' => false, 'error' => 'บันทึกการตั้งค่าไม่สำเร็จ'], 500);
}
$payload = system_settings_payload($store);
if (!sync_game_system_settings($payload)) {
json_response(['ok' => false, 'error' => 'บันทึกค่าไปยัง Game/data ไม่สำเร็จ'], 500);
}
json_response(['ok' => true] + $payload);
}
json_response(['ok' => false, 'error' => 'Method not allowed'], 405);