docs: map existing codebase with PAUL
- stack.md - PrestaShop 1.7.x, PHP, Smarty, SCSS, modules - architecture.md - MVC + hooks, override mechanism, CQRS in src/ - structure.md - Directory layout, key file locations - conventions.md - PHP/Smarty/SCSS/JS conventions, PS patterns - testing.md - No automated tests in custom modules - integrations.md - Allegro, Empik, BaseLinker, shipping, payments - concerns.md - Override fragility, EOL risk, missing CI/CD - db_schema.md - Custom tables, modified core tables Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
30
.paul/PROJECT.md
Normal file
30
.paul/PROJECT.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Project: interblue.pl
|
||||||
|
|
||||||
|
## Description
|
||||||
|
Bieżące poprawki i rozwój istniejącego sklepu PrestaShop 1.7.x — elektronika oświetleniowa B2C.
|
||||||
|
|
||||||
|
## Core Value
|
||||||
|
Klienci B2C mogą kupić elektronikę oświetleniową online.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
### Must Have
|
||||||
|
- [To be defined during planning]
|
||||||
|
|
||||||
|
### Should Have
|
||||||
|
- [To be defined during planning]
|
||||||
|
|
||||||
|
### Nice to Have
|
||||||
|
- [To be defined during planning]
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
- PrestaShop 1.7.x — zmiany muszą być kompatybilne z tą wersją
|
||||||
|
- Deployment przez FTP (brak CI/CD)
|
||||||
|
- Cache PrestaShop musi być czyszczony ręcznie po zmianach PHP/override
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
- Klienci B2C mogą kupić elektronikę oświetleniową online
|
||||||
|
- [To be refined during planning]
|
||||||
|
|
||||||
|
---
|
||||||
|
*Created: 2026-04-27*
|
||||||
22
.paul/ROADMAP.md
Normal file
22
.paul/ROADMAP.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# 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: Not started
|
||||||
|
Phases: 0 of TBD complete
|
||||||
|
|
||||||
|
## Phases
|
||||||
|
|
||||||
|
| Phase | Name | Plans | Status | Completed |
|
||||||
|
|-------|------|-------|--------|-----------|
|
||||||
|
| 1 | TBD | TBD | Not started | - |
|
||||||
|
|
||||||
|
## Phase Details
|
||||||
|
|
||||||
|
Phases will be defined during `/paul:plan`.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Roadmap created: 2026-04-27*
|
||||||
48
.paul/STATE.md
Normal file
48
.paul/STATE.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Project State
|
||||||
|
|
||||||
|
## Project Reference
|
||||||
|
|
||||||
|
See: .paul/PROJECT.md (updated 2026-04-27)
|
||||||
|
|
||||||
|
**Core value:** Klienci B2C mogą kupić elektronikę oświetleniową online
|
||||||
|
**Current focus:** Project initialized — ready for planning
|
||||||
|
|
||||||
|
## Current Position
|
||||||
|
|
||||||
|
Milestone: v0.1 Initial Release
|
||||||
|
Phase: Not yet defined
|
||||||
|
Plan: None yet
|
||||||
|
Status: Ready to create roadmap and first PLAN
|
||||||
|
Last activity: 2026-04-27 — Project initialized
|
||||||
|
|
||||||
|
Progress:
|
||||||
|
- Milestone: [░░░░░░░░░░] 0%
|
||||||
|
|
||||||
|
## Loop Position
|
||||||
|
|
||||||
|
Current loop state:
|
||||||
|
```
|
||||||
|
PLAN ──▶ APPLY ──▶ UNIFY
|
||||||
|
○ ○ ○ [Ready for first PLAN]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Accumulated Context
|
||||||
|
|
||||||
|
### Decisions
|
||||||
|
None yet.
|
||||||
|
|
||||||
|
### Deferred Issues
|
||||||
|
None yet.
|
||||||
|
|
||||||
|
### Blockers/Concerns
|
||||||
|
None yet.
|
||||||
|
|
||||||
|
## Session Continuity
|
||||||
|
|
||||||
|
Last session: 2026-04-27
|
||||||
|
Stopped at: Project initialization complete
|
||||||
|
Next action: Run /paul:plan to define phases and first plan
|
||||||
|
Resume file: .paul/PROJECT.md
|
||||||
|
|
||||||
|
---
|
||||||
|
*STATE.md — Updated after every significant action*
|
||||||
141
.paul/codebase/architecture.md
Normal file
141
.paul/codebase/architecture.md
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Pattern Overview
|
||||||
|
|
||||||
|
**Overall:** PrestaShop 1.7.x MVC Monolith with Hook System and Override Mechanism
|
||||||
|
|
||||||
|
**Key Characteristics:**
|
||||||
|
- 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
|
||||||
|
|
||||||
|
**Core PrestaShop Layer:**
|
||||||
|
- Purpose: Framework, models, standard controllers
|
||||||
|
- Contains: `classes/` (models), `controllers/` (base front/admin), `config/`
|
||||||
|
- Key entry: `config/config.inc.php`, `config/bootstrap.php`
|
||||||
|
|
||||||
|
**Override Layer:**
|
||||||
|
- Purpose: Replace core classes/controllers without touching core files
|
||||||
|
- Contains: `override/classes/`, `override/controllers/`, `override/modules/`
|
||||||
|
- Critical overrides: `override/classes/order/Order.php`, `override/classes/Hook.php`, `override/classes/Dispatcher.php`
|
||||||
|
- Depends on: Core layer
|
||||||
|
- Risk: Multiple modules contributing to same override file
|
||||||
|
|
||||||
|
**Module Layer:**
|
||||||
|
- 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:**
|
||||||
|
- Purpose: Frontend rendering
|
||||||
|
- Contains: `themes/InterBlue/templates/` (Smarty .tpl)
|
||||||
|
- Assets: `themes/InterBlue/assets/css/`, `themes/InterBlue/assets/js/`
|
||||||
|
- Depends on: Module layer (hook output inserted into templates)
|
||||||
|
|
||||||
|
**CQRS Extension Layer (src/):**
|
||||||
|
- 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
|
||||||
|
|
||||||
|
**Frontend HTTP Request:**
|
||||||
|
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:**
|
||||||
|
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:**
|
||||||
|
- Stateless HTTP requests — all state in MySQL database
|
||||||
|
- Session: PrestaShop cookie-based session
|
||||||
|
- Cache: Memcached for compiled templates/config
|
||||||
|
|
||||||
|
## Key Abstractions
|
||||||
|
|
||||||
|
**Module:**
|
||||||
|
- 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*
|
||||||
146
.paul/codebase/concerns.md
Normal file
146
.paul/codebase/concerns.md
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
# 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*
|
||||||
123
.paul/codebase/conventions.md
Normal file
123
.paul/codebase/conventions.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# Coding Conventions
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Naming Patterns
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Module main file: `{modulename}.php` (lowercase, no hyphens)
|
||||||
|
- ObjectModel classes: PascalCase — `CustomFeatureTabRule.php`
|
||||||
|
- Admin controllers: `Admin{Name}Controller.php`
|
||||||
|
- Templates: `{page-name}.tpl` (kebab-case)
|
||||||
|
|
||||||
|
**Classes:**
|
||||||
|
- 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:**
|
||||||
|
- camelCase for all methods: `install()`, `getMatchingRules()`, `installDb()`
|
||||||
|
- Hook methods: `hook{HookName}()` — e.g., `hookDisplayProductExtraContent($params)`
|
||||||
|
- AJAX handlers: `ajaxProcess{ActionName}()` — e.g., `ajaxProcessGetFeatureValues()`
|
||||||
|
- Private helpers: underscore prefix — `_installDb()`, `_uninstallDb()`
|
||||||
|
|
||||||
|
**Variables:**
|
||||||
|
- camelCase: `$featureValue`, `$tabContent`
|
||||||
|
- Constants: `UPPER_SNAKE_CASE` — `_DB_PREFIX_`, `_PS_VERSION_`, `_MYSQL_ENGINE_`
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
**PHP:**
|
||||||
|
- 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:**
|
||||||
|
- Tool: VSCode Live Sass Compiler
|
||||||
|
- Compile directives at top: `// out: custom.css, compress: true, sourceMap: true`
|
||||||
|
- Variables: `$cOrange: #ff7100;`, `$cBlue: #218fff;`
|
||||||
|
- Section separators: `/** Sekcja *****/` comment blocks (Polish labels)
|
||||||
|
- Comments in Polish
|
||||||
|
- Output: compressed CSS with sourcemap
|
||||||
|
|
||||||
|
**JavaScript:**
|
||||||
|
- jQuery as primary framework: `$()`, `$(function() { ... })`
|
||||||
|
- camelCase variables: `scrollTrigger`, `backToTop`, `phoneBox`
|
||||||
|
- Polish comments for feature descriptions
|
||||||
|
- Event handlers: `$(element).on('event', handler)`
|
||||||
|
|
||||||
|
## PrestaShop-Specific Patterns
|
||||||
|
|
||||||
|
**Translations:**
|
||||||
|
- 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()`:**
|
||||||
|
```php
|
||||||
|
$this->name = 'customfeaturetab';
|
||||||
|
$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:**
|
||||||
|
```php
|
||||||
|
public function install() {
|
||||||
|
return parent::install()
|
||||||
|
&& $this->registerHook('displayProductExtraContent')
|
||||||
|
&& $this->_installDb();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Database queries:**
|
||||||
|
- Direct execution: `Db::getInstance()->execute($sql)` or `Db::getInstance()->executeS($sql)`
|
||||||
|
- 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*
|
||||||
88
.paul/codebase/db_schema.md
Normal file
88
.paul/codebase/db_schema.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# Database Schema
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Connection
|
||||||
|
|
||||||
|
- Host: `dedyk75.cyber-folks.pl`
|
||||||
|
- Database: `interblue_sklep`
|
||||||
|
- Table prefix: `ps_`
|
||||||
|
- Engine: InnoDB
|
||||||
|
- Charset: UTF-8 (note: custom tables use `utf8` not `utf8mb4`)
|
||||||
|
- Cache: Memcached
|
||||||
|
|
||||||
|
## Core PrestaShop Tables (selected)
|
||||||
|
|
||||||
|
Standard PrestaShop tables present (not listed exhaustively — see PS docs):
|
||||||
|
- `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)
|
||||||
|
|
||||||
|
### `ps_custom_feature_tab` — Feature Tab Rules
|
||||||
|
Created by: `modules/customfeaturetab/customfeaturetab.php`
|
||||||
|
|
||||||
|
| Column | Type | Notes |
|
||||||
|
|--------|------|-------|
|
||||||
|
| 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)
|
||||||
|
Created by: `modules/customfeaturetab/customfeaturetab.php`
|
||||||
|
|
||||||
|
| Column | Type | Notes |
|
||||||
|
|--------|------|-------|
|
||||||
|
| id_custom_feature_tab | INT UNSIGNED | FK → ps_custom_feature_tab |
|
||||||
|
| id_lang | INT UNSIGNED | FK → ps_lang |
|
||||||
|
| title | VARCHAR(255) | Tab title |
|
||||||
|
| content | TEXT | Tab HTML content |
|
||||||
|
|
||||||
|
Primary key: (id_custom_feature_tab, id_lang)
|
||||||
|
|
||||||
|
## Modified Core Tables (by Modules)
|
||||||
|
|
||||||
|
### `ps_orders` — Order Source Field
|
||||||
|
Added by: `modules/AddOrderExtraFields/AddOrderExtraFields.php`
|
||||||
|
|
||||||
|
| Column | Type | Notes |
|
||||||
|
|--------|------|-------|
|
||||||
|
| order_source | ENUM('Allegro', 'Sklep int.', 'Telefonicznie') | Added via ALTER TABLE |
|
||||||
|
|
||||||
|
Logic: Set in `modules/AddOrderExtraFields/override/classes/PaymentModule.php`
|
||||||
|
- '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
|
||||||
|
Added by: `override/classes/order/OrderPayment.php`
|
||||||
|
- Additional field for storing card payment type (max 254 chars)
|
||||||
|
|
||||||
|
## Migration Approach
|
||||||
|
|
||||||
|
- No migration framework — DDL executed in module `install()` methods
|
||||||
|
- 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
|
||||||
|
|
||||||
|
- Custom tables use `utf8` charset (should be `utf8mb4` for full Unicode/emoji support)
|
||||||
|
- `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
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*DB schema: 2026-04-27*
|
||||||
|
*Update when modules add/modify tables*
|
||||||
115
.paul/codebase/integrations.md
Normal file
115
.paul/codebase/integrations.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# External Integrations
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Marketplaces
|
||||||
|
|
||||||
|
**Allegro:**
|
||||||
|
- x13allegro (v7.4.0) - Primary Allegro integration, order sync, product listing
|
||||||
|
- Module: `modules/x13allegro/x13allegro.php`
|
||||||
|
- Sync script: `modules/x13allegro/sync.php`
|
||||||
|
- Suppresses customer emails for Allegro orders
|
||||||
|
- marzaallegro (v1.0.0) - Allegro pricing/markup module
|
||||||
|
- Module: `modules/marzaallegro/`
|
||||||
|
|
||||||
|
**Empik:**
|
||||||
|
- 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
|
||||||
|
|
||||||
|
**DPD Polska:**
|
||||||
|
- Module: `modules/dpdpoland/` (v4.5.0)
|
||||||
|
|
||||||
|
**InPost:**
|
||||||
|
- Module: `modules/sensbitinpost/` (v5.9.2) - InPost ShipX API
|
||||||
|
|
||||||
|
**Poczta Polska:**
|
||||||
|
- Module: `modules/sensbitpocztapolska/` (v5.6.2)
|
||||||
|
|
||||||
|
**Paczka w Ruchu:**
|
||||||
|
- Module: `modules/sensbitpaczkawruchu/`
|
||||||
|
|
||||||
|
**FedEx:**
|
||||||
|
- Module: `modules/sensbitfedex/`
|
||||||
|
|
||||||
|
**Geis Logistic:**
|
||||||
|
- Module: `modules/GeisLogistic/`
|
||||||
|
|
||||||
|
## Payment Gateways
|
||||||
|
|
||||||
|
**Przelewy24:**
|
||||||
|
- Module: `modules/przelewy24/` (v1.3.96) - Polish online payments
|
||||||
|
|
||||||
|
**iMoje (ING Bank):**
|
||||||
|
- Module: `modules/imoje/` (v1.3.4) - Visa, MasterCard, BLIK
|
||||||
|
|
||||||
|
**Native PrestaShop:**
|
||||||
|
- Cash on delivery: `modules/ps_cashondelivery/`
|
||||||
|
- Wire transfer: `modules/ps_wirepayment/`
|
||||||
|
- Check payment: `modules/ps_checkpayment/`
|
||||||
|
|
||||||
|
## Order Management
|
||||||
|
|
||||||
|
**BaseLinker:**
|
||||||
|
- Module: `modules/baselinker/` (v0.0.25) - Multi-channel order management
|
||||||
|
- Integration via webservice API
|
||||||
|
|
||||||
|
**One-Page Checkout:**
|
||||||
|
- Module: `modules/onepagecheckoutps/` (v1.0.1 by PresTeamShop)
|
||||||
|
- Overrides: `override/controllers/front/OrderController.php` (653 lines)
|
||||||
|
|
||||||
|
## Analytics & Tracking
|
||||||
|
|
||||||
|
**Google Tag Manager:**
|
||||||
|
- Module: `modules/cdc_googletagmanager/`
|
||||||
|
|
||||||
|
**Google Analytics 4:**
|
||||||
|
- 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*
|
||||||
86
.paul/codebase/stack.md
Normal file
86
.paul/codebase/stack.md
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
# Technology Stack
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Languages
|
||||||
|
|
||||||
|
**Primary:**
|
||||||
|
- PHP 7.x+ - All server-side logic (modules, overrides, controllers)
|
||||||
|
- Smarty - Template engine for `.tpl` theme files in `themes/InterBlue/templates/`
|
||||||
|
|
||||||
|
**Secondary:**
|
||||||
|
- SCSS/CSS - Stylesheets in `themes/InterBlue/assets/css/`
|
||||||
|
- JavaScript - Frontend logic in `themes/InterBlue/assets/js/`
|
||||||
|
|
||||||
|
## Runtime
|
||||||
|
|
||||||
|
**Environment:**
|
||||||
|
- 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:**
|
||||||
|
- No Node.js package manager for custom code
|
||||||
|
- Composer used by individual modules (empikmarketplace, autoupgrade)
|
||||||
|
|
||||||
|
## Frameworks
|
||||||
|
|
||||||
|
**Core:**
|
||||||
|
- PrestaShop 1.7.x - E-commerce framework (MVC + Hooks)
|
||||||
|
- Symfony components - Used internally by PS 1.7 (service container, YAML)
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
- None - No test framework in custom modules
|
||||||
|
|
||||||
|
**Build/Dev:**
|
||||||
|
- VSCode Live Sass Compiler - Compiles `custom.scss` to `custom.css` (compressed + sourcemap)
|
||||||
|
- Config: `.vscode/settings.json`
|
||||||
|
|
||||||
|
## Key Dependencies
|
||||||
|
|
||||||
|
**Critical:**
|
||||||
|
- 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*
|
||||||
149
.paul/codebase/structure.md
Normal file
149
.paul/codebase/structure.md
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# 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*
|
||||||
67
.paul/codebase/testing.md
Normal file
67
.paul/codebase/testing.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Testing Patterns
|
||||||
|
|
||||||
|
**Analysis Date:** 2026-04-27
|
||||||
|
|
||||||
|
## Test Framework
|
||||||
|
|
||||||
|
**Runner:** None — no unit/integration test framework in custom modules
|
||||||
|
|
||||||
|
**Static Analysis:**
|
||||||
|
- PHPStan (level 5) present only in `modules/blockreassurance/tests/php/phpstan/phpstan.neon`
|
||||||
|
- Not configured for custom modules (`customfeaturetab`, `AddOrderExtraFields`)
|
||||||
|
|
||||||
|
**Run Commands:**
|
||||||
|
```bash
|
||||||
|
# No test commands defined
|
||||||
|
# Only available for blockreassurance (pre-installed PS module):
|
||||||
|
# modules/blockreassurance/tests/php/phpstan/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test File Organization
|
||||||
|
|
||||||
|
**Custom modules — no tests found:**
|
||||||
|
- `modules/customfeaturetab/` — no tests directory
|
||||||
|
- `modules/AddOrderExtraFields/` — no tests directory
|
||||||
|
- `modules/addcolumninlist/` — no tests directory
|
||||||
|
|
||||||
|
**Pre-installed modules with static analysis only:**
|
||||||
|
- `modules/blockreassurance/tests/php/phpstan/` — PHPStan config only
|
||||||
|
|
||||||
|
**Core PrestaShop:**
|
||||||
|
- `classes/ConfigurationTest.php` — system configuration checker (not unit tests)
|
||||||
|
|
||||||
|
## Coverage
|
||||||
|
|
||||||
|
**Requirements:** None enforced
|
||||||
|
|
||||||
|
**Current state:** No automated test coverage for custom code
|
||||||
|
|
||||||
|
## Testing Approach in This Project
|
||||||
|
|
||||||
|
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*
|
||||||
4
.paul/codebase/todo.md
Normal file
4
.paul/codebase/todo.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# 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.
|
||||||
33
.paul/config.md
Normal file
33
.paul/config.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Project Config
|
||||||
|
|
||||||
|
**Project:** interblue.pl
|
||||||
|
**Created:** 2026-04-27
|
||||||
|
|
||||||
|
## Project Settings
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
project:
|
||||||
|
name: interblue.pl
|
||||||
|
version: 0.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
|
||||||
|
### SonarQube
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
sonarqube:
|
||||||
|
enabled: false
|
||||||
|
reason: "User declined during init"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Preferences
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
preferences:
|
||||||
|
auto_commit: false
|
||||||
|
verbose_output: false
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
*Config created: 2026-04-27*
|
||||||
17
.paul/governance/governance_2026-04-27.jsonl
Normal file
17
.paul/governance/governance_2026-04-27.jsonl
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{"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"}
|
||||||
Reference in New Issue
Block a user