Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -1,504 +1,173 @@
|
||||
# Struktura Projektu shopPRO
|
||||
|
||||
Dokumentacja struktury projektu shopPRO do szybkiego odniesienia.
|
||||
Aktualna architektura po zakonczonej migracji na Domain-Driven Design + Dependency Injection.
|
||||
|
||||
## System Cache (Redis)
|
||||
## Warstwa domenowa (`autoload/Domain/`)
|
||||
|
||||
### Klasy odpowiedzialne za cache
|
||||
Kazdy modul zawiera Repository (i opcjonalnie dodatkowe klasy). Konstruktor DI z `$db` (Medoo). Metody sluza zarowno adminowi, jak i frontendowi (wspolna warstwa).
|
||||
|
||||
#### 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
|
||||
| Modul | Klasy | Uwagi |
|
||||
|-------|-------|-------|
|
||||
| Article | ArticleRepository | blog, aktualnosci, galerie, pliki |
|
||||
| Attribute | AttributeRepository | cechy produktow + wartosci |
|
||||
| Banner | BannerRepository | banery glowne + boczne, Redis cache |
|
||||
| Basket | BasketCalculator | summary, count, walidacja stanow |
|
||||
| Cache | CacheRepository | czyszczenie cache z poziomu admin |
|
||||
| Category | CategoryRepository | drzewa kategorii, produkty w kategorii, Redis cache |
|
||||
| Client | ClientRepository | CRUD, auth, adresy, zamowienia |
|
||||
| Coupon | CouponRepository | kupony rabatowe, walidacja, uzycie |
|
||||
| Dashboard | DashboardRepository | statystyki admin, Redis cache |
|
||||
| Dictionaries | DictionariesRepository | slowniki admin |
|
||||
| Integrations | IntegrationsRepository | Apilo sync, ustawienia |
|
||||
| Languages | LanguagesRepository | jezyki, tlumaczenia |
|
||||
| Layouts | LayoutsRepository | layouty stron, 3-level fallback |
|
||||
| Newsletter | NewsletterRepository, NewsletterPreviewRenderer | subskrypcje, szablony, kolejka wysylki |
|
||||
| Order | OrderRepository, OrderAdminService | CRUD, Apilo sync, webhooki platnosci, kolejka retry |
|
||||
| Pages | PagesRepository | strony, menu, drzewa stron |
|
||||
| PaymentMethod | PaymentMethodRepository | metody platnosci, mapowanie Apilo |
|
||||
| Producer | ProducerRepository | producenci |
|
||||
| Product | ProductRepository | CRUD, cache, kombinacje, zdjecia, Google Feed XML |
|
||||
| ProductSet | ProductSetRepository | zestawy produktow |
|
||||
| Promotion | PromotionRepository | promocje, 5 typow applyType*, silnik dopasowania |
|
||||
| Scontainers | ScontainersRepository | kontenery sidebaru |
|
||||
| Settings | SettingsRepository | ustawienia sklepu |
|
||||
| ShopStatus | ShopStatusRepository | statusy zamowien, mapowanie Apilo |
|
||||
| Transport | TransportRepository | transport, koszty, powiazanie z platnosci |
|
||||
| Update | UpdateRepository | aktualizacje, migracje SQL |
|
||||
| User | UserRepository | uzytkownicy admin, 2FA, logowanie |
|
||||
|
||||
#### CacheHandler (`Shared\Cache\CacheHandler`)
|
||||
- **Plik:** `autoload/Shared/Cache/CacheHandler.php`
|
||||
- **Opis:** Handler do obsługi cache Redis
|
||||
- **Metody:**
|
||||
- `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
|
||||
## Warstwa admin (`autoload/admin/`)
|
||||
|
||||
#### 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
|
||||
### Router: `admin\App`
|
||||
- `getControllerFactories()` — mapa kontrolerow z DI wiring
|
||||
- Brak fallbacku na legacy — wszystkie moduly na nowych kontrolerach
|
||||
|
||||
#### Helpers (`Shared\Helpers\Helpers`)
|
||||
- **Plik:** `autoload/Shared/Helpers/Helpers.php`
|
||||
- **Metody cache:**
|
||||
- `clear_product_cache(int $product_id)` - czyści cache konkretnego produktu
|
||||
### Kontrolery (`admin\Controllers\`) — 28 kontrolerow
|
||||
ArticlesArchive, Articles, Banner, Dashboard, Dictionaries, Filemanager, Integrations, Languages, Layouts, Newsletter, Pages, ProductArchive, Scontainers, Settings, ShopAttribute, ShopCategory, ShopClients, ShopCoupon, ShopOrder, ShopPaymentMethod, ShopProducer, ShopProduct, ShopProductSets, ShopPromotion, ShopStatuses, ShopTransport, Update, Users
|
||||
|
||||
### Wzorce kluczy Redis
|
||||
### Support
|
||||
- `admin\Support\TableListRequestFactory` — paginacja/sortowanie tabel
|
||||
- `admin\Support\Forms\FormRequestHandler` — obsluga formularzy (persist przy bledach)
|
||||
- `admin\Support\Forms\FormFieldRenderer` — renderowanie pol formularzy
|
||||
|
||||
#### Produkty
|
||||
### ViewModels
|
||||
- `admin\ViewModels\Forms\` — FormEditViewModel, FormField, FormTab, FormAction, FormFieldType
|
||||
- `admin\ViewModels\Common\PaginatedTableViewModel`
|
||||
|
||||
### Walidacja
|
||||
- `admin\Validation\FormValidator` — reguly per pole, sekcje jezykowe
|
||||
|
||||
## Warstwa frontend (`autoload/front/`)
|
||||
|
||||
### Router: `front\App`
|
||||
- `route()`, `checkUrlParams()`, `getControllerFactories()`
|
||||
|
||||
### Layout Engine: `front\LayoutEngine`
|
||||
- `show()` — zamiana tagow szablonowych (kategorie, produkty, menu, banery, artykuly, kontenery, meta)
|
||||
- `contact()`, `cookieInformation()`
|
||||
|
||||
### Kontrolery (`front\Controllers\`) — 8 kontrolerow
|
||||
Newsletter, Search, ShopBasket, ShopClient, ShopCoupon, ShopOrder, ShopProducer, ShopProduct
|
||||
|
||||
### Widoki (`front\Views\`) — 11 klas statycznych
|
||||
Articles, Banners, Languages, Menu, Newsletter, Scontainers, ShopCategory, ShopClient, ShopPaymentMethod, ShopProduct, ShopSearch
|
||||
|
||||
## Warstwa wspoldzielona (`autoload/Shared/`)
|
||||
|
||||
| Klasa | Opis |
|
||||
|-------|------|
|
||||
| `Shared\Cache\CacheHandler` | Redis cache: get/set/delete/deletePattern |
|
||||
| `Shared\Cache\RedisConnection` | Singleton polaczenia Redis |
|
||||
| `Shared\Email\Email` | Wrapper PHPMailer |
|
||||
| `Shared\Helpers\Helpers` | SEO, email, cache clearing, shortPrice, utility |
|
||||
| `Shared\Html\Html` | Helpery HTML |
|
||||
| `Shared\Image\ImageManipulator` | Obrobka obrazow GD |
|
||||
| `Shared\Tpl\Tpl` | Silnik szablonow: render(), set() |
|
||||
|
||||
## Cache Redis
|
||||
|
||||
### Klucze
|
||||
```
|
||||
shop\product:{product_id}:{lang_id}:{permutation_hash}
|
||||
```
|
||||
- Przechowuje tablicę danych produktu (z kombinacjami, obrazkami, producentem itd.)
|
||||
- TTL: 24 godziny (86400 sekund)
|
||||
- Klasa: `Domain\Product\ProductRepository::findCached()` - `autoload/Domain/Product/ProductRepository.php`
|
||||
|
||||
#### Opcje ilościowe produktu
|
||||
```
|
||||
ProductRepository::getProductPermutationQuantityOptions:v2:{product_id}:{permutation}
|
||||
```
|
||||
- Przechowuje informacje o ilości i komunikatach magazynowych
|
||||
- Klasa: `Domain\Product\ProductRepository::getProductPermutationQuantityOptions()` - `autoload/Domain/Product/ProductRepository.php`
|
||||
|
||||
#### Zestawy produktów
|
||||
```
|
||||
ProductRepository::productSetsWhenAddToBasket:{product_id}
|
||||
```
|
||||
- Przechowuje produkty często kupowane razem
|
||||
- Klasa: `Domain\Product\ProductRepository::productSetsWhenAddToBasket()` - `autoload/Domain/Product/ProductRepository.php`
|
||||
|
||||
## Integracje z systemami zewnętrznymi (CRON)
|
||||
|
||||
### Plik: `cron.php`
|
||||
|
||||
#### Apilo
|
||||
- **Aktualizacja pojedynczego produktu:** synchronizacja cen i stanow
|
||||
- Czestotliwosc: Co 10 minut
|
||||
- **Synchronizacja cennika:** masowa aktualizacja cen z Apilo
|
||||
- Czestotliwosc: Co 1 godzine
|
||||
- **Synchronizacja zaleglych syncow platnosci/statusow:** kolejka retry dla chwilowej niedostepnosci Apilo (`temp/apilo-sync-queue.json`)
|
||||
- Przetwarzanie: przy kazdym uruchomieniu `cron.php` (limit wsadowy)
|
||||
|
||||
**Uwaga:** Integracje Sellasist i Baselinker zostaly usuniete w ver. 0.263.
|
||||
|
||||
## Panel Administratora
|
||||
|
||||
### Routing
|
||||
- Główny katalog: `admin/`
|
||||
- Template główny: `admin/templates/site/main-layout.php`
|
||||
- Kontrolery (nowe): `autoload/admin/Controllers/`
|
||||
- Kontrolery legacy (fallback): `autoload/admin/controls/`
|
||||
|
||||
### Przycisk "Wyczyść cache"
|
||||
- **Lokalizacja UI:** `admin/templates/site/main-layout.php:172`
|
||||
- **JavaScript:** `admin/templates/site/main-layout.php:235-274`
|
||||
- **Endpoint AJAX:** `/admin/settings/clear_cache_ajax/`
|
||||
- **Kontroler:** `autoload/admin/Controllers/SettingsController.php:43-60`
|
||||
- **Działanie:**
|
||||
1. Pokazuje spinner "Czyszczę cache..."
|
||||
2. Czyści katalogi: `temp/`, `thumbs/`
|
||||
3. Wykonuje `flushAll()` na Redis
|
||||
4. Pokazuje "Cache wyczyszczony!" przez 2 sekundy
|
||||
5. Przywraca stan początkowy
|
||||
|
||||
## Struktura katalogów
|
||||
|
||||
```
|
||||
shopPRO/
|
||||
├── admin/ # Panel administratora
|
||||
│ ├── templates/ # Szablony widoków
|
||||
│ └── layout/ # Zasoby CSS/JS/ikony
|
||||
├── autoload/ # Klasy autoloadowane
|
||||
│ ├── admin/ # Klasy panelu admin
|
||||
│ │ ├── Controllers/ # Nowe kontrolery DI
|
||||
│ │ ├── controls/ # Kontrolery legacy (fallback)
|
||||
│ │ └── factory/ # Fabryki/helpery
|
||||
│ ├── Domain/ # Repozytoria/logika domenowa
|
||||
│ ├── Shared/ # Wspoldzielone narzedzia
|
||||
│ │ ├── Cache/ # CacheHandler, RedisConnection
|
||||
│ │ ├── Helpers/ # Helpers (ex class.S.php)
|
||||
│ │ └── Tpl/ # Tpl (silnik szablonow)
|
||||
│ ├── front/ # Klasy frontendu
|
||||
│ │ ├── App.php # Router (ex controls/Site) — route(), checkUrlParams(), getControllerFactories()
|
||||
│ │ ├── LayoutEngine.php # Layout engine (ex view/Site) — show(), contact(), cookieInformation()
|
||||
│ │ ├── Controllers/ # Kontrolery DI (Newsletter, ShopBasket, ShopClient, ShopCoupon, ShopOrder, ShopProducer, ShopProduct)
|
||||
│ │ └── Views/ # Widoki (Newsletter, Articles, Languages, Banners, Menu, Scontainers, ShopCategory, ShopClient)
|
||||
│ └── shop/ # Klasy sklepu
|
||||
├── docs/ # Dokumentacja techniczna
|
||||
├── libraries/ # Biblioteki zewnętrzne
|
||||
├── temp/ # Cache tymczasowy
|
||||
├── thumbs/ # Miniatury zdjęć
|
||||
└── cron.php # Zadania CRON
|
||||
shop\product:{id}:{lang}:{permutation_hash} — dane produktu (TTL 24h)
|
||||
ProductRepository::getProductPermutationQuantityOptions:v2:{id}:{perm} — ilosc + komunikaty
|
||||
ProductRepository::productSetsWhenAddToBasket:{id} — zestawy "kupowane razem"
|
||||
```
|
||||
|
||||
## Baza danych
|
||||
### Konwencje
|
||||
- TTL domyslnie 86400 (24h)
|
||||
- Dane serializowane — `unserialize()` po `get()`
|
||||
- Czyszczenie: `CacheHandler::deletePattern("shop\\product:{$id}:*")`
|
||||
- Czyszczenie z poziomu admin: `Shared\Helpers\Helpers::clear_product_cache($id)`
|
||||
- Przycisk "Wyczysc cache" w admin: `SettingsController::clearCacheAjax()` → `flushAll()` Redis + `temp/` + `thumbs/`
|
||||
|
||||
### Główne tabele produktów
|
||||
- `pp_shop_products` - produkty główne
|
||||
- `pp_shop_products_langs` - tłumaczenia produktów
|
||||
- `pp_shop_products_images` - zdjęcia produktów
|
||||
- `pp_shop_products_categories` - kategorie produktów
|
||||
- `pp_shop_products_custom_fields` - pola własne produktów
|
||||
## Entry pointy
|
||||
|
||||
### Tabele integracji
|
||||
- Kolumny w `pp_shop_products`:
|
||||
- `apilo_product_id`, `apilo_product_name`, `apilo_get_data_date`
|
||||
- Tabele ustawien:
|
||||
- `pp_shop_apilo_settings` (key-value)
|
||||
- `pp_shop_shoppro_settings` (key-value)
|
||||
| Plik | Rola |
|
||||
|------|------|
|
||||
| `index.php` | Frontend — autoload, sesja, DB, routing (`front\App`), layout (`front\LayoutEngine`), DOM post-processing |
|
||||
| `ajax.php` | Frontend AJAX — koszyk, transport, kontakt |
|
||||
| `api.php` | REST API (Ekomi CSV) |
|
||||
| `admin/index.php` | Admin — autoload, sesja, DB, routing (`admin\App`) |
|
||||
| `admin/ajax.php` | Admin AJAX |
|
||||
| `cron.php` | CRON: Apilo sync (ceny/stany co 10min, cennik co 1h, retry queue) |
|
||||
| `cron-turstmate.php` | TrustMate integracja |
|
||||
| `cron/cron-xml.php` | Google Feed XML |
|
||||
| `download.php` | Pobieranie plikow |
|
||||
|
||||
### Tabele checkout
|
||||
- `pp_shop_payment_methods` - metody platnosci sklepu (mapowanie `apilo_payment_type_id`)
|
||||
- `pp_shop_transports` - rodzaje transportu sklepu (mapowanie `apilo_carrier_account_id`)
|
||||
- `pp_shop_transport_payment_methods` - powiazanie metod transportu i platnosci
|
||||
### Autoloader
|
||||
Kazdy entry point rejestruje `__autoload_my_classes()`:
|
||||
1. Probuje `autoload/{namespace}/class.{ClassName}.php` (legacy format)
|
||||
2. Probuje `autoload/{namespace}/{ClassName}.php` (PSR-4 format)
|
||||
|
||||
Pelna dokumentacja tabel: `DATABASE_STRUCTURE.md`
|
||||
### Routing frontend (index.php)
|
||||
Przed `front\App::route()`:
|
||||
1. Sprawdza tabele `pp_redirects` → 301 redirect
|
||||
2. Sprawdza tabele `pp_routes` → regex pattern → destination
|
||||
|
||||
## Konfiguracja
|
||||
### Newsletter queue
|
||||
`index.php` wywoluje `$newsletterRepo->sendQueued()` na koncu kazdego requestu frontendowego (limit 1 mail/request).
|
||||
|
||||
### Redis
|
||||
- Konfiguracja: `config.php` (zmienna `$config['redis']`)
|
||||
- Parametry: host, port, password
|
||||
## Integracje zewnetrzne
|
||||
|
||||
### Autoload
|
||||
- Funkcja: `__autoload_my_classes()` w `cron.php:6`
|
||||
- Wzorzec: `autoload/{namespace}/class.{ClassName}.php`
|
||||
### Apilo (cron.php)
|
||||
- Synchronizacja cen/stanow produktow (co 10 min)
|
||||
- Synchronizacja cennika (co 1h)
|
||||
- Kolejka retry: `temp/apilo-sync-queue.json` — `OrderAdminService::processApiloSyncQueue()`
|
||||
- Mapowanie statusow i platnosci przez tabele `pp_shop_statuses` i `pp_shop_payment_methods`
|
||||
|
||||
## Klasy pomocnicze
|
||||
### Webhooki platnosci (front\Controllers\ShopOrderController)
|
||||
- tPay, Przelewy24, Hotpay — ujednolicone: `set_as_paid` + `update_status`
|
||||
|
||||
### \Shared\Helpers\Helpers (autoload/Shared/Helpers/Helpers.php)
|
||||
Główna klasa helper (przeniesiona z `class.S.php`) z metodami:
|
||||
- `seo($val)` - generowanie URL SEO
|
||||
- `normalize_decimal($val, $precision)` - normalizacja liczb
|
||||
- `send_email()` - wysyłanie emaili
|
||||
- `delete_dir($dir)` - usuwanie katalogów
|
||||
- `htacces()` - generowanie .htaccess i sitemap.xml
|
||||
- `clear_product_cache($id)` - czyszczenie cache produktu
|
||||
## Biblioteki (`libraries/`)
|
||||
|
||||
### Medoo
|
||||
- Plik: `libraries/medoo/medoo.php`
|
||||
- Zmienna: `$mdb`
|
||||
- ORM do operacji na bazie danych
|
||||
- `medoo/medoo.php` — Medoo ORM (`$mdb`)
|
||||
- `rb.php` — RedBeanPHP ORM (`\R::`, `$pdo`)
|
||||
- `phpmailer/` — PHPMailer
|
||||
|
||||
## Najważniejsze wzorce
|
||||
## Wzorce architektoniczne
|
||||
|
||||
### Namespace'y
|
||||
- `\admin\Controllers\` - nowe kontrolery panelu admin (DI)
|
||||
- `\admin\controls\` - kontrolery legacy (fallback)
|
||||
- `\Domain\` - repozytoria/logika domenowa
|
||||
- `\admin\factory\` - helpery/fabryki admin
|
||||
- ~~`\front\factory\`~~ - USUNIĘTY — wszystkie fabryki zmigrowane do Domain
|
||||
- ~~`\front\controls\`~~ - USUNIĘTY — router przeniesiony do `\front\App`
|
||||
- ~~`\front\view\`~~ - USUNIĘTY — layout engine przeniesiony do `\front\LayoutEngine`
|
||||
- ~~`\shop\`~~ - USUNIĘTY — wszystkie klasy zmigrowane do `\Domain\`
|
||||
|
||||
### Cachowanie produktów
|
||||
### DI zamiast global
|
||||
```php
|
||||
// Pobranie produktu z cache
|
||||
$product = (new \Domain\Product\ProductRepository($mdb))->findCached($product_id, $lang_id, $permutation_hash);
|
||||
|
||||
// Czyszczenie cache produktu
|
||||
\Shared\Helpers\Helpers::clear_product_cache($product_id);
|
||||
// Kontroler wiring (w admin\App lub front\App)
|
||||
$repo = new \Domain\Example\ExampleRepository($mdb);
|
||||
$controller = new \admin\Controllers\ExampleController($repo);
|
||||
```
|
||||
|
||||
## Refaktoryzacja do Domain-Driven Architecture
|
||||
### Wspolna warstwa Domain
|
||||
Metody frontendowe (z Redis cache) dodawane do istniejacych repozytoriow — NIE tworzymy osobnych FrontendService/AdminService.
|
||||
|
||||
### Nowa struktura (w trakcie migracji)
|
||||
```
|
||||
autoload/
|
||||
├── Domain/ # Nowa warstwa biznesowa (namespace \Domain\)
|
||||
│ ├── Product/
|
||||
│ │ └── ProductRepository.php
|
||||
│ ├── Banner/
|
||||
│ │ └── BannerRepository.php
|
||||
│ ├── Settings/
|
||||
│ │ └── SettingsRepository.php
|
||||
│ ├── Cache/
|
||||
│ │ └── CacheRepository.php
|
||||
│ ├── Article/
|
||||
│ │ └── ArticleRepository.php
|
||||
│ ├── User/
|
||||
│ │ └── UserRepository.php
|
||||
│ ├── Languages/
|
||||
│ │ └── LanguagesRepository.php
|
||||
│ ├── Layouts/
|
||||
│ │ └── LayoutsRepository.php
|
||||
│ ├── Newsletter/
|
||||
│ │ ├── NewsletterRepository.php
|
||||
│ │ └── NewsletterPreviewRenderer.php
|
||||
│ ├── Scontainers/
|
||||
│ │ └── ScontainersRepository.php
|
||||
│ ├── Dictionaries/
|
||||
│ │ └── DictionariesRepository.php
|
||||
│ ├── Pages/
|
||||
│ │ └── PagesRepository.php
|
||||
│ ├── Integrations/
|
||||
│ │ └── IntegrationsRepository.php
|
||||
│ ├── Promotion/
|
||||
│ │ └── PromotionRepository.php
|
||||
│ ├── Coupon/
|
||||
│ │ └── CouponRepository.php
|
||||
│ ├── ShopStatus/
|
||||
│ │ └── ShopStatusRepository.php
|
||||
│ ├── Transport/
|
||||
│ │ └── TransportRepository.php
|
||||
│ ├── ProductSet/
|
||||
│ │ └── ProductSetRepository.php
|
||||
│ ├── Producer/
|
||||
│ │ └── ProducerRepository.php
|
||||
│ └── ...
|
||||
├── admin/
|
||||
│ ├── Controllers/ # Nowe kontrolery (namespace \admin\Controllers\)
|
||||
│ ├── class.Site.php # Router: nowy kontroler → fallback stary
|
||||
│ ├── controls/ # Stare kontrolery (niezależny fallback)
|
||||
│ ├── factory/ # Stare helpery (niezależny fallback)
|
||||
│ └── view/ # Widoki (statyczne - bez zmian)
|
||||
├── front/
|
||||
│ ├── App.php # Router (namespace \front\) — route(), checkUrlParams(), getControllerFactories()
|
||||
│ ├── LayoutEngine.php # Layout engine (namespace \front\) — show(), contact(), cookieInformation()
|
||||
│ ├── Controllers/ # Kontrolery frontendowe (namespace \front\Controllers\) z DI
|
||||
│ └── Views/ # Widoki (namespace \front\Views\) — czyste VIEW, statyczne
|
||||
├── shop/ # Legacy - fasady do Domain
|
||||
```
|
||||
### Klasy View — statyczne, bezstanowe
|
||||
`front\Views\*` — nie wymagaja DI. Czyste funkcje: dane wchodza, HTML wychodzi.
|
||||
|
||||
**Aktualizacja 2026-02-14 (ver. 0.268):**
|
||||
- Dodano modul domenowy `Domain/PaymentMethod/PaymentMethodRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopPaymentMethodController.php`.
|
||||
- Modul `/admin/shop_payment_method/*` dziala na nowych widokach (`payment-methods-list`, `payment-method-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopPaymentMethod.php`, `autoload/admin/factory/class.ShopPaymentMethod.php`, `autoload/admin/view/class.ShopPaymentMethod.php`, `admin/templates/shop-payment-method/view-list.php`.
|
||||
### Kontrolery — instancyjne z DI
|
||||
`Controllers\*` — repozytoria wstrzykiwane przez konstruktor.
|
||||
|
||||
**Aktualizacja 2026-02-14 (ver. 0.269):**
|
||||
- Dodano modul domenowy `Domain/Transport/TransportRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopTransportController.php`.
|
||||
- Modul `/admin/shop_transport/*` dziala na nowych widokach (`transports-list`, `transport-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopTransport.php`, `autoload/admin/view/class.ShopTransport.php`, `admin/templates/shop-transport/view-list.php`.
|
||||
- `admin\factory\ShopTransport` i `front\factory\ShopTransport` przepiete na repozytorium.
|
||||
### Nazewnictwo plikow
|
||||
- Nowe: `ClassName.php`
|
||||
- Legacy (pozostalosci): `class.ClassName.php`
|
||||
- Autoloader obsluguje oba formaty
|
||||
|
||||
**Aktualizacja 2026-02-14 (ver. 0.270):**
|
||||
- `OrderAdminService` zapisuje nieudane syncy Apilo (status/platnosc) do kolejki `temp/apilo-sync-queue.json`.
|
||||
- `cron.php` automatycznie ponawia zalegle syncy (`OrderAdminService::processApiloSyncQueue()`).
|
||||
- `OrderAdminService::setOrderAsPaid()` wysyla mapowany typ platnosci Apilo (z mapowania metody platnosci), bez stalej wartosci `type`.
|
||||
|
||||
**Aktualizacja 2026-02-15 (ver. 0.276):**
|
||||
- Dodano modul domenowy `Domain/Order/OrderRepository.php`.
|
||||
- Dodano serwis aplikacyjny `Domain/Order/OrderAdminService.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopOrderController.php`.
|
||||
- Modul `/admin/shop_order/*` dziala na nowych widokach (`orders-list`, `order-details`, `order-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopOrder.php`, `autoload/admin/factory/class.ShopOrder.php`, `admin/templates/shop-order/view-list.php`.
|
||||
|
||||
**Aktualizacja 2026-02-15 (ver. 0.277):**
|
||||
- Dodano globalna wyszukiwarke admin w `admin/templates/site/main-layout.php` (produkty + zamowienia).
|
||||
- Dodano endpoint AJAX `SettingsController::globalSearchAjax()` w `autoload/admin/Controllers/SettingsController.php`.
|
||||
- Usunieto fasade `autoload/admin/factory/class.Integrations.php`.
|
||||
- Wywołania integracji przepiete bezposrednio na `Domain/Integrations/IntegrationsRepository.php`.
|
||||
|
||||
### Routing admin (admin\Site::route())
|
||||
1. Sprawdź mapę `$newControllers` → utwórz instancję z DI → wywołaj
|
||||
2. Jeśli nowy kontroler nie istnieje (`class_exists()` = false) → fallback na `admin\controls\`
|
||||
3. Stary kontroler jest NIEZALEŻNY od nowych klas (bezpieczny fallback)
|
||||
|
||||
### Dependency Injection
|
||||
Nowe klasy używają **Dependency Injection** zamiast `global` variables:
|
||||
```php
|
||||
// STARE
|
||||
global $mdb;
|
||||
$quantity = $mdb->get('pp_shop_products', 'quantity', ['id' => $id]);
|
||||
|
||||
// NOWE
|
||||
$repository = new \Domain\Product\ProductRepository($mdb);
|
||||
$quantity = $repository->getQuantity($id);
|
||||
```
|
||||
|
||||
## Testowanie (tylko dla deweloperów)
|
||||
|
||||
**UWAGA:** Pliki testów NIE są częścią aktualizacji dla klientów!
|
||||
|
||||
### Narzędzia
|
||||
- **PHPUnit 9.6.34** - framework testowy
|
||||
- **test.bat** - uruchamianie testów
|
||||
- **composer.json** - autoloading PSR-4
|
||||
|
||||
Pelna dokumentacja testow: `TESTING.md`
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-14 (ver. 0.271)
|
||||
- Dodano modul domenowy `Domain/Attribute/AttributeRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopAttributeController.php`.
|
||||
- Modul `/admin/shop_attribute/*` zostal przepiety na nowe widoki (`attributes-list`, `attribute-edit`, `values-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopAttribute.php`, `autoload/admin/factory/class.ShopAttribute.php`, `autoload/admin/view/class.ShopAttribute.php`, `admin/templates/shop-attribute/_partials/value.php`.
|
||||
- Przepieto zaleznosci kombinacji produktu na `Domain\Attribute\AttributeRepository` i `shop\ProductAttribute`.
|
||||
- Dla `ShopAttribute` routing celowo nie wykonuje fallbacku akcji do legacy kontrolera.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.272)
|
||||
- Dodano modul domenowy `Domain/ProductSet/ProductSetRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopProductSetsController.php`.
|
||||
- Modul `/admin/shop_product_sets/*` dziala na nowych widokach (`product-sets-list`, `product-set-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopProductSets.php`, `autoload/admin/factory/class.ShopProductSet.php`, `admin/templates/shop-product-sets/view-list.php`, `admin/templates/shop-product-sets/set-edit.php`.
|
||||
- `shop\ProductSet` przepiety na fasade do `Domain\ProductSet\ProductSetRepository`.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.273)
|
||||
- Dodano modul domenowy `Domain/Producer/ProducerRepository.php`.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.274)
|
||||
- Dodano modul domenowy `Domain/Client/ClientRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopClientsController.php`.
|
||||
- Modul `/admin/shop_clients/*` dziala na nowych widokach opartych o `components/table-list`.
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopClients.php`, `autoload/admin/factory/class.ShopClients.php`.
|
||||
- Routing i menu admin przepiete na kanoniczny URL `/admin/shop_clients/list/`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopProducerController.php`.
|
||||
- Modul `/admin/shop_producer/*` dziala na nowych widokach (`producers-list`, `producer-edit`).
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopProducer.php`, `admin/templates/shop-producer/list.php`, `admin/templates/shop-producer/edit.php`.
|
||||
- `shop\Producer` przepiety na fasade do `Domain\Producer\ProducerRepository`.
|
||||
- `admin\controls\ShopProduct` uzywa `ProducerRepository::allProducers()`.
|
||||
- Usunieto 6 pustych factory facades: `admin\factory\Languages`, `admin\factory\Newsletter`, `admin\factory\Scontainers`, `admin\factory\ShopProducer`, `admin\factory\ShopTransport`, `admin\factory\Layouts`.
|
||||
- Przepieto 2 wywolania `admin\factory\ShopTransport` w `admin\factory\ShopProduct` na `Domain\Transport\TransportRepository`.
|
||||
- Usuniety fallback do `admin\factory\Layouts` w `admin\controls\ShopProduct`.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.274)
|
||||
- Dodano kontroler DI `admin/Controllers/ShopProductController.php` (akcje `mass_edit`, `mass_edit_save`, `get_products_by_category`).
|
||||
- Routing `admin\Site` rozszerzono o mapowanie `ShopProduct` do nowego kontrolera.
|
||||
- `Domain/Product/ProductRepository.php` rozszerzono o metody dla mass-edit: `allProductsForMassEdit`, `getProductsByCategory`, `applyDiscountPercent`.
|
||||
- Usunieto legacy akcje mass-edit z `autoload/admin/controls/class.ShopProduct.php`.
|
||||
- Widok `/admin/shop_product/mass_edit/` przepiety na nowy partial `admin/templates/shop-product/mass-edit-custom-script.php`.
|
||||
- Ujednolicono UI drzewek (strzalki/expand) w:
|
||||
- `admin/templates/pages/pages-list.php` + `admin/templates/pages/subpages-list.php`
|
||||
- `admin/templates/articles/subpages-list.php` + `admin/templates/articles/article-edit-custom-script.php`
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.275)
|
||||
- Dodano modul domenowy `Domain/Category/CategoryRepository.php`.
|
||||
- Dodano kontroler DI `admin/Controllers/ShopCategoryController.php`.
|
||||
- Modul `/admin/shop_category/*` dziala przez DI i kanoniczny URL `/admin/shop_category/list/` (z zachowaniem aliasu `view_list`).
|
||||
- Widoki `shop-category/*` maja wydzielone skrypty `*-custom-script.php` i ujednolicone strzalki drzewa (`button + caret + aria-expanded`).
|
||||
- Endpointy AJAX dla drzewka kategorii i kolejnosci produktow przepiete na `/admin/shop_category/save_categories_order/`, `/admin/shop_category/save_products_order/`, `/admin/shop_category/cookie_categories/`.
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopCategory.php`, `autoload/admin/factory/class.ShopCategory.php`, `autoload/admin/view/class.ShopCategory.php`.
|
||||
- Przepieto zaleznosci `ShopProduct` z `admin\factory\ShopCategory` na `Domain\Category\CategoryRepository`.
|
||||
- Usunieto preload `autoload/admin/factory/class.ShopCategory.php` z `libraries/grid/config.php`.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-15 (ver. 0.277) - ShopProduct (factory)
|
||||
- `Domain/Product/ProductRepository.php` rozszerzono o ~40 metod: CRUD, save, delete, duplicate, toggleStatus, updatePrice, kombinacje, zdjecia/pliki, Google Feed XML, custom labels.
|
||||
- `admin/Controllers/ShopProductController.php` rozszerzono o ~30 akcji obslugujacych caly modul produktow.
|
||||
- Konstruktor kontrolera teraz przyjmuje `ProductRepository` + `IntegrationsRepository`.
|
||||
- Routing w `admin\Site` zaktualizowany (dodano `IntegrationsRepository`, blokada fallbacku na legacy).
|
||||
- Przepieto zaleznosci zewnetrzne: `ProductArchiveController`, `order-details.php`, `cron.php`, `cron-xml.php`, `products-list-table.php`, `stock.php`.
|
||||
- Przepieto endpointy AJAX z `admin/ajax.php` na kontroler: `product_file_delete`, `product_file_name_change`.
|
||||
- Przepieto `cookie_categories` w widokach product-edit i mass-edit na `/admin/shop_category/cookie_categories/`.
|
||||
- Usunieto legacy: `autoload/admin/controls/class.ShopProduct.php`, `autoload/admin/factory/class.ShopProduct.php`, `admin/ajax/shop.php`.
|
||||
- Usunieto `require_once 'ajax/shop.php'` z `admin/ajax.php`.
|
||||
|
||||
## Dodatkowa aktualizacja 2026-02-16 (ver. 0.277) - Dashboard, Update, legacy cleanup, admin\App
|
||||
- Dodano `Domain/Dashboard/DashboardRepository.php` (7 metod, Redis caching).
|
||||
- Dodano `admin/Controllers/DashboardController.php` (DI z DashboardRepository + ShopStatusRepository).
|
||||
- Dodano `Domain/Update/UpdateRepository.php` (update, runPendingMigrations, helper methods).
|
||||
- Dodano `admin/Controllers/UpdateController.php` (DI z UpdateRepository).
|
||||
- Przepisano `admin/templates/update/main-view.php` — usunieto `gridEdit`, `$.prompt()`, zastapiono panelami + `$.confirm()`.
|
||||
- Usunieto `autoload/admin/factory/class.Articles.php` (martwy kod), przeniesiono `articles_by_date_add` do `ArticleRepository`.
|
||||
- Przepieto `front\factory\Newsletter` na `ArticleRepository::articlesByDateAdd()`.
|
||||
- Przeniesiono logike z `admin\view\Page::show()` do `admin\App::render()`.
|
||||
- Przemianowano `admin\Site` na `admin\App` (plik `App.php`).
|
||||
- Usunieto fallback na `\admin\controls\` w routing (martwy kod).
|
||||
- Usunieto puste foldery: `autoload/admin/controls/`, `autoload/admin/factory/`, `autoload/admin/view/`.
|
||||
- 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`, `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).
|
||||
|
||||
## Aktualizacja 2026-02-16 - class.S.php migration, Mobile_Detect removal, S cleanup
|
||||
- USUNIETA: `class.Mobile_Detect.php` — przestarzala detekcja mobilna (UA v2.8.16), zastapiona responsive design.
|
||||
- USUNIETA: metoda `S::is_mobile()` i 3 warunki mobilne w `front\view\Site` (m_html/m_css/m_js zawsze puste).
|
||||
- USUNIETE z `LayoutsRepository`: pola `m_html`, `m_css`, `m_js` (save + defaultLayout).
|
||||
- CLEANUP `class.S.php`: usunieto 12 nieuzywanych metod (set_array_value, parse_name, clear_redis_cache, get_domain, pre_dump, escape, chmod_r, rrmdir, rcopy, pre, json_to_array, is_empty_dir).
|
||||
- FIX: `array_cartesian_product()` — iteracja po niezdefiniowanej zmiennej `$array` zamiast parametru `$input`.
|
||||
- PRZENIESIONA: `class.S.php` → `Shared\Helpers\Helpers` (namespace `Shared\Helpers`, klasa `Helpers`).
|
||||
- ZAMIENIONE: ~140 plikow — `\S::` → `\Shared\Helpers\Helpers::`.
|
||||
- NOWY: `tests/stubs/Helpers.php` — stub klasy Helpers dla testow.
|
||||
- USUNIETA: `autoload/class.S.php` — zastapiona przez `Shared\Helpers\Helpers`.
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.286) - Layouts, Menu, Pages frontend migration
|
||||
- NOWE METODY w `Domain/Layouts/LayoutsRepository.php`: `categoryDefaultLayoutId()`, `getDefaultLayout()`, `getProductLayout()`, `getArticleLayout()`, `getCategoryLayout()`, `getActiveLayout()`.
|
||||
- NOWE METODY w `Domain/Pages/PagesRepository.php`: `frontPageDetails()`, `frontPageSort()`, `frontMainPageId()`, `frontLangUrl()`, `frontMenuDetails()`, `frontMenuPages()`.
|
||||
- NOWY: `front\Views\Menu` — czysty VIEW (`pages()`, `menu()`).
|
||||
- USUNIETA: `front\factory\class.Layouts.php` — logika przeniesiona do `LayoutsRepository`.
|
||||
- USUNIETA: `front\factory\class.Menu.php` — logika przeniesiona do `PagesRepository`.
|
||||
- USUNIETA: `front\factory\class.Pages.php` — logika przeniesiona do `PagesRepository`.
|
||||
- USUNIETA: `front\view\class.Menu.php` — zastapiona przez `front\Views\Menu`.
|
||||
- USUNIETA: `templates\menu\submenu.php` — martwy kod.
|
||||
|
||||
## Aktualizacja 2026-02-17 - Tpl namespace, CurlServer removal, thumb.php fix
|
||||
- NOWY: `autoload/Shared/Tpl/Tpl.php` — silnik szablonow w namespace `Shared\Tpl`.
|
||||
- USUNIETA: `autoload/class.Tpl.php` — zastapiona przez `Shared\Tpl\Tpl`.
|
||||
- USUNIETA: `autoload/curl.class.php` — klasa `CurlServer` bez referencji w projekcie.
|
||||
- ZAMIENIONE: ~135 plikow — `\Tpl::` / `new \Tpl` → `\Shared\Tpl\Tpl::` / `new \Shared\Tpl\Tpl`.
|
||||
- FIX: `libraries/thumb.php` — require przepiety na `Shared/Image/ImageManipulator.php`, poprawiony short open tag.
|
||||
- FIX: `Tpl::render()` branch 3 — sprawdzal `../templates_user/` ale ladowal `../templates/`.
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.289) - ShopCategory + ShopClient frontend migration
|
||||
- **ShopCategory (frontend)** — migracja factory + view na Domain + Views
|
||||
- NOWE METODY w `CategoryRepository`: `getCategorySort()`, `categoryName()`, `categoryUrl()`, `frontCategoryDetails()`, `categoriesTree()`, `blogCategoryProducts()`, `categoryProductsCount()`, `productsId()`, `paginatedCategoryProducts()` — z Redis cache, language fallback SQL, stale zamiast magic numbers
|
||||
- NOWY: `front\Views\ShopCategory` — czysty VIEW (`categoryDescription()`, `categoryView()`, `categories()`)
|
||||
- USUNIETA: `front\factory\class.ShopCategory.php` — logika przeniesiona do `CategoryRepository`
|
||||
- USUNIETA: `front\view\class.ShopCategory.php` — zastapiona przez `front\Views\ShopCategory`
|
||||
- **ShopClient (frontend)** — migracja factory + view + controls na Domain + Views + Controllers
|
||||
- NOWE METODY w `ClientRepository`: `clientDetails()`, `clientEmail()`, `clientAddresses()`, `addressDetails()`, `addressDelete()`, `addressSave()`, `markAddressAsCurrent()`, `clientOrders()`, `authenticate()`, `createClient()`, `confirmRegistration()`, `generateNewPassword()`, `initiatePasswordRecovery()`
|
||||
- NOWY: `front\Views\ShopClient` — czysty VIEW (8 metod camelCase)
|
||||
- NOWY: `front\Controllers\ShopClientController` — instancyjny kontroler z DI (15 metod + `buildEmailBody()` helper)
|
||||
- USUNIETA: `front\factory\class.ShopClient.php`, `front\view\class.ShopClient.php`, `front\controls\class.ShopClient.php`
|
||||
- SECURITY FIX: usuniety hardcoded password bypass `'Legia1916'`
|
||||
- OPTYMALIZACJA: `buildEmailBody()` deduplikuje 4x powtorzony wzorzec budowania emaili z newslettera
|
||||
- OPTYMALIZACJA: `addressSave()` przyjmuje `array $data` zamiast 6 parametrow
|
||||
|
||||
---
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.290) - ShopCoupon + ShopOrder frontend migration
|
||||
- **ShopCoupon (frontend)** — migracja controls + factory na Domain + Controllers
|
||||
- NOWE METODY w `CouponRepository`: `findByName()`, `isAvailable()`, `markAsUsed()`, `incrementUsedCount()`
|
||||
- NOWY: `front\Controllers\ShopCouponController` — instancyjny kontroler z DI (`useCoupon()`, `deleteCoupon()`)
|
||||
- KONWERSJA: `shop\Coupon` na fasade z dzialajacymi metodami (`is_one_time()`, `set_as_used()`)
|
||||
- FIX: kupony jednorazowe nigdy nie byly oznaczane jako uzyte
|
||||
- USUNIETA: `front\controls\class.ShopCoupon.php`, `front\factory\class.ShopCoupon.php`
|
||||
- **ShopOrder (frontend)** — migracja controls + factory + view na Domain + Controllers
|
||||
- NOWE METODY w `OrderRepository`: `findIdByHash()`, `findHashById()`, `orderDetailsFrontend()`, `generateOrderNumber()`, `createFromBasket()` (~180 linii logiki basket_save)
|
||||
- NOWY: `front\Controllers\ShopOrderController` — instancyjny kontroler z DI (`paymentConfirmation()`, `paymentStatusTpay()`, `paymentStatusPrzelewy24pl()`, `paymentStatusHotpay()`, `orderDetails()`)
|
||||
- POPRAWA: webhooks przelewy24/hotpay — ujednolicone z tpay (set_as_paid + update_status zamiast recznego $mdb->update)
|
||||
- UPDATE: `ShopBasketController` — DI OrderRepository, zmiana wywolan basket_save/order_hash
|
||||
- UPDATE: `ClientRepository::clientOrders()`, `shop\Order::order_resend_confirmation_email()`, `cron-turstmate.php` — przepiete na `OrderRepository`
|
||||
- USUNIETA: `front\controls\class.ShopOrder.php`, `front\factory\class.ShopOrder.php`, `front\view\class.ShopOrder.php`
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.291) - ShopProducer frontend migration
|
||||
- NOWA METODA w `ProducerRepository`: `allActiveProducers()` — pełne dane aktywnych producentów
|
||||
- NOWY: `front\Controllers\ShopProducerController` — instancyjny kontroler z DI (products, list)
|
||||
- USUNIETA: `front\controls\class.ShopProducer.php` — logika przeniesiona do kontrolera + repo
|
||||
- USUNIETA: `autoload\shop\class.Producer.php` — fasada niepotrzebna
|
||||
- UPDATE: `front\view\Site::show()` — przepiecie na `$producerRepo->findForFrontend()`
|
||||
- UPDATE: `front\controls\Site::getControllerFactories()` — zarejestrowany `ShopProducer`
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.293) - front\controls\Site + front\view\Site → front\App + front\LayoutEngine
|
||||
- Przemianowano `front\controls\Site` na `front\App` (plik `App.php`) — router z camelCase metodami.
|
||||
- Przemianowano `front\view\Site` na `front\LayoutEngine` (plik `LayoutEngine.php`) — layout engine z camelCase metodami.
|
||||
- Przepiete call sites: `index.php` (3 miejsca), `ajax.php` (1 miejsce).
|
||||
- Usuniete pliki: `autoload/front/controls/class.Site.php`, `autoload/front/view/class.Site.php`.
|
||||
- Usuniete puste foldery: `autoload/front/controls/`, `autoload/front/view/`.
|
||||
- Pelna migracja frontendu zakonczona — struktura `autoload/front/`: `App.php`, `LayoutEngine.php`, `Controllers/`, `Views/`.
|
||||
|
||||
## Aktualizacja 2026-02-17 (ver. 0.292) - ShopProduct + ShopPaymentMethod + ShopPromotion + ShopStatuses + ShopTransport frontend migration
|
||||
- **Pelna migracja front\factory\** — USUNIETY caly folder `autoload/front/factory/`; 5 ostatnich klas zmigrowanych:
|
||||
- `front\factory\ShopProduct` (~410 linii) → `ProductRepository` (~20 nowych metod frontendowych)
|
||||
- `front\factory\ShopPaymentMethod` → `PaymentMethodRepository` (metody frontendowe z Redis cache)
|
||||
- `front\factory\ShopPromotion` → `PromotionRepository` (5 metod applyType*)
|
||||
- `front\factory\ShopStatuses` → przepiecie bezposrednio na `ShopStatusRepository`
|
||||
- `front\factory\ShopTransport` → `TransportRepository` (4 metody frontendowe z Redis cache)
|
||||
- Usuniete legacy: `front\controls\class.ShopProduct.php`, `front\view\class.ShopPaymentMethod.php`, `front\view\class.ShopTransport.php`, `shop\class.PaymentMethod.php`
|
||||
- FIX: broken `transports_list()` w ajax.php → nowa metoda `forPaymentMethod()`
|
||||
- Pelna migracja frontendu zakonczona — `autoload/front/`: `App.php`, `LayoutEngine.php`, `Controllers/`, `Views/`
|
||||
|
||||
---
|
||||
*Dokument aktualizowany: 2026-02-17 (ver. 0.293)*
|
||||
### Nazewnictwo katalogow
|
||||
- Nowe: z duzej litery (`Views/`, `Controllers/`)
|
||||
- Namespace `\admin\` z malej (bo katalog `admin/` jest z malej na serwerze Linux)
|
||||
- NIE uzywac `\Admin\` (duze A)
|
||||
|
||||
Reference in New Issue
Block a user