Plugin local Moodle · Gestor de consentimento

Advanced Cookie & Consent Manager

Guia completo de configuração, modelo de consentimento, integração Google, opt-out EUA, relatórios de conformidade e testes operacionais.

1. Visão geral

O plugin local_advancedcookiebanner gere o consentimento de cookies/trackers, bloqueia categorias opcionais antes do consentimento, regista decisões e suporta cenários de privacidade (incluindo opt-out EUA).

Categorias de consentimento granulares Hook API (Moodle) Provedor Privacy API Audit log / retenção

2. Instalação

  1. Coloque o plugin em /local/advancedcookiebanner.
  2. Execute a atualização a partir de /admin.
  3. Execute Purge all caches.
Importante: após alterações AMD/CSS, purgue sempre as caches do Moodle e faça um hard refresh do navegador.

3. Definições

Caminho: Site administration -> Plugins -> Local plugins -> Advanced Cookie Banner

ÁreaOpçõesDescrição
Coreenabled, consentversion, consentexpirydays, logretentiondaysAtivação, versionamento e ciclo de vida das evidências de consentimento.
Regulamentosjurisdictionprofile, showdonotsellshare, respectdnt, respectgpcPerfil de jurisdição e sinais de privacidade do navegador.
UIbannerposition, showfloatingbutton, floatingbuttonposition, hidefloatingafteracceptPosicionamento do banner/botão; hidefloatingafteraccept ativa a ação Close permanently no cabeçalho do modal.
Secções do modalshowcategoriessection, showpolicydetailssection, toggles de categoriasControlo da visibilidade das secções do modal.
Googleenablega4, enablegtm, gtmconsentmodeControlo de carregamento do Google e sinalização de consentimento.

5. GA4 / GTM

  • GA4/GTM só iniciam após consentimento analytics.
  • Com gtmconsentmode=1, as atualizações de consentimento são enviadas ao Google.
  • Sem consentimento analytics = sem pedidos ao Google Analytics/Tag Manager.

6. „Não vender/partilhar”

O clique guarda us_optout e aplica marketing=false.

Estado
us_optout
Marketing
desativado
Estado UI
aria-pressed=true

7. Relatório de conformidade

Relatório: /local/advancedcookiebanner/report.php

  • lista de verificação de configuração,
  • cartões de estatísticas de evidências de consentimento,
  • matriz de prontidão por framework.
  • Página de relatório Cookie Scanner: /local/advancedcookiebanner/scannerreport.php.
  • As tabelas do scanner suportam pesquisa e filtragem por coluna; URLs longos ajustam-se de forma responsiva.

8. Endpoints e dados

  • /local/advancedcookiebanner/consent.php - endpoint de escrita de decisões.
  • /local/advancedcookiebanner/client_privacy.php - exportar/eliminar para clientid anónimo com token HMAC.
  • Tabela: local_acbanner_consent.
  • Tabela: local_acbanner_scan_run (metadados de execução do scanner).
  • Tabela: local_acbanner_scan_finding (achados detetados pelo scanner).
  • /local/advancedcookiebanner/scanner.php - endpoint AJAX do scanner manual.

9. Cobertura regulatória

GDPR (EU & UK)CCPA/CPRAVCDPA PIPEDALGPDCTDPACPA UCPAPDPLPOPIAnFADP DPAPrivacy ActPDPA

A cobertura indica suporte técnico aos controlos. A conformidade legal final depende do deployment real, configuração e validação legal da sua organização.

10. Testes

  1. Incógnito: verificar primeira camada e simetria Accept/Reject.
  2. Teste de categorias: preferences/analytics/marketing/externalmedia.
  3. Teste de retirada de consentimento e limpeza de cookies.
  4. Teste de opt-out EUA e estado us_optout.
  5. Rede: sem pedidos ao Google antes do consentimento analytics.
  6. Teste de fumo do scanner: executar Run scan na página de relatório do scanner.
  7. Teste de página alvo: executar Scan selected page e verificar retorno + achados.

Teste de reset de estado (QA)

Para testar do zero sem fechar o navegador, limpe o estado local de consentimento:

localStorage.removeItem("local_advancedcookiebanner_consent");
localStorage.removeItem("local_advancedcookiebanner_clientid");
localStorage.removeItem("local_advancedcookiebanner_clienttoken");
document.cookie = "acb_consent_state=; Max-Age=0; path=/";
document.cookie = "acb_consent_version=; Max-Age=0; path=/";
document.cookie = "acb_clientid=; Max-Age=0; path=/";
document.cookie = "acb_consent_payload=; Max-Age=0; path=/";
location.reload();

Nota: no modo incógnito, as decisões são geralmente recordadas na mesma sessão de janela privada. Após fechar todas as janelas privadas, o estado deve ser reposto.

11. Resolução de problemas

  • Assets antigos: Purge all caches + hard refresh.
  • Sem acesso ao relatório: verificar capability local/advancedcookiebanner:managelogs.
  • O script inicia sem consentimento: verificar type="text/plain" e data-cookie-category.