Files
canteenhub/public/index.php
T

77 lines
3.3 KiB
PHP

<?php
declare(strict_types=1);
// Handle PHP built-in web server static files directly
if (php_sapi_name() === 'cli-server') {
$path = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
$file = __DIR__ . $path;
if ($path !== '/' && file_exists($file) && !is_dir($file)) {
return false;
}
}
// Error reporting settings
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Register Autoloader & Global Helpers
require_once __DIR__ . '/../app/Core/Autoloader.php';
require_once __DIR__ . '/../app/Core/Helpers.php';
\App\Core\Autoloader::register();
\App\Core\Autoloader::addNamespace('App', __DIR__ . '/../app');
// Load environment configuration
\App\Core\Config::load(__DIR__ . '/../.env');
// Initialize Database Schema & Seed Data
\App\Core\Database\Database::initSchema();
// Initialize Request, Response, and Router
$request = new \App\Core\Http\Request();
$response = new \App\Core\Http\Response();
$router = new \App\Core\Routing\Router();
// Define Routes
// Authentication
$router->get('/login', [\App\Controllers\AuthController::class, 'loginForm']);
$router->post('/login', [\App\Controllers\AuthController::class, 'login']);
$router->post('/quick-login', [\App\Controllers\AuthController::class, 'quickLogin']);
$router->get('/register', [\App\Controllers\AuthController::class, 'registerForm']);
$router->post('/register', [\App\Controllers\AuthController::class, 'register']);
$router->post('/logout', [\App\Controllers\AuthController::class, 'logout']);
// Daily Food & Canteen Sessions
$router->get('/', [\App\Controllers\SessionController::class, 'index']);
$router->get('/sessions/create', [\App\Controllers\SessionController::class, 'createForm']);
$router->post('/sessions', [\App\Controllers\SessionController::class, 'store']);
$router->get('/sessions/history', [\App\Controllers\SessionController::class, 'history']);
$router->get('/sessions/{id}', [\App\Controllers\SessionController::class, 'show']);
$router->post('/sessions/{id}/status', [\App\Controllers\SessionController::class, 'updateStatus']);
$router->post('/sessions/{id}/add-menu', [\App\Controllers\SessionController::class, 'addMenu']);
$router->post('/sessions/{id}/delete-menu', [\App\Controllers\SessionController::class, 'deleteMenu']);
$router->post('/sessions/{id}/settle-prices', [\App\Controllers\SessionController::class, 'settlePrices']);
// Employee Self-Orders
$router->post('/employee-orders', [\App\Controllers\EmployeeOrderController::class, 'store']);
$router->post('/employee-orders/{id}/toggle-paid', [\App\Controllers\EmployeeOrderController::class, 'togglePaid']);
$router->post('/employee-orders/{id}/delete', [\App\Controllers\EmployeeOrderController::class, 'delete']);
// Coworkers & Balances
$router->get('/employees', [\App\Controllers\EmployeeController::class, 'index']);
// 404 Fallback
$router->setNotFound(function ($req, $res) {
return $res->setStatusCode(404)->setContent(
'<div style="text-align:center; padding: 4rem; font-family: sans-serif;">
<h1>404 - Page Not Found</h1>
<p>The page or food session you requested does not exist.</p>
<p><a href="/" style="color: #4f46e5; text-decoration: none; font-weight: 600;">&larr; Back to Food Sessions</a></p>
</div>'
);
});
// Dispatch and send response
$result = $router->dispatch($request, $response);
$result->send();