7.5 KiB
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.mdlegacy podaje „func.php ~3400 linii, ~140 funkcji",AUDYT.md„~4000 linii, ~140 funkcji". Faktycznie 4156 / 111.CLAUDE.mdtwierdzi też „Not a git repository" - dlatrzeciCloude_v1to już nieprawda.
Architektura w skrócie
- Front controller:
index.php, dispatch po?pg=siteNNN→include sites/siteNNN.php(domyślniesite401). Menu, bramka auth i połączenie z bazą też są windex.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:site301ma 18 wariantów,site401ma 19. - Uprawnienia per strona:
sys_user_profiles → sys_profile_site → sys_site_accessspł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.phpco 5 min,reports/rep_003_hours.batper 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 tabelerep_*bieżące).softspm_rep- tabele raportowe (rep_002_*per miesiącstyc…grud,rep_003_data,rep_015_*).softspm_his- archiwum: shardy kwartalnerep_his_data_everyday_YYYY_qNiseg_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 -
WellOperationControllerczyta tylko bieżącerep_his_data_everydayz bazysoftspm. Połączeniasoftspm_repisoftspm_hissą 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 importerasoap_of_while{,_back,_last,_manual,_new}.php, klony raportów per miesiąc (rep_002_wrze_print.php). - Ścieżki twardo wpisane w
.batpotrafią wskazywać na inną kopię aplikacji (reports/rep_003_hours.batkieruje nahtdocs\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 maSetLocale, 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.