Moodle local plugin · Einwilligungsmodul

Advanced Cookie & Consent Manager

Vollständige Anleitung zur Konfiguration, Einwilligungsmodell, Google-Integration, US-Opt-out, Compliance-Berichterstattung und operativen QA-Tests.

1. Überblick

Das Plugin local_advancedcookiebanner verwaltet Cookie-/Tracker-Einwilligungen, blockiert optionale Kategorien vor der Einwilligung, protokolliert Entscheidungen und unterstützt Datenschutzszenarien (inkl. US-Opt-out).

Granulare Einwilligungskategorien Hook API (Moodle) Privacy API Provider Audit-Log / Aufbewahrung

2. Installation

  1. Plugin in /local/advancedcookiebanner ablegen.
  2. Upgrade über /admin ausführen.
  3. Purge all caches ausführen.
Wichtig: nach AMD/CSS-Änderungen immer Moodle-Caches leeren und Hard-Refresh im Browser durchführen.

3. Einstellungen

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

BereichOptionenBeschreibung
Coreenabled, consentversion, consentexpirydays, logretentiondaysAktivierung, Versionierung und Lebenszyklus der Einwilligungsnachweise.
Regulierungjurisdictionprofile, showdonotsellshare, respectdnt, respectgpcRechtsraumprofil und Browser-Datenschutzsignale.
UIbannerposition, showfloatingbutton, floatingbuttonposition, hidefloatingafteracceptBanner-/Button-Platzierung; hidefloatingafteraccept aktiviert die Aktion Close permanently im Modal-Header.
Modal-Bereicheshowcategoriessection, showpolicydetailssection, Kategorie-TogglesSteuerung der Sichtbarkeit der Modal-Bereiche.
Googleenablega4, enablegtm, gtmconsentmodeSteuerung des Google-Ladens und der Einwilligungssignalisierung.

5. GA4 / GTM

  • GA4/GTM starten erst nach analytics-Einwilligung.
  • Mit gtmconsentmode=1 werden Einwilligungsaktualisierungen an Google gesendet.
  • Ohne Analytics-Einwilligung = keine Anfragen an Google Analytics/Tag Manager.

6. „Nicht verkaufen/teilen”

Ein Klick speichert us_optout und setzt marketing=false durch.

Status
us_optout
Marketing
deaktiviert
UI-Zustand
aria-pressed=true

7. Compliance-Bericht

Bericht: /local/advancedcookiebanner/report.php

  • Konfigurations-Checkliste,
  • Statistik-Karten zu Einwilligungsnachweisen,
  • Framework-Bereitschaftsmatrix.
  • Cookie-Scanner-Berichtsseite: /local/advancedcookiebanner/scannerreport.php.
  • Scanner-Tabellen unterstützen Suche und Spaltenfilter; lange URLs werden responsiv umgebrochen.

8. Endpoints und Daten

  • /local/advancedcookiebanner/consent.php – Endpoint zum Schreiben von Entscheidungen.
  • /local/advancedcookiebanner/client_privacy.php – Export/Löschung für anonyme clientid mit HMAC-Token.
  • Tabelle: local_acbanner_consent.
  • Tabelle: local_acbanner_scan_run (Scanner-Lauf-Metadaten).
  • Tabelle: local_acbanner_scan_finding (vom Scanner erkannte Befunde).
  • /local/advancedcookiebanner/scanner.php – manueller Scanner-AJAX-Endpoint.

9. Regulatorische Abdeckung

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

Abdeckung bedeutet technische Unterstützung für Kontrollen. Die finale rechtliche Compliance hängt weiterhin von tatsächlichem Einsatz, Konfiguration und rechtlicher Validierung durch Ihre Organisation ab.

10. Tests

  1. Inkognito: erste Ebene und Accept/Reject-Symmetrie prüfen.
  2. Kategorietest: preferences/analytics/marketing/externalmedia.
  3. Einwilligungsrücknahme und Cookie-Bereinigung testen.
  4. US-Opt-out und Status us_optout testen.
  5. Netzwerk: keine Google-Anfragen vor Analytics-Einwilligung.
  6. Scanner-Smoke-Test: Run scan auf der Scanner-Berichtsseite ausführen.
  7. Zielseiten-Test: Scan selected page ausführen und Rückgabe + Befunde prüfen.

Zustands-Reset-Test (QA)

Zum Testen von Null ohne Browser zu schließen, lokalen Einwilligungszustand löschen:

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();

Hinweis: Im Inkognito-Modus werden Entscheidungen meist innerhalb derselben privaten Fenstersitzung gespeichert. Nach Schließen aller privaten Fenster sollte der Zustand zurückgesetzt sein.

11. Fehlerbehebung

  • Veraltete Assets: Purge all caches + Hard-Refresh.
  • Kein Berichtszugriff: Capability local/advancedcookiebanner:managelogs prüfen.
  • Skript startet ohne Einwilligung: type="text/plain" und data-cookie-category prüfen.