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

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