ver. 0.279: Newsletter frontend migration, Languages facade elimination, bug fix newsletter_unsubscribe
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,30 @@ Logi zmian z migracji na Domain-Driven Architecture. Najnowsze na gorze.
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.279 (2026-02-16) - Newsletter + Languages frontend migration, front\Controllers, front\Views
|
||||
|
||||
- **Languages (view)** — migracja do nowego namespace
|
||||
- USUNIĘTA: `front\factory\Languages` — fasada niepotrzebna, wszystkie zależności przepięte na `Domain\Languages\LanguagesRepository`
|
||||
- USUNIĘTA: `front\view\Languages` → przeniesiona do `front\Views\Languages` (nowy namespace, bez `class.` prefix)
|
||||
- UPDATE: 26 plików przepiętych z fasady na repozytorium (kontrolery DI, entry points, szablony, shop classes)
|
||||
- UPDATE: `admin\App` — DI factory dla `ShopProductController` rozszerzona o `LanguagesRepository`
|
||||
|
||||
- **Newsletter (frontend)** — pełna migracja na Domain
|
||||
- NOWE METODY w `NewsletterRepository`: `unsubscribe()`, `confirmSubscription()`, `getHashByEmail()`, `removeByEmail()`, `signup()`, `sendQueued()`
|
||||
- NOWY: `front\Controllers\NewsletterController` — pierwszy frontowy kontroler z DI (nowy namespace `front\Controllers\`)
|
||||
- NOWY: `front\Views\Newsletter` — czysty VIEW (nowy namespace `front\Views\`)
|
||||
- USUNIĘTA: `front\factory\Newsletter` — logika przeniesiona do `NewsletterRepository`
|
||||
- USUNIĘTA: `front\view\Newsletter` → zastąpiona przez `front\Views\Newsletter`
|
||||
- USUNIĘTA: `front\controls\Newsletter` → zastąpiona przez `front\Controllers\NewsletterController`
|
||||
- UPDATE: `front\controls\Site::route()` — nowy routing: `getControllerFactories()` (DI) → fallback stare `front\controls\`
|
||||
- UPDATE: `front\factory\ShopClient` — 4x `get_template()` przepięte na `NewsletterRepository::templateByName()`
|
||||
- UPDATE: `index.php` — `newsletter_send()` przepięte na `$repo->sendQueued()`
|
||||
- FIX: `newsletter_unsubscribe()` — błędna składnia medoo `delete()` (3 argumenty zamiast 2)
|
||||
- UPDATE: `tests/bootstrap.php` — dodane stuby: `S::email_check()`, `S::get_session()`, `S::set_session()`
|
||||
- Testy: 437 OK, 1398 asercji (+10 nowych testów w NewsletterRepositoryTest)
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.278 (2026-02-16) - Settings + Languages frontend migration
|
||||
|
||||
- **Settings + Languages (frontend)** — pierwszy etap refaktoringu frontendu
|
||||
|
||||
@@ -326,7 +326,7 @@ Adresy e-mail zapisane do newslettera.
|
||||
| hash | Hash potwierdzenia/wypisu |
|
||||
| status | 1 = potwierdzony, 0 = oczekujacy |
|
||||
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`, `front\\factory\\Newsletter`
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`, `front\\Controllers\\NewsletterController`
|
||||
|
||||
## pp_newsletter_send
|
||||
Kolejka wysylki newslettera.
|
||||
@@ -338,7 +338,7 @@ Kolejka wysylki newslettera.
|
||||
| dates | Zakres dat artykulow (tekst) |
|
||||
| id_template | FK do `pp_newsletter_templates` (NULL gdy brak szablonu) |
|
||||
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`, `front\\factory\\Newsletter::newsletter_send()`
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`
|
||||
|
||||
## pp_newsletter_templates
|
||||
Szablony tresci e-maili (uzytkownik + administracyjne/systemowe).
|
||||
@@ -350,10 +350,12 @@ Szablony tresci e-maili (uzytkownik + administracyjne/systemowe).
|
||||
| text | Tresc HTML szablonu |
|
||||
| is_admin | 1 = szablon administracyjny/systemowy, 0 = szablon uzytkownika |
|
||||
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`, `admin\\Controllers\\NewsletterController`, `front\\factory\\Newsletter`
|
||||
**Uzywane w:** `Domain\\Newsletter\\NewsletterRepository`, `admin\\Controllers\\NewsletterController`
|
||||
|
||||
**Aktualizacja 2026-02-12 (ver. 0.257):** modul `/admin/newsletter` korzysta z `Domain\\Newsletter\\NewsletterRepository` (DI kontroler + fasada legacy).
|
||||
|
||||
**Aktualizacja 2026-02-16 (ver. 0.279):** `front\\factory\\Newsletter` usunięta — logika przeniesiona do `NewsletterRepository`. Frontend korzysta z `front\\Controllers\\NewsletterController` (DI).
|
||||
|
||||
## pp_scontainers
|
||||
Kontenery statyczne (modul /admin/scontainers).
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@ Panel administratora (33 moduły) został w pełni zmigrowany na architekturę D
|
||||
| ShopPaymentMethod | ZMIGROWANA (Domain) | — |
|
||||
| ShopStatuses | ZMIGROWANA (Domain) | — |
|
||||
| Scontainers | ZMIGROWANA (Domain) | — |
|
||||
| Newsletter | CZĘŚCIOWO zmigrowana | ŚREDNI |
|
||||
| Newsletter | ZMIGROWANA (Domain) — usunięta | — |
|
||||
| Settings | Fasada (BUG: get_single_settings_value ignoruje $param) | NISKI |
|
||||
| Languages | Fasada | NISKI |
|
||||
| Languages | USUNIĘTA — przepięta na Domain | — |
|
||||
| Layouts | Fasada | NISKI |
|
||||
| Banners | Fasada | NISKI |
|
||||
| Menu | Fasada | NISKI |
|
||||
@@ -51,7 +51,8 @@ Panel administratora (33 moduły) został w pełni zmigrowany na architekturę D
|
||||
|-------|--------|
|
||||
| Site | KRYTYCZNY — show() ~600 linii, pattern substitution engine |
|
||||
| ShopCategory | VIEW z logiką routingu (infinite scroll vs pagination) |
|
||||
| Articles, Banners, Languages, Menu, Newsletter, Scontainers | Czyste VIEW |
|
||||
| Articles, Banners, Menu, Scontainers | Czyste VIEW |
|
||||
| Languages, Newsletter | PRZENIESIONE do `front\Views\` (nowy namespace) |
|
||||
| ShopClient, ShopOrder, ShopPaymentMethod | Czyste VIEW |
|
||||
| ShopTransport | PUSTA klasa (placeholder) |
|
||||
|
||||
@@ -109,7 +110,7 @@ articles(8), banner(2), controls(1), menu(4), newsletter(2), scontainers(1), sho
|
||||
|
||||
1. **KRYTYCZNY** `front\factory\ShopClient::login()` — hardcoded password bypass `'Legia1916'`
|
||||
2. `front\factory\Settings::get_single_settings_value()` — ignoruje `$param`, zawsze zwraca `firm_name`
|
||||
3. `front\factory\Newsletter::newsletter_unsubscribe()` — błędna składnia SQL w delete
|
||||
3. ~~`front\factory\Newsletter::newsletter_unsubscribe()` — błędna składnia SQL w delete~~ **NAPRAWIONE** — `NewsletterRepository::unsubscribe()` z poprawną składnią medoo `delete()`
|
||||
4. `cms\Layout::__get()` — referuje nieistniejące `$this->data`
|
||||
5. `shop\Search` — typo w use: `shop\Produt` (brak 'c')
|
||||
|
||||
@@ -173,6 +174,33 @@ Legacy Cleanup
|
||||
|
||||
---
|
||||
|
||||
### Etap: Newsletter Frontend — ZREALIZOWANY
|
||||
|
||||
**Cel:** Przeniesienie logiki frontendowej z `front\factory\Newsletter` do `Domain\Newsletter\NewsletterRepository`. Migracja view do nowego namespace `front\Views`.
|
||||
|
||||
**DODANE METODY (do istniejącej klasy `NewsletterRepository`):**
|
||||
- `unsubscribe(string $hash): bool` — FIX: poprawna składnia medoo `delete()` (2 args zamiast 3)
|
||||
- `confirmSubscription(string $hash): bool`
|
||||
- `getHashByEmail(string $email): ?string`
|
||||
- `removeByEmail(string $email): bool`
|
||||
- `signup(string $email, string $serverName, bool $ssl, array $settings): bool`
|
||||
- `sendQueued(int $limit, string $serverName, bool $ssl, string $unsubscribeLabel): bool`
|
||||
- Konstruktor rozszerzony o opcjonalne: `ArticleRepository`, `NewsletterPreviewRenderer` (lazy-init)
|
||||
- Testy: 10 nowych testów w `NewsletterRepositoryTest`
|
||||
|
||||
**ZMIANA:**
|
||||
- `front/factory/Newsletter` → USUNIĘTA (logika przeniesiona do `NewsletterRepository`)
|
||||
- `front/view/Newsletter` → USUNIĘTA, zastąpiona przez `front/Views/Newsletter` (nowy namespace, bez `class.` prefix)
|
||||
- `front/controls/Newsletter` → thin wrapper na `NewsletterRepository`
|
||||
- `front/view/Site::show()` → `\front\Views\Newsletter::render()`
|
||||
- `index.php` → `$newsletterRepo->sendQueued()`
|
||||
- `front/factory/ShopClient` (4 miejsca) → `NewsletterRepository::templateByName()`
|
||||
- `tests/bootstrap.php` — dodane stuby: `S::email_check()`, `S::get_session()`, `S::set_session()`
|
||||
|
||||
**BUG FIX:** `newsletter_unsubscribe()` — medoo `delete()` wywoływane z 3 argumentami zamiast 2
|
||||
|
||||
---
|
||||
|
||||
### Etap: Category Frontend Service
|
||||
|
||||
**Cel:** Migracja `front\factory\ShopCategory` do Domain.
|
||||
@@ -435,7 +463,7 @@ front\factory\ShopPromotion::promotion_type_XX() → shop\Product::is_product_on
|
||||
- PHPDoc do wszystkich nowych klas Domain z `@since`
|
||||
- Aktualizacja `tests/bootstrap.php`
|
||||
- BUG FIX: `shop\Search` — typo `shop\Produt` → `shop\Product`
|
||||
- BUG FIX: `front\factory\Newsletter::newsletter_unsubscribe()` — poprawka SQL
|
||||
- ~~BUG FIX: `front\factory\Newsletter::newsletter_unsubscribe()` — poprawka SQL~~ **ZREALIZOWANE** w etapie Newsletter Frontend
|
||||
|
||||
---
|
||||
|
||||
@@ -471,6 +499,16 @@ front\factory\ShopPromotion::promotion_type_XX() → shop\Product::is_product_on
|
||||
- Namespace `\front\Controllers\` → `autoload/front/Controllers/`
|
||||
- **Klasy Domain sa wspolne dla admin i frontendu** — NIE tworzymy osobnych FrontendService/AdminService. Metody frontendowe (z cache Redis) dodajemy do istniejacych repozytoriow/serwisow Domain. Klasy sa ladowane lazy (instancja tworzona dopiero przy wywolaniu), wiec nie wplywaja na wydajnosc.
|
||||
|
||||
### Nazewnictwo plikow
|
||||
- Nowe klasy: `NazwaKlasy.php` (bez przedrostka `class.`)
|
||||
- Legacy: `class.NazwaKlasy.php` — zostawiamy do momentu migracji danej klasy
|
||||
- Autoloader obsluguje oba formaty (probuje `class.X.php`, potem `X.php`)
|
||||
- Nowe katalogi z duzej litery: `Views/`, `Controllers/` (legacy: `view/`, `controls/`, `factory/`)
|
||||
|
||||
### Statyczne vs instancyjne metody
|
||||
- **Statyczne** — gdy klasa jest bezstanowa (brak konstruktora, brak properties, brak DI). Czyste funkcje: dane wchodzą, wynik wychodzi. Przykład: klasy VIEW (`front\Views\Languages::render($data)`, `front\view\Banners::banners($data)`)
|
||||
- **Instancyjne** — gdy klasa ma zależności do wstrzyknięcia (repozytoria, serwisy) lub trzyma stan. Przykład: kontrolery z DI (`ShopProductController` z `ProductRepository`, `LanguagesRepository`)
|
||||
|
||||
### Weryfikacja po każdym etapie
|
||||
1. `composer test` (pełny suite PHPUnit)
|
||||
2. Manualne sprawdzenie frontendu: strona główna, kategoria, produkt, koszyk, zamówienie
|
||||
|
||||
@@ -203,7 +203,8 @@ autoload/
|
||||
│ ├── Layouts/
|
||||
│ │ └── LayoutsRepository.php
|
||||
│ ├── Newsletter/
|
||||
│ │ └── NewsletterRepository.php
|
||||
│ │ ├── NewsletterRepository.php
|
||||
│ │ └── NewsletterPreviewRenderer.php
|
||||
│ ├── Scontainers/
|
||||
│ │ └── ScontainersRepository.php
|
||||
│ ├── Dictionaries/
|
||||
@@ -231,8 +232,13 @@ autoload/
|
||||
│ ├── controls/ # Stare kontrolery (niezależny fallback)
|
||||
│ ├── factory/ # Stare helpery (niezależny fallback)
|
||||
│ └── view/ # Widoki (statyczne - bez zmian)
|
||||
├── front/
|
||||
│ ├── Controllers/ # Nowe kontrolery frontendowe (namespace \front\Controllers\) z DI
|
||||
│ ├── Views/ # Nowe widoki (namespace \front\Views\) — czyste VIEW, statyczne
|
||||
│ ├── controls/ # Legacy kontrolery (fallback)
|
||||
│ ├── factory/ # Legacy helpery (stopniowo migrowane)
|
||||
│ └── view/ # Legacy widoki
|
||||
├── shop/ # Legacy - fasady do Domain
|
||||
└── front/factory/ # Legacy - stopniowo migrowane
|
||||
```
|
||||
|
||||
**Aktualizacja 2026-02-14 (ver. 0.268):**
|
||||
@@ -373,5 +379,15 @@ Pelna dokumentacja testow: `TESTING.md`
|
||||
- Usunieto stary plik `autoload/admin/class.Site.php`.
|
||||
- Pelna migracja admin zakonczona — wszystkie moduly na Domain + DI + Controllers.
|
||||
|
||||
## Aktualizacja 2026-02-16 (ver. 0.279) - Newsletter + Languages frontend migration
|
||||
- Usunięta fasada `front\factory\Languages` — wszystkie 26 zależności przepięte bezpośrednio na `Domain\Languages\LanguagesRepository`.
|
||||
- Usunięta fasada `front\factory\Newsletter` — logika przeniesiona do `Domain\Newsletter\NewsletterRepository` (6 nowych metod frontendowych).
|
||||
- Usunięty stary kontroler `front\controls\Newsletter` i widok `front\view\Newsletter`.
|
||||
- Utworzony nowy namespace `front\Controllers\` — pierwszy frontowy kontroler z DI: `NewsletterController`.
|
||||
- Utworzony nowy namespace `front\Views\` — czyste widoki statyczne: `Languages`, `Newsletter`.
|
||||
- Zaktualizowany routing w `front\controls\Site::route()` — `getControllerFactories()` (DI) z fallbackiem na stare `front\controls\`.
|
||||
- Przepięte 4 wywołania `Newsletter::get_template()` w `front\factory\ShopClient` na `NewsletterRepository::templateByName()`.
|
||||
- FIX: `newsletter_unsubscribe()` — błędna składnia medoo `delete()`.
|
||||
|
||||
---
|
||||
*Dokument aktualizowany: 2026-02-16*
|
||||
|
||||
@@ -36,7 +36,14 @@ Alternatywnie (Git Bash):
|
||||
Ostatnio zweryfikowano: 2026-02-16
|
||||
|
||||
```text
|
||||
OK (427 tests, 1378 assertions)
|
||||
OK (437 tests, 1398 assertions)
|
||||
```
|
||||
|
||||
Aktualizacja po migracji Newsletter + Languages frontend (2026-02-16, ver. 0.279):
|
||||
```text
|
||||
Pelny suite: OK (437 tests, 1398 assertions)
|
||||
Nowe testy: NewsletterRepositoryTest (+10: unsubscribe, confirmSubscription, getHashByEmail, removeByEmail, signup, constructorOptionalDeps)
|
||||
Zaktualizowane: tests/bootstrap.php (stuby: S::email_check, S::get_session, S::set_session)
|
||||
```
|
||||
|
||||
Aktualizacja po migracji Settings + Languages frontend (2026-02-16, ver. 0.278):
|
||||
|
||||
@@ -18,16 +18,17 @@ Aktualizacje znajdują się w folderze `updates/0.XX/` gdzie XX oznacza dziesią
|
||||
|
||||
## Procedura tworzenia nowej aktualizacji
|
||||
|
||||
## Status biezacej aktualizacji (ver. 0.278)
|
||||
## Status biezacej aktualizacji (ver. 0.279)
|
||||
|
||||
- Wersja udostepniona: `0.278` (data: 2026-02-16).
|
||||
- Wersja udostepniona: `0.279` (data: 2026-02-16).
|
||||
- Pliki publikacyjne:
|
||||
- `updates/0.20/ver_0.278.zip`
|
||||
- `updates/0.20/ver_0.279.zip`
|
||||
- `updates/0.20/ver_0.279_files.txt`
|
||||
- Pliki metadanych aktualizacji:
|
||||
- `updates/changelog.php` (dodany wpis `ver. 0.278`)
|
||||
- `updates/versions.php` (`$current_ver = 278`)
|
||||
- `updates/changelog.php` (dodany wpis `ver. 0.279`)
|
||||
- `updates/versions.php` (`$current_ver = 279`)
|
||||
- Weryfikacja testow przed publikacja:
|
||||
- `OK (427 tests, 1378 assertions)`
|
||||
- `OK (437 tests, 1398 assertions)`
|
||||
|
||||
### 1. Określ numer wersji
|
||||
Sprawdź ostatnią wersję w `updates/` i zwiększ o 1.
|
||||
|
||||
Reference in New Issue
Block a user