false, 'error' => 'Authentication required']); exit; } // Check admin privileges for write operations if ($_SERVER['REQUEST_METHOD'] !== 'GET' && !$_SESSION['user']['is_admin']) { http_response_code(403); echo json_encode(['success' => false, 'error' => 'Admin privileges required']); exit; } // CSRF Protection for write operations if ($_SERVER['REQUEST_METHOD'] !== 'GET') { require_once dirname(__DIR__) . '/middleware/CsrfMiddleware.php'; $csrfToken = $_SERVER['HTTP_X_CSRF_TOKEN'] ?? ''; if (!CsrfMiddleware::validateToken($csrfToken)) { http_response_code(403); echo json_encode(['success' => false, 'error' => 'Invalid CSRF token']); exit; } } // Use centralized database connection $conn = Database::getConnection(); header('Content-Type: application/json'); $model = new CustomFieldModel($conn); $method = $_SERVER['REQUEST_METHOD']; $id = isset($_GET['id']) ? (int)$_GET['id'] : null; $category = isset($_GET['category']) ? $_GET['category'] : null; switch ($method) { case 'GET': if ($id) { $field = $model->getDefinition($id); echo json_encode(['success' => (bool)$field, 'field' => $field]); } else { // Get all definitions, optionally filtered by category $activeOnly = !isset($_GET['include_inactive']); $fields = $model->getAllDefinitions($category, $activeOnly); echo json_encode(['success' => true, 'fields' => $fields]); } break; case 'POST': $data = json_decode(file_get_contents('php://input'), true); $result = $model->createDefinition($data); echo json_encode($result); break; case 'PUT': if (!$id) { echo json_encode(['success' => false, 'error' => 'ID required']); exit; } $data = json_decode(file_get_contents('php://input'), true); $result = $model->updateDefinition($id, $data); echo json_encode($result); break; case 'DELETE': if (!$id) { echo json_encode(['success' => false, 'error' => 'ID required']); exit; } $result = $model->deleteDefinition($id); echo json_encode($result); break; default: http_response_code(405); echo json_encode(['success' => false, 'error' => 'Method not allowed']); } } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => $e->getMessage()]); }