135 lines
7.5 KiB
Markdown
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.
|