# 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//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.