This commit is contained in:
2026-05-20 13:30:10 +02:00
parent bc5cae7e82
commit 22c886b8f4
20 changed files with 1154 additions and 7 deletions

View File

@@ -0,0 +1,90 @@
# Architecture
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
## Wzorzec
Klasyczne MVC bez frameworka. Wlasne jadro `Core` + `FrontController` + `Router` + `Controller` + warstwa `*DAL` (Data Access Layer) + szablony Smarty.
## Wejscia (entry points)
- `index.php` — strona publiczna. Sekwencja:
1. `include('./core/core.php')`
2. `Core::Init(PageType::STRONA)`
3. `Core::LoadSmarty()`
4. `include('routes.php')` — definicje tras publicznych.
5. `new FrontController() -> Dispatch()`.
- `Admin/index.php` — panel `PageType::ADMIN`, definiuje wlasne `Router::AddRoute(...)` inline (m.in. `Structure/Add`, `Structure/Edit/id/:id`, `customer/gallery/{lang}`).
- Pomocnicze skrypty stand-alone w roocie: `pack.php`, `tar.php`, `zip.php`, `_unpack.php`, `makl.php`, `info.php` — operacje archiwizacji/diagnostyki, nie korzystaja z FrontController.
## Warstwy
### 1. Core (`core/`)
- `core/core.php` — klasa `Core` (init, ladowanie configa, autoloader klas, Smarty boot, garbage) + enum `PageType` (`STRONA`, `Package`, `ADMIN`, `SERVER`).
- `core/ErrorHandler.php` — globalna obsluga bledow.
- `core/class/` — infrastrukturalne klasy: `Config`, `Registry`, `DB`, `SQL`, `DbCache`, `QueryCache`, `Router`, `FrontController`, `Controller`, `MainController`, `ModuleController`, `Request`, `RestRequest`, `Mailer`, `Profiler`, `UserValidator`, `Validator`, `Daemon`, `SessionProxy`, `TemplateMaster`, `Utils`, `UtilsUtf`, `MfCurl`, `MFLog`, `MfMemcache`, `MfXmlParser`, `Xml2Array`, `Enviroment`, `Exception`, `FileGenerator`, `HtmlButton`, `HtmlElement`, `DalData`, `DataObject`, `IDefaultDAL`, `Dictionary`, `DbSqlLite`.
- `core/model/` — entity + DAL pary (np. `MfProduct.class.php` + `MfProductDAL.class.php`). Podkatalog `core/model/SimpleArticle/` na artykuly.
- `core/config/{Strona,Admin,Server,Package}/` — pliki `path.config.php`, `param.config.php`, `db.config.php`, `db.config.ini`; `Admin/` zawiera dodatkowo `panel.config.php`.
- `core/lib/` — wendorowane biblioteki (Smarty, log4php, PHPMailer, WideImage, Zend Search Lucene, SmartyValidate, mImage, MimeType).
- `core/temp/{Strona,Package}/Router.cache` — cache routera.
### 2. Kontrolery publiczne (`controller/`)
- `IndexController`, `SearchController`, `MapsController`, `ProductController`, `ImageController`, `FileController`, `ModuleController`, `SharedController`, `SoapController`, `TranslateController`, `SimpleArticle/IndexController.php`.
### 3. Kontrolery panelu (`Admin/controller/`)
- Pelny CRUD admin: `BoxController`, `CalcController`, `ConfigController`, `DemoController`, `DictionaryController`, `FileController`, `HomeController`, `HomeSiteController`, `ImageController`, `IndexController`, `LoginController`, `MailingController`, `MainSiteController`, `MapsController`, `ProductAttributeController`, `ProductCategoryController`, `ProductController`, `ProductSeriesController`, `ProductSpecController`, `SetupController`, `SharedController`, `SimpleArticle/IndexController.php`, `StructureController`, `UploaderController`, `UserController`, `UtilsController`.
### 4. Moduly (`module/`, `Admin/module/`)
- Publiczne: `module/AuthDAL.mod.php`, `module/CacheParam.mod.php`.
- Admin: `Admin/module/Admin.mod.php`, `Admin/module/AdminDAL.mod.php`, `Admin/module/AuthDAL.mod.php`, `Admin/module/CacheParam.mod.php`, `Admin/module/LightBBCodeParser.mod.php`.
### 5. Szablony (`template/`, `Admin/template/`)
- `template/index.tpl` — szablon glowny strony publicznej.
- `template/partial/` — podzielony na sekcje domeny: `File/`, `Image/`, `Index/`, `Module/`, `Product/`, `Search/`, `Shared/`, `SimpleArticle/Index/`, `Translate/`.
- `template/index.tpl.bak`, `template/index_good.tpl`, `template/clean.tpl`, `template/szablon.html` — dodatkowe pliki (kandydat do uporzadkowania).
- Admin: `Admin/template/partial/` z folderami `Structure/`, `Product/`, `SimpleArticle/Index/` itd. (do potwierdzenia po `$paul-map-codebase` z agentami).
## Routing
- Statyczna rejestracja w `routes.php` (publiczne) oraz inline w `Admin/index.php` (admin).
- `Router::$parseLang = true` na stronie publicznej — obsluga sufiksu jezykowego.
- `Router::$reverseRoute = true` w obu trybach.
- Dispatching: `FrontController::Dispatch()` -> kontroler -> metoda -> Smarty render.
## Rejestr i konfiguracja
- `Registry::Set/Get` (`core/class/Registry.class.php`) — globalny kontener stanu (db, smarty, javascript, title).
- `Config::Get/Set` (`core/class/Config.class.php`) — wartosci z plikow PHP/INI.
- `SetupDAL::GetAllVariables()` — dynamiczna konfiguracja z bazy, wczytywana w `Core::PageConfig()` (`core/core.php:73`).
## Sesja / lokalizacja
- `SessionProxy` (`core/class/SessionProxy.class.php`) — abstrakcja sesji PHP.
- `setlocale(LC_TIME, 'pl_PL', ...)` ustawiana w `Core::PageConfig()` (`core/core.php:97`).
## Bezpieczny tryb aplikacji
- Flaga `Core::$appSafeMode` (`core/core.php:21`, `Core::SetAppSafeMode()`) — aktywowana, gdy `SetupDAL::GetAllVariables()` rzuca `MysqlException`.
## Statyczne zasoby
- `Static/` — uploady (`Static/upload/Article/...`), miniatury (`Static/thumbs/`).
- `Server/` — zasoby serwerowe (do zweryfikowania).
## Diagram glownych zaleznosci (uproszczony)
```
HTTP request
-> index.php / Admin/index.php
-> Core::Init() + LoadSmarty()
-> Router (routes.php / inline)
-> FrontController::Dispatch()
-> *Controller (controller/ lub Admin/controller/)
-> Model entity + *DAL (core/model/)
-> Smarty render (template/*.tpl)
```

