This commit is contained in:
@ -1,67 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* Front-controller: single entry point for all /api/ requests.
|
||||
* Handles CORS, JSON content type, global error catching, and dispatch.
|
||||
*/
|
||||
require_once __DIR__ . '/../common.php';
|
||||
require_once __DIR__ . '/../db_init.php';
|
||||
require_once __DIR__ . '/../lib/response.php';
|
||||
require_once __DIR__ . '/../lib/validate.php';
|
||||
|
||||
// CORS
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS');
|
||||
header('Access-Control-Allow-Headers: Content-Type, Authorization');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(204);
|
||||
exit;
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
|
||||
// Parse route: strip /api/ prefix and .php suffix, normalize
|
||||
$requestUri = $_SERVER['REQUEST_URI'] ?? '';
|
||||
$path = parse_url($requestUri, PHP_URL_PATH);
|
||||
$base = dirname($_SERVER['SCRIPT_NAME']);
|
||||
$route = trim(substr($path, strlen($base)), '/');
|
||||
$route = preg_replace('/\.php$/', '', $route);
|
||||
$route = strtolower($route);
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
// Dispatch table: route -> handler file
|
||||
$routes = [
|
||||
'questionnaires' => __DIR__ . '/../handlers/questionnaires.php',
|
||||
'questions' => __DIR__ . '/../handlers/questions.php',
|
||||
'answer_options' => __DIR__ . '/../handlers/answer_options.php',
|
||||
'translations' => __DIR__ . '/../handlers/translations.php',
|
||||
'users' => __DIR__ . '/../handlers/users.php',
|
||||
'assignments' => __DIR__ . '/../handlers/assignments.php',
|
||||
'clients' => __DIR__ . '/../handlers/clients.php',
|
||||
'results' => __DIR__ . '/../handlers/results.php',
|
||||
'export' => __DIR__ . '/../handlers/export.php',
|
||||
'app_questionnaires' => __DIR__ . '/../handlers/app_questionnaires.php',
|
||||
'logout' => __DIR__ . '/../handlers/logout.php',
|
||||
'auth/login' => __DIR__ . '/../handlers/auth.php',
|
||||
'auth/change-password' => __DIR__ . '/../handlers/auth.php',
|
||||
'backup' => __DIR__ . '/../handlers/backup.php',
|
||||
'download' => __DIR__ . '/../handlers/download.php',
|
||||
];
|
||||
|
||||
try {
|
||||
if (!isset($routes[$route])) {
|
||||
json_error('NOT_FOUND', "Unknown endpoint: $route", 404);
|
||||
}
|
||||
|
||||
$handlerFile = $routes[$route];
|
||||
if (!file_exists($handlerFile)) {
|
||||
json_error('NOT_FOUND', "Handler not found for: $route", 404);
|
||||
}
|
||||
|
||||
require $handlerFile;
|
||||
|
||||
} catch (Throwable $e) {
|
||||
error_log("Unhandled error on $method $route: " . $e->getMessage());
|
||||
json_error('SERVER_ERROR', 'Internal server error', 500);
|
||||
}
|
||||
require_once __DIR__ . '/dispatch.php';
|
||||
qdb_dispatch_api_request();
|
||||
|
||||
Reference in New Issue
Block a user