- 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>
4.6 KiB
Struktura projektu cmsPRO
Punkty wejścia
| Plik | Opis |
|---|---|
index.php |
Router frontendu |
admin/index.php |
Router panelu admina |
ajax.php |
AJAX frontend |
admin/ajax.php |
AJAX admin |
api.php |
Publiczne API |
cron.php |
Zadania cykliczne (newsletter) |
download.php |
Chronione pobieranie plików |
Każdy punkt wejścia ładuje centralny autoloader (hybrydowy PSR-4 + legacy):
require_once __DIR__ . '/autoload/autoloader.php';
Wzorzec architektoniczny — Static Factory (MVCish)
autoload/{admin|front}/
├── controls/class.{Module}.php ← obsługa requestów
├── factory/class.{Module}.php ← logika biznesowa + DB
└── view/class.{Module}.php ← generowanie HTML
Przestrzenie nazw: \admin\controls, \admin\factory, \admin\view,
\front\controls, \front\factory, \front\view
Refaktoryzacja DDD — stan aktualny
Projekt migruje stopniowo do architektury DDD. Stare klasy stają się
cienkimi wrapperami delegującymi do nowych klas w Shared\ i Domain\.
Faza 0 ✓ — Autoloader PSR-4
Centralny autoloader w autoload/autoloader.php (hybrydowy: PSR-4 + legacy class.*.php).
Wszystkie 7 punktów wejścia używają jednego pliku. composer.json z PSR-4 mapowaniem:
Domain, Shared, Admin, Frontend\ → autoload/.
Faza 1 ✓ — Shared utilities (autoload/Shared/)
autoload/Shared/
├── Cache/CacheHandler.php ← \Shared\Cache\CacheHandler
├── Email/Email.php ← \Shared\Email\Email
├── Helpers/Helpers.php ← \Shared\Helpers\Helpers
├── Html/Html.php ← \Shared\Html\Html
├── Image/ImageManipulator.php ← \Shared\Image\ImageManipulator
├── Security/CsrfToken.php ← \Shared\Security\CsrfToken
└── Tpl/Tpl.php ← \Shared\Tpl\Tpl
Stare klasy (class.S.php, class.Cache.php, itd.) są teraz cienkimi
wrapperami — zachowana pełna kompatybilność wsteczna.
Helpers::send_email() → Email, Helpers::get_token()/is_token_valid() → CsrfToken.
Faza 2 (w toku) - Domain Repositories (autoload/Domain/)
autoload/Domain/
├── Languages/LanguagesRepository.php ← \Domain\Languages\LanguagesRepository ✓
├── Settings/SettingsRepository.php ← \Domain\Settings\SettingsRepository ✓
├── User/UserRepository.php ← \Domain\User\UserRepository ✓
├── Pages/PagesRepository.php ← \Domain\Pages\PagesRepository ✓
├── Layouts/LayoutsRepository.php ← \Domain\Layouts\LayoutsRepository ✓
└── Articles/ArticlesRepository.php ← \Domain\Articles\ArticlesRepository ✓
Następne: Domain\Scontainers, Domain\Banners, Domain\Authors, Domain\Newsletter, ...
Katalogi
| Katalog | Zawartość |
|---|---|
autoload/ |
Klasy PHP (modele, kontrolery, fabryki, widoki, Shared, Domain) |
admin/templates/ |
Szablony panelu admina (17 modułów) |
templates/ |
Szablony frontendu (systemowe, tylko do odczytu) |
templates_user/ |
Szablony frontendu (nadpisywalne przez użytkownika) |
layout/ |
SCSS → CSS (style.scss → style.css) |
upload/ |
Pliki użytkownika (article_images/, article_files/, filemanager/) |
libraries/ |
Zewnętrzne biblioteki (Medoo, CKEditor, Bootstrap, jQuery…) |
plugins/ |
Hooki (special-actions.php, -middle.php, -end.php) |
migrations/ |
Pliki SQL per wersja (np. 0.304.sql) |
updates/ |
Paczki ZIP aktualizacji |
temp/ |
Cache plikowy (gzip, 24h, generowany automatycznie) |
docs/ |
Dokumentacja techniczna |
Kluczowe klasy
| Klasa | Opis |
|---|---|
\Shared\Helpers\Helpers (class.S.php) |
Megautylita: sesja, cookie, email, SEO, detekcja botów |
\Shared\Tpl\Tpl (class.Tpl.php) |
Silnik szablonów |
\Shared\Cache\CacheHandler (class.Cache.php) |
Cache plikowy |
\Shared\Html\Html (class.Html.php) |
Builder komponentów formularzy |
\Shared\Image\ImageManipulator (class.Image.php) |
Manipulacja obrazami + WebP |
class.Article.php |
Model artykułu (ArrayAccess, lazy multilang) |
Baza danych
Prefiks tabel: pp_. ORM: Medoo (globalny $mdb). Konfiguracja: config.php.
Główne tabele: pp_users, pp_articles, pp_articles_langs, pp_pages,
pp_pages_langs, pp_languages, pp_settings, pp_newsletter,
pp_newsletter_users, pp_tags, pp_banners, pp_layouts, pp_backups.
System wielojęzyczny
- Sesja:
$_SESSION['current-lang'] - Tabela:
pp_languages - Składnia w treści:
[LANG:klucz] - Cache tłumaczeń:
$_SESSION['lang-{lang_id}']