# Nowy Dom 0.5.1 — odbiór wersji PHP/MySQL

Wydanie z 28.10.2026. Zmiana technologii dotyczy części serwerowej: PHP 8.3+, MySQL, HTML/CSS i istniejący JavaScript w przeglądarce. Zachowany zakres awarii i korespondencji. To pakiet do instalacji i odbioru na serwerze klienta; nie został wdrożony na docelowym hostingu.

Ponowny przegląd i poprawki opisano w `PRZEGLAD_0_5_1.md`.

## Wykonane sprawdzenia

Testy wykonano na **PHP 8.3.6 i prawdziwym MySQL 8.0.46 / InnoDB**, w wydzielonej bazie, z żądaniami HTTP do PHP. Nie korzystano z imitacji bazy ani SQLite. Końcowy przebieg: **76 kontroli — wszystkie OK**. Pełny zapis znajduje się w `tests/ostatni_wynik.txt`.

Sprawdzono instalację formularzem WWW, odrzucenie złego tokenu, blokadę ponownej instalacji, logowanie/cookie, obowiązkową zmianę hasła, uprawnienia, CSRF, import, źródło awarii, dodanie/edycję, zamykanie i ponowne otwarcie, daty, login potwierdzającego, historię, kosz/przywracanie, edycję wykonawcy i duplikaty wspólnot. Rzeczywiste równoległe żądania sprawdziły konflikt wersji i brak kolizji numerów korespondencji. Numer pisma pozostaje stały i nie jest odzyskiwany po przeniesieniu wpisu do kosza.

Sprawdzono przesłanie i pobranie identycznego PDF, autoryzację pobrań i brak dostępu pracownika do plików awarii w koszu, DOCX, odrzucenie makr i niezgodnego formatu oraz limit 15 MiB. Zweryfikowano eksport administratora bez haseł, unieważnienie sesji po dezaktywacji konta, renderowanie strony przez PHP i brak dostępu HTTP do prywatnych danych. Końcowy przebieg działał **w podkatalogu `/zarzad/`**, z instalacją przez przeglądarkę.

Kontrola składni wszystkich plików PHP i obu skryptów JavaScript: OK. Obie kopie schematu SQL są zgodne. Dane startowe są identyczne z `initial.json` poprzedniego wydania 0.4: 107 awarii i 205 wspólnot. Zachowano zera w identyfikatorach i terminy opisowe. Instalacja nie generuje fikcyjnych prowadzących ani dat historycznych.

Interfejs przeniesiono z poprzedniego wydania; zmieniono adresowanie API, eksportu i pobierania plików na PHP. W tym przeglądzie nie przeprowadzono osobnego wizualnego odbioru PHP w każdej przeglądarce. Testy HTTP nie zastępują odbioru docelowego Apache/Nginx, TLS, FPM i kopii zapasowych.

## Odbiór na serwerze Nowego Domu

Przed udostępnieniem pracownikom informatyk powinien:

1. Potwierdzić wersję PHP, rozszerzenia i MySQL; ustawić HTTPS, DocumentRoot wyłącznie `public/`, prywatne app/config i storage, dzienniki oraz limity żądań. Zweryfikować uprawnienia plików załączników tworzone jako 0600 przez właściwego użytkownika PHP.
2. Wykonać instalację na wydzielonym adresie. Potwierdzić 107 awarii / 205 wspólnot. Usunąć instalator i wyczyścić token. Ustawić hasła pracowników, przekazać je bezpiecznie.
3. Otworzyć dwie przeglądarki jako administrator i pracownik. Dodać awarię, odświeżyć ją na drugim komputerze, sprawdzić edycję równoczesną i uprawnienia. Przetestować faktyczne Chrome/Safari/Firefox używane w firmie, filtrowanie po nazwie, formularze, przewijanie oraz wymuszoną zmianę hasła.
4. Dodać pismo przychodzące i wychodzące, sprawdzić pola, daty i numer, powiązać z awarią i otworzyć historię. Sprawdzić, że pracownik nie usuwa ani nie eksportuje całości również przez bezpośredni adres API.
5. Dodać rzeczywisty protokół PDF, zdjęcie oraz DOCX/XLSX. Pobrać je po ponownym zalogowaniu, sprawdzić limit rozmiaru i brak anonimowego dostępu. Sprawdzić kosz i przywrócenie.
6. Sprawdzić odmowę odczytu przez HTTP dla konfiguracji, danych początkowych, schematu i storage. Potwierdzić cookie Secure, HttpOnly i SameSite oraz brak jawnych błędów PHP. Nie udostępniać kopii ZIP przez publiczny katalog witryny.
7. Skonfigurować monitorowanie i pełną kopię bazy/załączników/konfiguracji, wykonać i udokumentować próbne odtworzenie na osobnym adresie. Eksport JSON nie jest pełnym backupem.
8. Uzgodnić braki historyczne i zaakceptować zakres z właścicielem. Dopiero wtedy przełączyć adres do pracy operacyjnej.

## Braki w danych źródłowych

- Brak REGON-u wspólnoty „ZGODNA” przy ul. Jedności Narodowej 34 oraz wspólnoty przy ul. Schroniskowej 3, 3A, 3B, 3C.
- Historyczne wpisy wymagają przypisania prowadzących przy edycji. Puste daty nie zostały sztucznie uzupełnione.
- Awaria #78 była zamknięta bez daty/osoby potwierdzającej — zachowano stan historyczny, nie przypisano go administratorowi.
- Kontakt wykonawcy trzeba uzupełnić w bazie.

Pełny moduł przeglądów wymaga jeszcze pliku z bazą przeglądów; obecne oznaczenie źródła nie jest harmonogramem. Brak wysyłki maili/e-Doręczeń, skanera antywirusowego, automatycznych powiadomień i księgowości. Uzgodnienia poufności i wykorzystania kodu wymagają umowy z firmą IT; sam pakiet nie nakłada podpisanych zobowiązań.

## Powtórzenie testów

Wymagana osobna, **pusta** baza o nazwie kończącej się `_test`; nie używać konfiguracji produkcyjnej. Oddzielny zapisywalny storage poza WWW. PHP CLI i możliwość uruchamiania procesów; testy równoległe przygotowano dla Linux/macOS. Port domyślnie 18783 musi być wolny.

Przygotuj prywatny plik konfiguracyjny według `app/config.example.php`, z testową bazą i `secure_cookies => false` wyłącznie dla lokalnego HTTP. Aby sprawdzić instalator WWW, nadaj także testowy losowy `install_token` (minimum 32 znaki). Następnie z katalogu pakietu:

```bash
ND_TEST=1 ND_CONFIG_FILE=/PRYWATNA/SCIEZKA/config-test.php ND_TEST_WEB_INSTALL=1 ND_TEST_SUBDIR=1 php tests/run.php
```

Skrypt odmawia uruchomienia dla nazwy bazy bez sufiksu `_test` oraz dla niepustej bazy. Sam zakłada dane, tworzy losowe hasła w pamięci i uruchamia lokalny serwer PHP do testów. Wynik końcowy: 76 kontroli. Log serwera testowego jest w systemowym katalogu tymczasowym `nd-test-http.log`. Po zakończeniu należy usunąć testową bazę i pliki z dedykowanego storage. Testów nie wolno uruchamiać na danych operacyjnych. Do kolejnego przebiegu potrzebna jest ponownie pusta baza. Skrypt oraz jego logi nie są potrzebne na serwerze produkcyjnym.
