Files
justice/www/html/Game/public/api-quiz-battle-mcq.php
T

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);