Skip to content

Releases: lukasz-slusarski/notification-centre

v1.10.3

v1.10.3 Pre-release
Pre-release

Choose a tag to compare

@lukasz-slusarski lukasz-slusarski released this 24 Sep 14:42
150e1fc

Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.

Security

  • Zarządzanie powiadomieniami domyślnie tylko dla administratora (manage_options). Wcześniej każdy z edit_posts (np. Autor, Kierownik sklepu) mógł opublikować popup widoczny dla wszystkich, w trybie raw także z własnym CSS. Wszystkie uprawnienia typu wpisu mapują się na filtr nc_manage_capability; strony, gdzie powiadomieniami zarządzają redaktorzy, mogą go rozszerzyć (np. edit_others_posts).
  • Token GitHub nie trafia już do cache opcji nc_all_options. Link w ustawieniach prowadzi do tokena „fine-grained” (tylko repozytorium wtyczki, Contents: Read-only) zamiast klasycznego tokena z dostępem do wszystkich repozytoriów.

Fixed

  • Aktualizacje z GitHuba działają w tle: aktualizator jest rejestrowany także w WP-Cron i WP-CLI, nie tylko po wejściu do panelu. Wcześniej automatyczne aktualizacje i wp plugin update nie widziały nowych wersji.

Performance

  • Paczka release zawiera zminifikowane pliki (bin/build.sh, terser i csso): main.js 105 KB → 40 KB (gzip 27 KB → 13 KB), style.css 50 KB → 30 KB. Wtyczka ładuje *.min.*, gdy istnieją; kopia z gita działa na plikach źródłowych. Paczka nie zawiera już katalogu tests.

🤖 Generated with Claude Code

https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1

v1.10.2

v1.10.2 Pre-release
Pre-release

Choose a tag to compare

@lukasz-slusarski lukasz-slusarski released this 24 Sep 14:03
499c98b

Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.

Changed

  • Ciasteczko klienta nc_customer tylko przy zgodzie Marketing w GetTerms (wcześniej Functional albo Marketing). Znacznik służy kierowaniu promocji, więc wymaga zgody marketingowej; przy jej braku lub cofnięciu ciasteczko jest usuwane.

Performance / Security

  • GET /nc/v1/notifications: pid z adresu jest brany pod uwagę tylko dla opublikowanego wpisu (boty z losowymi ID nie tworzą własnych wpisów cache). Odpowiedź dla gości ma Cache-Control: public, max-age (do 300 s i nie dłużej niż do najbliższej granicy harmonogramu), więc działa też bez LiteSpeed i w przeglądarce; odpowiedzi dla zalogowanych private, no-store.
  • Wyłączenie wtyczki zatrzymuje jej zadania cron; uninstall.php czyści też nc_hourly_cache_purge i ma poprawnie escapowane LIKE.
  • Nagłówki wtyczki: Requires at least: 5.8, Requires PHP: 7.4.

🤖 Generated with Claude Code

https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1

v1.10.1

v1.10.1 Pre-release
Pre-release

Choose a tag to compare

@lukasz-slusarski lukasz-slusarski released this 24 Sep 11:06
4dc23e7

Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.

Fixed

  • Rotacja: zamknięty popup blokował całą grupę. Z grupy wybierany był popup „najdawniej pokazany”, zanim sprawdzono, czy w ogóle da się go pokazać. Klient, który zamknął Q4 (zamknięty na zawsze), po pierwszym Hydro nie dostawał już nic z grupy promo-center. Teraz w losowaniu biorą udział tylko popupy, które można pokazać (nie zamknięte, w limicie wyświetleń, nie pokazane w tej wizycie, pasujące do urządzenia, przed godziną graniczną). Wspólny limit grupy bez zmian.
  • Zmiana ustawień wtyczki czyści cache stron (np. „Wyłącz pasek”, kolory, sticky są w HTML strony od 1.10). Jedno czyszczenie na zapis strony ustawień, tylko gdy coś się zmieniło.
  • Autoukrycie licznika w popupie blokowało kolejkę popupów (ID jako tekst).
  • Niepoprawna data licznika w pasku powodowała błąd krytyczny strony (PHP 8.3); teraz licznik jest pomijany.
  • Skrypt przy pasku z serwera po usunięciu zamkniętego lub wygasłego slajdu aktywuje następny (zamiast pustego paska przy kilku paskach).
  • Motywy bez Bricks: pasek „pod nagłówkiem” zostaje na ścieżce JS (w 1.10.0 stawał nad nagłówkiem).

