Files
cmsPRO/.paul/phases/06-admin-base/06-01-SUMMARY.md
Jacek Pyziak a3caeb9a9a feat(06-admin-base): Admin\ base infrastructure — Form Edit System + Support layer (Phase 6)
Phase 6 zamknięta po 2 planach. Pełny fundament dla Phase 7-13 (migracja
17 admin controllers do Admin\ namespace).

06-01 (Forms infrastructure):
- Admin\ViewModels\Forms\* — 5 ViewModeli (687 L)
- Admin\Validation\FormValidator (196 L)
- composer.json: php >=7.4, PSR-4 paths cross-platform safe
  (Admin\ → autoload/admin/, Frontend\ → autoload/front/)

06-02 (Support layer):
- Admin\Support\TableListRequestFactory (99 L) — parser list z $_GET
- Admin\Support\Forms\FormRequestHandler (159 L) — POST + CSRF + walidacja + persist
- Admin\Support\Forms\FormFieldRenderer (494 L) — renderer HTML pól

Decyzje:
- Brak BaseController — Phase 7+ kontrolery jako POJOs z DI (jak shopPRO)
- PSR-4 filename fix: TableListRequestFactory.php (bez shopPRO 'class.' prefix)
- PascalCase namespace (Admin\Support) na lowercase folder admin/
  ze względu na Windows fs case-insensitivity vs legacy admin/controls/

Pliki: 8 nowych klas, 1635 L kodu PHP 7.4-kompatybilnego, zero regresji.
Smoke test: walidacja e-maila zwraca PL komunikat, factory parsuje
?page=&per_page=&sort=&filter=, Domain/Shared nadal ładują się.

PHPUnit: 37/37 OK.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 23:32:26 +02:00

5.2 KiB
Raw Blame History

phase, plan, status, completed
phase plan status completed
06-admin-base 01 complete 2026-04-30

SUMMARY: Plan 06-01 — Forms infrastructure

Co zrobiono

Przeniesiono z shopPRO do cmsPRO warstwę Form Edit System pod nowy namespace Admin\ (PascalCase). Wszystkie pliki ładują się przez Composer PSR-4, smoke test runtime potwierdza poprawne działanie walidacji.

Pliki utworzone (6)

Plik Linii Namespace
autoload/admin/ViewModels/Forms/FormEditViewModel.php 178 Admin\ViewModels\Forms
autoload/admin/ViewModels/Forms/FormField.php 364 Admin\ViewModels\Forms
autoload/admin/ViewModels/Forms/FormFieldType.php 25 Admin\ViewModels\Forms
autoload/admin/ViewModels/Forms/FormTab.php 31 Admin\ViewModels\Forms
autoload/admin/ViewModels/Forms/FormAction.php 89 Admin\ViewModels\Forms
autoload/admin/Validation/FormValidator.php 196 Admin\Validation

Total: 883 linii kodu PHP 7.4-kompatybilnego.

Pliki zmodyfikowane (2)

  • composer.json — dodano "require": { "php": ">=7.4" }, mapowanie PSR-4 dla Admin\ ustawione na realny case na disku
  • vendor/composer/autoload_* — regenerowane przez composer dump-autoload

Smoke test (literalny output)

Admin\ViewModels\Forms\FormEditViewModel: OK
Admin\ViewModels\Forms\FormField: OK
Admin\ViewModels\Forms\FormFieldType: OK
Admin\ViewModels\Forms\FormTab: OK
Admin\ViewModels\Forms\FormAction: OK
Admin\Validation\FormValidator: OK
SMOKE: OK: Pole "E-mail" musi być poprawnym adresem e-mail.
PHP_REQ: >=7.4

php -l na wszystkich 6 plikach: 6× "No syntax errors detected".

Zero regresji — Domain\Articles\ArticlesRepository i Shared\Helpers\Helpers ładują się dalej.

