Release 0.255: migrate remaining Languages usages to repository DI

This commit is contained in:
2026-02-12 22:28:57 +01:00
parent a02f718a41
commit 5e9b998043
25 changed files with 95 additions and 44 deletions

View File

@@ -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 <?php (kompatybilnosc serwerow z short_open_tag=Off).
- Testy: 130 tests, 303 assertions

View File

@@ -590,3 +590,10 @@ Gdy `persist = true`:
- **UPDATE:** `admin\\factory\\Languages` jako fasada delegujaca do repozytorium
- **CLEANUP:** usunieto legacy `admin\\controls\\Languages` oraz `admin\\view\\Languages`
- **UPDATE:** poprawki globalne `components/table-list` dla krotkich kolumn/filtr<74>w
## Aktualizacja 2026-02-12 (ver. 0.255)
- UPDATE: SettingsController, BannerController, DictionariesController, ArticlesController pobieraja liste jezykow przez Domain/Languages/LanguagesRepository (DI) zamiast legacy admin/factory/Languages.
- UPDATE: router DI (admin/Site) przekazuje LanguagesRepository do kontrolerow Articles, Banners, Settings, Dictionaries.
- UPDATE: pozostale aktywne odwolania legacy (admin/controls, admin/factory/Shop*) zostaly przepiete na LanguagesRepository.
- FIX: autoload/admin/factory/class.Languages.php poprawione na <?php (zgodnosc z short_open_tag=Off).
- Testy po zmianie: 130 tests, 303 assertions.

View File

@@ -184,3 +184,10 @@ OK (130 tests, 301 assertions)
Nowe testy dodane 2026-02-12:
- `tests/Unit/Domain/Languages/LanguagesRepositoryTest.php`
- `tests/Unit/admin/Controllers/LanguagesControllerTest.php`
## Aktualizacja suite (release 0.255)
Ostatnio zweryfikowano: 2026-02-12
```text
OK (130 tests, 303 assertions)
```

View File

@@ -2,14 +2,17 @@
namespace admin\Controllers;
use Domain\Article\ArticleRepository;
use Domain\Languages\LanguagesRepository;
class ArticlesController
{
private ArticleRepository $repository;
private LanguagesRepository $languagesRepository;
public function __construct(ArticleRepository $repository)
public function __construct(ArticleRepository $repository, LanguagesRepository $languagesRepository)
{
$this->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
]);

View File

@@ -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);

View File

@@ -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);

View File

@@ -1,6 +1,7 @@
<?php
namespace admin\Controllers;
use Domain\Languages\LanguagesRepository;
use Domain\Settings\SettingsRepository;
use admin\ViewModels\Forms\FormEditViewModel;
use admin\ViewModels\Forms\FormField;
@@ -14,11 +15,13 @@ use admin\Support\Forms\FormRequestHandler;
class SettingsController
{
private SettingsRepository $settingsRepository;
private LanguagesRepository $languagesRepository;
private FormRequestHandler $formHandler;
public function __construct(SettingsRepository $settingsRepository)
public function __construct(SettingsRepository $settingsRepository, LanguagesRepository $languagesRepository)
{
$this->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;

View File

@@ -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() {

View File

@@ -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()
] );
}

View File

@@ -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()
);
}

View File

@@ -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()
] );
}

View File

@@ -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()
] );
}
}
}

View File

@@ -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' );
}
}
}

View File

@@ -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(),

View File

@@ -1,4 +1,4 @@
<?
<?php
namespace admin\factory;
class Languages
@@ -49,5 +49,3 @@ class Languages
return self::repository()->languagesList((bool)$only_active);
}
}
?>

View File

@@ -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] )

View File

@@ -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;
}
}
}

View File

@@ -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'] ] ] ) )

View File

@@ -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());
}
}

View File

@@ -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());
}
}

View File

@@ -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);
}

BIN
updates/0.20/ver_0.255.zip Normal file

Binary file not shown.

View File

View File

@@ -1,4 +1,9 @@
<b>ver. 0.254 - 12.02.2026</b><br />
<b>ver. 0.255 - 12.02.2026</b><br />
- 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 `<?php` (zgodnosc z `short_open_tag=Off`)
<hr><b>ver. 0.254 - 12.02.2026</b><br />
- 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

View File

@@ -1,5 +1,5 @@
<?
$current_ver = 254;
$current_ver = 255;
for ($i = 1; $i <= $current_ver; $i++)
{