# Technology Stack **Analysis Date:** 2026-04-21 ## Languages **Primary:** - PHP >= 7.4 - Server-side application code (all `application/` and `addons/`) - JavaScript (ES5) - Frontend client code (`public/assets/js/`) **Secondary:** - HTML/Think Template - View templates (`application/*/view/`) ## Runtime **Environment:** - PHP >= 7.4.0 (required by `composer.json`) - Required extensions: `ext-json`, `ext-curl`, `ext-pdo`, `ext-bcmath` **Package Manager:** - Composer - PHP dependency management; lockfile `composer.lock` present - npm - Frontend dependency management; `node_modules/` present - Lockfiles: `composer.lock` (present), `package-lock.json` (not detected) ## Frameworks **Core:** - ThinkPHP 5.x (dev-master from `https://gitee.com/fastadminnet/framework.git`) - PHP MVC framework, the foundation of the entire application - FastAdmin 1.6.1 - Admin backend framework built on ThinkPHP + Bootstrap; actual internal version `1.6.2.20260323` (from `application/config.php` `fastadmin.version`) **Frontend:** - RequireJS 2.x - AMD module loader for JavaScript (`public/assets/js/require-backend.js`, `require-frontend.js`) - Bootstrap 3.4.1 (via `fastadmin-bootstrap`) - UI component framework - jQuery 3.7.1 - DOM manipulation and AJAX - AdminLTE - Admin dashboard theme (referenced in `require-backend.js` paths) **Testing:** - Not detected - No test framework configured (no PHPUnit, no `tests/` directory) **Build/Dev:** - Grunt 1.5.3 - Task runner for frontend asset build - requirejs optimizer (r.js) - JS/CSS minification via custom `application/admin/command/Min/r` - uglify - JavaScript minification - parse-config-file + jsonminify - RequireJS config parsing during build ## Key Dependencies **Critical:** - `topthink/framework` dev-master - ThinkPHP core framework (Gitee mirror) - `topthink/think-captcha` ^1.0.9 - CAPTCHA image generation - `topthink/think-queue` 1.1.6 - Redis-backed job queue system - `topthink/think-helper` ^1.0.7 - ThinkPHP utility helpers - `fastadminnet/fastadmin-addons` ~1.4.0 - Plugin/addon system - `fastadminnet/fastadmin-mailer` ^2.0.0 - Email sending **Infrastructure:** - `guzzlehttp/guzzle` ^7.10 - HTTP client for external API requests (used in `application/index/controller/Index.php` to scrape `macaumarksix.com`) - `overtrue/pinyin` ^3.0 - Chinese Pinyin conversion - `overtrue/wechat` ^4.6 - WeChat SDK integration - `phpoffice/phpspreadsheet` ^1.29.1 - Excel/CSV import-export (used in `application/admin/library/traits/Backend.php` `import()` method) **Frontend Libraries (via npm):** - `fastadmin-bootstraptable` ^1.11.12 - Data table with search/sort/pagination - `fastadmin-layer` ^3.5.6 - Modal/overlay dialogs - `fastadmin-selectpage` ^1.1.1 - Select with autocomplete - `fastadmin-nicevalidator` ^1.1.6 - Form validation - `eonasdan-bootstrap-datetimepicker` ^4.17.49 - Date/time picker - `bootstrap-daterangepicker` ~2.1.25 - Date range picker - `bootstrap-select` ^1.13.18 - Enhanced select dropdown - `jstree` ~3.3.2 - Tree view component - `font-awesome` ^4.6.1 - Icon font - `moment` ^2.10 - Date manipulation - `art-template` (via fastadmin-arttemplate) ^3.1.4 - Template engine - `toastr` ~2.1.3 - Notification toasts - `jquery-slimscroll` ~1.3.8 - Custom scrollbar - `jquery.cookie` ~1.4.1 - Cookie utility - `sortablejs` ^1.12.0 - Drag and drop sorting - `fastadmin-dragsort` ^1.0.5 - Drag sort plugin - `fastadmin-addtabs` ^1.0.8 - Multi-tab navigation - `fastadmin-citypicker` ^1.3.6 - City selector - `fastadmin-cxselect` ^1.4.0 - Cascading select - `bootstrap-slider` ^11.0.2 - Range slider - `tableexport.jquery.plugin` ^1.20 - Table export to Excel/CSV/PDF - `require-css` ~0.1.8 - CSS loading via RequireJS ## Configuration **Environment:** - Configuration via PHP arrays in `application/config.php`, `application/database.php`, `application/extra/*.php` - Environment variable override via `think\Env` class (e.g., `Env::get('database.hostname', '127.0.0.1')`) - `.env` file present for environment-specific overrides (secrets not inspected) - Key configs: `site.php` (site settings, email SMTP), `upload.php` (file upload rules), `queue.php` (Redis connection), `addons.php` (plugin hooks/routes) **Build:** - `Gruntfile.js` - Build orchestration - Build tasks: `deploy` (copy libs from node_modules to `public/assets/libs/`), `frontend:js`, `backend:js`, `frontend:css`, `backend:css` (RequireJS r.js optimization) - Default task: `grunt` = `['deploy', 'frontend:js', 'backend:js', 'frontend:css', 'backend:css']` - Output: `public/assets/js/require-backend.min.js`, `require-frontend.min.js`, etc. ## Platform Requirements **Development:** - PHP >= 7.4 with extensions: json, curl, pdo, bcmath - MySQL database (utf8mb4 charset) - Redis (for queue system) - Node.js + npm (for frontend dependencies and Grunt build) - Composer (for PHP dependencies) - `.env` file configured with database credentials **Production:** - Self-hosted PHP deployment (no Docker detected) - Apache or Nginx web server (with URL rewriting for ThinkPHP PATH_INFO) - MySQL database with `fa_` table prefix - Redis for queue processing (`think-queue`) - `public/` directory as web root - `application/admin/command/Install/install.lock` present - indicates installation completed ## Module Structure The application uses ThinkPHP multi-module architecture: | Module | Purpose | Location | |--------|---------|----------| | `admin` | Backend admin panel | `application/admin/` | | `index` | Frontend website | `application/index/` | | `api` | REST API endpoints | `application/api/` | | `common` | Shared code | `application/common/` | ## Recently Added Components **Num Controller/Model** - New "数字波色" (number color/wave) feature: - Controller: `D:\code\php\amlhc\application\admin\controller\Num.php` - Returns number-to-color mapping via `getColorMap()` API endpoint - Model: `D:\code\php\amlhc\application\admin\model\Num.php` - Simple model for `fa_num` table, no timestamp fields - Used by `history.js` frontend to render colored number balls in lottery result tables **Command Controller/Model** - Online CLI command management: - Controller: `D:\code\php\amlhc\application\admin\controller\Command.php` - CRUD for CLI commands (crud/menu/min/api generation and execution) - Model: `D:\code\php\amlhc\application\admin\model\Command.php` - Tracks command execution history with integer timestamps, status tracking - Validate: `D:\code\php\amlhc\application\admin\validate\Command.php` - Empty validation rules - Addon: `D:\code\php\amlhc\addons\command\` - Plugin wrapper with menu installation via `addons\command\Command.php` - Output library: `D:\code\php\amlhc\addons\command\library\Output.php` - Extends `\think\console\Output` to capture command output - Frontend: `D:\code\php\amlhc\public\assets\js\backend\command.js` - Complex UI with dynamic form, table field selection, relation config **History Controller/Model** - Lottery history records: - Controller: `D:\code\php\amlhc\application\admin\controller\History.php` - Standard CRUD (inherits Backend trait) - Model: `D:\code\php\amlhc\application\admin\model\History.php` - Simple model for `fa_history` table, no timestamp fields - Validate: `D:\code\php\amlhc\application\admin\validate\History.php` - Empty validation rules - Frontend: `D:\code\php\amlhc\public\assets\js\backend\history.js` - Custom colored ball rendering, loads color map from Num API at `num/getColorMap` - Index controller: `D:\code\php\amlhc\application\index\controller\Index.php` - `get_history()` scrapes `https://history.macaumarksix.com/history/macaujc2/y/2026` using Guzzle **SQL Schema:** `D:\code\php\amlhc\sql\macaujc_history.sql` - Defines `macaujc_history` table with full lottery record fields (expect, open_code, wave, zodiac, odd_even, big_small, etc.) ## CLI Commands Registered in `application/command.php`: - `Crud` - Code generator for CRUD operations (`app\admin\command\Crud`) - `Menu` - Menu generator (`app\admin\command\Menu`) - `Install` - Installation wizard (`app\admin\command\Install`) - `Min` - Asset minification (`app\admin\command\Min`) - `Addon` - Addon management (`app\admin\command\Addon`) - `Api` - API documentation generator (`app\admin\command\Api`) ## Custom Extensions (extend/fast/) Located in `extend/fast/`: - `Auth.php` - Authentication and permission library - `Date.php` - Date/time utilities - `Form.php` - Form builder/generator (largest utility) - `Http.php` - HTTP request utilities - `Pinyin.php` - Chinese pinyin wrapper - `Random.php` - Random string generation - `Rsa.php` - RSA encryption utilities - `Tree.php` - Tree data structure utilities - `Version.php` - Version comparison utilities --- *Stack analysis: 2026-04-21*