Files
shopPRO/docs/PROJECT_STRUCTURE.md
Jacek Pyziak 437d4c78dc ver. 0.288: BasketCalculator + ShopBasketController migration, cms\Layout removal
- Migrate front\factory\ShopBasket → Domain\Basket\BasketCalculator (4 static methods, 18 callers updated)
- Migrate front\controls\ShopBasket → front\Controllers\ShopBasketController (camelCase, instance methods)
- Add snake_case→camelCase action dispatch for new controllers in Site::route()
- Update title()/page_title() to check front\Controllers\ before fallback
- Remove cms\Layout class (replaced by $layoutsRepo->find())
- Add 8 tests for BasketCalculator (484 tests, 1528 assertions)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:38:45 +01:00

25 KiB

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

// 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:

// 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.phpShared\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)