--- 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 " 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 `` przed `` | | 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*