false,'error'=>'รหัสแอดมินไม่ถูกต้อง'], JSON_UNESCAPED_UNICODE); exit; } $id = preg_replace('/[^0-9]/', '', (string)($_POST['id'] ?? '')); if ($id === '') { echo json_encode(['ok'=>false,'error'=>'no id'], JSON_UNESCAPED_UNICODE); exit; } if (!is_dir($DATA_DIR)) @mkdir($DATA_DIR, 0775, true); $verify = tc_load($VERIFY); $rec = $verify[$id] ?? ['result'=>'none','comment'=>'','images'=>[]]; if (!isset($rec['images']) || !is_array($rec['images'])) $rec['images'] = []; $res = $_POST['result'] ?? ''; if (in_array($res, ['pass','fail','none'], true)) $rec['result'] = $res; if (isset($_POST['comment'])) $rec['comment'] = mb_substr(trim((string)$_POST['comment']), 0, 2000); if (($_POST['removeImage'] ?? '') !== '') { $rm = basename((string)$_POST['removeImage']); $rec['images'] = array_values(array_filter($rec['images'], function($x) use ($rm){ return $x !== $rm; })); @unlink($UPLOADS . '/' . $rm); } if (!empty($_FILES['image']['tmp_name']) && is_uploaded_file($_FILES['image']['tmp_name'])) { $ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); if (in_array($ext, ['jpg','jpeg','png','gif','webp'], true) && $_FILES['image']['size'] < 8*1024*1024) { if (!is_dir($UPLOADS)) @mkdir($UPLOADS, 0775, true); $fn = $id . '_' . time() . '_' . bin2hex(random_bytes(3)) . '.' . $ext; if (move_uploaded_file($_FILES['image']['tmp_name'], $UPLOADS . '/' . $fn)) $rec['images'][] = $fn; } } $rec['at'] = date('Y-m-d H:i'); $verify[$id] = $rec; tc_save($VERIFY, $verify); echo json_encode(['ok'=>true,'rec'=>$rec], JSON_UNESCAPED_UNICODE); exit; } // ทุก API ด้านล่างต้องเป็นแอดมิน if (!$is_admin) { http_response_code(403); echo json_encode(['ok'=>false,'error'=>'ต้องใส่รหัสแอดมิน'], JSON_UNESCAPED_UNICODE); exit; } if (!is_dir($DATA_DIR)) @mkdir($DATA_DIR, 0775, true); // เพิ่ม/แก้ไขบั๊ก (Dev) — id ว่าง = เพิ่มใหม่ if ($api === 'bugsave') { $bugs = tc_load($BUGS); $id = preg_replace('/[^0-9]/', '', (string)($_POST['id'] ?? '')); $row = [ 'name' => mb_substr(trim((string)($_POST['name'] ?? '')), 0, 300), 'detail' => mb_substr(trim((string)($_POST['detail'] ?? '')), 0, 4000), 'prio' => in_array(($_POST['prio'] ?? ''), ['วิกฤต','สูง','กลาง','ต่ำ',''], true) ? ($_POST['prio'] ?? '') : '', 'status' => in_array(($_POST['status'] ?? ''), ['เปิด','แก้ไขแล้ว'], true) ? $_POST['status'] : 'เปิด', 'note' => mb_substr(trim((string)($_POST['note'] ?? '')), 0, 4000), 'cat' => mb_substr(trim((string)($_POST['cat'] ?? 'อื่นๆ')), 0, 60), 'updated'=> date('Y-m-d'), ]; if ($row['name'] === '') { echo json_encode(['ok'=>false,'error'=>'ใส่ชื่อปัญหาก่อน'], JSON_UNESCAPED_UNICODE); exit; } if ($id === '') { $max = 0; foreach ($bugs as $b) { if (($b['n'] ?? 0) > $max) $max = $b['n']; } $row['n'] = $max + 1; $bugs[] = $row; } else { $found = false; foreach ($bugs as &$b) { if ((string)($b['n'] ?? '') === $id) { $b = array_merge($b, $row); $b['n'] = (int)$id; $found = true; break; } } unset($b); if (!$found) { echo json_encode(['ok'=>false,'error'=>'ไม่พบบั๊ก #'.$id], JSON_UNESCAPED_UNICODE); exit; } } tc_save($BUGS, $bugs); echo json_encode(['ok'=>true,'bugs'=>$bugs], JSON_UNESCAPED_UNICODE); exit; } // ลบบั๊ก if ($api === 'bugdel') { $id = preg_replace('/[^0-9]/', '', (string)($_POST['id'] ?? '')); if ($id === '') { echo json_encode(['ok'=>false,'error'=>'no id'], JSON_UNESCAPED_UNICODE); exit; } $bugs = tc_load($BUGS); $bugs = array_values(array_filter($bugs, function($b) use ($id){ return (string)($b['n'] ?? '') !== $id; })); tc_save($BUGS, $bugs); echo json_encode(['ok'=>true,'bugs'=>$bugs], JSON_UNESCAPED_UNICODE); exit; } // จัดการหมวด — รับ list ทั้งชุด (เพิ่ม/ลบ/แก้/เรียง) if ($api === 'catsave') { $list = json_decode((string)($_POST['cats'] ?? '[]'), true); if (!is_array($list)) { echo json_encode(['ok'=>false,'error'=>'รูปแบบหมวดไม่ถูกต้อง'], JSON_UNESCAPED_UNICODE); exit; } $clean = []; foreach ($list as $c) { $c = mb_substr(trim((string)$c), 0, 60); if ($c !== '' && !in_array($c, $clean, true)) $clean[] = $c; } if (!count($clean)) { echo json_encode(['ok'=>false,'error'=>'ต้องมีอย่างน้อย 1 หมวด'], JSON_UNESCAPED_UNICODE); exit; } tc_save($CATS, $clean); echo json_encode(['ok'=>true,'cats'=>$clean], JSON_UNESCAPED_UNICODE); exit; } echo json_encode(['ok'=>false,'error'=>'unknown api'], JSON_UNESCAPED_UNICODE); exit; } $bugs = tc_load($BUGS); $verify = tc_load($VERIFY); $cats = tc_cats($CATS, $DEFAULT_CATS); ?>
| # | ปัญหา | สำคัญ | Dev | ผลตรวจ QA |
|---|