# Struktura Projektu shopPRO Dokumentacja struktury projektu shopPRO do szybkiego odniesienia. ## System Cache (Redis) ### Klasy odpowiedzialne za cache #### 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 (`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 #### 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 #### Helpers (`Shared\Helpers\Helpers`) - **Plik:** `autoload/Shared/Helpers/Helpers.php` - **Metody cache:** - `clear_product_cache(int $product_id)` - czyści cache konkretnego produktu ### Wzorce kluczy Redis #### Produkty ``` shop\product:{product_id}:{lang_id}:{permutation_hash} ``` - Przechowuje zserializowany obiekt produktu - TTL: 24 godziny (86400 sekund) - Klasa: `shop\Product::getFromCache()` - `autoload/shop/class.Product.php:121` #### Opcje ilościowe produktu ``` \shop\Product::get_product_permutation_quantity_options:{product_id}:{permutation} ``` - Przechowuje informacje o ilości i komunikatach magazynowych - Klasa: `shop\Product::get_product_permutation_quantity_options()` - `autoload/shop/class.Product.php:549` #### Zestawy produktów ``` \shop\Product::product_sets_when_add_to_basket:{product_id} ``` - Przechowuje produkty często kupowane razem - Klasa: `shop\Product::product_sets_when_add_to_basket()` - `autoload/shop/class.Product.php:316` ## 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 │ │ ├── Controllers/ # Nowe kontrolery DI (Newsletter, ShopBasket) │ │ ├── Views/ # Nowe widoki (Newsletter, Articles, Languages, Banners, Menu, Scontainers) │ │ ├── controls/ # Kontrolery legacy (Site, ...) │ │ ├── view/ # Widoki legacy (Site, ...) │ │ └── factory/ # Fabryki/helpery (fasady) │ └── shop/ # Klasy sklepu ├── docs/ # Dokumentacja techniczna ├── libraries/ # Biblioteki zewnętrzne ├── temp/ # Cache tymczasowy ├── thumbs/ # Miniatury zdjęć └── cron.php # Zadania CRON ``` ## Baza danych ### 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 ### 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) ### 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 Pelna dokumentacja tabel: `DATABASE_STRUCTURE.md` ## Konfiguracja ### Redis - Konfiguracja: `config.php` (zmienna `$config['redis']`) - Parametry: host, port, password ### Autoload - Funkcja: `__autoload_my_classes()` w `cron.php:6` - Wzorzec: `autoload/{namespace}/class.{ClassName}.php` ## Klasy pomocnicze ### \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 ### Medoo - Plik: `libraries/medoo/medoo.php` - Zmienna: `$mdb` - ORM do operacji na bazie danych ## Najważniejsze wzorce ### 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\` - helpery/fabryki frontend - `\shop\` - klasy sklepu (Product, Order, itp.) ### Cachowanie produktów ```php // Pobranie produktu z cache $product = \shop\Product::getFromCache($product_id, $lang_id, $permutation_hash); // Czyszczenie cache produktu \Shared\Helpers\Helpers::clear_product_cache($product_id); ``` ## Refaktoryzacja do Domain-Driven Architecture ### 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/ │ ├── Controllers/ # Nowe kontrolery frontendowe (namespace \front\Controllers\) z DI │ ├── Views/ # Nowe widoki (namespace \front\Views\) — czyste VIEW, statyczne (Menu, Newsletter, Articles, Languages, Banners, Scontainers) │ ├── controls/ # Legacy kontrolery (fallback) │ ├── factory/ # Legacy helpery (stopniowo migrowane) │ └── view/ # Legacy widoki ├── shop/ # Legacy - fasady do Domain ``` **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`. **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. **Aktualizacja 2026-02-14 (ver. 0.270):** - `shop\Order` zapisuje nieudane syncy Apilo (status/platnosc) do kolejki `temp/apilo-sync-queue.json`. - `cron.php` automatycznie ponawia zalegle syncy (`Order::process_apilo_sync_queue()`). - `shop\Order::set_as_paid()` 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/`. --- *Dokument aktualizowany: 2026-02-17 (ver. 0.286)*