ver. 0.282: Banners frontend migration, Cache cleanup, Shared\Cache namespace
- Banners frontend: front\Views\Banners (new), BannerRepository +2 frontend methods, front\view\Site przepięty, usunięte front\factory\Banners i front\view\Banners - Cache cleanup: eliminacja legacy class.Cache.php (file-based cache), 13 metod front\factory przepiętych z \Cache::fetch/store na CacheHandler - Shared\Cache namespace: CacheHandler i RedisConnection przeniesione do Shared\Cache\, 60 odwołań CacheHandler i 12 odwołań RedisConnection przepiętych, usunięte backward-compat wrappery class.CacheHandler.php i class.RedisConnection.php - Naprawione rozbieżności kluczy cache (random_products, category_name) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,38 @@ Logi zmian z migracji na Domain-Driven Architecture. Najnowsze na gorze.
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.282 (2026-02-16) - Cache cleanup, Shared namespace
|
||||
|
||||
- **Shared\Cache namespace** — przeniesienie CacheHandler i RedisConnection do `Shared\Cache\`
|
||||
- NOWY: `autoload/Shared/Cache/CacheHandler.php` — glowna implementacja
|
||||
- NOWY: `autoload/Shared/Cache/RedisConnection.php` — glowna implementacja singleton
|
||||
- USUNIETA: `autoload/class.CacheHandler.php` — wrapper usuniety, 60 odwolan przepietych na `\Shared\Cache\CacheHandler`
|
||||
- USUNIETA: `autoload/class.RedisConnection.php` — wrapper usuniety, 12 odwolan przepietych na `\Shared\Cache\RedisConnection`
|
||||
- **Eliminacja legacy Cache** — usuniecie plikowego cache `class.Cache.php`
|
||||
- USUNIETA: `autoload/class.Cache.php` — legacy file-based cache (store/fetch z base64+serialize)
|
||||
- UPDATE: `front\factory\ShopProduct` — 5 metod przepietych z `\Cache::` na `CacheHandler` (get_minimal_price, product_name, product_image, random_products, promoted_products)
|
||||
- UPDATE: `front\factory\ShopPaymentMethod` — 3 metody przepiete (payment_methods_by_transport, payment_method, payment_methods)
|
||||
- UPDATE: `front\factory\ShopCategory` — 2 metody przepiete (get_category_sort, category_name)
|
||||
- UPDATE: `front\factory\ShopTransport` — 2 metody przepiete (transport_cost, transport)
|
||||
- UPDATE: `front\factory\ShopAttribute` — 1 metoda przepieta (attribute_details)
|
||||
- UPDATE: `Domain\Dictionaries\DictionariesRepository` — prywatne wrappery cacheFetch/cacheStore przepiete na CacheHandler
|
||||
- FIX: naprawione rozbieznosci kluczy cache (random_products, category_name) — fetch i store uzywaly roznych kluczy
|
||||
- Testy: 454 OK, 1449 asercji
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.281 (2026-02-16) - Banners frontend migration
|
||||
|
||||
- **Banners (frontend)** — migracja na Domain + Views
|
||||
- NOWE METODY w `BannerRepository`: `banners(string $langId)`, `mainBanner(string $langId)` — z Redis cache, filtrowanie dat, plaski format `$banner['languages']` (zgodny z szablonami)
|
||||
- NOWY: `front\Views\Banners` — czysty VIEW (`banners()`, `mainBanner()`)
|
||||
- USUNIETA: `front\factory\Banners` — logika przeniesiona do `BannerRepository`
|
||||
- USUNIETA: `front\view\Banners` — zastapiona przez `front\Views\Banners`
|
||||
- UPDATE: `front\view\Site::show()` — przepiecie linii 62-63 na repo + Views (bezposrednio `$bannerRepo->banners()` / `$bannerRepo->mainBanner()`)
|
||||
- Testy: 454 OK, 1449 asercji (+4 nowe testy w BannerRepositoryTest)
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.280 (2026-02-16) - Articles frontend migration
|
||||
|
||||
- **Articles (frontend)** — pelna migracja na Domain + Views
|
||||
|
||||
@@ -129,7 +129,9 @@ Banery.
|
||||
| date_end | Data zakończenia |
|
||||
| home_page | Czy na stronie głównej 0/1 |
|
||||
|
||||
**Używane w:** `Domain\Banner\BannerRepository`
|
||||
**Używane w:** `Domain\Banner\BannerRepository`, `front\Views\Banners`
|
||||
|
||||
**Aktualizacja 2026-02-16 (ver. 0.281):** metody frontendowe `banners()`, `mainBanner()` dodane do `Domain\Banner\BannerRepository`. Fasady `front\factory\Banners` i `front\view\Banners` deleguja do repo/Views.
|
||||
|
||||
## pp_banners_langs
|
||||
Tłumaczenia banerów.
|
||||
@@ -144,7 +146,7 @@ Tłumaczenia banerów.
|
||||
| html | Kod HTML |
|
||||
| text | Tekst |
|
||||
|
||||
**Używane w:** `Domain\Banner\BannerRepository`
|
||||
**Używane w:** `Domain\Banner\BannerRepository`, `front\Views\Banners`
|
||||
|
||||
## pp_articles
|
||||
Artykuły.
|
||||
|
||||
@@ -40,7 +40,7 @@ Panel administratora (33 moduły) został w pełni zmigrowany na architekturę D
|
||||
| Settings | Fasada (BUG: get_single_settings_value ignoruje $param) | NISKI |
|
||||
| Languages | USUNIĘTA — przepięta na Domain | — |
|
||||
| Layouts | Fasada | NISKI |
|
||||
| Banners | Fasada | NISKI |
|
||||
| Banners | USUNIETA — przepieta na Domain | — |
|
||||
| Menu | Fasada | NISKI |
|
||||
| Pages | Fasada | NISKI |
|
||||
| ShopAttribute | 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, Menu, Scontainers | Czyste VIEW |
|
||||
| Articles, Menu, Scontainers | Czyste VIEW |
|
||||
| Banners | PRZENIESIONA do `front\Views\Banners` |
|
||||
| Languages, Newsletter | PRZENIESIONE do `front\Views\` (nowy namespace) |
|
||||
| ShopClient, ShopOrder, ShopPaymentMethod | Czyste VIEW |
|
||||
| ShopTransport | PUSTA klasa (placeholder) |
|
||||
@@ -79,12 +80,12 @@ Panel administratora (33 moduły) został w pełni zmigrowany na architekturę D
|
||||
|-------|-------|--------|
|
||||
| S | ~1130 | htacces() ~500 linii — generowanie .htaccess; reszta to utility |
|
||||
| Tpl | ~90 | OK — silnik szablonów, bez zmian |
|
||||
| CacheHandler | ~50 | OK — Redis wrapper |
|
||||
| RedisConnection | ~40 | OK — singleton |
|
||||
| CacheHandler | ~50 | ZMIGROWANY do `Shared\Cache\CacheHandler` — wrappery usuniete |
|
||||
| RedisConnection | ~40 | ZMIGROWANY do `Shared\Cache\RedisConnection` — wrappery usuniete |
|
||||
| Email | ~100 | OK — PHPMailer wrapper (drobne poprawki) |
|
||||
| Log | ~20 | OK — audit logging |
|
||||
| DbModel | ~60 | OK — base ORM |
|
||||
| Cache | ~50 | LEGACY — file-based cache, rozważyć usunięcie |
|
||||
| Cache | ~50 | USUNIETA — zastapiona CacheHandler (Redis) w ver. 0.282 |
|
||||
| Html | ~80 | OK — form helpers |
|
||||
| Image | ~100 | OK — GD wrapper |
|
||||
| Mobile_Detect | — | Third-party, bez zmian |
|
||||
@@ -246,19 +247,37 @@ Legacy Cleanup
|
||||
|
||||
---
|
||||
|
||||
### Etap: Banners, Menu, Pages, Layouts Frontend Services
|
||||
### Etap: Banners Frontend — ZREALIZOWANY
|
||||
|
||||
**Cel:** Migracja `front\factory\Banners` i `front\view\Banners` do Domain + Views.
|
||||
|
||||
**DODANE METODY (do istniejącej klasy `BannerRepository`):**
|
||||
- `banners(string $langId): ?array` — aktywne banery (home_page=0), filtrowanie dat, Redis cache, plaski format languages
|
||||
- `mainBanner(string $langId): ?array` — baner glowny (home_page=1), filtrowanie dat, Redis cache, plaski format languages
|
||||
|
||||
**NOWE:**
|
||||
- `front\Views\Banners` — czysty VIEW (`banners()`, `mainBanner()`)
|
||||
|
||||
**ZMIANA:**
|
||||
- `front\factory\Banners` → USUNIETA (logika przeniesiona do `BannerRepository`)
|
||||
- `front\view\Banners` → USUNIETA (zastapiona przez `front\Views\Banners`)
|
||||
- `front\view\Site::show()` — przepiecie na `$bannerRepo->banners()` / `$bannerRepo->mainBanner()` + `\front\Views\Banners::`
|
||||
- Testy: 4 nowe w `BannerRepositoryTest` (454 OK, 1449 asercji)
|
||||
|
||||
---
|
||||
|
||||
### Etap: Menu, Pages, Layouts Frontend Services
|
||||
|
||||
**Cel:** Migracja pozostałych fabryk "liściowych".
|
||||
|
||||
**NOWE:**
|
||||
- `Domain/Banner/BannerFrontendService.php` — `mainBanner()`, `banners()` (filtrowanie po datach)
|
||||
- `Domain/Menu/MenuFrontendService.php` — `menuDetails()`, `menuPages()` (rekurencja)
|
||||
- `Domain/Pages/PagesFrontendService.php` — `pageDetails()`, `mainPageId()`, `langUrl()`, `pageSort()`
|
||||
- `Domain/Layouts/LayoutsFrontendService.php` — `activeLayout()`, `articleLayout()`, `productLayout()`, `categoryLayout()`, `defaultLayout()`, `categoryDefaultLayout()`
|
||||
- Testy: 4 pliki testowe
|
||||
- Testy: 3 pliki testowe
|
||||
|
||||
**ZMIANA:**
|
||||
- `front/factory/Banners`, `Menu`, `Pages`, `Layouts` → fasady
|
||||
- `front/factory/Menu`, `Pages`, `Layouts` → fasady
|
||||
|
||||
**BUG FIX:** `cms\Layout::__get()` — poprawka referencji do `$this->data`
|
||||
|
||||
@@ -485,7 +504,7 @@ front\factory\ShopPromotion::promotion_type_XX() → shop\Product::is_product_on
|
||||
|
||||
**USUNIĘCIE:**
|
||||
- Martwy kod `eval()` dla `[PHP]` bloków (jeśli nieużywany)
|
||||
- `class.Cache.php` (legacy file-based) jeśli wszystkie użycia przeniesione na `CacheHandler`
|
||||
- ~~`class.Cache.php` (legacy file-based)~~ **ZREALIZOWANE** w ver. 0.282
|
||||
- Pusta klasa `front\view\ShopTransport`
|
||||
|
||||
**ZMIANA:**
|
||||
|
||||
@@ -6,23 +6,27 @@ Dokumentacja struktury projektu shopPRO do szybkiego odniesienia.
|
||||
|
||||
### Klasy odpowiedzialne za cache
|
||||
|
||||
#### RedisConnection
|
||||
- **Plik:** `autoload/class.RedisConnection.php`
|
||||
#### RedisConnection (`Shared\Cache\RedisConnection`)
|
||||
- **Plik:** `autoload/Shared/Cache/RedisConnection.php`
|
||||
- **Opis:** Singleton zarządzający połączeniem z Redis
|
||||
- **Metody:**
|
||||
- `getInstance()` - pobiera instancję połączenia
|
||||
- `getConnection()` - zwraca obiekt Redis
|
||||
|
||||
#### CacheHandler
|
||||
- **Plik:** `autoload/class.CacheHandler.php`
|
||||
#### CacheHandler (`Shared\Cache\CacheHandler`)
|
||||
- **Plik:** `autoload/Shared/Cache/CacheHandler.php`
|
||||
- **Opis:** Handler do obsługi cache Redis
|
||||
- **Metody:**
|
||||
- `get($key)` - pobiera wartość z cache
|
||||
- `set($key, $value, $ttl = 86400)` - zapisuje wartość do cache
|
||||
- `get($key)` - pobiera wartość z cache (zwraca zserializowany string, wymaga `unserialize()`)
|
||||
- `set($key, $value, $ttl = 86400)` - zapisuje wartość do cache (serializuje wewnętrznie)
|
||||
- `exists($key)` - sprawdza czy klucz istnieje
|
||||
- `delete($key)` - usuwa pojedynczy klucz
|
||||
- `deletePattern($pattern)` - usuwa klucze według wzorca
|
||||
|
||||
#### USUNIĘTA: Cache (legacy file-based)
|
||||
- ~~`autoload/class.Cache.php`~~ — usunięta w ver. 0.282
|
||||
- Zastąpiona przez `CacheHandler` (Redis) we wszystkich wywołaniach
|
||||
|
||||
#### Klasa S (pomocnicza)
|
||||
- **Plik:** `autoload/class.S.php`
|
||||
- **Metody cache:**
|
||||
@@ -100,9 +104,11 @@ shopPRO/
|
||||
│ │ ├── controls/ # Kontrolery legacy (fallback)
|
||||
│ │ └── factory/ # Fabryki/helpery
|
||||
│ ├── Domain/ # Repozytoria/logika domenowa
|
||||
│ ├── Shared/ # Wspoldzielone narzedzia
|
||||
│ │ └── Cache/ # CacheHandler, RedisConnection
|
||||
│ ├── front/ # Klasy frontendu
|
||||
│ │ ├── Controllers/ # Nowe kontrolery DI (Newsletter)
|
||||
│ │ ├── Views/ # Nowe widoki (Newsletter, Articles, Languages)
|
||||
│ │ ├── Views/ # Nowe widoki (Newsletter, Articles, Languages, Banners)
|
||||
│ │ ├── controls/ # Kontrolery legacy (Site, ShopBasket, ...)
|
||||
│ │ ├── view/ # Widoki legacy (Site, ...)
|
||||
│ │ └── factory/ # Fabryki/helpery (fasady)
|
||||
@@ -388,10 +394,24 @@ Pelna dokumentacja testow: `TESTING.md`
|
||||
- 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`.
|
||||
- Utworzony nowy namespace `front\Views\` — czyste widoki statyczne: `Languages`, `Newsletter`, `Banners`.
|
||||
- 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()`.
|
||||
|
||||
## Aktualizacja 2026-02-16 (ver. 0.281) - Banners frontend migration
|
||||
- NOWE METODY w `Domain/Banner/BannerRepository.php`: `banners()`, `mainBanner()` (Redis cache, filtrowanie dat).
|
||||
- NOWY: `front\Views\Banners` — czysty VIEW (renderowanie szablonow banner/).
|
||||
- USUNIETA: `front\factory\Banners` — logika przeniesiona do `BannerRepository`.
|
||||
- USUNIETA: `front\view\Banners` — zastapiona przez `front\Views\Banners`.
|
||||
- UPDATE: `front\view\Site::show()` — przepiecie na repo + Views.
|
||||
|
||||
## Aktualizacja 2026-02-16 (ver. 0.282) - Cache cleanup, Shared namespace
|
||||
- NOWY: `Shared\Cache\CacheHandler` + `Shared\Cache\RedisConnection` — namespace Shared.
|
||||
- USUNIETA: `class.CacheHandler.php` — wrapper, 60 odwolan przepietych na `\Shared\Cache\CacheHandler`.
|
||||
- USUNIETA: `class.RedisConnection.php` — wrapper, 12 odwolan przepietych na `\Shared\Cache\RedisConnection`.
|
||||
- USUNIETA: `class.Cache.php` — legacy file-based cache.
|
||||
- UPDATE: 6 plikow przepietych z `\Cache::fetch/store` na `CacheHandler` (ShopProduct, ShopPaymentMethod, ShopCategory, ShopTransport, ShopAttribute, DictionariesRepository).
|
||||
|
||||
---
|
||||
*Dokument aktualizowany: 2026-02-16*
|
||||
|
||||
@@ -129,9 +129,9 @@ grep -r "Product::getQuantity" .
|
||||
### ✅ Zmigrowane moduły
|
||||
| # | Modul | Wersja | Zakres |
|
||||
|---|-------|--------|--------|
|
||||
| 1 | Cache | 0.237 | CacheHandler, RedisConnection, clear_product_cache |
|
||||
| 1 | Cache | 0.237, 0.282 | CacheHandler, RedisConnection, clear_product_cache, Shared\Cache namespace, eliminacja class.Cache.php |
|
||||
| 2 | Product | 0.238-0.252, 0.274, 0.277 | getQuantity, getPrice, getName, archive/unarchive, allProductsForMassEdit, getProductsByCategory, applyDiscountPercent, pelna migracja factory (CRUD, save, delete, duplicate, kombinacje, zdjecia/pliki, Google Feed XML) |
|
||||
| 3 | Banner | 0.239 | find, delete, save, kontroler DI |
|
||||
| 3 | Banner | 0.239, 0.281 | find, delete, save, kontroler DI, frontend: banners(), mainBanner() z Redis cache, usuniete fasady front\factory + front\view |
|
||||
| 4 | Settings | 0.240/0.250 | saveSettings, getSettings, kontroler DI |
|
||||
| 5 | Dictionaries | 0.251 | listForAdmin, find, save, delete, kontroler DI |
|
||||
| 6 | ProductArchive | 0.252 | kontroler DI, table-list |
|
||||
@@ -187,6 +187,7 @@ grep -r "Product::getQuantity" .
|
||||
## Kolejność refaktoryzacji (priorytet)
|
||||
|
||||
1-33: ✅ Cache, Product, Banner, Settings, Dictionaries, ProductArchive, Filemanager, Users, Pages, Integrations, ShopPromotion, ShopCoupon, ShopStatuses, ShopPaymentMethod, ShopTransport, ShopAttribute, ShopProductSets, ShopProducer, ShopProduct (mass_edit), ShopClients, ShopCategory, ShopOrder, ShopProduct (factory), Dashboard, Update, Legacy cleanup, admin\App
|
||||
34: ✅ Shared\Cache namespace (ver. 0.282) — CacheHandler + RedisConnection → Shared\Cache\, eliminacja class.Cache.php, przepiecie 6 plikow na CacheHandler
|
||||
|
||||
## Form Edit System
|
||||
|
||||
@@ -287,7 +288,7 @@ tests/
|
||||
│ └── UsersControllerTest.php
|
||||
└── Integration/
|
||||
```
|
||||
**Lacznie: 390 testow, 1278 asercji**
|
||||
**Lacznie: 454 testow, 1449 asercji**
|
||||
|
||||
Aktualizacja 2026-02-15 (ver. 0.273):
|
||||
- dodano testy `tests/Unit/Domain/Producer/ProducerRepositoryTest.php`
|
||||
@@ -301,5 +302,5 @@ Pelna dokumentacja testow: `TESTING.md`
|
||||
|
||||
---
|
||||
*Rozpoczęto: 2025-02-05*
|
||||
*Ostatnia aktualizacja: 2026-02-15*
|
||||
*Ostatnia aktualizacja: 2026-02-16*
|
||||
*Changelog zmian: `docs/CHANGELOG.md`*
|
||||
|
||||
@@ -36,7 +36,13 @@ Alternatywnie (Git Bash):
|
||||
Ostatnio zweryfikowano: 2026-02-16
|
||||
|
||||
```text
|
||||
OK (450 tests, 1431 assertions)
|
||||
OK (454 tests, 1449 assertions)
|
||||
```
|
||||
|
||||
Aktualizacja po migracji Banners frontend (2026-02-16, ver. 0.281):
|
||||
```text
|
||||
Pelny suite: OK (454 tests, 1449 assertions)
|
||||
Nowe testy: BannerRepositoryTest (+4: banners flat languages, banners null, mainBanner flat languages, mainBanner null)
|
||||
```
|
||||
|
||||
Aktualizacja po migracji Articles frontend (2026-02-16, ver. 0.280):
|
||||
|
||||
@@ -18,17 +18,17 @@ Aktualizacje znajdują się w folderze `updates/0.XX/` gdzie XX oznacza dziesią
|
||||
|
||||
## Procedura tworzenia nowej aktualizacji
|
||||
|
||||
## Status biezacej aktualizacji (ver. 0.280)
|
||||
## Status biezacej aktualizacji (ver. 0.282)
|
||||
|
||||
- Wersja udostepniona: `0.280` (data: 2026-02-16).
|
||||
- Wersja udostepniona: `0.282` (data: 2026-02-16).
|
||||
- Pliki publikacyjne:
|
||||
- `updates/0.20/ver_0.280.zip`
|
||||
- `updates/0.20/ver_0.280_files.txt`
|
||||
- `updates/0.20/ver_0.281.zip`, `ver_0.281_files.txt`
|
||||
- `updates/0.20/ver_0.282.zip`, `ver_0.282_files.txt`
|
||||
- Pliki metadanych aktualizacji:
|
||||
- `updates/changelog.php` (dodany wpis `ver. 0.280`)
|
||||
- `updates/versions.php` (`$current_ver = 280`)
|
||||
- `updates/changelog.php` (dodane wpisy `ver. 0.281`, `ver. 0.282`)
|
||||
- `updates/versions.php` (`$current_ver = 282`)
|
||||
- Weryfikacja testow przed publikacja:
|
||||
- `OK (450 tests, 1431 assertions)`
|
||||
- `OK (454 tests, 1449 assertions)`
|
||||
|
||||
### 1. Określ numer wersji
|
||||
Sprawdź ostatnią wersję w `updates/` i zwiększ o 1.
|
||||
|
||||
Reference in New Issue
Block a user