Files
cmsPRO/.paul/phases/01-infrastructure/01-01-PLAN.md
Jacek Pyziak 3325eaf44c refactor: centralny autoloader, Shared\Email i Shared\Security
- Utworzono autoload/autoloader.php (hybrydowy PSR-4 + legacy)
- Zmigrowano 7 entry pointów do centralnego autoloadera
- Dodano PSR-4 mapowanie w composer.json (Domain, Shared, Admin, Frontend)
- Utworzono Shared\Email\Email (PHPMailer, migracja z Helpers)
- Utworzono Shared\Security\CsrfToken (random_bytes + hash_equals)
- Wrappery w Helpers delegują do nowych klas
- Zaktualizowano docs/PROJECT_STRUCTURE.md
- Inicjalizacja PAUL (.paul/) z roadmapą 19 faz refaktoryzacji

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 17:28:01 +02:00

5.9 KiB

phase, plan, type, wave, depends_on, files_modified, autonomous, delegation
phase plan type wave depends_on files_modified autonomous delegation
01-infrastructure 01 execute 1
composer.json
autoload/autoloader.php
index.php
admin/index.php
ajax.php
api.php
cron.php
download.php
true off
## Goal Scentralizować autoloader w jednym pliku, dodać PSR-4 mapowanie w composer.json dla Domain\, Shared\, Admin\, Frontend\, i zastąpić zduplikowane __autoload_my_classes() we wszystkich entry pointach.

Purpose

Fundament dla całej refaktoryzacji — bez działającego PSR-4 autoloadera nie można dodawać nowych klas w Admin\ i Frontend\ namespace'ach.

Output

  • Centralny autoload/autoloader.php (hybrydowy: PSR-4 + legacy class.*.php)
  • Zaktualizowany composer.json z PSR-4 mapowaniem
  • Wszystkie entry pointy używają jednego autoloadera
## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md

Source Files

@composer.json @index.php (zawiera __autoload_my_classes) @admin/index.php (zawiera duplikat __autoload_my_classes) @ajax.php, api.php, cron.php, download.php (kolejne duplikaty)

Reference

shopPRO composer.json — PSR-4 mapping: Domain, Admin, Frontend, Shared\ → autoload/

<acceptance_criteria>

AC-1: Centralny autoloader

Given plik autoload/autoloader.php istnieje
When jest załadowany przez require_once
Then rejestruje spl_autoload_register z obsługą zarówno PSR-4 (ClassName.php) jak i legacy (class.ClassName.php)

AC-2: composer.json PSR-4

Given composer.json ma sekcję autoload.psr-4
When uruchomię composer dump-autoload
Then namespace'y Domain\, Shared\, Admin\, Frontend\ mapują do autoload/Domain/, autoload/Shared/, autoload/Admin/, autoload/Frontend/

AC-3: Entry pointy używają centralnego autoloadera

Given index.php, admin/index.php, ajax.php, api.php, cron.php, download.php
When sprawdzę ich kod
Then każdy zawiera require_once do autoload/autoloader.php (lub ../autoload/autoloader.php)
And żaden nie zawiera zduplikowanej funkcji __autoload_my_classes

AC-4: Istniejące klasy działają

Given klasy Domain\Articles\ArticlesRepository, Shared\Cache\CacheHandler etc. istnieją
When autoloader próbuje je załadować
Then klasy ładują się poprawnie (brak Fatal Error)

</acceptance_criteria>

Task 1: Utworzenie centralnego autoloadera autoload/autoloader.php Utworzyć plik autoload/autoloader.php: - Funkcja __autoload_my_classes($class) obsługująca: 1. Zamiana namespace separator \ na / 2. Próba załadowania: autoload/{path}/class.{ClassName}.php (legacy) 3. Próba załadowania: autoload/{path}/{ClassName}.php (PSR-4) - spl_autoload_register('__autoload_my_classes') - Bazowy katalog ustalany przez __DIR__ . '/' (relatywnie do autoload/) - Obsługa klas bez namespace (legacy) — szukanie w autoload/class.{name}.php
Wzorować się na istniejącej logice z index.php, ale:
- Używać __DIR__ zamiast ścieżek relatywnych do entry pointa
- Jeden plik obsługuje WSZYSTKIE entry pointy
Sprawdzić że plik istnieje i zawiera spl_autoload_register AC-1 satisfied: Centralny autoloader z obsługą PSR-4 i legacy Task 2: Aktualizacja composer.json composer.json Dodać sekcję autoload.psr-4 do composer.json: ```json "autoload": { "psr-4": { "Domain\\": "autoload/Domain/", "Shared\\": "autoload/Shared/", "Admin\\": "autoload/Admin/", "Frontend\\": "autoload/Frontend/" } } ``` Zachować istniejący autoload-dev. Sprawdzić że composer.json zawiera poprawne mapowanie PSR-4 AC-2 satisfied: composer.json z PSR-4 mapowaniem Task 3: Migracja entry pointów index.php, admin/index.php, ajax.php, api.php, cron.php, download.php W każdym entry poincie: 1. USUNĄĆ definicję funkcji __autoload_my_classes() i jej spl_autoload_register 2. DODAĆ na początku (po <?php): require_once __DIR__ . '/autoload/autoloader.php'; Dla admin/index.php: require_once __DIR__ . '/../autoload/autoloader.php'; 3. Zachować resztę kodu bez zmian (config.php, medoo, session etc.)
NIE zmieniać niczego innego w tych plikach — tylko autoloader.
Grep po wszystkich entry pointach: brak __autoload_my_classes definicji, jest require autoloader.php AC-3 satisfied: Wszystkie entry pointy używają centralnego autoloadera

DO NOT CHANGE

  • autoload/Domain/* (istniejące klasy Domain — nie modyfikować)
  • autoload/Shared/* (istniejące klasy Shared — nie modyfikować)
  • config.php (konfiguracja bazy danych)
  • libraries/* (zewnętrzne biblioteki)

SCOPE LIMITS

  • Tylko autoloader — nie refaktoryzować żadnych klas
  • Nie dodawać nowych klas Admin\ ani Frontend\ (to w kolejnych fazach)
  • Nie zmieniać logiki biznesowej w entry pointach
Before declaring plan complete: - [ ] autoload/autoloader.php istnieje i zawiera spl_autoload_register - [ ] composer.json ma sekcję autoload.psr-4 z 4 namespace'ami - [ ] Żaden entry point nie zawiera zduplikowanej funkcji __autoload_my_classes - [ ] Wszystkie entry pointy mają require_once autoloader.php - [ ] Istniejące testy PHPUnit przechodzą (jeśli są) - All acceptance criteria met

<success_criteria>

  • Centralny autoloader działa dla PSR-4 i legacy class.*.php
  • Wszystkie entry pointy korzystają z jednego autoloadera
  • Zero regresji — istniejący kod działa bez zmian </success_criteria>
After completion, create `.paul/phases/01-infrastructure/01-01-SUMMARY.md`