75 lines
2.9 KiB
PHP
75 lines
2.9 KiB
PHP
<?php
|
|
session_start();
|
|
require_once __DIR__ . '/src/MVC/autoloader.php';
|
|
|
|
use MVC\Classes\Logger;
|
|
|
|
// Global Error & Exception Handlers
|
|
set_exception_handler([Logger::class, 'logException']);
|
|
set_error_handler([Logger::class, 'logError']);
|
|
|
|
$service = $_GET['service'] ?? 'home';
|
|
|
|
try {
|
|
$router = new \MVC\Core\Router();
|
|
|
|
// Load routes from config
|
|
require_once __DIR__ . '/src/config/routes.php';
|
|
|
|
$layout = new \MVC\Layout\Layout('main');
|
|
$layout->setBlock('title', 'MVC Starter');
|
|
$layout->setBlock('header_title', '🚀 MVC Dashboard');
|
|
|
|
$headerActions = '<button class="btn-toggle" onclick="toggleTheme()">🌓 Theme umschalten</button>';
|
|
if (isset($_SESSION['user_logged_in'])) {
|
|
$headerActions = '<span style="margin-right: 15px; font-size: 0.9rem;">👤 ' . htmlspecialchars($_SESSION['username']) . '</span>' .
|
|
'<a href="?service=logout" class="btn-toggle" style="text-decoration: none; background: rgba(255,255,255,0.2); margin-right: 10px;">🚪 Logout</a> ' .
|
|
$headerActions;
|
|
} else {
|
|
$headerActions = '<a href="?service=login" class="btn-toggle" style="text-decoration: none; background: var(--accent); color: white; margin-right: 10px;">🔑 Login</a> ' .
|
|
$headerActions;
|
|
}
|
|
$layout->setBlock('header_actions', $headerActions);
|
|
|
|
// Sidebar Block
|
|
ob_start();
|
|
// Load navigation from config
|
|
$navItems = require __DIR__ . '/src/config/navigation.php';
|
|
?>
|
|
<nav>
|
|
<?php foreach ($navItems as $navKey => $item):
|
|
$isLoggedIn = isset($_SESSION['user_logged_in']);
|
|
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] === true;
|
|
|
|
// Check visibility based on Router middleware
|
|
$requiresAuth = $router->hasMiddleware($navKey, 'auth');
|
|
$requiresAdmin = $router->hasMiddleware($navKey, 'admin');
|
|
|
|
if ($requiresAuth && !$isLoggedIn) continue;
|
|
if ($requiresAdmin && !$isAdmin) continue;
|
|
?>
|
|
<a href="?service=<?= $navKey ?>" class="<?= $service === $navKey ? 'active' : '' ?>"><?= $item['label'] ?></a>
|
|
<?php endforeach; ?>
|
|
|
|
<?php if (!isset($_SESSION['user_logged_in'])): ?>
|
|
<div style="margin-top: 20px; padding: 10px; font-size: 0.8rem; opacity: 0.5; border-top: 1px solid var(--border);">
|
|
🔒 Melden Sie sich an, um alle Funktionen zu sehen.
|
|
</div>
|
|
<?php endif; ?>
|
|
</nav>
|
|
<?php
|
|
$layout->setBlock('sidebar', ob_get_clean());
|
|
|
|
$layout->setBlock('content', $router->dispatch($service));
|
|
echo $layout->render();
|
|
} catch (\Throwable $e) {
|
|
// Log the error globally
|
|
Logger::logException($e);
|
|
|
|
http_response_code(500);
|
|
echo "<h1>Error</h1><p>" . htmlspecialchars($e->getMessage()) . "</p>";
|
|
if (ini_get('display_errors')) {
|
|
echo "<pre>" . htmlspecialchars($e->getTraceAsString()) . "</pre>";
|
|
}
|
|
}
|