diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index aa1961c..75d5034 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -402,3 +402,10 @@ Aktualnie w suite są też testy modułów `Dictionaries`, `Articles` i `Users` - Modul `/admin/languages/` (jezyki + tlumaczenia) dziala na nowym routingu DI. - Widoki jezykow przepiete na `components/table-list` i `components/form-edit`. - Usunieto legacy: `autoload/admin/controls/class.Languages.php`, `autoload/admin/view/class.Languages.php`. + +## Aktualizacja 2026-02-12 (ver. 0.255) +- UPDATE: admin/Controllers/SettingsController, BannerController, DictionariesController, ArticlesController pobieraja listy jezykow przez Domain/Languages/LanguagesRepository (DI), bez zaleznosci od admin/factory/Languages. +- UPDATE: w admin/Site fabryki DI dla Articles, Banners, Settings, Dictionaries przekazuja rowniez LanguagesRepository. +- UPDATE: legacy admin/controls/* oraz admin/factory/Shop* przepiete z admin/factory/Languages::languages_list() na bezposrednie wywolania LanguagesRepository. +- FIX: autoload/admin/factory/class.Languages.php uzywa pelnego znacznika repository = $repository; + $this->languagesRepository = $languagesRepository; } /** @@ -185,7 +188,7 @@ class ArticlesController return \Tpl::view('articles/article-edit', [ 'article' => $this->repository->find((int)\S::get('id')), 'menus' => \admin\factory\Pages::menus_list(), - 'languages' => \admin\factory\Languages::languages_list(), + 'languages' => $this->languagesRepository->languagesList(), 'layouts' => \admin\factory\Layouts::layouts_list(), 'user' => $user ]); diff --git a/autoload/admin/Controllers/BannerController.php b/autoload/admin/Controllers/BannerController.php index 666a64c..846a068 100644 --- a/autoload/admin/Controllers/BannerController.php +++ b/autoload/admin/Controllers/BannerController.php @@ -2,6 +2,7 @@ namespace admin\Controllers; use Domain\Banner\BannerRepository; +use Domain\Languages\LanguagesRepository; use admin\ViewModels\Forms\FormEditViewModel; use admin\ViewModels\Forms\FormField; use admin\ViewModels\Forms\FormTab; @@ -11,11 +12,13 @@ use admin\Support\Forms\FormRequestHandler; class BannerController { private BannerRepository $repository; + private LanguagesRepository $languagesRepository; private FormRequestHandler $formHandler; - public function __construct(BannerRepository $repository) + public function __construct(BannerRepository $repository, LanguagesRepository $languagesRepository) { $this->repository = $repository; + $this->languagesRepository = $languagesRepository; $this->formHandler = new FormRequestHandler(); } @@ -163,7 +166,7 @@ class BannerController { $bannerId = (int)\S::get('id'); $banner = $this->repository->find($bannerId); - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); // Sprawdź czy są błędy walidacji z poprzedniego requestu $validationErrors = $_SESSION['form_errors'][$this->getFormId()] ?? null; @@ -185,7 +188,7 @@ class BannerController $bannerId = (int)\S::get('id'); $banner = $this->repository->find($bannerId); - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); $viewModel = $this->buildFormViewModel($banner, $languages); diff --git a/autoload/admin/Controllers/DictionariesController.php b/autoload/admin/Controllers/DictionariesController.php index e11e8a8..259d61c 100644 --- a/autoload/admin/Controllers/DictionariesController.php +++ b/autoload/admin/Controllers/DictionariesController.php @@ -2,6 +2,7 @@ namespace admin\Controllers; use Domain\Dictionaries\DictionariesRepository; +use Domain\Languages\LanguagesRepository; use admin\ViewModels\Forms\FormAction; use admin\ViewModels\Forms\FormEditViewModel; use admin\ViewModels\Forms\FormField; @@ -11,11 +12,13 @@ use admin\Support\Forms\FormRequestHandler; class DictionariesController { private DictionariesRepository $repository; + private LanguagesRepository $languagesRepository; private FormRequestHandler $formHandler; - public function __construct(DictionariesRepository $repository) + public function __construct(DictionariesRepository $repository, LanguagesRepository $languagesRepository) { $this->repository = $repository; + $this->languagesRepository = $languagesRepository; $this->formHandler = new FormRequestHandler(); } @@ -117,7 +120,7 @@ class DictionariesController { $unitId = (int)\S::get('id'); $unit = $this->repository->find($unitId) ?? ['id' => 0, 'languages' => []]; - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); $validationErrors = $_SESSION['form_errors'][$this->getFormId()] ?? null; if ($validationErrors) { @@ -152,7 +155,7 @@ class DictionariesController $unitId = (int)\S::get('id'); $unit = $this->repository->find($unitId) ?? ['id' => 0, 'languages' => []]; - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); $viewModel = $this->buildFormViewModel($unit, $languages); $result = $this->formHandler->handleSubmit($viewModel, $_POST); diff --git a/autoload/admin/Controllers/SettingsController.php b/autoload/admin/Controllers/SettingsController.php index 68dfaf1..b0318fa 100644 --- a/autoload/admin/Controllers/SettingsController.php +++ b/autoload/admin/Controllers/SettingsController.php @@ -1,6 +1,7 @@ settingsRepository = $settingsRepository; + $this->languagesRepository = $languagesRepository; $this->formHandler = new FormRequestHandler(); } @@ -83,7 +86,7 @@ class SettingsController exit; } - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); $settings = $this->settingsRepository->getSettings(); $viewModel = $this->buildFormViewModel($settings, $languages); @@ -113,7 +116,7 @@ class SettingsController */ public function view(): string { - $languages = \admin\factory\Languages::languages_list(); + $languages = $this->languagesRepository->languagesList(); $settings = $this->settingsRepository->getSettings(); $validationErrors = $_SESSION['form_errors'][$this->getFormId()] ?? null; diff --git a/autoload/admin/class.Site.php b/autoload/admin/class.Site.php index 015134a..5e14bd6 100644 --- a/autoload/admin/class.Site.php +++ b/autoload/admin/class.Site.php @@ -206,21 +206,24 @@ class Site global $mdb; return new \admin\Controllers\ArticlesController( - new \Domain\Article\ArticleRepository( $mdb ) + new \Domain\Article\ArticleRepository( $mdb ), + new \Domain\Languages\LanguagesRepository( $mdb ) ); }, 'Banners' => function() { global $mdb; return new \admin\Controllers\BannerController( - new \Domain\Banner\BannerRepository( $mdb ) + new \Domain\Banner\BannerRepository( $mdb ), + new \Domain\Languages\LanguagesRepository( $mdb ) ); }, 'Settings' => function() { global $mdb; return new \admin\Controllers\SettingsController( - new \Domain\Settings\SettingsRepository( $mdb ) + new \Domain\Settings\SettingsRepository( $mdb ), + new \Domain\Languages\LanguagesRepository( $mdb ) ); }, 'ProductArchive' => function() { @@ -242,7 +245,8 @@ class Site global $mdb; return new \admin\Controllers\DictionariesController( - new \Domain\Dictionaries\DictionariesRepository( $mdb ) + new \Domain\Dictionaries\DictionariesRepository( $mdb ), + new \Domain\Languages\LanguagesRepository( $mdb ) ); }, 'Filemanager' => function() { diff --git a/autoload/admin/controls/class.Pages.php b/autoload/admin/controls/class.Pages.php index 4ec7b89..afd9d64 100644 --- a/autoload/admin/controls/class.Pages.php +++ b/autoload/admin/controls/class.Pages.php @@ -67,7 +67,7 @@ class Pages 'menu_id' => \S::get( 'menu_id' ), 'menus' => \admin\factory\Pages::menu_lists(), 'layouts' => \admin\factory\Layouts::layouts_list(), - 'languages' => \admin\factory\Languages::languages_list() + 'languages' => ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ] ); } diff --git a/autoload/admin/controls/class.Scontainers.php b/autoload/admin/controls/class.Scontainers.php index 3fa2279..d06e63e 100644 --- a/autoload/admin/controls/class.Scontainers.php +++ b/autoload/admin/controls/class.Scontainers.php @@ -29,7 +29,7 @@ class Scontainers \admin\factory\Scontainers::container_details( \S::get( 'id' ) ), - \admin\factory\Languages::languages_list() + ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ); } diff --git a/autoload/admin/controls/class.ShopAttribute.php b/autoload/admin/controls/class.ShopAttribute.php index ec7e043..6148546 100644 --- a/autoload/admin/controls/class.ShopAttribute.php +++ b/autoload/admin/controls/class.ShopAttribute.php @@ -31,7 +31,7 @@ class ShopAttribute return \Tpl::view( 'shop-attribute/values-edit', [ 'attribute' => \admin\factory\ShopAttribute::attribute_details( (int) \S::get( 'attribute-id' ) ), 'values' => \admin\factory\ShopAttribute::get_attribute_values( (int) \S::get( 'attribute-id' ) ), - 'languages' => \admin\factory\Languages::languages_list() + 'languages' => ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ] ); } @@ -60,7 +60,7 @@ class ShopAttribute { return \Tpl::view( 'shop-attribute/attribute-edit', [ 'attribute' => \admin\factory\ShopAttribute::attribute_details( (int) \S::get( 'id' ) ), - 'languages' => \admin\factory\Languages::languages_list() + 'languages' => ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ] ); } diff --git a/autoload/admin/controls/class.ShopCategory.php b/autoload/admin/controls/class.ShopCategory.php index f3dd42f..9966704 100644 --- a/autoload/admin/controls/class.ShopCategory.php +++ b/autoload/admin/controls/class.ShopCategory.php @@ -51,7 +51,7 @@ class ShopCategory \S::get( 'id' ) ), \S::get( 'pid' ), - \admin\factory\Languages::languages_list() + ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ); } @@ -63,4 +63,4 @@ class ShopCategory 'dlang' => \front\factory\Languages::default_language() ] ); } -} \ No newline at end of file +} diff --git a/autoload/admin/controls/class.ShopProducer.php b/autoload/admin/controls/class.ShopProducer.php index 03fe750..815e695 100644 --- a/autoload/admin/controls/class.ShopProducer.php +++ b/autoload/admin/controls/class.ShopProducer.php @@ -26,7 +26,7 @@ class ShopProducer { return \Tpl::view( 'shop-producer/edit', [ 'producer' => \S::get( 'id' ) ? new \shop\Producer( \S::get( 'id' ) ) : null, - 'languages' => \admin\factory\Languages::languages_list() + 'languages' => ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList() ] ); } @@ -34,4 +34,4 @@ class ShopProducer { return \Tpl::view( 'shop-producer/list' ); } -} \ No newline at end of file +} diff --git a/autoload/admin/controls/class.ShopProduct.php b/autoload/admin/controls/class.ShopProduct.php index e076736..d0181bc 100644 --- a/autoload/admin/controls/class.ShopProduct.php +++ b/autoload/admin/controls/class.ShopProduct.php @@ -242,7 +242,7 @@ class ShopProduct return \Tpl::view( 'shop-product/product-edit', [ 'product' => \admin\factory\ShopProduct::product_details( (int) \S::get( 'id' ) ), - 'languages' => \admin\factory\Languages::languages_list(), + 'languages' => ( new \Domain\Languages\LanguagesRepository( $GLOBALS['mdb'] ) )->languagesList(), 'categories' => \admin\factory\ShopCategory::subcategories( null ), 'layouts' => \admin\factory\Layouts::layouts_list(), 'products' => \admin\factory\ShopProduct::products_list(), diff --git a/autoload/admin/factory/class.Languages.php b/autoload/admin/factory/class.Languages.php index f77d6bf..3e46b4f 100644 --- a/autoload/admin/factory/class.Languages.php +++ b/autoload/admin/factory/class.Languages.php @@ -1,4 +1,4 @@ -languagesList((bool)$only_active); } } -?> - diff --git a/autoload/admin/factory/class.ShopAttribute.php b/autoload/admin/factory/class.ShopAttribute.php index 338f447..0eddec2 100644 --- a/autoload/admin/factory/class.ShopAttribute.php +++ b/autoload/admin/factory/class.ShopAttribute.php @@ -62,7 +62,7 @@ class ShopAttribute \admin\factory\ShopProduct::update_product_price_by_attribute_value_impact( $ids[$main_language][$i], $impact_on_the_price[$i] ); - $langs = \admin\factory\Languages::languages_list(); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList(); foreach ( $langs as $lang ) { @@ -108,7 +108,7 @@ class ShopAttribute if ( $impact_on_the_price[$i] ) \admin\factory\ShopProduct::update_product_price_by_attribute_value_impact( $value_id, \S::normalize_decimal( $impact_on_the_price[$i] ) ); - $langs = \admin\factory\Languages::languages_list(); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList(); if ( \S::is_array_fix( $langs ) ) foreach ( $langs as $lang ) { if ( $names[$lang['id']][$i] ) diff --git a/autoload/admin/factory/class.ShopProducer.php b/autoload/admin/factory/class.ShopProducer.php index 969d104..6c3aae5 100644 --- a/autoload/admin/factory/class.ShopProducer.php +++ b/autoload/admin/factory/class.ShopProducer.php @@ -28,7 +28,7 @@ class ShopProducer $id = $mdb -> id(); - $langs = \admin\factory\Languages::languages_list( true ); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList( true ); foreach ( $langs as $lg ) { $mdb -> insert( 'pp_shop_producer_lang', [ @@ -55,7 +55,7 @@ class ShopProducer 'id' => (int) $producer_id ] ); - $langs = \admin\factory\Languages::languages_list( true ); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList( true ); foreach ( $langs as $lg ) { if ( $translation_id = $mdb -> get( 'pp_shop_producer_lang', 'id', [ 'AND' => [ 'producer_id' => $producer_id, 'lang_id' => $lg['id'] ] ] ) ) @@ -86,4 +86,4 @@ class ShopProducer } return false; } -} \ No newline at end of file +} diff --git a/autoload/admin/factory/class.ShopProduct.php b/autoload/admin/factory/class.ShopProduct.php index 0cdbb96..abd34b8 100644 --- a/autoload/admin/factory/class.ShopProduct.php +++ b/autoload/admin/factory/class.ShopProduct.php @@ -802,7 +802,7 @@ class ShopProduct if ( $id ) { - $langs = \admin\factory\Languages::languages_list( true ); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList( true ); foreach ( $langs as $lg ) { $mdb -> insert( 'pp_shop_products_langs', [ @@ -1009,7 +1009,7 @@ class ShopProduct \admin\factory\ShopProduct::update_product_combinations_prices( $product_id, $price_brutto, $vat, $price_brutto_promo ); - $langs = \admin\factory\Languages::languages_list( true ); + $langs = ( new \Domain\Languages\LanguagesRepository( $mdb ) )->languagesList( true ); foreach ( $langs as $lg ) { if ( $translation_id = $mdb -> get( 'pp_shop_products_langs', 'id', [ 'AND' => [ 'product_id' => $product_id, 'lang_id' => $lg['id'] ] ] ) ) diff --git a/tests/Unit/admin/Controllers/ArticlesControllerTest.php b/tests/Unit/admin/Controllers/ArticlesControllerTest.php index a5da2d3..6b1ad26 100644 --- a/tests/Unit/admin/Controllers/ArticlesControllerTest.php +++ b/tests/Unit/admin/Controllers/ArticlesControllerTest.php @@ -4,16 +4,19 @@ namespace Tests\Unit\admin\Controllers; use PHPUnit\Framework\TestCase; use admin\Controllers\ArticlesController; use Domain\Article\ArticleRepository; +use Domain\Languages\LanguagesRepository; class ArticlesControllerTest extends TestCase { private $mockRepository; + private $mockLanguagesRepository; private $controller; protected function setUp(): void { $this->mockRepository = $this->createMock(ArticleRepository::class); - $this->controller = new ArticlesController($this->mockRepository); + $this->mockLanguagesRepository = $this->createMock(LanguagesRepository::class); + $this->controller = new ArticlesController($this->mockRepository, $this->mockLanguagesRepository); } public function testCanCreateController(): void @@ -23,7 +26,7 @@ class ArticlesControllerTest extends TestCase public function testConstructorAcceptsRepository(): void { - $controller = new ArticlesController($this->mockRepository); + $controller = new ArticlesController($this->mockRepository, $this->mockLanguagesRepository); $this->assertInstanceOf(ArticlesController::class, $controller); } @@ -66,7 +69,8 @@ class ArticlesControllerTest extends TestCase $constructor = $reflection->getConstructor(); $params = $constructor->getParameters(); - $this->assertCount(1, $params); + $this->assertCount(2, $params); $this->assertEquals('Domain\Article\ArticleRepository', $params[0]->getType()->getName()); + $this->assertEquals('Domain\Languages\LanguagesRepository', $params[1]->getType()->getName()); } } diff --git a/tests/Unit/admin/Controllers/DictionariesControllerTest.php b/tests/Unit/admin/Controllers/DictionariesControllerTest.php index 5a357e0..8d936bb 100644 --- a/tests/Unit/admin/Controllers/DictionariesControllerTest.php +++ b/tests/Unit/admin/Controllers/DictionariesControllerTest.php @@ -4,21 +4,24 @@ namespace Tests\Unit\admin\Controllers; use PHPUnit\Framework\TestCase; use admin\Controllers\DictionariesController; use Domain\Dictionaries\DictionariesRepository; +use Domain\Languages\LanguagesRepository; class DictionariesControllerTest extends TestCase { private $mockRepository; + private $mockLanguagesRepository; private $controller; protected function setUp(): void { $this->mockRepository = $this->createMock(DictionariesRepository::class); - $this->controller = new DictionariesController($this->mockRepository); + $this->mockLanguagesRepository = $this->createMock(LanguagesRepository::class); + $this->controller = new DictionariesController($this->mockRepository, $this->mockLanguagesRepository); } public function testConstructorAcceptsRepository(): void { - $controller = new DictionariesController($this->mockRepository); + $controller = new DictionariesController($this->mockRepository, $this->mockLanguagesRepository); $this->assertInstanceOf(DictionariesController::class, $controller); } @@ -58,7 +61,8 @@ class DictionariesControllerTest extends TestCase $constructor = $reflection->getConstructor(); $params = $constructor->getParameters(); - $this->assertCount(1, $params); + $this->assertCount(2, $params); $this->assertEquals('Domain\Dictionaries\DictionariesRepository', $params[0]->getType()->getName()); + $this->assertEquals('Domain\Languages\LanguagesRepository', $params[1]->getType()->getName()); } } diff --git a/tests/Unit/admin/Controllers/SettingsControllerTest.php b/tests/Unit/admin/Controllers/SettingsControllerTest.php index 5b0d8f0..b93e4cc 100644 --- a/tests/Unit/admin/Controllers/SettingsControllerTest.php +++ b/tests/Unit/admin/Controllers/SettingsControllerTest.php @@ -3,6 +3,7 @@ namespace Tests\Unit\admin\Controllers; use PHPUnit\Framework\TestCase; use admin\Controllers\SettingsController; +use Domain\Languages\LanguagesRepository; use Domain\Settings\SettingsRepository; /** @@ -14,17 +15,19 @@ use Domain\Settings\SettingsRepository; class SettingsControllerTest extends TestCase { private $mockSettingsRepository; + private $mockLanguagesRepository; private $controller; protected function setUp(): void { $this->mockSettingsRepository = $this->createMock(SettingsRepository::class); - $this->controller = new SettingsController($this->mockSettingsRepository); + $this->mockLanguagesRepository = $this->createMock(LanguagesRepository::class); + $this->controller = new SettingsController($this->mockSettingsRepository, $this->mockLanguagesRepository); } public function testConstructorAcceptsRepository(): void { - $controller = new SettingsController($this->mockSettingsRepository); + $controller = new SettingsController($this->mockSettingsRepository, $this->mockLanguagesRepository); $this->assertInstanceOf(SettingsController::class, $controller); } diff --git a/updates/0.20/ver_0.255.zip b/updates/0.20/ver_0.255.zip new file mode 100644 index 0000000..e24ea94 Binary files /dev/null and b/updates/0.20/ver_0.255.zip differ diff --git a/updates/0.20/ver_0.255_files.txt b/updates/0.20/ver_0.255_files.txt new file mode 100644 index 0000000..e69de29 diff --git a/updates/changelog.php b/updates/changelog.php index 3f34830..c038a18 100644 --- a/updates/changelog.php +++ b/updates/changelog.php @@ -1,4 +1,9 @@ -ver. 0.254 - 12.02.2026
+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 `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 diff --git a/updates/versions.php b/updates/versions.php index 8f173d6..f6ef0de 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -1,5 +1,5 @@