Files
sistema_funcionando_lastwar/common/helpers/url_helper.php
nickpons666 48671dc88e Implementar tema claro/oscuro con Bootstrap 5
- Agregar atributo data-bs-theme al HTML
- Implementar botón toggle con íconos sol/luna en navegación
- Agregar estilos CSS para modo oscuro (variables, componentes, tablas)
- Implementar JavaScript para funcionalidad toggle con persistencia localStorage
- Agregar detección automática del tema del sistema
- Fix específico para columna "Contenido (Previo)" en sent_messages.php
- Mejorar Content Security Policy para archivos .map de Bootstrap
- Configuración de entorno automática para .env.pruebas

Características:
- Toggle claro/oscuro con persistencia
- Detección automática de preferencias del sistema
- Estilos personalizados para componentes en modo oscuro
- Compatibilidad con todas las páginas del sistema
2026-01-17 16:13:19 -06:00

75 lines
2.3 KiB
PHP
Executable File

<?php
// Incluir el archivo de configuración
require_once __DIR__ . '/../../config/config.php';
/**
* Establece las cabeceras de seguridad, incluida la Content-Security-Policy.
* Debe llamarse antes de cualquier salida HTML.
*/
function set_security_headers() {
// CSP para permitir recursos solo del propio dominio y CDNs de confianza
$csp = "default-src 'self'; "
. "script-src 'self' https://cdn.jsdelivr.net https://code.jquery.com 'unsafe-inline'; " // unsafe-inline para scripts de bootstrap si es necesario
. "style-src 'self' https://cdn.jsdelivr.net 'unsafe-inline'; " // unsafe-inline para estilos de bootstrap
. "img-src 'self' data: " . BOT_BASE_URL . "; " // permitir imágenes del propio dominio, data URIs y el dominio externo
. "font-src 'self' https://cdn.jsdelivr.net; "
. "connect-src 'self' https://cdn.jsdelivr.net;"; // Para archivos .map de Bootstrap
header("Content-Security-Policy: " . $csp);
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("X-XSS-Protection: 1; mode=block");
}
/**
* Genera una URL absoluta para el sitio
*
* @param string $path Ruta relativa
* @return string URL completa
*/
function site_url($path = '') {
return rtrim(BOT_BASE_URL, '/') . '/' . ltrim($path, '/');
}
/**
* Genera una URL para los assets (CSS, JS, imágenes, etc.)
*
* @param string $path Ruta relativa al archivo de asset
* @return string URL completa al asset
*/
function asset($path) {
return site_url('assets/' . ltrim($path, '/'));
}
/**
* Redirige al usuario a una URL específica
*
* @param string $url URL a la que redirigir
* @param int $statusCode Código de estado HTTP (por defecto 302)
*/
function redirect($url, $statusCode = 302) {
header('Location: ' . $url, true, $statusCode);
exit();
}
/**
* Obtiene la URL actual completa
*
* @param string $path Ruta relativa
* @return string URL completa
*/
function current_url() {
$protocol = "http://";
return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
/**
* Verifica si la URL actual coincide con el patrón dado
*
* @param string $pattern Patrón a verificar
* @return bool Verdadero si coincide, falso en caso contrario
*/
function is_current_url($pattern) {
$current = current_url();
return (strpos($current, $pattern) !== false);
}