467363d651
Made-with: Cursor
82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
/**
|
|
* สาธารณะ (ไม่ต้องล็อกอิน) — ส่งชุดคำถาม Quiz Battle โดม A/B/C ให้หน้าเล่น
|
|
* ใช้เมื่อ /Game/api/quiz-settings ไม่ถึง Node (nginx ส่งแค่ static) แต่ยังเสิร์ฟ PHP ได้
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Cache-Control: no-store, no-cache, must-revalidate');
|
|
header('Pragma: no-cache');
|
|
header('X-Content-Type-Options: nosniff');
|
|
|
|
$allowedCats = [
|
|
'cybercrime' => true,
|
|
'cyber_law' => true,
|
|
'privacy' => true,
|
|
'digital_security' => true,
|
|
'social_media' => true,
|
|
'ethics' => true,
|
|
'ai_data' => true,
|
|
];
|
|
|
|
$path = dirname(__DIR__) . '/data/quiz-settings.json';
|
|
$raw = @file_get_contents($path);
|
|
if ($raw === false || $raw === '') {
|
|
echo json_encode(['battleQuizMcq' => []], JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
$data = json_decode($raw, true);
|
|
if (!is_array($data)) {
|
|
echo json_encode(['battleQuizMcq' => []], JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
$src = $data['battleQuizMcq'] ?? [];
|
|
if (!is_array($src)) {
|
|
echo json_encode(['battleQuizMcq' => []], JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
$out = [];
|
|
foreach ($src as $q) {
|
|
if (!is_array($q)) {
|
|
continue;
|
|
}
|
|
$categoryId = trim((string)($q['categoryId'] ?? ''));
|
|
if ($categoryId === '' || !isset($allowedCats[$categoryId])) {
|
|
$categoryId = 'cybercrime';
|
|
}
|
|
$text = mb_substr(trim((string)($q['text'] ?? '')), 0, 500);
|
|
if ($text === '') {
|
|
continue;
|
|
}
|
|
$rawChoices = $q['choices'] ?? [];
|
|
if (!is_array($rawChoices)) {
|
|
continue;
|
|
}
|
|
$choices = [];
|
|
for ($i = 0; $i < 3; $i++) {
|
|
$choices[] = mb_substr(trim((string)($rawChoices[$i] ?? '')), 0, 160);
|
|
}
|
|
if (count($choices) !== 3 || in_array('', $choices, true)) {
|
|
continue;
|
|
}
|
|
$ci = (int)($q['correctIndex'] ?? 0);
|
|
if ($ci < 0 || $ci > 2) {
|
|
$ci = 0;
|
|
}
|
|
$out[] = [
|
|
'categoryId' => $categoryId,
|
|
'text' => $text,
|
|
'choices' => $choices,
|
|
'correctIndex' => $ci,
|
|
];
|
|
if (count($out) >= 200) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
echo json_encode(['battleQuizMcq' => $out], JSON_UNESCAPED_UNICODE);
|