140 lines
6.0 KiB
PHP
140 lines
6.0 KiB
PHP
<?php
|
|
session_start();
|
|
|
|
$scriptName = $_SERVER['SCRIPT_NAME'];
|
|
$baseDir = dirname(dirname($scriptName));
|
|
if ($baseDir === '/' || $baseDir === '\\') $baseDir = '';
|
|
define('BASE_URL', $baseDir);
|
|
|
|
// Simple PSR-4 Autoloader
|
|
spl_autoload_register(function ($class) {
|
|
// Project-specific namespace prefix
|
|
$prefix = 'App\\';
|
|
|
|
// Base directory for the namespace prefix
|
|
$base_dir = __DIR__ . '/../src/';
|
|
|
|
// Does the class use the namespace prefix?
|
|
$len = strlen($prefix);
|
|
if (strncmp($prefix, $class, $len) !== 0) {
|
|
// No, move to the next registered autoloader
|
|
return;
|
|
}
|
|
|
|
// Get the relative class name
|
|
$relative_class = substr($class, $len);
|
|
|
|
// Replace the namespace prefix with the base directory, replace namespace
|
|
// separators with directory separators in the relative class name, append
|
|
// with .php
|
|
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
|
|
|
|
// If the file exists, require it
|
|
if (file_exists($file)) {
|
|
require $file;
|
|
}
|
|
});
|
|
|
|
// Setup Global Error & Exception Handling
|
|
set_error_handler(function($severity, $message, $file, $line) {
|
|
if (!(error_reporting() & $severity)) {
|
|
return;
|
|
}
|
|
throw new \ErrorException($message, 0, $severity, $file, $line);
|
|
});
|
|
|
|
set_exception_handler(function($exception) {
|
|
error_log($exception->getMessage() . " in " . $exception->getFile() . " on line " . $exception->getLine());
|
|
|
|
$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
|
|
|
|
if ($isAjax || (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {
|
|
http_response_code(500);
|
|
header('Content-Type: application/json');
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'เกิดข้อผิดพลาดในระบบ โปรดติดต่อผู้ดูแลระบบ'
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
http_response_code(500);
|
|
$error_message = 'เกิดข้อผิดพลาด: ' . $exception->getMessage() . ' ในไฟล์ ' . $exception->getFile() . ' บรรทัดที่ ' . $exception->getLine();
|
|
|
|
// Check if error view exists
|
|
$errorView = __DIR__ . '/../views/error.php';
|
|
if (file_exists($errorView)) {
|
|
require $errorView;
|
|
} else {
|
|
echo "<h1>500 Internal Server Error</h1><p>{$error_message}</p>";
|
|
}
|
|
exit;
|
|
});
|
|
|
|
// Load Router
|
|
use App\Core\Router;
|
|
|
|
$router = new Router();
|
|
|
|
// Routes definition
|
|
$router->add('GET', '/', 'DashboardController', 'index');
|
|
$router->add('GET', '/login', 'AuthController', 'login');
|
|
$router->add('POST', '/login', 'AuthController', 'authenticate');
|
|
$router->add('GET', '/logout', 'AuthController', 'logout');
|
|
|
|
$router->add('GET', '/trip/create', 'TripController', 'create');
|
|
$router->add('POST', '/trip/create', 'TripController', 'store');
|
|
$router->add('GET', '/trip/search-docs', 'TripController', 'searchDocs');
|
|
$router->add('GET', '/trip/edit', 'TripController', 'edit');
|
|
$router->add('POST', '/trip/edit', 'TripController', 'update');
|
|
$router->add('POST', '/trip/delete', 'TripController', 'delete');
|
|
$router->add('POST', '/trip/request-cancel', 'TripController', 'requestCancel');
|
|
$router->add('POST', '/trip/request-revise', 'TripController', 'requestRevise');
|
|
|
|
$router->add('GET', '/trip/approvals', 'ApprovalController', 'index');
|
|
$router->add('POST', '/trip/approvals/process', 'ApprovalController', 'process');
|
|
|
|
$router->add('GET', '/report', 'ReportController', 'index');
|
|
$router->add('GET', '/report/export', 'ReportController', 'export');
|
|
|
|
$router->add('GET', '/settings', 'SettingsController', 'index');
|
|
$router->add('GET', '/settings/google-sheets', 'SettingsController', 'googleSheets');
|
|
$router->add('POST', '/settings/google-sheets/save', 'SettingsController', 'googleSheetsSave');
|
|
$router->add('GET', '/settings/google-sheets/sync', 'SettingsController', 'googleSheetsSync');
|
|
$router->add('POST', '/settings/google-sheets/test', 'SettingsController', 'googleSheetsTest');
|
|
|
|
$router->add('GET', '/settings/hierarchy', 'SettingsController', 'approvalHierarchy');
|
|
$router->add('GET', '/settings/search-user', 'SettingsController', 'searchUser');
|
|
$router->add('POST', '/settings/hierarchy/add', 'SettingsController', 'addHierarchy');
|
|
$router->add('POST', '/settings/hierarchy/remove', 'SettingsController', 'removeHierarchy');
|
|
|
|
$router->add('GET', '/settings/line-notify', 'SettingsController', 'lineNotify');
|
|
$router->add('POST', '/settings/line-notify/save', 'SettingsController', 'saveLineNotify');
|
|
$router->add('POST', '/settings/line-notify/test', 'SettingsController', 'lineNotifyTest');
|
|
|
|
$router->add('GET', '/settings/telegram-notify', 'SettingsController', 'telegramNotify');
|
|
$router->add('POST', '/settings/telegram-notify/save', 'SettingsController', 'saveTelegramNotify');
|
|
$router->add('POST', '/settings/telegram-notify/test', 'SettingsController', 'telegramNotifyTest');
|
|
|
|
$router->add('GET', '/settings/pdf-designer', 'SettingsController', 'pdfDesigner');
|
|
$router->add('GET', '/settings/pdf-designer/preview', 'SettingsController', 'previewPdf');
|
|
$router->add('POST', '/settings/pdf-designer/upload', 'SettingsController', 'uploadPdfTemplate');
|
|
$router->add('POST', '/settings/pdf-designer/save', 'SettingsController', 'savePdfLayout');
|
|
$router->add('POST', '/settings/pdf-designer/delete', 'SettingsController', 'deletePdfTemplate');
|
|
|
|
$router->add('GET', '/trip/print', 'TripController', 'printPdf');
|
|
|
|
// Roles
|
|
$router->add('GET', '/roles', 'RoleController', 'index');
|
|
$router->add('GET', '/roles/search', 'RoleController', 'search');
|
|
$router->add('POST', '/roles/assign', 'RoleController', 'assign');
|
|
$router->add('POST', '/roles/remove', 'RoleController', 'remove');
|
|
|
|
$router->add('GET', '/reports', 'ReportController', 'index');
|
|
$router->add('GET', '/reports/export', 'ReportController', 'export');
|
|
|
|
$router->add('GET', '/audit', 'AuditController', 'index');
|
|
$router->add('GET', '/manual', 'ManualController', 'index');
|
|
|
|
$router->dispatch($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']);
|