update all
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
<?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);
|
||||
Reference in New Issue
Block a user