90 lines
2.9 KiB
PHP
90 lines
2.9 KiB
PHP
<?php
|
|
/**
|
|
* AçãoOpção — controle de identidade visual (tema) do sistema.
|
|
* Inclua este arquivo no topo de header.php, antes de qualquer saída HTML,
|
|
* sempre depois de includes/config.php (usamos AO_IS_PRODUCAO aqui).
|
|
*/
|
|
|
|
require_once __DIR__ . '/config.php';
|
|
|
|
$ao_temas_info = [
|
|
'verde' => [
|
|
'nome' => 'Verde',
|
|
'css' => 'assets/css/identidade-visual-verde.css',
|
|
'favicon' => 'assets/img/logos/verde/favicon.ico',
|
|
'icone' => 'assets/img/logos/verde/svg/icone-cor.svg',
|
|
'cor' => '#7FA653',
|
|
],
|
|
'marrom' => [
|
|
'nome' => 'Marrom',
|
|
'css' => 'assets/css/identidade-visual-marrom.css',
|
|
'favicon' => 'assets/img/logos/marrom/favicon.ico',
|
|
'icone' => 'assets/img/logos/marrom/svg/icone-cor.svg',
|
|
'cor' => '#A6754C',
|
|
],
|
|
'cinza' => [
|
|
'nome' => 'Cinza',
|
|
'css' => 'assets/css/identidade-visual-cinza.css',
|
|
'favicon' => 'assets/img/logos/cinza/favicon.ico',
|
|
'icone' => 'assets/img/logos/cinza/svg/icone-cor.svg',
|
|
'cor' => '#6B6F77',
|
|
],
|
|
];
|
|
|
|
$ao_modos_info = [
|
|
'claro' => ['nome' => 'Claro', 'icone' => '☀️'],
|
|
'escuro' => ['nome' => 'Escuro', 'icone' => '🌙'],
|
|
];
|
|
|
|
// Duração do cookie de identidade: 1 ano. Guardamos a escolha do usuário
|
|
// em cookie (não em sessão) justamente para que ela sobreviva ao fechar
|
|
// o navegador — é isso que "lembra" o tema/modo na próxima visita.
|
|
const AO_COOKIE_DURACAO = 60 * 60 * 24 * 365;
|
|
|
|
function ao_definir_cookie($nome, $valor) {
|
|
setcookie($nome, $valor, [
|
|
'expires' => time() + AO_COOKIE_DURACAO,
|
|
'path' => '/',
|
|
'secure' => AO_IS_PRODUCAO,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax',
|
|
]);
|
|
}
|
|
|
|
// Troca de tema/modo via link "?tema=marrom" e/ou "?modo=escuro" — grava
|
|
// em cookie e redireciona para a mesma URL sem o parâmetro, para manter
|
|
// o endereço limpo. Os dois podem vir juntos na mesma requisição.
|
|
$ao_precisa_redirecionar = false;
|
|
|
|
if (isset($_GET['tema']) && array_key_exists($_GET['tema'], $ao_temas_info)) {
|
|
ao_definir_cookie('ao_tema', $_GET['tema']);
|
|
$_COOKIE['ao_tema'] = $_GET['tema'];
|
|
$ao_precisa_redirecionar = true;
|
|
}
|
|
|
|
if (isset($_GET['modo']) && array_key_exists($_GET['modo'], $ao_modos_info)) {
|
|
ao_definir_cookie('ao_modo', $_GET['modo']);
|
|
$_COOKIE['ao_modo'] = $_GET['modo'];
|
|
$ao_precisa_redirecionar = true;
|
|
}
|
|
|
|
if ($ao_precisa_redirecionar) {
|
|
$destino = strtok($_SERVER['REQUEST_URI'], '?');
|
|
header('Location: ' . $destino);
|
|
exit;
|
|
}
|
|
|
|
$ao_tema = $_COOKIE['ao_tema'] ?? 'verde';
|
|
if (!array_key_exists($ao_tema, $ao_temas_info)) {
|
|
$ao_tema = 'verde';
|
|
}
|
|
|
|
$ao_modo = $_COOKIE['ao_modo'] ?? 'claro';
|
|
if (!array_key_exists($ao_modo, $ao_modos_info)) {
|
|
$ao_modo = 'claro';
|
|
}
|
|
|
|
$ao_tema_atual = $ao_temas_info[$ao_tema];
|
|
$ao_modo_atual = $ao_modos_info[$ao_modo];
|
|
$ao_proximo_modo = $ao_modo === 'claro' ? 'escuro' : 'claro';
|