Wtyczka lokalna Moodle · Zarządzanie zgodami

Advanced Cookie & Consent Manager

Kompletny przewodnik po konfiguracji, modelu zgód, integracji Google, opt-out US, raportach zgodności i testach operacyjnych.

1. Przegląd

Plugin local_advancedcookiebanner zarządza zgodami cookies i trackerów, blokuje opcjonalne kategorie przed zgodą, loguje decyzje i wspiera scenariusze privacy (w tym US opt-out).

Granularne kategorie zgody Hook API (Moodle) Privacy API provider Audit log / retention

2. Instalacja

  1. Umieść plugin w /local/advancedcookiebanner.
  2. Uruchom upgrade z poziomu /admin.
  3. Wykonaj Purge all caches.
Ważne: po zmianach AMD/CSS zawsze czyść cache Moodle i zrób hard refresh przeglądarki.

3. Ustawienia

Ścieżka: Site administration -> Plugins -> Local plugins -> Advanced Cookie Banner

ObszarOpcjeOpis
Coreenabled, consentversion, consentexpirydays, logretentiondaysWłączenie, wersjonowanie i cykl życia dowodów zgody.
Regulacjejurisdictionprofile, showdonotsellshare, respectdnt, respectgpcProfil jurysdykcji i sygnały prywatności przeglądarki.
UIbannerposition, showfloatingbutton, floatingbuttonposition, hidefloatingafteracceptPozycja bannera/przycisku; hidefloatingafteraccept włącza akcję Close permanently w nagłówku modala.
Sekcje modalashowcategoriessection, showpolicydetailssection, przełączniki kategoriiKontrola widoczności sekcji.
Googleenablega4, enablegtm, gtmconsentmodeŁadowanie i sterowanie consentem Google.
Custom embedycustomembedproviders, externalmediabypassproviderscustomembedproviders poprawia rozpoznanie i nazwę providera; externalmediabypassproviders dodaje bypass blokady externalmedia dla wybranych dostawców (np. YouTube blokowany, Panopto dozwolone).

5. GA4 / GTM

  • GA4/GTM uruchamiają się dopiero po zgodzie analytics.
  • Przy gtmconsentmode=1 wysyłane są aktualizacje consent do Google.
  • Brak zgody analytics = brak requestów do Google analytics/tag manager.

6. „Nie sprzedawaj/nie udostępniaj”

Kliknięcie zapisuje us_optout i wymusza marketing=false.

Status
us_optout
Marketing
disabled
UI state
aria-pressed=true

7. Raport zgodności

Raport: /local/advancedcookiebanner/report.php

  • checklista konfiguracji,
  • kafelki statystyk zgód,
  • macierz gotowości per framework.
  • Podstrona raportu Cookie Scanner: /local/advancedcookiebanner/scannerreport.php.
  • Tabele skanera wspierają search i filtrowanie po kolumnach; długie URL zawijają się responsywnie.

8. Endpointy i dane

  • /local/advancedcookiebanner/consent.php - zapis decyzji.
  • /local/advancedcookiebanner/client_privacy.php - export/delete dla anonimowego clientid z tokenem HMAC.
  • Tabela: local_acbanner_consent.
  • Tabela: local_acbanner_scan_run (metadane uruchomień skanera).
  • Tabela: local_acbanner_scan_finding (wykryte elementy skanera).
  • /local/advancedcookiebanner/scanner.php - endpoint AJAX ręcznego skanera.

9. Coverage regulacji

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

Coverage oznacza wsparcie mechanizmów technicznych. Finalna zgodność prawna wymaga poprawnej konfiguracji i walidacji prawnej organizacji.

10. Testy

  1. Incognito: sprawdź pierwszą warstwę i symetrię Accept/Reject.
  2. Test kategorii: preferences/analytics/marketing/externalmedia.
  3. Test wycofania zgody i cleanup cookies.
  4. Test US opt-out i statusu us_optout.
  5. Network: brak Google requestów przed zgodą analytics.
  6. Scanner smoke test: uruchom Run scan na stronie skanera.
  7. Test strony docelowej: uruchom Scan selected page i sprawdź powrót + findings.

Test resetu stanu (QA)

Gdy chcesz testować od zera bez zamykania przeglądarki, wyczyść stan zgód lokalnie:

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

Uwaga: w incognito decyzja jest pamiętana w ramach tej samej sesji okna. Po zamknięciu wszystkich okien incognito stan powinien się wyzerować.

11. Rozwiązywanie problemów

  • Stare assets: Purge all caches + hard refresh.
  • Brak raportu: sprawdź capability local/advancedcookiebanner:managelogs.
  • Skrypt uruchamia się bez zgody: zweryfikuj type="text/plain" i data-cookie-category.