Actualizar cabecera.php

Se han añadido los modales a la cabecera (iniciar sesión y registrarse cuando la sesión está cerrada)
This commit is contained in:
2026-09-23 13:05:50 +02:00
parent 050d5e49c4
commit a6a78d9381
+309 -209
View File
@@ -1,209 +1,309 @@
<?php <?php
if (session_status() === PHP_SESSION_NONE) { if (session_status() === PHP_SESSION_NONE) {
session_start(); session_start();
} }
// Comprobación de sesión // Comprobación de sesión
$isLoggedIn = isset($_SESSION['usuario']) && !empty($_SESSION['usuario']); $isLoggedIn = isset($_SESSION['usuario']) && !empty($_SESSION['usuario']);
$username = $isLoggedIn ? $_SESSION['usuario'] : ''; $username = $isLoggedIn ? $_SESSION['usuario'] : '';
?> ?>
<!-- Bootstrap 5 CSS --> <!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- FontAwesome para iconos --> <!-- FontAwesome para iconos -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
<!-- Google Fonts para estilo Kahoot --> <!-- Google Fonts para estilo Kahoot -->
<link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
:root { :root {
--kahoot-purple: #46178f; --kahoot-purple: #46178f;
--kahoot-blue: #1368ce; --kahoot-blue: #1368ce;
--kahoot-red: #e21b3c; --kahoot-red: #e21b3c;
--kahoot-yellow: #ffa602; --kahoot-yellow: #ffa602;
--kahoot-green: #26890c; --kahoot-green: #26890c;
--kahoot-green-hover: #1f6f09; --kahoot-green-hover: #1f6f09;
} }
body { body {
font-family: 'Fredoka', sans-serif; font-family: 'Fredoka', sans-serif;
background-color: #f2f2f2; background-color: #f2f2f2;
min-height: 100vh; min-height: 100vh;
} }
.navbar-kahoot { .navbar-kahoot {
background-color: var(--kahoot-purple); background-color: var(--kahoot-purple);
box-shadow: 0 4px 12px rgba(0,0,0,0.15); box-shadow: 0 4px 12px rgba(0,0,0,0.15);
} }
.navbar-brand { .navbar-brand {
font-weight: 700; font-weight: 700;
font-size: 1.8rem; font-size: 1.8rem;
color: #fff !important; color: #fff !important;
letter-spacing: 1px; letter-spacing: 1px;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.2); text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.2);
} }
.btn-kahoot-login { .btn-kahoot-login {
background-color: var(--kahoot-blue); background-color: var(--kahoot-blue);
color: white; color: white;
font-weight: 600; font-weight: 600;
border: none; border: none;
border-bottom: 4px solid #0c4891; border-bottom: 4px solid #0c4891;
transition: all 0.2s ease; transition: all 0.2s ease;
} }
.btn-kahoot-login:hover { .btn-kahoot-login:hover {
background-color: #0f56ab; background-color: #0f56ab;
color: white; color: white;
transform: translateY(-2px); transform: translateY(-2px);
} }
/* Estilos del Dropdown de usuario */ .btn-kahoot-register {
.user-dropdown-btn { background-color: var(--kahoot-green);
background: rgba(255, 255, 255, 0.15); color: white;
color: white; font-weight: 600;
border: 2px solid rgba(255, 255, 255, 0.3); border: none;
border-radius: 50px; border-bottom: 4px solid var(--kahoot-green-hover);
padding: 8px 18px; transition: all 0.2s ease;
font-weight: 600; }
transition: all 0.2s ease;
} .btn-kahoot-register:hover {
background-color: #2bb00f;
.user-dropdown-btn:hover, color: white;
.user-dropdown-btn:focus, transform: translateY(-2px);
.user-dropdown-btn.show { }
background: rgba(255, 255, 255, 0.3);
color: white; .user-dropdown-btn {
border-color: #fff; background: rgba(255, 255, 255, 0.15);
box-shadow: none; color: white;
} border: 2px solid rgba(255, 255, 255, 0.3);
border-radius: 50px;
.user-dropdown-menu { padding: 8px 18px;
border-radius: 15px; font-weight: 600;
border: none; transition: all 0.2s ease;
box-shadow: 0 10px 25px rgba(0,0,0,0.2); }
padding: 10px;
min-width: 200px; .user-dropdown-btn:hover,
margin-top: 10px !important; .user-dropdown-btn:focus,
} .user-dropdown-btn.show {
background: rgba(255, 255, 255, 0.3);
.user-dropdown-menu .dropdown-item { color: white;
border-radius: 10px; border-color: #fff;
font-weight: 600; box-shadow: none;
padding: 10px 15px; }
transition: all 0.15s ease;
} .user-dropdown-menu {
border-radius: 15px;
.user-dropdown-menu .dropdown-item:hover { border: none;
background-color: #f0eafb; box-shadow: 0 10px 25px rgba(0,0,0,0.2);
color: var(--kahoot-purple); padding: 10px;
} min-width: 200px;
margin-top: 10px !important;
.user-dropdown-menu .dropdown-item.logout-item { }
color: var(--kahoot-red);
} .user-dropdown-menu .dropdown-item {
border-radius: 10px;
.user-dropdown-menu .dropdown-item.logout-item:hover { font-weight: 600;
background-color: #fde8ea; padding: 10px 15px;
color: var(--kahoot-red); transition: all 0.15s ease;
} }
.btn-play-kahoot { .user-dropdown-menu .dropdown-item:hover {
background-color: var(--kahoot-green); background-color: #f0eafb;
color: white; color: var(--kahoot-purple);
font-size: 2.2rem; }
font-weight: 700;
width: 100%; .user-dropdown-menu .dropdown-item.logout-item {
padding: 30px 20px; color: var(--kahoot-red);
border-radius: 20px; }
border: none;
border-bottom: 8px solid var(--kahoot-green-hover); .user-dropdown-menu .dropdown-item.logout-item:hover {
box-shadow: 0 8px 15px rgba(0,0,0,0.2); background-color: #fde8ea;
transition: all 0.1s ease; color: var(--kahoot-red);
display: flex; }
align-items: center;
justify-content: center; .btn-play-kahoot {
gap: 15px; background-color: var(--kahoot-green);
} color: white;
font-size: 2.2rem;
.btn-play-kahoot:hover { font-weight: 700;
background-color: #2bb00f; width: 100%;
color: white; padding: 30px 20px;
transform: translateY(-3px); border-radius: 20px;
box-shadow: 0 12px 20px rgba(0,0,0,0.25); border: none;
} border-bottom: 8px solid var(--kahoot-green-hover);
box-shadow: 0 8px 15px rgba(0,0,0,0.2);
.btn-play-kahoot:active { transition: all 0.1s ease;
transform: translateY(4px); display: flex;
border-bottom: 2px solid var(--kahoot-green-hover); align-items: center;
} justify-content: center;
gap: 15px;
.ranking-card { }
border-radius: 20px;
border: none; .btn-play-kahoot:hover {
box-shadow: 0 8px 20px rgba(0,0,0,0.08); background-color: #2bb00f;
overflow: hidden; color: white;
} transform: translateY(-3px);
box-shadow: 0 12px 20px rgba(0,0,0,0.25);
.ranking-header { }
background-color: var(--kahoot-yellow);
color: #333; .btn-play-kahoot:active {
padding: 15px 20px; transform: translateY(4px);
font-weight: 700; border-bottom: 2px solid var(--kahoot-green-hover);
} }
.trophy-icon { .ranking-card {
font-size: 3rem; border-radius: 20px;
color: var(--kahoot-yellow); border: none;
margin-bottom: 10px; box-shadow: 0 8px 20px rgba(0,0,0,0.08);
} overflow: hidden;
</style> }
<nav class="navbar navbar-expand-lg navbar-kahoot py-3 mb-4"> .ranking-header {
<div class="container"> background-color: var(--kahoot-yellow);
<a class="navbar-brand" href="index.php"> color: #333;
<i class="fa-solid fa-gamepad me-2"></i>TRIVIAGMÁTICO padding: 15px 20px;
</a> font-weight: 700;
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent"> }
<span class="navbar-toggler-icon"></span>
</button> .trophy-icon {
font-size: 3rem;
<div class="collapse navbar-collapse" id="navbarContent"> color: var(--kahoot-yellow);
<ul class="navbar-nav me-auto mb-2 mb-lg-0"></ul> margin-bottom: 10px;
}
<div class="d-flex align-items-center gap-3">
<?php if ($isLoggedIn): ?> /* Estilos modales */
<!-- Menú desplegable --> .modal-content {
<div class="dropdown"> border-radius: 20px;
<button class="btn user-dropdown-btn dropdown-toggle d-flex align-items-center gap-2" overflow: hidden;
type="button" }
id="userDropdown" </style>
data-bs-toggle="dropdown"
aria-expanded="false"> <nav class="navbar navbar-expand-lg navbar-kahoot py-3 mb-4">
<i class="fa-solid fa-circle-user fa-lg text-warning"></i> <div class="container">
<span><?= htmlspecialchars($username) ?></span> <a class="navbar-brand" href="index.php">
</button> <i class="fa-solid fa-gamepad me-2"></i>TRIVIAGMÁTICO
<ul class="dropdown-menu dropdown-menu-end user-dropdown-menu" aria-labelledby="userDropdown"> </a>
<li> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent">
<a class="dropdown-item d-flex align-items-center gap-2" href="perfil.php"> <span class="navbar-toggler-icon"></span>
<i class="fa-solid fa-user text-primary"></i> Perfil </button>
</a>
</li> <div class="collapse navbar-collapse" id="navbarContent">
<li><hr class="dropdown-divider"></li> <ul class="navbar-nav me-auto mb-2 mb-lg-0"></ul>
<li>
<a class="dropdown-item logout-item d-flex align-items-center gap-2" href="logout.php"> <div class="d-flex align-items-center gap-3">
<i class="fa-solid fa-right-from-bracket"></i> Cerrar Sesión <?php if ($isLoggedIn): ?>
</a> <!-- Menú desplegable cuando la sesión está iniciada -->
</li> <div class="dropdown">
</ul> <button class="btn user-dropdown-btn dropdown-toggle d-flex align-items-center gap-2"
</div> type="button"
<?php else: ?> id="userDropdown"
<a href="login.php" class="btn btn-kahoot-login rounded-pill px-4"> data-bs-toggle="dropdown"
<i class="fa-solid fa-right-to-bracket me-1"></i> Iniciar Sesión aria-expanded="false">
</a> <i class="fa-solid fa-circle-user fa-lg text-warning"></i>
<?php endif; ?> <span><?= htmlspecialchars($username) ?></span>
</div> </button>
</div> <ul class="dropdown-menu dropdown-menu-end user-dropdown-menu" aria-labelledby="userDropdown">
</div> <li>
</nav> <a class="dropdown-item d-flex align-items-center gap-2" href="perfil.php">
<i class="fa-solid fa-user text-primary"></i> Perfil
</a>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item logout-item d-flex align-items-center gap-2" href="logout.php">
<i class="fa-solid fa-right-from-bracket"></i> Cerrar Sesión
</a>
</li>
</ul>
</div>
<?php else: ?>
<!-- Botones que abren los modales cuando NO hay sesión iniciada -->
<button type="button" class="btn btn-kahoot-login rounded-pill px-4" data-bs-toggle="modal" data-bs-target="#modalLogin">
<i class="fa-solid fa-right-to-bracket me-1"></i> Iniciar Sesión
</button>
<button type="button" class="btn btn-kahoot-register rounded-pill px-4" data-bs-toggle="modal" data-bs-target="#modalRegistro">
<i class="fa-solid fa-user-plus me-1"></i> Registrarse
</button>
<?php endif; ?>
</div>
</div>
</div>
</nav>
<!-- MODAL DE LOGIN -->
<div class="modal fade" id="modalLogin" tabindex="-1" aria-labelledby="loginModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-dark">
<div class="modal-header">
<h1 class="modal-title fs-5 fw-bold" id="loginModalLabel">
<i class="fa-solid fa-right-to-bracket text-primary me-2"></i>Iniciar sesión
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
</div>
<div class="modal-body">
<form id="formLogin">
<div class="form-floating mb-3">
<input type="email" class="form-control border-dark" id="loginEmail" name="email" placeholder="Correo electrónico" required>
<label for="loginEmail">Correo electrónico</label>
</div>
<div class="form-floating mb-3">
<input type="password" class="form-control border-dark" id="loginPassword" name="password" placeholder="Contraseña" required>
<label for="loginPassword">Contraseña</label>
</div>
<div class="form-check">
<input class="form-check-input" id="recordar" name="recordar" type="checkbox" />
<label for="recordar" class="small">Recuérdeme durante 10 días</label>
</div>
<input type="hidden" name="orden" value="validar">
</form>
<div id="errorLogin" class="text-danger fw-bold mt-2"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary rounded-pill px-3" data-bs-dismiss="modal">Cancelar</button>
<button type="button" class="btn btn-primary rounded-pill px-4" id="botonAceptarLogin">Entrar</button>
</div>
</div>
</div>
</div>
<!-- MODAL DE REGISTRO -->
<div class="modal fade" id="modalRegistro" tabindex="-1" aria-labelledby="registroModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-dark">
<div class="modal-header">
<h1 class="modal-title fs-5 fw-bold" id="registroModalLabel">
<i class="fa-solid fa-user-plus text-success me-2"></i>Registrarse
</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
</div>
<div class="modal-body">
<form id="formRegistro">
<div class="form-floating mb-3">
<input type="text" class="form-control border-dark" id="regNombre" name="nombre" placeholder="Nombre" required>
<label for="regNombre">Nombre</label>
</div>
<div class="form-floating mb-3">
<input type="email" class="form-control border-dark" id="regEmail" name="email" placeholder="Correo electrónico" required>
<label for="regEmail">Correo electrónico</label>
</div>
<div class="form-floating mb-3">
<input type="password" class="form-control border-dark" id="regPassword" name="password" placeholder="Contraseña" required>
<label for="regPassword">Contraseña</label>
</div>
<div class="form-floating mb-3">
<input type="password" class="form-control border-dark" id="regPasswordConfirm" name="passwordConfirm" placeholder="Confirmar contraseña" required>
<label for="regPasswordConfirm">Confirmar contraseña</label>
</div>
<input type="hidden" name="orden" value="registrar">
</form>
<div id="errorRegistro" class="text-danger fw-bold mt-2"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary rounded-pill px-3" data-bs-dismiss="modal">Cancelar</button>
<button type="button" class="btn btn-success rounded-pill px-4" id="botonAceptarRegistro">Registrarse</button>
</div>
</div>
</div>
</div>