Accessibility

  • Szuflada powiadomień (dialog modalny z przyciskami) jest drukowana tylko na stronach z dzwonkiem [notification_center]; wcześniej była ukrytym dialogiem na każdej stronie.
  • Popup na środku to dialog modalny: role="dialog", aria-modal, nazwa z tytułu, fokus na „Zamknij” po pokazaniu, Tab w pętli, powrót fokusu po zamknięciu. Popupy w rogach mają role="status" zamiast alert.
  • Krzyżyki mają aria-label="Zamknij", popup z samym obrazkiem ma alt z pola „Tekst alternatywny” obrazka w bibliotece mediów, a gdy puste, z tytułu (WCAG F89), pasek ma role="region" zamiast drugiego banner.

🤖 Generated with Claude Code

https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1

v1.10.0

v1.10.0 Pre-release
Pre-release

Choose a tag to compare

@lukasz-slusarski lukasz-slusarski released this 24 Sep 08:34
f19a845

Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release, więc inne strony nie dostaną tej wersji automatycznie.

Added

  • Odbiorcy „Tylko klienci (z zamówieniem)”. Zalogowani z co najmniej jednym zamówieniem albo przeglądarki oznaczone po zakupie ciasteczkiem nc_customer (strona podziękowania za zamówienie i zalogowany klient, tylko po zgodzie Functional albo Marketing w banerze GetTerms; przy cofnięciu zgody ciasteczko jest usuwane). O widoczności rozstrzyga przeglądarka, więc odpowiedź REST i strony zostają w cache. Skrypt znacznika jest dołączany tylko, gdy któreś opublikowane powiadomienie używa tej opcji. Honorowane jest też ciasteczko wdf_klient z mu-pluginu wdf-nc-customers-only.php, który ta funkcja zastępuje.
  • Grupa rotacyjna. Powiadomienia z tą samą nazwą grupy nie pokazują się jedno po drugim: z grupy wyświetla się najwyżej jedno (to, które najdawniej było pokazane), ze wspólnym limitem 3 wyświetleń na 7 dni i przerwą 24 h (filtr nc_rotation_limits).

Performance

  • Zero kodu wtyczki przy ładowaniu strony. main.js i style.css nie są już dołączane jako znaczniki. Mały skrypt w stopce (ok. 0,5 KB) doczytuje je przy pierwszym ruchu myszy, dotknięciu, klawiszu, kółku albo przewinięciu. PageSpeed Insights i roboty wyszukiwarek nie wchodzą w interakcję ze stroną, więc nie pobierają nic z wtyczki; zapytanie do REST też idzie dopiero po interakcji. W stronie zostają tylko dane ncData, zmienne CSS i (gdy jest) pasek z serwera ze stylami w linii. Licznik w pasku odlicza bez main.js. Kliknięcie w dzwonek przed doczytaniem jest odtwarzane.
  • Popupy automatyczne nie psują już LCP. Popup z opóźnieniem, czasem na stronie, bezczynnością albo bez wyzwalacza pokazuje się dopiero po pierwszej interakcji (dotknięcie, klik, klawisz, kółko myszy). Wcześniej obraz popupu na środku ekranu stawał się największym elementem strony: na wpisie bloga WDF LCP 13,1 s zamiast 5,5 s. Popup pojawia się 0,8 s po tej interakcji, a nie w jej trakcie, żeby nie wyskoczył pod palcem i nie przejął tego samego kliknięcia. Exit intent i klik w selektor działają bez zmian.
  • Pasek górny renderowany przez serwer (paski bez podziału na urządzenia, bez „tylko klienci” i grup rotacyjnych; paski z krzyżykiem też, a zamknięte wcześniej w tej przeglądarce skrypt przy pasku usuwa przed pierwszym renderem): stoi na miejscu od pierwszego wyrenderowania, więc treść nie skacze w dół (CLS). Na Bricks trafia od razu pod nagłówek (bricks_after_header). Style paska są wstawiane w linii tylko na stronach z paskiem. Czas życia cache strony w LiteSpeed jest skracany do najbliższej granicy harmonogramu (np. 10:00), a skrypt w linii ukrywa pasek, którego godzina graniczna już minęła.
  • Fluent Forms tylko wtedy, gdy potrzebny. Pliki Fluent Forms nie są już dołączane do każdej strony; main.js doczytuje je tuż przed pokazaniem popupu z formularzem.
  • GET /nc/v1/notifications cache'owalne dla gości. Front wysyła klasę urządzenia (d) i wersję (v), usuwa z adresu identyfikatory reklam (gclid, fbclid, ...). Z d odpowiedź dla gości idzie do cache LiteSpeed (TTL do 5 min albo do najbliższej granicy harmonogramu); bez d (stary main.js) zostaje no-cache.
  • Zdarzenia analityki w paczce: jeden POST /nc/v1/events na stronę (przy ukryciu karty, wyjściu albo po 10 s) zamiast osobnego zapytania na każde zdarzenie. Stary format pojedynczego zdarzenia nadal działa.
  • Koniec czyszczenia całego cache LiteSpeed przy każdym zapisie powiadomienia. Cache stron jest czyszczony tylko, gdy zmienia się coś, co jest w HTML: opublikowany pasek albo lista formularzy. Pasek z regułami „pokaż na stronie o ID” / „strona główna” czyści tylko te strony (tagi Po.<ID>, F), pasek na całą stronę czyści całość. Edycja popupu, szkic i autozapis już nie czyszczą cache sklepu.
  • GET /nc/v1/user-notifications tylko gdy powiadomienia WooCommerce są włączone (nc_woo_enabled).