Acceptance Criteria — status

  • AC-1: Form ViewModels load via PSR-4 — wszystkie 5 klas + FormValidator
  • AC-2: FormValidator namespace + dependency — use Admin\ViewModels\Forms\... działa
  • AC-3: Smoke test walidacji e-maila — zwraca PL komunikat błędu
  • AC-4: PHP >=7.4 w composer.json + PascalCase namespace na wszystkich nowych plikach
  • AC-5: Zero regresji — istniejące Domain/Shared repos działają

Deviation: PSR-4 path mapping w composer.json

Plan zakładał: "Admin\\": "autoload/Admin/" (PascalCase folder)

Zmienione na: "Admin\\": "autoload/admin/" (lowercase folder)

Powód: Windows file system jest case-insensitive — folder autoload/admin/ (legacy) i autoload/Admin/ (planowany) to ten sam katalog na dysku. Git tracked path = admin/ (lowercase, ustanowione przez wcześniejsze fazy z legacy controls/, factory/, view/). Na produkcyjnym Linux (case-sensitive) PSR-4 z mapowaniem "Admin\\": "autoload/Admin/" nie znalazłby plików, bo realny katalog na disku to admin/.

Konsekwencje:

  • Klasa Admin\ViewModels\Forms\FormField ładuje się z autoload/admin/ViewModels/Forms/FormField.php
  • Legacy admin\controls\Articles (lowercase namespace) NIE matches PSR-4 prefix Admin\ (case-sensitive) — ładuje się przez legacy autoloader (autoload/autoloader.php) ✓
  • Cross-platform safe: działa identycznie na Windows i Linux

Bonus zmiana (preventive): "Frontend\\": "autoload/Frontend/""Frontend\\": "autoload/front/" z tego samego powodu — żeby Phase 14+ nie powtórzyła problemu.

Boundaries — przestrzegane

  • ✓ Brak zmian w autoload/admin/controls/, factory/, view/ (50+ plików legacy nietknięte)
  • ✓ Brak zmian w autoload/Domain/, autoload/Shared/
  • ✓ Brak zmian w autoload/autoloader.php
  • composer.lock nieruszony (composer update nie uruchamiany)
  • ✓ Tylko zmodyfikowano composer.json + vendor/composer/autoload_* (regen)

Deferred issues / observations

  1. FormValidator constants nie ma — komunikaty błędów to literały string. Mogłyby być stałe klasy (np. MSG_REQUIRED, MSG_INVALID_EMAIL) dla i18n w przyszłości. Przeniesienie 1:1 z shopPRO (zachowanie kompatybilności).

  2. FormField fluent setters mile by były — obecnie 17-argumentowy konstruktor + 14 factory methods. Dla Phase 7+ kontrolerów to OK, ale builder pattern (FormField::text('name')->label('X')->required()->placeholder('Y')) byłby czystszy. Deferred.

  3. switch jako nazwa metody (FormField::switch()) — w PHP < 8.0 to słowo kluczowe i nie może być statycznym nazwiskiem metody w niektórych kontekstach. PHP 7.4 dopuszcza je jako nazwę metody (działa), ale uwaga przy edycji w niektórych edytorach. Zachowane bo shopPRO też tak ma.

  4. FormTab/FormAction bez factory methods — tylko konstruktor. To jest design choice z shopPRO; nie zmieniam.

Setup dla Plan 06-02

Po 06-01 założenia stabilne dla Plan 06-02 (Controller infrastructure):

  • Admin\ namespace działa via PSR-4 → mapowanie do autoload/admin/
  • composer.json deklaruje php: >=7.4
  • Form VMs dostępne — BaseController może budować/zwracać FormEditViewModel
  • Konwencja PascalCase utrwalona — Admin\Base\BaseController, Admin\Support\TableListRequestFactory

Plan 06-02 doda:

  • autoload/admin/Support/TableListRequestFactory.php (Admin\Support\TableListRequestFactory)
  • autoload/admin/Base/BaseController.php (Admin\Base\BaseController)