Files
cmsPRO/docs/PROJECT_STRUCTURE.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

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}']