diff --git a/admin/templates/update/main-view.php b/admin/templates/update/main-view.php index cb20910..ebabea3 100644 --- a/admin/templates/update/main-view.php +++ b/admin/templates/update/main-view.php @@ -57,7 +57,7 @@ Changelog
- + ver ); ?>
diff --git a/build-update.ps1 b/build-update.ps1 index 038c739..2d36c3d 100644 --- a/build-update.ps1 +++ b/build-update.ps1 @@ -368,9 +368,9 @@ if (Test-Path $versionsFile) { Write-Ok "Zaktualizowano versions.php: `$current_ver = $versionInt" } -# --- 14. Aktualizacja changelog.php --- +# --- 14. Aktualizacja changelog-data.html --- -$changelogFile = "updates/changelog.php" +$changelogFile = "updates/changelog-data.html" if (Test-Path $changelogFile) { $dateStr = Get-Date -Format "dd.MM.yyyy" $newEntry = "ver. $versionNumber - $dateStr
`n$ChangelogEntry`n
`n" @@ -378,7 +378,7 @@ if (Test-Path $changelogFile) { $changelogContent = Get-Content $changelogFile -Raw $changelogContent = $newEntry + $changelogContent [System.IO.File]::WriteAllText($changelogFile, $changelogContent, $Utf8NoBom) - Write-Ok "Zaktualizowano changelog.php" + Write-Ok "Zaktualizowano changelog-data.html" } # --- 15. Cleanup --- diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 756124c..d56218a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,6 +4,17 @@ Logi zmian z migracji na Domain-Driven Architecture. Najnowsze na gorze. --- +## ver. 0.325 (2026-02-27) - Fix changelog encoding + limit wyświetlania + +- **FIX**: `updates/changelog.php` — naprawione krzaczki (mojibake) w polskich znakach; dane odbudowane z plików manifest +- **NEW**: `updates/changelog-data.html` — czyste dane changelog oddzielone od logiki PHP +- **REFACTOR**: `updates/changelog.php` — konwersja ze statycznego HTML na skrypt PHP: `Content-Type: utf-8`, parsowanie wpisów, filtrowanie po wersji +- **NEW**: Parametr `?ver=X.XXX` — ogranicza changelog do 5 wersji wstecz od wersji instancji +- **UPDATE**: `admin/templates/update/main-view.php` — przekazuje `?ver=` do URL changelog +- **UPDATE**: `build-update.ps1` — nowe wpisy dopisywane do `changelog-data.html` zamiast `changelog.php` + +--- + ## ver. 0.324 (2026-02-27) - System kolejki zadań cron - **NEW**: `Domain\CronJob\CronJobType` — stałe typów zadań, priorytetów, statusów, exponential backoff diff --git a/updates/changelog-data.html b/updates/changelog-data.html new file mode 100644 index 0000000..c5389ed --- /dev/null +++ b/updates/changelog-data.html @@ -0,0 +1,816 @@ +ver. 0.324 - 27.02.2026
+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 +
+ver. 0.321 - 24.02.2026
+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 +
+ver. 0.319 - 24.02.2026
+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) +
+ver. 0.317 - 23.02.2026
+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 +
+ver. 0.315 - 23.02.2026
+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 +
+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 +
+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 +
+ver. 0.311 - 23.02.2026
+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) +
+ver. 0.309 - 23.02.2026
+NEW - ApiloLogger (logowanie operacji Apilo do pp_log), cache-busting CSS/JS w admin panelu, poprawki UI listy produktow, clipboard API +
+ver. 0.308 - 22.02.2026
+NEW - kolorowe badge statusow zamowien, walidacja hex, sanityzacja HTML transport, optymalizacja SQL +
+ver. 0.307 - 22.02.2026
+NEW - przycisk Sprawdz aktualizacje w panelu admina, NEW - auto-generowany changelog z manifestow +
+ver. 0.306 - 22.02.2026
+FIX - ukrywanie form dostawy gdy nie ma dostepnych form platnosci +
+ver. 0.305 - 22.02.2026
+FIX - naprawa kolejnosci atrybutow permutacji, NEW - pasek postepu darmowej dostawy w koszyku +
+ver. 0.304 - 22.02.2026
+NEW - konfigurowalne limity kwotowe metod platnosci (min/max kwota zamowienia) +
+ver. 0.303 - 22.02.2026
+FIX - naprawiono wyswietlanie atrybutow produktu na froncie (kolizja kolejnosci), NEW - przycisk Podglad w edycji produktu +
+ver. 0.302 - 22.02.2026
+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 +
+ver. 0.300 - 21.02.2026
+- 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
+- NEW - Ukrywanie/pokazywanie kolumn w tabelach admina (toggle switch + localStorage) +
+ver. 0.298 - 20.02.2026
+- 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) +
+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 - 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ą +
+ver. 0.294 - 19.02.2026
+- 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ł) +
+ver. 0.293 - 19.02.2026
+- 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() +- FIX - BasketCalculator: null guard checkProductQuantityInStock + opcjonalne DI params summaryPrice/calculateBasketProductPrice +- FIX - PromotionRepository: null guard na $basket (produkcyjny fatal error) +- UPDATE - OrderRepository, ShopBasketController, ajax.php: jawne DI zamiast globals w callerach BasketCalculator +
+ver. 0.292 - 18.02.2026
+- UPDATE - pelna migracja front\factory\ do Domain (5 ostatnich klas: ShopProduct, ShopPaymentMethod, ShopPromotion, ShopStatuses, ShopTransport) +- UPDATE - ProductRepository: ~20 nowych metod frontendowych (cache Redis, lazy loading, SKU/EAN fallback) +- UPDATE - PromotionRepository: 5 metod aplikowania promocji (applyTypeWholeBasket/CheapestProduct/CategoriesOr/CategoriesAnd/CategoryCondition) +- UPDATE - TransportRepository: 4 metody frontendowe z cache (transportMethodsFront, transportCostCached, findActiveByIdCached, forPaymentMethod) +- UPDATE - PaymentMethodRepository: metody frontendowe z Redis cache +- CLEANUP - usuniety caly folder front\factory\ (20 klas zmigrowanych) + 4 inne klasy legacy +- FIX - broken transports_list() w ajax.php zastapiony nowa metoda forPaymentMethod() +- 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 - 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 +- CLEANUP - katalog autoload/shop/ pusty, zero referencji \shop\ w aktywnym kodzie +
+ver. 0.291 - 17.02.2026
+- UPDATE - migracja front\controls\ShopProducer + shop\Producer do Domain\Producer\ProducerRepository + front\Controllers\ShopProducerController +- FIX - bug shop\Producer::__get() referowal nieistniejace $this->data +
+ver. 0.290 - 17.02.2026
+- UPDATE - migracja front\factory\ShopCoupon + front\controls\ShopCoupon do Domain\Coupon\CouponRepository + front\Controllers\ShopCouponController +- UPDATE - migracja front\factory\ShopOrder + front\controls\ShopOrder + front\view\ShopOrder do Domain\Order\OrderRepository + front\Controllers\ShopOrderController +- FIX - kupony jednorazowe nigdy nie byly oznaczane jako uzyte (is_one_time/set_as_used w shop\Coupon) +- FIX - webhooks przelewy24/hotpay ujednolicone z tpay (poprawna obsluga Apilo sync) +
+ver. 0.289 - 17.02.2026
+- UPDATE - migracja front\factory\ShopCategory + front\view\ShopCategory do Domain\Category\CategoryRepository + front\Views\ShopCategory +- UPDATE - migracja front\factory\ShopClient + front\view\ShopClient + front\controls\ShopClient do Domain\Client\ClientRepository + front\Views\ShopClient + front\Controllers\ShopClientController +- FIX - usuniety hardcoded password bypass 'Legia1916' w logowaniu klienta +
+ver. 0.288 - 17.02.2026
+- UPDATE - migracja front\factory\ShopBasket do Domain\Basket\BasketCalculator (4 metody statyczne) +- UPDATE - migracja front\controls\ShopBasket do front\Controllers\ShopBasketController (camelCase, instancyjny) +- UPDATE - routing snake_case->camelCase w dispatch dla nowych kontrolerow +- CLEANUP - usunieta klasa cms\Layout (zastapiona $layoutsRepo->find) +- CLEANUP - usuniete 3 klasy legacy (front\factory\ShopBasket, front\controls\ShopBasket, cms\Layout) +
+ver. 0.287 - 17.02.2026
+- UPDATE - migracja front\factory\Scontainers do Domain\Scontainers\ScontainersRepository (frontScontainerDetails z Redis cache) +- UPDATE - migracja front\factory\ShopAttribute do Domain\Attribute\AttributeRepository (frontAttributeDetails, frontValueDetails z Redis cache) +- CLEANUP - usuniete 3 klasy legacy (front\factory\Scontainers, front\view\Scontainers, front\factory\ShopAttribute) +
+ver. 0.286 - 17.02.2026
+- UPDATE - migracja front\factory\Layouts do Domain\Layouts\LayoutsRepository (6 metod frontend z Redis cache) +- UPDATE - migracja front\factory\Menu + front\factory\Pages do Domain\Pages\PagesRepository (6 metod frontend z Redis cache) +- UPDATE - migracja front\view\Menu do front\Views\Menu (nowy namespace) +- CLEANUP - usuniete 4 klasy legacy + 1 martwy szablon (submenu.php) +- FIX - null $lang_id przy wczesnym wywolaniu check_url_params() +
+ver. 0.285 - 17.02.2026
+- UPDATE - migracja class.Tpl.php do Shared\Tpl\Tpl (~135 plikow przepietych) +- CLEANUP - usunieta nieuzywana klasa CurlServer (curl.class.php) +- FIX - thumb.php: naprawa require po migracji Image do Shared namespace +- 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 +
+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) +- 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 +
+ver. 0.282 - 16.02.2026
+- UPDATE - Cache cleanup: eliminacja legacy class.Cache.php, migracja CacheHandler i RedisConnection do Shared\Cache namespace +- UPDATE - 60 odwolan CacheHandler i 12 odwolan RedisConnection przepietych na Shared\Cache\ +- UPDATE - 13 metod front\factory przepietych z \Cache::fetch/store na CacheHandler (ShopProduct, ShopPaymentMethod, ShopCategory, ShopTransport, ShopAttribute) +- FIX - naprawione rozbieznosci kluczy cache (random_products, category_name) +- CLEANUP - usuniete: class.Cache.php, class.CacheHandler.php, class.RedisConnection.php +- UPDATE - testy: OK (454 tests, 1449 assertions) +
+ver. 0.281 - 16.02.2026
+- UPDATE - migracja Banners frontend: factory + view do Domain/Views (DI) +- 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 +- UPDATE - testy: OK (454 tests, 1449 assertions) +
+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) +- 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 - 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()` +- UPDATE - testy: `OK (450 tests, 1431 assertions)` +
+ver. 0.279 - 16.02.2026
+- UPDATE - migracja Newsletter frontend: factory + view + controls do Domain/Controllers/Views (DI) +- 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` +- 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`) +
+ver. 0.277 - 16.02.2026
+- 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()` +- 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()` +- UPDATE - testy: `OK (414 tests, 1335 assertions)` +
+ver. 0.276 - 15.02.2026
+- NEW - migracja modulu `ShopOrder` do architektury Domain + DI (`Domain\Order\OrderRepository`, `Domain\Order\OrderAdminService`, `admin\Controllers\ShopOrderController`) +- UPDATE - modul `/admin/shop_order/*` przepiety na nowy routing (kanoniczny URL `/admin/shop_order/list/`) i nowe widoki (`orders-list`, `order-details`, `order-edit`) +- FIX - stabilizacja listy zamowien (`OrderRepository::listForAdmin`) oraz poprawa wygladu tabeli (`components/table-list`, wyrownanie komorek i `text-right`) +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopOrder.php`, `autoload/admin/factory/class.ShopOrder.php`, `admin/templates/shop-order/view-list.php` +- UPDATE - usunieta fasada `autoload/admin/factory/class.Integrations.php`; wywolania przepiete na `Domain\Integrations\IntegrationsRepository` +- NEW - globalna wyszukiwarka admin (produkty + zamowienia) przy "Wyczysc cache" + endpoint `/admin/settings/globalSearchAjax/` +- FIX - wyszukiwanie po pelnym imieniu i nazwisku w global search +- UPDATE - testy: `OK (385 tests, 1246 assertions)` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.276.zip`, `ver_0.276_files.txt` +
+ver. 0.275 - 15.02.2026
+- NEW - migracja modulu `ShopCategory` do architektury Domain + DI (`Domain\Category\CategoryRepository`, `admin\Controllers\ShopCategoryController`) +- UPDATE - modul `/admin/shop_category/*` przepiety na nowy routing (kanoniczny URL `/admin/shop_category/list/`) i endpointy AJAX kontrolera (`save_categories_order`, `save_products_order`, `cookie_categories`) +- UPDATE - widoki `shop-category/*`: wydzielenie skryptow do `*-custom-script.php`, ujednolicone strzalki drzewa (`button + caret + aria-expanded`) +- UPDATE - przepiecie zaleznosci `ShopProduct` z `admin\factory\ShopCategory` na `Domain\Category\CategoryRepository` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopCategory.php`, `autoload/admin/factory/class.ShopCategory.php`, `autoload/admin/view/class.ShopCategory.php` +- UPDATE - testy: `OK (377 tests, 1197 assertions)` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.275.zip`, `ver_0.275_files.txt` +
+ver. 0.274 - 15.02.2026
+- NEW - migracja modulu `ShopClients` do architektury Domain + DI (`Domain\Client\ClientRepository`, `admin\Controllers\ShopClientsController`) +- UPDATE - modul `/admin/shop_clients/*` przepiety na `components/table-list` (lista klientow i szczegoly zamowien) +- UPDATE - routing i menu admin przepiete na kanoniczny URL `/admin/shop_clients/list/` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopClients.php`, `autoload/admin/factory/class.ShopClients.php` +- UPDATE - testy: `OK (361 tests, 1125 assertions)` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.274.zip`, `ver_0.274_files.txt` +
+ver. 0.273 - 15.02.2026
+- NEW - migracja `/admin/shop_product/mass_edit/*` do `Domain\Product\ProductRepository` + `admin\Controllers\ShopProductController` (DI + routing) +- UPDATE - nowy widok/skrypt masowej edycji (`mass-edit`, `mass-edit-custom-script`) z iCheck i ujednoliconymi strzalkami drzewa +- FIX - zaznaczanie kategorii w mass-edit nie zaznacza automatycznie produktow na liscie +- UPDATE - ujednolicenie strzalek/checkboxow w drzewkach: `/admin/pages/list/*` oraz zakladka wyswietlania w `/admin/articles/edit/*` +- UPDATE - testy: `OK (351 tests, 1091 assertions)` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.273.zip`, `ver_0.273_files.txt` +
+ver. 0.272 - 15.02.2026
+- NEW - migracja modulu `ShopProductSets` do architektury Domain + DI (`Domain\ProductSet\ProductSetRepository`, `admin\Controllers\ShopProductSetsController`) +- UPDATE - modul `/admin/shop_product_sets/*` przepiety z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` + multi-select Selectize +- UPDATE - routing i menu admin przepiete na kanoniczny URL `/admin/shop_product_sets/list/` +- UPDATE - `shop\ProductSet` przepiety na fasade do `Domain\ProductSet\ProductSetRepository` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopProductSets.php`, `autoload/admin/factory/class.ShopProductSet.php`, `admin/templates/shop-product-sets/view-list.php`, `admin/templates/shop-product-sets/set-edit.php` +- UPDATE - testy: `OK (324 tests, 1000 assertions)` + nowe pliki testowe `ProductSetRepositoryTest`, `ShopProductSetsControllerTest` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.272.zip`, `ver_0.272_files.txt` +
+ver. 0.271 - 14.02.2026
+- NEW - migracja modulu `ShopAttribute` do architektury Domain + DI (`Domain\Attribute\AttributeRepository`, `admin\Controllers\ShopAttributeController`) +- UPDATE - modul `/admin/shop_attribute/*` przepiety z legacy `grid/gridEdit` na `components/table-list`, `components/form-edit` oraz nowy edytor wartosci (`values-edit`) +- UPDATE - routing i menu admin przepiete na kanoniczny URL `/admin/shop_attribute/list/` (bez aliasow legacy) +- UPDATE - przepiecie zaleznosci kombinacji produktu: `admin\controls\ShopProduct`, `admin\factory\ShopProduct`, `admin/templates/shop-product/product-combination.php` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopAttribute.php`, `autoload/admin/factory/class.ShopAttribute.php`, `autoload/admin/view/class.ShopAttribute.php`, `admin/templates/shop-attribute/_partials/value.php` +- UPDATE - testy: `OK (312 tests, 948 assertions)` + nowe pliki testowe `AttributeRepositoryTest`, `ShopAttributeControllerTest` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.271.zip`, `ver_0.271_files.txt` +
+ver. 0.270 - 14.02.2026
+- FIX - Apilo: `shop\Order::set_as_paid()` wysyla mapowany typ platnosci Apilo (z `payment_method_id`), zamiast stalego `type = 1` +- NEW - Apilo: dodana kolejka retry `temp/apilo-sync-queue.json` dla nieudanych syncow platnosci/statusu (chwilowa niedostepnosc API) +- UPDATE - `cron.php`: automatyczne ponawianie zaleglych syncow przez `Order::process_apilo_sync_queue(10)` +- UPDATE - debug Apilo: rozszerzone logi odpowiedzi o HTTP code i bledy cURL dla sync platnosci/statusu +- UPDATE - testy: `OK (300 tests, 895 assertions)` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.270.zip`, `ver_0.270_files.txt` +
+ver. 0.269 - 14.02.2026
+- NEW - migracja modulu `ShopPaymentMethod` do architektury Domain + DI (`Domain\PaymentMethod\PaymentMethodRepository`, `admin\Controllers\ShopPaymentMethodController`) +- UPDATE - modul `/admin/shop_payment_method/*` przepiety z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` (nowe widoki listy i edycji) +- UPDATE - przepiecie zaleznosci na nowe repozytorium: `admin\controls\ShopTransport`, `front\factory\ShopPaymentMethod`, `shop\PaymentMethod` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopPaymentMethod.php`, `autoload/admin/factory/class.ShopPaymentMethod.php`, `autoload/admin/view/class.ShopPaymentMethod.php`, `admin/templates/shop-payment-method/view-list.php` +- UPDATE - Apilo: dodane automatyczne odswiezanie tokenu przed wygasnieciem (`apiloKeepalive`) oraz bardziej szczegolowe komunikaty bledow integracji +- UPDATE - testy: `OK (280 tests, 828 assertions)` + nowe pliki testowe `PaymentMethodRepositoryTest`, `ShopPaymentMethodControllerTest` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.269.zip`, `ver_0.269_files.txt` +
+ver. 0.268 - 14.02.2026
+- NEW - migracja modulu `ShopStatuses` do architektury Domain + DI (`Domain\ShopStatus\ShopStatusRepository`, `admin\Controllers\ShopStatusesController`) +- UPDATE - modul `/admin/shop_statuses/*` przepiety z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` +- NEW - nowy typ pola formularza `color` (HTML5 color picker + pole tekstowe zsynchronizowane) +- UPDATE - `front\factory\ShopStatuses` dziala jako fasada do `Domain\ShopStatus\ShopStatusRepository` +- UPDATE - menu admin przepiete na kanoniczny URL `/admin/shop_statuses/list/` +- CLEANUP - usuniete legacy klasy: `autoload/admin/controls/class.ShopStatuses.php`, `autoload/admin/factory/class.ShopStatuses.php` +- UPDATE - reorganizacja dokumentacji technicznej: pliki przeniesione do folderu `docs/` i rozbite na mniejsze pliki tematyczne +- UPDATE - testy: `OK (254 tests, 736 assertions)` + nowe pliki testowe `ShopStatusRepositoryTest`, `ShopStatusesControllerTest` +- 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` +- 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` +
+ver. 0.266 - 13.02.2026
+- NEW - migracja modulu `ShopCoupon` do architektury Domain + DI (`Domain\Coupon\CouponRepository`, `admin\Controllers\ShopCouponController`) +- UPDATE - modul `/admin/shop_coupon/*` przepiety z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` +- UPDATE - nowe widoki i partiale: `shop-coupon/coupons-list`, `shop-coupon/coupon-edit-new`, `shop-coupon/coupon-categories-selector`, `shop-coupon/coupon-categories-tree`, `shop-coupon/coupon-edit-custom-script` +- UPDATE - zachowana kompatybilnosc aliasow legacy akcji (`view_list`, `coupon_edit`, `coupon_save`, `coupon_delete`) w nowym kontrolerze +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopCoupon.php`, `autoload/admin/factory/class.ShopCoupon.php`, `admin/templates/shop-coupon/view-list.php`, `admin/templates/shop-coupon/coupon-edit.php` +- UPDATE - menu admin wskazuje kanoniczny URL `/admin/shop_coupon/list/` +- FIX - ujednolicone drzewka (strzalki + focus) i wyglad checkboxow miedzy `/admin/shop_coupon/edit/*` oraz `/admin/layouts/edit/*` +- UPDATE - testy: `OK (235 tests, 682 assertions)` + nowe pliki testowe `CouponRepositoryTest`, `ShopCouponControllerTest` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.266.zip`, `ver_0.266_files.txt` +
+ver. 0.265 - 13.02.2026
+- UPDATE - modul `/admin/shop_promotion/*`: dodano pole `Data od` (`date_from`) w repozytorium, formularzu i liscie +- UPDATE - front: `shop\Promotion::get_active_promotions()` uwzglednia `date_from` (okno aktywnosci od-do) +- FIX - edycja promocji zapisuje aktualizacje rekordu zamiast tworzenia nowego (`id` przekazywane przez hidden field + fallback z URL) +- UPDATE - testy: `OK (222 tests, 614 assertions)` +
+ver. 0.264 - 13.02.2026
+- NEW - migracja modulu `ShopPromotion` do architektury Domain + DI (`Domain\Promotion\PromotionRepository`, `admin\Controllers\ShopPromotionController`) +- UPDATE - modul `/admin/shop_promotion/*` przepiety z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` +- UPDATE - nowe widoki i partiale: `shop-promotion/promotions-list`, `shop-promotion/promotion-edit`, `shop-promotion/promotion-categories-selector`, `shop-promotion/promotion-categories-tree`, `shop-promotion/promotion-edit-custom-script` +- CLEANUP - usuniete legacy klasy/pliki: `autoload/admin/controls/class.ShopPromotion.php`, `autoload/admin/factory/class.ShopPromotion.php`, `admin/templates/shop-promotion/view-list.php` +- UPDATE - menu admin wskazuje kanoniczny URL `/admin/shop_promotion/list/` +- UPDATE - testy: `OK (222 tests, 609 assertions)` + nowe pliki testowe `PromotionRepositoryTest`, `ShopPromotionControllerTest` +
+ver. 0.263 - 13.02.2026
+- NEW - migracja modulu `Integrations` do architektury Domain + DI (`Domain\Integrations\IntegrationsRepository`, `admin\Controllers\IntegrationsController`) +- CLEANUP - usunieto integracje Sellasist i Baselinker z calego projektu (kontrolery, factory, szablony, referencje w cron/Order/ShopStatuses/ShopTransport/ShopPaymentMethod/ShopProduct) +- UPDATE - `admin\factory\Integrations` jako fasada delegujaca do repozytorium (tylko Apilo + ShopPRO) +- FIX - naprawione polskie znaki w `product-edit.php` (usuniety podwojny encoding UTF-8/CP1250) +- CLEANUP - usuniete pliki: `controls/Integrations`, `controls/Baselinker`, `factory/Baselinker`, `front/factory/Shop`, `shop/ShopStatus`, szablony sellasist/baselinker +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.263.zip`, `ver_0.263_files.txt` +
+ver. 0.262 - 13.02.2026
+- NEW - migracja modulu `Pages` do architektury Domain + DI (`Domain\Pages\PagesRepository`, `admin\Controllers\PagesController`) +- UPDATE - widoki `/admin/pages/*` przepiete na nowy routing i komponent `components/form-edit` (menu/page edit) +- FIX - przywrocony przycisk generowania linku SEO w edycji strony (zakladka SEO, pola jezykowe) +- FIX - popup potwierdzenia usuwania menu/strony ujednolicony z `table-list-confirm-dialog` + poprawione polskie znaki +- CLEANUP - usuniete legacy pliki Pages: `admin/ajax/pages.php`, `autoload/admin/controls/class.Pages.php`, `autoload/admin/factory/class.Pages.php`, `autoload/admin/view/class.Pages.php` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.262.zip`, `ver_0.262_files.txt` +
+ver. 0.261 - 13.02.2026
+- UPDATE - finalizacja refaktoryzacji modulu `Articles` (`/admin/articles`) w warstwie Domain + DI +- UPDATE - nowe akcje AJAX w `admin\Controllers\ArticlesController` (m.in. `files_order_save`) +- UPDATE - sortowanie zalacznikow i zdjec w edycji artykulu (drag&drop + zapis kolejnosci przy pierwszym zapisie) +- UPDATE - utwardzenie uploadow (wspolny helper `libraries/plupload/upload-common.php`, walidacje i tokeny) +- FIX - potwierdzenia usuwania zdjec/zalacznikow ujednolicone z widokiem listy (jquery-confirm) +- CLEANUP - usuniete legacy `admin/ajax/articles.php` i `autoload/admin/view/class.Articles.php` +- UPDATE - pliki aktualizacji: `updates/0.20/ver_0.261.zip`, `ver_0.261_files.txt`, `ver_0.261_sql.txt` +
+ver. 0.260 - 12.02.2026
+- NEW - migracja modulu `ArticlesArchive` do architektury Domain + DI (`admin\Controllers\ArticlesArchiveController`) +- UPDATE - `Domain\Article\ArticleRepository` rozszerzone o metody `listArchivedForAdmin`, `restore`, `deletePermanently` +- UPDATE - widok `/admin/articles_archive/view_list/` przepiety z legacy `grid` na `components/table-list` +- UPDATE - routing DI (`admin\Site`) rozszerzony o modul `ArticlesArchive` + mapowanie akcji `article_restore -> restore` +- CLEANUP - usuniete legacy klasy `autoload/admin/controls/class.ArticlesArchive.php`, `autoload/admin/factory/class.ArticlesArchive.php`, `autoload/admin/view/class.ArticlesArchive.php` +- UPDATE - plik do usuniecia dodany w `updates/0.20/ver_0.260_files.txt` +
+ver. 0.259 - 12.02.2026
+- NEW - migracja modulu `Scontainers` do architektury Domain + DI (`Domain\Scontainers\ScontainersRepository`, `admin\Controllers\ScontainersController`) +- UPDATE - widoki `/admin/scontainers/*` przepiete z legacy `grid/gridEdit` na `components/table-list` i `components/form-edit` +- UPDATE - routing DI (`admin\Site`) rozszerzony o modul `Scontainers` + mapowanie akcji `container_edit/container_save/container_delete` +- UPDATE - `admin\factory\Scontainers` dziala jako fasada do repozytorium (backward compatibility) +- UPDATE - `front\factory\Scontainers` korzysta z `Domain\Scontainers\ScontainersRepository` +- CLEANUP - usuniete legacy klasy `autoload/admin/controls/class.Scontainers.php`, `autoload/admin/view/class.Scontainers.php` +- UPDATE - plik do usuniecia dodany w `updates/0.20/ver_0.259_files.txt` +
+ver. 0.258 - 12.02.2026
+- UPDATE - modul `Newsletter`: funkcjonalnosc `Wysylka - przygotowanie` zostala tymczasowo wylaczona (menu + akcje `prepare/send/preview`) +- UPDATE - modul `Newsletter`: lista `Szablony uzytkownika` zostala tymczasowo wylaczona (menu + akcja `email_templates_user`) +- UPDATE - `NewsletterController`: lista szablonow ograniczona do szablonow administracyjnych (`is_admin = 1`) +- UPDATE - `email_template_edit` i `template_save` obsluguja tylko szablony administracyjne +- CLEANUP - usuniete nieuzywane szablony newslettera: `admin/templates/newsletter/prepare.php`, `admin/templates/newsletter/preview.php`, `admin/templates/newsletter/email-templates-user.php` +- UPDATE - plik do usuniecia dodany w `updates/0.20/ver_0.258_files.txt` +
+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 - `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` +
+ver. 0.256 - 12.02.2026
+- NEW - migracja modulu `Layouts` do architektury Domain + DI (`Domain\Layouts\LayoutsRepository`, `admin\Controllers\LayoutsController`) +- UPDATE - lista `/admin/layouts/view_list/` przepieta z legacy `grid` na `components/table-list` (filtry, sortowanie, paginacja) +- UPDATE - `layouts/layout-edit` korzysta z danych z repozytorium (menus/categories), bez wywolan legacy factory w widoku +- UPDATE - `Domain\Languages\LanguagesRepository` rozszerzone o wspolna metode `defaultLanguageId()` +- UPDATE - `admin\Controllers\ArticlesController` pobiera layouty przez `Domain\Layouts\LayoutsRepository` (DI) +- CLEANUP - usuniete legacy klasy `autoload/admin/controls/class.Layouts.php`, `autoload/admin/view/class.Layouts.php` +
+ver. 0.255 - 12.02.2026
+- UPDATE - kontrolery admin `Settings`, `Banners`, `Dictionaries`, `Articles` pobieraja liste jezykow przez `Domain\Languages\LanguagesRepository` (DI) +- UPDATE - routing DI (`admin\Site`) przekazuje `LanguagesRepository` do kontrolerow `Articles`, `Banners`, `Settings`, `Dictionaries` +- UPDATE - aktywne legacy odwolania (`admin\controls`, `admin\factory\Shop*`) przepiete z `admin\factory\Languages` na `LanguagesRepository` +- FIX - `autoload/admin/factory/class.Languages.php` uzywa pelnego znacznika PHP (zgodnosc z `short_open_tag=Off`) +
+ver. 0.254 - 12.02.2026
+- UPDATE - modul `Languages` w panelu admin przepiety na `Domain\Languages\LanguagesRepository` + `admin\Controllers\LanguagesController` +- 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) +- CLEANUP - usuniete legacy klasy: `autoload/admin/controls/class.Languages.php`, `autoload/admin/view/class.Languages.php` +
+ver. 0.253 - 12.02.2026
+- UPDATE - modul `Users` w panelu admin w pelni przepiety na `Domain\User\UserRepository` + `admin\Controllers\UsersController` +- UPDATE - migracja widokow users z `grid/gridEdit` na nowe komponenty (`components/table-list`, `components/form-edit`) +- UPDATE - dodana walidacja warunkowa: przy wlaczonym 2FA pole `E-mail do 2FA` jest wymagane +- UPDATE - globalne ulepszenia `components/table-list` (kompaktowe filtry select/status i odstepy w formularzu paginacji) +- CLEANUP - usuniete legacy klasy users: `autoload/admin/controls/class.Users.php`, `autoload/admin/factory/class.Users.php`, `autoload/admin/view/class.Users.php` +
+ver. 0.252 - 10.02.2026
+- UPDATE - migracja listy archiwum produktow do nowego komponentu tabeli (`components/table-list`) z filtrowaniem i paginacja +- UPDATE - banery i archiwum produktow: wydzielenie CSS/JS do osobnych widokow `*-custom-script.php` +- UPDATE - filemanager przepiety na nowy routing (`admin\Controllers\FilemanagerController`) +- FIX - naprawiono blad `Invalid Key` w widoku filemanagera po refaktoryzacji +- UPDATE - usunieto legacy klasy i stare szablony (`admin\controls`, `admin\view`, `admin/templates/product_archive`) +
+ver. 0.251 - 09.02.2026
+- NEW - migracja modulu Dictionaries do nowej architektury (Domain + admin Controller + DI) +- UPDATE - lista i formularz Dictionaries przepiete na nowe komponenty (`components/table-list`, `components/form-edit`) +- UPDATE - dodano globalne ograniczenie szerokosci pierwszej kolumny (Lp.) w `components/table-list` +- FIX - zapis tlumaczen jednostek obsluguje `lang_id` jako string (`pl`, `en`) +- UPDATE - usunieto legacy klasy Dictionaries: `admin\controls`, `admin\factory`, `front\factory` +- UPDATE - przepieto uzycia na `Domain\Dictionaries\DictionariesRepository` (`shop-product`, `shop_product` admin) +
+ver. 0.250
+- UPDATE - refaktoryzacja Settings: `Domain\Settings\SettingsRepository` ma bezposredni dostep do bazy (bez delegacji do `admin\factory\Settings`) +- UPDATE - przepieto pozostale uzycia `admin\factory\Settings` na `Domain\Settings\SettingsRepository` (`admin\controls\Settings`, `admin\controls\Newsletter`, `front\factory\Newsletter`) +- UPDATE - DI dla SettingsController: repozytorium otrzymuje `$mdb` w `admin\Site` +- UPDATE - Settings: widok edycji przeniesiony na nowy mechanizm formularza (`FormEditViewModel` + `components/form-edit`) jak w banerach +- UPDATE - usunieto nieuzywana legacy klase `autoload/admin/factory/class.Settings.php` +- UPDATE - usunieto legacy fallback kontrolera `autoload/admin/controls/class.Settings.php` +- UPDATE - usunieto nieuzywana klase widoku `autoload/admin/view/class.Settings.php` +
+ver. 0.249
+- FIX - banner edit: poprawiono zapisywanie danych jezykowych i synchronizacje CKEditor przed zapisem +- FIX - banner edit: naprawiono hash zakladek (usunieto `undefined` w URL) +- FIX - filemanager: przywrocono dzialanie popupa wyboru obrazka z banera +- UPDATE - komunikaty zapisu w nowym formularzu sa wyswietlane w stylu panelu (bez natywnego alertu JS) +- UPDATE - lista banerow: dodano kolumne miniatury oraz podglad duzego obrazka w popup po najechaniu +- UPDATE - usunieto nieuzywane legacy klasy banerow: `admin\view\Banners`, `admin\factory\Banners` +
+ver. 0.248
+- UPDATE - filtry w nowych tabelach dzialaja automatycznie na `onchange` +- UPDATE - `components/table-list`: auto-submit formularza filtrow po zmianie pola (select, date, text) +
+ver. 0.247
+- UPDATE - nowy dialog potwierdzenia usuwania w `components/table-list` (zamiast natywnego `confirm`) +- UPDATE - popup usuwania: wiekszy rozmiar i centrowanie na srodku ekranu +
+ver. 0.246
+- UPDATE - migracja listy banerow do nowego mechanizmu tabeli (`components/table-list`, filtrowanie, sortowanie, paginacja) +- UPDATE - `admin\Controllers\BannerController::list()` buduje `PaginatedTableViewModel` +- UPDATE - `Domain\Banner\BannerRepository::listForAdmin()` (bezpieczne filtrowanie i sortowanie) +- UPDATE - usunieto legacy kontroler `autoload/admin/controls/class.Banners.php` +- UPDATE - plik do usuniecia dodany w `updates/0.20/ver_0.246_files.txt` +
+ver. 0.245
+- UPDATE - refaktoryzacja listy artykulow: wspolny komponent `admin/templates/components/table-list.php` + `PaginatedTableViewModel` +- NEW - `admin\Support\TableListRequestFactory` (wspolna obsluga filtrow, sortowania i paginacji dla list) +- UPDATE - `Domain\Article\ArticleRepository::listForAdmin()` utwardzone pod katem bezpieczenstwa (whitelist sortowania, bind params, limit per_page) +- UPDATE - usunieto legacy `browse_list` dla modulu Articles +- UPDATE - usuniete pliki legacy sa wyszczegolnione w `updates/0.20/ver_0.245_files.txt` +- FIX - generator `.htaccess` i `libraries/htaccess.conf` (QSA dla `/admin/...`, komentarz niedozwolonych dyrektyw `SetHandler/AddHandler/ForceType`) +
+ver. 0.244
+- 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ść) +
+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ść) +
+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 +
+ver. 0.241
+- 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) +
+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 +- 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\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) +
+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) +
+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 +
+ver. 0.236
+- 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 +
+ver. 0.232
+- NEW - opcje GPSR +
+ver. 0.231
+- FIX - poprawki bezpieczeństwa + dwuetapowa weryfikacja logowania +
+ver. 0.230
+- FIX - poprawki bezpieczeństwa +
+ver. 0.229
+- NEW - pola dodatkowe z opcją wymagane/niewymagane +
+ver. 0.228
+- NEW - cron do wysyłania zamówień do trustmate.io +
+ver. 0.227
+- NEW - historia kodów rabatowych +
+ver. 0.226
+- NEW - dodanie opcji faktury do zamówienia +
+ver. 0.225
+- NEW - przycisk czyszczenia cache +- NEW - ponowne wysyłanie zamówienia do apilo +
+ver. 0.224
+- NEW - sortowanie form dostawy +
+ver. 0.223
+- FIX - integracja z Orlen Paczka +
+ver. 0.222
+- NEW - integracja z Orlen Paczka +
+ver. 0.221
+- 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]. +
+ver. 0.219
+- 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 +
+ver. 0.216
+- NEW - aktualizacja api i cron (apilo) +
+ver. 0.215
+- FIX - generowanie pliku .htaccess +
+ver. 0.214
+- NEW - dodanie API +
+ver. 0.213
+- FIX - wyliczenie darmowej dostawy +
+ver. 0.212
+- NEW - zmiany w zapisywaniu zamówienia do apilo +
+ver. 0.211
+- NEW - Debugowanie apilo + wyświetlanie podkategorii +
+ver. 0.210
+- NEW - dodatkowe pola w widoku produktów +
+ver. 0.209
+- NEW - zmiany w widoku produktów (panel administratora) +
+ver. 0.208
+- 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 +
+ver. 0.203
+- NEW - zmiana sposobu wyliczania cen produkty z dodatkami +
+ver. 0.202
+- NEW - dodano "główne zdjęcie" w edycji artykułu +
+ver. 0.201
+- FIX - aktualizacja statusów na podstawie baselinkera +
+ver. 0.200
+- 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 +
+ver. 0.197
+- FIX - poprawki w Dashboard +
+ver. 0.196
+- FIX - integracja z apilo.com +
+ver. 0.195
+- FIX - aktualizacja statusów +
+ver. 0.194
+- UPDATE - integracja apilo +
+ver. 0.193
+- UPDATE - aktualizacja synchronizacji z baselinker +
+ver. 0.192
+- NEW - pobieranie statusów z sellasist +
+ver. 0.191
+- NEW - integracja z selasist +
+ver. 0.190
+- FIX - produkty powiązane +
+ver. 0.189
+- FIX - ceny promocyjne produktów z dodatkiem +
+ver. 0.188
+- 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ą +
+ver. 0.185
+- FIX - masowa edycja produktów +
+ver. 0.184
+- NEW - druga część integracji z apilo, masowa edycja produktów +
+ver. 0.183
+- NEW - pierwsza część integracji z apilo +
+ver. 0.182
+- FIX - layout +
+ver. 0.181
+- NEW - infinitescroll - opcja włączy/wyłącz +
+ver. 0.180
+- NEW - aktualizacja dashboard +
+ver. 0.179
+- NEW - obsługa EAN +
+ver. 0.177, 0.178
+- FIX - custom_label +
+ver. 0.176
+- NEW - custom_label +
+ver. 0.175
+- NEW - nowe statystyki +
+ver. 0.174
+- FIX - generowanie xml +
+ver. 0.173
+- NEW - duplikowanie produktu wraz z kombinacjami +- NEW - dodanie przechodzenia pomiędzy zamówienia (poprzednie/następne zamówienie) +
+ver. 0.172
+- FIX - poprawki w Cache +
+ver. 0.171
+- FIX - poprawki w Cache +
+ver. 0.170
+- NEW - usuwanie cache produktu przy zapisie +
+ver. 0.169
+- FIX - poprawki w liście produktów +
+ver. 0.168
+- NEW - archiwum produktów +
+ver. 0.167
+- NEW - dodanie obsługi cen i stanów magazynowych kombinacji produktów +
+ver. 0.166
+- NEW - współpraca z GTM +
+ver. 0.164/5
+- FIX - ukrywanie produktów nieaktywnych +
+ver. 0.163
+- NEW - automatyczne podpowiadanie produktów do zestawu na podstawie wcześniejszych zakupów klientów +
+ver. 0.162
+- NEW - GA4 +
+ver. 0.161
+- UPDATE - aktualizacja menu administratora +
+ver. 0.160
+- UPDATE - aktualizacja cron Baselinker +- NEW - waga i cena jednostkowa produktu +
+ver. 0.159
+- FIX - cron Baselinker +
+ver. 0.158
+- UPDATE - poprawa kolorystyki przycisków +
+ver. 0.157
+- NEW - szybka zmiana statusu produktu +
+ver. 0.156
+- NEW - dodanie szybkiej edycji google xml label +
+ver. 0.155
+- NEW - infinite scroll w widoku kategorii +
+ver. 0.154
+- FIX - atrybuty produktów +
+ver. 0.153
+- FIX - atrybuty produktów +
+ver. 0.152
+- FIX - tematy maili +
+ver. 0.151
+- FIX - tematy maili +
+ver. 0.150
+- NEW - domyślna forma transportu +
+ver. 0.149
+- NEW - tematy maili +
+ver. 0.148
+- FIX - cron-xml +
+ver. 0.147
+- FIX - cron-xml +
+ver. 0.146
+- NEW - cron-xml +
+ver. 0.145
+- NEW - omnibus ready +
+ver. 0.144
+- FIX - usunięcie adresu marianek.pl z kodu +
+ver. 0.143
+- FIX - poprawa generowania plików WEBP +
+ver. 0.142
+- FIX - poprawa adresu strony głównej +
diff --git a/updates/changelog.php b/updates/changelog.php index 192c206..6aea2f1 100644 --- a/updates/changelog.php +++ b/updates/changelog.php @@ -1,129 +1,52 @@ -ver. 0.324 - 27.02.2026
-NEW - system kolejki zadań cron (DB), priorytetowe przetwarzanie, retry/backoff, ochrona endpointu cron -
-ver. 0.324 - 27.02.2026
-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 -
-ver. 0.321 - 24.02.2026
-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 -
-ver. 0.319 - 24.02.2026
-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) -
-ver. 0.317 - 23.02.2026
-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 -
-ver. 0.315 - 23.02.2026
-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 -
-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 -
-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 -
-ver. 0.311 - 23.02.2026
-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) -
-ver. 0.309 - 23.02.2026
-NEW - ApiloLogger (logowanie operacji Apilo do pp_log), cache-busting CSS/JS w admin panelu, poprawki UI listy produktow, clipboard API -
-ver. 0.308 - 22.02.2026
-NEW - kolorowe badge statusow zamowien, walidacja hex, sanityzacja HTML transport, optymalizacja SQL -
-ver. 0.308 - 22.02.2026
-NEW - kolorowe badge statusow zamowien, walidacja hex, sanityzacja HTML transport, optymalizacja SQL -
tags +$blocks = preg_split( '//', $html ); $entries = []; -// 1. Scan manifest files -$manifests = glob( __DIR__ . '/0.*/ver_*_manifest.json' ); -if ( $manifests ) { - foreach ( $manifests as $file ) { - $json = @file_get_contents( $file ); - if ( !$json ) continue; - // Strip UTF-8 BOM if present - if ( substr( $json, 0, 3 ) === "\xEF\xBB\xBF" ) { - $json = substr( $json, 3 ); - } - $data = @json_decode( $json, true ); - if ( !$data || empty( $data['version'] ) || empty( $data['changelog'] ) ) continue; - - $date = isset( $data['date'] ) ? $data['date'] : ''; - // Convert YYYY-MM-DD to DD.MM.YYYY - if ( $date && preg_match( '/^(\d{4})-(\d{2})-(\d{2})$/', $date, $m ) ) { - $date = $m[3] . '.' . $m[2] . '.' . $m[1]; - } - +foreach ( $blocks as $block ) { + $block = trim( $block ); + if ( empty( $block ) ) { + continue; + } + // Extract version number from ver. X.XXX + if ( preg_match( '/ver\.\s*([\d.]+)/', $block, $m ) ) { $entries[] = [ - 'version' => (float) $data['version'], - 'ver_str' => $data['version'], - 'date' => $date, - 'text' => $data['changelog'], + 'version_int' => (int) round( (float) $m[1] * 1000 ), + 'html' => $block, ]; } } -// 2. Load legacy entries -$legacyFile = __DIR__ . '/changelog-legacy.json'; -if ( file_exists( $legacyFile ) ) { - $legacyJson = @file_get_contents( $legacyFile ); - if ( $legacyJson ) { - $legacy = @json_decode( $legacyJson, true ); - if ( is_array( $legacy ) ) { - foreach ( $legacy as $item ) { - if ( empty( $item['version'] ) ) continue; - $entries[] = [ - 'version' => (float) $item['version'], - 'ver_str' => $item['version'], - 'date' => isset( $item['date'] ) ? $item['date'] : '', - 'text' => isset( $item['text'] ) ? $item['text'] : '', - ]; - } +// If ?ver= parameter is provided, show only 5 versions back from that version +$ver = isset( $_GET['ver'] ) ? (int) round( (float) $_GET['ver'] * 1000 ) : 0; + +if ( $ver > 0 ) { + $lowerBound = $ver - 5; + + $filtered = []; + foreach ( $entries as $entry ) { + if ( $entry['version_int'] > $lowerBound ) { + $filtered[] = $entry; } } + $entries = $filtered; } -// 3. Sort descending by version -usort( $entries, function ( $a, $b ) { - if ( $a['version'] == $b['version'] ) return 0; - return ( $a['version'] > $b['version'] ) ? -1 : 1; -} ); - -// 4. Output HTML +// Output foreach ( $entries as $entry ) { - $header = 'ver. ' . htmlspecialchars( $entry['ver_str'] ); - if ( $entry['date'] ) { - $header .= ' - ' . htmlspecialchars( $entry['date'] ); - } - $text = nl2br( htmlspecialchars( $entry['text'] ) ); - - echo '' . $header . '
' . "\n"; - echo $text . "\n"; - echo '
' . "\n"; + echo $entry['html'] . "\n
\n"; }