View File

@@ -0,0 +1,63 @@
# Conventions
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
## Nazewnictwo plikow
- Klasy infrastrukturalne: `core/class/<Nazwa>.class.php` (PascalCase + sufiks `.class.php`).
- Modele: `core/model/<Nazwa>.class.php` (encja) + `core/model/<Nazwa>DAL.class.php` (DAL).
- Modele domenowe oznaczane prefiksem `Mf` (np. `MfProduct`, `MfHomeSite`, `MfArticle`) lub `Fk` (np. `FkMaps`, `FkCurrency`, `FkGlossary`) — historyczne konwencje dwoch obszarow.
- Moduly: `<Nazwa>.mod.php` w `module/` lub `Admin/module/`.
- Kontrolery: `<Domena>Controller.php` w `controller/` lub `Admin/controller/`.
- Szablony Smarty: `template/partial/<Domena>/<Akcja>.tpl`.
## Konwencje PHP
- `<?php` na poczatku, czesto `?>` na koncu (styl starszego PHP).
- `setlocale` i `ini_set('default_charset', ...)` w `index.php` / `Admin/index.php`.
- Statyczne klasy infrastruktury: `Core::Init`, `Config::Get`, `Registry::Set`, `Router::AddRoute`, `MFLog::Warn`, `SessionProxy::GetValue`.
- Autoloader oparty o `Core::LoadClass` (`core/core.php:173`) — przeszukuje katalogi `class/`, `module/`, `model/`, `lib/` oraz dekomponuje `_` -> `/`.
## Komentarze
- Komentarze i docblocki sa po polsku (np. `/** Klasa jadra aplikacji */` w `core/core.php`).
- Czesto wystepuja zakomentowane bloki kodu i pseudo-TODO bez tagu.
## Routing
- Trasy rejestrowane statycznie: `Router::AddRoute(<nazwa>, <wzorzec>, <opcje>)`.
- Trasy publiczne w `routes.php`.
- Trasy admina inline w `Admin/index.php` (mieszane z bootstrappem).
## Warstwa danych
- Encja + DAL: encja przechowuje pola, DAL realizuje zapytania.
- Dostep do bazy przez `Registry::Get('db')` (`DBProd`) lub `Registry::Get('dbTemp')` (`DBTemp`).
- Cache zapytan w `QueryCache` / `DbCache`; kopia tabel cache w `QueryCacheTemp`.
## Smarty
- Glowny szablon: `template/index.tpl` (przypisywany w `Core::$template`).
- Partial templates w `template/partial/<Domena>/`.
- Skompilowane wersje w `core/temp/` i `Admin/temp/compile/` (cache w `Admin/temp/cache/`).
## Konfiguracja
- Pliki `path.config.php`, `param.config.php`, `db.config.php`, opcjonalnie `panel.config.php` (Admin) w `core/config/<Site>/`.
- Wartosci runtime nadpisywane przez `SetupDAL::GetAllVariables()` (tabela `setup`).
## Kontrola wersji / artefakty
- Pliki backupowe (`.bak`, `.php_`, `.php.bak`) zostawiane w repo:
- `core/class/MainController.class.php.bak`
- `core/class/Router.class.php.bak`
- `Admin/controller/StructureController.php_`
- `template/index.tpl.bak`
- `template/index_good.tpl`
- `core/config/Log4PHPConfig*.delete`, `core/config/Log4PHPConfig.xml.test`
- Rownolegle warianty katalogow: `Admin/plugins/ckeditor/` i `Admin/plugins/ckeditor_/`, `Admin/controller/SimpleArticle/` i `Admin/controller/SimpleArticle_/`.
## Jezyk dokumentow PAUL
- Markdown w `.paul/` pisany po polsku (zgodnie z `<language_policy>`).
- Identyfikatory kodu, sciezki, klucze konfiguracji i komendy pozostaja bez tlumaczenia.

