76 lines
2.6 KiB
PHP
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);
|