Files
drmaterac.pl/.paul/codebase/structure.md
2026-05-10 21:32:38 +02:00

202 lines
9.8 KiB
Markdown

# Codebase Structure
**Analysis Date:** 2026-05-10
## Directory Layout
```
drmaterac.pl/
├── index.php # Front-office entry (invoked via .htaccess rewrite)
├── .htaccess # 429-line rewrite rules (multi-domain routing, SEO redirects)
├── autoload.php # PSR-4 autoloader bootstrap
├── composer.lock # PHP dependency lock
├── app/ # Symfony AppKernel + admin config
│ ├── AppKernel.php # PrestaShop 1.7.8.11 kernel
│ ├── AppCache.php
│ └── config/ # parameters.php, parameters.yml, config.yml, services/
├── classes/ # PrestaShop core classes (ObjectModel-based)
│ ├── Product.php, Cart.php, Order.php, Customer.php, …
│ ├── Dispatcher.php, Hook.php, Context.php, ObjectModel.php
│ ├── controller/ # FrontController, AdminController, ModuleFrontController…
│ └── db/, cache/ # Database + caching primitives
├── controllers/ # Page controllers (dispatch targets)
│ ├── front/ # CartController, OrderController, ProductController…
│ └── admin/ # Legacy admin (Symfony preferred via iadmin/)
├── modules/ # All installed modules (~138 entries; 50+ active)
│ ├── crosssellpro/ # CUSTOM — Cross Sell PRO carousel module
│ │ ├── crosssellpro.php
│ │ └── views/{templates/hook,css,js}/
│ ├── caraty/ # CUSTOM — site-specific module
│ ├── paynow/, santandercredit/, ps_checkpayment/, ps_wirepayment/ # Payments
│ ├── empikmarketplace/, dpdpoland/ # Marketplace + shipping
│ ├── pdgoogleanalytycs4pro/, fbpixel/, baecommercetracking/ # Analytics
│ ├── ekomiratingsandreviews/, ceneo_trustedreviews/, ekomiSff/ # Reviews
│ └── pagecache/, leo*/, ets_megamenu/, advancedpopupcreator/, …
├── override/ # Core class overrides (107 files; 31 in override/classes/)
│ └── classes/ # Cart.php, CartRule.php, Product.php, Hook.php, Dispatcher.php,
│ # FrontController.php, ProductListingFrontController.php …
├── themes/ # Theme layer
│ ├── leo_gstore/ # ACTIVE child theme (Leo Gstore v1.4)
│ │ ├── templates/ # *.tpl (layout, cart, checkout, product, …)
│ │ ├── modules/ # Per-module template overrides
│ │ ├── assets/cache/ # Pre-bundled JS/CSS
│ │ └── config.xml, config.rb
│ └── _libraries/, classic.zip, leo_gstore.zip
├── config/ # Bootstrap + Smarty config (NOT app/config/)
│ ├── config.inc.php, defines.inc.php, bootstrap.php
│ └── smarty*.config.inc.php
├── src/ # Custom PSR-4 namespaced code
│ └── Core/Localization/Locale.php
├── translations/{en,pl}/ # Localization files
├── mails/{en,pl}/ # Email templates
├── js/ # Global JavaScript (jquery/, date.js)
├── vendor/ # Composer dependencies
├── webservice/dispatcher.php # REST API dispatcher
├── iadmin/ # CUSTOM-NAMED admin folder (5 MB errors.log inside)
│ ├── index.php # Symfony admin entry
│ ├── backups/, filemanager/, autoupgrade/, api/, export/, import/
│ └── errors.log # ⚠ committed log (see concerns.md)
├── changelog/ # Daily Polish changelog markdown files
├── docs/ # Project docs
├── localization/ # Localization data
├── scripts/, calculate/ # Utility scripts
├── backup_before_patch/ # ⚠ committed *.backup files (see concerns.md)
├── buy-by-phone.php # Form handler — sends order-by-phone email
├── import-product.php # 813-line XML feed importer
├── category-description.php # Category description endpoint
├── diag_*_tmp.php, info.php # ⚠ diagnostic files (see concerns.md)
└── errors.log # PHP error log (committed; should be gitignored)
```
## Directory Purposes
**`classes/`**
- Purpose: PrestaShop core domain layer (ObjectModel + service classes)
- Key files: `Product.php`, `Cart.php`, `Hook.php`, `Dispatcher.php`, `Context.php`, `ObjectModel.php`
- Subdirectories: `controller/` (controller base classes), `db/`, `cache/`
**`controllers/front/`**
- Purpose: Front-office page controllers — dispatch targets matched by URL
- Key files: `CartController.php`, `OrderController.php`, `ProductController.php`, `CategoryController.php`
**`modules/`**
- Purpose: Extension layer — all features beyond core live here as hook-registered modules
- Key custom: `modules/crosssellpro/crosssellpro.php` (cross-sell carousel)
- Key third-party: payment (paynow, santandercredit), shipping (dpdpoland), marketplace (empikmarketplace), analytics (pdgoogleanalytycs4pro, fbpixel), reviews (ekomi*, ceneo_*)
**`modules/crosssellpro/`** — CUSTOM module (Pyziak Jacek)
- `crosssellpro.php` — module class (~335 lines, v1.1.6)
- `views/templates/hook/cartCrossSell.tpl` — cart carousel
- `views/templates/hook/checkoutCrossSell.tpl` — checkout carousel
- `views/css/cartCrossSell.css` — styles (~159 lines)
- `views/js/cartCrossSell.js` — carousel + AJAX add-to-cart (~99 lines)
**`override/classes/`**
- Purpose: Monkey-patch PrestaShop core without editing core
- Key files: `Cart.php`, `CartRule.php`, `Product.php`, `Hook.php`, `Dispatcher.php`, `controller/FrontController.php`, `controller/ProductListingFrontController.php`
**`themes/leo_gstore/`**
- Purpose: Active child theme (`config.xml`)
- Templates: `templates/*.tpl` (page-level), `modules/<module>/views/templates/hook/*.tpl` (module override)
- Assets: pre-bundled in `assets/cache/`
**`app/`**
- Purpose: Symfony kernel + admin config (NOT to be confused with `config/`)
- Key files: `AppKernel.php`, `config/parameters.php` (DB credentials — currently committed), `config/config.yml`
**`config/`**
- Purpose: Legacy PrestaShop bootstrap + Smarty configuration
- Key files: `config.inc.php`, `defines.inc.php`, `bootstrap.php`, `smarty.config.inc.php`
**`iadmin/`**
- Purpose: Renamed back-office (PrestaShop default is `admin/`)
- Note: contains `errors.log` (5 MB), `backups/` (SQL dumps), `autoupgrade/` payload — investigate cleanup
## Key File Locations
**Entry Points:**
- `index.php` — front-office (rewrite target)
- `iadmin/index.php` — back-office (Symfony AppKernel)
- `webservice/dispatcher.php` — REST API
**Configuration:**
- `app/config/parameters.php` — DB / mail / secrets (PHP)
- `app/config/parameters.yml` — Symfony parameters
- `app/config/config.yml` — Symfony service config
- `config/defines.inc.php` — path constants
- `.htaccess` — Apache rewrite rules (multi-domain)
**Core Logic:**
- Custom cross-sell: `modules/crosssellpro/crosssellpro.php`
- Custom site logic: `modules/caraty/caraty.php`
- Domain models: `classes/Product.php`, `classes/Cart.php`, `classes/Order.php`
- Core overrides: `override/classes/`
**Testing:**
- No project-level test suite
- Examples (third-party module tests): `modules/ps_facetedsearch/tests/`, `modules/gamification/tests/`
**Documentation:**
- `AGENTS.md` (root)
- `docs/` (project docs)
- `changelog/YYYY-MM-DD.md` (daily Polish changelog)
## Naming Conventions
**Files:**
- PHP classes: `PascalCase.php` (e.g. `classes/Product.php`)
- Module entry file: lowercase matching directory (`modules/crosssellpro/crosssellpro.php`)
- Smarty templates: `kebab-case.tpl` or `camelCase.tpl` per module (`cartCrossSell.tpl`)
- Asset files: `camelCase.{js,css}` per module
- Templates in theme module overrides: match hook names (`displayShoppingCartFooter.tpl` style not always followed; module-defined name common)
**Directories:**
- Module folders: lowercase, no underscores preferred (`crosssellpro`, `paynow`, `dpdpoland`)
- Snake_case allowed for compound names (`empikmarketplace`, `ets_megamenu`, `leo_gstore`)
**Special Patterns:**
- Module hook handler: `hook<HookNamePascalCase>()` in module class — e.g. `hookDisplayShoppingCartFooter()`
- Hook registration uses camelCase string: `$this->registerHook('displayShoppingCartFooter')`
- Theme module template path: `themes/<theme>/modules/<module>/views/templates/hook/<name>.tpl`
## Where to Add New Code
**New Module / Feature:**
- Primary: `modules/<module-name>/<module-name>.php` (extends `Module`)
- Templates: `modules/<module-name>/views/templates/hook/<hookName>.tpl`
- Theme override: `themes/leo_gstore/modules/<module-name>/views/templates/hook/<hookName>.tpl`
- CSS/JS: `modules/<module-name>/views/css/`, `modules/<module-name>/views/js/`
**Core class extension:**
- Place in `override/classes/<ClassName>.php` extending the core class — NOT inside `classes/`
**New page controller (rare; usually a module):**
- `controllers/front/<Name>Controller.php`
**New translation:**
- `translations/{en,pl}/<context>.{xlf,php}`
**New PSR-4 utility:**
- `src/<Namespace>/<Class>.php` (autoloader configured in `composer.lock`)
## Special Directories
**`backup_before_patch/`**
- Purpose: Manual backup of search engine module pre-patch
- Source: Manual snapshot
- Committed: Yes (should be removed — see `concerns.md`)
**`themes/leo_gstore/cache/`**
- Purpose: Compiled Smarty templates
- Source: Auto-generated at runtime
- Committed: Should be gitignored (verify)
**`iadmin/backups/`**
- Purpose: PrestaShop database backups (e.g. `1698930967-7683b7af.sql.bz2`)
- Committed: Yes (security risk — see `concerns.md`)
---
*Structure analysis: 2026-05-10*
*Update when directory structure changes*