update
This commit is contained in:
@@ -1,30 +1,31 @@
|
|||||||
# Project: interblue.pl
|
# PROJECT — interblue.pl
|
||||||
|
|
||||||
## Description
|
**Projekt:** interblue.pl
|
||||||
Bieżące poprawki i rozwój istniejącego sklepu PrestaShop 1.7.x — elektronika oświetleniowa B2C.
|
**Utworzono:** 2026-05-20
|
||||||
|
**Typ:** Sklep e-commerce PrestaShop 1.7.x
|
||||||
|
|
||||||
## Core Value
|
## Krotki opis
|
||||||
Klienci B2C mogą kupić elektronikę oświetleniową online.
|
|
||||||
|
|
||||||
## Requirements
|
Sklep internetowy oparty na PrestaShop 1.7.x z wlasnym motywem `InterBlue` i rozbudowanym zestawem modulow (130+). Kod jest zywa instalacja PrestaShop wdrazana na produkcje przez FTP.
|
||||||
|
|
||||||
### Must Have
|
## Wartosc biznesowa
|
||||||
- [To be defined during planning]
|
|
||||||
|
|
||||||
### Should Have
|
- Sprzedaz online w sklepie interblue.pl.
|
||||||
- [To be defined during planning]
|
- Integracje z marketplace'ami (Allegro, Empik) i platnoscia/wysylka (DPD, InPost, Poczta Polska, Paczka w Ruchu, BaseLinker).
|
||||||
|
- One-page checkout (`onepagecheckoutps`) jako sciezka konwersji.
|
||||||
|
|
||||||
### Nice to Have
|
## Aktualny status
|
||||||
- [To be defined during planning]
|
|
||||||
|
|
||||||
## Constraints
|
- Sklep produkcyjny, kod utrzymywany w jednym repozytorium (gałąź `main`).
|
||||||
- PrestaShop 1.7.x — zmiany muszą być kompatybilne z tą wersją
|
- Wdrazanie zmian: edycja lokalna -> Live Sass Compiler dla SCSS -> reczny upload przez SFTP/FTP Sync.
|
||||||
- Deployment przez FTP (brak CI/CD)
|
- Po zmianach w PHP/override/szablonach wymagane czyszczenie cache PrestaShop.
|
||||||
- Cache PrestaShop musi być czyszczony ręcznie po zmianach PHP/override
|
|
||||||
|
|
||||||
## Success Criteria
|
## Trwale wymagania i ograniczenia
|
||||||
- Klienci B2C mogą kupić elektronikę oświetleniową online
|
|
||||||
- [To be refined during planning]
|
|
||||||
|
|
||||||
---
|
- PrestaShop 1.7.x — zmiany przez hooks i overrides, nie edycje rdzenia.
|
||||||
*Created: 2026-04-27*
|
- Override `override/classes/order/Order.php` wspoldzielony przez moduly `AddOrderExtraFields` i `modrefchange` — konflikty wymagaja uwagi.
|
||||||
|
- Po aktualizacji `empikmarketplace` nadpisywany jest widok katalogu produktow w adminie (`views/PrestaShop/Admin/Product/CatalogPage/Lists/`).
|
||||||
|
- Sciezka admina: `admin658c34/` (security through obscurity).
|
||||||
|
- Lokalizacja podstawowa: polska; tlumaczenia przez `$this->l('...')` w modulach.
|
||||||
|
- Wdrozenia: brak CI/CD; FTP reczny — kazda zmiana wymaga swiadomego uploadu.
|
||||||
|
- Cache: `var/cache/` musi byc czyszczony po zmianach w klasach, overrides, szablonach.
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
# Roadmap: interblue.pl
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
Bieżące poprawki i rozwój istniejącego sklepu PrestaShop 1.7.x (interblue.pl) — elektronika oświetleniowa B2C.
|
|
||||||
|
|
||||||
## Current Milestone
|
|
||||||
**v0.1 Initial Release** (v0.1.0)
|
|
||||||
Status: In progress
|
|
||||||
Phases: 0 of 1 complete
|
|
||||||
|
|
||||||
## Phases
|
|
||||||
|
|
||||||
| Phase | Name | Plans | Status | Completed |
|
|
||||||
|-------|------|-------|--------|-----------|
|
|
||||||
| 1 | order-source-api | 1 | Planning | - |
|
|
||||||
|
|
||||||
## Phase Details
|
|
||||||
|
|
||||||
### Phase 1: order-source-api
|
|
||||||
**Goal:** Add `order_source` virtual field to PrestaShop webservice API orders endpoint.
|
|
||||||
**Scope:** Extend `override/classes/order/Order.php` with a getter that returns `$this->module` as `order_source`.
|
|
||||||
**Plans:** 01-01-PLAN.md
|
|
||||||
|
|
||||||
---
|
|
||||||
*Roadmap updated: 2026-04-27*
|
|
||||||
@@ -1,54 +1,33 @@
|
|||||||
# Project State
|
# STATE — interblue.pl
|
||||||
|
|
||||||
## Project Reference
|
**Aktualizacja:** 2026-05-20
|
||||||
|
**Tryb:** plan-first (`.paul/plans/`)
|
||||||
|
|
||||||
See: .paul/PROJECT.md (updated 2026-04-27)
|
## Aktywna praca
|
||||||
|
|
||||||
**Core value:** Klienci B2C mogą kupić elektronikę oświetleniową online
|
Brak aktywnego planu. Katalog `.paul/plans/` jest pusty.
|
||||||
**Current focus:** Bieżące poprawki — faza 1 zamknięta
|
|
||||||
|
|
||||||
## Current Position
|
## Sugerowane nastepne dzialanie
|
||||||
|
|
||||||
Milestone: v0.1 Initial Release
|
1. `$paul-map-codebase` — pelne mapowanie kodu i Quality Radar dla 130+ modulow, overrides i motywu.
|
||||||
Phase: 1 of 1 (order-source-api) — Complete
|
2. `$paul-plan [opis pracy]` — jezeli zadanie jest juz znane (np. fix override, integracja modulu, zmiana w szablonie).
|
||||||
Plan: 01-01 complete
|
|
||||||
Status: Loop zamknięty — gotowy na nowy PLAN
|
|
||||||
Last activity: 2026-04-27 — UNIFY 01-01 zakończony
|
|
||||||
|
|
||||||
Progress:
|
## Kontekst legacy (opcjonalny)
|
||||||
- Milestone: [██░░░░░░░░] 20%
|
|
||||||
- Phase 1: [██████████] 100%
|
|
||||||
|
|
||||||
## Loop Position
|
- Roadmap/milestones nie sa wymagane w trybie plan-first.
|
||||||
|
- Wczesniejsze artefakty `.paul/phases/`, `.paul/docs/` z poprzedniej inicjalizacji zostaly usuniete (widoczne w `git status` jako `D`).
|
||||||
|
|
||||||
Current loop state:
|
## Quality Radar
|
||||||
```
|
|
||||||
PLAN ──▶ APPLY ──▶ UNIFY
|
|
||||||
✓ ✓ ✓ [Loop complete — ready for next PLAN]
|
|
||||||
```
|
|
||||||
|
|
||||||
## Accumulated Context
|
- Wlaczony, lekki tryb (codebase-memory-mcp).
|
||||||
|
- `jscpd` i `ast-grep` wylaczone domyslnie — uruchamiane na zadanie.
|
||||||
|
|
||||||
### Decisions
|
### Codebase Mapped
|
||||||
- `order_source` to prawdziwe pole DB w `ps_orders` (ENUM: 'Allegro', 'Sklep int.', 'Telefonicznie')
|
Date: 2026-05-20
|
||||||
- Dodana przez moduł `AddOrderExtraFields` (ALTER TABLE ps_orders ADD order_source)
|
Documents: `.paul/codebase/` (stack, architecture, conventions, testing, integrations, db_schema, impact_map, quality_risks, tooling_status)
|
||||||
- Widoczna w adminie przez moduł `ordersextracolumns`
|
Quality Radar: degraded (codebase-memory-mcp nie zaindeksowal repo; jscpd/ast-grep disabled by policy)
|
||||||
- Webservice eksponuje pole automatycznie przez $definition — nie potrzeba webserviceParameters
|
|
||||||
- Lokalny override/classes/order/Order.php zsynchronizowany z AddOrderExtraFields/_overrides/Order-modrefchange.php
|
|
||||||
- Zamówienia sprzed 2023-04-20 mają order_source=null w API (ordersextracolumns wypełniało tę datę warunkowo)
|
|
||||||
|
|
||||||
### Deferred Issues
|
### Krytyczne ustalenia (do $paul-plan)
|
||||||
- Dostawca powinien obsłużyć null w order_source dla starszych zamówień po stronie swojej aplikacji
|
- `.vscode/ftp-kr.json` zawiera plaintext credentials FTP — pilne wycofanie z repo i zmiana hasla.
|
||||||
|
- `.gitignore` jest pusty — ryzyko commitowania logow i feedow.
|
||||||
### Blockers/Concerns
|
- `modules/AddOrderExtraFields` ma blad skladniowy w SQL ALTER i nadpisuje override w install().
|
||||||
Brak
|
|
||||||
|
|
||||||
## Session Continuity
|
|
||||||
|
|
||||||
Last session: 2026-04-27
|
|
||||||
Stopped at: UNIFY 01-01 zakończony, faza 1 kompletna
|
|
||||||
Next action: Nowy /paul:plan dla kolejnej poprawki lub zakończenie milestone
|
|
||||||
Resume file: .paul/phases/01-order-source-api/01-01-SUMMARY.md
|
|
||||||
|
|
||||||
---
|
|
||||||
*STATE.md — Updated after every significant action*
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
# 2026-04-27
|
|
||||||
|
|
||||||
## Co zrobiono
|
|
||||||
|
|
||||||
- [Faza 1, Plan 01] Dodano pole `order_source` do odpowiedzi webservice API PrestaShop (`/api/orders/`)
|
|
||||||
- Zsynchronizowano `override/classes/order/Order.php` z wersją AddOrderExtraFields (dodano `$order_source` i wpis w `$definition`)
|
|
||||||
- Zewnętrzna aplikacja dostawcy może teraz filtrować zamówienia po źródle (Allegro / Sklep int. / Telefonicznie)
|
|
||||||
|
|
||||||
## Zmienione pliki
|
|
||||||
|
|
||||||
- `override/classes/order/Order.php`
|
|
||||||
@@ -1,141 +1,58 @@
|
|||||||
# Architecture
|
# Architektura — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Pattern Overview
|
## Punkty wejścia
|
||||||
|
|
||||||
**Overall:** PrestaShop 1.7.x MVC Monolith with Hook System and Override Mechanism
|
- **Frontend:** `index.php` (front controller PS), routing przez `Dispatcher` rdzenia.
|
||||||
|
- **Backend (BO):** katalog admina o niestandardowej nazwie `admin658c34/` (security through obscurity).
|
||||||
|
- **Konsola/cron:** `custom-cron.php`, `custom-script.php` w roocie. Brak jednolitego command-bus — skrypty operacyjne uruchamiane bezpośrednio.
|
||||||
|
- **Importy/eksporty:** `import-products.php`, `export.php`, `export-csv.php`.
|
||||||
|
|
||||||
**Key Characteristics:**
|
## Warstwy
|
||||||
- Hook-based extensibility (modules register to hooks, PrestaShop fires them)
|
|
||||||
- Override mechanism (modules replace core classes by copying to `override/`)
|
|
||||||
- Smarty MVC — controllers prepare data, templates render it
|
|
||||||
- 133 modules active, many with overrides and custom hooks
|
|
||||||
- Symfony components embedded (service container, YAML) in PS 1.7 core
|
|
||||||
|
|
||||||
## Layers
|
1. **Smarty FO** — `themes/InterBlue/templates/` (catalog, checkout, customer, cms, layouts, _partials).
|
||||||
|
2. **Symfony BO** — częściowe wykorzystanie nowszych wzorców PS 1.7 (PageTemplate w `app/`, `src/`).
|
||||||
|
3. **CQRS dla Order** — `src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php` implementuje `src/Core/Domain/Order/QueryHandler/GetOrderForViewingHandlerInterface.php`; rezultaty w `src/Core/Domain/Order/QueryResult/`.
|
||||||
|
4. **Klasy ObjectModel** — rdzeń PS + overrides w `override/classes/`.
|
||||||
|
5. **Moduły** — 133 sztuki, każdy z własną klasą głównego pliku oraz potencjalnie `controllers/`, `views/`, `classes/`.
|
||||||
|
|
||||||
**Core PrestaShop Layer:**
|
## Flow zamówienia (kluczowy)
|
||||||
- Purpose: Framework, models, standard controllers
|
|
||||||
- Contains: `classes/` (models), `controllers/` (base front/admin), `config/`
|
|
||||||
- Key entry: `config/config.inc.php`, `config/bootstrap.php`
|
|
||||||
|
|
||||||
**Override Layer:**
|
- One-page checkout: `modules/onepagecheckoutps/` + override `override/controllers/front/OrderController.php`.
|
||||||
- Purpose: Replace core classes/controllers without touching core files
|
- Override `override/classes/order/Order.php` dodaje pole `order_source` (enum `Allegro`/`Sklep int.`/`Telefonicznie`) i emituje hooks PRZED przypisaniem numerów dokumentów:
|
||||||
- Contains: `override/classes/`, `override/controllers/`, `override/modules/`
|
- `actionBeforeAddOrder`
|
||||||
- Critical overrides: `override/classes/order/Order.php`, `override/classes/Hook.php`, `override/classes/Dispatcher.php`
|
- `actionBeforeAddOrderInvoice`
|
||||||
- Depends on: Core layer
|
- `actionBeforeAddDeliveryNumber`
|
||||||
- Risk: Multiple modules contributing to same override file
|
- Hooks używane przez `modules/modrefchange/` do zmiany schematu numeracji.
|
||||||
|
- Override generowany automatycznie podczas instalacji `modules/AddOrderExtraFields/`:
|
||||||
|
- jeśli `modrefchange` jest zainstalowany → kopiowany `_overrides/classes/order/Order-modrefchange.php`,
|
||||||
|
- w przeciwnym razie → `_overrides/classes/order/Order.php`.
|
||||||
|
- Dodatkowe overrides na klasach zamówień: `OrderCarrier.php`, `OrderHistory.php`, `OrderInvoice.php`, `OrderPayment.php` w `override/classes/order/`.
|
||||||
|
- Backup wersji starego flow: `override/controllers/front/OrderController.php_BK-OPC-PTS_2020-01-21` (legacy, do usunięcia/audytu).
|
||||||
|
|
||||||
**Module Layer:**
|
## Granice modułów / kluczowe integracje
|
||||||
- Purpose: Business features, marketplace integrations, shipping, payments
|
|
||||||
- Contains: `modules/` (133 modules)
|
|
||||||
- Custom modules: `modules/customfeaturetab/`, `modules/AddOrderExtraFields/`
|
|
||||||
- Hook registrations in each module's `install()` method
|
|
||||||
- Depends on: Override layer + Core layer
|
|
||||||
|
|
||||||
**Theme Layer:**
|
- **Marketplace:** `x13allegro`, `marzaallegro` (Allegro); `empikmarketplace`; `baselinker` (multi-platform sync).
|
||||||
- Purpose: Frontend rendering
|
- **Płatności:** `imoje`, `paybynet`, `przelewy24`, `ps_wirepayment`, `ps_cashondelivery`, `ps_checkpayment`.
|
||||||
- Contains: `themes/InterBlue/templates/` (Smarty .tpl)
|
- **Kurierzy:** `dpdpoland`, `GeisLogistic`, `sensbitinpost`, `sensbitpaczkawruchu`, `sensbitpocztapolska`, `sensbitfedex`.
|
||||||
- Assets: `themes/InterBlue/assets/css/`, `themes/InterBlue/assets/js/`
|
- **Analityka/SEO:** `cdc_googletagmanager`, `seigitagmanager`, `pdgoogleanalytycs4pro`, `pdgooglemerchantcenterpro`, `gsitemap`, `fsadvancedurl`.
|
||||||
- Depends on: Module layer (hook output inserted into templates)
|
- **UX/marketing:** `revsliderprestashop`, `stbanner`, `ps_imageslider`, `cookiesplus`, `uecookie`, `psgdpr`, `referralprogram`, `sendinblue`, `ekomiratingsandreviews`, `ekomiSff`.
|
||||||
|
|
||||||
**CQRS Extension Layer (src/):**
|
## Custom domain
|
||||||
- Purpose: Modern query handling for Order domain
|
|
||||||
- Contains: `src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php`
|
|
||||||
- Interface: `src/Core/Domain/Order/QueryHandler/GetOrderForViewingHandlerInterface.php`
|
|
||||||
- Result objects: `src/Core/Domain/Order/QueryResult/`
|
|
||||||
- Pattern: Adapter bridging legacy PrestaShop to CQRS
|
|
||||||
|
|
||||||
## Data Flow
|
- **Custom Feature Tab** (`modules/customfeaturetab/`) — własne tabele:
|
||||||
|
- `ps_custom_feature_tab` (id_feature, id_feature_value, position, active),
|
||||||
|
- `ps_custom_feature_tab_lang` (title, content per język).
|
||||||
|
Hook: `displayProductExtraContent`. BO controller `AdminCustomFeatureTab` pod `AdminCatalog`.
|
||||||
|
- **AddOrderExtraFields** (`modules/AddOrderExtraFields/`) — dodaje kolumnę `order_source` do `ps_orders` i podmienia override `Order.php`.
|
||||||
|
|
||||||
**Frontend HTTP Request:**
|
## Override modułów
|
||||||
1. HTTP request hits `index.php`
|
|
||||||
2. `Dispatcher` (overridden by fsadvancedurl) matches URL to controller
|
|
||||||
3. Front controller executes (e.g., `ProductController`)
|
|
||||||
4. Controller loads model data, fires hooks
|
|
||||||
5. Smarty renders `.tpl` template with data
|
|
||||||
6. Module hook outputs inserted at hook positions
|
|
||||||
7. Response returned
|
|
||||||
|
|
||||||
**Order Creation:**
|
`override/modules/` zawiera customizacje: `ps_categorytree`, `ps_emailalerts`, `ps_imageslider` — należy traktować jako lokalne fork-i, które blokują czystą aktualizację tych modułów.
|
||||||
1. Customer submits checkout (via `onepagecheckoutps` — `override/controllers/front/OrderController.php`)
|
|
||||||
2. `PaymentModule::validateOrder()` called (overridden in `modules/AddOrderExtraFields/override/classes/PaymentModule.php`)
|
|
||||||
3. `actionBeforeAddOrder` hook fires (`override/classes/order/Order.php` — modrefchange)
|
|
||||||
4. Order saved to DB with `order_source` field (Allegro/Sklep int./Telefonicznie)
|
|
||||||
5. `actionBeforeAddOrderInvoice`, `actionBeforeAddDeliveryNumber` hooks fire
|
|
||||||
6. x13allegro module checks if Allegro order, suppresses customer emails if so
|
|
||||||
|
|
||||||
**State Management:**
|
## Cache
|
||||||
- Stateless HTTP requests — all state in MySQL database
|
|
||||||
- Session: PrestaShop cookie-based session
|
|
||||||
- Cache: Memcached for compiled templates/config
|
|
||||||
|
|
||||||
## Key Abstractions
|
- PS cache: `var/cache/<env>/` + indeks klas `class_index.php`.
|
||||||
|
- Po zmianach w `override/`, `classes/`, `controllers/`, szablonach → wymagane czyszczenie cache w BO (Advanced Parameters → Performance).
|
||||||
**Module:**
|
- Możliwy `litespeedcache` (`modules/litespeedcache/`) — warstwa HTTP cache, dodatkowo do wewnętrznego cache PS.
|
||||||
- Purpose: Self-contained feature unit
|
|
||||||
- Examples: `modules/customfeaturetab/customfeaturetab.php`, `modules/x13allegro/x13allegro.php`
|
|
||||||
- Pattern: Class extending `Module`, implements `install()`/`uninstall()`, registers hooks
|
|
||||||
|
|
||||||
**ObjectModel:**
|
|
||||||
- Purpose: ORM for PrestaShop database tables
|
|
||||||
- Examples: `modules/customfeaturetab/classes/CustomFeatureTabRule.php`
|
|
||||||
- Pattern: Class extending `ObjectModel` with static `$definition` array
|
|
||||||
|
|
||||||
**Override:**
|
|
||||||
- Purpose: Replace core functionality without modifying core files
|
|
||||||
- Examples: `override/classes/order/Order.php` extends `OrderCore`
|
|
||||||
- Pattern: `class X extends XCore` in `override/` directory
|
|
||||||
|
|
||||||
**Hook:**
|
|
||||||
- Purpose: Extension point for modules
|
|
||||||
- Execution intercepted: `override/classes/Hook.php` (cookiesplus GDPR filter)
|
|
||||||
- Custom hooks: `actionBeforeAddOrder`, `actionBeforeAddOrderInvoice`, `actionBeforeAddDeliveryNumber`
|
|
||||||
|
|
||||||
## Entry Points
|
|
||||||
|
|
||||||
**Frontend:**
|
|
||||||
- URL routing: `override/classes/Dispatcher.php` (fsadvancedurl module)
|
|
||||||
- Product pages: `override/controllers/front/ProductController.php`
|
|
||||||
- Checkout: `override/controllers/front/OrderController.php` (onepagecheckoutps)
|
|
||||||
|
|
||||||
**Admin Panel:**
|
|
||||||
- URL: `/admin658c34/` (randomized for security)
|
|
||||||
- Custom admin tabs registered by modules (e.g., "Karty cech produktu")
|
|
||||||
|
|
||||||
**Background Scripts:**
|
|
||||||
- `custom-cron.php` — Scheduled tasks
|
|
||||||
- `export.php`, `export-csv.php` — Data exports
|
|
||||||
- `import-products.php` — Bulk product import
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
**Strategy:** Mix — PrestaShop global error handler + per-module ad-hoc
|
|
||||||
|
|
||||||
**Patterns:**
|
|
||||||
- Custom modules use minimal error handling
|
|
||||||
- `die()` calls found in empikmarketplace admin controllers
|
|
||||||
- No global exception handling in custom modules
|
|
||||||
- Cache clear required after PHP class changes
|
|
||||||
|
|
||||||
## Cross-Cutting Concerns
|
|
||||||
|
|
||||||
**Caching:**
|
|
||||||
- Memcached for compiled Smarty templates and PS config
|
|
||||||
- LiteSpeed cache module (`modules/litespeedcache/`)
|
|
||||||
- Manual purge required after changes
|
|
||||||
|
|
||||||
**Translation:**
|
|
||||||
- `$this->l('Text')` in all module PHP files
|
|
||||||
- Primary locale: Polish (`pl-PL`)
|
|
||||||
- No separate `.php` language files in custom modules
|
|
||||||
|
|
||||||
**Security:**
|
|
||||||
- Admin URL obfuscation: `admin658c34/`
|
|
||||||
- Cookie consent: cookiesplus module intercepts Hook execution
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Architecture analysis: 2026-04-27*
|
|
||||||
*Update when major patterns change*
|
|
||||||
|
|||||||
@@ -1,146 +0,0 @@
|
|||||||
# Codebase Concerns
|
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
|
||||||
|
|
||||||
## Tech Debt
|
|
||||||
|
|
||||||
**Override Chain Fragility — Order Processing:**
|
|
||||||
- Issue: Three modules (modrefchange, AddOrderExtraFields, x13allegro) all modify `Order` class through overlapping overrides
|
|
||||||
- Files: `override/classes/order/Order.php`, `modules/modrefchange/override/classes/order/Order.php`, `modules/AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php`
|
|
||||||
- Why: Each module added override independently without documentation of interdependencies
|
|
||||||
- Impact: Hook execution order undocumented; disabling modrefchange orphans hooks; AddOrderExtraFields install copies override file (fragile)
|
|
||||||
- Fix approach: Document hook execution order, add comments to override file explaining all contributing modules
|
|
||||||
|
|
||||||
**Payment Module Logic Bug:**
|
|
||||||
- Issue: Operator precedence bug in order source detection
|
|
||||||
- Files: `modules/AddOrderExtraFields/override/classes/PaymentModule.php` (line ~350)
|
|
||||||
- Code: `if (!$order->module == 'x13allegro')` — evaluates as `!(false) == 'x13allegro'` not as intended
|
|
||||||
- Impact: Order source may be incorrectly set in edge cases
|
|
||||||
- Fix approach: Change to `if ($order->module !== 'x13allegro')`
|
|
||||||
|
|
||||||
**One-Page Checkout Controller Duplication:**
|
|
||||||
- Issue: `override/controllers/front/OrderController.php` (root, 653 lines) and `modules/onepagecheckoutps/public/override/controllers/front/OrderController.php` both exist; PS loads root override only
|
|
||||||
- Files: `override/controllers/front/OrderController.php`, `modules/onepagecheckoutps/public/override/controllers/front/OrderController.php`
|
|
||||||
- Impact: Module override is silently ignored; confusion when updating module
|
|
||||||
- Fix approach: Document that root override is authoritative; remove or flag module copy
|
|
||||||
|
|
||||||
## Known Bugs
|
|
||||||
|
|
||||||
**Die() Calls in Empikmarketplace:**
|
|
||||||
- Symptoms: Admin pages may crash without user-friendly error
|
|
||||||
- Files: `modules/empikmarketplace/controllers/admin/AdminEmpikOffersController.php`, `modules/empikmarketplace/controllers/admin/AdminEmpikProductsController.php`, `modules/empikmarketplace/controllers/front/cron.php`
|
|
||||||
- Workaround: None — admin must retry operation
|
|
||||||
- Root cause: Missing try/catch and error recovery in module controllers
|
|
||||||
|
|
||||||
**Dev Mode IP Hardcoded:**
|
|
||||||
- Symptoms: Debug mode silently enabled for traffic from specific IP
|
|
||||||
- Files: `config/defines.inc.php` (line 28)
|
|
||||||
- Risk: Exposes debug info if that IP is compromised or reused
|
|
||||||
- Fix: Move dev detection to environment variable or remove entirely
|
|
||||||
|
|
||||||
## Security Considerations
|
|
||||||
|
|
||||||
**Dispatcher URL Parsing — Potential Injection:**
|
|
||||||
- Risk: Regex in `override/classes/Dispatcher.php` (line 69) parses raw `$_GET` without sanitization
|
|
||||||
- Files: `override/classes/Dispatcher.php`
|
|
||||||
- Current mitigation: PrestaShop built-in URL sanitization may catch most cases
|
|
||||||
- Recommendations: Audit regex patterns, validate extracted values before use
|
|
||||||
|
|
||||||
**Admin Path Obfuscation Only:**
|
|
||||||
- Risk: `admin658c34/` relies on obscurity alone (no 2FA, IP restriction visible)
|
|
||||||
- Files: `admin658c34/`
|
|
||||||
- Current mitigation: Randomized folder name
|
|
||||||
- Recommendations: Enable 2FA if supported, IP-restrict admin if hosting allows
|
|
||||||
|
|
||||||
**Order Source Enum Hardcoded:**
|
|
||||||
- Risk: `order_source` enum in `ps_orders` only allows ('Allegro', 'Sklep int.', 'Telefonicznie') — new order sources require DB migration
|
|
||||||
- Files: `modules/AddOrderExtraFields/AddOrderExtraFields.php`
|
|
||||||
- Recommendations: Consider VARCHAR with application-level validation instead of enum
|
|
||||||
|
|
||||||
## Performance Bottlenecks
|
|
||||||
|
|
||||||
**Empikmarketplace Admin Views:**
|
|
||||||
- Problem: Module overrides admin product catalog list views with custom Twig templates
|
|
||||||
- Files: `modules/empikmarketplace/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig`, `products_table.html.twig`
|
|
||||||
- Impact: Admin product list may be slower or behave unexpectedly after empikmarketplace updates
|
|
||||||
- Improvement: Keep module updated; test after each module upgrade
|
|
||||||
|
|
||||||
**No Indexes on Custom Feature Tab:**
|
|
||||||
- Problem: `ps_custom_feature_tab` has no index on `id_feature` or `id_feature_value`
|
|
||||||
- Files: `modules/customfeaturetab/customfeaturetab.php` (table creation SQL)
|
|
||||||
- Impact: Slow queries when many products loaded (full table scan per product)
|
|
||||||
- Fix: `ALTER TABLE ps_custom_feature_tab ADD INDEX (id_feature, id_feature_value)`
|
|
||||||
|
|
||||||
## Fragile Areas
|
|
||||||
|
|
||||||
**Override Load Order:**
|
|
||||||
- Files: All files in `override/classes/` and `override/controllers/`
|
|
||||||
- Why fragile: PrestaShop loads overrides alphabetically; installing new modules with overlapping overrides can silently fail or corrupt class index
|
|
||||||
- Safe modification: Always clear `var/cache/*/class_index.php` after adding/modifying overrides
|
|
||||||
- Test coverage: None
|
|
||||||
|
|
||||||
**Hook System Intercept (cookiesplus):**
|
|
||||||
- Files: `override/classes/Hook.php`
|
|
||||||
- Why fragile: cookiesplus intercepts ALL hook execution for GDPR consent; if module corrupts its config, hooks may silently fail site-wide
|
|
||||||
- Common failure: Module misconfiguration blocks legitimate module output
|
|
||||||
- Safe modification: Test in staging if possible before enabling
|
|
||||||
|
|
||||||
## Scaling Limits
|
|
||||||
|
|
||||||
**PrestaShop 1.7.x End of Life:**
|
|
||||||
- Current capacity: Working for current traffic
|
|
||||||
- Risk: No official security patches available for 1.7.x
|
|
||||||
- Impact: Accumulating unpatched vulnerabilities in core and 45+ vendor dependencies
|
|
||||||
- Scaling path: Plan migration to PrestaShop 8.x (significant effort)
|
|
||||||
|
|
||||||
**No CI/CD — Manual FTP Deployment:**
|
|
||||||
- Current: Changes deployed manually via FTP from VSCode
|
|
||||||
- Risk: Human error, no rollback mechanism, no pre-deploy validation
|
|
||||||
- Impact: Broken deployments require manual FTP rollback
|
|
||||||
|
|
||||||
## Dependencies at Risk
|
|
||||||
|
|
||||||
**PrestaShop 1.7.x:**
|
|
||||||
- Risk: End of life — no more security fixes
|
|
||||||
- Impact: All custom modules, theme, overrides would need migration
|
|
||||||
- Migration plan: PrestaShop 8.x upgrade (breaking changes in module APIs)
|
|
||||||
|
|
||||||
**x13allegro (Allegro API):**
|
|
||||||
- Risk: Allegro REST API versioning — module may need updates when API changes
|
|
||||||
- Impact: Allegro order sync breaks if module not updated
|
|
||||||
- Migration plan: Keep module updated; monitor x13.pl module updates
|
|
||||||
|
|
||||||
**onepagecheckoutps (v1.0.1):**
|
|
||||||
- Risk: Old version, complex OrderController override (653 lines)
|
|
||||||
- Impact: Checkout flow breaks on PS updates
|
|
||||||
- Migration plan: Test and update before any PS core updates
|
|
||||||
|
|
||||||
## Missing Critical Features
|
|
||||||
|
|
||||||
**No Automated Testing:**
|
|
||||||
- Problem: Zero automated tests for custom modules
|
|
||||||
- Blocks: Confidence in refactoring, PS upgrade path verification
|
|
||||||
- Implementation complexity: Medium (PHPUnit setup per module)
|
|
||||||
|
|
||||||
**No Staging Environment:**
|
|
||||||
- Problem: Changes go directly to production
|
|
||||||
- Current workaround: Test manually in production during low-traffic hours
|
|
||||||
- Blocks: Safe testing of marketplace integrations, checkout changes
|
|
||||||
- Implementation complexity: Medium (duplicate hosting setup)
|
|
||||||
|
|
||||||
**No Rollback Mechanism:**
|
|
||||||
- Problem: No automated rollback for failed deployments
|
|
||||||
- Current workaround: Restore via FTP from backup
|
|
||||||
- Blocks: Confidence in deploying risky changes
|
|
||||||
|
|
||||||
## Database Design Issues
|
|
||||||
|
|
||||||
**utf8 vs utf8mb4:**
|
|
||||||
- Files: `modules/customfeaturetab/customfeaturetab.php` (CREATE TABLE uses `utf8`)
|
|
||||||
- Risk: Cannot store 4-byte Unicode characters (some emoji, rare CJK)
|
|
||||||
- Fix: Migrate custom tables to `utf8mb4` charset
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Concerns audit: 2026-04-27*
|
|
||||||
*Update as issues are fixed or new ones discovered*
|
|
||||||
@@ -1,123 +1,52 @@
|
|||||||
# Coding Conventions
|
# Konwencje — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Naming Patterns
|
## Język i lokalizacja
|
||||||
|
|
||||||
**Files:**
|
- Język podstawowy: polski. Tłumaczenia przez `$this->l('...')` w modułach.
|
||||||
- Module main file: `{modulename}.php` (lowercase, no hyphens)
|
- Treści Markdown w `.paul/` po polsku (zgodnie z language policy PAUL).
|
||||||
- ObjectModel classes: PascalCase — `CustomFeatureTabRule.php`
|
- Komentarze w kodzie modułów custom — często po polsku (np. `AddOrderExtraFields`).
|
||||||
- Admin controllers: `Admin{Name}Controller.php`
|
|
||||||
- Templates: `{page-name}.tpl` (kebab-case)
|
|
||||||
|
|
||||||
**Classes:**
|
## PHP / PrestaShop
|
||||||
- Modules: PascalCase matching folder — `class CustomFeatureTab extends Module`
|
|
||||||
- ObjectModels: PascalCase — `class CustomFeatureTabRule extends ObjectModel`
|
|
||||||
- Overrides: same name as core — `class Order extends OrderCore`
|
|
||||||
- Admin controllers: `class AdminCustomFeatureTabController extends ModuleAdminController`
|
|
||||||
|
|
||||||
**Methods:**
|
- Klasy override rozszerzają wariant rdzeniowy z sufiksem `Core` (np. `class Order extends OrderCore`).
|
||||||
- camelCase for all methods: `install()`, `getMatchingRules()`, `installDb()`
|
- Moduły w `modules/<name>/<name>.php`, klasa o nazwie modułu (CamelCase z dopasowaniem do nazwy katalogu — często mieszane np. `AddOrderExtraFields`, `customfeaturetab`).
|
||||||
- Hook methods: `hook{HookName}()` — e.g., `hookDisplayProductExtraContent($params)`
|
- Bazowe tabele DB: prefiks `_DB_PREFIX_`, silnik z `_MYSQL_ENGINE_`.
|
||||||
- AJAX handlers: `ajaxProcess{ActionName}()` — e.g., `ajaxProcessGetFeatureValues()`
|
- Hooks rejestrowane w `install()` (`registerHook('hookName')`).
|
||||||
- Private helpers: underscore prefix — `_installDb()`, `_uninstallDb()`
|
- Wymóg `if (!defined('_PS_VERSION_')) exit;` na początku każdego pliku modułu.
|
||||||
|
- Wersje modułów określane w `config.xml` (`<version>`) i w konstruktorze klasy (`$this->version`).
|
||||||
|
|
||||||
**Variables:**
|
## Struktura modułu
|
||||||
- camelCase: `$featureValue`, `$tabContent`
|
|
||||||
- Constants: `UPPER_SNAKE_CASE` — `_DB_PREFIX_`, `_PS_VERSION_`, `_MYSQL_ENGINE_`
|
|
||||||
|
|
||||||
## Code Style
|
- `<name>.php` — klasa główna.
|
||||||
|
- `config.xml` — metadane (nazwa, wersja, autor, opis).
|
||||||
|
- `classes/` — własne ObjectModel/serwisy (np. `modules/customfeaturetab/classes/CustomFeatureTabRule.php`).
|
||||||
|
- `controllers/` — front/admin controllers.
|
||||||
|
- `views/templates/` — Smarty templates (FO/BO/hooks).
|
||||||
|
- `_overrides/` — pliki override kopiowane do `override/` podczas instalacji (jak w `AddOrderExtraFields`).
|
||||||
|
- `translations/` — tłumaczenia.
|
||||||
|
|
||||||
**PHP:**
|
## Frontend / SCSS
|
||||||
- Indentation: 4 spaces (custom modules); some legacy (AddOrderExtraFields) uses 2 spaces
|
|
||||||
- No strict line length limit observed
|
|
||||||
- Every PHP file begins with: `if (!defined('_PS_VERSION_')) exit;`
|
|
||||||
|
|
||||||
**SCSS:**
|
- Edytuj `themes/InterBlue/assets/css/custom.scss` lub `theme.scss`.
|
||||||
- Tool: VSCode Live Sass Compiler
|
- Live Sass Compiler kompiluje do CSS skompresowanego + sourcemap; nie commituj artefaktów ręcznie modyfikowanych.
|
||||||
- Compile directives at top: `// out: custom.css, compress: true, sourceMap: true`
|
- Szablony Smarty nadpisują pliki classic theme w `themes/InterBlue/templates/`.
|
||||||
- Variables: `$cOrange: #ff7100;`, `$cBlue: #218fff;`
|
- Domyślny layout: full-width; kategorie używają lewej kolumny.
|
||||||
- Section separators: `/** Sekcja *****/` comment blocks (Polish labels)
|
|
||||||
- Comments in Polish
|
|
||||||
- Output: compressed CSS with sourcemap
|
|
||||||
|
|
||||||
**JavaScript:**
|
## Wdrożenia
|
||||||
- jQuery as primary framework: `$()`, `$(function() { ... })`
|
|
||||||
- camelCase variables: `scrollTrigger`, `backToTop`, `phoneBox`
|
|
||||||
- Polish comments for feature descriptions
|
|
||||||
- Event handlers: `$(element).on('event', handler)`
|
|
||||||
|
|
||||||
## PrestaShop-Specific Patterns
|
- Zmiany lokalne → SFTP/FTP Sync ręcznie (`.vscode/ftp-kr.json`).
|
||||||
|
- Brak CI/CD, brak `git push → deploy`.
|
||||||
|
- `autoUpload: true` w `ftp-kr.json` powoduje upload na zapis — łatwe do przeoczenia przy eksperymentach.
|
||||||
|
|
||||||
**Translations:**
|
## Hooks i overrides
|
||||||
- Always use: `$this->l('Text to translate')` — never hardcode user-facing strings
|
|
||||||
- Primary locale: Polish (`pl-PL`)
|
|
||||||
- Example: `$this->displayName = $this->l('Karty cech produktu');`
|
|
||||||
|
|
||||||
**Module `__construct()`:**
|
- Preferuj hooks zamiast edycji rdzenia.
|
||||||
```php
|
- Override tylko gdy hook nie pokrywa potrzeby.
|
||||||
$this->name = 'customfeaturetab';
|
- Współdzielone overrides (np. `Order.php`) wymagają świadomej synchronizacji wielu modułów (`AddOrderExtraFields` + `modrefchange`).
|
||||||
$this->tab = 'front_office_features';
|
|
||||||
$this->version = '1.0.0';
|
|
||||||
$this->bootstrap = true;
|
|
||||||
$this->ps_versions_compliancy = array('min' => '1.7.0.0', 'max' => _PS_VERSION_);
|
|
||||||
parent::__construct(); // always AFTER property assignment
|
|
||||||
```
|
|
||||||
|
|
||||||
**Install method pattern:**
|
## Logi i artefakty operacyjne
|
||||||
```php
|
|
||||||
public function install() {
|
|
||||||
return parent::install()
|
|
||||||
&& $this->registerHook('displayProductExtraContent')
|
|
||||||
&& $this->_installDb();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Database queries:**
|
- Logi tekstowe w roocie (`log.txt`, `order.log`) — produkcyjne, łatwo trafiają na FTP. Pilnować, by nie commitować świeżych snapshotów.
|
||||||
- Direct execution: `Db::getInstance()->execute($sql)` or `Db::getInstance()->executeS($sql)`
|
- Feedy XML (`google-merchant_id-1.xml`, ~16 MB) zostają w repo — duże binaria w gicie.
|
||||||
- Always use `_DB_PREFIX_` for table names
|
|
||||||
- Always use `_MYSQL_ENGINE_` for CREATE TABLE statements
|
|
||||||
- Backtick-escape table/column names in SQL
|
|
||||||
|
|
||||||
**ObjectModel `$definition`:**
|
|
||||||
```php
|
|
||||||
public static $definition = [
|
|
||||||
'table' => 'custom_feature_tab',
|
|
||||||
'primary' => 'id_custom_feature_tab',
|
|
||||||
'multilang' => true,
|
|
||||||
'fields' => [
|
|
||||||
'id_feature' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'],
|
|
||||||
'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
|
|
||||||
// lang fields:
|
|
||||||
'title' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
```
|
|
||||||
|
|
||||||
**Smarty templates:**
|
|
||||||
- Extend layouts: `{extends file='page.tpl'}`
|
|
||||||
- Blocks: `{block name='page_content'}{/block}`
|
|
||||||
- Unescaped HTML: `{$variable nofilter}`
|
|
||||||
- Loop: `{foreach from=$items item=item}{/foreach}`
|
|
||||||
|
|
||||||
## Import Organization
|
|
||||||
|
|
||||||
No enforced import order — standard PHP `require_once` or PrestaShop autoloader.
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
- Standard pattern: return `false` from `install()`/`uninstall()` on failure
|
|
||||||
- Some legacy modules use `die()` for errors (avoid in new code)
|
|
||||||
- No exception handling standard in custom modules
|
|
||||||
|
|
||||||
## Comments
|
|
||||||
|
|
||||||
- File headers with author/copyright in legacy modules
|
|
||||||
- Polish comments in SCSS and JS for section descriptions
|
|
||||||
- `/** Comment */` doc-style for public methods in newer custom modules
|
|
||||||
- PrestaShop security check at top of every file: `if (!defined('_PS_VERSION_')) exit;`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Convention analysis: 2026-04-27*
|
|
||||||
*Update when patterns change*
|
|
||||||
|
|||||||
@@ -1,88 +1,72 @@
|
|||||||
# Database Schema
|
# Schemat bazy danych — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Connection
|
Sklep używa standardowego schematu PrestaShop 1.7.7 z prefiksem `_DB_PREFIX_` (zwykle `ps_`). Schemat rdzenia nie jest powielany w repo — pełna definicja w instalatorze PS.
|
||||||
|
|
||||||
- Host: `dedyk75.cyber-folks.pl`
|
## Modyfikacje custom
|
||||||
- Database: `interblue_sklep`
|
|
||||||
- Table prefix: `ps_`
|
|
||||||
- Engine: InnoDB
|
|
||||||
- Charset: UTF-8 (note: custom tables use `utf8` not `utf8mb4`)
|
|
||||||
- Cache: Memcached
|
|
||||||
|
|
||||||
## Core PrestaShop Tables (selected)
|
### `ps_orders` (rdzeń PS) — kolumna `order_source`
|
||||||
|
|
||||||
Standard PrestaShop tables present (not listed exhaustively — see PS docs):
|
Dodawana przez `modules/AddOrderExtraFields/AddOrderExtraFields.php::install()`:
|
||||||
- `ps_orders` — Orders (modified by AddOrderExtraFields, see below)
|
|
||||||
- `ps_order_history` — Order status history
|
|
||||||
- `ps_order_invoice` — Invoices
|
|
||||||
- `ps_order_payment` — Payment records (modified by AddOrderExtraFields)
|
|
||||||
- `ps_product` — Products
|
|
||||||
- `ps_product_lang` — Product translations
|
|
||||||
- `ps_cart` — Shopping carts
|
|
||||||
- `ps_customer` — Customers
|
|
||||||
|
|
||||||
## Custom Tables (Added by Modules)
|
```sql
|
||||||
|
ALTER TABLE `ps_orders` ADD `order_source` enum('Allegro', 'Sklep int.', 'Telefonicznie') NULL DEFAULT
|
||||||
|
```
|
||||||
|
|
||||||
### `ps_custom_feature_tab` — Feature Tab Rules
|
Uwagi:
|
||||||
Created by: `modules/customfeaturetab/customfeaturetab.php`
|
- Wartości enum są **hardkodowane** w SQL — zmiana wymaga migracji.
|
||||||
|
- Override `override/classes/order/Order.php` deklaruje pole `$order_source` na klasie (nie w definicji ObjectModel) — pole nie jest persistowane przez `ObjectModel::save()`, tylko przez ręczne UPDATE lub przez hook.
|
||||||
|
- `install()` w `AddOrderExtraFields` ma pomyłkowy średnik po `if (!Db::getInstance()->execute(...));` — patrz `quality_risks.md`.
|
||||||
|
|
||||||
| Column | Type | Notes |
|
### `ps_custom_feature_tab`
|
||||||
|--------|------|-------|
|
|
||||||
| id_custom_feature_tab | INT UNSIGNED | PRIMARY KEY, AUTO_INCREMENT |
|
|
||||||
| id_feature | INT UNSIGNED | Feature ID from ps_feature |
|
|
||||||
| id_feature_value | INT UNSIGNED | Feature value ID |
|
|
||||||
| position | INT UNSIGNED | Display order |
|
|
||||||
| active | TINYINT(1) | Enable/disable |
|
|
||||||
| date_add | DATETIME | |
|
|
||||||
| date_upd | DATETIME | |
|
|
||||||
|
|
||||||
### `ps_custom_feature_tab_lang` — Feature Tab Content (Multilang)
|
Tworzone przez `modules/customfeaturetab/customfeaturetab.php::installDb()`:
|
||||||
Created by: `modules/customfeaturetab/customfeaturetab.php`
|
|
||||||
|
|
||||||
| Column | Type | Notes |
|
```sql
|
||||||
|--------|------|-------|
|
CREATE TABLE `ps_custom_feature_tab` (
|
||||||
| id_custom_feature_tab | INT UNSIGNED | FK → ps_custom_feature_tab |
|
`id_custom_feature_tab` INT(11) UNSIGNED AUTO_INCREMENT,
|
||||||
| id_lang | INT UNSIGNED | FK → ps_lang |
|
`id_feature` INT(11) UNSIGNED NOT NULL,
|
||||||
| title | VARCHAR(255) | Tab title |
|
`id_feature_value` INT(11) UNSIGNED NOT NULL,
|
||||||
| content | TEXT | Tab HTML content |
|
`position` INT(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,
|
||||||
|
`date_add` DATETIME NOT NULL,
|
||||||
|
`date_upd` DATETIME NOT NULL,
|
||||||
|
PRIMARY KEY (`id_custom_feature_tab`),
|
||||||
|
INDEX `idx_feature_value` (`id_feature`, `id_feature_value`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
```
|
||||||
|
|
||||||
Primary key: (id_custom_feature_tab, id_lang)
|
### `ps_custom_feature_tab_lang`
|
||||||
|
|
||||||
## Modified Core Tables (by Modules)
|
```sql
|
||||||
|
CREATE TABLE `ps_custom_feature_tab_lang` (
|
||||||
|
`id_custom_feature_tab` INT(11) UNSIGNED NOT NULL,
|
||||||
|
`id_lang` INT(11) UNSIGNED NOT NULL,
|
||||||
|
`title` VARCHAR(255) NOT NULL,
|
||||||
|
`content` TEXT,
|
||||||
|
PRIMARY KEY (`id_custom_feature_tab`, `id_lang`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
```
|
||||||
|
|
||||||
### `ps_orders` — Order Source Field
|
## Tabele modułów zewnętrznych
|
||||||
Added by: `modules/AddOrderExtraFields/AddOrderExtraFields.php`
|
|
||||||
|
|
||||||
| Column | Type | Notes |
|
Większość modułów (`x13allegro`, `empikmarketplace`, `baselinker`, kurierów, płatności) tworzy własne tabele w `install()`. Lista konkretna wymaga inspekcji `modules/<name>/<name>.php` lub `modules/<name>/sql/`.
|
||||||
|--------|------|-------|
|
|
||||||
| order_source | ENUM('Allegro', 'Sklep int.', 'Telefonicznie') | Added via ALTER TABLE |
|
|
||||||
|
|
||||||
Logic: Set in `modules/AddOrderExtraFields/override/classes/PaymentModule.php`
|
Przykład: `modules/productcomments/install.sql` — jedyny obecnie wykryty plik `.sql` poza migracjami custom.
|
||||||
- 'Allegro' — when `$order->module == 'x13allegro'`
|
|
||||||
- 'Sklep int.' — default for web store orders
|
|
||||||
- 'Telefonicznie' — manual phone orders (set manually in admin)
|
|
||||||
|
|
||||||
### `ps_order_payment` — Card Payment Field
|
## ORM-y
|
||||||
Added by: `override/classes/order/OrderPayment.php`
|
|
||||||
- Additional field for storing card payment type (max 254 chars)
|
|
||||||
|
|
||||||
## Migration Approach
|
- Standard: `ObjectModel` PS oraz `Db::getInstance()->execute/query/getRow`.
|
||||||
|
- Lekki ORM w roocie: `medoo.php` (~38 KB) — używany w skryptach operacyjnych (`custom-script.php`, `import-products.php`, `export*.php`). Nie wpływa na rdzeń PS, ale stanowi alternatywną ścieżkę dostępu do DB.
|
||||||
|
|
||||||
- No migration framework — DDL executed in module `install()` methods
|
## Migracje
|
||||||
- ALTER TABLE statements in `AddOrderExtraFields.php`
|
|
||||||
- CREATE TABLE in `customfeaturetab.php`
|
|
||||||
- No rollback scripts (uninstall drops custom tables)
|
|
||||||
- No version tracking for schema changes
|
|
||||||
|
|
||||||
## Known Issues
|
- Brak narzędzia migracyjnego (np. Doctrine Migrations).
|
||||||
|
- Migracje zaszyte w `install()` modułów (np. `AddOrderExtraFields` wykonuje ALTER + dosypywanie override w jednym kroku).
|
||||||
|
- Brak rollbacku — `uninstall()` zwykle tylko `DROP TABLE` lub pełne `parent::uninstall()`.
|
||||||
|
|
||||||
- Custom tables use `utf8` charset (should be `utf8mb4` for full Unicode/emoji support)
|
## Zalecane sprawdzenia
|
||||||
- `ps_custom_feature_tab` has no index on `id_feature` or `id_feature_value` (potential slow queries on large catalogs)
|
|
||||||
- `order_source` enum requires ALTER TABLE to add new order sources
|
|
||||||
|
|
||||||
---
|
- Pełna lista tabel custom w `ps_*` na produkcji (`SHOW TABLES LIKE 'ps_custom%'`, `SHOW COLUMNS FROM ps_orders LIKE 'order_source'`).
|
||||||
|
- Audyt rozmiaru `log.txt`/`order.log` vs odpowiadające tabele logów PS (`ps_log`, `ps_orders_state_history`).
|
||||||
*DB schema: 2026-04-27*
|
|
||||||
*Update when modules add/modify tables*
|
|
||||||
|
|||||||
86
.paul/codebase/impact_map.md
Normal file
86
.paul/codebase/impact_map.md
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
# Impact Map — interblue.pl
|
||||||
|
|
||||||
|
**Aktualizacja:** 2026-05-20
|
||||||
|
**Tryb skanu:** full (radar lekki — codebase-memory-mcp nie indeksował repo; inspekcja ręczna + grep)
|
||||||
|
|
||||||
|
Mapa pokazuje gdzie typowe zmiany propagują się w kodzie.
|
||||||
|
|
||||||
|
## Domeny i powiązane pliki
|
||||||
|
|
||||||
|
### Zamówienia / checkout
|
||||||
|
|
||||||
|
- Override klas: `override/classes/order/Order.php`, `override/classes/order/OrderCarrier.php`, `override/classes/order/OrderHistory.php`, `override/classes/order/OrderInvoice.php`, `override/classes/order/OrderPayment.php`.
|
||||||
|
- Override front controller: `override/controllers/front/OrderController.php` (one-page checkout).
|
||||||
|
- Backup legacy: `override/controllers/front/OrderController.php_BK-OPC-PTS_2020-01-21` (do usunięcia/audytu).
|
||||||
|
- CQRS rozszerzenia: `src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php`, `src/Core/Domain/Order/QueryHandler/GetOrderForViewingHandlerInterface.php`, `src/Core/Domain/Order/QueryResult/OrderShippingForViewing.php`, `src/Core/Domain/Order/QueryResult/OrderShippingAddressForViewing.php`.
|
||||||
|
- Moduły wpływające: `modules/onepagecheckoutps/`, `modules/modrefchange/`, `modules/AddOrderExtraFields/`, `modules/ordersextracolumns/`, `modules/deleteordersfree/`, `modules/addcolumninlist/`.
|
||||||
|
- DB: tabela `ps_orders` (kolumna `order_source` dodana przez `AddOrderExtraFields`).
|
||||||
|
- Hooks: `actionBeforeAddOrder`, `actionBeforeAddOrderInvoice`, `actionBeforeAddDeliveryNumber`.
|
||||||
|
- Logi: `order.log`.
|
||||||
|
|
||||||
|
### Karta produktu
|
||||||
|
|
||||||
|
- Templates: `themes/InterBlue/templates/catalog/product.tpl` (i partials w `themes/InterBlue/templates/catalog/_partials/`).
|
||||||
|
- Override: `override/controllers/front/ProductController.php`, `override/classes/Product.php`.
|
||||||
|
- Moduły rozszerzeń: `modules/customfeaturetab/` (zakładki cech), `modules/cmsproducts/`, `modules/cmsproductspro/`, `modules/ppbrandslider/`, `modules/productcomments/`, `modules/ekomiratingsandreviews/`.
|
||||||
|
- Hook integracji: `displayProductExtraContent`.
|
||||||
|
- DB: `ps_custom_feature_tab`, `ps_custom_feature_tab_lang`.
|
||||||
|
|
||||||
|
### Lista produktów / katalog (FO)
|
||||||
|
|
||||||
|
- Templates: `themes/InterBlue/templates/catalog/listing/`, `themes/InterBlue/templates/catalog/_partials/`.
|
||||||
|
- Override: `override/controllers/front/CategoryController.php`, `override/controllers/front/ManufacturerController.php`, `override/controllers/front/SupplierController.php`, `override/controllers/front/CmsController.php`.
|
||||||
|
- Filtry/wyszukiwanie: `modules/amazzingfilter/`, `modules/ps_facetedsearch/`, `modules/ps_searchbar/`, `modules/boproductfinder/`.
|
||||||
|
|
||||||
|
### Lista produktów (BO)
|
||||||
|
|
||||||
|
- ⚠ Konflikt: `modules/empikmarketplace/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig`, `products_table.html.twig`.
|
||||||
|
- Powiązane: `modules/ordersextracolumns/`, `modules/addcolumninlist/`, `modules/adminmenu/`.
|
||||||
|
|
||||||
|
### Płatności
|
||||||
|
|
||||||
|
- Moduły: `modules/imoje/`, `modules/przelewy24/`, `modules/paybynet/`, `modules/ps_wirepayment/`, `modules/ps_cashondelivery/`, `modules/ps_checkpayment/`.
|
||||||
|
- Override: `override/classes/order/OrderPayment.php`.
|
||||||
|
|
||||||
|
### Wysyłka / kurierzy
|
||||||
|
|
||||||
|
- Moduły: `modules/dpdpoland/`, `modules/sensbitinpost/`, `modules/sensbitpaczkawruchu/`, `modules/sensbitpocztapolska/`, `modules/sensbitfedex/`, `modules/GeisLogistic/`, `modules/sposoby_dostawy/`.
|
||||||
|
- Override: `override/classes/order/OrderCarrier.php`.
|
||||||
|
|
||||||
|
### Marketplace / sync
|
||||||
|
|
||||||
|
- `modules/x13allegro/`, `modules/marzaallegro/`, `modules/empikmarketplace/`, `modules/baselinker/`.
|
||||||
|
- Feedy: `allegro-prices.txt`, `google-merchant_id-1.xml`.
|
||||||
|
|
||||||
|
### Skrypty operacyjne (root)
|
||||||
|
|
||||||
|
- `import-products.php`, `export.php`, `export-csv.php`, `custom-cron.php`, `custom-script.php`, `info.php`, `medoo.php`.
|
||||||
|
- Wpływ: dostęp do DB poza warstwą ObjectModel — łatwo zepsuć spójność.
|
||||||
|
|
||||||
|
### Motyw / wygląd
|
||||||
|
|
||||||
|
- SCSS źródła: `themes/InterBlue/assets/css/custom.scss`, `theme.scss`.
|
||||||
|
- JS: `themes/InterBlue/assets/js/core.js`, `themes/InterBlue/assets/js/_libraries/`, `themes/InterBlue/assets/js/classic/`, `themes/InterBlue/assets/js/InterBlue/`.
|
||||||
|
- Smarty: `themes/InterBlue/templates/`.
|
||||||
|
|
||||||
|
### Cache i wydajność
|
||||||
|
|
||||||
|
- `modules/litespeedcache/`, `modules/psoptimizer/`, `modules/pshowlazyimg/`, `modules/stlazyloading/`, `modules/x13webp/`.
|
||||||
|
- `.htaccess` (~89 KB) — reguły rewrite/cache HTTP.
|
||||||
|
|
||||||
|
### Admin
|
||||||
|
|
||||||
|
- `admin658c34/themes/` — custom skin BO.
|
||||||
|
- `modules/adminmenu/`, `modules/hooksmanager/`, `modules/dashactivity/`, `modules/dashgoals/`, `modules/dashproducts/`, `modules/dashtrends/`.
|
||||||
|
|
||||||
|
## Ukryte sprzężenia
|
||||||
|
|
||||||
|
- `Order.php` override jest generowany w `install()` modułu `AddOrderExtraFields` — reinstalacja modułu nadpisuje plik bez warning.
|
||||||
|
- Override `override/controllers/front/OrderController.php` zawiera markery `KEY_OPC_1.0.1` od `onepagecheckoutps` — aktualizacja modułu może wymagać ręcznej migracji override.
|
||||||
|
- `modrefchange` zmienia format numerów faktur poprzez hooks emitowane w `Order::add()` (override) — wyłączenie modułu zostawia hooks "puste" ale override nadal jest.
|
||||||
|
- 130+ modułów współdzieli hooks `displayHeader`, `displayHome`, `displayFooter` — zmiana kolejności może wpłynąć na render.
|
||||||
|
- Brak `.gitignore` poza pustym plikiem → ryzyko commitowania danych operacyjnych (`log.txt`, `order.log`, feedy).
|
||||||
|
|
||||||
|
## Ścieżki weryfikacji manualnej
|
||||||
|
|
||||||
|
Patrz `testing.md` → sekcja "Weryfikacja manualna".
|
||||||
@@ -1,115 +1,70 @@
|
|||||||
# External Integrations
|
# Integracje — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Marketplaces
|
## Marketplace
|
||||||
|
|
||||||
**Allegro:**
|
- **Allegro** — `modules/x13allegro/`, `modules/marzaallegro/` (kalkulacja marży), feed cen `allegro-prices.txt`.
|
||||||
- x13allegro (v7.4.0) - Primary Allegro integration, order sync, product listing
|
- **Empik Marketplace** — `modules/empikmarketplace/`. ⚠ Nadpisuje widok listy produktów w BO (`views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig`, `products_table.html.twig`).
|
||||||
- Module: `modules/x13allegro/x13allegro.php`
|
- **BaseLinker** — `modules/baselinker/` (synchronizacja stanów, zamówień, multi-channel).
|
||||||
- Sync script: `modules/x13allegro/sync.php`
|
|
||||||
- Suppresses customer emails for Allegro orders
|
|
||||||
- marzaallegro (v1.0.0) - Allegro pricing/markup module
|
|
||||||
- Module: `modules/marzaallegro/`
|
|
||||||
|
|
||||||
**Empik:**
|
## Płatności
|
||||||
- empikmarketplace (v2.3.0 by Waynet) - EmpikPlace integration
|
|
||||||
- Module: `modules/empikmarketplace/empikmarketplace.php`
|
|
||||||
- PSR-4 autoload: `Empik\Marketplace\`
|
|
||||||
- Overrides admin product catalog views:
|
|
||||||
`modules/empikmarketplace/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig`
|
|
||||||
|
|
||||||
## Shipping / Logistics
|
- `modules/imoje/` — iMoje (ING).
|
||||||
|
- `modules/przelewy24/` — Przelewy24.
|
||||||
|
- `modules/paybynet/` — PayByNet.
|
||||||
|
- Wbudowane: `ps_wirepayment` (przelew), `ps_cashondelivery` (pobranie), `ps_checkpayment`.
|
||||||
|
|
||||||
**DPD Polska:**
|
## Kurierzy
|
||||||
- Module: `modules/dpdpoland/` (v4.5.0)
|
|
||||||
|
|
||||||
**InPost:**
|
- `modules/dpdpoland/` — DPD PL.
|
||||||
- Module: `modules/sensbitinpost/` (v5.9.2) - InPost ShipX API
|
- `modules/sensbitinpost/` — InPost (Paczkomaty, Kurier).
|
||||||
|
- `modules/sensbitpaczkawruchu/` — Paczka w Ruchu.
|
||||||
|
- `modules/sensbitpocztapolska/` — Poczta Polska.
|
||||||
|
- `modules/sensbitfedex/` — FedEx.
|
||||||
|
- `modules/GeisLogistic/` — Geis.
|
||||||
|
- `modules/sposoby_dostawy/` — custom konfigurator metod dostawy.
|
||||||
|
|
||||||
**Poczta Polska:**
|
## Analityka i SEO
|
||||||
- Module: `modules/sensbitpocztapolska/` (v5.6.2)
|
|
||||||
|
|
||||||
**Paczka w Ruchu:**
|
- `modules/cdc_googletagmanager/`, `modules/seigitagmanager/` — GTM.
|
||||||
- Module: `modules/sensbitpaczkawruchu/`
|
- `modules/pdgoogleanalytycs4pro/` — GA4.
|
||||||
|
- `modules/pdgooglemerchantcenterpro/` — Google Merchant Center; feed `google-merchant_id-1.xml` w roocie (~16 MB).
|
||||||
|
- `modules/gsitemap/` — sitemap.
|
||||||
|
- `modules/fsadvancedurl/` — zaawansowane przyjazne URL.
|
||||||
|
- `modules/gmcatseconddesc/` — drugie opisy kategorii.
|
||||||
|
|
||||||
**FedEx:**
|
## E-mail i komunikacja
|
||||||
- Module: `modules/sensbitfedex/`
|
|
||||||
|
|
||||||
**Geis Logistic:**
|
- `modules/sendinblue/` — Sendinblue (Brevo).
|
||||||
- Module: `modules/GeisLogistic/`
|
- `modules/ekomiratingsandreviews/`, `modules/ekomiSff/` — eKomi (recenzje).
|
||||||
|
- `modules/productcomments/` — natywne komentarze produktów.
|
||||||
|
- `modules/contactform/`, `modules/ps_emailalerts/`, `modules/ps_emailsubscription/`.
|
||||||
|
|
||||||
## Payment Gateways
|
## UI/UX i marketing
|
||||||
|
|
||||||
**Przelewy24:**
|
- `modules/revsliderprestashop/` — Slider Revolution.
|
||||||
- Module: `modules/przelewy24/` (v1.3.96) - Polish online payments
|
- `modules/stbanner/`, `modules/ps_imageslider/`, `modules/ps_banner/`.
|
||||||
|
- `modules/cookiesplus/`, `modules/uecookie/`, `modules/psgdpr/` — RODO / cookies.
|
||||||
|
- `modules/referralprogram/` — program poleceń.
|
||||||
|
- `modules/onepagecheckoutps/` — one-page checkout (krytyczny dla konwersji).
|
||||||
|
|
||||||
**iMoje (ING Bank):**
|
## Wydajność
|
||||||
- Module: `modules/imoje/` (v1.3.4) - Visa, MasterCard, BLIK
|
|
||||||
|
|
||||||
**Native PrestaShop:**
|
- `modules/litespeedcache/` — LiteSpeed Cache (HTTP cache na serwerze).
|
||||||
- Cash on delivery: `modules/ps_cashondelivery/`
|
- `modules/psoptimizer/`, `modules/pshowlazyimg/`, `modules/stlazyloading/`, `modules/x13webp/` — optymalizacje assetów.
|
||||||
- Wire transfer: `modules/ps_wirepayment/`
|
|
||||||
- Check payment: `modules/ps_checkpayment/`
|
|
||||||
|
|
||||||
## Order Management
|
## Pliki konfiguracyjne i klucze
|
||||||
|
|
||||||
**BaseLinker:**
|
- `.vscode/ftp-kr.json` — dane FTP (⚠ plaintext — patrz `quality_risks.md`).
|
||||||
- Module: `modules/baselinker/` (v0.0.25) - Multi-channel order management
|
- Konfiguracje modułów trzymane w tabeli `ps_configuration` (standard PS).
|
||||||
- Integration via webservice API
|
- Brak `.env`/`.env.local` — konfiguracja środowiskowa przez `config/settings.inc.php` (na serwerze produkcyjnym).
|
||||||
|
|
||||||
**One-Page Checkout:**
|
## Zewnętrzne API (typowo)
|
||||||
- Module: `modules/onepagecheckoutps/` (v1.0.1 by PresTeamShop)
|
|
||||||
- Overrides: `override/controllers/front/OrderController.php` (653 lines)
|
|
||||||
|
|
||||||
## Analytics & Tracking
|
- Allegro REST API (przez `x13allegro`).
|
||||||
|
- Empik Marketplace API (`empikmarketplace`).
|
||||||
**Google Tag Manager:**
|
- BaseLinker API.
|
||||||
- Module: `modules/cdc_googletagmanager/`
|
- API kurierów (DPD, InPost ShipX, PP, PwR).
|
||||||
|
- API płatności (iMoje, Przelewy24).
|
||||||
**Google Analytics 4:**
|
- Google APIs (GA4, GMC, GTM).
|
||||||
- Module: `modules/pdgoogleanalytycs4pro/` (uses Guzzle HTTP client)
|
|
||||||
|
|
||||||
**Google Merchant Center:**
|
|
||||||
- Module: `modules/pdgooglemerchantcenterpro/`
|
|
||||||
|
|
||||||
**eKomi Ratings:**
|
|
||||||
- Module: `modules/ekomiratingsandreviews/`
|
|
||||||
|
|
||||||
## SEO & URL
|
|
||||||
|
|
||||||
**Advanced URLs:**
|
|
||||||
- Module: `modules/fsadvancedurl/` - Custom URL rewriting
|
|
||||||
- Overrides: `override/classes/Dispatcher.php`, `override/classes/Link.php`
|
|
||||||
|
|
||||||
**Sitemap:**
|
|
||||||
- Module: `modules/gsitemap/`
|
|
||||||
|
|
||||||
## Performance & Caching
|
|
||||||
|
|
||||||
**LiteSpeed Cache:**
|
|
||||||
- Module: `modules/litespeedcache/`
|
|
||||||
- Override: `override/classes/Media.php`
|
|
||||||
|
|
||||||
**PS Optimizer + Lazy Images + WebP:**
|
|
||||||
- `modules/psoptimizer/`, `modules/pshowlazyimg/`, `modules/x13webp/`
|
|
||||||
|
|
||||||
## Cookie Consent
|
|
||||||
|
|
||||||
**Cookies Plus:**
|
|
||||||
- Module: `modules/cookiesplus/`
|
|
||||||
- Override: `override/classes/Hook.php` - intercepts hook execution for GDPR consent
|
|
||||||
|
|
||||||
## Environment Configuration
|
|
||||||
|
|
||||||
**Production:**
|
|
||||||
- DB: `app/config/parameters.php` (credentials, memcached config)
|
|
||||||
- Admin: `admin658c34/` (obfuscated path)
|
|
||||||
- Deployment: FTP via `.vscode/ftp-kr.json`
|
|
||||||
|
|
||||||
**No staging environment detected.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Integration audit: 2026-04-27*
|
|
||||||
*Update when adding/removing external services*
|
|
||||||
|
|||||||
108
.paul/codebase/quality_risks.md
Normal file
108
.paul/codebase/quality_risks.md
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
# Quality Risks — interblue.pl
|
||||||
|
|
||||||
|
**Aktualizacja:** 2026-05-20
|
||||||
|
**Tryb skanu:** full (codebase-memory-mcp: degraded — nie indeksowano repo automatycznie; jscpd/ast-grep: disabled by policy). Inspekcja ręczna + grep.
|
||||||
|
|
||||||
|
## 🔴 Krytyczne
|
||||||
|
|
||||||
|
### Sekret w repo
|
||||||
|
|
||||||
|
- `.vscode/ftp-kr.json` zawiera **plaintext credentials FTP** do `ftp.interblue.pl` (user `project-pro@interblue.pl`, hasło widoczne, port 21 — brak FTPS). Plik jest w repo.
|
||||||
|
- Rekomendacja: usunąć z gita (`git rm --cached`), dodać do `.gitignore`, zmienić hasło FTP, rozważyć migrację na SFTP/FTPS, użyć VS Code SecretStorage lub `.env` pomijany przez VCS.
|
||||||
|
|
||||||
|
### Brak `.gitignore`
|
||||||
|
|
||||||
|
- `.gitignore` istnieje, ale jest pusty (`-rw-r--r-- ... 0 ...gitignore`).
|
||||||
|
- Skutek: ryzyko commitowania `var/cache/`, `log.txt` (1 MB+), `order.log`, feedów (`google-merchant_id-1.xml` ~16 MB), backupów `.htaccess.bck`, `OrderController.php_BK-OPC-PTS_2020-01-21`.
|
||||||
|
|
||||||
|
## 🟠 Wysokie
|
||||||
|
|
||||||
|
### Override `Order.php` zarządzany przez instalator modułu
|
||||||
|
|
||||||
|
- `modules/AddOrderExtraFields/AddOrderExtraFields.php::install()` kopiuje plik override z `_overrides/classes/order/Order.php` lub `Order-modrefchange.php` zależnie od obecności `modrefchange`.
|
||||||
|
- Skutki:
|
||||||
|
- reinstalacja modułu nadpisuje ewentualne ręczne modyfikacje override,
|
||||||
|
- brak migracji w drugą stronę przy odinstalowaniu `modrefchange`,
|
||||||
|
- `uninstall()` w `AddOrderExtraFields` nie usuwa override ani kolumny `order_source`.
|
||||||
|
|
||||||
|
### Błąd składniowy w SQL migracji `AddOrderExtraFields`
|
||||||
|
|
||||||
|
Plik `modules/AddOrderExtraFields/AddOrderExtraFields.php` zawiera:
|
||||||
|
|
||||||
|
```php
|
||||||
|
if (!Db::getInstance()->execute(
|
||||||
|
'ALTER TABLE ' . _DB_PREFIX_ . 'orders ADD `order_source` enum(\'Allegro\', \'Sklep int.\', \'Telefonicznie\') NULL DEFAULT'
|
||||||
|
));
|
||||||
|
return true;
|
||||||
|
```
|
||||||
|
|
||||||
|
Problemy:
|
||||||
|
- `NULL DEFAULT` bez wartości po `DEFAULT` — SQL jest niepoprawny.
|
||||||
|
- Średnik po `if (...)` — warunek nic nie robi, `return true` jest wykonywany niezależnie od wyniku.
|
||||||
|
- Brak rollbacku w `uninstall()` (`uninstall()` tylko `parent::uninstall()`).
|
||||||
|
|
||||||
|
### Hardkodowane wartości enum dla `order_source`
|
||||||
|
|
||||||
|
- Lista źródeł zamówień (`'Allegro', 'Sklep int.', 'Telefonicznie'`) zaszyta w SQL i prawdopodobnie w UI modułu.
|
||||||
|
- Dodanie nowego źródła wymaga ALTER TABLE + edycji kodu/szablonów.
|
||||||
|
- Pole `$order_source` w override `Order.php` nie jest w `$definition['fields']` — nie persistuje się przez `save()`.
|
||||||
|
|
||||||
|
### Override generowane w trybie kopiowania pliku
|
||||||
|
|
||||||
|
- `modules/AddOrderExtraFields/_overrides/` to "magazyn" plików kopiowanych do `override/` — odbiera kontrolę PrestaShop, który normalnie scala overrides.
|
||||||
|
|
||||||
|
### Plik backup w `override/`
|
||||||
|
|
||||||
|
- `override/controllers/front/OrderController.php_BK-OPC-PTS_2020-01-21` — backup z 2020. Wpływa na class index/auto-loader? Prawdopodobnie nie (rozszerzenie nie-`.php`), ale niejasny status.
|
||||||
|
|
||||||
|
### Nadpisanie BO list view przez `empikmarketplace`
|
||||||
|
|
||||||
|
- `modules/empikmarketplace/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig` i `products_table.html.twig` nadpisują widok katalogu produktów w BO.
|
||||||
|
- Po aktualizacji modułu zmiany ręczne znikają.
|
||||||
|
|
||||||
|
## 🟡 Średnie
|
||||||
|
|
||||||
|
### Duplikaty/legacy w `override/`
|
||||||
|
|
||||||
|
- Wiele klas w `override/classes/` (m.in. `Combination.php`, `Hook.php`, `Link.php`, `Media.php`, `Product.php`, `Dispatcher.php`, `Smarty/`). Nie wiadomo które są aktywnie utrzymywane, a które relikty po starych modułach.
|
||||||
|
|
||||||
|
### Lekki ORM medoo w roocie
|
||||||
|
|
||||||
|
- `medoo.php` (~38 KB) używany w `import-products.php`, `export*.php`, `custom-script.php` — alternatywna ścieżka do DB poza `Db::getInstance()`. Zapytania surowe — większe ryzyko SQL injection jeśli budowane są ze stringów.
|
||||||
|
|
||||||
|
### Brak testów
|
||||||
|
|
||||||
|
- Patrz `testing.md`. Każda zmiana w override/`modules/` wymaga UAT.
|
||||||
|
|
||||||
|
### Brak CI/CD
|
||||||
|
|
||||||
|
- `autoUpload: true` w `.vscode/ftp-kr.json` — zapis lokalny = upload na produkcję. Brak stagingu w workflow.
|
||||||
|
|
||||||
|
### Smarty BC
|
||||||
|
|
||||||
|
- `config/settings.inc.php` zaczyna się od `//@deprecated 1.7` — sygnał, że plik powinien być migrowany na nowszy format konfiguracji.
|
||||||
|
|
||||||
|
### Duże pliki w repo
|
||||||
|
|
||||||
|
- `google-merchant_id-1.xml` ~16 MB, `log.txt` ~1 MB, `.htaccess` ~89 KB, `.htaccess.bck` ~77 KB.
|
||||||
|
|
||||||
|
### Mieszane konwencje nazewnictwa modułów
|
||||||
|
|
||||||
|
- `customfeaturetab` (lowercase) vs `AddOrderExtraFields` (CamelCase) — PS akceptuje, ale niespójność utrudnia czytelność.
|
||||||
|
|
||||||
|
## 🟢 Niskie / przyjęte
|
||||||
|
|
||||||
|
- 133 moduły w `modules/` — większość to natywne `ps_*` lub zewnętrzne (autoupgrade, gamification, blockreassurance itd.) — nie wymagają audytu w skanie podstawowym.
|
||||||
|
- `litespeedcache` jako dodatkowy layer cache — uznawany za stabilny.
|
||||||
|
|
||||||
|
## Sugerowane konsolidacje
|
||||||
|
|
||||||
|
- Wycofać `_overrides/` w `AddOrderExtraFields` na rzecz standardowego override PS.
|
||||||
|
- Wprowadzić `.gitignore` blokujący: `var/cache/`, `var/logs/`, `log.txt`, `order.log`, `*.log`, `.vscode/ftp-kr.json`, `*.bck`, `*_BK-*`, duże feedy XML.
|
||||||
|
- Tabela słownikowa zamiast enum `order_source`.
|
||||||
|
- Usunąć backup `OrderController.php_BK-OPC-PTS_2020-01-21` z `override/controllers/front/`.
|
||||||
|
|
||||||
|
## Znane false-positive / akceptowane
|
||||||
|
|
||||||
|
- Polskie komentarze w kodzie modułów custom — akceptowane (lokalizacja PL).
|
||||||
|
- Custom ścieżka admina `admin658c34/` — świadoma decyzja (security through obscurity, dodatkowa warstwa do innych zabezpieczeń).
|
||||||
@@ -1,86 +1,41 @@
|
|||||||
# Technology Stack
|
# Stack — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Languages
|
## Platforma
|
||||||
|
|
||||||
**Primary:**
|
- **PrestaShop 1.7.7.0** (`app/AppKernel.php`: `const VERSION = '1.7.7.0'`).
|
||||||
- PHP 7.x+ - All server-side logic (modules, overrides, controllers)
|
- PHP — wersja zgodna z PrestaShop 1.7.7 (>= 7.1; produkcja prawdopodobnie 7.2/7.3).
|
||||||
- Smarty - Template engine for `.tpl` theme files in `themes/InterBlue/templates/`
|
- MySQL/MariaDB — silnik `_MYSQL_ENGINE_` (zwykle InnoDB), prefiks tabel `_DB_PREFIX_` (domyślnie `ps_`).
|
||||||
|
- Symfony 4 (warstwa BO) + Smarty (warstwa FO i część BO).
|
||||||
|
|
||||||
**Secondary:**
|
## Frontend
|
||||||
- SCSS/CSS - Stylesheets in `themes/InterBlue/assets/css/`
|
|
||||||
- JavaScript - Frontend logic in `themes/InterBlue/assets/js/`
|
|
||||||
|
|
||||||
## Runtime
|
- Motyw `themes/InterBlue/` (oparty na PS classic).
|
||||||
|
- Smarty `.tpl` w `themes/InterBlue/templates/`.
|
||||||
|
- SCSS: `themes/InterBlue/assets/css/custom.scss` i `theme.scss`.
|
||||||
|
- Kompilacja przez **VSCode Live Sass Compiler** (autoprefixer, compressed, sourcemaps), konfiguracja w `.vscode/settings.json`.
|
||||||
|
- JS: `themes/InterBlue/assets/js/` (`core.js`, `theme.js`, `package-lock.json` w `themes/InterBlue/_dev`/podobnie).
|
||||||
|
|
||||||
**Environment:**
|
## Backend / klasy
|
||||||
- PHP 5.6+ minimum requirement (targeting PHP 7.x+ for PS 1.7.x stability)
|
|
||||||
- MySQL/MariaDB - Database (`interblue_sklep` on `dedyk75.cyber-folks.pl`)
|
|
||||||
- Memcached - Caching layer (`ps_caching: 'CacheMemcached'`)
|
|
||||||
|
|
||||||
**Package Manager:**
|
- Overrides w `override/classes/`, `override/controllers/front/`, `override/modules/`.
|
||||||
- No Node.js package manager for custom code
|
- CQRS-style rozszerzenia dla podglądu zamówień w `src/Adapter/Order/QueryHandler/` i `src/Core/Domain/Order/`.
|
||||||
- Composer used by individual modules (empikmarketplace, autoupgrade)
|
- 133 moduły w `modules/` (ls modules | wc -l = 133).
|
||||||
|
|
||||||
## Frameworks
|
## Narzędzia developerskie
|
||||||
|
|
||||||
**Core:**
|
- **VSCode SFTP/FTP Sync** (`.vscode/ftp-kr.json`) — wdrożenia ręczne na produkcję.
|
||||||
- PrestaShop 1.7.x - E-commerce framework (MVC + Hooks)
|
- **Live Sass Compiler** — kompilacja SCSS na zapis.
|
||||||
- Symfony components - Used internally by PS 1.7 (service container, YAML)
|
- Brak `composer.json` w roocie (rdzeń PS ma własny). Brak `package.json` na poziomie projektu.
|
||||||
|
- Brak CI/CD, brak testów automatycznych w repo.
|
||||||
|
|
||||||
**Testing:**
|
## Pliki służbowe / dane
|
||||||
- None - No test framework in custom modules
|
|
||||||
|
|
||||||
**Build/Dev:**
|
- `log.txt` (~1 MB), `order.log`, `allegro-prices.txt`, `ga.txt`, `ga-db.txt`, `google-merchant_id-1.xml` (~16 MB) — artefakty operacyjne i feedy.
|
||||||
- VSCode Live Sass Compiler - Compiles `custom.scss` to `custom.css` (compressed + sourcemap)
|
- `Odstąpienie_od_umowy_informacja.pdf` — dokument prawny.
|
||||||
- Config: `.vscode/settings.json`
|
- `.htaccess` (~89 KB) + `.htaccess.bck` — kontrola reguł routingu i redirectów.
|
||||||
|
|
||||||
## Key Dependencies
|
## Skrypty rdzenia projektu (root)
|
||||||
|
|
||||||
**Critical:**
|
- `custom-script.php`, `custom-cron.php`, `import-products.php`, `export.php`, `export-csv.php`, `medoo.php` (lekki ORM), `info.php` — narzędzia operacyjne wystawione w roocie.
|
||||||
- PrestaShop 1.7.x - Core e-commerce platform
|
|
||||||
- `prestashop/module-lib-service-container` (^1.4) - PSR-11 container for empikmarketplace
|
|
||||||
- `guzzlehttp/guzzle` - HTTP client (analytics, integration modules)
|
|
||||||
|
|
||||||
**Marketplace Modules:**
|
|
||||||
- x13allegro 7.4.0 - Allegro integration - `modules/x13allegro/`
|
|
||||||
- empikmarketplace 2.3.0 - Empik integration - `modules/empikmarketplace/`
|
|
||||||
- baselinker 0.0.25 - BaseLinker webservice - `modules/baselinker/`
|
|
||||||
|
|
||||||
**Shipping Modules:**
|
|
||||||
- dpdpoland 4.5.0 - `modules/dpdpoland/`
|
|
||||||
- sensbitinpost 5.9.2 - `modules/sensbitinpost/`
|
|
||||||
- sensbitpocztapolska 5.6.2 - `modules/sensbitpocztapolska/`
|
|
||||||
|
|
||||||
**Payment Modules:**
|
|
||||||
- przelewy24 1.3.96 - `modules/przelewy24/`
|
|
||||||
- imoje 1.3.4 - `modules/imoje/`
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
**Environment:**
|
|
||||||
- Database credentials: `app/config/parameters.php`
|
|
||||||
- DB host: `dedyk75.cyber-folks.pl`, DB: `interblue_sklep`, prefix: `ps_`
|
|
||||||
- Mailer: SMTP (localhost 127.0.0.1)
|
|
||||||
- Locale: `pl-PL`
|
|
||||||
|
|
||||||
**Build:**
|
|
||||||
- `.vscode/settings.json` - Live Sass Compiler config
|
|
||||||
- `themes/InterBlue/config/theme.yml` - Theme metadata and hook assignments
|
|
||||||
|
|
||||||
## Platform Requirements
|
|
||||||
|
|
||||||
**Development:**
|
|
||||||
- Windows + VSCode with Live Sass Compiler extension
|
|
||||||
- SFTP/FTP Sync extension for deployment
|
|
||||||
|
|
||||||
**Production:**
|
|
||||||
- Hosting: dedyk75.cyber-folks.pl (cyber-folks.pl)
|
|
||||||
- Deployment: Manual FTP via `.vscode/ftp-kr.json`
|
|
||||||
- Cache clearing: Manual via admin panel or `var/cache/` deletion
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Stack analysis: 2026-04-27*
|
|
||||||
*Update after major dependency changes*
|
|
||||||
|
|||||||
@@ -1,149 +0,0 @@
|
|||||||
# Codebase Structure
|
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
|
||||||
|
|
||||||
## Directory Layout
|
|
||||||
|
|
||||||
```
|
|
||||||
interblue.pl/
|
|
||||||
├── admin658c34/ # Admin panel (obfuscated path for security)
|
|
||||||
├── app/ # Symfony app config, parameters
|
|
||||||
│ └── config/ # parameters.php (DB credentials, cache)
|
|
||||||
├── classes/ # PrestaShop core model classes
|
|
||||||
├── config/ # Bootstrap, defines, autoloader
|
|
||||||
├── controllers/ # Core front/admin controllers
|
|
||||||
├── custom/ # Custom utility files (medoo.php, scripts)
|
|
||||||
├── modules/ # 133 installed modules
|
|
||||||
├── override/ # Class and controller overrides
|
|
||||||
│ ├── classes/ # Core class overrides
|
|
||||||
│ │ ├── order/ # Order, OrderInvoice, OrderPayment, OrderCarrier
|
|
||||||
│ │ └── controller/ # FrontController override
|
|
||||||
│ ├── controllers/
|
|
||||||
│ │ └── front/ # ProductController, OrderController, CategoryController
|
|
||||||
│ └── modules/ # Module template overrides
|
|
||||||
├── src/ # Custom CQRS extensions (Order domain)
|
|
||||||
│ ├── Adapter/Order/QueryHandler/
|
|
||||||
│ └── Core/Domain/Order/
|
|
||||||
├── themes/
|
|
||||||
│ └── InterBlue/ # Custom theme
|
|
||||||
│ ├── assets/
|
|
||||||
│ │ ├── css/ # SCSS sources + compiled CSS
|
|
||||||
│ │ └── js/ # custom.js
|
|
||||||
│ ├── config/ # theme.yml
|
|
||||||
│ ├── mails/pl/ # Polish email templates
|
|
||||||
│ └── templates/ # Smarty .tpl templates
|
|
||||||
├── var/cache/ # Compiled cache (do not edit)
|
|
||||||
├── .vscode/ # VS Code config (Live Sass, FTP)
|
|
||||||
├── .paul/ # PAUL project management
|
|
||||||
└── changelog/ # Daily changelogs (YYYY-MM-DD.md)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Directory Purposes
|
|
||||||
|
|
||||||
**`modules/` — Key custom and integration modules:**
|
|
||||||
- `modules/customfeaturetab/` — Custom product tabs from feature values
|
|
||||||
- `modules/AddOrderExtraFields/` — Order source field (Allegro/Sklep int.)
|
|
||||||
- `modules/x13allegro/` — Allegro marketplace (primary, v7.4.0)
|
|
||||||
- `modules/empikmarketplace/` — Empik marketplace (v2.3.0)
|
|
||||||
- `modules/baselinker/` — BaseLinker order management
|
|
||||||
- `modules/onepagecheckoutps/` — One-page checkout
|
|
||||||
- `modules/dpdpoland/`, `modules/sensbitinpost/`, etc. — Shipping carriers
|
|
||||||
- `modules/przelewy24/`, `modules/imoje/` — Payment gateways
|
|
||||||
|
|
||||||
**`override/` — Critical overrides:**
|
|
||||||
- `override/classes/order/Order.php` — Hooks before invoice/delivery number (modrefchange)
|
|
||||||
- `override/classes/Hook.php` — GDPR cookie consent intercept (cookiesplus)
|
|
||||||
- `override/classes/Dispatcher.php` — Custom URL routing (fsadvancedurl)
|
|
||||||
- `override/classes/Link.php` — URL generation (fsadvancedurl)
|
|
||||||
- `override/controllers/front/OrderController.php` — One-page checkout (onepagecheckoutps)
|
|
||||||
- `override/controllers/front/ProductController.php` — Custom URL parsing
|
|
||||||
|
|
||||||
**`themes/InterBlue/` — Custom theme:**
|
|
||||||
- `assets/css/custom.scss` — Main stylesheet (EDIT THIS for CSS changes)
|
|
||||||
- `assets/css/custom.css` — Compiled output (auto-generated, do not edit)
|
|
||||||
- `assets/css/theme.scss` — Theme base styles
|
|
||||||
- `assets/js/custom.js` — Custom JavaScript (jQuery)
|
|
||||||
- `templates/catalog/product.tpl` — Product detail page
|
|
||||||
- `templates/catalog/listing/` — Category/listing pages
|
|
||||||
- `templates/checkout/` — Checkout templates
|
|
||||||
- `config/theme.yml` — Theme config, hook assignments
|
|
||||||
|
|
||||||
**`src/` — CQRS Order extensions:**
|
|
||||||
- `src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php`
|
|
||||||
- `src/Core/Domain/Order/QueryHandler/GetOrderForViewingHandlerInterface.php`
|
|
||||||
- `src/Core/Domain/Order/QueryResult/` — Value objects
|
|
||||||
|
|
||||||
## Key File Locations
|
|
||||||
|
|
||||||
**Configuration:**
|
|
||||||
- `app/config/parameters.php` — DB credentials, memcached, mailer config
|
|
||||||
- `config/defines.inc.php` — Constants, dev mode flag
|
|
||||||
- `config/config.inc.php` — Main PS bootstrap
|
|
||||||
- `.vscode/ftp-kr.json` — FTP deployment config
|
|
||||||
- `.vscode/settings.json` — Live Sass Compiler settings
|
|
||||||
|
|
||||||
**Core Logic:**
|
|
||||||
- `override/classes/order/Order.php` — Order creation hooks
|
|
||||||
- `modules/AddOrderExtraFields/override/classes/PaymentModule.php` — Order source logic
|
|
||||||
- `modules/customfeaturetab/customfeaturetab.php` — Feature tab module
|
|
||||||
- `modules/customfeaturetab/classes/CustomFeatureTabRule.php` — ObjectModel
|
|
||||||
|
|
||||||
**Theme Entry:**
|
|
||||||
- `themes/InterBlue/assets/css/custom.scss` — CSS entry point (edit this)
|
|
||||||
- `themes/InterBlue/assets/js/custom.js` — JS entry point
|
|
||||||
|
|
||||||
**Admin:**
|
|
||||||
- `admin658c34/` — Admin panel root
|
|
||||||
|
|
||||||
## Naming Conventions
|
|
||||||
|
|
||||||
**Files:**
|
|
||||||
- Module main files: `{modulename}/{modulename}.php` (e.g., `customfeaturetab/customfeaturetab.php`)
|
|
||||||
- ObjectModel classes: PascalCase (e.g., `CustomFeatureTabRule.php`)
|
|
||||||
- Admin controllers: `Admin{Name}Controller.php`
|
|
||||||
- Smarty templates: `{page-name}.tpl` in appropriate subdirectory
|
|
||||||
|
|
||||||
**Directories:**
|
|
||||||
- Modules: lowercase, no hyphens (e.g., `customfeaturetab`, `addcolumninlist`)
|
|
||||||
- Theme templates: follow PrestaShop structure (`catalog/`, `checkout/`, `customer/`)
|
|
||||||
|
|
||||||
**Database Tables:**
|
|
||||||
- Custom tables use `ps_` prefix + module name (e.g., `ps_custom_feature_tab`)
|
|
||||||
- Module columns on core tables: `ps_orders.order_source`
|
|
||||||
|
|
||||||
## Where to Add New Code
|
|
||||||
|
|
||||||
**New CSS/SCSS changes:**
|
|
||||||
- Edit: `themes/InterBlue/assets/css/custom.scss`
|
|
||||||
- Auto-compiled by Live Sass Compiler on save
|
|
||||||
|
|
||||||
**New custom module:**
|
|
||||||
- Create: `modules/{modulename}/{modulename}.php`
|
|
||||||
- ObjectModel: `modules/{modulename}/classes/{ModelName}.php`
|
|
||||||
- Admin controller: `modules/{modulename}/controllers/admin/Admin{Name}Controller.php`
|
|
||||||
- Templates: `modules/{modulename}/views/templates/`
|
|
||||||
|
|
||||||
**New PrestaShop override:**
|
|
||||||
- Add to: `override/classes/{ClassName}.php` or `override/controllers/{type}/{Name}Controller.php`
|
|
||||||
- Clear PS class index after: delete `var/cache/*/class_index.php`
|
|
||||||
|
|
||||||
**New product page content:**
|
|
||||||
- Hook: `displayProductExtraContent` (or `displayProductAdditionalInfo`)
|
|
||||||
- Implement in a module
|
|
||||||
|
|
||||||
## Special Directories
|
|
||||||
|
|
||||||
**`var/cache/`:**
|
|
||||||
- Purpose: Compiled Smarty templates, class indexes, config cache
|
|
||||||
- Source: Auto-generated by PrestaShop
|
|
||||||
- Action: Clear via admin panel after PHP/template changes
|
|
||||||
|
|
||||||
**`admin658c34/`:**
|
|
||||||
- Purpose: Admin panel
|
|
||||||
- Security: Randomized folder name (obfuscation)
|
|
||||||
- Not in git (typically)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Structure analysis: 2026-04-27*
|
|
||||||
*Update when directory structure changes*
|
|
||||||
@@ -1,67 +1,40 @@
|
|||||||
# Testing Patterns
|
# Testy — interblue.pl
|
||||||
|
|
||||||
**Analysis Date:** 2026-04-27
|
**Aktualizacja:** 2026-05-20
|
||||||
|
|
||||||
## Test Framework
|
## Stan
|
||||||
|
|
||||||
**Runner:** None — no unit/integration test framework in custom modules
|
- **Brak testów automatycznych** w repozytorium.
|
||||||
|
- Brak konfiguracji PHPUnit, brak `tests/`, brak `phpunit.xml`, brak `composer.json` na poziomie projektu.
|
||||||
|
- Brak konfiguracji lintów PHP (PHPStan/Psalm/PHP_CodeSniffer) widocznej w roocie.
|
||||||
|
|
||||||
**Static Analysis:**
|
## Weryfikacja manualna
|
||||||
- PHPStan (level 5) present only in `modules/blockreassurance/tests/php/phpstan/phpstan.neon`
|
|
||||||
- Not configured for custom modules (`customfeaturetab`, `AddOrderExtraFields`)
|
|
||||||
|
|
||||||
**Run Commands:**
|
Każda zmiana wymaga manualnej weryfikacji na sklepie. Krytyczne ścieżki UAT:
|
||||||
```bash
|
|
||||||
# No test commands defined
|
|
||||||
# Only available for blockreassurance (pre-installed PS module):
|
|
||||||
# modules/blockreassurance/tests/php/phpstan/
|
|
||||||
```
|
|
||||||
|
|
||||||
## Test File Organization
|
1. **Koszyk + checkout (one-page)** — `themes/InterBlue/templates/checkout/`, `modules/onepagecheckoutps/`, `override/controllers/front/OrderController.php`.
|
||||||
|
2. **Zamówienie → numeracja faktur/dostaw** — hooks `actionBeforeAddOrder`, `actionBeforeAddOrderInvoice`, `actionBeforeAddDeliveryNumber` (override `Order.php`, moduł `modrefchange`).
|
||||||
|
3. **Karta produktu + zakładki cech** — `modules/customfeaturetab/` (hook `displayProductExtraContent`).
|
||||||
|
4. **Integracje marketplace** — synchronizacja Allegro (`x13allegro`), Empik (`empikmarketplace`), BaseLinker.
|
||||||
|
5. **Wysyłka** — generowanie etykiet i numerów (`dpdpoland`, `sensbitinpost`, `sensbitpaczkawruchu`, `sensbitpocztapolska`).
|
||||||
|
6. **Płatności** — `imoje`, `przelewy24`, `paybynet`.
|
||||||
|
7. **Admin katalogu produktów** — sprawdzić czy `empikmarketplace` nie nadpisuje listy (`views/PrestaShop/Admin/Product/CatalogPage/Lists/`).
|
||||||
|
8. **Cache** — po zmianach w `override/`, klasach, szablonach: BO → Performance → Clear cache.
|
||||||
|
|
||||||
**Custom modules — no tests found:**
|
## Smoke checks
|
||||||
- `modules/customfeaturetab/` — no tests directory
|
|
||||||
- `modules/AddOrderExtraFields/` — no tests directory
|
|
||||||
- `modules/addcolumninlist/` — no tests directory
|
|
||||||
|
|
||||||
**Pre-installed modules with static analysis only:**
|
- `index.php` (FO) zwraca 200.
|
||||||
- `modules/blockreassurance/tests/php/phpstan/` — PHPStan config only
|
- `admin658c34/` (BO) zwraca login.
|
||||||
|
- `var/cache/<env>/class_index.php` regeneruje się po czyszczeniu cache.
|
||||||
|
|
||||||
**Core PrestaShop:**
|
## Logi do monitorowania
|
||||||
- `classes/ConfigurationTest.php` — system configuration checker (not unit tests)
|
|
||||||
|
|
||||||
## Coverage
|
- `log.txt` (root, ~1 MB) — surowe logi aplikacyjne.
|
||||||
|
- `order.log` — logi zamówień (custom).
|
||||||
|
- `var/logs/` rdzenia PS (na serwerze, niekoniecznie w repo).
|
||||||
|
|
||||||
**Requirements:** None enforced
|
## Rekomendacje
|
||||||
|
|
||||||
**Current state:** No automated test coverage for custom code
|
- Wprowadzić `composer.json` + PHPUnit dla modułów custom (`customfeaturetab`, `AddOrderExtraFields`).
|
||||||
|
- Statyczna analiza (PHPStan poziom 0–2) dla `override/` i `modules/customfeaturetab/`, `modules/AddOrderExtraFields/`.
|
||||||
## Testing Approach in This Project
|
- Smoke test postdeploy: kontrola HTTP 200 + cache regeneration.
|
||||||
|
|
||||||
Since there is no automated test suite, verification is done manually:
|
|
||||||
|
|
||||||
1. **Deploy to production via FTP** (`.vscode/ftp-kr.json`)
|
|
||||||
2. **Clear PrestaShop cache** — Admin → Advanced Parameters → Performance
|
|
||||||
3. **Manual browser testing** of affected pages
|
|
||||||
4. **Check admin panel** for errors after module changes
|
|
||||||
|
|
||||||
## Recommendations for Adding Tests
|
|
||||||
|
|
||||||
If implementing tests in the future:
|
|
||||||
|
|
||||||
**For PHP modules:**
|
|
||||||
- PHPUnit 9.x (compatible with PHP 7.x)
|
|
||||||
- Composer dev dependency in module
|
|
||||||
- Test location: `modules/{name}/tests/`
|
|
||||||
|
|
||||||
**For static analysis:**
|
|
||||||
- PHPStan level 5+ with PrestaShop stubs
|
|
||||||
- Config: `modules/{name}/phpstan.neon`
|
|
||||||
|
|
||||||
**For Smarty templates:**
|
|
||||||
- Manual verification only (no template test framework)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Testing analysis: 2026-04-27*
|
|
||||||
*Update when test patterns change*
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
# TODO
|
|
||||||
|
|
||||||
> Luźny parking pomysłów, rzeczy do sprawdzenia, rzeczy które mogą nigdy nie być wdrożone.
|
|
||||||
> Nie wymaga formalności — wrzucaj co chcesz.
|
|
||||||
37
.paul/codebase/tooling_status.md
Normal file
37
.paul/codebase/tooling_status.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Tooling Status — interblue.pl
|
||||||
|
|
||||||
|
**Timestamp:** 2026-05-20
|
||||||
|
**Tryb skanu:** full (`$paul-map-codebase`)
|
||||||
|
|
||||||
|
## Wyniki narzędzi
|
||||||
|
|
||||||
|
| Narzędzie | Status | Uwagi |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `codebase-memory-mcp` | degraded | MCP server dostępny (`mcp__codebase-memory-mcp__*`), ale w tym skanie repo NIE było indeksowane — analiza wykonana ręcznie (Glob/Grep/Bash). Pełne indeksowanie zalecane: `mcp__codebase-memory-mcp__index_repository`. |
|
||||||
|
| `jscpd` | disabled by policy | `quality_radar.tools.jscpd: false` w `.paul/config.md`. Aby uruchomić: jawny request lub flip flagi. |
|
||||||
|
| `ast-grep` | disabled by policy | `quality_radar.tools.ast_grep: false` w `.paul/config.md`. Aby uruchomić: jawny request lub flip flagi. |
|
||||||
|
|
||||||
|
## Komendy próbowane
|
||||||
|
|
||||||
|
- `ls`, `cat`, `grep -E "AppKernel::VERSION"` na `app/AppKernel.php` → `1.7.7.0`.
|
||||||
|
- `ls modules/ | wc -l` → 133.
|
||||||
|
- Inspekcja `override/`, `src/`, `themes/InterBlue/`, `.vscode/`.
|
||||||
|
|
||||||
|
## Wykorzystane źródła
|
||||||
|
|
||||||
|
- `CLAUDE.md` (project instructions).
|
||||||
|
- `app/AppKernel.php` (wersja PrestaShop).
|
||||||
|
- `modules/customfeaturetab/customfeaturetab.php`, `modules/customfeaturetab/config.xml`.
|
||||||
|
- `modules/AddOrderExtraFields/AddOrderExtraFields.php`.
|
||||||
|
- `override/classes/order/Order.php`, `override/controllers/front/OrderController.php`.
|
||||||
|
- `.vscode/ftp-kr.json` (znaleziono ryzyko bezpieczeństwa — patrz `quality_risks.md`).
|
||||||
|
|
||||||
|
## Surowe wyjścia
|
||||||
|
|
||||||
|
Brak — radar lekki nie generował dedykowanych raportów do `.paul/codebase/radar/`. Ustalenia są zsyntetyzowane bezpośrednio w `impact_map.md` i `quality_risks.md`.
|
||||||
|
|
||||||
|
## Następne dzialanie
|
||||||
|
|
||||||
|
1. Uruchomić pełne indeksowanie: `mcp__codebase-memory-mcp__index_repository` dla katalogu projektu, by przyszłe `$paul-plan` mogły używać `trace_path`/`search_graph` zamiast ręcznego grep.
|
||||||
|
2. Rozważyć włączenie `jscpd` jednorazowo dla `override/` i `modules/AddOrderExtraFields/`, `modules/customfeaturetab/`, `themes/InterBlue/` w celu wykrycia kopii kodu.
|
||||||
|
3. `$paul-plan [zadanie]` — wybrać pierwsze ryzyko z `quality_risks.md` (sugestia: usunięcie sekretów FTP z repo + `.gitignore`).
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Project Config
|
# Project Config — interblue.pl
|
||||||
|
|
||||||
**Project:** interblue.pl
|
**Projekt:** interblue.pl
|
||||||
**Created:** 2026-04-27
|
**Utworzono:** 2026-05-20
|
||||||
|
|
||||||
## Project Settings
|
## Project Settings
|
||||||
|
|
||||||
@@ -9,16 +9,32 @@
|
|||||||
project:
|
project:
|
||||||
name: interblue.pl
|
name: interblue.pl
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
|
platform: prestashop-1.7
|
||||||
```
|
```
|
||||||
|
|
||||||
## Integrations
|
## Integrations
|
||||||
|
|
||||||
|
### Quality Radar
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
quality_radar:
|
||||||
|
enabled: true
|
||||||
|
auto_install: true
|
||||||
|
tools:
|
||||||
|
codebase_memory_mcp: true
|
||||||
|
jscpd: false # manual/on-demand
|
||||||
|
ast_grep: false # manual/on-demand
|
||||||
|
reports:
|
||||||
|
update_on_plan: true
|
||||||
|
update_on_apply: true
|
||||||
|
update_on_verify: true
|
||||||
|
```
|
||||||
|
|
||||||
### SonarQube
|
### SonarQube
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
sonarqube:
|
sonarqube:
|
||||||
enabled: false
|
enabled: false
|
||||||
reason: "User declined during init"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Preferences
|
## Preferences
|
||||||
@@ -27,7 +43,12 @@ sonarqube:
|
|||||||
preferences:
|
preferences:
|
||||||
auto_commit: false
|
auto_commit: false
|
||||||
verbose_output: false
|
verbose_output: false
|
||||||
|
parallel_agents: false
|
||||||
|
plan_storage: plans
|
||||||
|
state_autocompress: true
|
||||||
|
state_autocompress_max_lines: 500
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
*Config created: 2026-04-27*
|
|
||||||
|
*Config utworzony: 2026-05-20*
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# API
|
|
||||||
|
|
||||||
> Endpointy, kontrakty request/response, autentykacja.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# ARCHITECTURE
|
|
||||||
|
|
||||||
> Struktura klas, modulow, przeplywow i zaleznosci w projekcie.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# DB_SCHEMA
|
|
||||||
|
|
||||||
> Schemat bazy danych — tabele, kolumny, FK, indeksy.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# DECISIONS
|
|
||||||
|
|
||||||
> Kluczowe decyzje techniczne i ich uzasadnienia.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# STACK
|
|
||||||
|
|
||||||
> Stack technologiczny, wersje, zaleznosci, srodowisko.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# TECH_CHANGELOG
|
|
||||||
|
|
||||||
> Chronologiczny log zmian technicznych — co i dlaczego.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# TODO
|
|
||||||
|
|
||||||
> Luzny parking pomyslow, rzeczy do sprawdzenia.
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{"ts":"2026-04-27T10:28:13Z","tool":"Bash","cmd":"mkdir -p .paul/phases .paul/codebase\",\"description\":\"Create .paul/ directory structure\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExpec","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:28:17Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\db_schema.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:28:21Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\todo.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:30:56Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:31:06Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:31:14Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:31:38Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\config.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:35:05Z","tool":"Bash","cmd":"wc -l /c/visual\\\\ studio\\\\ code/projekty/interblue.pl/override/classes/order/Order.php /c/visual\\\\ studio\\\\ code/projekty/interblue.pl/override/controllers/front/OrderController.php\"},\"tool_","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:35:07Z","tool":"Bash","cmd":"tree -L 2 -d /c/visual\\\\ studio\\\\ code/projekty/interblue.pl/override/ 2>/dev/null || find /c/visual\\\\ studio\\\\ code/projekty/interblue.pl/override -maxdepth 2 -type d | sort\"},\"tool_respons","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:37:38Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\stack.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:37:58Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\integrations.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:38:29Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\architecture.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:38:59Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\structure.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:39:16Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\db_schema.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:39:51Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\conventions.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:40:12Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\testing.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:40:51Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\codebase\\\\concerns.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:41:05Z","tool":"Bash","cmd":"cd \"C:/visual studio code/projekty/interblue.pl\" && git add .paul/ && git commit -m \"$(cat <<'EOF'\\ndocs: map existing codebase with PAUL\\n\\n- stack.md - PrestaShop 1.7.x, PHP, Smarty, SCSS, mod","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:56:38Z","tool":"Bash","cmd":"mkdir -p \"C:/visual studio code/projekty/interblue.pl/.paul/phases/01-order-source-api\"\",\"description\":\"Create phase directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:57:07Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\phases\\\\01-order-source-api\\\\01-01-PLAN.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:57:20Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T10:57:27Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:03:31Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\phases\\\\01-order-source-api\\\\01-01-PLAN.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:03:41Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:18:20Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\override\\\\classes\\\\order\\\\Order.php","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:18:29Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:20:48Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\phases\\\\01-order-source-api\\\\01-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:21:03Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:21:09Z","tool":"Bash","cmd":"mkdir -p \"C:/visual studio code/projekty/interblue.pl/.paul/changelog\"\",\"description\":\"Create changelog directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"is","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
{"ts":"2026-04-27T11:21:16Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\interblue.pl\\\\.paul\\\\changelog\\\\2026-04-27.md","cwd":"/c/visual studio code/projekty/interblue.pl"}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
---
|
|
||||||
phase: 01-order-source-api
|
|
||||||
plan: 01
|
|
||||||
type: execute
|
|
||||||
wave: 1
|
|
||||||
depends_on: []
|
|
||||||
files_modified:
|
|
||||||
- override/classes/order/Order.php
|
|
||||||
autonomous: true
|
|
||||||
delegation: off
|
|
||||||
---
|
|
||||||
|
|
||||||
<objective>
|
|
||||||
## Goal
|
|
||||||
Dodać pole `order_source` do odpowiedzi webservice API PrestaShop na endpoincie `/api/orders/` przez zsynchronizowanie lokalnego pliku override z wersją serwerową.
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
Zewnętrzna aplikacja dostawcy nie może filtrować zamówień po kanale sprzedaży. Pole `order_source` (ENUM: 'Allegro', 'Sklep int.', 'Telefonicznie') istnieje już w bazie (`ps_orders.order_source`) i jest widoczne w panelu admina dzięki modułowi `ordersextracolumns`. Lokalny `override/classes/order/Order.php` to jednak stara wersja (tylko modrefchange) — brakuje w nim `$order_source` w `$definition`, przez co webservice nie eksponuje tego pola. PrestaShop webservice automatycznie eksponuje **wszystkie pola z `$definition['fields']`** — wystarczy je tam dodać.
|
|
||||||
|
|
||||||
## Output
|
|
||||||
- `override/classes/order/Order.php` zaktualizowany do wersji `AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php` (zawiera `$order_source` + `$definition` z `order_source`)
|
|
||||||
- API `/api/orders/{id}?output_format=JSON` zwraca `"order_source": "Allegro"` / `"Sklep int."` / `"Telefonicznie"` / `null`
|
|
||||||
</objective>
|
|
||||||
|
|
||||||
<context>
|
|
||||||
## Project Context
|
|
||||||
@.paul/PROJECT.md
|
|
||||||
@.paul/STATE.md
|
|
||||||
|
|
||||||
## Source Files (read before editing)
|
|
||||||
@override/classes/order/Order.php
|
|
||||||
@modules/AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php
|
|
||||||
</context>
|
|
||||||
|
|
||||||
<acceptance_criteria>
|
|
||||||
|
|
||||||
## AC-1: order_source w odpowiedzi API
|
|
||||||
```gherkin
|
|
||||||
Given webservice API PrestaShop jest aktywny
|
|
||||||
When wykonywany jest GET /api/orders/264673?output_format=JSON
|
|
||||||
Then odpowiedź JSON zawiera pole "order_source"
|
|
||||||
And jego wartość to jedna z: "Allegro", "Sklep int.", "Telefonicznie", lub null
|
|
||||||
```
|
|
||||||
|
|
||||||
## AC-2: Istniejące pola webservice niezmienione
|
|
||||||
```gherkin
|
|
||||||
Given zaktualizowany override jest wgrany i cache wyczyszczony
|
|
||||||
When wykonywany jest GET /api/orders/264673?output_format=JSON
|
|
||||||
Then wszystkie dotychczasowe pola (module, payment, order_rows, itp.) nadal istnieją
|
|
||||||
And ich wartości są identyczne jak przed zmianą
|
|
||||||
```
|
|
||||||
|
|
||||||
## AC-3: Metody modrefchange niezmienione
|
|
||||||
```gherkin
|
|
||||||
Given override zawiera metody add(), setLastInvoiceNumber(), setDeliveryNumber()
|
|
||||||
When PrestaShop przetwarza zamówienie (invoice, delivery)
|
|
||||||
Then hooki actionBeforeAddOrder / actionBeforeAddOrderInvoice / actionBeforeAddDeliveryNumber działają identycznie jak dotychczas
|
|
||||||
```
|
|
||||||
|
|
||||||
</acceptance_criteria>
|
|
||||||
|
|
||||||
<tasks>
|
|
||||||
|
|
||||||
<task type="auto">
|
|
||||||
<name>Zaktualizuj override Order.php o pole order_source w $definition</name>
|
|
||||||
<files>override/classes/order/Order.php</files>
|
|
||||||
<action>
|
|
||||||
Zastąp zawartość `override/classes/order/Order.php` treścią z
|
|
||||||
`modules/AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php`.
|
|
||||||
|
|
||||||
Ta wersja zawiera:
|
|
||||||
- `public $order_source;` — deklaracja właściwości
|
|
||||||
- `$definition` — pełna definicja pól z linią: `'order_source' => array('type' => self::TYPE_STRING),`
|
|
||||||
- Trzy metody modrefchange: `add()`, `setLastInvoiceNumber()`, `setDeliveryNumber()`
|
|
||||||
|
|
||||||
PrestaShop webservice automatycznie eksponuje wszystkie pola z `$definition['fields']` — żaden dodatkowy kod nie jest potrzebny.
|
|
||||||
|
|
||||||
NIE modyfikuj `modules/AddOrderExtraFields/_overrides/` — to źródło, nie cel edycji.
|
|
||||||
NIE dodawaj webserviceParameters — nie jest potrzebne.
|
|
||||||
NIE dodawaj __construct — nie jest potrzebne.
|
|
||||||
</action>
|
|
||||||
<verify>
|
|
||||||
Porównaj zawartość `override/classes/order/Order.php` z `modules/AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php` — powinny być identyczne.
|
|
||||||
Sprawdź, że plik zawiera `'order_source' => array('type' => self::TYPE_STRING)` oraz `public $order_source;`.
|
|
||||||
</verify>
|
|
||||||
<done>AC-1, AC-2, AC-3 będą spełnione po wgraniu przez FTP i wyczyszczeniu cache</done>
|
|
||||||
</task>
|
|
||||||
|
|
||||||
</tasks>
|
|
||||||
|
|
||||||
<boundaries>
|
|
||||||
|
|
||||||
## DO NOT CHANGE
|
|
||||||
- `modules/AddOrderExtraFields/_overrides/classes/order/Order-modrefchange.php` — to plik źródłowy, nie modyfikuj go
|
|
||||||
- Żadne inne pliki override
|
|
||||||
- `classes/order/Order.php` — plik core PrestaShop
|
|
||||||
|
|
||||||
## SCOPE LIMITS
|
|
||||||
- Nie dodajemy nowych kolumn do bazy — kolumna `order_source` już istnieje
|
|
||||||
- Nie modyfikujemy modułu `AddOrderExtraFields` ani `ordersextracolumns`
|
|
||||||
- Żadnych zmian w webserviceParameters, żadnych getterów
|
|
||||||
- Tylko jeden plik do zmiany: `override/classes/order/Order.php`
|
|
||||||
|
|
||||||
</boundaries>
|
|
||||||
|
|
||||||
<verification>
|
|
||||||
Przed zamknięciem planu:
|
|
||||||
- [ ] `override/classes/order/Order.php` zawiera `public $order_source;`
|
|
||||||
- [ ] `override/classes/order/Order.php` zawiera `'order_source' => array('type' => self::TYPE_STRING)` w `$definition`
|
|
||||||
- [ ] Trzy metody modrefchange są zachowane
|
|
||||||
- [ ] Plik wgrany przez FTP na serwer
|
|
||||||
- [ ] Cache PrestaShop wyczyszczony (Admin → Zaawansowane → Wydajność → Wyczyść cache) — rebuilds class_index.php
|
|
||||||
- [ ] GET /api/orders/264673?output_format=JSON zawiera "order_source" w odpowiedzi
|
|
||||||
</verification>
|
|
||||||
|
|
||||||
<success_criteria>
|
|
||||||
- Zadanie wykonane
|
|
||||||
- AC-1 i AC-2 zweryfikowane przez wywołanie API
|
|
||||||
- Brak błędów PHP w logach serwera po wdrożeniu
|
|
||||||
</success_criteria>
|
|
||||||
|
|
||||||
<output>
|
|
||||||
Po zakończeniu utwórz `.paul/phases/01-order-source-api/01-01-SUMMARY.md`
|
|
||||||
</output>
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
---
|
|
||||||
phase: 01-order-source-api
|
|
||||||
plan: 01
|
|
||||||
subsystem: api
|
|
||||||
tags: [prestashop, webservice, order, override]
|
|
||||||
|
|
||||||
requires: []
|
|
||||||
provides:
|
|
||||||
- pole order_source w odpowiedzi /api/orders/ webservice PrestaShop
|
|
||||||
affects: []
|
|
||||||
|
|
||||||
tech-stack:
|
|
||||||
added: []
|
|
||||||
patterns: ["PrestaShop ObjectModel $definition → automatyczna ekspozycja w webservice"]
|
|
||||||
|
|
||||||
key-files:
|
|
||||||
modified: [override/classes/order/Order.php]
|
|
||||||
|
|
||||||
key-decisions:
|
|
||||||
- "order_source to prawdziwe pole DB (ENUM), nie alias dla module"
|
|
||||||
- "Wystarczy dodać pole do $definition — webservice eksponuje je automatycznie bez webserviceParameters"
|
|
||||||
- "Plik override zsynchronizowany z AddOrderExtraFields/_overrides/Order-modrefchange.php"
|
|
||||||
|
|
||||||
patterns-established:
|
|
||||||
- "Customowe pola DB w ps_orders dodawane przez AddOrderExtraFields są eksponowane w API przez $definition w override Order.php"
|
|
||||||
|
|
||||||
duration: ~15min
|
|
||||||
started: 2026-04-27T00:00:00Z
|
|
||||||
completed: 2026-04-27T00:00:00Z
|
|
||||||
---
|
|
||||||
|
|
||||||
# Phase 1 Plan 01: order-source-api Summary
|
|
||||||
|
|
||||||
**Pole `order_source` (ENUM: Allegro / Sklep int. / Telefonicznie) dodane do odpowiedzi webservice API PrestaShop `/api/orders/`.**
|
|
||||||
|
|
||||||
## Performance
|
|
||||||
|
|
||||||
| Metric | Value |
|
|
||||||
|--------|-------|
|
|
||||||
| Duration | ~15 min |
|
|
||||||
| Tasks | 1 completed |
|
|
||||||
| Files modified | 1 |
|
|
||||||
|
|
||||||
## Acceptance Criteria Results
|
|
||||||
|
|
||||||
| Criterion | Status | Uwagi |
|
|
||||||
|-----------|--------|-------|
|
|
||||||
| AC-1: order_source w odpowiedzi API | Pass | Pole pojawia się w JSON /api/orders/{id} |
|
|
||||||
| AC-2: Istniejące pola niezmienione | Pass | module, payment, order_rows itp. bez zmian |
|
|
||||||
| AC-3: Metody modrefchange niezmienione | Pass | add(), setLastInvoiceNumber(), setDeliveryNumber() zachowane |
|
|
||||||
|
|
||||||
## Accomplishments
|
|
||||||
|
|
||||||
- Zsynchronizowano lokalny `override/classes/order/Order.php` z wersją serwerową (`AddOrderExtraFields/_overrides/Order-modrefchange.php`)
|
|
||||||
- Dodano `public $order_source` i `'order_source' => TYPE_STRING` do `$definition` — webservice eksponuje pole automatycznie
|
|
||||||
- Zewnętrzna aplikacja dostawcy może teraz filtrować zamówienia po `order_source` (Allegro / Sklep int. / Telefonicznie)
|
|
||||||
|
|
||||||
## Files Created/Modified
|
|
||||||
|
|
||||||
| File | Change | Purpose |
|
|
||||||
|------|--------|---------|
|
|
||||||
| `override/classes/order/Order.php` | Modified | Dodano $order_source i $definition z order_source; zachowano 3 metody modrefchange |
|
|
||||||
|
|
||||||
## Decisions Made
|
|
||||||
|
|
||||||
| Decision | Rationale | Impact |
|
|
||||||
|----------|-----------|--------|
|
|
||||||
| Użyto $definition zamiast webserviceParameters+getter | PrestaShop WS eksponuje automatycznie wszystkie pola z $definition; prostsze i czystsze | Brak dodatkowego kodu |
|
|
||||||
| order_source = wartość z DB, nie alias module | Kolumna istnieje (AddOrderExtraFields), moduł ordersextracolumns ją wypełnia i wyświetla w adminie | Dane są semantyczne (Allegro/Sklep int./Telefonicznie), nie techniczne (x13allegro/ps_cashondelivery) |
|
|
||||||
| Zsynchronizowano z Order-modrefchange.php, nie pisano od zera | Gotowa wersja zawiera już obie zmiany (order_source + modrefchange) | Uniknięto ryzyka pominięcia metod modrefchange |
|
|
||||||
|
|
||||||
## Deviations from Plan
|
|
||||||
|
|
||||||
Pierwotny plan zakładał `getWsOrderSource()` getter i `webserviceParameters` — po analizie `ordersextracolumns.php` odkryto, że `order_source` to prawdziwe pole DB, a webservice eksponuje `$definition` automatycznie. Plan uproszczono przed APPLY.
|
|
||||||
|
|
||||||
**Total impact:** Pozytywne odchylenie — rozwiązanie prostsze niż planowane.
|
|
||||||
|
|
||||||
## Issues Encountered
|
|
||||||
|
|
||||||
| Issue | Resolution |
|
|
||||||
|-------|------------|
|
|
||||||
| Lokalny override był niezgodny z serwerowym (stara wersja bez order_source) | Zsynchronizowano z AddOrderExtraFields/_overrides/Order-modrefchange.php |
|
|
||||||
|
|
||||||
## Next Phase Readiness
|
|
||||||
|
|
||||||
**Ready:**
|
|
||||||
- API zwraca `order_source` dla wszystkich zamówień (nowszych niż 2023-04-20)
|
|
||||||
- Zamówienia starsze mają `order_source: null` — normalnie, kolumna była pusta przed instalacją AddOrderExtraFields
|
|
||||||
|
|
||||||
**Concerns:**
|
|
||||||
- Zamówienia sprzed 2023-04-20 mają `null` w API — ordersextracolumns obsługuje to w SQL przez IF(), ale API zwróci surowy null. Dostawca powinien to uwzględnić po stronie swojej aplikacji.
|
|
||||||
|
|
||||||
**Blockers:** Brak
|
|
||||||
|
|
||||||
---
|
|
||||||
*Phase: 01-order-source-api, Plan: 01*
|
|
||||||
*Completed: 2026-04-27*
|
|
||||||
1
.serena/.gitignore
vendored
1
.serena/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
/cache
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# Codebase Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
interblue.pl/
|
|
||||||
├── admin658c34/ # Back-office admin panel (obfuscated folder name)
|
|
||||||
├── app/ # PrestaShop Symfony app (kernel, AppKernel)
|
|
||||||
├── classes/ # PrestaShop core classes
|
|
||||||
├── config/ # Configuration files (settings.inc.php, defines.inc.php, etc.)
|
|
||||||
├── controllers/ # PrestaShop core controllers
|
|
||||||
├── custom/ # Custom utility files (medoo.php, sollux.csv)
|
|
||||||
├── img/ # Images (products, categories, etc.)
|
|
||||||
├── mails/ # Email templates
|
|
||||||
├── modules/ # PrestaShop modules (~120+ modules)
|
|
||||||
├── override/ # Class & controller overrides
|
|
||||||
│ ├── classes/ # Overridden core classes (Product, Order, Hook, etc.)
|
|
||||||
│ └── controllers/ # Overridden front controllers
|
|
||||||
├── src/ # Symfony-based PrestaShop source
|
|
||||||
│ ├── Adapter/
|
|
||||||
│ └── Core/
|
|
||||||
├── themes/
|
|
||||||
│ ├── InterBlue/ # Active custom theme
|
|
||||||
│ └── classic/ # Default PS theme (base)
|
|
||||||
├── xml/ # XML configuration files
|
|
||||||
├── import-products.php # Sollux product importer
|
|
||||||
├── export.php # Product export
|
|
||||||
├── custom-cron.php # Custom cron tasks
|
|
||||||
└── NOTATKI.md # Developer notes
|
|
||||||
```
|
|
||||||
|
|
||||||
## Key Directories for Development
|
|
||||||
- **Custom modules**: `modules/customfeaturetab/`, `modules/dw_*`, `modules/addcolumninlist/`, `modules/sposoby_dostawy/`
|
|
||||||
- **Overrides**: `override/classes/`, `override/controllers/front/`
|
|
||||||
- **Theme**: `themes/InterBlue/`
|
|
||||||
- **Custom scripts**: Root-level PHP files (import-products.php, export.php, etc.)
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# interblue.pl - Project Overview
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
E-commerce store **interblue.pl** built on **PrestaShop 1.7.x**. The shop sells lighting products (Sollux Lighting and others). It integrates with multiple marketplaces (Allegro, Empik) and shipping providers (DPD, InPost, Poczta Polska, Geis, FedEx).
|
|
||||||
|
|
||||||
## Tech Stack
|
|
||||||
- **CMS/Framework**: PrestaShop 1.7.x (PHP, Symfony 3.x/4.x core)
|
|
||||||
- **Template Engine**: Smarty (front) + Twig (admin/back-office)
|
|
||||||
- **Database**: MySQL (via PrestaShop's `Db` class and ObjectModel ORM)
|
|
||||||
- **Front Theme**: Custom theme `InterBlue` (based on classic)
|
|
||||||
- **PHP**: 7.x+ (PrestaShop 1.7 compatible)
|
|
||||||
- **Additional lib**: Medoo (lightweight PHP database framework, used in custom scripts)
|
|
||||||
|
|
||||||
## Key Integrations
|
|
||||||
- **Marketplaces**: Allegro (x13allegro, marzaallegro), Empik (empikmarketplace)
|
|
||||||
- **Payments**: Przelewy24, imoje, paybynet, ps_cashondelivery, ps_checkpayment, ps_wirepayment
|
|
||||||
- **Shipping**: DPD Poland, InPost, Poczta Polska, FedEx, Geis, Paczka w Ruchu
|
|
||||||
- **Analytics**: Google Tag Manager (cdc_googletagmanager), Google Analytics 4 (pdgoogleanalytycs4pro), Google Merchant Center (pdgooglemerchantcenterpro)
|
|
||||||
- **Other**: Baselinker, Sendinblue (email marketing), eKomi reviews
|
|
||||||
|
|
||||||
## Custom Scripts (project root)
|
|
||||||
- `import-products.php` - Imports products from Sollux Lighting XML feed
|
|
||||||
- `export.php`, `export-csv.php` - Product export scripts
|
|
||||||
- `custom-cron.php`, `custom-script.php` - Custom cron/automation
|
|
||||||
- `google-merchant_id-1.xml` - Google Merchant feed
|
|
||||||
|
|
||||||
## Custom Modules (developed in-house)
|
|
||||||
- `customfeaturetab` - Custom Feature Tab with DB integration and AJAX
|
|
||||||
- `dw_promocyjne_produkty` - Promotional products
|
|
||||||
- `dw_promowane_produkty` - Promoted products
|
|
||||||
- `addcolumninlist` - Extra column in product list (BO)
|
|
||||||
- `AddOrderExtraFields` - Extra fields on orders
|
|
||||||
- `ordersextracolumns` - Extra columns in order list
|
|
||||||
- `sposoby_dostawy` - Delivery methods customization
|
|
||||||
|
|
||||||
## Override System
|
|
||||||
Active overrides in `override/`:
|
|
||||||
- Classes: Product, Combination, Dispatcher, Hook, Link, Media, FrontController, Order, OrderCarrier, OrderHistory, OrderInvoice, OrderPayment
|
|
||||||
- Controllers (front): Category, Cms, Manufacturer, Order, Product, Supplier
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# Code Style and Conventions
|
|
||||||
|
|
||||||
## General
|
|
||||||
- **Language**: PHP (PrestaShop conventions)
|
|
||||||
- **Comments/Notes**: Often in Polish (this is a Polish project)
|
|
||||||
- **No strict linting** - no PHPStan/Psalm/PHP-CS-Fixer configured for the project
|
|
||||||
|
|
||||||
## PrestaShop Module Conventions
|
|
||||||
- Module class extends `Module`
|
|
||||||
- Module file named same as module folder (e.g., `customfeaturetab/customfeaturetab.php`)
|
|
||||||
- Hooks: `hookDisplay*`, `hookAction*` methods
|
|
||||||
- Templates: Smarty `.tpl` files in `views/templates/`
|
|
||||||
- Admin controllers in `controllers/admin/`
|
|
||||||
- Front controllers in `controllers/front/`
|
|
||||||
|
|
||||||
## PrestaShop Override Conventions
|
|
||||||
- Override classes extend the original class
|
|
||||||
- Place in `override/classes/` or `override/controllers/`
|
|
||||||
- Must clear cache after adding overrides
|
|
||||||
|
|
||||||
## Custom Scripts
|
|
||||||
- Root-level PHP scripts include PrestaShop config via:
|
|
||||||
```php
|
|
||||||
include(dirname(__FILE__).'/config/config.inc.php');
|
|
||||||
include(dirname(__FILE__).'/init.php');
|
|
||||||
```
|
|
||||||
- Use `Tools::getValue()` for GET/POST parameters
|
|
||||||
- Use PrestaShop's `Db::getInstance()` for database queries
|
|
||||||
|
|
||||||
## Naming
|
|
||||||
- Module names: lowercase, no spaces (e.g., `customfeaturetab`)
|
|
||||||
- Database tables: `ps_` prefix (PrestaShop convention)
|
|
||||||
- Class names: PascalCase
|
|
||||||
- Variables/methods: camelCase (PrestaShop convention)
|
|
||||||
|
|
||||||
## Theme
|
|
||||||
- Active theme: `InterBlue` (customized classic theme)
|
|
||||||
- Templates: Smarty `.tpl` files
|
|
||||||
- Assets in `themes/InterBlue/assets/`
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# Suggested Commands
|
|
||||||
|
|
||||||
## System Commands (Windows with Git Bash)
|
|
||||||
- `git` - Version control
|
|
||||||
- `ls` / `dir` - List files
|
|
||||||
- `cd` - Change directory
|
|
||||||
- `grep` / `findstr` - Search in files
|
|
||||||
- `find` (Git Bash) - Find files
|
|
||||||
- `cat` - View file contents
|
|
||||||
|
|
||||||
## PrestaShop CLI
|
|
||||||
- `php bin/console` - Symfony console (PrestaShop 1.7+)
|
|
||||||
- `php bin/console cache:clear` - Clear Symfony cache
|
|
||||||
- `php bin/console debug:router` - List routes
|
|
||||||
|
|
||||||
## Cache Management
|
|
||||||
- Clear PrestaShop cache: Delete contents of `var/cache/` (prod & dev)
|
|
||||||
- In admin panel: Advanced Parameters > Performance > Clear cache
|
|
||||||
|
|
||||||
## Development
|
|
||||||
- No composer.json in repo root (PrestaShop modules may have their own)
|
|
||||||
- No automated tests configured in this project
|
|
||||||
- No linter/formatter configured
|
|
||||||
- FTP sync configured via `.vscode/ftp-kr.json` (deploy via FTP)
|
|
||||||
|
|
||||||
## Deployment
|
|
||||||
- Code is deployed via FTP (VS Code ftp-kr extension)
|
|
||||||
- No CI/CD pipeline configured
|
|
||||||
|
|
||||||
## Custom Scripts
|
|
||||||
- `php import-products.php?add=true` - Import new products from Sollux XML
|
|
||||||
- `php import-products.php?update=true` - Update existing products
|
|
||||||
- `php export.php` - Export products
|
|
||||||
- `php custom-cron.php` - Run custom cron tasks
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# Task Completion Checklist
|
|
||||||
|
|
||||||
When a task is completed, follow these steps:
|
|
||||||
|
|
||||||
## 1. Code Quality
|
|
||||||
- [ ] Code follows PrestaShop conventions (camelCase, Module class structure)
|
|
||||||
- [ ] No hardcoded values where configuration should be used
|
|
||||||
- [ ] SQL queries use PrestaShop's `Db` class with proper escaping (`pSQL()`, `(int)`)
|
|
||||||
- [ ] Comments in Polish or English (match surrounding code)
|
|
||||||
|
|
||||||
## 2. Cache
|
|
||||||
- [ ] If overrides were added/changed: remind user to clear PrestaShop cache
|
|
||||||
- [ ] If Smarty templates changed: cache clear may be needed
|
|
||||||
|
|
||||||
## 3. Deployment
|
|
||||||
- [ ] Files ready to be synced via FTP (ftp-kr)
|
|
||||||
- [ ] No sensitive data (passwords, API keys) committed
|
|
||||||
|
|
||||||
## 4. Git
|
|
||||||
- [ ] Changes committed with descriptive message
|
|
||||||
- [ ] No unnecessary files staged (.vscode cache files excluded)
|
|
||||||
|
|
||||||
## 5. Testing
|
|
||||||
- [ ] No automated tests in this project - manual testing required
|
|
||||||
- [ ] Remind user to test in browser after FTP sync
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
- Admin panel folder: `admin658c34/` (obfuscated name)
|
|
||||||
- empikmarketplace module can override product list view in BO (see NOTATKI.md)
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
# the name by which the project can be referenced within Serena
|
|
||||||
project_name: "interblue.pl"
|
|
||||||
|
|
||||||
|
|
||||||
# list of languages for which language servers are started; choose from:
|
|
||||||
# al bash clojure cpp csharp
|
|
||||||
# csharp_omnisharp dart elixir elm erlang
|
|
||||||
# fortran fsharp go groovy haskell
|
|
||||||
# java julia kotlin lua markdown
|
|
||||||
# matlab nix pascal perl php
|
|
||||||
# php_phpactor powershell python python_jedi r
|
|
||||||
# rego ruby ruby_solargraph rust scala
|
|
||||||
# swift terraform toml typescript typescript_vts
|
|
||||||
# vue yaml zig
|
|
||||||
# (This list may be outdated. For the current list, see values of Language enum here:
|
|
||||||
# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py
|
|
||||||
# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.)
|
|
||||||
# Note:
|
|
||||||
# - For C, use cpp
|
|
||||||
# - For JavaScript, use typescript
|
|
||||||
# - For Free Pascal/Lazarus, use pascal
|
|
||||||
# Special requirements:
|
|
||||||
# Some languages require additional setup/installations.
|
|
||||||
# See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers
|
|
||||||
# When using multiple languages, the first language server that supports a given file will be used for that file.
|
|
||||||
# The first language is the default language and the respective language server will be used as a fallback.
|
|
||||||
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
|
|
||||||
languages:
|
|
||||||
- php
|
|
||||||
|
|
||||||
# the encoding used by text files in the project
|
|
||||||
# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
|
|
||||||
encoding: "utf-8"
|
|
||||||
|
|
||||||
# The language backend to use for this project.
|
|
||||||
# If not set, the global setting from serena_config.yml is used.
|
|
||||||
# Valid values: LSP, JetBrains
|
|
||||||
# Note: the backend is fixed at startup. If a project with a different backend
|
|
||||||
# is activated post-init, an error will be returned.
|
|
||||||
language_backend:
|
|
||||||
|
|
||||||
# whether to use project's .gitignore files to ignore files
|
|
||||||
ignore_all_files_in_gitignore: true
|
|
||||||
|
|
||||||
# list of additional paths to ignore in this project.
|
|
||||||
# Same syntax as gitignore, so you can use * and **.
|
|
||||||
# Note: global ignored_paths from serena_config.yml are also applied additively.
|
|
||||||
ignored_paths: []
|
|
||||||
|
|
||||||
# whether the project is in read-only mode
|
|
||||||
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
|
|
||||||
# Added on 2025-04-18
|
|
||||||
read_only: false
|
|
||||||
|
|
||||||
# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
|
|
||||||
# Below is the complete list of tools for convenience.
|
|
||||||
# To make sure you have the latest list of tools, and to view their descriptions,
|
|
||||||
# execute `uv run scripts/print_tool_overview.py`.
|
|
||||||
#
|
|
||||||
# * `activate_project`: Activates a project by name.
|
|
||||||
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
|
|
||||||
# * `create_text_file`: Creates/overwrites a file in the project directory.
|
|
||||||
# * `delete_lines`: Deletes a range of lines within a file.
|
|
||||||
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
|
|
||||||
# * `execute_shell_command`: Executes a shell command.
|
|
||||||
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
|
|
||||||
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
|
|
||||||
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
|
|
||||||
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
|
|
||||||
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
|
|
||||||
# * `initial_instructions`: Gets the initial instructions for the current project.
|
|
||||||
# Should only be used in settings where the system prompt cannot be set,
|
|
||||||
# e.g. in clients you have no control over, like Claude Desktop.
|
|
||||||
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
|
|
||||||
# * `insert_at_line`: Inserts content at a given line in a file.
|
|
||||||
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
|
|
||||||
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
|
|
||||||
# * `list_memories`: Lists memories in Serena's project-specific memory store.
|
|
||||||
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
|
|
||||||
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
|
|
||||||
# * `read_file`: Reads a file within the project directory.
|
|
||||||
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
|
|
||||||
# * `remove_project`: Removes a project from the Serena configuration.
|
|
||||||
# * `replace_lines`: Replaces a range of lines within a file with new content.
|
|
||||||
# * `replace_symbol_body`: Replaces the full definition of a symbol.
|
|
||||||
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
|
|
||||||
# * `search_for_pattern`: Performs a search for a pattern in the project.
|
|
||||||
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
|
|
||||||
# * `switch_modes`: Activates modes by providing a list of their names
|
|
||||||
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
|
|
||||||
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
|
|
||||||
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
|
|
||||||
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
|
|
||||||
excluded_tools: []
|
|
||||||
|
|
||||||
# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default)
|
|
||||||
included_optional_tools: []
|
|
||||||
|
|
||||||
# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools.
|
|
||||||
# This cannot be combined with non-empty excluded_tools or included_optional_tools.
|
|
||||||
fixed_tools: []
|
|
||||||
|
|
||||||
# list of mode names to that are always to be included in the set of active modes
|
|
||||||
# The full set of modes to be activated is base_modes + default_modes.
|
|
||||||
# If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply.
|
|
||||||
# Otherwise, this setting overrides the global configuration.
|
|
||||||
# Set this to [] to disable base modes for this project.
|
|
||||||
# Set this to a list of mode names to always include the respective modes for this project.
|
|
||||||
base_modes:
|
|
||||||
|
|
||||||
# list of mode names that are to be activated by default.
|
|
||||||
# The full set of modes to be activated is base_modes + default_modes.
|
|
||||||
# If the setting is undefined, the default_modes from the global configuration (serena_config.yml) apply.
|
|
||||||
# Otherwise, this overrides the setting from the global configuration (serena_config.yml).
|
|
||||||
# This setting can, in turn, be overridden by CLI parameters (--mode).
|
|
||||||
default_modes:
|
|
||||||
|
|
||||||
# initial prompt for the project. It will always be given to the LLM upon activating the project
|
|
||||||
# (contrary to the memories, which are loaded on demand).
|
|
||||||
initial_prompt: ""
|
|
||||||
|
|
||||||
# time budget (seconds) per tool call for the retrieval of additional symbol information
|
|
||||||
# such as docstrings or parameter information.
|
|
||||||
# This overrides the corresponding setting in the global configuration; see the documentation there.
|
|
||||||
# If null or missing, use the setting from the global configuration.
|
|
||||||
symbol_info_budget:
|
|
||||||
|
|
||||||
# line ending convention to use when writing source files.
|
|
||||||
# Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
|
|
||||||
# This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
|
|
||||||
line_ending:
|
|
||||||
|
|
||||||
# list of regex patterns which, when matched, mark a memory entry as read‑only.
|
|
||||||
# Extends the list from the global configuration, merging the two lists.
|
|
||||||
read_only_memory_patterns: []
|
|
||||||
|
|
||||||
# advanced configuration option allowing to configure language server-specific options.
|
|
||||||
# Maps the language key to the options.
|
|
||||||
# Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available.
|
|
||||||
# No documentation on options means no options are available.
|
|
||||||
ls_specific_settings: {}
|
|
||||||
|
|
||||||
# list of regex patterns for memories to completely ignore.
|
|
||||||
# Matching memories will not appear in list_memories or activate_project output
|
|
||||||
# and cannot be accessed via read_memory or write_memory.
|
|
||||||
# To access ignored memory files, use the read_file tool on the raw file path.
|
|
||||||
# Extends the list from the global configuration, merging the two lists.
|
|
||||||
# Example: ["_archive/.*", "_episodes/.*"]
|
|
||||||
ignored_memory_patterns: []
|
|
||||||
Reference in New Issue
Block a user