From 235a38819923f5920c445b7eef347b22b50d5cfb Mon Sep 17 00:00:00 2001 From: Jacek Date: Thu, 12 Mar 2026 09:31:17 +0100 Subject: [PATCH] build: ver_0.336 - error handling, try-catch Apilo, E_WARNING cron --- updates/0.30/ver_0.336.zip | Bin 0 -> 45340 bytes updates/0.30/ver_0.336_manifest.json | 26 +++ updates/changelog-data.html | 231 ++++++++++++++------------- updates/versions.php | 2 +- 4 files changed, 144 insertions(+), 115 deletions(-) create mode 100644 updates/0.30/ver_0.336.zip create mode 100644 updates/0.30/ver_0.336_manifest.json diff --git a/updates/0.30/ver_0.336.zip b/updates/0.30/ver_0.336.zip new file mode 100644 index 0000000000000000000000000000000000000000..bf07c61ac15ca8b9b09624e236675a902cfecea6 GIT binary patch literal 45340 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 F{uj@;y>I{k literal 0 HcmV?d00001 diff --git a/updates/0.30/ver_0.336_manifest.json b/updates/0.30/ver_0.336_manifest.json new file mode 100644 index 0000000..9f490b8 --- /dev/null +++ b/updates/0.30/ver_0.336_manifest.json @@ -0,0 +1,26 @@ +{ + "changelog": "Poprawki error handling: try-catch tokeny Apilo, przywrocenie E_WARNING w cron, error_log w safeUnlink", + "version": "0.336", + "files": { + "added": [ + + ], + "deleted": [ + + ], + "modified": [ + "autoload/Domain/Article/ArticleRepository.php", + "autoload/Domain/Integrations/IntegrationsRepository.php", + "autoload/Domain/Product/ProductRepository.php", + "cron.php" + ] + }, + "checksum_zip": "sha256:15d4be791a2ee766e8e66ef4b2da61fd6efd0d0331a15c3b4ceed1a3702f7173", + "sql": [ + + ], + "date": "2026-03-12", + "directories_deleted": [ + + ] +} \ No newline at end of file diff --git a/updates/changelog-data.html b/updates/changelog-data.html index 699c47b..cf54039 100644 --- a/updates/changelog-data.html +++ b/updates/changelog-data.html @@ -1,3 +1,6 @@ +ver. 0.336 - 12.03.2026
+Poprawki error handling: try-catch tokeny Apilo, przywrocenie E_WARNING w cron, error_log w safeUnlink +
ver. 0.335 - 12.03.2026
Poprawki bezpieczenstwa: safeUnlink() z walidacja realpath(), escaping XSS w szablonach artykulow
@@ -5,7 +8,7 @@ Poprawki bezpieczenstwa: safeUnlink() z walidacja realpath(), escaping XSS w sza Poprawki bezpieczenstwa: usunieto debug log tpay, naprawa SQL w IntegrationsRepository, usunieto RedBeanPHP
ver. 0.333 - 10.03.2026
-Ochrona przed podwójnym składaniem zamówienia (order submit token) +Ochrona przed podwĂłjnym skĹ‚adaniem zamĂłwienia (order submit token)
ver. 0.332 - 01.03.2026
API produktow: nowe pola new_to_date i additional_message @@ -35,28 +38,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 @@ -65,16 +68,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) @@ -104,10 +107,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
@@ -117,31 +120,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() @@ -160,12 +163,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
@@ -209,17 +212,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 @@ -231,7 +234,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 @@ -239,10 +242,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()` @@ -253,22 +256,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()` @@ -357,12 +360,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`
@@ -444,7 +447,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` @@ -468,7 +471,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
@@ -537,78 +540,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 @@ -620,20 +623,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) @@ -648,43 +651,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 @@ -693,7 +696,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 @@ -702,46 +705,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 @@ -757,7 +760,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 @@ -769,22 +772,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 @@ -800,7 +803,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 @@ -812,10 +815,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 @@ -824,7 +827,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 @@ -842,11 +845,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 7abe525..c43e1e5 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -1,5 +1,5 @@