Files
kopalnia_2026/docs/LEGACY.md
T
2026-09-03 12:21:17 +02:00

135 lines
7.5 KiB
Markdown

# Legacy SoftSPM - źródło migracji
**Katalog źródłowy: `C:\Programy\xampp_old\htdocs\trzeciCloude_v1\`**
To jest jedyne źródło, do którego się odwołujemy przy przepisywaniu na Laravela.
W `htdocs/` leży kilka równoległych kopii tej samej aplikacji (`newPGE`,
`trzeciTestowy`, `pierwszyPodstawowy`, `wellsctrl*`) - **ignorujemy je**.
`trzeciCloude_v1` jako jedyna ma repozytorium git (`Initial commit`) oraz własną
dokumentację.
## Nie powielamy istniejącej dokumentacji
W legacy leżą dwa opracowania - **czytać je zamiast wyprowadzać wnioski od nowa**:
| Plik | Co zawiera |
|---|---|
| `trzeciCloude_v1/CLAUDE.md` (181 linii, EN) | architektura, konwencje nazewnicze bazy, routing shardów historii, martwy kod |
| `trzeciCloude_v1/AUDYT.md` (125 linii, PL) | audyt techniczny 2026-06-09 + plan P0/P1/P2 (SQLi, LFI, MD5, SSO, sekrety) |
Schemat baz: `trzeciCloude_v1/db_structure/*.sql` - **zrzuty struktury bez danych**
dla wszystkich trzech baz. Grepować je zamiast zgadywać kolumny.
## Skala (zmierzone 2026-09-03)
| | |
|---|---|
| plików PHP | 983 (1933 pliki łącznie) |
| fragmentów stron `sites/*.php` | 198, w 50 numerach `siteNNN` |
| raportów `reports/*.php` | 73 |
| eksportów `export/*.php` | 45 |
| `func.php` | **4156 linii, 111 funkcji** |
| `index.php` (front controller + menu + auth) | 435 linii |
| `ajax_func.php` / `ajax_getdata4well.php` | 315 / 208 linii |
> Rozbieżność: `CLAUDE.md` legacy podaje „func.php ~3400 linii, ~140 funkcji",
> `AUDYT.md` „~4000 linii, ~140 funkcji". Faktycznie **4156 / 111**.
> `CLAUDE.md` twierdzi też „Not a git repository" - dla `trzeciCloude_v1`
> to już nieprawda.
## Architektura w skrócie
- **Front controller**: `index.php`, dispatch po `?pg=siteNNN` → `include sites/siteNNN.php`
(domyślnie `site401`). Menu, bramka auth i połączenie z bazą też są w `index.php`.
- **Warianty stron po sufiksie**: `A`=add, `E`=edit, `inf`=szczegóły, `his`/`ahis`/`mhis`/`offhis`=historie,
`charts`, `det`/`pdet`=detale, `mark`=widok mapowy. Przykłady:
`site301` ma 18 wariantów, `site401` ma 19.
- **Uprawnienia per strona**: `sys_user_profiles → sys_profile_site → sys_site_access`
spłaszczone do `$_SESSION['siteNNN']` / `$_SESSION['siteNNN_edit']`.
**Router ich nie sprawdza** - każda strona i handler AJAX sprawdza sam.
- **SOAP w dwóch rolach**: klient SYNDIS (`soap.php` + `soap_*.php`, pobieranie SCADA)
oraz serwer SOAP (`webservice/`, wystawianie danych do SYNDIS).
- **Zadania cykliczne**: Windows `.bat` + php-cli (`soap_update5min.php` co 5 min,
`reports/rep_003_hours.bat` per oddział B/S/D).
## Bazy i sharding historii
Połączenie otwiera `softspm`, ale zapytania sięgają dwóch pozostałych przez
**twardy prefiks w SQL** (~240 wystąpień `softspm_rep.`, ~90 `softspm_his.`).
Wszystkie trzy muszą stać na jednym serwerze.
- `softspm` - dane operacyjne (w tym tabele `rep_*` bieżące).
- `softspm_rep` - tabele raportowe (`rep_002_*` per miesiąc `styc…grud`, `rep_003_data`, `rep_015_*`).
- `softspm_his` - archiwum: **shardy kwartalne** `rep_his_data_everyday_YYYY_qN`
i `seg_dev_resources_det_YYYY_qN`, piezometry per rok.
Routing shardów: `getTableNameFrom_everyday_his()` / `getTableNameFrom_resources_det()`
(`func.php`). Reguła: bieżący rok → tabela bazowa, ale po **180 dniach** przełącza się
na wariant `_his`; starsze → shard `YYYY_qN`; data w **pierwszych 3 dniach miesiąca**
jest cofana do poprzedniego miesiąca (więc początek stycznia trafia w Q4 poprzedniego
roku); wszystko sprzed 2014 → `2014_q1`.
> W SoftSPM_2 tej logiki **jeszcze nie ma** - `WellOperationController` czyta tylko
> bieżące `rep_his_data_everyday` z bazy `softspm`. Połączenia `softspm_rep`
> i `softspm_his` są skonfigurowane, ale nieużywane. Przy migracji historii
> trzeba odtworzyć reguły shardowania.
## Mapa sekcji legacy → SoftSPM_2
Górne menu legacy = sekcje; `config/navigation.php` odtwarza je 1:1.
Status: ✅ = przepisane, ⬜ = `route => null` (placeholder w menu).
| Sekcja | site | Nazwa | Status w SoftSPM_2 |
|---|---|---|---|
| **Start (100)** | 100/101/102 | Start, Parametry studni 01/02 | ✅ `dashboard` (mapa = placeholder) |
| **Katalogi (200)** | 203 | Katalog pomp | ✅ `pumps.*` (pełny CRUD) |
| | 204 | Katalog silników | ✅ `engines.*` |
| | 205 | Katalog agregatów | ✅ `aggregates.*` (lista/szczegóły/edycja) |
| | 201 | Wybór agregatu pompowego | ✅ `aggregate-selection.index` |
| | 206 | Katalog kabli | ✅ `cables.*` |
| | 207 | Katalog orurowania i armatury | ✅ `piping.*` |
| | 208 | Katalog opomiarowania | ✅ `metering.*` |
| | 202 | Katalog piezometrów | ⬜ **brak w `navigation.php`** |
| **Stan (300)** | 303,304,301,302,309,306,307,308 | Stan pomp/silników/studni/zbiorników/piezometrów/kabli/orurowania/opomiarowania | ⬜ wszystkie |
| | 310 | (bez etykiety w menu; 1204 linie - największy plik `sites/`) | ⬜ |
| **Eksploatacja (400)** | 401 | Eksploatacja studni | ✅ `well-operation.*` (lista + karta, etap 1) |
| | 402,404,405,406,403,407 | zbiorniki, piezometry, ujęcia, kreator doboru pompy, parametry stałe, zrzut wody | ⬜ |
| **Stacja prób (500)** | 501-504 | Pompy, Silniki, Agregaty, Kable | ⬜ |
| **Remonty (600)** | 601-603 | Demontaż, Weryfikacja, Jakość remontów | ⬜ |
| **Gospodarka (700)** | 701-704 | Statystyki rezerw studni, rezerwy części nowych/regenerowanych, drutów i kabli | ⬜ |
| **Administracja (800)** | 801-807, 809, 810 | użytkownicy, profile, baza wiedzy, producenci, słowniki, parametryzacja, raporty, zlecenia, zmiana hasła | ⬜ |
| **Baza wiedzy (900)** | 900 | Baza wiedzy | ⬜ (sekcja bez pozycji) |
Ciężar pracy wg liczby plików `sites/`: **Stan (65)**, Administracja (42),
Eksploatacja (39), Katalogi (27) - reszta po 1-4.
### Moduł „Studnie" (`wells.*`) - odklejony od menu
`routes/web.php` ma pełny CRUD studni (`wells.index/create/store/edit/update`),
widoki istnieją, ale **`config/navigation.php` nigdzie go nie wskazuje** -
pozycja „Stan studni" (site301) ma `route => null`. Moduł jest osiągalny wyłącznie
przez wpisanie URL-a. Do decyzji: podpiąć pod „Stan studni" czy pod inną pozycję.
Pochodzenie: lista z `site401.php` (przepisana bez N+1), formularze z `site301A/E/inf`.
`WellOperationController` bierze się z tej samej grupy `site401` - te dwa moduły
łatwo pomylić.
## Pułapki przy czytaniu legacy
- **Duża część drzewa to martwy kod.** Przed edycją potwierdzić, że plik jest żywy:
`sites/backup/` (23 pliki), kopie z datą w nazwie (`20161228_soap.php`,
`20170130_soap.php`, `20210926_soap.php`), skrypty jednorazowe
(`naprawa_20210312.php`, `repair_20210313_data.php`, `rollback.php`, `test*.php`),
pięć wariantów tego samego importera `soap_of_while{,_back,_last,_manual,_new}.php`,
klony raportów per miesiąc (`rep_002_wrze_print.php`).
- **Ścieżki twardo wpisane w `.bat`** potrafią wskazywać na *inną kopię* aplikacji
(`reports/rep_003_hours.bat` kieruje na `htdocs\trzeciTestowy\`) - sprawdzić,
zanim się założy, że dany skrypt to ten działający.
- **Etykiety UI**: `language/{polish,english,german}.php`, zmienne `$lab_*`.
`polish.php` (45 kB) jest źródłem prawdy; `english.php`/`german.php` (po ~19 kB)
mają braki. SoftSPM_2 ma `SetLocale`, ale **zero wywołań `__()`** - tłumaczenia
to osobny, jeszcze nierozpoczęty etap.
- **Środowisko legacy**: PHP 5.4/5.6 + usunięte `ext/mysql` (`mysql_connect`),
dlatego uruchamia się je tylko starym XAMPP-em (`C:\Programy\xampp_old\php\php.exe`).
Facet Eclipse w `.settings/` kłamie, że to PHP 8.2.