View File

@@ -0,0 +1,93 @@
# DB Schema
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
**Status:** schemat wnioskowany z plikow `core/model/*` — brak migracji / DDL w repo. Tabele faktyczne wymagaja weryfikacji w bazie MySQL `01244953_zurawik`.
## Charakter
- Brak katalogu migracji ani plikow SQL/DDL w repozytorium.
- Encje + DAL w `core/model/` odwzorowuja struktury tabel 1:1 (DAL operuje na `DBProd`/`DBTemp` przez `core/class/DB.class.php`).
## Domeny i kandydaci tabel
### Administracja i autoryzacja
- `MfAdmin` / `MfAdminDAL`
- `MfAdminAccess` / `MfAdminAccessDAL`
- `MfAdminGroup` / `MfAdminGroupDAL`
- `MfAdminToGroup` / `MfAdminToGroupDAL`
- `MfAdminGroupToAccess` / `MfAdminGroupToAccessDAL`
- Modul: `Admin/module/AuthDAL.mod.php`, `module/AuthDAL.mod.php`.
### Struktura strony / menu
- `Structure` / `StructureDAL`
- `MfLink` / `MfLinkDAL` + `MfLinkDescription` / `MfLinkDescriptionDAL`
- `MfRouter` / `MfRouterDAL`
- `LinkLangDAL` (lokalizacja linkow).
### Tresci
- `SimpleArticle/MfArticle` + `MfArticleDescription` + `MfArticleCategory` + `MfArticleCategoryDescription` (komplet DAL).
- `MfArticleBox` / `MfArticleBoxDAL`.
- `News` / `NewsDAL`.
### Produkty
- `MfProduct`, `MfProductDescription`, `MfProductMain`, `MfProductLink`.
- Kategorie: `MfProductCategory` + `MfProductCategoryDescription`.
- Atrybuty: `MfProductAttribute` + `MfProductAttributeDescription` + `MfProductAttributeValue` + `MfProductAttributeCategory` + `MfProductAttributeCategoryDescription`.
- Specyfikacja: `MfProductSpecification` / `MfProductSpecificationDAL`.
- Serie: `ShopSeries` / `ShopSeriesDAL`.
- Powiazane: `Products` (kolekcja) / `ProductsDAL`.
### Strona glowna / banery
- `MfHomeSite` + `MfHomeSiteBaner` + `MfHomeSiteProduct` (komplet DAL).
### Pliki i obrazy
- `MfFile` + `MfFileDescription`.
- `Image` / `ImageDAL`, `ImageGroup` / `ImageGroupDAL`, `Picture` / `PictureDAL`, `PhotoDAL`.
### Konfiguracja
- `MfParameters` / `MfParametersDAL`.
- `MfDictionary` / `MfDictionaryDAL`.
- `SetupDAL` — tabela `setup` (`SetupDAL::GetAllVariables()` w `core/core.php:77`).
- `MfMetaTag` + `MfMetaTagDescription` (meta tagi SEO).
- `MfModule` / `MfModuleDAL`.
### Mapy / waluty / slownik
- `FkMaps` / `FkMapsDAL`, `FkMapsCategory` / `FkMapsCategoryDAL`.
- `FkCurrency` / `FkCurrencyDAL`.
- `FkGlossary` / `FkGlossaryDAL`.
### Mailing / uczestnicy
- `Mailing` / `MailingDAL`.
- `MfParticipant` / `MfParticipantDAL`.
### Cache
- `QueryCacheTemp` / brak DAL (tabela techniczna).
### Pozostale
- `Site` / `SiteDAL` — definicje stron/instancji.
## Polaczenia bazodanowe
Konfiguracja (uwaga: zawiera dane wrazliwe — patrz `quality_risks.md`):
- `core/config/Strona/db.config.php`
- `core/config/Admin/db.config.php`
- `core/config/Server/` (ini), `core/config/Package/` (ini).
## Brakuje w repo
- Plikow `.sql` z DDL/migracjami.
- Schematu indeksow i kluczy obcych — nieudokumentowane.
- Zrzutu (`dump.sql`).
Rekomendacja przed wieksza zmiana modelu: wykonac `mysqldump` ze srodowiska produkcyjnego i utworzyc `.paul/codebase/db_schema_actual.sql` (manualnie) jako referencje.

View File