Fixed

  • Baner z licznikiem dziennym i autoukrywaniem („Zamów do 10:00”) był widoczny jeszcze kilka minut po godzinie granicznej, z licznikiem ustawionym na jutro (porównanie > zamiast >=, transient na 5 min). Teraz znika dokładnie o tej godzinie.
  • Autoukrycie licznika usuwało cały pasek (razem z innymi paskami) albo zostawiało pustą nakładkę popupu i blokowało kolejkę. Teraz znika tylko ten jeden element, a popup zamyka się normalnie.
  • Niepoprawny selektor w wyzwalaczu „klik” rzucał wyjątek przy każdym kliknięciu na stronie.
  • Formularz z reCAPTCHA w popupie nie dawał się wysłać (grecaptcha is not defined): Fluent Forms dołącza skrypt Google podczas renderowania formularza, a treść popupu powstaje w zapytaniu REST, gdzie ten skrypt nigdy nie trafiał na stronę. REST przekazuje teraz jego adres (scripts), main.js ładuje go przed pokazaniem popupu. Na WDF dotyczyło to popupu z ebookiem (formularz 24).
  • Kolumna „Odbiorcy” na liście powiadomień pokazywała surowe guests.
  • Podgląd ?nc_preview=1 znów działa (parametr przekazywany do REST, bez transientu i bez cache).

🤖 Generated with Claude Code

https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1

v1.9.3 - Priorytet paska górnego (Top Bar)

Choose a tag to compare

@fgorny fgorny released this 26 Aug 07:48

Added

  • Priorytet paska górnego (Top Bar) - nowe pole „Priorytet" w sekcji Pasek na górze.

Gdy kilka pasków jest aktywnych w tym samym czasie, wtyczka nadal rotuje je w karuzeli, ale kolejność nie zależy już od daty publikacji: pasek z wyższym priorytetem renderowany jest jako pierwszy slajd - ten, który odwiedzający widzi zaraz po wejściu na stronę. Przy równym priorytecie obowiązuje dotychczasowa kolejność (przypięte, potem najnowsze).

Domyślna wartość 0 nie zmienia zachowania istniejących pasków.

v1.9.2

Choose a tag to compare

@fgorny fgorny released this 24 Aug 07:13

Fix: center popup overlay could stay invisible until scroll on WebKit (position:fixed + opacity:0 animation never painted without a forced reflow).

v1.9.1 - Fix: device targeting ignored real viewport width

Choose a tag to compare

@fgorny fgorny released this 04 Aug 09:40

Fixed

  • Device targeting ('Tylko mobile (telefony + tablety)' / 'Tylko desktop') is evaluated server-side via wp_is_mobile(), which reads the User-Agent header only and has no idea about the actual viewport width. A desktop browser in 'Request mobile site' mode, or with DevTools device emulation active, could send a mobile UA while the window was still full desktop width (e.g. 1920px) - so a mobile-only floating popup would still be shown.
  • Added an independent client-side guard in main.js: a mobile/tablet-targeted notification now also requires the real window.innerWidth to be below 992px (desktop-targeted requires >= 992px), checked at the moment the popup is actually displayed - not just when the API response was fetched.

Found on wodadlafirmy.pl: the 'Promo PWA' popup (mobile-only) was appearing on a desktop-width window.

v1.9.0 - Sync with production (retroactive)

Choose a tag to compare

@fgorny fgorny released this 04 Aug 09:40

Retroactive tag: production (wodadlafirmy.pl) had been deployed via manual FTP past v1.6.3 (last release published here) up through v1.9.0, without those changes being committed here. This release brings the repo's history in line with what was actually running in production, before the v1.9.1 fix. See CHANGELOG.md for the 1.6.4-1.9.0 changes that were merged in.

v1.6.3 - debug logging

Choose a tag to compare

@fgorny fgorny released this 21 Jul 13:00

Temporary diagnostic logging.

v1.6.2 - Instant cache invalidation on save

Choose a tag to compare

@fgorny fgorny released this 21 Jul 12:45

Fixes edits taking up to 5 minutes to appear — see CHANGELOG.md.