# Changelog shopPRO Logi zmian z migracji na Domain-Driven Architecture. Najnowsze na gorze. --- ## ver. 0.267 (2026-02-14) - ShopStatuses - **ShopStatuses** - migracja `/admin/shop_statuses` na Domain + DI + nowe widoki - NOWE: `Domain\ShopStatus\ShopStatusRepository` (`listForAdmin`, `find`, `save`, `getApiloStatusId`, `getByIntegrationStatusId`, `allStatuses`) - NOWE: `admin\Controllers\ShopStatusesController` (DI) z akcjami `list`, `edit`, `save` (bez aliasow legacy) - NOWE: typ pola `FormFieldType::COLOR` + `FormField::color()` + `FormFieldRenderer::renderColor()` (color picker HTML5 zsynchronizowany z polem tekstowym) - UPDATE: modul `/admin/shop_statuses/*` dziala na `components/table-list` i `components/form-edit` - UPDATE: `front\factory\ShopStatuses` jako fasada delegujaca do `Domain\ShopStatus\ShopStatusRepository` - UPDATE: menu admin przepiete na kanoniczny URL `/admin/shop_statuses/list/` - CLEANUP: usuniete legacy `autoload/admin/controls/class.ShopStatuses.php`, `autoload/admin/factory/class.ShopStatuses.php` - UWAGA: statusy maja ID od 0 - kluczowe dla walidacji (find/save uzywaja `$id < 0`) - Testy: **OK (254 tests, 736 assertions)** --- ## ver. 0.266 (2026-02-13) - ShopCoupon - **ShopCoupon** - migracja `/admin/shop_coupon` na Domain + DI + nowe widoki - NOWE: `Domain\Coupon\CouponRepository` (`listForAdmin`, `find`, `save`, `delete`, `categoriesTree`) - NOWE: `admin\Controllers\ShopCouponController` (DI) z akcjami `list`, `edit`, `save`, `delete` - UPDATE: kompatybilnosc aliasow legacy (`view_list`, `coupon_edit`, `coupon_save`, `coupon_delete`) obslugiwana przez nowy kontroler - UPDATE: modul `/admin/shop_coupon/*` dziala na `components/table-list` i `components/form-edit` - NOWE: widoki/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` - CLEANUP: usuniete legacy `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 przepiete na kanoniczny URL `/admin/shop_coupon/list/` - FIX: ujednolicone UI drzewek i checkboxow miedzy kuponami i layoutami - Testy: **OK (235 tests, 682 assertions)** --- ## ver. 0.265 (2026-02-13) - ShopPromotion poprawki - **ShopPromotion** - stabilizacja po migracji - UPDATE: dodane `date_from` w `Domain\Promotion\PromotionRepository` (save/find/list/sort) - UPDATE: `admin\Controllers\ShopPromotionController` rozszerzony o pole `Data od` na formularzu i kolumne `Data od` na liscie - UPDATE: `shop\Promotion::get_active_promotions()` filtruje aktywnosc po `date_from` i `date_to` - FIX: zapis edycji promocji nie tworzy nowego rekordu (hidden `id` + fallback `id` z URL) - TEST: rozszerzono `PromotionRepositoryTest` o asercje `date_from` - Testy: **OK (222 tests, 614 assertions)** --- ## ver. 0.264 (2026-02-13) - ShopPromotion - **ShopPromotion** - migracja `/admin/shop_promotion` na Domain + DI + nowe widoki - NOWE: `Domain\Promotion\PromotionRepository` (`listForAdmin`, `find`, `save`, `delete`, `categoriesTree`, invalidacja cache aktywnych promocji) - NOWE: `admin\Controllers\ShopPromotionController` (DI) z akcjami `list`, `edit`, `save`, `delete` - UPDATE: routing DI (`admin\Site`) rozszerzony o modul `ShopPromotion` - UPDATE: modul `/admin/shop_promotion/*` dziala na `components/table-list` i `components/form-edit` - NOWE: widoki/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 `autoload/admin/controls/class.ShopPromotion.php`, `autoload/admin/factory/class.ShopPromotion.php`, `admin/templates/shop-promotion/view-list.php` - UPDATE: menu admin przepiete na kanoniczny URL `/admin/shop_promotion/list/` - Testy: **OK (222 tests, 609 assertions)** --- ## ver. 0.263 (2026-02-13) - Integrations + cleanup Sellasist/Baselinker - NOWE: `Domain\Integrations\IntegrationsRepository` (settings Apilo/ShopPRO, OAuth, product linking, API fetch) - NOWE: `admin\Controllers\IntegrationsController` (DI) dla akcji Apilo i ShopPRO - UPDATE: `admin\factory\Integrations` jako fasada delegujaca do repozytorium - **CLEANUP: usunieto integracje Sellasist i Baselinker z calego projektu:** - Usuniete klasy: `admin\controls\Integrations`, `admin\controls\Baselinker`, `admin\factory\Baselinker`, `front\factory\Shop`, `shop\ShopStatus` - Usuniete szablony: `integrations/sellasist-settings.php`, `integrations/baselinker-settings.php`, `admin/templates/baselinker/` - Wyczyszczone referencje w: `cron.php`, `cron/cron-xml.php`, `shop\Order`, kontrolery/factory/front Shop* - Testy: **OK (212 tests, 577 assertions)** --- ## ver. 0.262 (2026-02-13) - Pages - NOWE: `Domain\Pages\PagesRepository` (CRUD menu/stron, drzewo stron, sortowanie, SEO) - NOWE: `admin\Controllers\PagesController` (DI) dla akcji menu/page/AJAX - UPDATE: widoki `admin/templates/pages/*` przepiete na dane z kontrolera/repozytorium - UPDATE: endpointy AJAX przepiete z `admin/ajax.php?a=*` na `/admin/pages/*` - CLEANUP: usuniete legacy `controls/Pages`, `view/Pages`, `factory/Pages`, `ajax/pages.php` - Testy: **OK (186 tests, 478 assertions)** --- ## ver. 0.261 (2026-02-13) - Articles (dalsza refaktoryzacja) - UPDATE: `Domain\Article\ArticleRepository` rozszerzone o metody UI/admin i `saveFilesOrder()` - UPDATE: `admin\Controllers\ArticlesController` obsluguje AJAX: `article_image_alt_change`, `article_file_name_change`, `article_image_delete`, `article_file_delete`, `filesOrderSave` - UPDATE: lista artykulow nie korzysta juz z `admin\factory\Articles::article_pages()` - UPDATE: widok edycji przepiety z `/admin/ajax.php` na `/admin/articles/*` - UPDATE: drag&drop sortowania listy zalacznikow - CLEANUP: usuniete `autoload/admin/view/class.Articles.php` i `admin/ajax/articles.php` - Testy: **OK (178 tests, 443 assertions)** --- ## ver. 0.260 (2026-02-12) - ArticlesArchive - NOWE: `admin\Controllers\ArticlesArchiveController` (DI) - UPDATE: `Domain\Article\ArticleRepository` rozszerzone o `listArchivedForAdmin()`, `restore()`, `deletePermanently()` - UPDATE: `/admin/articles_archive/view_list/` migrowane na `components/table-list` - CLEANUP: usuniete legacy `controls/ArticlesArchive`, `factory/ArticlesArchive`, `view/ArticlesArchive` - Testy: **OK (165 tests, 424 assertions)** --- ## ver. 0.259 (2026-02-12) - Scontainers - NOWE: `Domain\Scontainers\ScontainersRepository` (listForAdmin, find, save, delete, detailsForLanguage) - NOWE: `admin\Controllers\ScontainersController` (DI) - UPDATE: `/admin/scontainers/*` migrowane na `components/table-list` i `components/form-edit` - UPDATE: `admin\factory\Scontainers` i `front\factory\Scontainers` jako fasady - CLEANUP: usuniete `controls/Scontainers`, `view/Scontainers` - Testy: **OK (158 tests, 397 assertions)** --- ## ver. 0.258 (2026-02-12) - Newsletter (stabilizacja) - UPDATE: tymczasowo wylaczono flow `prepare/send/preview` (wymaga przebudowy) - UPDATE: tymczasowo wylaczono modul `Szablony uzytkownika` - UPDATE: aktywna obsluga tylko szablonow administracyjnych (`is_admin = 1`) - CLEANUP: usuniete nieuzywane widoki `prepare.php`, `preview.php`, `email-templates-user.php` --- ## ver. 0.257 (2026-02-12) - Newsletter - NOWE: `Domain\Newsletter\NewsletterRepository` (subskrybenci, szablony, ustawienia, kolejka wysylki) - NOWE: `Domain\Newsletter\NewsletterPreviewRenderer` (render podgladu) - NOWE: `admin\Controllers\NewsletterController` (DI) - UPDATE: `/admin/newsletter/*` migrowane na `components/table-list` i `components/form-edit` - UPDATE: `admin\factory\Newsletter` jako fasada; `front\factory\Newsletter` bez `admin\view\Newsletter` - CLEANUP: usuniete `controls/Newsletter`, `view/Newsletter` - Testy: **OK (150 tests, 372 assertions)** --- ## ver. 0.256 (2026-02-12) - Layouts - NOWE: `Domain\Layouts\LayoutsRepository` (find, save, delete, listForAdmin, menusWithPages, categoriesTree) - NOWE: `admin\Controllers\LayoutsController` (DI) - UPDATE: lista `/admin/layouts/view_list/` migrowana na `components/table-list` - UPDATE: widok `layouts/layout-edit` korzysta z danych z repozytorium - NOWE: partial `admin/templates/layouts/subcategories-list.php` - UPDATE: `Domain\Languages\LanguagesRepository::defaultLanguageId()` jako wspolna metoda - UPDATE: `ArticlesController` korzysta z `LayoutsRepository` (DI) - CLEANUP: usuniete `controls/Layouts`, `view/Layouts`; `factory/Layouts` jako fasada - Testy: **OK (141 tests, 336 assertions)** --- ## ver. 0.255 (2026-02-12) - Languages DI cleanup - UPDATE: SettingsController, BannerController, DictionariesController, ArticlesController pobieraja liste jezykow przez `Domain/Languages/LanguagesRepository` (DI) - UPDATE: router DI przekazuje `LanguagesRepository` do kontrolerow - UPDATE: legacy `admin/controls`, `admin/factory/Shop*` przepiete na `LanguagesRepository` - FIX: `admin/factory/class.Languages.php` poprawione na `