Versão inicial em produção
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
<?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';
|
||||
Reference in New Issue
Block a user