$status, 'data' => $data ]; if (!empty($message)) { $response['message'] = $message; } echo json_encode($response); exit; } // ตรวจสอบว่า method เป็น POST หรือไม่ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // รับข้อมูล JSON จาก request body $jsonData = file_get_contents('php://input'); $data = json_decode($jsonData, true); // ถ้า JSON ไม่ถูกต้อง if ($jsonData && !$data) { sendResponse('error', [], 'ข้อมูล JSON ไม่ถูกต้อง'); } } // อ่านและตรวจสอบ action $action = isset($_GET['action']) ? $_GET['action'] : ''; switch ($action) { case 'get_tree': // ดึงข้อมูลต้นไม้ทั้งหมด $treeData = $treeAPI->getTreeStructure(); sendResponse('success', $treeData); break; case 'export_tree': // ดึงข้อมูลต้นไม้ในรูปแบบของ TreeManager $treeData = $treeAPI->exportToTreeManager(); sendResponse('success', $treeData); break; case 'import_tree': // นำเข้าข้อมูลต้นไม้จาก TreeManager if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse('error', [], 'Method ไม่ถูกต้อง สำหรับการนำเข้าต้องใช้ POST'); } if (empty($data)) { sendResponse('error', [], 'ไม่พบข้อมูลที่ต้องการนำเข้า'); } $result = $treeAPI->importFromTreeManager($data); if ($result) { sendResponse('success', [], 'นำเข้าข้อมูลสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการนำเข้าข้อมูล'); } break; case 'get_node': // ดึงข้อมูลโหนดตาม ID $id = isset($_GET['id']) ? intval($_GET['id']) : 0; if ($id <= 0) { sendResponse('error', [], 'ID ไม่ถูกต้อง'); } $node = $treeAPI->getNode($id); if ($node) { sendResponse('success', $node); } else { sendResponse('error', [], 'ไม่พบโหนดที่ต้องการ'); } break; case 'get_node_by_external_id': // ดึงข้อมูลโหนดตาม external_id $externalId = isset($_GET['external_id']) ? $_GET['external_id'] : ''; if (empty($externalId)) { sendResponse('error', [], 'External ID ไม่ถูกต้อง'); } $node = $treeAPI->getNodeByExternalId($externalId); if ($node) { sendResponse('success', $node); } else { sendResponse('error', [], 'ไม่พบโหนดที่ต้องการ'); } break; case 'add_node': // เพิ่มโหนดใหม่ if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse('error', [], 'Method ไม่ถูกต้อง สำหรับการเพิ่มต้องใช้ POST'); } if (empty($data['name']) || !isset($data['level'])) { sendResponse('error', [], 'ข้อมูลไม่ครบถ้วน ต้องระบุชื่อและระดับ'); } $name = $data['name']; $level = intval($data['level']); $parentId = isset($data['parent_id']) ? intval($data['parent_id']) : null; $externalId = isset($data['external_id']) ? $data['external_id'] : null; $additionalData = isset($data['data']) ? json_encode($data['data']) : null; $result = $treeAPI->addNode($name, $level, $parentId, $externalId, $additionalData); if ($result) { $newNode = $treeAPI->getNode($result); sendResponse('success', $newNode, 'เพิ่มโหนดสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการเพิ่มโหนด'); } break; case 'update_node': // อัพเดตโหนด if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse('error', [], 'Method ไม่ถูกต้อง สำหรับการอัพเดตต้องใช้ POST'); } if (empty($data['id'])) { sendResponse('error', [], 'ต้องระบุ ID ของโหนดที่ต้องการอัพเดต'); } $id = intval($data['id']); // ตรวจสอบว่ามีโหนดที่ต้องการอัพเดตหรือไม่ $node = $treeAPI->getNode($id); if (!$node) { sendResponse('error', [], 'ไม่พบโหนดที่ต้องการอัพเดต'); } // สร้างข้อมูลที่ต้องการอัพเดต $updateData = []; if (isset($data['name'])) { $updateData['name'] = $data['name']; } if (isset($data['level'])) { $updateData['level'] = intval($data['level']); } if (isset($data['parent_id'])) { $updateData['parent_id'] = $data['parent_id'] ? intval($data['parent_id']) : null; } if (isset($data['external_id'])) { $updateData['external_id'] = $data['external_id']; } if (isset($data['data'])) { $updateData['data'] = json_encode($data['data']); } if (empty($updateData)) { sendResponse('error', [], 'ไม่มีข้อมูลที่ต้องการอัพเดต'); } $result = $treeAPI->updateNode($id, $updateData); if ($result) { $updatedNode = $treeAPI->getNode($id); sendResponse('success', $updatedNode, 'อัพเดตโหนดสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการอัพเดตโหนด'); } break; case 'delete_node': // ลบโหนด $id = isset($_GET['id']) ? intval($_GET['id']) : 0; if ($id <= 0) { sendResponse('error', [], 'ID ไม่ถูกต้อง'); } // ตรวจสอบว่ามีโหนดที่ต้องการลบหรือไม่ $node = $treeAPI->getNode($id); if (!$node) { sendResponse('error', [], 'ไม่พบโหนดที่ต้องการลบ'); } $result = $treeAPI->deleteNode($id); if ($result) { sendResponse('success', [], 'ลบโหนดและลูกหลานสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการลบโหนด'); } break; case 'move_node': // ย้ายโหนด if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse('error', [], 'Method ไม่ถูกต้อง สำหรับการย้ายโหนดต้องใช้ POST'); } if (empty($data['id']) || !isset($data['direction'])) { sendResponse('error', [], 'ข้อมูลไม่ครบถ้วน ต้องระบุ ID และทิศทาง'); } $id = intval($data['id']); $direction = $data['direction']; // ตรวจสอบทิศทาง if ($direction !== 'up' && $direction !== 'down') { sendResponse('error', [], 'ทิศทางไม่ถูกต้อง ต้องเป็น up หรือ down'); } $result = $treeAPI->moveNode($id, $direction); if ($result) { sendResponse('success', [], 'ย้ายโหนดสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการย้ายโหนด'); } break; case 'move_node_to_parent': // ย้ายโหนดไปอยู่ภายใต้พ่อใหม่ if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse('error', [], 'Method ไม่ถูกต้อง สำหรับการย้ายโหนดต้องใช้ POST'); } if (empty($data['id']) || !isset($data['new_level'])) { sendResponse('error', [], 'ข้อมูลไม่ครบถ้วน ต้องระบุ ID และระดับใหม่'); } $id = intval($data['id']); $newParentId = isset($data['new_parent_id']) ? intval($data['new_parent_id']) : null; $newLevel = intval($data['new_level']); $result = $treeAPI->moveNodeToParent($id, $newParentId, $newLevel); if ($result) { sendResponse('success', [], 'ย้ายโหนดสำเร็จ'); } else { sendResponse('error', [], 'เกิดข้อผิดพลาดในการย้ายโหนด'); } break; case 'search_nodes': // ค้นหาโหนด $searchTerm = isset($_GET['term']) ? $_GET['term'] : ''; if (empty($searchTerm)) { sendResponse('error', [], 'ต้องระบุคำค้นหา'); } $results = $treeAPI->searchNodes($searchTerm); sendResponse('success', $results); break; default: // Action ไม่ถูกต้อง sendResponse('error', [], 'Action ไม่ถูกต้องหรือไม่ได้ระบุ'); break; }