Files
Jacek Pyziak 28d38156e2 feat(03-cookie-consent): integrate CookieNoticePro with Google Consent Mode v2
Phase 3 complete:
- Copy CookieNoticePro library to libraries/CookieNoticePro/
- Fix bug: analytics_storage sent 'granted' instead of 'denied' on rejection
- Add Consent Mode v2 default-denied init before GTM snippet in layout-logged.php
- Fix plugin init: cookieNoticePro.init() per library docs
- Fix duplicate button label (CSS display:none for acceptBtnSettingsLabel)
- Add Bootstrap 5 compatibility reset for banner buttons
- Set regulamin link to https://bilety.brzezovka.pl/tickets/regulamin/

v0.2 Analytics & Privacy milestone complete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:50:45 +02:00

135 lines
5.2 KiB
Markdown

---
phase: 03-cookie-consent
plan: 01
subsystem: ui
tags: [cookies, gdpr, consent-mode-v2, gtm, cookienoticepro]
requires:
- phase: 02-purchase-event-prepayment
provides: GTM już wdrożony w layout-logged.php
provides:
- Baner zgody na cookies (CookieNoticePro) zintegrowany z serwisem
- Google Consent Mode v2 z domyślnymi denied przed GTM
- Naprawiony błąd analytics_storage w bibliotece CookieNoticePro
affects: []
tech-stack:
added: [CookieNoticePro jQuery plugin]
patterns: [Consent Mode v2 default-denied init before GTM snippet]
key-files:
created:
- libraries/CookieNoticePro/cookienoticepro.script.js
- libraries/CookieNoticePro/cookienoticepro.style.css
modified:
- templates/site/layout-logged.php
key-decisions:
- "Inicjalizacja: cookieNoticePro.init() zamiast $.fn.cookieNoticePro() — zgodnie z dokumentacją biblioteki"
- "acceptBtnSettingsLabel ukryty przez CSS (display:none) — JS nie ustawiał stanu początkowego"
patterns-established:
- "Consent Mode v2 default init zawsze przed snippetem GTM w <head>"
duration: ~45min
started: 2026-04-26T00:00:00Z
completed: 2026-04-26T00:00:00Z
---
# Phase 3 Plan 01: Cookie Consent Banner Summary
**CookieNoticePro z Google Consent Mode v2 wdrożony — serwis spełnia wymogi RODO, analytics_storage poprawnie ustawiane na denied przy odmowie zgody.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~45 min |
| Tasks | 2 auto + 1 checkpoint |
| Files modified | 3 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Consent Mode v2 default przed GTM | Pass | Blok w `<head>` przed `<!-- Google Tag Manager -->` |
| AC-2: Baner przy pierwszej wizycie | Pass | Zweryfikowane manualnie |
| AC-3: Naprawa analytics_storage denied | Pass | Linia ~351: `'granted'``'denied'` w bloku else |
| AC-4: Akceptacja → granted | Pass | Blok if (analytics accepted) bez zmian |
| AC-5: Pliki biblioteki obecne | Pass | `libraries/CookieNoticePro/` skonfigurowany |
## Accomplishments
- Skopiowano i zintegrowano bibliotekę CookieNoticePro z istniejącym projektem
- Naprawiono błąd biblioteki: `analytics_storage: 'granted'``'denied'` w bloku odrzucenia analytics
- Consent Mode v2 inicjalizowany z defaultami `denied` przed snippetem GTM — wymaganie Google od marca 2024
- Baner wyświetla się przy pierwszej wizycie, zapamiętuje wybór przez 365 dni
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `libraries/CookieNoticePro/cookienoticepro.script.js` | Created | Biblioteka banera — zkopiona + naprawiony błąd analytics_storage + link regulaminu |
| `libraries/CookieNoticePro/cookienoticepro.style.css` | Created | Style banera — zkopione + Bootstrap 5 compat reset + initial state fix |
| `templates/site/layout-logged.php` | Modified | Consent Mode v2 default przed GTM, CSS/JS banera, inicjalizacja `cookieNoticePro.init()` |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| `cookieNoticePro.init()` zamiast `$.fn.cookieNoticePro()` | Demo `index.html` z biblioteki pokazuje właściwy sposób inicjalizacji | Poprawne uruchomienie banera |
| CSS `display:none` na `.acceptBtnSettingsLabel` | JS przełącza etykiety tylko na click — nie ustawia stanu początkowego | Brak duplikatu tekstu w przycisku "Akceptuj/Zatwierdź" |
| Bootstrap 5 compat reset w CSS | Bootstrap nadpisuje `line-height`, `font-size` przycisków | Poprawny wygląd przycisków banera |
## Deviations from Plan
### Summary
| Type | Count | Impact |
|------|-------|--------|
| Auto-fixed | 3 | Niezbędne poprawki, brak scope creep |
| Scope additions | 1 | Drobna zmiana na prośbę użytkownika |
**Total impact:** Drobne poprawki wynikające z integracji z Bootstrap 5 i specyfiki biblioteki
### Auto-fixed Issues
**1. Inicjalizacja pluginu**
- **Found during:** Checkpoint (błąd konsoli)
- **Issue:** `$.cookieNoticePro is not a function` — plugin rejestruje się jako `$.fn`, nie `$`
- **Fix:** `$.cookieNoticePro()``$.fn.cookieNoticePro()``cookieNoticePro.init()`
- **Files:** `templates/site/layout-logged.php`
**2. Duplikat tekstu w przycisku akceptacji**
- **Found during:** Checkpoint (feedback użytkownika)
- **Issue:** `.acceptBtnSettingsLabel` ("Zatwierdź") widoczny razem z `.acceptBtnLabel` ("Akceptuj") — brak initial hide w JS
- **Fix:** Dodano `display: none` w CSS dla `.acceptBtnSettingsLabel`
- **Files:** `libraries/CookieNoticePro/cookienoticepro.style.css`
**3. Bootstrap 5 button override**
- **Found during:** Checkpoint (button layout)
- **Issue:** Bootstrap nadpisuje `line-height` i `font-size` przycisków banera
- **Fix:** CSS reset z `!important`-safe specificity dla `.btn-wrap button`
- **Files:** `libraries/CookieNoticePro/cookienoticepro.style.css`
### Scope Additions
- Link regulaminu zmieniony na `https://bilety.brzezovka.pl/tickets/regulamin/` (prośba użytkownika podczas weryfikacji)
## Next Phase Readiness
**Ready:**
- v0.2 Analytics & Privacy — wszystkie 3 fazy kompletne
- Tracking ecommerce (Phase 1+2) + RODO (Phase 3) wdrożone
**Concerns:**
- Brak — integracja stabilna
**Blockers:**
- None
---
*Phase: 03-cookie-consent, Plan: 01*
*Completed: 2026-04-26*