Files
acaoopcao/includes/theme.php
T
2026-08-21 22:57:44 +00:00

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';