From b085c597ca03505b4e11408acc0a0821a500ca4a Mon Sep 17 00:00:00 2001 From: Jacek Date: Sun, 1 Mar 2026 22:09:11 +0100 Subject: [PATCH] build: ver_0.332 - nowy ZIP z plikami API i ProductRepository Co-Authored-By: Claude Sonnet 4.6 --- updates/0.30/ver_0.332.zip | Bin 0 -> 26816 bytes updates/0.30/ver_0.332_manifest.json | 24 +++ updates/changelog-data.html | 229 ++++++++++++++------------- updates/versions.php | 2 +- 4 files changed, 141 insertions(+), 114 deletions(-) create mode 100644 updates/0.30/ver_0.332.zip create mode 100644 updates/0.30/ver_0.332_manifest.json diff --git a/updates/0.30/ver_0.332.zip b/updates/0.30/ver_0.332.zip new file mode 100644 index 0000000000000000000000000000000000000000..9b1c8cf526defa5e0f152d726444bbf77902dfaf GIT binary patch literal 26816 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. 0.332 - 01.03.2026
+API produktow: nowe pola new_to_date i additional_message +
ver. 0.331 - 01.03.2026
FIX - getProductLayout: fallback categories_default zmieniony na status (produkty bez layoutu pobieraly szablon kategorii zamiast domyslnego)
@@ -23,28 +26,28 @@ NEW - Endpoint API categories/list: plaska lista aktywnych kategorii (id, parent FIX - naprawione krzaczki (mojibake) w changelog, limit wyswietlania do 5 wersji wstecz od wersji instancji
ver. 0.324 - 27.02.2026
-NEW - system kolejki zadań cron (DB), priorytetowe przetwarzanie, retry/backoff, ochrona endpointu cron +NEW - system kolejki zadaĹ„ cron (DB), priorytetowe przetwarzanie, retry/backoff, ochrona endpointu cron
ver. 0.323 - 24.02.2026
FIX - refactor importu zdjec w shopPRO import (walidacja HTTP, curl timeouty, logi), FIX - saveCustomFields tylko przy jawnym podaniu, FIX - delete() czysci custom_fields, FIX - sciezka upload w API, NEW - trwale usuwanie produktow z archiwum
ver. 0.322 - 24.02.2026
-FIX - custom_fields: jawne mapowanie kluczy w ProductRepository, spójne !empty w ProductsApiController +FIX - custom_fields: jawne mapowanie kluczy w ProductRepository, spĂłjne !empty w ProductsApiController
ver. 0.321 - 24.02.2026
-NEW - API: obsługa custom_fields w create/update produktu +NEW - API: obsĹ‚uga custom_fields w create/update produktu
ver. 0.320 - 24.02.2026
-NEW - API: endpoint ensure_producer (znajdź lub utwórz producenta); GET product zwraca producer_name +NEW - API: endpoint ensure_producer (znajdĹş lub utwĂłrz producenta); GET product zwraca producer_name
ver. 0.319 - 24.02.2026
-FIX - usunięcie shopPRO eksportu produktów; API produktu: dodano custom_fields i security_information +FIX - usuniÄ™cie shopPRO eksportu produktĂłw; API produktu: dodano custom_fields i security_information
ver. 0.318 - 24.02.2026
-NEW - shopPRO export produktów + API endpoints (ensure_attribute, ensure_attribute_value, upload_image) +NEW - shopPRO export produktĂłw + API endpoints (ensure_attribute, ensure_attribute_value, upload_image)
ver. 0.317 - 23.02.2026
-FIX - klucz API: fix zapisu (brakowalo w whiteliście), przycisk Generuj losowy klucz, ulepszony routing API +FIX - klucz API: fix zapisu (brakowalo w whiteliĹ›cie), przycisk Generuj losowy klucz, ulepszony routing API
ver. 0.316 - 23.02.2026
FIX - migracja brakujacej kolumny type w pp_shop_products_custom_fields @@ -53,16 +56,16 @@ FIX - migracja brakujacej kolumny type w pp_shop_products_custom_fields FIX - PDOException w listowaniu atrybutow admin (SQLSTATE HY093)
ver. 0.314 - 23.02.2026
-FIX - naprawa globalnej wyszukiwarki admin (Content-Type, Cache-Control, POST, try/catch), NEW - title strony z numerem zamówienia +FIX - naprawa globalnej wyszukiwarki admin (Content-Type, Cache-Control, POST, try/catch), NEW - title strony z numerem zamĂłwienia
ver. 0.313 - 23.02.2026
-FIX - sync płatności Apilo (int cast na apilo_order_id PPxxxxxx dawał 0) + logowanie decyzji sync do pp_log +FIX - sync pĹ‚atnoĹ›ci Apilo (int cast na apilo_order_id PPxxxxxx dawaĹ‚ 0) + logowanie decyzji sync do pp_log
ver. 0.312 - 23.02.2026
-FIX - krytyczne bugi integracji Apilo: curl_getinfo po curl_close, nieskończona pętla wysyłki, ceny 0.00 PLN, walidacja cen +FIX - krytyczne bugi integracji Apilo: curl_getinfo po curl_close, nieskoĹ„czona pÄ™tla wysyĹ‚ki, ceny 0.00 PLN, walidacja cen
ver. 0.311 - 23.02.2026
-FIX - race condition callback płatności Apilo, persistence filtrów tabel admin, poprawki cen zamówień +FIX - race condition callback pĹ‚atnoĹ›ci Apilo, persistence filtrĂłw tabel admin, poprawki cen zamĂłwieĹ„
ver. 0.310 - 23.02.2026
NEW - Zakladka Logi w sekcji Integracje (podglad pp_log z paginacja, sortowaniem, filtrami) @@ -92,10 +95,10 @@ FIX - naprawiono wyswietlanie atrybutow produktu na froncie (kolizja kolejnosci) NEW - REST API wariantow produktow (CRUD), slownik atrybutow, filtrowanie po atrybutach, wzbogacone atrybuty z tlumaczeniami
ver. 0.301 - 22.02.2026
-NEW - Ukrywalne filtry tabel, mobilna wersja szczegółów zamówienia +NEW - Ukrywalne filtry tabel, mobilna wersja szczegółów zamĂłwienia
ver. 0.300 - 21.02.2026
-- NEW - System aktualizacji oparty na manifestach JSON (checksum SHA256, backup plików, automatyczny build) +- NEW - System aktualizacji oparty na manifestach JSON (checksum SHA256, backup plikĂłw, automatyczny build) - NEW - Panel logu aktualizacji w panelu admina
ver. 0.299 - 21.02.2026
@@ -105,31 +108,31 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - kilka poprawek po aktualizacji
ver. 0.297 - 19.02.2026
-- NEW - REST API produktów (lista, szczegóły, tworzenie, aktualizacja) -- NEW - Endpoint products z filtrowaniem, sortowaniem i paginacją -- NEW - Partial update produktów (tylko zmienione pola) +- NEW - REST API produktĂłw (lista, szczegóły, tworzenie, aktualizacja) +- NEW - Endpoint products z filtrowaniem, sortowaniem i paginacjÄ… +- NEW - Partial update produktĂłw (tylko zmienione pola)
ver. 0.296 - 19.02.2026
-- NEW - REST API zamówień dla ordersPRO (lista, szczegóły, zmiana statusu, płatności) -- NEW - Endpointy słownikowe (statusy, transporty, metody płatności) +- NEW - REST API zamĂłwieĹ„ dla ordersPRO (lista, szczegóły, zmiana statusu, pĹ‚atnoĹ›ci) +- NEW - Endpointy sĹ‚ownikowe (statusy, transporty, metody pĹ‚atnoĹ›ci) - NEW - Autentykacja API przez X-Api-Key header - NEW - Kolumna updated_at w pp_shop_orders (polling zmian)
ver. 0.295 - 19.02.2026
-- NEW - Edycja produktów w zamówieniu z panelu admina (dodawanie, usuwanie, zmiana ilości/cen) -- NEW - Wyszukiwarka produktów AJAX w formularzu edycji zamówienia -- NEW - Automatyczna korekta stanów magazynowych i przeliczanie kosztu dostawy -- FIX - Cena promo w zamówieniu = 0 gdy identyczna z ceną bazową +- NEW - Edycja produktĂłw w zamĂłwieniu z panelu admina (dodawanie, usuwanie, zmiana iloĹ›ci/cen) +- NEW - Wyszukiwarka produktĂłw AJAX w formularzu edycji zamĂłwienia +- NEW - Automatyczna korekta stanĂłw magazynowych i przeliczanie kosztu dostawy +- FIX - Cena promo w zamĂłwieniu = 0 gdy identyczna z cenÄ… bazowÄ…
ver. 0.294 - 19.02.2026
-- FIX - Code review zakończony (96/96 klas, ~1144 metod): 27 fixów across all layers +- FIX - Code review zakoĹ„czony (96/96 klas, ~1144 metod): 27 fixĂłw across all layers - FIX - Domain: null guard na query()->fetchAll() w 8 repozytoriach, redundancja DI w PromotionRepository - FIX - Admin: null safety find() ?: [] w 10 kontrolerach, null guard w App logowaniu/2FA - FIX - Front: LayoutEngine undefined $level + $_GET null check, ShopBasketController missing global $lang_id -- FIX - Shared: Helpers $_GET null check + bug 'png' → 'image/png' (Imagick lossless WebP nigdy nie działał) +- FIX - Shared: Helpers $_GET null check + bug 'png' → 'image/png' (Imagick lossless WebP nigdy nie dziaĹ‚aĹ‚)
ver. 0.293 - 19.02.2026
-- FIX - ArticleRepository: SQL injection fix (addslashes→parameterized), uproszczenie articleDetailsFrontend +- FIX - ArticleRepository: SQL injection fix (addslashes→parameterized), uproszczenie articleDetailsFrontend - FIX - AttributeRepository: martwy class_exists('\S') blokowal czyszczenie cache/temp - FIX - CategoryRepository: martwy class_exists('\S') blokowal generowanie linkow SEO kategorii - FIX - BannerRepository: parametryzacja dat w SQL + null guard na query() @@ -148,12 +151,12 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - front\controls\Site przemianowany na front\App (router, camelCase: checkUrlParams, pageTitle) - UPDATE - front\view\Site przemianowany na front\LayoutEngine (layout engine, camelCase: cookieInformation) - CLEANUP - usuniete autoload/front/controls/ i autoload/front/view/ (puste foldery + pliki legacy) -- UPDATE - usuniecie 12 legacy klas z autoload/shop/ (~2363 linii) — pelna migracja na Domain-Driven Architecture +- UPDATE - usuniecie 12 legacy klas z autoload/shop/ (~2363 linii) — pelna migracja na Domain-Driven Architecture - UPDATE - class.Order.php: logika Apilo sync i email statusu przeniesiona do OrderAdminService - UPDATE - class.Product.php: ~20 metod przeniesionych do ProductRepository, calculate_basket_product_price do BasketCalculator - FIX - findCached(): stale Redis cache z obiektami \shop\Product powodowal ceny 0,00 zl - FIX - szablony: konwersja object access na array access po migracji Product -- UPDATE - AttributeRepository::getAttributeValueById() — dodano Redis cache +- UPDATE - AttributeRepository::getAttributeValueById() — dodano Redis cache - CLEANUP - katalog autoload/shop/ pusty, zero referencji \shop\ w aktywnym kodzie
ver. 0.291 - 17.02.2026
@@ -197,17 +200,17 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - Tpl::render() branch 3: sprawdzal templates_user ale ladowal templates
ver. 0.284 - 16.02.2026
-- CLEANUP - usunieta klasa DbModel (base ORM) — logika wbudowana bezposrednio w shop\Promotion +- CLEANUP - usunieta klasa DbModel (base ORM) — logika wbudowana bezposrednio w shop\Promotion
ver. 0.283 - 16.02.2026
- UPDATE - migracja class.S.php do Shared\Helpers\Helpers (~140 plikow przepietych) - UPDATE - migracja class.Html.php do Shared\Html\Html - UPDATE - migracja class.Email.php do Shared\Email\Email - UPDATE - migracja class.Image.php do Shared\Image\ImageManipulator -- UPDATE - migracja class.Log.php do Shared\Log\Log (usunieta — logika przeniesiona) +- UPDATE - migracja class.Log.php do Shared\Log\Log (usunieta — logika przeniesiona) - CLEANUP - usunieta class.Mobile_Detect.php (przestarzala detekcja UA) - CLEANUP - usunieto 12 nieuzywanych metod z klasy S -- FIX - array_cartesian_product() — blad iteracji po niezdefiniowanej zmiennej +- FIX - array_cartesian_product() — blad iteracji po niezdefiniowanej zmiennej
ver. 0.282 - 16.02.2026
- UPDATE - Cache cleanup: eliminacja legacy class.Cache.php, migracja CacheHandler i RedisConnection do Shared\Cache namespace @@ -219,7 +222,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚Ä
ver. 0.281 - 16.02.2026
- UPDATE - migracja Banners frontend: factory + view do Domain/Views (DI) -- NEW - `front\Views\Banners` — czysty VIEW (banners, mainBanner) +- NEW - `front\Views\Banners` — czysty VIEW (banners, mainBanner) - UPDATE - `BannerRepository` rozszerzony o 2 metody frontendowe (banners, mainBanner) z Redis cache - UPDATE - `front\view\Site::show()` przepiety na repo + Views - CLEANUP - usuniete: front\factory\Banners, front\view\Banners @@ -227,10 +230,10 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚Ä
ver. 0.280 - 16.02.2026
- UPDATE - migracja Articles frontend: factory + view + encja do Domain/Views (DI) -- NEW - `front\Views\Articles` — czysty VIEW + utility (renderowanie, generateTableOfContents, generateHeadersIds, getImage) +- NEW - `front\Views\Articles` — czysty VIEW + utility (renderowanie, generateTableOfContents, generateHeadersIds, getImage) - UPDATE - `ArticleRepository` rozszerzony o 8 metod frontendowych (z Redis cache) -- UPDATE - `front\view\Site::show()` — 5 sekcji przepietych na repo + Views -- UPDATE - `front\controls\Site::route()` — single article + page_type switch przepiete na repo + Views +- UPDATE - `front\view\Site::show()` — 5 sekcji przepietych na repo + Views +- UPDATE - `front\controls\Site::route()` — single article + page_type switch przepiete na repo + Views - UPDATE - 5 szablonow `templates/articles/*` przepietych na `\front\Views\Articles::` - CLEANUP - usuniete: `class.Article` (encja + metody statyczne), `front\factory\Settings` (fasada) - FIX - eliminacja `global $lang` z `articleNoindex()`, eliminacja zaleznosci od `front\factory\Pages::page_sort()` @@ -241,22 +244,22 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - nowy namespace `front\Controllers` z `NewsletterController` (DI via factory closures) - UPDATE - nowy namespace `front\Views` z `Languages` i `Newsletter` (czyste VIEW, statyczne metody) - UPDATE - routing frontend: `Site::getControllerFactories()` z fallback na stare kontrolery -- FIX - `newsletter_unsubscribe()` — poprawiona skladnia medoo `delete()` (2 argumenty zamiast 3) -- UPDATE - eliminacja fasady `front\factory\Languages` — 26 zaleznosci przepietych na `LanguagesRepository` +- FIX - `newsletter_unsubscribe()` — poprawiona skladnia medoo `delete()` (2 argumenty zamiast 3) +- UPDATE - eliminacja fasady `front\factory\Languages` — 26 zaleznosci przepietych na `LanguagesRepository` - CLEANUP - usuniete: `front\factory\Languages`, `front\factory\Newsletter`, `front\view\Languages`, `front\view\Newsletter`, `front\controls\Newsletter` - UPDATE - testy: `OK (437 tests, 1398 assertions)`
ver. 0.278 - 16.02.2026
- UPDATE - migracja Settings + Languages do wspolnych klas Domain (z cache Redis) -- FIX - `get_single_settings_value()` — parametr `$param` poprawnie uzywany (wczesniej hardcoded `firm_name`) +- FIX - `get_single_settings_value()` — parametr `$param` poprawnie uzywany (wczesniej hardcoded `firm_name`)
ver. 0.277 - 16.02.2026
-- NEW - migracja modulu `ShopProduct` (factory) — pelna migracja ~40 metod do `ProductRepository` + ~30 akcji w `ShopProductController` +- NEW - migracja modulu `ShopProduct` (factory) — pelna migracja ~40 metod do `ProductRepository` + ~30 akcji w `ShopProductController` - NEW - migracja modulu `Dashboard` do Domain + DI (`DashboardRepository`, `DashboardController`) - NEW - migracja modulu `Update` do Domain + DI (`UpdateRepository`, `UpdateController`) - UPDATE - klasa `admin\Site` przemianowana na `admin\App` (plik `App.php`) -- UPDATE - refaktoring routingu — usunieto fallback na stare kontrolery, uproszczony routing -- UPDATE - template `update/main-view.php` — panele zamiast `gridEdit`, `$.confirm()` zamiast `$.prompt()` +- UPDATE - refaktoring routingu — usunieto fallback na stare kontrolery, uproszczony routing +- UPDATE - template `update/main-view.php` — panele zamiast `gridEdit`, `$.confirm()` zamiast `$.prompt()` - CLEANUP - usuniete stare foldery: `autoload/admin/controls/`, `autoload/admin/factory/`, `autoload/admin/view/` - CLEANUP - usuniete legacy: `class.Dashboard.php` (controls/shop), `class.Update.php` (controls/factory/view), `class.Articles.php` (factory), `class.Page.php` (view), `class.ShopProduct.php` (controls/factory/view) - UPDATE - `front\factory\Newsletter` przepieta na `ArticleRepository::articlesByDateAdd()` @@ -345,12 +348,12 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - pliki aktualizacji: `updates/0.20/ver_0.268.zip`, `ver_0.268_files.txt`
ver. 0.267 - 13.02.2026
-- FIX - front: poprawione dobieranie layoutu dla kategorii/produktu/koszyka i innych stron modułowych (fallback do layoutu domyślnego) -- FIX - produkt/koszyk: poprawiona obsługa ilości dla kombinacji (stan 0 po dodaniu do koszyka, limit max, odczyt `stock_0_buy`) -- FIX - produkt: usunięty błąd JS `TypeError: $(...).visible is not a function` (zamiana na `:visible`) -- FIX - SEO redirecty produktów: blokada konfliktów po kopiowaniu URL oraz utwardzone wykrywanie pętli redirectów (`lang_id` + graf przejść) -- UPDATE - admin: `input-switch` zapisuje wartość `on` (spójnie z obsługą pól checkbox w formularzach) -- CLEANUP - usunięte pliki: `apilo-bck`, `geocode-cache.php` +- FIX - front: poprawione dobieranie layoutu dla kategorii/produktu/koszyka i innych stron moduĹ‚owych (fallback do layoutu domyĹ›lnego) +- FIX - produkt/koszyk: poprawiona obsĹ‚uga iloĹ›ci dla kombinacji (stan 0 po dodaniu do koszyka, limit max, odczyt `stock_0_buy`) +- FIX - produkt: usuniÄ™ty błąd JS `TypeError: $(...).visible is not a function` (zamiana na `:visible`) +- FIX - SEO redirecty produktĂłw: blokada konfliktĂłw po kopiowaniu URL oraz utwardzone wykrywanie pÄ™tli redirectĂłw (`lang_id` + graf przejść) +- UPDATE - admin: `input-switch` zapisuje wartość `on` (spĂłjnie z obsĹ‚ugÄ… pĂłl checkbox w formularzach) +- CLEANUP - usuniÄ™te pliki: `apilo-bck`, `geocode-cache.php` - UPDATE - testy: `OK (235 tests, 682 assertions)` - UPDATE - pliki aktualizacji: `updates/0.20/ver_0.267.zip`, `ver_0.267_files.txt`, `ver_0.267_sql.txt`
@@ -432,7 +435,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ ver. 0.257 - 12.02.2026
- NEW - migracja modulu `Newsletter` do architektury Domain + DI (`Domain\Newsletter\NewsletterRepository`, `Domain\Newsletter\NewsletterPreviewRenderer`, `admin\Controllers\NewsletterController`) - UPDATE - widoki `/admin/newsletter/*` przepiete z legacy `grid/gridEdit` na nowe komponenty (`components/table-list`, `components/form-edit`) + nowy endpoint `/admin/newsletter/preview/` -- UPDATE - routing DI (`admin\Site`) rozszerzony o moduĹ‚ `Newsletter` +- UPDATE - routing DI (`admin\Site`) rozszerzony o moduĹ‚ `Newsletter` - UPDATE - `admin\factory\Newsletter` dziala jako fasada do nowego repozytorium (backward compatibility) - UPDATE - `front\factory\Newsletter` nie korzysta juz z `admin\view\Newsletter` - CLEANUP - usuniete legacy klasy `autoload/admin/controls/class.Newsletter.php`, `autoload/admin/view/class.Newsletter.php` @@ -456,7 +459,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - migracja widokow languages (`languages-list`, `language-edit`, `translations-list`, `translation-edit`) na `components/table-list` i `components/form-edit` - UPDATE - routing DI dla `Languages` w `admin\Site` oraz kompatybilna fasada `admin\factory\Languages` delegujaca do repozytorium - UPDATE - naprawiono zapis edycji jezyka (ID jezyka pobierane z URL przy edycji) -- UPDATE - globalne poprawki UX filtrĂłw w `components/table-list` (kompaktowe kolumny `Aktywny`/`Domyslny`, spacing i pelna szerokosc selecta) +- UPDATE - globalne poprawki UX filtrĂłw w `components/table-list` (kompaktowe kolumny `Aktywny`/`Domyslny`, spacing i pelna szerokosc selecta) - CLEANUP - usuniete legacy klasy: `autoload/admin/controls/class.Languages.php`, `autoload/admin/view/class.Languages.php`
ver. 0.253 - 12.02.2026
@@ -525,78 +528,78 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - refaktoryzacja: article_save przeniesiony do Domain\Article\ArticleRepository::save() z prywatnymi helperami - UPDATE - refaktoryzacja: article_delete przeniesiony do Domain\Article\ArticleRepository::archive() - UPDATE - ArticlesController: nowe akcje save() i delete() z DI -- UPDATE - admin\factory\Articles::article_save() i articles_set_archive() delegujÄ… do repozytorium (kompatybilność) +- UPDATE - admin\factory\Articles::article_save() i articles_set_archive() delegujÄ… do repozytorium (kompatybilność)
ver. 0.243
-- UPDATE - refaktoryzacja: cleanup nieprzypisanych plików/zdjęć artykułów przeniesiony do Domain\Article\ArticleRepository -- UPDATE - ArticlesController::edit() używa repozytorium do cleanupu, a admin\factory\Articles zachowuje delegowanie (kompatybilność) +- UPDATE - refaktoryzacja: cleanup nieprzypisanych plikĂłw/zdjęć artykułów przeniesiony do Domain\Article\ArticleRepository +- UPDATE - ArticlesController::edit() uĹĽywa repozytorium do cleanupu, a admin\factory\Articles zachowuje delegowanie (kompatybilność)
ver. 0.242
- NEW - refaktoryzacja: Domain\Article\ArticleRepository + migracja article_edit do admin\Controllers\ArticlesController (DI) -- UPDATE - admin\factory\Articles::article_details() deleguje do nowego repozytorium (kompatybilność zachowana) -- UPDATE - metody przejęte przez nowe kontrolery oznaczone jako @deprecated w legacy kontrolerach admin\controls +- UPDATE - admin\factory\Articles::article_details() deleguje do nowego repozytorium (kompatybilność zachowana) +- UPDATE - metody przejÄ™te przez nowe kontrolery oznaczone jako @deprecated w legacy kontrolerach admin\controls
ver. 0.241
-- NEW - refaktoryzacja: admin\Controllers\ProductArchiveController - archiwum produktów z DI +- NEW - refaktoryzacja: admin\Controllers\ProductArchiveController - archiwum produktĂłw z DI - NEW - ProductRepository::archive(), unarchive() - operacje archiwizacji w repozytorium -- FIX - naprawiono SQL w liście archiwum (puste wyszukiwanie filtrowało wszystkie wyniki) -- FIX - naprawiono brakujący filtr archive = 1 w zapytaniu bez wyszukiwania -- UPDATE - wyczyszczono szablony archiwum (usunięto zbędne funkcje: apilo, baselinker, duplikowanie) +- FIX - naprawiono SQL w liĹ›cie archiwum (puste wyszukiwanie filtrowaĹ‚o wszystkie wyniki) +- FIX - naprawiono brakujÄ…cy filtr archive = 1 w zapytaniu bez wyszukiwania +- UPDATE - wyczyszczono szablony archiwum (usuniÄ™to zbÄ™dne funkcje: apilo, baselinker, duplikowanie)
ver. 0.240
- NEW - refaktoryzacja: Domain\Settings\SettingsRepository + admin\Controllers\SettingsController (architektura Domain-Driven) -- NEW - refaktoryzacja: Domain\Cache\CacheRepository - czyszczenie cache z obsługą Redis -- FIX - komunikat potwierdzenia zapisu ustawień w panelu administratora +- NEW - refaktoryzacja: Domain\Cache\CacheRepository - czyszczenie cache z obsĹ‚ugÄ… Redis +- FIX - komunikat potwierdzenia zapisu ustawieĹ„ w panelu administratora - FIX - naprawiono element #content w layoucie admina (powiadomienia grid.js)
ver. 0.239
-- NEW - refaktoryzacja: Domain\Banner\BannerRepository + admin\Controllers\BannerController (pełna migracja kontrolera) +- NEW - refaktoryzacja: Domain\Banner\BannerRepository + admin\Controllers\BannerController (peĹ‚na migracja kontrolera) - NEW - refaktoryzacja: Domain\Product\ProductRepository::getPrice(), getName() - migracja kolejnych metod -- NEW - router admin z obsługą nowych kontrolerów (fallback na stare) -- UPDATE - shop\Product::get_product_price(), get_product_name() używają nowego repozytorium (kompatybilność zachowana) +- NEW - router admin z obsĹ‚ugÄ… nowych kontrolerĂłw (fallback na stare) +- UPDATE - shop\Product::get_product_price(), get_product_name() uĹĽywajÄ… nowego repozytorium (kompatybilność zachowana)
ver. 0.238
- NEW - refaktoryzacja: Domain\Product\ProductRepository - pierwsza klasa w nowej architekturze Domain-Driven - NEW - Dependency Injection zamiast global variables -- UPDATE - shop\Product::get_product_quantity() używa teraz nowego repozytorium (kompatybilność zachowana) +- UPDATE - shop\Product::get_product_quantity() uĹĽywa teraz nowego repozytorium (kompatybilność zachowana)
ver. 0.237
- NEW - automatyczne czyszczenie cache produktu po aktualizacji przez CRON (Sellasist, Apilo, Baselinker) -- UPDATE - przycisk "Wyczyść cache" w panelu administratora z obsługą AJAX i komunikatami o postępie +- UPDATE - przycisk "Wyczyść cache" w panelu administratora z obsĹ‚ugÄ… AJAX i komunikatami o postÄ™pie
ver. 0.236
-- FIX - zabezpieczenie przed duplikatami zamówień w Apilo - automatyczne pobieranie ID zamówienia przy błędzie "idExternal już wykorzystywany" +- FIX - zabezpieczenie przed duplikatami zamĂłwieĹ„ w Apilo - automatyczne pobieranie ID zamĂłwienia przy błędzie "idExternal juĹĽ wykorzystywany"
ver. 0.235
- FIX - poprawka funkcji aktualizacji
ver. 0.234
-- NEW - przycisk zaznaczania zamówienia jako wysłane do trustmate.io +- NEW - przycisk zaznaczania zamĂłwienia jako wysĹ‚ane do trustmate.io
ver. 0.232
- NEW - opcje GPSR
ver. 0.231
-- FIX - poprawki bezpieczeństwa + dwuetapowa weryfikacja logowania +- FIX - poprawki bezpieczeĹ„stwa + dwuetapowa weryfikacja logowania
ver. 0.230
-- FIX - poprawki bezpieczeństwa +- FIX - poprawki bezpieczeĹ„stwa
ver. 0.229
-- NEW - pola dodatkowe z opcją wymagane/niewymagane +- NEW - pola dodatkowe z opcjÄ… wymagane/niewymagane
ver. 0.228
-- NEW - cron do wysyłania zamówień do trustmate.io +- NEW - cron do wysyĹ‚ania zamĂłwieĹ„ do trustmate.io
ver. 0.227
-- NEW - historia kodów rabatowych +- NEW - historia kodĂłw rabatowych
ver. 0.226
-- NEW - dodanie opcji faktury do zamówienia +- NEW - dodanie opcji faktury do zamĂłwienia
ver. 0.225
- NEW - przycisk czyszczenia cache -- NEW - ponowne wysyłanie zamówienia do apilo +- NEW - ponowne wysyĹ‚anie zamĂłwienia do apilo
ver. 0.224
- NEW - sortowanie form dostawy @@ -608,20 +611,20 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - NEW - integracja z Orlen Paczka
ver. 0.221
-- NEW - Automatyczne przekierowania adresów URL produktów, zmiany w pliku htaccess +- NEW - Automatyczne przekierowania adresĂłw URL produktĂłw, zmiany w pliku htaccess
ver. 0.220
-- NEW - Dodanie możliwości wyświetlenia na strone ostatnio dodane produkty [PRODUKTY_NEW] lub [PRODUKTY_NEW:10]. -- NEW - Dodanie możliwości wyświetlenia na strone popularnych produktów [PRODUKTY_TOP] lub [PRODUKTY_TOP:10]. +- NEW - Dodanie moĹĽliwoĹ›ci wyĹ›wietlenia na strone ostatnio dodane produkty [PRODUKTY_NEW] lub [PRODUKTY_NEW:10]. +- NEW - Dodanie moĹĽliwoĹ›ci wyĹ›wietlenia na strone popularnych produktĂłw [PRODUKTY_TOP] lub [PRODUKTY_TOP:10].
ver. 0.219
-- NEW - Dodanie możliwości zmiany daty w artykułach +- NEW - Dodanie moĹĽliwoĹ›ci zmiany daty w artykuĹ‚ach
ver. 0.218
- NEW - indywidualny kod GTM
ver. 0.217
-- NEW - zwiększenie obsługi REDIS +- NEW - zwiÄ™kszenie obsĹ‚ugi REDIS
ver. 0.216
- NEW - aktualizacja api i cron (apilo) @@ -636,43 +639,43 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - wyliczenie darmowej dostawy
ver. 0.212
-- NEW - zmiany w zapisywaniu zamówienia do apilo +- NEW - zmiany w zapisywaniu zamĂłwienia do apilo
ver. 0.211
-- NEW - Debugowanie apilo + wyświetlanie podkategorii +- NEW - Debugowanie apilo + wyĹ›wietlanie podkategorii
ver. 0.210
-- NEW - dodatkowe pola w widoku produktów +- NEW - dodatkowe pola w widoku produktĂłw
ver. 0.209
-- NEW - zmiany w widoku produktów (panel administratora) +- NEW - zmiany w widoku produktĂłw (panel administratora)
ver. 0.208
-- NEW - zmiany w wyszukiwarce produktów +- NEW - zmiany w wyszukiwarce produktĂłw
ver. 0.204-0.207
- NEW - htaccess update
ver. 0.204-0.206
-- NEW - wysyłanie produktów do apilo +- NEW - wysyĹ‚anie produktĂłw do apilo
ver. 0.203
- NEW - zmiana sposobu wyliczania cen produkty z dodatkami
ver. 0.202
-- NEW - dodano "główne zdjęcie" w edycji artykułu +- NEW - dodano "główne zdjÄ™cie" w edycji artykuĹ‚u
ver. 0.201
-- FIX - aktualizacja statusów na podstawie baselinkera +- FIX - aktualizacja statusĂłw na podstawie baselinkera
ver. 0.200
-- NEW - wysyłanie produktów do baselinker +- NEW - wysyĹ‚anie produktĂłw do baselinker
ver. 0.199
- NEW - usprawnienie edycji danych do XML
ver. 0.198
-- NEW - automatyczne generowanie kodów SKU +- NEW - automatyczne generowanie kodĂłw SKU
ver. 0.197
- FIX - poprawki w Dashboard @@ -681,7 +684,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - integracja z apilo.com
ver. 0.195
-- FIX - aktualizacja statusów +- FIX - aktualizacja statusĂłw
ver. 0.194
- UPDATE - integracja apilo @@ -690,46 +693,46 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - UPDATE - aktualizacja synchronizacji z baselinker
ver. 0.192
-- NEW - pobieranie statusów z sellasist +- NEW - pobieranie statusĂłw z sellasist
ver. 0.191
- NEW - integracja z selasist
ver. 0.190
-- FIX - produkty powiązane +- FIX - produkty powiÄ…zane
ver. 0.189
-- FIX - ceny promocyjne produktów z dodatkiem +- FIX - ceny promocyjne produktĂłw z dodatkiem
ver. 0.188
-- NEW - widok listy produktów +- NEW - widok listy produktĂłw
ver. 0.187
- FIX - pobieranie cen z APILO
ver. 0.186
-- FIX - dodawanie do koszyka tych samych produktów ale z różną personalizacją +- FIX - dodawanie do koszyka tych samych produktĂłw ale z różnÄ… personalizacjÄ…
ver. 0.185
-- FIX - masowa edycja produktów +- FIX - masowa edycja produktĂłw
ver. 0.184
-- NEW - druga część integracji z apilo, masowa edycja produktów +- NEW - druga część integracji z apilo, masowa edycja produktĂłw
ver. 0.183
-- NEW - pierwsza część integracji z apilo +- NEW - pierwsza część integracji z apilo
ver. 0.182
- FIX - layout
ver. 0.181
-- NEW - infinitescroll - opcja włączy/wyłącz +- NEW - infinitescroll - opcja włączy/wyłącz
ver. 0.180
- NEW - aktualizacja dashboard
ver. 0.179
-- NEW - obsługa EAN +- NEW - obsĹ‚uga EAN
ver. 0.177, 0.178
- FIX - custom_label @@ -745,7 +748,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚Ä
ver. 0.173
- NEW - duplikowanie produktu wraz z kombinacjami -- NEW - dodanie przechodzenia pomiędzy zamówienia (poprzednie/następne zamówienie) +- NEW - dodanie przechodzenia pomiÄ™dzy zamĂłwienia (poprzednie/nastÄ™pne zamĂłwienie)
ver. 0.172
- FIX - poprawki w Cache @@ -757,22 +760,22 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - NEW - usuwanie cache produktu przy zapisie
ver. 0.169
-- FIX - poprawki w liście produktów +- FIX - poprawki w liĹ›cie produktĂłw
ver. 0.168
-- NEW - archiwum produktów +- NEW - archiwum produktĂłw
ver. 0.167
-- NEW - dodanie obsługi cen i stanów magazynowych kombinacji produktów +- NEW - dodanie obsĹ‚ugi cen i stanĂłw magazynowych kombinacji produktĂłw
ver. 0.166
-- NEW - współpraca z GTM +- NEW - współpraca z GTM
ver. 0.164/5
-- FIX - ukrywanie produktów nieaktywnych +- FIX - ukrywanie produktĂłw nieaktywnych
ver. 0.163
-- NEW - automatyczne podpowiadanie produktów do zestawu na podstawie wcześniejszych zakupów klientów +- NEW - automatyczne podpowiadanie produktĂłw do zestawu na podstawie wczeĹ›niejszych zakupĂłw klientĂłw
ver. 0.162
- NEW - GA4 @@ -788,7 +791,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - cron Baselinker
ver. 0.158
-- UPDATE - poprawa kolorystyki przycisków +- UPDATE - poprawa kolorystyki przyciskĂłw
ver. 0.157
- NEW - szybka zmiana statusu produktu @@ -800,10 +803,10 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - NEW - infinite scroll w widoku kategorii
ver. 0.154
-- FIX - atrybuty produktów +- FIX - atrybuty produktĂłw
ver. 0.153
-- FIX - atrybuty produktów +- FIX - atrybuty produktĂłw
ver. 0.152
- FIX - tematy maili @@ -812,7 +815,7 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - FIX - tematy maili
ver. 0.150
-- NEW - domyślna forma transportu +- NEW - domyĹ›lna forma transportu
ver. 0.149
- NEW - tematy maili @@ -830,11 +833,11 @@ NEW - Ukrywalne filtry tabel, mobilna wersja szczegÄ‚â€žĂ˘â‚¬ĹˇÄ - NEW - omnibus ready
ver. 0.144
-- FIX - usunięcie adresu marianek.pl z kodu +- FIX - usuniÄ™cie adresu marianek.pl z kodu
ver. 0.143
-- FIX - poprawa generowania plików WEBP +- FIX - poprawa generowania plikĂłw WEBP
ver. 0.142
-- FIX - poprawa adresu strony głównej +- FIX - poprawa adresu strony głównej
diff --git a/updates/versions.php b/updates/versions.php index da34c64..80e18f3 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -1,5 +1,5 @@