Files
cmsPRO/docs/PROJECT_STRUCTURE.md
Jacek Pyziak 9ee4116f50 Refaktoryzacja Faza 0+1: PSR-4 autoloader + Shared/Domain klasy
- Dodano PSR-4 autoloader do wszystkich 6 punktów wejścia
- Shared\: CacheHandler, Helpers, Html, ImageManipulator, Tpl
- Domain\: LanguagesRepository, SettingsRepository, UserRepository
- Stare class.*.php → cienkie wrappery (kompatybilność wsteczna)
- Dodano dokumentację: docs/PROJECT_STRUCTURE.md + pozostałe docs/
- Dodano CLAUDE.md z workflow

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 23:43:55 +01:00

4.1 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 dwa autoloadery (PSR-4 + legacy):

spl_autoload_register(function($class) { /* PSR-4: src/ → autoload/ */ });
spl_autoload_register(function($class) { /* legacy: class.{Name}.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

Dodany do wszystkich 6 punktów wejścia. Mapowanie: namespace → autoload/.

Faza 1 ✓ — Shared utilities (autoload/Shared/)

autoload/Shared/
├── Cache/CacheHandler.php       ← \Shared\Cache\CacheHandler
├── Email/                       ← \Shared\Email\*
├── Helpers/Helpers.php          ← \Shared\Helpers\Helpers
├── Html/Html.php                ← \Shared\Html\Html
├── Image/ImageManipulator.php   ← \Shared\Image\ImageManipulator
└── Tpl/Tpl.php                  ← \Shared\Tpl\Tpl

Stare klasy (class.S.php, class.Cache.php, itd.) są teraz cienkimi wrapperami — zachowana pełna kompatybilność wsteczna.

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             ✓

Następne: Domain\Pages, Domain\Layouts, Domain\Articles, ...


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