feat(rgpd): política de privacidade e termos, mapa a pedido, fotos locais, retenção, tema claro/escuro
- Política de privacidade reescrita: tabela de dados/finalidades/fundamento (inclui os pedidos de aula, inscrição e eventos com IP), prazos concretos, subcontratantes, Google Maps e reviews, cookies. Termos e condições novos (/home/termos), no rodapé e no sitemap. Campos [ENTRE PARÊNTESES RETOS] e revisão por jurista pendentes antes de publicar no domínio real. - Google Maps só carrega ao carregar em «Mostrar mapa» (map_click_to_load); as fotos dos autores das reviews são guardadas pelo servidor em uploads/reviews/ e servidas localmente (review_avatar_url). - Retenção que a política declara, aplicada pelo cron (04:00): leads com mais de 12 meses → lixeira; blocked_submissions e outbox de segurança apagados aos 90 dias (trash_retention_sweep, auditado). - Backoffice e login com tema claro/escuro/automático: data-bs-theme aplicado no <head> antes do CSS (sem flash), escolha em localStorage, segue o sistema em tempo real, color-scheme e theme-color para os dois. Cores próprias passaram a variáveis do Bootstrap. lang="pt-PT". Testado numa cópia da BD de produção: 72/72 verificações. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
04c8c83e66
commit
b202262da0
16 files changed
+297
-34
No files matched your search
+3
-2
@@ -540,7 +540,8 @@ if ($reviews):
|
||||
<figure class="review-card">
|
||||
<?php // Reviewer first: big photo (or initial), name, date, stars — then the text, smaller. ?>
|
||||
<div class="rv-avatar">
|
||||
<?php if ($r['author_photo'] !== ''): ?><img src="<?= htmlspecialchars($r['author_photo']) ?>" alt="" loading="lazy" referrerpolicy="no-referrer" width="84" height="84">
|
||||
<?php $rv_img = review_avatar_url($r); /* guardada no próprio site (config/functions_privacy.php) */ ?>
|
||||
<?php if ($rv_img !== ''): ?><img src="<?= htmlspecialchars($rv_img) ?>" alt="" loading="lazy" decoding="async" width="84" height="84">
|
||||
<?php else: ?><span aria-hidden="true"><?= htmlspecialchars(mb_strtoupper(mb_substr($r['author'], 0, 1))) ?></span><?php endif; ?>
|
||||
</div>
|
||||
<figcaption class="rv-author">
|
||||
@@ -641,7 +642,7 @@ $session = session();
|
||||
if (strpos($maps_embed, 'loading=') === false) {
|
||||
$maps_embed = str_replace('<iframe ', '<iframe loading="lazy" ', $maps_embed);
|
||||
}
|
||||
echo clean_map_embed($maps_embed);
|
||||
echo map_click_to_load(clean_map_embed($maps_embed), (string) ($info['google_maps_link'] ?? ''));
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user