Plugin locale Moodle · Consent manager

Advanced Cookie & Consent Manager

Guida completa a configurazione, modello di consenso, integrazione Google, opt-out USA, report di conformità e test operativi.

1. Panoramica

Il plugin local_advancedcookiebanner gestisce i consensi cookie/tracker, blocca le categorie opzionali prima del consenso, registra le decisioni e supporta scenari privacy (incluso opt-out USA).

Categorie consenso granulari Hook API (Moodle) Provider Privacy API Audit log / retention

2. Installazione

  1. Posiziona il plugin in /local/advancedcookiebanner.
  2. Esegui upgrade da /admin.
  3. Esegui Purge all caches.
Importante: dopo modifiche AMD/CSS, esegui sempre purge cache Moodle e hard refresh del browser.

3. Impostazioni

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

AreaOpzioniDescrizione
Coreenabled, consentversion, consentexpirydays, logretentiondaysAbilitazione, versionamento e ciclo vita delle evidenze di consenso.
Normativejurisdictionprofile, showdonotsellshare, respectdnt, respectgpcProfilo giurisdizione e segnali privacy del browser.
UIbannerposition, showfloatingbutton, floatingbuttonposition, hidefloatingafteracceptPosizionamento banner/pulsante; hidefloatingafteraccept abilita azione Close permanently nell'header modal.
Sezioni modalshowcategoriessection, showpolicydetailssection, toggle categorieControllo visibilità delle sezioni modal.
Googleenablega4, enablegtm, gtmconsentmodeControllo caricamento Google e segnali consenso.
Embed personalizzaticustomembedproviders, externalmediabypassproviderscustomembedproviders migliora riconoscimento/naming provider; externalmediabypassproviders abilita bypass del blocco externalmedia per provider selezionati (esempio: YouTube bloccato, Panopto consentito).

5. GA4 / GTM

  • GA4/GTM partono solo dopo consenso analytics.
  • Con gtmconsentmode=1, gli update del consenso vengono inviati a Google.
  • Senza consenso analytics = nessuna richiesta verso Google Analytics/Tag Manager.

6. „Non vendere/non condividere”

Il click salva us_optout e forza marketing=false.

Stato
us_optout
Marketing
disabled
Stato UI
aria-pressed=true

7. Report di conformità

Report: /local/advancedcookiebanner/report.php

  • checklist configurazione,
  • card statistiche evidenze consenso,
  • matrice di readiness per framework.
  • Pagina report Cookie Scanner: /local/advancedcookiebanner/scannerreport.php.
  • Le tabelle scanner supportano ricerca e filtri per colonna; URL lunghi con wrapping responsive.

8. Endpoint e dati

  • /local/advancedcookiebanner/consent.php - endpoint scrittura decisioni.
  • /local/advancedcookiebanner/client_privacy.php - export/delete per clientid anonimo con token HMAC.
  • Tabella: local_acbanner_consent.
  • Tabella: local_acbanner_scan_run (metadati run scanner).
  • Tabella: local_acbanner_scan_finding (finding scanner rilevati).
  • /local/advancedcookiebanner/scanner.php - endpoint AJAX scanner manuale.

9. Copertura normativa

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

La copertura indica supporto tecnico ai controlli. La conformità legale finale dipende comunque dal deployment reale, configurazione e validazione legale dell'organizzazione.

10. Test

  1. Incognito: verifica primo layer e simmetria Accept/Reject.
  2. Test categorie: preferences/analytics/marketing/externalmedia.
  3. Test ritiro consenso e cleanup cookie.
  4. Test US opt-out e stato us_optout.
  5. Network: nessuna richiesta Google prima del consenso analytics.
  6. Scanner smoke test: esegui Run scan sulla pagina scanner report.
  7. Test pagina target: esegui Scan selected page e verifica ritorno + findings.

Test reset stato (QA)

Per testare da zero senza chiudere il browser, pulisci lo stato locale consenso:

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: in incognito, le decisioni restano in genere nella stessa sessione privata. Dopo la chiusura di tutte le finestre private, lo stato dovrebbe azzerarsi.

11. Troubleshooting

  • Asset vecchi: Purge all caches + hard refresh.
  • Nessun accesso report: verifica capability local/advancedcookiebanner:managelogs.
  • Script parte senza consenso: verifica type="text/plain" e data-cookie-category.