@@ -0,0 +1,115 @@
# Impact Map
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`, mode: full)
**Quality Radar status:** codebase-memory-mcp ok (indeks: 21402 wezlow, 52193 krawedzi).
## Glowne domeny i strefy zmian
### Bootstrap / jadro
- `index.php`, `Admin/index.php`
- `core/core.php` (`Core::Init`, `Core::LoadConfig`, `Core::LoadSmarty`, `Core::LoadClass`)
- `core/ErrorHandler.php`
- `core/class/Config.class.php`, `core/class/Registry.class.php`, `core/class/Router.class.php`, `core/class/FrontController.class.php`, `core/class/Controller.class.php`, `core/class/MainController.class.php`, `core/class/Request.class.php`
### Routing
- `routes.php` (strona publiczna)
- `Admin/index.php` (trasy admina inline — kandydat do wyciagniecia do `Admin/routes.php`)
- `core/temp/Strona/Router.cache`, `core/temp/Package/Router.cache`
### Tresci (SimpleArticle / News / Boxy)
- Kontrolery: `controller/SimpleArticle/IndexController.php`, `Admin/controller/SimpleArticle/IndexController.php`, `Admin/controller/SimpleArticle_/IndexController.php`.
- Modele: `core/model/SimpleArticle/MfArticle*`, `core/model/News*`, `core/model/MfArticleBox*`.
- Szablony: `template/partial/SimpleArticle/Index/*`, `template/partial/Shared/News.tpl`.
### Produkty / katalog
- Kontrolery: `controller/ProductController.php`, `Admin/controller/Product*Controller.php` (Product, ProductCategory, ProductAttribute, ProductSeries, ProductSpec).
- Modele: `core/model/MfProduct*`, `core/model/ShopSeries*`, `core/model/Products*`.
- Szablony: `template/partial/Product/*`.
### Struktura / menu
- Kontrolery: `Admin/controller/StructureController.php` (+ wariant `.php_`).
- Modele: `core/model/Structure*`, `core/model/MfLink*`, `core/model/MfRouter*`, `core/model/LinkLangDAL.class.php`.
- Szablony: `Admin/template/partial/Structure/*` (do potwierdzenia).
- Routy admina: `addStructure`, `editStructure`, `copyStructure`, `customerEdit{pl,en,ru,de}` w `Admin/index.php:30-36`.
### Strona glowna
- `Admin/controller/HomeController.php`, `Admin/controller/HomeSiteController.php`, `Admin/controller/MainSiteController.php`.
- Modele: `core/model/MfHomeSite*`.
### Wyszukiwarka
- `controller/SearchController.php`
- Biblioteka: `core/lib/Zend/Search/Lucene.php`.
- Routy: `searchpl`, `searchen`, `searchde` w `routes.php:13-15`.
- Szablon: `template/partial/Search/Index.tpl`.
### Pliki / obrazy / uploady
- Kontrolery: `controller/FileController.php`, `controller/ImageController.php`, `Admin/controller/FileController.php`, `Admin/controller/ImageController.php`, `Admin/controller/UploaderController.php`.
- Modele: `core/model/MfFile*`, `core/model/Image*`, `core/model/Picture*`, `core/model/Photo*`.
- Storage: `Static/upload/Article/*`, `Static/thumbs/*`.
- Lib: `core/lib/WideImage/`, `core/lib/mImage.class.php`.
### Mapy / strona mapy serwisu
- `controller/MapsController.php`, `controller/IndexController::Maps` (`routes.php:11-12`).
- Modele: `core/model/FkMaps*`.
- Szablony: `template/partial/Index/Maps.tpl`, `template/partial/Module/Maps.tpl`, `template/partial/Module/AjaxMapsList.tpl`.
### Formularz kontaktowy / newsletter / captcha
- `controller/IndexController.php` (`Newsletter`, `Forum`, `Captcha`, `AjaxRegisterCaptchaCheck`, `AjaxForm`).
- `controller/SimpleArticle/IndexController.php::FormSent` (`routes.php:3`).
- Szablony: `template/partial/Index/AjaxForm.tpl`, `template/partial/Index/Captcha.tpl`, `template/partial/Index/IndexSent.tpl`.
### Tlumaczenia JS
- `controller/TranslateController.php` -> `template/partial/Translate/Js.tpl`.
### Autoryzacja / uzytkownicy
- `Admin/controller/LoginController.php`, `Admin/controller/UserController.php`.
- Moduly: `module/AuthDAL.mod.php`, `Admin/module/AuthDAL.mod.php`, `Admin/module/Admin.mod.php`, `Admin/module/AdminDAL.mod.php`.
- Sesja: `core/class/SessionProxy.class.php`, `session_start()` w `Admin/index.php:24`.
### Konfiguracja runtime
- `core/config/{Strona,Admin,Server,Package}/*.config.php`.
- Konfiguracja w bazie: `SetupDAL::GetAllVariables()` (`core/core.php:77`) -> tabela `setup`.
- Kontroler admin: `Admin/controller/SetupController.php`, `Admin/controller/ConfigController.php`.
### Logowanie / monitoring
- `core/class/MFLog.class.php`, `core/lib/log4php/`.
- Konfiguracja: `core/config/Log4PHPConfig*.xml`.
- Plik `error_log` w roocie.
### Skrypty pomocnicze / archiwizacja
- `pack.php`, `pack/`, `tar.php`, `zip.php`, `_unpack.php`, `makl.php`, `info.php` — standalone, omijaja FrontController.
## Ukryte sprzezenia (hidden coupling)
- `Core::LoadClass()` (`core/core.php:173`) inteligentnie zgaduje sciezki na podstawie wielkich liter i `_` — przemianowanie klasy moze rozsynchronizowac autoloader, zwlaszcza dla modeli w `core/model/<domena>/` (np. `SimpleArticle`).
- `Registry::Set('db' | 'dbTemp' | 'smarty' | 'javascript' | 'title')` — globalny stan, kontrolery zalozono ze odczyta je z rejestru.
- `Router::$parseLang` ustawiana w `index.php:35` (true) vs `Admin/index.php:46` (false) — bledne zalozenie moze rozbic linki jezykowe.
- Tabela `setup` (przez `SetupDAL`) modyfikuje zachowanie w runtime; awaria bazy -> `Core::SetAppSafeMode()` cicho zmienia tryb.
- `Admin/index.php` rejestruje tasy `customerEdit{pl,en,ru,de}` z twardo zakodowanymi `id` (18/52/30/40) — zmiana strukturow w bazie wymaga aktualizacji kodu.
## Obszary do reczne weryfikacji (UAT)
- Glowne wejscia: `/`, `/index`, `/mapa_serwisu`, `/site_map`, `/wyszukaj`, `/search`, `/newsletter`, `/forum`, `/captcha`, `/translate/js`, `/ajaxForm`, `/formContactSent`.
- Admin: `/Admin/`, `/Admin/Structure/Add`, `/Admin/Structure/Edit/id/<id>`, `/Admin/Structure/Copy/id/<id>`, `/Admin/customer/gallery/{pl,en,ru,de}`.
- Logowanie admin (LoginController) i sesja po `session_start`.
## Konfiguracja, ktora niesie ryzyko zmian
- `core/config/Strona/db.config.php`, `core/config/Admin/db.config.php` (poswiadczenia DB).
- `core/config/<Site>/path.config.php` — zmiana sciezek lamie autoloader.
- `.htaccess` (root, `Admin/`, `core/`, `template/`).

View File

@@ -0,0 +1,69 @@
# Integrations
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
## Baza danych
- MySQL (host `mysql8` zgodnie z `core/config/Strona/db.config.php`).
- Sterownik wlasny: `core/class/DB.class.php` + `core/class/SQL.class.php`.
- Dwa polaczenia per request: `DBProd` (glowne) i `DBTemp` (cache/utility) tworzone w `Core::Init()` (`core/core.php:43`).
- Konfiguracja per srodowisko w `core/config/{Strona,Admin,Server,Package}/db.config.{php,ini}`.
## Email
- PHPMailer (`core/lib/phpmailer/`).
- Wlasny `Mailer` (`core/class/Mailer.class.php`).
- Mailing aplikacyjny: encje `Mailing`, `MailingDAL` (`core/model/`), kontroler `Admin/controller/MailingController.php`.
## Wyszukiwanie
- Zend Search Lucene (`core/lib/Zend/Search/Lucene.php`).
- Kontroler `controller/SearchController.php` + szablon `template/partial/Search/Index.tpl`.
## Captcha
- Plik `captcha.png` w roocie, kontroler `IndexController::Captcha` (`routes.php:6`).
## SOAP
- `controller/SoapController.php` — endpoint SOAP (do potwierdzenia w skryptach).
## Translacje JS
- `controller/TranslateController.php` z routem `translate/js` (`routes.php:10`) + szablon `template/partial/Translate/Js.tpl`.
## Edytor WYSIWYG
- CKEditor — `Admin/plugins/ckeditor/` (aktywny) i historyczny `Admin/plugins/ckeditor_/`.
- Pluginy fileman z PHP backendem: `Admin/plugins/ckeditor/plugins/fileman/php/*.php`.
## Obrazy
- WideImage (`core/lib/WideImage/`) — transformacje, miniatury (`Static/thumbs/`).
- `core/lib/mImage.class.php` + `core/lib/MimeType.class.php`.
- Kontrolery: `controller/ImageController.php`, `Admin/controller/ImageController.php`.
## Cache
- Memcache (`core/class/MfMemcache.class.php`) — opcjonalny.
- QueryCache w pamieci + tabela `QueryCacheTemp` (`core/model/QueryCacheTemp.class.php`).
- DbCache (`core/class/DbCache.class.php`).
- Smarty cache: `core/temp/<Site>/`, `Admin/temp/cache/`.
## Logowanie
- log4php (`core/lib/log4php/src/`) z konfiguracja XML w `core/config/`.
- Pliki konfiguracyjne: `Log4PHPConfig.xml`, `Log4PHPConfig-admin.xml`, `Log4PHPConfig-strona.xml` (oraz warianty `.delete`/`.test`).
## Captcha/sessions
- `SessionProxy` (`core/class/SessionProxy.class.php`).
- `session_start()` w `Admin/index.php:24`.
## SFTP/FTP deploy
- `.vscode/ftp-kr.json`, `.vscode/sftp.json` — konfiguracja narzedzi VS Code do wgrywania na hosting.
## Zewnetrzne API
- `core/class/MfCurl.class.php`, `core/class/RestRequest.class.php` — klient HTTP. Konkretne integracje wymagaja recznej weryfikacji w `controller/` i `Admin/controller/`.

View File

@@ -0,0 +1,59 @@
# Quality Risks
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`, mode: full)
**Quality Radar tools:** codebase-memory-mcp ok; `jscpd` i `ast-grep` disabled by policy (`.paul/config.md`) — bez skanu duplikatow ani skanu strukturalnego.
## Krytyczne ryzyka bezpieczenstwa
- **Poswiadczenia bazy danych w repo (PLAINTEXT):** `core/config/Strona/db.config.php` zawiera `prodPass` jako stala PHP (`define('prodPass', 'Df61Xz21')`). Analogicznie inne pliki `core/config/<Site>/db.config.php`. Po naprawie 2026-05-20 `core/config/Admin/db.config.php` zawiera te same poswiadczenia co `Strona`. Rekomendacja: przeniesc do zmiennych srodowiskowych / pliku poza repo i zrotowac haslo, bo jest publicznie widoczne w historii git.
- **Plik `info.php` w roocie aplikacji:** typowo zawiera `phpinfo()` — ujawnia konfiguracje srodowiska. Rekomendacja: usunac lub ograniczyc dostepem (`.htaccess`/`.htpasswd`).
- **`.htpasswd` w katalogu glownym aplikacji:** powinien byc poza document root lub przynajmniej chroniony przez `.htaccess` (sprawdzic, ze nie jest serwowany).
- **Standalone skrypty archiwizacyjne (`pack.php`, `tar.php`, `zip.php`, `_unpack.php`, `makl.php`):** dostepne przez HTTP, omijaja FrontController. Wymagaja audytu autoryzacji i sciezek (path traversal).
- **CKEditor fileman PHP backend:** `Admin/plugins/ckeditor/plugins/fileman/php/*.php` — wewnetrzny upload/move/delete dirs. Sprawdzic, ze jest chroniony przez sesje admina.
## Duplikaty i rownolegle warianty (kandydaci na konsolidacje)
Wykryto bez `jscpd`, na podstawie nazw / struktury:
- `core/lib/Smarty/` vs `core/lib/_Smarty/` vs `core/lib/Smarty3/` — trzy rownolegle kopie Smarty. Aktywnie ladowany Smarty3 (`core/core.php:121`); pozostale to dead code.
- W obrebie kazdej kopii rownolegla wersja plikow z sufiksem `_1` (np. `core/lib/Smarty/Smarty.class.php` i `core/lib/Smarty/Smarty.class_1.php`, plus identycznie w `core/lib/Smarty/internals/`).
- `Admin/plugins/ckeditor/` vs `Admin/plugins/ckeditor_/` — dwie pelne instalacje CKEditor.
- `Admin/controller/SimpleArticle/IndexController.php` vs `Admin/controller/SimpleArticle_/IndexController.php` — duplikat kontrolera.
- `Admin/controller/StructureController.php` vs `Admin/controller/StructureController.php_` — backup w repo.
- `core/class/MainController.class.php.bak`, `core/class/Router.class.php.bak` — backupy klas core.
- `template/index.tpl` vs `template/index.tpl.bak` vs `template/index_good.tpl` — trzy warianty glownego szablonu; trudno powiedziec, ktory jest kanoniczny.
- `core/config/Log4PHPConfig.xml`, `Log4PHPConfig.xml.test`, `Log4PHPConfig-admin.xml`, `Log4PHPConfig-admin.xml.delete`, `Log4PHPConfig-strona.xml`, `Log4PHPConfig-strona.xml.delete` — chaos plikow konfiguracji loggera.
## Hardkodowane wartosci
- `Admin/index.php:33-36` — twardo zakodowane `id` struktur galerii klienta dla jezykow (18/52/30/40). Zmiana w bazie wymaga edycji kodu.
- `core/core.php:97``setlocale(LC_TIME, 'pl_PL', 'pl', 'Polish_Poland.28592')` zakodowane na sztywno.
- `core/core.php:133``cache_lifetime = 60` na sztywno.
- `routes.php` — adresy URL w wielu wariantach jezykowych zakodowane statycznie (np. `mapa_serwisu`, `site_map`, `wyszukaj`, `search`).
- `core/config/Strona/db.config.php:13` — host bazy `mysql8` zakodowany.
## Spojnosc i konwencje
- Mieszanie prefiksow modeli `Mf*` i `Fk*` bez jednoznacznej polityki domenowej.
- Routes admin sa wewnatrz `Admin/index.php` (mieszane z bootstrap), public sa w `routes.php` — niespojnosc.
- W kodzie wystepuja zakomentowane sekcje (`//$logger = LoggerManager::...`, `//$captchaStatus = true;`) — pozostalosci po starszych iteracjach.
## Mozliwe podejrzane konstrukcje
- `Core::LoadClass()` (`core/core.php:173`) uzywa `preg_match_all` na nazwie klasy i konstruuje sciezki z `_` -> `/`. Wyjatki w nazewnictwie moga prowadzic do nieskonczonych falli-przez (`include` nie istniejacych plikow w try/else).
- `SelfUrl()` (`core/core.php:305-310`) zawiera nietrywialne warunki dotyczace HTTPS i portu — pasie na refactor / wykorzystanie wbudowanej funkcji.
## Spojnosc backend/frontend
- Brak jednoznacznego API contract — kontrolery zwracaja HTML przez Smarty + `AjaxForm`/`AjaxMapsList`/`AjaxRegisterCaptchaCheck` zwracaja prawdopodobnie JSON/HTML czesciowy. Wymaga inwentaryzacji przy zmianach formularzy.
## Akceptowane / odlozone
- Brak menedzera zaleznosci (`composer`) — projekt historyczny, modernizacja poza zakresem zwyklych zadan.
- Brak testow automatycznych — patrz `testing.md`.
## Co odblokuje glebsza analiza
- Wlaczenie `jscpd` w `.paul/config.md` (`quality_radar.tools.jscpd: true`) dla potwierdzenia duplikatow kodu po liniach.
- Wlaczenie `ast-grep` dla wykrycia podejrzanych konstrukcji (np. SQL inline, `eval`, `extract`, `mysql_*` legacy).
- Zrzut DDL bazy (`mysqldump --no-data`) jako referencja schematu.

52
.paul/codebase/stack.md Normal file
View File

@@ -0,0 +1,52 @@
# Stack
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
## Jezyk i runtime
- PHP (klasyczny, bez frameworka MVC z zewnatrz; brak `composer.json`).
- HTML/Smarty3 jako warstwa szablonow (`.tpl`).
- Brak `package.json`, brak narzedzi build/node po stronie aplikacji (frontend dostarczany jako statyczne pliki i pluginy).
## Frameworki / biblioteki wbudowane
- Smarty (`core/lib/Smarty/`, `core/lib/Smarty3/`, `core/lib/_Smarty/`) — szablonyowanie. Aktualnie ladowany Smarty3 (`core/lib/Smarty3/Smarty.class.php`) w `core/core.php:121`.
- SmartyValidate (`core/lib/SmartyValidate/libs/SmartyValidate.class.php`).
- log4php (`core/lib/log4php/src/`) — logowanie, konfigurowane przez `core/config/Log4PHPConfig*.xml`.
- PHPMailer (`core/lib/phpmailer/`).
- WideImage (`core/lib/WideImage/`) — przetwarzanie grafiki.
- Zend Search Lucene (`core/lib/Zend/Search/Lucene.php`) — wyszukiwanie.
- CKEditor (`Admin/plugins/ckeditor/`, dawna kopia `Admin/plugins/ckeditor_/`).
## Brak menedzera zaleznosci
- Wszystkie biblioteki sa wendorowane bezposrednio w `core/lib/` i `Admin/plugins/`.
- Aktualizacja wymaga recznego nadpisania katalogow.
## Autoloader
- `spl_autoload_register` w `index.php:16` i `Admin/index.php:16` przekierowuje na `Core::LoadClass()` w `core/core.php:173`.
- Konwencja nazw: klasy w `core/class/`, modele w `core/model/`, modul `*.mod.php` w `module/` lub `Admin/module/`.
## Wejscia HTTP
- `index.php` — strona publiczna (`PageType::STRONA`).
- `Admin/index.php` — panel administracyjny (`PageType::ADMIN`).
- Pomocnicze skrypty CLI/archiwizacji w katalogu glownym: `pack.php`, `tar.php`, `zip.php`, `_unpack.php`, `makl.php`, `info.php`.
## Baza danych
- MySQL (8) — sterownik wlasny `core/class/DB.class.php` + `core/class/SQL.class.php`.
- Polaczenia `DBProd` i `DBTemp` tworzone w `Core::Init()` (`core/core.php:43`).
- Konfiguracja per srodowisko: `core/config/Strona/`, `core/config/Admin/`, `core/config/Server/`, `core/config/Package/`.
## Cache
- `QueryCache` (`core/class/QueryCache.class.php`), `DbCache` (`core/class/DbCache.class.php`), `MfMemcache` (`core/class/MfMemcache.class.php`).
- Cache Smarty: `core/temp/`, `Admin/temp/compile/`, `Admin/temp/cache/`.
## Hosting / konfiguracja serwera
- `.htaccess` w katalogu glownym, `Admin/`, `core/`, `template/`, pluginach (Apache + mod_rewrite).
- `.htpasswd` w katalogu glownym (kontrola dostepu na poziomie serwera).
- `.vscode/ftp-kr.json`, `.vscode/sftp.json` — deployment przez SFTP/FTP z poziomu VS Code.

35
.paul/codebase/testing.md Normal file
View File

@@ -0,0 +1,35 @@
# Testing
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`)
## Status
**Brak wlasnych testow aplikacyjnych.**
- Brak frameworka testowego (`phpunit`, `pest`, `codeception`).
- Brak `composer.json`, brak skryptu testowego.
- Brak katalogu `tests/` na poziomie aplikacji.
- Jedyne pliki testowe nalezace do wendorowanych bibliotek (poza zakresem aplikacji): `core/lib/log4php/src/tests/*` (testy biblioteki log4php).
## Implikacje dla planowania
- Kazda zmiana powinna byc planowana z naciskiem na rownolegle UAT/manual (zob. `$paul-verify`).
- Brak siatki bezpieczenstwa = wysoka odpowiedzialnosc audytu (`$paul-audit`) i precyzyjnego planu (`$paul-plan`).
- Przy nowych funkcjach rozwaz dodanie minimalnego harness'a (smoke test PHP/CURL) zanim wprowadzisz zmiany w `core/`, `module/`, lub `controller/`.
## Komendy build/lint/test
- Brak — projekt nie ma `package.json` ani `composer.json`.
- Deploy: konfiguracja FTP/SFTP w `.vscode/ftp-kr.json`, `.vscode/sftp.json`.
## Logowanie jako substytut
- log4php (`core/lib/log4php/`), konfiguracja: `core/config/Log4PHPConfig*.xml`.
- `MFLog::Warn/Error/Fatal` w `core/class/MFLog.class.php`.
- Pliki `error_log` w roocie — surowy log PHP.
## Reczna weryfikacja
- Tryb publiczny: `index.php` -> `$_SERVER['REQUEST_URI']` + routes.
- Tryb admin: `Admin/index.php` z autoryzacja `Admin/module/AuthDAL.mod.php`.
- Captcha: `IndexController::Captcha` (`routes.php:6`), kontrola: `IndexController::AjaxRegisterCaptchaCheck` (`routes.php:7`).

View File

@@ -0,0 +1,50 @@
# Tooling Status
**Timestamp:** 2026-05-20
**Mode:** full (`$paul-map-codebase`)
## Narzedzia
| Narzedzie | Stan | Komentarz |
|-----------|------|-----------|
| codebase-memory-mcp | ok | Index: project `C-visual-studio-code-projekty-zurawik.pl`, 21402 nodes, 52193 edges, tryb `moderate`. |
| jscpd | disabled by policy | `.paul/config.md` -> `quality_radar.tools.jscpd: false`. Brak skanu duplikatow. |
| ast-grep | disabled by policy | `.paul/config.md` -> `quality_radar.tools.ast_grep: false`. Brak skanu strukturalnego. |
## Komendy wykonane
- `mcp__codebase-memory-mcp__index_repository(repo_path=C:\visual-studio-code\projekty\zurawik.pl, mode=moderate)` -> sukces (status `indexed`).
- `mcp__codebase-memory-mcp__get_architecture(project=C-visual-studio-code-projekty-zurawik.pl, aspects=[all])` -> sukces.
- `git ls-files` -> listing 8449 plikow (znaczna czesc to skompilowane szablony Smarty w `Admin/temp/compile/`, pluginy CKEditor, biblioteki w `core/lib/`).
## Surowe wyniki
- Brak zapisanego pliku `.paul/codebase/radar/codebase-memory-full.txt` (dane zostaly skonsumowane bezposrednio w `impact_map.md` / `quality_risks.md`).
## Project graph summary
- Method: 5860
- Module: 5748
- File: 5747
- Variable: 1627
- Class: 892
- Function: 876
- Folder: 523
- Section: 81
- Route: 40
- Interface: 7
- Project: 1
Top edges: CALLS (20217), DEFINES (15092), DEFINES_METHOD (5860), CONTAINS_FILE (5748), SIMILAR_TO (3386).
## Post-apply scan (2026-05-20)
- Plan: `.paul/plans/20260520-1213-admin-too-many-redirects/PLAN.md`.
- Zmieniony plik: `.htaccess` (root) — dodano `RewriteRule ^Admin/?$ Admin/index.php [L]`.
- Quality Radar tools: codebase-memory-mcp ok, jscpd/ast-grep disabled by policy. Skan ograniczony do zmienionego pliku — bez wplywu na graf kodu PHP (zmiana w warstwie serwera HTTP).
## Nastepne akcje
- `$paul-plan [praca]` — uruchomienie planowania konkretnej zmiany; Quality Radar automatycznie przeskanuje impact.
- Reczne wlaczenie `jscpd` / `ast-grep` w `.paul/config.md`, jezeli chcesz wykryc duplikaty kodu lub strukturalne anty-wzorce.
- Rozwazyc utworzenie ADR (`manage_adr` w codebase-memory-mcp) dla zapisania kluczowych decyzji architektonicznych przed wieksza zmiana.