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>
135 lines
5.2 KiB
Markdown
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*
|