# Struktura bazy danych shopPRO Plik aktualizowany na bieżąco przy zmianach w kodzie. ORM: Medoo (`$mdb`), prefix tabel: `pp_` ## pp_shop_products Główna tabela produktów. | Kolumna | Opis | |---------|------| | id | PK | | parent_id | FK do produktu nadrzędnego (kombinacje) - NULL dla produktów głównych | | price_brutto | Cena brutto | | price_brutto_promo | Cena promocyjna brutto | | quantity | Stan magazynowy | | status | Status: 1 = aktywny, 0 = nieaktywny | | archive | Archiwum: 1 = zarchiwizowany, 0 = aktywny | | promoted | Czy promowany | | vat | Stawka VAT | | ean | Kod EAN | | sku | Kod SKU | | baselinker_product_name | Nazwa produktu w Baselinker | | apilo_product_name | Nazwa produktu w Apilo | **Używane w:** `Domain\Product\ProductRepository`, `admin\factory\ShopProduct` ## pp_shop_products_langs Tłumaczenia produktów (per język). | Kolumna | Opis | |---------|------| | id | PK | | product_id | FK do pp_shop_products | | lang_id | ID języka (np. 'pl') | | name | Nazwa produktu | **Używane w:** `Domain\Product\ProductRepository::getName()` ## pp_shop_products_images Zdjęcia produktów. | Kolumna | Opis | |---------|------| | id | PK | | product_id | FK do pp_shop_products | | src | Ścieżka do pliku | | alt | Tekst alternatywny | ## pp_shop_products_categories Przypisanie produktów do kategorii. | Kolumna | Opis | |---------|------| | product_id | FK do pp_shop_products | **Używane w:** `admin\factory\ShopProduct::product_delete()` ## pp_banners Banery. | Kolumna | Opis | |---------|------| | id | PK | | name | Nazwa banera | | status | 0/1 | | date_start | Data rozpoczęcia | | date_end | Data zakończenia | | home_page | Czy na stronie głównej 0/1 | **Używane w:** `Domain\Banner\BannerRepository` ## pp_banners_langs Tłumaczenia banerów. | Kolumna | Opis | |---------|------| | id | PK | | id_banner | FK do pp_banners | | id_lang | ID języka | | src | Ścieżka do grafiki | | url | URL docelowy | | html | Kod HTML | | text | Tekst | **Używane w:** `Domain\Banner\BannerRepository` ## pp_articles Artykuły. | Kolumna | Opis | |---------|------| | id | PK | | status | -1 = archiwum, 0 = nieaktywny, 1 = aktywny | **Używane w:** `admin\controls\ArticlesArchive`, `Domain\Article\ArticleRepository::find()` ## pp_articles_pages Strony artykułów. | Kolumna | Opis | |---------|------| | article_id | FK do pp_articles | | page_id | FK do strony (pp_pages) | | o | Kolejność | **Używane w:** `Domain\Article\ArticleRepository::find()`, `Domain\Article\ArticleRepository::deleteNonassignedImages()` ## pp_articles_langs Tłumaczenia artykułów. | Kolumna | Opis | |---------|------| | article_id | FK do pp_articles | | lang_id | ID języka (np. 'pl') | | title | Tytuł artykułu | | seo_link | Link SEO artykułu | **Używane w:** `Domain\Article\ArticleRepository::find()`, `Domain\Article\ArticleRepository::deleteNonassignedFiles()` ## pp_articles_images Zdjęcia artykułów. | Kolumna | Opis | |---------|------| | article_id | FK do pp_articles | | src | Ścieżka do pliku | | o | Kolejność | | id | PK (używane też do sortowania DESC) | **Używane w:** `Domain\Article\ArticleRepository::find()` ## pp_articles_files Pliki artykułów. | Kolumna | Opis | |---------|------| | article_id | FK do pp_articles | | src | Ścieżka do pliku | **Używane w:** `Domain\Article\ArticleRepository::find()` ## pp_units Jednostki/slowniki (np. jednostki produktu). | Kolumna | Opis | |---------|------| | id | PK | **Używane w:** `Domain\Dictionaries\DictionariesRepository`, `admin\controls\ShopProduct` ## pp_units_langs Tlumaczenia jednostek (per jezyk). | Kolumna | Opis | |---------|------| | id | PK | | unit_id | FK do pp_units | | lang_id | ID jezyka (np. 'pl') | | text | Nazwa jednostki | **Używane w:** `Domain\Dictionaries\DictionariesRepository` ## pp_users Uzytkownicy panelu administratora. | Kolumna | Opis | |---------|------| | id | PK | | login | Login / e-mail uzytkownika | | password | Hash hasla (legacy: md5) | | status | Status konta: 1 = aktywny, 0 = zablokowany | | admin | Flaga dostepu do panelu admin | | error_logged_count | Licznik nieudanych logowan | | last_logged | Data ostatniego poprawnego logowania | | last_error_logged | Data ostatniej nieudanej proby logowania | | twofa_enabled | Czy wlaczone 2FA (0/1) | | twofa_email | E-mail do wysylki kodu 2FA | | twofa_code_hash | Hash aktualnego kodu 2FA | | twofa_expires_at | Data waznosci kodu 2FA | | twofa_sent_at | Data ostatniej wysylki kodu 2FA | | twofa_failed_attempts | Liczba nieudanych prob 2FA | **Uzywane w:** `Domain\User\UserRepository`, `admin\Controllers\UsersController`, `admin\factory\Users` **Aktualizacja 2026-02-12:** uzycia `pp_users` sa prowadzone przez `Domain\\User\\UserRepository` (legacy `admin\\factory\\Users` usunieto). ## pp_langs Jezyki panelu i frontendu. | Kolumna | Opis | |---------|------| | id | PK (2-literowe ID jezyka, np. pl, en) | | name | Nazwa jezyka | | status | 1 = aktywny, 0 = nieaktywny | | start | 1 = domyslny jezyk | | o | Kolejnosc | **Uzywane w:** `Domain\\Languages\\LanguagesRepository`, `admin\\Controllers\\LanguagesController`, `admin\\factory\\Languages`, `front\\factory\\Languages` ## pp_langs_translations Slownik tlumaczen panelu/frontendu. | Kolumna | Opis | |---------|------| | id | PK | | text | Klucz/tekst bazowy | | | Kolumny dynamiczne per jezyk (np. pl, en) | **Uzywane w:** `Domain\\Languages\\LanguagesRepository`, `admin\\Controllers\\LanguagesController`, `front\\factory\\Languages` **Aktualizacja 2026-02-12:** modul jezykow i tlumaczen (`pp_langs`, `pp_langs_translations`) obslugiwany przez `Domain\\Languages\\LanguagesRepository`.