academy/partials/header.php

194 lines
7.2 KiB
PHP

<?php
require_once __DIR__ . '/../config/app.php';
// Si NO está logueado, mandar al login (pero permitir estar en login.php)
if (!is_logged_in() && (basename($_SERVER['SCRIPT_NAME'] ?? '') !== 'login.php')) {
header('Location: ' . asset('views/login.php'));
exit;
}
/* === LOGOUT === */
if (isset($_GET['cerrar_sesion'])) {
// Vaciar variables de sesión
$_SESSION = [];
// Borrar la cookie de sesión (con los mismos parámetros con que fue creada)
if (ini_get('session.use_cookies')) {
$p = session_get_cookie_params();
// Borro con los params actuales…
setcookie(session_name(), '', time() - 42000, $p['path'], $p['domain'], $p['secure'], $p['httponly']);
// …y también fuerzo el path del proyecto por si difiere
setcookie(
session_name(),
'',
time() - 42000,
'/academy',
'',
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'),
true
);
}
// Destruir sesión
session_destroy();
// Redirigir al login
$loginUrl = function_exists('asset') ? asset('views/login.php') : '/academy/views/login.php';
header('Location: ' . $loginUrl);
exit;
}
require_once __DIR__ . '/../controllers/login.controller.php';
require_once __DIR__ . '/../models/login.model.php';
// Usuario y menús
$user = $_SESSION['usuario'] ?? null;
$menuUsuario = $user ? LoginModel::mdlObtenerMenuUsuario($user) : [];
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($page_title ?? '#VeladeroDigital_') ?></title>
<!-- Syncfusion material theme -->
<link rel="stylesheet" href="<?= asset('lib/syncfusion-31.1.17/material.css') ?>" type="text/css" />
<!-- Bootstrap -->
<link rel="stylesheet" href="<?= asset('lib/bootstrap-5.3.8/css/bootstrap.min.css') ?>">
<!-- AOS y estilos -->
<link rel="stylesheet" href="<?= asset('lib/aos@2.3.1/aos.css') ?>">
<link rel="stylesheet" href="<?= asset('css/styles.css') ?>">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="<?= asset('assets/bootstrap-icons-1.13.1/bootstrap-icons.css') ?>">
<link rel="icon" href="<?= asset('assets/user.png') ?>">
<style>
/* Compensa navbar fija */
body {
padding-top: 56px;
}
</style>
</head>
<body class="login-bg">
<header class="fixed-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" data-bs-theme="dark">
<div class="container">
<a class="navbar-brand fw-semibold" href="/academy/index.php">#VeladeroDigital_</a>
<?php if ($user): ?>
<!-- Toggler responsive -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#menuSuperior"
aria-controls="menuSuperior" aria-expanded="false" aria-label="Mostrar menú">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="menuSuperior">
<!-- Menú principal (izquierda) -->
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<?php foreach ($menuUsuario as $menu): ?>
<?php
$subMenuUsuario = LoginModel::mdlObtenerSubMenuUsuario((int)$menu->modulo_id, $user);
$tieneHijos = !empty($subMenuUsuario);
// href para navegación normal (si hay vista)
$hrefPadre = !empty($menu->vista) ? asset('views/' . ltrim($menu->vista, '/')) : '#';
// data-vista para AJAX (CargarContenido)
$dataVistaPadre = !empty($menu->vista) ? 'vistas/' . htmlspecialchars($menu->vista) : '';
?>
<?php if ($tieneHijos): ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle"
href="#"
id="menu<?= (int)$menu->modulo_id ?>"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false">
<i class="<?= htmlspecialchars($menu->icon_menu) ?> me-1"></i>
<?= htmlspecialchars($menu->modulo) ?>
</a>
<ul class="dropdown-menu" aria-labelledby="menu<?= (int)$menu->modulo_id ?>">
<?php foreach ($subMenuUsuario as $sub): ?>
<?php
$hrefHijo = asset('views/' . ltrim($sub->vista, '/'));
$dataVistaHijo = 'vistas/' . htmlspecialchars($sub->vista);
?>
<li>
<a class="dropdown-item nav-ajax"
href="<?= $hrefHijo ?>"
data-vista="<?= $dataVistaHijo ?>">
<i class="<?= htmlspecialchars($sub->icon_menu) ?> me-2"></i>
<?= htmlspecialchars($sub->modulo) ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link nav-ajax"
href="<?= $hrefPadre ?>"
<?= $dataVistaPadre ? 'data-vista="' . $dataVistaPadre . '"' : '' ?>>
<i class="<?= htmlspecialchars($menu->icon_menu) ?> me-1"></i>
<?= htmlspecialchars($menu->modulo) ?>
</a>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<!-- Dropdown de usuario (derecha) -->
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle d-flex align-items-center"
href="#"
id="userMenu"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false">
<i class="bi bi-person-circle me-2"></i>
<span><?= htmlspecialchars($_SESSION['nombre'] ?? $user) ?></span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userMenu">
<li>
<a class="dropdown-item" href="/academy/views/perfil.php">
<i class="bi bi-person-lines-fill me-2"></i> Perfil
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item" href="?cerrar_sesion=1">
<i class="bi bi-box-arrow-right me-2"></i> Desconectar
</a>
</li>
</ul>
</li>
</ul>
</div>
<?php else: ?>
<!-- Sin usuario: botón Iniciar sesión -->
<?php if (($_SERVER['SCRIPT_NAME'] ?? '') !== '/academy/views/login.php'): ?>
<a class="btn btn-outline-light btn-sm ms-auto" href="/academy/views/login.php">
<i class="bi bi-box-arrow-in-right me-1"></i> Iniciar sesión
</a>
<?php endif; ?>
<?php endif; ?>
</div>
</nav>
</header>
<main>