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>
This commit is contained in:
2026-04-30 23:32:26 +02:00
parent 72cb5b8d1d
commit a3caeb9a9a
25 changed files with 2694 additions and 29 deletions

View File

@@ -5,32 +5,33 @@
See: .paul/PROJECT.md (updated 2026-04-26)
**Core value:** Autorski system CMS umożliwiający zarządzanie treściami i stronami internetowymi.
**Current focus:** Phase 5 complete — ready for Phase 6 (Admin: Base Infrastructure)
**Current focus:** Phase 6 — Plan 06-01 (Forms infrastructure) created, awaiting approval
## Current Position
Milestone: v0.1 Refaktoryzacja
Phase: 6 (Admin: Base Infrastructure) — Not started
Plan: Not started
Status: Ready to plan Phase 6
Last activity: 2026-04-26Phase 5 complete, transitioned to Phase 6
Phase: 6 of 19 (Admin: Base Infrastructure) — Complete
Plan: All plans complete (06-01, 06-02)
Status: Phase 6 closed — ready to plan Phase 7
Last activity: 2026-04-30UNIFY 06-02 closed Phase 6 (Admin Base Infrastructure shipped)
Progress:
- Milestone: [▓▓▓░░░░░░] 26% (5 of 19 phases)
- Milestone: [▓▓▓░░░░░░] 32% (6 of 19 phases)
- Phase 6: [▓▓▓▓▓▓▓▓▓▓] 100% complete
## Loop Position
Current loop state:
```
PLAN ──▶ APPLY ──▶ UNIFY
✓ ✓ ✓ [Loop complete - ready for next PLAN]
✓ ✓ ✓ [Phase 6 complete ready for Phase 7 PLAN]
```
## Performance Metrics
**Velocity:**
- Total plans completed: 5
- Total execution time: ~27min
- Total plans completed: 7
- Total execution time: ~39min
**By Phase:**
@@ -42,10 +43,15 @@ PLAN ──▶ APPLY ──▶ UNIFY
| 04-domain-authors-newsletter | 1/1 | ~2min | ~2min |
| 04h-hotfix-https-updates | 1/1 | ~90min | ~90min |
| 05-domain-seoadditional-cron-releases | 1/1 | ~5min | ~5min |
| 06-admin-base | 2/2 | ~12min | ~6min |
## Accumulated Context
### Decisions
- 2026-04-30: Phase 6/06-02 — Brak `BaseController`. Phase 7+ kontrolery będą POJOs z DI w konstruktorze (jak shopPRO BannerController). Powtórzony kod (np. `requirePrivilege()`) zostanie wyabstrahowany dopiero gdy zaobserwujemy realny pattern w 2-3 kontrolerach.
- 2026-04-30: Phase 6/06-02 — Filename `TableListRequestFactory.php` (PSR-4 czyste) zamiast shopPRO `class.TableListRequestFactory.php` (lamie PSR-4). Naprawia bug shopPRO.
- 2026-04-30: Phase 6/06-01 — composer.json PSR-4 mapuje `Admin\``autoload/admin/` (lowercase folder), bo Windows fs case-insensitive zlał `admin/` legacy z planowanym `Admin/`. Cross-platform safe na Linux. Bonus: `Frontend\``autoload/front/` (preventive dla Phase 14+).
- 2026-04-30: Phase 6/06-01 — Form VMs i FormValidator skopiowane 1:1 z shopPRO; jedyne zmiany to namespace `admin\``Admin\` (PascalCase per decyzja użytkownika). PROJECT.md mylnie deklarował, że Form Edit System już istnieje — w cmsPRO go nie było.
- 2026-04-26: Phase 5 — UpdateRepository przyjmuje ($db, $settings) w konstruktorze — settings potrzebny do update_key i wersji.
- 2026-04-26: Phase 5 — Cron helper methods (get_site_meta_*) stały się private w CronRepository — były wywoływane tylko wewnętrznie.
- 2026-04-26: Phase 5 — class.Cron.php zachowuje brak namespace (klasa globalna) — cron.php używa bezpośrednio.
@@ -66,9 +72,9 @@ None.
## Session Continuity
Last session: 2026-04-26
Stopped at: Phase 5 complete, loop closed
Next action: /paul:plan dla Phase 6 (Admin: Base Infrastructure)
Last session: 2026-04-30
Stopped at: Phase 6 complete (loop closed)
Next action: /paul:plan dla Phase 7 (Admin: Articles + ArticlesArchive)
Resume file: .paul/ROADMAP.md
---