# 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.3–1.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 `` 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*