WP Desk Care - zadbaj o swój biznes online!

Sprawdzona opieka techniczna dla Twojego sklepu.

Changelog – Flexible Currency Switcher for WooCommerce

Opublikowano: / Ostatnia modyfikacja:

# Changelog

Wszystkie istotne zmiany w tej wtyczce dokumentowane są w tym pliku.
Format oparty na [Keep a Changelog](https://keepachangelog.com/pl/1.0.0/),
wersjonowanie zgodne z [SemVer](https://semver.org/lang/pl/).

## [1.0.14] – 2026-07-31
### Changed
– Moduł wpdesk-integration wymieniony na OFICJALNIE wygenerowany instalatorem `composer create-project wpdesk/wpdesk-sdk wpdesk-integration` (wg instrukcji WP Desk): biblioteka wp-wpdesk-license 4.1.0, unikalny per projekt namespace `FlexibleCurrencySwitcher\Vendor` i unikalny hash autoloadera — zastępuje ręcznie przescope’owaną kopię z 1.0.6/1.0.12.
– Bootstrap integracji: product_id ustawiony na uzgodnione „Flexible Currency Switcher” (instalator wykrył nazwę z nagłówka z sufiksem „for WooCommerce” — skorygowane dla ciągłości z wersją zatwierdzoną przez WP Desk).
– Pierwsza wersja publikowana samodzielnie przez API licencji WP Desk (POST /api/v1/products/{product_id}/upload).

## [1.0.13] – 2026-07-21
### Changed
– **Internacjonalizacja pod dystrybucję na wpdesk.net:** stringi źródłowe w kodzie przełączone z polskiego na ANGIELSKI (122 stringi w PHP + JS edytora bloków + block.json + nagłówek wtyczki); polski przeniesiony do pełnego tłumaczenia `languages/flexible-currency-switcher-pl_PL.po/.mo` (126 wpisów, msgfmt –check czysty) — polscy użytkownicy widzą DOKŁADNIE dotychczasowe teksty, pozostałe języki angielski.
– Tłumaczenia edytora bloków: JSON (JED) dla `pl_PL` + `wp_set_script_translations` dla handle `fcs-switcher-editor`.
– Hardcodowane polskie fallbacki w admin.js („Błąd.”, „Błąd połączenia.”) przeniesione do `wp_localize_script` (tłumaczalne).
– `readme.txt` po angielsku (z sekcją Known limitations); changelog.txt pozostaje po polsku jako dokument wewnętrzny.
– `.pot` regenerowany ze źródeł EN, z wpisami Plugin Name/Description i metadanych bloku (msgctxt).
– Po 3-agentowej weryfikacji tłumaczeń (kompletność / jakość EN / wierność PL): błędy providerów ECB/NBP i statusy kursów przełączone na EN + `__()` (przeciekały po polsku do panelu na anglojęzycznych stronach); ujednolicone nazewnictwo — menu i H1 to teraz „Currency Switcher”/„Flexible Currency Switcher” (nie „Currency Converter”); WP-CLI po angielsku; kilkanaście poprawek idiomatyki EN (m.in. „Ending in .99″, przycisk „Export settings”); Plural-Forms wg konwencji WP (nplurals=3). Finalnie: 135 wpisów w pl_PL.po/.mo, `msgfmt –check` czysty, placeholdery 1:1.

## [1.0.12] – 2026-07-15
### Fixed
– **Fatal error przy jednoczesnej aktywacji dwóch wtyczek z biblioteką wpdesk-integration** (zgłoszone przez WP Desk jako naprawione w ich wpdesk-sdk 2.0.4): kopiowana biblioteka miała identyczny wygenerowany hash klas autoloadera Composera (`ComposerAutoloaderInitd451c…`/`ComposerStaticInitd451c…`) co Woo MailerLite Groups → `Cannot redeclare class` przy aktywacji obu. Hash przemianowany na unikalny per wtyczka (`a8be4f03…`, md5 z centrum-zw/flexible-currency-switcher-wpdesk-integration) w vendor/autoload.php + autoload_real.php + autoload_static.php. Zweryfikowane testem: załadowanie obu autoloaderów w jednym procesie bez fatala, obie biblioteki (scoped namespace’y ML i FCS) niezależnie sprawne. UWAGA: to samodzielna naprawa równoważna skutkowi — przy dostępie do oficjalnej paczki wpdesk-sdk 2.0.4 zalecana podmiana całego modułu na ich wersję.

## [1.0.11] – 2026-07-14
### Changed
– Autor wtyczki: „WP Desk” → „Centrum ZW” (na prośbę WP Desk: wtyczka nie jest ich oficjalnym produktem; usunięte Plugin URI / Author URI wskazujące wpdesk.net, zaktualizowane Contributors w readme, nagłówki .pot i composer.json). Moduł `wpdesk-integration` (SDK licencji) pozostaje bez zmian — to celowo ich biblioteka.

## [1.0.10] – 2026-06-24
### Changed
– Dokumentacja (readme): znane ograniczenie — progi darmowej wysyłki i min./maks. kwoty kuponu są przeliczane kursem, więc przy ręcznych cenach walutowych produktów (odbiegających od kursu) próg i suma koszyka mogą się rozjechać. Bez zmian w kodzie.

## [1.0.9] – 2026-06-24
### Fixed
– **Sprostowanie do 1.0.8**: poprawka symbolu waluty była wykazana w changelogu 1.0.8, ale NIE weszła do kodu (wykryte w drugiej rundzie audytu). Faktyczny fix jest tutaj: `FCS_Formatting::symbol()` honoruje własny symbol tylko przy aktywnej wtyczce i nigdy dla waluty głównej.
– Końcówki charm przy walucie z `decimals < 2` (JPY, HUF): zaokrąglenie do pełnej liczby w górę — wcześniej kombinacja „charm + brak groszy" mogła dać cenę 0 (produkt za darmo) albo niewyrażalną końcówkę. ### Changed - Etykiety zaokrągleń mówią wprost, że końcówki ,99/,95/,50 działają ZAWSZE W GÓRĘ (2,01 € → 2,99 €) — zachowanie bez zmian, było nieoczywiste z nazwy opcji. ## [1.0.8] - 2026-06-24 Naprawy po niezależnym audycie adwersaryjnym (raport: 2 krytyczne, 4 wysokie, 5 średnich, 6 niskich). ### Fixed - **[K] Subscriptions**: `wcs_renewal_order_created` to filtr — handler zwraca teraz `$renewal_order` (wcześniej zerował łańcuch filtrów przy każdym odnowieniu); martwy handler `woocommerce_scheduled_subscription_payment( $amount, $order )` zastąpiony poprawną sygnaturą `( $subscription_id )` + `wcs_get_subscription()` (blokada waluty działa też przy retry płatności). - **[K] Tryb cache**: bezpiecznik jednorazowego przeładowania na sesję (sessionStorage) — koniec pętli reloadów przy cache niewariantującym po cookie; geo.js ładowany zawsze (decyzja po stronie klienta, nie przy renderze — HTML z cache mógł być wygenerowany dla kogoś innego); jawny wymóg wariancji cache po cookie `fcs_currency` w panelu i readme. - **[W] Darmowa wysyłka**: próg `min_amount` przeliczany na aktywną walutę (odtworzona logika `WC_Shipping_Free_Shipping::is_available` z warunkami coupon/either/both). - **[W] Kupony**: progi `minimum_amount`/`maximum_amount` przeliczane; kwota kuponu przez surową konwersję (bez zaokrągleń „,99" — rabat 10 zł = 2,30 €, nie 2,99 €). - **[W] Admin-AJAX**: konwersja cen w admin-ajax tylko dla białej listy akcji frontowych (filtr `fcs_frontend_ajax_actions`) — edycja zamówienia w panelu nie liczy już cen wg cookie administratora. - **[Ś] Ciche 1:1**: waluta auto bez pobranego kursu nie wchodzi do sklepu (`get_enabled_currencies`) + ostrzeżenie w panelu z listą oczekujących walut. - **[Ś] Wyścig crona z formularzem**: `apply_rates()` nanosi tylko `rate`/`rate_updated` na świeży stan z DB zamiast zapisywać snapshot `currencies` sprzed requestu HTTP. - **[Ś] Nonce w cache**: publiczne endpointy `fcs_set_currency`/`fcs_detect_currency` celowo bez nonce'a (wygasał w HTML z cache TTL>24h i po cichu unieruchamiał przełącznik); pozostaje walidacja po białej liście; wzorzec jak publiczne endpointy koszykowe Woo. Świadome odstępstwo od checklisty — bez operacji uprzywilejowanych.
– **[Ś] Charm przy cenach < 1**: końcówki ,99/,95/,50/,00 nie są stosowane poniżej 1 jednostki waluty (0,69 € nie staje się 0,99 €). - **[N] Widget**: respektuje ustawienie „Wygląd" (wcześniej zawsze select). - **[N] Symbol**: własny symbol nie działa przy wyłączonej wtyczce ani dla waluty głównej. - **[N] Narzut**: zakres ograniczony do −99…+500%. - **[N] Import**: pobiera kursy auto od razu (spójnie z zapisem formularza). - **[N] Duplikat waluty**: pierwsza karta wygrywa, druga nie nadpisuje po cichu. - **[N] Higiena**: ABSPATH guard w `ExternalIntegration.php`; uninstall czyści `_fcs_prices` i transienty; pliki deweloperskie (composer.json, phpcs.xml.dist, .gitignore) poza ZIP-em produkcyjnym. ### Added - Publiczne API `fcs_convert_amount()` (surowa konwersja) + filtr `fcs_converted_amount_raw` — dla integracji przeliczających kwoty niebędące cenami (opłaty, rabaty). - Readme: sekcja „Znane ograniczenia" (fees, filtr cenowy, analityka, komunikaty progu darmowej wysyłki w motywach, wymóg cache). ## [1.0.7] - 2026-06-24 ### Fixed - **Koszty wysyłki nie były przeliczane** (zmieniał się tylko symbol): filtr `woocommerce_package_rates` (koszt + podatki, mnożenie kursem bez zaokrągleń „marketingowych") + `woocommerce_cart_shipping_packages` dodaje walutę do paczki (bust cache stawek w sesji WC). - **Przełącznik „przyciski" nie działał**: handler JS łapał tylko `.fcs-switcher--links`, a CSS `background: currentColor` czynił tekst aktywnego przycisku niewidocznym. - **Zapis nadpisywał pobrany kurs**: pole kursu w formularzu miało starą wartość; przy walucie „auto" zapis zachowuje teraz kurs z bazy (kurs jest własnością systemu), a pole jest readonly. - **Cron resetowany przy każdym zapisie** (`wp_clear_scheduled_hook` bezwarunkowo → pobranie kursu ~60 s po każdym zapisie): teraz tylko `maybe_reschedule()` przy realnej zmianie. ### Changed - Kursy auto pobierane synchronicznie przy zapisie ustawień (`update_all(true)` z pominięciem rate limitu) — zmiana źródła/narzutu widoczna od razu; przycisk „Pobierz kursy teraz" odświeża pola formularza przez AJAX (bez przeładowania). - Zapis/import wraca na aktywną zakładkę (ukryte pole `fcs_active_tab` + parametr `tab` w redirect). - Bramki per waluta działają bez globalnego włącznika `gateway_restrictions` (opcja usunięta z UI i logiki). - Nowa waluta domyślnie „Aktywna"; notice u góry ustawień wylicza, czego brakuje do działania na froncie; przebudowane opisy przełącznika. ## [1.0.6] - 2026-06-24 ### Added - Moduł `wpdesk-integration` (licencje + aktualizacje z serwera WP Desk): biblioteka wp-wpdesk-license przescope'owana do namespace `Ollimport\FlexibleCurrencySwitcher\Vendor` (brak kolizji klas z innymi wtyczkami WP Desk na tej samej stronie), bootstrap z product_id "Flexible Currency Switcher", ładowany z głównego pliku wtyczki. - Rate limit na pobieranie kursów z API ECB/NBP: transient `fcs_rates_lock`, min. 60 s między pobraniami (chroni przed spamem przycisku i nakładaniem się cron/CLI/AJAX). ## [1.0.5] - 2026-06-24 ### Fixed - Mylące etykiety pozycji symbolu waluty — wszystkie przykłady pokazywały symbol za kwotą. Teraz jasno: „Przed kwotą (€99)" / „Za kwotą (99€)". Logika `price_format` bez zmian (była poprawna). ## [1.0.4] - 2026-06-24 ### Added - Konfiguracja narzędzi jakości kodu pod CI: `composer.json` (woocommerce/woocommerce-sniffs, php-stubs/woocommerce-stubs) + `phpcs.xml.dist` (ruleset WooCommerce-Core, text domain, prefiksy, minimum WP 6.0 / PHP 7.4) + `.gitignore`. ## [1.0.3] - 2026-06-24 ### Added - Tryb geolokalizacji zgodny z cache pełnych stron: wykrywanie waluty po stronie klienta przez nonce'owany AJAX (`assets/js/geo.js`, endpoint `fcs_detect_currency`), z jednorazowym przeładowaniem. - Import i eksport konfiguracji walut w formacie JSON (admin-post `fcs_export`/`fcs_import`, nonce + capability, sanityzacja importu). - Deklaracja kompatybilności WooCommerce `cart_checkout_blocks` (blokowy koszyk/checkout, Store API). - Plik tłumaczeń `languages/flexible-currency-switcher.pot`. ### Changed - Nagłówki zgodności: Tested up to 6.8 / WC tested up to 9.8. ## [1.0.2] - 2026-06-23 ### Added - Blok Gutenberga „Przełącznik walut (Flexible)" (`fcs/switcher`, render dynamiczny po stronie serwera) — `FCS_Block`. - Zgodność z WooCommerce Subscriptions (`FCS_Subscriptions`): odnowienia subskrypcji wymuszają walutę pierwotnego zakupu (cron bez sesji klienta nie spadnie do waluty głównej). - `FCS_Resolver::reset()` do czyszczenia zapamiętanej waluty requestu. ## [1.0.1] - 2026-06-23 ### Added - Automatyczne kursy ECB i NBP: providery `FCS_ECB_Rate_Provider` / `FCS_NBP_Rate_Provider`, menedżer `FCS_Rates_Manager` z cronem (daily/twicedaily/hourly), ręcznym odświeżaniem AJAX i narzutem %. - Ręczne ceny walutowe per produkt i wariant (meta `_fcs_prices`) — nadpisują kurs. - Formatowanie per waluta: własny symbol, pozycja symbolu, liczba miejsc, separatory (`FCS_Formatting`). - Ograniczanie bramek płatności per waluta. - Przeliczanie kuponów stałokwotowych (`fixed_cart`/`fixed_product`). - Przełącznik w trybie „przyciski" oraz pływający przełącznik w stopce. - Panel administracyjny w zakładkach (Ogólne / Waluty / Auto-kursy / Integracje) ze statusem kursów. - Komendy WP-CLI: `wp fcs refresh-rates`, `wp fcs status`. - Hooki aktywacji/dezaktywacji zarządzające zadaniem cron. ### Changed - Warstwa cenowa uwzględnia stałe ceny walutowe przed zastosowaniem kursu. ## [1.0.0] - 2026-06-23 ### Added - Wybór walut sprzedaży z listy WooCommerce. - Przypisywanie walut do krajów. - Kurs (mnożnik) per waluta względem waluty głównej. - Zaokrąglanie cen per waluta (pełna liczba, końcówki ,99 / ,95). - Geolokalizacja klienta (WC_Geolocation) do automatycznego doboru waluty. - Ręczny przełącznik waluty: widget + shortcode `[flexible_currency_switcher]`. - Publiczne API i filtry do integracji (Flexible Product Fields, Flexible Coupons). - Interfejs `FCS_Rate_Provider` przygotowany pod automatyczne kursy ECB/NBP. - Deklaracja kompatybilności z HPOS.