From ff90e0eb2918fb122f2297a2435ca04bab0dcd6b Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Wed, 14 Jan 2026 16:49:27 +0700 Subject: [PATCH] Initial commit: Add CodeIgniter 4 QC application with full MVC structure - CodeIgniter 4 framework setup with SQL Server database config - Models: Control, Test, Dept, Result, Daily/ Monthly entry models - Controllers: Dashboard, Control, Test, Dept, Entry, Report, API endpoints - Views: CRUD pages with modal dialogs, dashboard, reports - Database: Migrations for control test and daily/monthly result tables - Legacy v1 PHP application preserved in /v1 directory - Documentation: AGENTS.md, VIEWS_RULES.md for development guidelines --- .gitignore | 126 + AGENTS.md | 340 + LICENSE | 22 + README.md | 68 + VIEWS_RULES.md | 531 + app/.htaccess | 6 + app/Common.php | 15 + app/Config/App.php | 202 + app/Config/Autoload.php | 92 + app/Config/Boot/development.php | 34 + app/Config/Boot/production.php | 25 + app/Config/Boot/testing.php | 38 + app/Config/CURLRequest.php | 20 + app/Config/Cache.php | 162 + app/Config/Constants.php | 79 + app/Config/ContentSecurityPolicy.php | 176 + app/Config/Cookie.php | 107 + app/Config/Cors.php | 105 + app/Config/Database.php | 204 + app/Config/DocTypes.php | 43 + app/Config/Email.php | 121 + app/Config/Encryption.php | 92 + app/Config/Events.php | 55 + app/Config/Exceptions.php | 106 + app/Config/Feature.php | 37 + app/Config/Filters.php | 110 + app/Config/ForeignCharacters.php | 12 + app/Config/Format.php | 64 + app/Config/Generators.php | 44 + app/Config/Honeypot.php | 42 + app/Config/Images.php | 31 + app/Config/Kint.php | 63 + app/Config/Logger.php | 151 + app/Config/Migrations.php | 50 + app/Config/Mimes.php | 534 + app/Config/Modules.php | 82 + app/Config/Optimize.php | 30 + app/Config/Pager.php | 37 + app/Config/Paths.php | 78 + app/Config/Publisher.php | 28 + app/Config/Routes.php | 43 + app/Config/Routing.php | 140 + app/Config/Security.php | 86 + app/Config/Services.php | 32 + app/Config/Session.php | 127 + app/Config/Toolbar.php | 122 + app/Config/UserAgents.php | 252 + app/Config/Validation.php | 44 + app/Config/View.php | 62 + app/Controllers/Api/ControlApiController.php | 151 + app/Controllers/Api/DeptApiController.php | 105 + app/Controllers/Api/EntryApiController.php | 143 + app/Controllers/Api/TestApiController.php | 120 + app/Controllers/BaseController.php | 20 + app/Controllers/Control.php | 36 + app/Controllers/Dashboard.php | 28 + app/Controllers/Dept.php | 25 + app/Controllers/Entry.php | 32 + app/Controllers/PageController.php | 158 + app/Controllers/Report.php | 26 + app/Controllers/Test.php | 29 + app/Database/Migrations/.gitkeep | 0 .../2026-01-14-000001_CreateCmodQcTables.php | 210 + app/Database/Seeds/.gitkeep | 0 app/Database/Seeds/CmodQcSeeder.php | 322 + app/Filters/.gitkeep | 0 app/Helpers/.gitkeep | 0 app/Language/.gitkeep | 0 app/Language/en/Validation.php | 4 + app/Libraries/.gitkeep | 0 app/Models/.gitkeep | 0 app/Models/ControlModel.php | 41 + app/Models/ControlTestModel.php | 32 + app/Models/DailyResultModel.php | 61 + app/Models/DeptModel.php | 16 + app/Models/DictControlModel.php | 41 + app/Models/DictDeptModel.php | 16 + app/Models/DictTestModel.php | 29 + app/Models/MonthlyCommentModel.php | 38 + app/Models/ResultCommentModel.php | 38 + app/Models/ResultModel.php | 61 + app/Models/TestModel.php | 29 + app/ThirdParty/.gitkeep | 0 app/Views/control/dialog_form.php | 95 + app/Views/control/form.php | 46 + app/Views/control/index.php | 242 + app/Views/dashboard.php | 142 + app/Views/dept/dialog_form.php | 60 + app/Views/dept/index.php | 187 + app/Views/entry/daily.php | 256 + app/Views/entry/monthly.php | 307 + app/Views/errors/cli/error_404.php | 7 + app/Views/errors/cli/error_exception.php | 65 + app/Views/errors/cli/production.php | 5 + app/Views/errors/html/debug.css | 194 + app/Views/errors/html/debug.js | 116 + app/Views/errors/html/error_400.php | 84 + app/Views/errors/html/error_404.php | 84 + app/Views/errors/html/error_exception.php | 429 + app/Views/errors/html/production.php | 25 + app/Views/layout/form_layout.php | 65 + app/Views/layout/main_layout.php | 242 + app/Views/report/index.php | 141 + app/Views/report/view.php | 286 + app/Views/test/dialog_form.php | 89 + app/Views/test/index.php | 231 + app/Views/welcome_message.php | 331 + app/index.html | 11 + builds | 125 + composer.json | 43 + composer.lock | 2111 + env | 69 + phpunit.xml.dist | 63 + preload.php | 112 + public/.htaccess | 50 + public/favicon.ico | Bin 0 -> 5430 bytes public/index.php | 59 + public/js/app.js | 75 + public/js/charts.js | 128 + public/js/tables.js | 186 + public/robots.txt | 2 + spark | 87 + tests/.htaccess | 6 + tests/README.md | 118 + .../2020-02-22-222222_example_migration.php | 37 + .../_support/Database/Seeds/ExampleSeeder.php | 41 + tests/_support/Libraries/ConfigReader.php | 19 + tests/_support/Models/ExampleModel.php | 24 + tests/database/ExampleDatabaseTest.php | 46 + tests/index.html | 11 + tests/session/ExampleSessionTest.php | 17 + tests/unit/HealthTest.php | 49 + v1/assets/Chart.min.js | 13 + v1/assets/jquery.js | 4 + v1/assets/normalize.min.css | 349 + v1/assets/plotly.js | 78 + v1/assets/style_report.css | 16 + v1/assets/styles.css | 26 + v1/cmod-qc_script.sql | Bin 0 -> 17640676 bytes v1/cmod-qc_script_utf8.sql | 49594 ++++++++++++++++ v1/config.php | 19 + v1/inc/control_add.php | 26 + v1/inc/control_del.php | 13 + v1/inc/control_edit.php | 45 + v1/inc/control_index.php | 26 + v1/inc/control_lotadd.php | 27 + v1/inc/ct_del.php | 8 + v1/inc/ct_edit.php | 29 + v1/inc/ct_view.php | 64 + v1/inc/entry.php | 99 + v1/inc/entry_ajax.php | 51 + v1/inc/entry_daily.php | 74 + v1/inc/entry_daily_1.php | 85 + v1/inc/entry_monthly.php | 192 + v1/inc/qc.php | 326 + v1/inc/report.php | 74 + v1/inc/report_1c.php | 145 + v1/inc/report_2c.php | 190 + v1/inc/report_3c.php | 204 + v1/inc/test_add.php.bak | 32 + v1/inc/test_del.php | 7 + v1/inc/test_edit.php | 72 + v1/inc/test_index.php | 28 + v1/inc/view.php | 113 + v1/inc/view_ajax.php | 55 + v1/index.php | 57 + v1/qc20260114.bak | Bin 0 -> 8625664 bytes writable/.htaccess | 6 + writable/cache/index.html | 11 + writable/debugbar/index.html | 11 + writable/index.html | 11 + writable/logs/index.html | 11 + writable/session/index.html | 11 + writable/uploads/index.html | 11 + 174 files changed, 66312 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 VIEWS_RULES.md create mode 100644 app/.htaccess create mode 100644 app/Common.php create mode 100644 app/Config/App.php create mode 100644 app/Config/Autoload.php create mode 100644 app/Config/Boot/development.php create mode 100644 app/Config/Boot/production.php create mode 100644 app/Config/Boot/testing.php create mode 100644 app/Config/CURLRequest.php create mode 100644 app/Config/Cache.php create mode 100644 app/Config/Constants.php create mode 100644 app/Config/ContentSecurityPolicy.php create mode 100644 app/Config/Cookie.php create mode 100644 app/Config/Cors.php create mode 100644 app/Config/Database.php create mode 100644 app/Config/DocTypes.php create mode 100644 app/Config/Email.php create mode 100644 app/Config/Encryption.php create mode 100644 app/Config/Events.php create mode 100644 app/Config/Exceptions.php create mode 100644 app/Config/Feature.php create mode 100644 app/Config/Filters.php create mode 100644 app/Config/ForeignCharacters.php create mode 100644 app/Config/Format.php create mode 100644 app/Config/Generators.php create mode 100644 app/Config/Honeypot.php create mode 100644 app/Config/Images.php create mode 100644 app/Config/Kint.php create mode 100644 app/Config/Logger.php create mode 100644 app/Config/Migrations.php create mode 100644 app/Config/Mimes.php create mode 100644 app/Config/Modules.php create mode 100644 app/Config/Optimize.php create mode 100644 app/Config/Pager.php create mode 100644 app/Config/Paths.php create mode 100644 app/Config/Publisher.php create mode 100644 app/Config/Routes.php create mode 100644 app/Config/Routing.php create mode 100644 app/Config/Security.php create mode 100644 app/Config/Services.php create mode 100644 app/Config/Session.php create mode 100644 app/Config/Toolbar.php create mode 100644 app/Config/UserAgents.php create mode 100644 app/Config/Validation.php create mode 100644 app/Config/View.php create mode 100644 app/Controllers/Api/ControlApiController.php create mode 100644 app/Controllers/Api/DeptApiController.php create mode 100644 app/Controllers/Api/EntryApiController.php create mode 100644 app/Controllers/Api/TestApiController.php create mode 100644 app/Controllers/BaseController.php create mode 100644 app/Controllers/Control.php create mode 100644 app/Controllers/Dashboard.php create mode 100644 app/Controllers/Dept.php create mode 100644 app/Controllers/Entry.php create mode 100644 app/Controllers/PageController.php create mode 100644 app/Controllers/Report.php create mode 100644 app/Controllers/Test.php create mode 100644 app/Database/Migrations/.gitkeep create mode 100644 app/Database/Migrations/2026-01-14-000001_CreateCmodQcTables.php create mode 100644 app/Database/Seeds/.gitkeep create mode 100644 app/Database/Seeds/CmodQcSeeder.php create mode 100644 app/Filters/.gitkeep create mode 100644 app/Helpers/.gitkeep create mode 100644 app/Language/.gitkeep create mode 100644 app/Language/en/Validation.php create mode 100644 app/Libraries/.gitkeep create mode 100644 app/Models/.gitkeep create mode 100644 app/Models/ControlModel.php create mode 100644 app/Models/ControlTestModel.php create mode 100644 app/Models/DailyResultModel.php create mode 100644 app/Models/DeptModel.php create mode 100644 app/Models/DictControlModel.php create mode 100644 app/Models/DictDeptModel.php create mode 100644 app/Models/DictTestModel.php create mode 100644 app/Models/MonthlyCommentModel.php create mode 100644 app/Models/ResultCommentModel.php create mode 100644 app/Models/ResultModel.php create mode 100644 app/Models/TestModel.php create mode 100644 app/ThirdParty/.gitkeep create mode 100644 app/Views/control/dialog_form.php create mode 100644 app/Views/control/form.php create mode 100644 app/Views/control/index.php create mode 100644 app/Views/dashboard.php create mode 100644 app/Views/dept/dialog_form.php create mode 100644 app/Views/dept/index.php create mode 100644 app/Views/entry/daily.php create mode 100644 app/Views/entry/monthly.php create mode 100644 app/Views/errors/cli/error_404.php create mode 100644 app/Views/errors/cli/error_exception.php create mode 100644 app/Views/errors/cli/production.php create mode 100644 app/Views/errors/html/debug.css create mode 100644 app/Views/errors/html/debug.js create mode 100644 app/Views/errors/html/error_400.php create mode 100644 app/Views/errors/html/error_404.php create mode 100644 app/Views/errors/html/error_exception.php create mode 100644 app/Views/errors/html/production.php create mode 100644 app/Views/layout/form_layout.php create mode 100644 app/Views/layout/main_layout.php create mode 100644 app/Views/report/index.php create mode 100644 app/Views/report/view.php create mode 100644 app/Views/test/dialog_form.php create mode 100644 app/Views/test/index.php create mode 100644 app/Views/welcome_message.php create mode 100644 app/index.html create mode 100644 builds create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 env create mode 100644 phpunit.xml.dist create mode 100644 preload.php create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/js/app.js create mode 100644 public/js/charts.js create mode 100644 public/js/tables.js create mode 100644 public/robots.txt create mode 100644 spark create mode 100644 tests/.htaccess create mode 100644 tests/README.md create mode 100644 tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php create mode 100644 tests/_support/Database/Seeds/ExampleSeeder.php create mode 100644 tests/_support/Libraries/ConfigReader.php create mode 100644 tests/_support/Models/ExampleModel.php create mode 100644 tests/database/ExampleDatabaseTest.php create mode 100644 tests/index.html create mode 100644 tests/session/ExampleSessionTest.php create mode 100644 tests/unit/HealthTest.php create mode 100644 v1/assets/Chart.min.js create mode 100644 v1/assets/jquery.js create mode 100644 v1/assets/normalize.min.css create mode 100644 v1/assets/plotly.js create mode 100644 v1/assets/style_report.css create mode 100644 v1/assets/styles.css create mode 100644 v1/cmod-qc_script.sql create mode 100644 v1/cmod-qc_script_utf8.sql create mode 100644 v1/config.php create mode 100644 v1/inc/control_add.php create mode 100644 v1/inc/control_del.php create mode 100644 v1/inc/control_edit.php create mode 100644 v1/inc/control_index.php create mode 100644 v1/inc/control_lotadd.php create mode 100644 v1/inc/ct_del.php create mode 100644 v1/inc/ct_edit.php create mode 100644 v1/inc/ct_view.php create mode 100644 v1/inc/entry.php create mode 100644 v1/inc/entry_ajax.php create mode 100644 v1/inc/entry_daily.php create mode 100644 v1/inc/entry_daily_1.php create mode 100644 v1/inc/entry_monthly.php create mode 100644 v1/inc/qc.php create mode 100644 v1/inc/report.php create mode 100644 v1/inc/report_1c.php create mode 100644 v1/inc/report_2c.php create mode 100644 v1/inc/report_3c.php create mode 100644 v1/inc/test_add.php.bak create mode 100644 v1/inc/test_del.php create mode 100644 v1/inc/test_edit.php create mode 100644 v1/inc/test_index.php create mode 100644 v1/inc/view.php create mode 100644 v1/inc/view_ajax.php create mode 100644 v1/index.php create mode 100644 v1/qc20260114.bak create mode 100644 writable/.htaccess create mode 100644 writable/cache/index.html create mode 100644 writable/debugbar/index.html create mode 100644 writable/index.html create mode 100644 writable/logs/index.html create mode 100644 writable/session/index.html create mode 100644 writable/uploads/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87e86b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,126 @@ +#------------------------- +# Operating Specific Junk Files +#------------------------- + +# OS X +.DS_Store +.AppleDouble +.LSOverride + +# OS X Thumbnails +._* + +# Windows image file caches +Thumbs.db +ehthumbs.db +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Linux +*~ + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +#------------------------- +# Environment Files +#------------------------- +# These should never be under version control, +# as it poses a security risk. +.env +.vagrant +Vagrantfile + +#------------------------- +# Temporary Files +#------------------------- +writable/cache/* +!writable/cache/index.html + +writable/logs/* +!writable/logs/index.html + +writable/session/* +!writable/session/index.html + +writable/uploads/* +!writable/uploads/index.html + +writable/debugbar/* +!writable/debugbar/index.html + +php_errors.log + +#------------------------- +# User Guide Temp Files +#------------------------- +user_guide_src/build/* +user_guide_src/cilexer/build/* +user_guide_src/cilexer/dist/* +user_guide_src/cilexer/pycilexer.egg-info/* + +#------------------------- +# Test Files +#------------------------- +tests/coverage* + +# Don't save phpunit under version control. +phpunit + +#------------------------- +# Composer +#------------------------- +vendor/ + +#------------------------- +# IDE / Development Files +#------------------------- + +# Modules Testing +_modules/* + +# phpenv local config +.php-version + +# Jetbrains editors (PHPStorm, etc) +.idea/ +*.iml + +# NetBeans +/nbproject/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/nbactions.xml +/nb-configuration.xml +/.nb-gradle/ + +# Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache +*.sublime-workspace +*.sublime-project +.phpintel +/api/ + +# Visual Studio Code +.vscode/ + +/results/ +/phpunit*.xml diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ca17ce0 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,340 @@ +# AGENTS.md - QC Application Development Guide + +This document provides guidelines for agentic coding agents working on this PHP QC (Quality Control) application built with CodeIgniter 4. + +## Project Overview + +This is a CodeIgniter 4 PHP application using SQL Server database for quality control data management. The app handles control tests, daily/monthly entries, and reporting. Uses Tailwind CSS and Alpine.js for UI. + +## Build/Lint/Test Commands + +```bash +# PHP syntax check single file +php -l app/Controllers/Dashboard.php + +# PHP syntax check all files recursively +find . -name "*.php" -exec php -l {} \; 2>&1 | grep -v "No syntax errors" + +# Run all PHPUnit tests +./vendor/bin/phpunit + +# Run single test class +./vendor/bin/phpunit tests/unit/HealthTest.php + +# Run single test method +./vendor/bin/phpunit tests/unit/HealthTest.php --filter=testIsDefinedAppPath + +# Run with coverage report +./vendor/bin/phpunit --coverage-html coverage/ + +# Start development server +php spark serve +``` + +## Code Style Guidelines + +### General Principles + +- Follow CodeIgniter 4 MVC patterns +- Maintain consistency with surrounding code +- Keep files focused (<200 lines preferred) +- Use clear, descriptive names + +### PHP Style + +- Use `dictTestModel = new DictTestModel(); + } + + public function index(): string + { + $data = [ + 'title' => 'Test Dictionary', + 'tests' => $this->dictTestModel->findAll(), + ]; + + return view('layout', [ + 'content' => view('test/index', $data), + 'page_title' => 'Test Dictionary', + 'active_menu' => 'test' + ]); + } +} +``` + +**Models** extend `CodeIgniter\Model`: +```php +namespace App\Models; + +use CodeIgniter\Model; + +class TestModel extends Model +{ + protected $table = 'dict_test'; + protected $primaryKey = 'id'; + protected $returnType = 'array'; + protected $useSoftDeletes = false; + protected $allowedFields = ['deptid', 'name', 'unit', 'method']; +} +``` + +**Views** use PHP short tags `= ?>` for output: +```php +
| = $record['name'] ?> | ++ + + | +
Module description
+Loading...
+No data found
+| # | +Code | +Name | +Actions | +
|---|---|---|---|
| + | + + | ++ | + + + | +
Select an item to view details
+