This commit is contained in:
2026-04-30 21:31:32 +02:00
parent e22bbde336
commit e6a09f6c95
16 changed files with 1929 additions and 1 deletions

211
.paul/codebase/stack.md Normal file
View File

@@ -0,0 +1,211 @@
# Stack & Integrations
**Analysis Date:** 2026-04-30
---
## Languages
**PHP**
- Minimum required: PHP 5.2 (enforced in `index.php` line 45: `version_compare(PHP_VERSION, '5.2', '<')`)
- Actual server target: unknown — hosting is `host420804.hostido.net.pl`
- Uses `mysqli` extension for database connectivity (not PDO)
- No `composer.json` — all dependencies are managed manually (vendored into `system/` and `js/`)
**JavaScript**
- Vanilla JS (no build pipeline, no npm)
- jQuery (bundled, minified) — version approximate pre-1.5 based on API patterns (`.browser`, no `.on()`)
- All JS files are static, pre-built assets committed directly to repo
**HTML / CSS**
- XHTML 1.0 Transitional doctype on frontend (`default_layout.php`)
- HTML 4.01 doctype on admin layout (`admin_layout.php`)
- Plain CSS — no preprocessor (no SASS/LESS/PostCSS)
- No responsive/mobile CSS detected
---
## Frameworks & Libraries
### Backend
**Kohana 2.3.4** (legacy PHP MVC framework)
- Version confirmed in `system/core/Bootstrap.php`: `define('KOHANA_VERSION', '2.3.4')`
- EOL framework — last released ~2009
- Directory layout:
- `system/` — Kohana core (controllers, libraries, helpers, ORM, router)
- `application/` — application code (controllers, models, views, config)
- `modules/` — optional Kohana modules
- Entry point: `index.php``system/core/Bootstrap.php`
- Routing: `application/config/routes.php`
**Kohana ORM** (bundled in `system/libraries/ORM.php`)
- Active Record pattern
- Models extend `ORM` class: `class Page_Model extends ORM`
- Files: `system/libraries/ORM.php`, `system/libraries/ORM_Iterator.php`, `system/libraries/ORM_Tree.php`, `system/libraries/ORM_Versioned.php`
- Usage example: `ORM::factory('page')->where('name', $name)->find()`
**SwiftMailer v3** (bundled in `system/vendor/swift/`)
- Used via Kohana's email helper (`system/helpers/email.php`)
- Configured in `application/config/email.php`
- Current driver: `native` (PHP `mail()` function)
- SMTP and sendmail drivers available but not configured
### Active Kohana Modules
- **gmaps** (`modules/gmaps/`) — Google Maps v2 API integration for contact page
- **debug_toolbar** (`modules/debug_toolbar/`) — dev toolbar, configured in `application/config/debug_toolbar.php` (NOT listed in active modules in `config.php` — disabled)
Disabled (commented out in `application/config/config.php`):
- `auth`, `forge`, `kodoc`, `media`, `archive`, `payment`, `unit_test`, `object_db`
### Frontend JS Libraries (all vendored in `js/`)
| File | Library | Notes |
|------|---------|-------|
| `js/jquery.min.js` | jQuery | ~1.31.4 era (minified, no version comment) |
| `js/jquery-ui.min.js` | jQuery UI | Bundled with themes in `js/jquery-ui/themes/` |
| `js/jquery.fancybox.pack.js` | FancyBox | Lightbox/modal plugin |
| `js/jquery.jcarousellite.min.js` | jCarouselLite | Carousel plugin |
| `js/jquery.mousewheel.min.js` | jQuery Mousewheel | Scroll support |
| `js/jquery.easing.pack.js` | jQuery Easing | Animation easing |
| `js/jquery.lightbox.min.js` | jQuery Lightbox | Alternative lightbox (unused, commented out in layout) |
| `js/jquery.bgiframe.min.js` | bgiframe | IE6 z-index fix |
| `js/jquery.pngfix.min.js` | PNG Fix | IE6 PNG transparency (unused, commented out) |
| `js/swfobject.min.js` | SWFObject 2.1 | Flash embed for `flash/centrumcopy.swf` |
| `js/tiny_mce/tiny_mce.js` | TinyMCE 3.2.7 | WYSIWYG editor in admin panel |
| `js/swampy_browser/` | SwampyBrowser 1.1 | File/image manager integrated with TinyMCE |
---
## Database
**Engine:** MySQL (via `mysqli` PHP extension)
**Connection config:** `application/config/database.php`
- Host: `localhost`
- Database: `host420804_db`
- User: `host420804_db`
- Password: stored in config file (plaintext — see CONCERNS)
- Character set: `utf8`
- Table prefix: none
- Persistent connections: disabled
- Query caching: disabled
- Benchmarking: enabled
**ORM / Query builder:** Kohana's built-in ORM (`system/libraries/ORM.php`) and query builder (`system/libraries/Database.php`). No Doctrine, no Eloquent.
**Application models** (`application/models/`):
| Model file | ORM class | Table |
|-----------|-----------|-------|
| `application/models/page.php` | `Page_Model extends ORM` | `page` |
| `application/models/user.php` | (user auth model) | `user` |
| `application/models/gallery.php` | Gallery_Model | `gallery` |
| `application/models/gallery_image.php` | Gallery_Image_Model | `gallery_image` |
| `application/models/news.php` | News_Model | `news` |
**Schema documentation:** Not present. See `.paul/codebase/db_schema.md` when created.
**Custom DB extension:** `application/libraries/MY_Database.php` — overrides `select()` to fix COUNT() handling with table prefix.
---
## External Integrations
### Google Maps API v2
- Module: `modules/gmaps/`
- Config: `application/config/gmaps.php`
- API key: hardcoded in `application/config/gmaps.php` (old v2 browser key — likely invalid/deprecated)
- Domain: `google.pl`
- Usage: contact page map centered at `50.0491231, 21.9869502` (Rzeszów, ul. Okulickiego 9)
- **Note:** Google Maps JavaScript API v2 was shut down in 2010. This integration is non-functional.
- Implementation: `application/controllers/front/page.php``contact()` method
### Google Analytics (Legacy)
- Config key: `application/config/application.php``$config['google_analytics'] = ''` (empty — disabled)
- Code exists in `application/views/default_layout.php` (classic `ga.js` snippet, not gtag.js)
- Only fires when `IN_PRODUCTION === true` AND `$google_analytics` is non-empty
- Currently: `IN_PRODUCTION` is `false` in `index.php` → Analytics never fires
### Email (SwiftMailer / native PHP mail)
- Library: SwiftMailer v3 bundled in `system/vendor/swift/`
- Config: `application/config/email.php` — driver set to `native` (PHP `mail()`)
- Application email address: `application/config/application.php``$config['email'] = ''` (empty — not configured)
- No transactional email service (no SendGrid, Mailgun, etc.)
### IE7.js (Google Code CDN)
- Loaded from external CDN: `http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js`
- Conditional comment — only loads on IE < 7
- Google Code was shut down in 2016 → this resource is unavailable
- Referenced in: `application/views/default_layout.php` and `application/views/admin_layout.php`
### Flash (SWF)
- Banner: `flash/centrumcopy.swf` (embedded via SWFObject 2.1)
- Fallback: `images/banner.webp` (shown if Flash unavailable)
- Flash is EOL — browsers no longer support it. The `<img>` fallback is what users see.
---
## Infrastructure
### Web Server
- **Apache** with `mod_rewrite` (inferred from `.htaccess`)
- `.htaccess` location: project root
- Key rules:
- Blocks direct access to `application/`, `modules/`, `system/` directories (403)
- 301 redirects for two old URL patterns (service/product pages renamed)
- All non-file/non-directory requests rewritten to `index.php?kohana_uri=$1`
### Hosting
- Provider: **Hostido** (`host420804.hostido.net.pl`)
- Remote path: `/public_html`
- Protocol: FTP (port 21)
- Credentials: `application/config/database.php` (DB), `.vscode/ftp-kr.json` and `.vscode/sftp.json` (FTP)
### Deployment
- **Manual FTP upload** via VS Code extensions:
- `ftp-kr` extension config: `.vscode/ftp-kr.json``autoUpload: true` on file save
- `sftp` extension config: `.vscode/sftp.json``uploadOnSave: false`
- No CI/CD pipeline
- No staging environment detected
- Ignored on upload: `.git`, `/.vscode`, `/.paul`, `/.serena`, `CLAUDE.md`
### Logs
- Application logs: `application/logs/` (PHP files, e.g. `2024-05-18.log.php`)
- Server access logs: `logs/access.log` (rotated with `.xz` compression)
- Server error logs: `logs/error.log`
- Log threshold: 1 (errors and exceptions only) — set in `application/config/config.php`
### Caching
- **Internal file cache:** enabled, 30 seconds — stores file paths and config (`application/config/config.php``internal_cache = 30`)
- Cache files: `application/cache/kohana_configuration`, `kohana_find_file_paths`, `kohana_language`
- No Memcache, Redis, or opcode caching configured
### Sessions
- Driver: native PHP sessions
- Name: `Frisson_session`
- Expiry: 1800 seconds (30 minutes)
- Config: `application/config/session.php`
### Output Compression
- gzip output compression: enabled (`application/config/config.php``output_compression = TRUE`)
- Applied at PHP level by Kohana
---
## Build Tools
**None.** There is no build pipeline.
- No `composer.json` / Composer
- No `package.json` / npm / yarn
- No Webpack, Vite, Gulp, Grunt
- No CSS preprocessor (no SASS/LESS)
- No JS minification step — minified files are committed as-is
- No asset versioning/cache-busting
All JS and CSS files are raw static assets served directly from `js/` and `css/` directories. Updates require manually replacing files and deploying via FTP.
---
*Stack analysis: 2026-04-30*