ko_center System Administrator Documentation
| Application: | ko_center — Centralized LED Dashboard & System Management |
| Version: | v0.70 (2026-08-01) |
| Primary File: | /os/ai/io/ko_center.php (16,322 lines, 205 functions) |
| Database: | SQLite 3 — /os/ai/io/ko_center.db3 (~39.6 MB, 30+ tables) |
| Web Server: | Apache + mod_php (primary) / Python Flask (equivalent: ko_center.py) |
| Language: | PHP 5.3+ (procedural, single-file architecture) |
| Last Modified: | 2026-08-01 06:47 (server time) |
1. System Architecture & Design
1.1 Architectural Overview
ko_center is a single-file PHP web application — all 205 functions and the entire routing logic reside in one file. It follows a traditional LAMP stack pattern with no external framework dependencies.
Key Design Characteristics:
- Single-file architecture: No MVC separation, no separate controller/model/view files
- Procedural programming: All functions are global; no classes or objects
- Global state management:
$GLOBALS for database paths, table names, log files, user info
- Session-based authentication:
$_SESSION['user'], $_SESSION['role']
- URL-based routing:
?q=page/action/id parsed into $options[] array by splitting on /
- Inline HTML generation: Functions return HTML strings concatenated and printed
- SQLite backend: Single-file database, no separate database server required
1.2 Request Lifecycle
HTTP Request → Apache/PHP → startup() → Parse ?q= → Route to handler → Generate HTML → Response
startup() does:
1. session_start()
2. Set error_reporting(0)
3. Initialize $progid, $dttm, $dttm_ip
4. Set $GLOBALS paths (dbfile, kbfile, hosts_allow, logfil, etc.)
5. Detect host OS (win/linux)
6. Parse $_REQUEST['q'] into $options[] array
7. Check if database exists (auto-install if not)
8. Route to appropriate handler based on $options[0]
1.3 Core Global Variables
| Variable | Type | Description |
$progid | string | Program identifier: "ko_center" |
$dttm | string | Current datetime: YYYYMMDD_HHMMSS |
$dttm_ip | string | IP-formatted datetime: YY.MM.DD.HH |
$hostos | string | Operating system: "win" or "" (linux) |
$allowflag | string | Contents of hosts.allow file |
$kb_user | string | KB user extracted from hosts.allow field 2 |
$user | string | Current user from hosts.allow field 2 |
$pass | string | Password from hosts.allow field 3 |
$step | string | Login step indicator |
$leds_context | string | LED context: "racks randomus default" |
$led_context | string | LED context details |
1.4 $GLOBALS Registry
| Key | Value | Purpose |
hosts_allow | $document_root/../safer/hosts.allow | Authentication file path |
kbfile | $document_root/ko_center/db3/koaac_kb.db3 | Knowledge Base database |
kb_rootpath | $document_root/ko_center/kb | KB file storage root |
kbpath | $document_root/ko_center/kb | KB path (alias) |
ko_center_certsfile | $document_root/ko_center/db3/ko_center_certs.db3 | Certificates database |
logfil | $logfil_rootpath/ko_center_YYYYMM.log | Monthly log file |
progid | "ko_center" | Program name |
screenshots_pcharts | "" | pChart screenshot path (empty = disabled) |
dbs | Associative array | Multi-database registry keyed by role |
roles | Array | ['admin', 'local', 'users', 'anon'] |
themes | Array | jQuery UI theme names |
tblname | string | Default table: "leds" |
js_output | boolean | JavaScript output flag (default false) |
2. Installation & Initial Setup
2.1 Prerequisites
| Component | Minimum Version | Notes |
| Web Server | Apache 2.4+ or Python 3.6+ | Apache with mod_php for PHP version; Flask for Python |
| PHP | 5.3+ | Requires PDO SQLite extension |
| SQLite | 3.x | Bundled with PHP PDO |
| ImageMagick | Any version | Required only for LED GIF generation (cr_leds.py) |
| Perl | Any version | Required for iperms utility functions |
| Disk Space | ~50 MB | Database (39.6 MB) + images + logs |
| PHP Memory | 256 MB | memory_limit in php.ini |
2.2 Installation Steps
Step 1: Deploy Application Files
mkdir -p /var/www/html/ko_center
mkdir -p /var/www/html/ko_center/db3
mkdir -p /var/www/html/ko_center/kb
mkdir -p /var/www/html/ko_center/images/btn
mkdir -p /var/www/html/ko_center/images/ani
mkdir -p /var/www/html/ko_center/images/fpb
cp ko_center.php /var/www/html/ko_center/
cp ko_center.db3 /var/www/html/ko_center/db3/
Step 2: Configure hosts.allow
Create or edit /var/www/html/../safer/hosts.allow:
allow all
# Format: allow <user> <role> <username>
# Example: allow admin user joachim
Step 3: Set File Permissions
chown -R www-data:www-data /var/www/html/ko_center/
chmod 666 /var/www/html/ko_center/db3/ko_center.db3
chmod 755 /var/www/html/ko_center/
chmod 666 /var/www/html/ko_center/ko_trigger.dat # if using trigger feature
Step 4: First-Time Initialization
Access the application in a browser:
http://<server>/ko_center/ko_center.php
If the database file doesn't exist, leds_install("new") is called automatically (line 421), which creates all core tables and inserts default data.
Step 5: Verify Installation
?q=about — About page
?q=pdo — Lists all database tables
?q=leds — LED display (requires login)
2.3 leds_install() Function Details
The leds_install() function (line 9707) supports two modes:
| Mode | Behavior |
"new" | Creates database if it doesn't exist. If file already exists, returns error. |
"old" | Renames existing database to ko_center_YYYYMMDD_HHMMSS.db3 before creating a fresh one. |
Tables created during install:
| Function Call | Table Created | Default Data Inserted |
pdo_cr_leds() + pdo_insert_leds() | leds | Yes |
pdo_cr_nodes() + pdo_insert_nodes() | nodes | Yes |
pdo_cr_roles() + pdo_insert_roles() | roles | Yes |
pdo_cr_users() + pdo_insert_users() | users | Yes |
pdo_cr_fp() + pdo_insert_fp() | fp | Yes |
pdo_cr_grid() + pdo_insert_grid() | grid | Yes |
pdo_cr_us() + pdo_insert_us() | us | Yes |
pdo_cr_hw() + pdo_insert_hw() | hw | Yes |
pdo_cr_n11() + pdo_insert_n11() | n11 | Yes |
pdo_cr_dbs() + pdo_insert_dbs() | dbs | Yes |
pdo_cr_fgmenu() + pdo_insert_fgmenu() | fgmenu | Yes |
pdo_cr_obj() + pdo_insert_obj() | obj | Yes |
pdo_cr_pano() + pdo_insert_pano() | pano | Yes |
pdo_cr_kb() | koaac_kb | No (created empty) |
3. Configuration Reference
3.1 Path Configuration (startup() lines 130-151)
| Setting | Default Path | Description |
$path_btn | /ko_center/images/btn | Button image directory |
$path_ani | /ko_center/images/ani | Animated LED GIF directory |
$path_fpb | /ko_center/images/fpb | Floor plan button images |
$logfil_rootpath | $document_root/../ko_safer | Log file directory |
$logfil_basename | ko_center_YYYYMM.log | Monthly log file name |
$hosts_allow | $document_root/../safer/hosts.allow | Authentication file |
$kb_rootpath | $document_root/ko_center/kb | KB file storage |
3.2 Theme Configuration
Available jQuery UI themes (set via $_SESSION['theme']):
| Theme | CSS File | Image Path |
| redmond | js/themes/redmond/jquery-ui-1.7.2.custom.css | js/themes/redmond/images/ |
| humanity | js/themes/humanity/jquery-ui-1.7.2.custom.css | js/themes/humanity/images/ |
| frog | js/themes/le-frog/jquery-ui-1.7.2.custom.css | js/themes/le-frog/images/ |
| swanky | js/themes/swanky-purse/jquery-ui-1.7.2.custom.css | js/themes/swanky-purse/images/ |
| darkness | js/themes/ui-darkness/jquery-ui-1.7.2.custom.css | js/themes/ui-darkness/images/ |
| lightness | js/themes/ui-lightness/jquery-ui-1.7.2.custom.css | js/themes/ui-lightness/images/ |
| sunny | js/themes/sunny/jquery-ui-1.7.2.custom.css | js/themes/sunny/images/ |
| mint | js/themes/mint-choc/jquery-ui-1.7.2.custom.css | js/themes/mint-choc/images/ |
3.3 Session Variables
| Variable | Set By | Values | Purpose |
$_SESSION['user'] | leds_login_validate() | Username string | Authenticated user identity |
$_SESSION['role'] | leds_login_validate() | admin, local, users, anon | Access control level |
$_SESSION['preview'] | User toggle | "on" / "" (empty) | Enable/disable image preview on LED clicks |
$_SESSION['theme'] | User selection | Theme name | UI color theme |
$_SESSION['grid_zoom'] | User toggle | true / "" / false | Grid zoom state |
$_SESSION['hs_type'] | User selection | all, grid, us, hw, n11, none | Hotspot type filter for zoom viewer |
$_SESSION['org_type'] | User selection | a, e, h, o, p, t | Organization type filter |
$_SESSION['gridimgpath'] | js_scripts() | Theme image path | jQuery UI theme images |
4. Database Administration
4.1 Database File
| Property | Value |
| Path | /os/ai/io/ko_center.db3 |
| Type | SQLite 3 |
| Size | ~39.6 MB |
| Tables | 30+ |
| Access Method | PHP PDO via newpdo() function |
| Connection String | sqlite:/os/ai/io/ko_center.db3 |
4.2 Database Connection Function
function newpdo( $dbfile ) {
$pdo = new PDO("sqlite:$dbfile");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
}
4.3 Complete Table Inventory
| Table | Rows | Description |
leds | 262 | LED indicator records (primary display table) |
randomus | 101 | Random user/person data |
leds_randomus | 101 | Combined LED schema + randomus data |
ko_plans | — | Project plans with steps and items |
ko_hw | — | Hardware inventory details |
koaac_kb | — | Knowledge Base articles |
nodes | — | Network nodes and devices |
roles | — | User role definitions |
users | — | User account records |
cabs | — | Cabinet/rack data |
kocab | — | Cabinet details |
kohw | — | Hardware records |
koplans | — | Plan records |
cfg | — | Configuration key-value pairs |
dbs | — | Database registry (multi-DB support) |
menus | — | Navigation menu definitions |
fp | — | Floor plan references |
grid | — | Grid view configuration |
us | — | User-specific data/preferences |
n11 | — | N11 monitoring alert data |
pano | — | Panorama/tour data |
obj | — | Object references |
zoom | — | Zoom viewer configuration |
zoomxml | — | Zoom XML hotspot data |
shelves | — | Shelf/rack shelf data |
hallo | — | Hallo records |
halo | — | Halo records |
nimbus | — | Nimbus records |
aureole | — | Aureole records |
leds_defaults | — | Default LED settings |
leds_racks | — | LED-to-rack mappings |
periods | — | Reporting time periods |
rpts | — | Report definitions and SQL |
hrc_datacenters_equipment | — | Datacenter equipment inventory |
hrc_dc_* | — | Various datacenter tables (1307comm, unix, win, btu, etc.) |
defrag_plan | — | Defragmentation plans |
defrag_plansum | — | Defrag plan summaries |
moveplan_details | — | Move plan details |
es_ip | — | IP address tracking |
es_hw | — | Extended hardware info |
kohw_* | — | Hardware table variants (win, hrc, unix, etc.) |
kohw_hrc_defrag | — | HRC defrag hardware |
kohw_cabs_defrag | — | Cabinet defrag hardware |
4.4 Database Maintenance Commands
# Integrity check
sqlite3 /os/ai/io/ko_center.db3 "PRAGMA integrity_check;"
# List all tables
sqlite3 /os/ai/io/ko_center.db3 ".tables"
# Row counts for all tables
sqlite3 /os/ai/io/ko_center.db3 "SELECT name, (SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=m.name) FROM sqlite_master m WHERE type='table';"
# Vacuum (reclaim space, rebuild database)
sqlite3 /os/ai/io/ko_center.db3 "VACUUM;"
# Analyze (update query planner statistics)
sqlite3 /os/ai/io/ko_center.db3 "ANALYZE;"
# Backup
cp /os/ai/io/ko_center.db3 /os/ai/io/ko_center.db3.backup.$(date +%Y%m%d_%H%M%S)
# Export table to CSV
sqlite3 -header -csv /os/ai/io/ko_center.db3 "SELECT * FROM leds LIMIT 100;" > leds_export.csv
# Check database size
ls -lh /os/ai/io/ko_center.db3
# Check freelist (fragmentation indicator)
sqlite3 /os/ai/io/ko_center.db3 "PRAGMA freelist_count;"
5. User & Role Management
5.1 Authentication Flow
- User accesses application →
leds_login_form() (line 8450) displays login form
- User submits credentials →
leds_login_validate() (line 8568) processes
- Credentials validated against
hosts.allow file contents
- On success:
$_SESSION['user'] and $_SESSION['role'] are set
- On failure: Login form redisplayed with error
- Logout:
leds_logout() (line 8739) clears session and redirects
5.2 Role Definitions
| Role | Description | Access Level |
anon | Unauthenticated / anonymous | Read-only, minimal features |
users | Standard authenticated user | View LED status, basic navigation, grid views |
local | Local/system user | Extended access including config |
op | Operator | Operational features, LED management |
mgrs | Manager | Management features, reports, KB |
admin | Administrator | Full access, all features, database management |
5.3 Role-Based Database Access
The dbs_init() function (line 15441) defines multi-database access by role:
$dbfiles['admin']['ko_center']['dbfile'] = "$document_root/ko_center/ko_center.db3";
$dbfiles['admin']['ko_center']['tables'] = array('fp', 'leds', 'rpts', 'roles', 'users', ...);
Each role has access to specific databases and tables, enabling data isolation between user groups.
6. Security Assessment
Critical Security Notice: ko_center.php is a legacy application with several known security vulnerabilities. Review and remediate before deploying in any production or exposed environment.
6.1 Vulnerability Summary
| # | Vulnerability | Severity | Location | Description |
| V1 |
SQL Injection |
Critical |
leds_show() L6939, pdo_grid() L10686, multiple grid functions |
User input interpolated directly into SQL queries via string concatenation. Example: $sql = "select * from $tblname where led_dttm == 'current' and led_type == '$led_type'" |
| V2 |
Shell Command Injection |
Critical |
leds_process() L6485, iperms() L6425, localcmds() L15887 |
User-controlled values passed to system(), exec(), passthru(), and proc_open() without sanitization |
| V3 |
Cross-Site Scripting (XSS) |
High |
All functions that output user data |
No htmlspecialchars() or output encoding applied to user-supplied data displayed in HTML |
| V4 |
Plain Text Passwords |
High |
randomus table (login_pass column) |
Passwords stored in plain text, no hashing or salting |
| V5 |
No CSRF Protection |
Medium |
All form submissions |
No anti-CSRF tokens on any forms |
| V6 |
No Rate Limiting |
Medium |
Login form, all endpoints |
No brute-force protection or request throttling |
| V7 |
Directory Traversal |
High |
File operations in KB, upload, scrub |
File paths constructed from user input without path sanitization |
| V8 |
Error Information Leakage |
Low |
startup() L107 |
error_reporting(0) suppresses errors but may hide issues; however, custom error messages may leak path info |
| V9 |
Weak Session Management |
Medium |
startup() L105 |
No session regeneration after login, no session timeout, no secure cookie flags |
| V10 |
No HTTPS Enforcement |
Medium |
All endpoints |
No HSTS, no redirect to HTTPS |
6.2 Recommended Remediations
| Vulnerability | Priority | Recommended Fix |
| SQL Injection |
P0 |
Replace all string-interpolated SQL with prepared statements using PDO prepare() / execute() |
| Shell Injection |
P0 |
Use escapeshellarg() on all user input passed to shell commands; consider replacing shell calls with PHP native functions |
| XSS |
P1 |
Apply htmlspecialchars() to all user-supplied data before output in HTML |
| Plain Text Passwords |
P0 |
Hash passwords with password_hash() (bcrypt) and verify with password_verify() |
| CSRF |
P1 |
Add CSRF token generation and validation to all state-changing forms |
| Rate Limiting |
P2 |
Implement login attempt throttling; consider Apache mod_evasive or application-level rate limiting |
| Directory Traversal |
P0 |
Sanitize all file paths with basename() and restrict to allowed directories |
| Session Management |
P1 |
Add session_regenerate_id(true) after login; set session timeout; configure secure cookie flags |
7. Logging, Debugging & Monitoring
7.1 Log File Configuration
Log files are created in the ko_safer directory with monthly rotation:
Log directory: /os/ai/io/../ko_safer/
Log pattern: ko_center_YYYYMM.log
Example: /os/ai/io/../ko_safer/ko_center_202608.log
Log file path construction (startup() lines 144-148):
$yyyymm = date('Ym');
$logfil_basename = $progid . "_" . $yyyymm . ".log";
$logfil_rootpath = $document_root . "/../ko_safer";
$logfil = $logfil_rootpath . "/" . $logfil_basename;
$GLOBALS['logfil'] = $logfil;
7.2 Logging Functions
| Function | Line | Description |
logwrite($logfil, $logrec) | 4673 | Append a record to the log file |
logdump($logfil) | 4683 | Read and display entire log file contents |
bugfile($options) | 10993 | Write comprehensive debug info to fp_bugs.txt (database file, URL table, page, POST data, GET data, session data) |
7.3 Debug Mode
Debug output is currently disabled (error_reporting(0) at line 107). To enable debugging:
- Change
error_reporting(0) to error_reporting(E_ALL) in startup()
- Uncomment debug
print() statements throughout the code (prefixed with //)
- Check log files in
/os/ai/io/../ko_safer/
- Use
?q=about or ?q=pdo for basic diagnostics
7.4 Monitoring Checklist
- Monitor disk space:
df -h /os/ai/io/
- Monitor log file sizes:
ls -lh /os/ai/io/../ko_safer/
- Monitor database file size:
ls -lh /os/ai/io/ko_center.db3
- Check web server error log:
tail -f /var/log/apache2/error.log
- Verify database integrity weekly:
sqlite3 ko_center.db3 "PRAGMA integrity_check;"
8. Backup & Recovery Procedures
8.1 Backup Script
#!/bin/bash
# ko_center_backup.sh — Daily backup script
DB="/os/ai/io/ko_center.db3"
KB="/os/ai/io/ko_center/kb"
CERTS="/os/ai/io/ko_center/db3/ko_center_certs.db3"
KB_DB="/os/ai/io/ko_center/db3/koaac_kb.db3"
BACKUP_DIR="/os/ai/io/backups"
HOSTS_ALLOW="/os/ai/io/../safer/hosts.allow"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Backup database
cp "$DB" "$BACKUP_DIR/ko_center_$DATE.db3"
gzip "$BACKUP_DIR/ko_center_$DATE.db3"
# Backup certificates DB
cp "$CERTS" "$BACKUP_DIR/ko_center_certs_$DATE.db3"
gzip "$BACKUP_DIR/ko_center_certs_$DATE.db3"
# Backup KB database
cp "$KB_DB" "$BACKUP_DIR/koaac_kb_$DATE.db3"
gzip "$BACKUP_DIR/koaac_kb_$DATE.db3"
# Backup hosts.allow
cp "$HOSTS_ALLOW" "$BACKUP_DIR/hosts.allow_$DATE"
# Backup KB file attachments
tar -czf "$BACKUP_DIR/ko_kb_attachments_$DATE.tar.gz" -C "$(dirname $KB)" "$(basename $KB)"
# Keep only last 30 days of backups
find "$BACKUP_DIR" -name "ko_center_*.db3.gz" -mtime +30 -delete
find "$BACKUP_DIR" -name "hosts.allow_*" -mtime +30 -delete
find "$BACKUP_DIR" -name "ko_kb_attachments_*.tar.gz" -mtime +30 -delete
echo "Backup completed: $DATE"
8.2 Recovery Procedure
- Stop the web server:
systemctl stop apache2 (or service apache2 stop)
- Copy backup to database location:
gunzip -c /os/ai/io/backups/ko_center_YYYYMMDD_HHMMSS.db3.gz > /os/ai/io/ko_center.db3
- Verify integrity:
sqlite3 /os/ai/io/ko_center.db3 "PRAGMA integrity_check;"
- Set correct permissions:
chown www-data:www-data /os/ai/io/ko_center.db3
chmod 666 /os/ai/io/ko_center.db3
- Start the web server:
systemctl start apache2
- Verify: Browse to
?q=about and ?q=pdo
8.3 Files to Backup
| File/Directory | Criticality | Backup Frequency |
/os/ai/io/ko_center.db3 | Critical | Daily |
/os/ai/io/ko_center/db3/ko_center_certs.db3 | Critical | Daily |
/os/ai/io/ko_center/db3/koaac_kb.db3 | Critical | Daily |
/os/ai/io/safer/hosts.allow | Critical | Daily |
/os/ai/io/ko_center.php | Critical | On every code change |
/os/ai/io/images/ | High | Weekly |
/os/ai/io/ko_center/kb/ | High | Daily |
/os/ai/io/../ko_safer/ | Medium | Monthly (archived) |
9. Routine Maintenance
9.1 Scheduled Maintenance Tasks
| Task | Frequency | Command / Action |
| Database backup | Daily | Run backup script (see Section 8.1) |
| Log rotation | Monthly | Compress old logs, delete logs older than 90 days |
| Database vacuum | Monthly | sqlite3 ko_center.db3 "VACUUM;" |
| Database analyze | Monthly | sqlite3 ko_center.db3 "ANALYZE;" |
| Disk space check | Weekly | df -h /os/ai/io/ |
| File permissions audit | Weekly | Verify db3 file is writable by web server user |
| Image asset verification | Monthly | Verify images/btn/, images/ani/, images/fpb/ have expected files |
| LED record cleanup | Monthly | Archive or delete old LED records (led_dttm != 'current') |
| KB article review | Monthly | Remove outdated or unused KB entries |
| Database integrity check | Weekly | sqlite3 ko_center.db3 "PRAGMA integrity_check;" |
| Free space check | Weekly | sqlite3 ko_center.db3 "PRAGMA freelist_count;" |
| Trigger file check | Weekly | Verify ko_trigger.dat exists and is writable |
9.2 LED Record Management
LED records use led_dttm = 'current' to mark active records. Historical records should be archived:
-- Archive old LED records to a separate table
CREATE TABLE IF NOT EXISTS leds_archive AS SELECT * FROM leds WHERE 1=0;
INSERT INTO leds_archive SELECT * FROM leds WHERE led_dttm != 'current';
DELETE FROM leds WHERE led_dttm != 'current';
9.3 Database Optimization
# Rebuild all indexes
sqlite3 /os/ai/io/ko_center.db3 "REINDEX;"
# Update query planner statistics
sqlite3 /os/ai/io/ko_center.db3 "ANALYZE;"
# Check database size
ls -lh /os/ai/io/ko_center.db3
# Check for fragmentation
sqlite3 /os/ai/io/ko_center.db3 "PRAGMA freelist_count;"
# If freelist_count > 0, vacuum is recommended
sqlite3 /os/ai/io/ko_center.db3 "VACUUM;"
10. Troubleshooting Guide
10.1 Common Issues & Solutions
| Symptom | Probable Cause | Solution |
| Blank white page |
PHP error suppressed by error_reporting(0) |
Temporarily change error_reporting(0) to error_reporting(E_ALL) in startup() at line 107 |
| "Database not found" error |
ko_center.db3 missing or incorrect path in $GLOBALS['dbfile'] |
Verify path in startup() (line 138); run leds_install("new") by accessing the URL in a browser |
| "Permission denied" errors |
Web server user cannot write to database file or directories |
chown www-data:www-data /os/ai/io/ko_center.db3; chmod 666 /os/ai/io/ko_center.db3 |
| LED images not displaying |
Missing ani_*.gif files in images/ani/ |
Run python3 /os/ai/io/cr_leds.py <static.png> <dynamic.png> |
| Button images broken |
Missing btn_*.gif files in images/btn/ |
Verify button images exist in /os/ai/io/images/btn/ |
| Login fails for all users |
hosts.allow missing, wrong path, or wrong format |
Check /os/ai/io/../safer/hosts.allow exists and contains allow all or properly formatted entries |
| Trigger not refreshing other browsers |
ko_trigger.dat not writable or missing |
touch /os/ai/io/ko_trigger.dat && chmod 666 /os/ai/io/ko_trigger.dat |
| Grid view shows empty or error |
Table doesn't exist or has no data; SQL error |
Verify table exists: sqlite3 ko_center.db3 ".tables"; check SQL in query |
| Report export fails |
File write permission issues in output directory |
Verify web server user has write permission to output directory |
| Slow page loads |
Large database (39.6 MB), complex queries, missing indexes |
Run VACUUM and ANALYZE; add indexes to frequently queried columns |
| KB file uploads fail |
PHP upload_max_filesize or post_max_size too small |
Increase in php.ini: upload_max_filesize = 50M, post_max_size = 50M |
| Theme not applying |
jQuery UI theme CSS files missing |
Verify theme CSS files exist in js/themes/<theme>/ |
10.2 Debugging Checklist
- Check PHP is running:
php -v
- Check database exists:
ls -la /os/ai/io/ko_center.db3
- Check database integrity:
sqlite3 /os/ai/io/ko_center.db3 "PRAGMA integrity_check;"
- Check web server error log:
tail -f /var/log/apache2/error.log
- Check application logs:
ls -la /os/ai/io/../ko_safer/
- Verify file permissions:
namei -l /os/ai/io/ko_center.db3
- Test basic functionality: Browse to
?q=about
- Test database connectivity: Browse to
?q=pdo
- Check PHP error log:
tail -f /var/log/php_errors.log
- Enable error reporting: Temporarily set
error_reporting(E_ALL) in startup()
10.3 Performance Tuning
| Area | Setting | Recommendation |
| PHP Memory | memory_limit | Set to 256M or higher for large grid views |
| PHP Execution Time | max_execution_time | Set to 300 for long-running reports |
| PHP Upload Size | upload_max_filesize | Set to 50M for KB file uploads |
| SQLite Cache Size | PRAGMA cache_size | Set to -64000 (64MB) for better query performance |
| SQLite Journal Mode | PRAGMA journal_mode | Set to WAL for better concurrent read performance |
| Apache KeepAlive | KeepAlive On | Enable for better performance with multiple AJAX requests |
| Apache MaxClients | MaxClients | Adjust based on expected concurrent users |
11. File Structure & Asset Inventory
11.1 Complete Directory Layout
/os/ai/io/
├── ko_center.php [16,322 lines] Main PHP application
├── ko_center.py [Python Flask] Python equivalent
├── ko_center.db3 [39.6 MB] SQLite database
├── ko_center.html [User doc] System user documentation
├── ko_center_admin.html [Admin doc] Administrator documentation (previous)
├── ko_center_sysadm.html [This file] System administrator documentation
├── new_leds.py [Script] Create leds_randomus table
├── new_leds_tbl.py [Script] Generalized table creation
├── cr_leds.py [Script] LED GIF generation with ImageMagick
├── response_trigger_plan.txt [Doc] Trigger mechanism design
├── prompt_*.txt [Prompts] Original task prompts
├── response_*.txt [Docs] Response documents
├── ko_trigger.dat [Runtime] Trigger timestamp (created at runtime)
├── led_red_flashing.jpg [Asset] LED image asset
├── images/
│ ├── btn/ Button GIF images (btn_black.gif, btn_white.gif, etc.)
│ ├── ani/ Animated LED GIFs (ani_red0.gif through ani_trans3.gif)
│ ├── fpb/ Floor plan button images
│ └── cab/ Cabinet images
├── ko_center/
│ ├── db3/ Additional database files
│ │ ├── ko_center_certs.db3
│ │ └── koaac_kb.db3
│ └── kb/ Knowledge Base file storage
├── js/
│ ├── jquery-1.7.2.min.js
│ ├── jquery-ui-1.7.2.custom.min.js
│ ├── fg-menu/ fg-menu JavaScript and CSS
│ ├── jqgrid-4.4.0/ jqGrid library (JS, CSS, images, i18n)
│ └── tooltip/ Tooltip JavaScript
├── css/ Theme CSS files (jQuery UI themes)
├── ../safer/
│ └── hosts.allow Authentication/authorization file
└── ../ko_safer/
└── ko_center_YYYYMM.log Monthly application logs
11.2 Key File Sizes
| File | Size | Lines | Description |
ko_center.php | ~635 KB | 16,322 | Main application (all functionality) |
ko_center.db3 | ~39.6 MB | — | SQLite database |
ko_center.py | — | — | Python Flask equivalent |
new_leds.py | — | — | Create leds_randomus table |
new_leds_tbl.py | — | — | Generalized table creation |
cr_leds.py | — | — | LED GIF generation |
12. PHP Function Reference (205 Functions)
12.1 Core Application Functions
| Function | Line | Purpose |
startup() | 101 | Application initialization: session, globals, paths, config, routing |
html_header() | 8395 | Generate HTML <head> section with CSS/JS includes |
html_footer() | 10987 | Generate HTML </body></html> closing tags |
html_page() | 6635 | Generate complete HTML page (header + buttons + content + footer) |
html_btn_squares() | 7331 | Generate navigation button squares |
js_scripts() | 14337 | Generate JavaScript includes (jQuery, jqGrid, fg-menu) |
leds_show() | 6895 | Main LED display — queries DB, renders LED grid with blinking GIFs |
leds_detail() | 7759 | LED detail view with associated hardware items and images |
leds_about() | 6323 | About page |
leds_login_form() | 8450 | Login form HTML generation |
leds_login_validate() | 8568 | Login credential validation against hosts.allow |
leds_logout() | 8739 | Session cleanup and redirect to main page |
leds_config() | 6653 | Configuration page with theme/org/role/preview/hotspot buttons |
leds_install() | 9707 | Database initialization — creates all tables and inserts default data |
12.2 Database Functions
| Function | Line | Purpose |
newpdo($dbfile) | 6595 | Create SQLite PDO connection |
pdo_create($dbfile, $tblname, $sql) | 9785 | Create a new database table (drop + create) |
pdo_insert($dbfile, $tblname, $data) | 9799 | Insert a row into a table from CSV/PSV file |
pdo_cr_leds() | 9929 | Create the leds table |
pdo_cr_kb() | 9981 | Create the KB (koaac_kb) table |
pdo_cr_nodes() | 10132 | Create the nodes table |
pdo_cr_roles() | 10166 | Create the roles table |
pdo_cr_users() | 10178 | Create the users table |
pdo_cr_fp() | 10200 | Create the floor plan (fp) table |
pdo_cr_grid() | 10220 | Create the grid table |
pdo_cr_us() | 10240 | Create the us (user-specific) table |
pdo_cr_hw() | 10261 | Create the hw table |
pdo_cr_n11() | 10282 | Create the n11 table |
pdo_cr_dbs() | 15641 | Create the dbs (database registry) table |
pdo_cr_flds() | 15728 | Create the flds (fields) table |
pdo_cr_menus() | 9981 | Create the menus table |
pdo_insert_leds() | 10305 | Insert default LED records |
pdo_insert_nodes() | 10423 | Insert default node records |
pdo_insert_roles() | 10474 | Insert default role records |
pdo_insert_users() | 10491 | Insert default user records |
pdo_insert_fp() | 10516 | Insert default floor plan records |
pdo_insert_grid() | 10538 | Insert default grid records |
pdo_insert_us() | 10552 | Insert default user-specific records |
pdo_insert_hw() | 10570 | Insert default hardware records |
pdo_insert_n11() | 10586 | Insert default n11 records |
pdo_insert_obj() | 10600 | Insert default object records |
pdo_insert_pano() | 10621 | Insert default panorama records |
pdo_insert_dbs() | 15754 | Insert default database registry records |
pdo_cr_fgmenu() | 9981 | Create the fgmenu table |
pdo_insert_fgmenu() | 9994 | Insert default fgmenu records |
12.3 Grid & Data Display Functions
| Function | Line | Purpose |
pdo_grid($options) | 10686 | Generate sortable/filterable database grid view |
pdo_gridxml($options) | 11021 | Export grid data as XML |
pdo_unload($options) | 11693 | Unload/export table data |
pdo_list($options) | 11786 | List all database tables |
pdo_update($options) | 11790 | Update table data (inline editing) |
pdo_load($options) | 11794 | Load table data for editing |
sql_view($options) | 9645 | SQL query interface |
leds_view($options) | 9685 | Generic data view |
leds_list($options) | 9689 | Generic data listing |
leds_test($options) | 9694 | Test/diagnostic view |
12.4 Report Functions
| Function | Line | Purpose |
leds_reports_sql($options) | 3681 | SQL query interface for custom reports |
leds_reports_csv($dbfile, $sql, $csvfil) | 3841 | Export report data as CSV |
leds_reports_rpt($options) | 3931 | Generate formatted report with print/export options |
rptsxml($options) | 16043 | XML report generation |
rpts($options) | 16134 | Report listing and management |
reports_menu($code) | 3377 | Generate report navigation menu |
12.5 KB (Knowledge Base) Functions
| Function | Line | Purpose |
leds_kb($options) | 12401 | Knowledge Base listing |
leds_kb_rpts($options) | 12594 | KB reports |
koaac_kb_new_form($options) | 4844 | New KB entry form |
koaac_kb_add_form($options) | 5436 | Add KB entry form |
koaac_kb_upload($kbid) | 5690 | KB file upload handler |
kbwrite($kbfil, $kbrec) | 4661 | Write KB record to file |
kb_ls($options, $path) | 4701 | List KB files in directory |
kb_mkdir($kbpath, $kbid) | 6031 | Create KB directory structure |
12.6 Utility Functions
| Function | Line | Purpose |
logwrite($logfil, $logrec) | 4673 | Write a record to the log file |
logdump($logfil) | 4683 | Dump entire log file contents |
bugfile($options) | 10993 | Write comprehensive debug info to fp_bugs.txt |
ko_unique() | 14904 | Generate UUID |
ko_unique1() | 14909 | Generate short unique ID (8 chars) |
pc_encode($data) | 14918 | PC encoding (obfuscation/encoding) |
pc_decode($data, $hash) | 14923 | PC decoding |
datediff($interval, $date1, $date2) | 14939 | Calculate difference between two dates |
datediff_leds($diffdays) | 14951 | LED-specific date difference (returns color, speed, days) |
iperms($options) | 6425 | System permissions/utility functions (periods, job2db) |
localcmds($options) | 15887 | Local command execution interface |
telnet($options) | 15939 | Telnet connection utility |
ko_imap($options) | 14700 | IMAP email functions |
email_headers() | 16117 | Email header generation |
leds_process($title, $cmd, $cwd) | 6485 | Execute shell process and display formatted output |
leds_process_psv($title, $cmd, $cwd) | 6519 | Execute Perl script process and display output |
leds_process_value($title, $cmd, $cwd) | 6560 | Execute command and return value |
12.7 AJAX Functions
| Function | Line | Purpose |
ko_ajax($options) | 2508 | AJAX request handler (test1: login simulation with refreshPage event) |
ko_ajax_controller($options) | 2532 | Generate AJAX controller JavaScript (LoginController) |
ko_ajax_listener($options) | 2555 | Generate AJAX listener JavaScript (event handling) |
ko_ajax_app($options) | 2580 | Generate AJAX app JavaScript (includes refreshPage → window.location.reload) |
ko_ajax_complete($options) | 2599 | Generate AJAX complete handler (global AJAX event dispatcher) |
ko_ajax_result($options) | 2616 | Generate ServiceResult JavaScript class |
12.8 View/Page Functions
| Function | Line | Purpose |
leds_zm5($options) | 7271 | Zoom level 5 viewer |
leds_zoom($options) | 13443 | Zoom viewer with hotspot navigation |
html_zoom_detail($options) | 8072 | Zoom detail view with XML hotspot config |
leds_ptviewer($options) | 13368 | Panorama/tour viewer |
leds_ptobject($options) | 13835 | Individual panorama object viewer |
leds_zview($options) | 13835 | ZView display |
leds_zview_xml($options) | 13952 | ZView XML generation |
leds_zview_details($options) | 13999 | ZView detail rendering |
leds_zview_xmlnew($options) | 14057 | Create new ZView XML configuration |
leds_zoomxml($options) | 14181 | Zoom XML export |
html_links($options) | 13434 | Links page |
pchart_pie($options) | 4470 | pChart pie chart display |
scrub_view($options) | 6108 | Scrub/data cleanup view |
scrub_show($options) | 6859 | Scrub display with file listing |
scrub_upload_form($options) | 9085 | Scrub file upload form |
scrub_upload($user) | 9154 | Process scrub file upload |
ko_upload2() | 9422 | File upload handler |
ko_uploads() | 9466 | List uploaded files |
leds_update_form($options) | 8776 | LED update form |
leds_update($options) | 8992 | Process LED update |
12.9 Special-Purpose Functions
| Function | Line | Purpose |
im_identify($filemask) | 4300 | ImageMagick file identification |
key2png($key, $val) | 4339 | Key-value to PNG conversion |
sqlq($dbfile, $sql, $fld) | 2801 | Execute SQL query and return field value |
sql_updform(...) | 4410 | SQL update form generation |
csv2db3($csvfil, $delimiter) | 3619 | Import CSV file into database |
getfiles($path, $mask) | 6075 | List files matching a mask in a directory |
fgmenu_head($options) | 14976 | Generate fg-menu head HTML |
fgmenu_js($options) | 15032 | Generate fg-menu JavaScript |
fgmenu_htm($options) | 15075 | Generate fg-menu HTML |
fgmenu_dyn($options) | 15129 | Generate dynamic fg-menu |
menutree(...) | 15313 | Recursive menu tree builder |
head_jqui_css($options) | 14518 | Generate jQuery UI CSS includes |
jqui($jqui) | 16260 | jQuery UI component generator |
css_rollovers_head($options) | 14644 | Generate CSS rollover styles |
js_rollover($options) | 14633 | Generate JavaScript rollover code |
html_btn_hotspots($options, $callback) | 6673 | Generate hotspot type buttons |
html_btn_orgs($options, $callback) | 6729 | Generate organization type buttons |
html_btn_preview($options, $callback) | 6756 | Generate preview mode toggle button |
html_btn_roles($options, $callback) | 6783 | Generate role type buttons |
html_btn_themes($options, $callback) | 6812 | Generate theme selection buttons |
html_btn_footer($options) | 7431 | Generate footer button row |
html_dc_links($option) | 7664 | Generate datacenter links |
html_kb_links($options) | 7687 | Generate KB navigation links |
html_nodes_links($options) | 7707 | Generate node navigation links |
html_scrub($options) | 7728 | Generate scrub navigation |
ko_sessions_start() | 14823 | Session initialization |
ko_sessions() | 14833 | Session management |
ko_validata() | 14842 | Validation function |
ko_validate_form() | 14862 | Form validation |
ko_validate_form_user($user) | 14872 | Validate username |
ko_validate_form_pass($pass) | 14874 | Validate password |
ko_print_form($errors) | 14877 | Print form with error messages |
leds_login_form($options) | 8450 | Login form with jqGrid integration |
ldap_authenticate() | 8525 | LDAP authentication (commented out) |
ko_dragdrop_redirect($options) | 2630 | Drag-and-drop redirect handler |
ko_dragdrop($options) | 2646 | Drag-and-drop interface |
dragdrop_test1($options) | 2697 | Drag-and-drop test page |
ko_im($options) | 2778 | Image manipulation interface |
leds_leds($options) | 3428 | LED management interface |
leds_ko_centerd_rpts($options) | 13137 | ko_centerd reports |
leds_nodes_rpts($options) | 13252 | Node reports |
leds_certs_rpts($options) | 12801 | Certificate reports |
leds_cons_rpts($options) | 12907 | Console reports |
leds_hosts_rpts($options) | 13013 | Host reports |
leds_dc_rpts($options) | 12696 | Datacenter reports |
leds_plans($options) | — | Plan listing and management |
leds_hw($options) | 4560 | Hardware inventory view |
leds_certs($options) | 12164 | Certificate listing |
leds_cons($options) | 12282 | Console listing |
leds_hosts($options) | 12401 | Host listing |
leds_ko_centerd_rpts($options) | 13137 | ko_centerd reports |
leds_reports_sql($options) | 3681 | SQL report interface |
leds_reports_csv($dbfile, $sql, $csvfil) | 3841 | CSV report export |
leds_reports_rpt($options) | 3931 | Formatted report generator |
leds_menu($options) | 9645 | Navigation menu generator |
ko_plans_items($options) | 2819 | Plan items view |
ko_plans_steps($options) | 2920 | Plan steps view |
ko_plans1($options) | 3132 | Plan view v1 |
ko_plans_save($options) | 3138 | Plan save handler |
ko_co($options) | — | ko_center main page handler |
anonymous_option1/2/3($options) | 6402-6404 | Guest anonymous role options |
guest_option1/2/3($options) | 6405-6407 | Guest role options |
user_option1/2/3($options) | 6408-6410 | User role options |
qc_option1/2/3($options) | 6411-6413 | QC role options |
manager_option1/2/3($options) | 6414-6416 | Manager role options |
operator_option1/2/3($options) | 6417-6419 | Operator role options |
admin_option1/2/3($options) | 6420-6422 | Admin role options |
iperms($options) | 6425 | System permissions (periods_p, periods_pp, job2db) |
datediff($interval, $date1, $date2) | 14939 | Date difference calculator |
datediff_leds($diffdays) | 14951 | LED date difference (returns color/speed for LED status) |
sql3_select_hallo($db3file, $db3tbl, $ip) | 6108 | SQLite3 select for hallo table |
sql3_insert_hallo($db3file, $db3tbl) | 6131 | SQLite3 insert for hallo table |
13. Deployment & Server Configuration
13.1 Apache Virtual Host Configuration
<VirtualHost *:80>
ServerName ko_center.example.com
DocumentRoot /os/ai/io
<Directory /os/ai/io>
Options +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# PHP configuration
php_value upload_max_filesize 50M
php_value post_max_size 50M
php_value max_execution_time 300
php_value memory_limit 256M
# SQLite configuration
php_value sqlite.assoc_case 0
# Logging
ErrorLog /var/log/apache2/ko_center_error.log
CustomLog /var/log/apache2/ko_center_access.log combined
# Security headers
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
</VirtualHost>
13.2 Environment Variables
| Variable | Default | Description |
KO_THEME | redmond | jQuery UI theme name |
KO_DB_FILE | /os/ai/io/ko_center.db3 | Database file path |
KO_HOSTS_ALLOW | /os/ai/io/../safer/hosts.allow | Authentication file path |
KO_LOG_DIR | /os/ai/io/../ko_safer | Log file directory |
KO_TRIGGER_FILE | /os/ai/io/ko_trigger.dat | Trigger timestamp file |
13.3 PHP Configuration Recommendations
; php.ini or .htaccess settings for ko_center
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 50M
post_max_size = 50M
; SQLite
sqlite3.extension_dir = ""
; Session
session.gc_maxlifetime = 1440
session.cookie_httponly = 1
session.cookie_samesite = "Lax"
; Error reporting (production)
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
14. Python Flask Equivalent
A Python Flask equivalent of ko_center.php has been created at /os/ai/io/ko_center.py. Key differences:
| Aspect | PHP Version | Python Version |
| Web Framework | Apache + mod_php | Flask (built-in dev server) |
| Routing | ?q=page/action/id parsed manually in startup() | Flask @app.route decorators |
| Database | PDO SQLite | Python sqlite3 module |
| Sessions | $_SESSION | Flask session |
| HTML Generation | String concatenation in functions | String concatenation in functions |
| Authentication | hosts.allow file check | Same hosts.allow file check |
| AJAX | jQuery AJAX + custom ko_ajax functions | Flask jsonify() + jQuery AJAX |
| File Upload | $_FILES superglobal | Flask request.files |
| Process Execution | system(), exec(), passthru() | subprocess module |
| Trigger Endpoint | ?q=trigger (file-based) | /trigger route (file-based) |
Running the Python version:
python3 /os/ai/io/ko_center.py
Then browse to http://localhost:5000
15. API & URL Routing Reference
15.1 Complete Route Reference
| Route Pattern | Method | Handler Function | Description |
?q=leds | GET | leds_show() | Display LED indicators |
?q=leds/detail/<name> | GET | leds_detail() | LED detail view |
?q=about | GET | leds_about() | About page |
?q=login | GET | leds_login_form() | Login form |
?q=login_validate | POST | leds_login_validate() | Process login |
?q=logout | GET | leds_logout() | Logout |
?q=config | GET | leds_config() | Configuration page |
?q=trigger | GET | handle_trigger() | Broadcast trigger (JSON) |
?q=ko_ajax | GET | ko_ajax() | AJAX handler |
?q=ko_dragdrop | GET | ko_dragdrop() | Drag and drop interface |
?q=ko_im | GET | ko_im() | Image manipulation |
?q=grid?dbcode=<db>&table=<tbl> | GET | pdo_grid() | Database grid view |
?q=reports/sql | GET | leds_reports_sql() | SQL query interface |
?q=reports/rpt/<code> | GET | leds_reports_rpt() | Run named report |
?q=kb | GET | leds_kb() | KB listing |
?q=kb/new | GET | koaac_kb_new_form() | New KB entry form |
?q=kb/view/<id> | GET | leds_kb() | View KB entry |
?q=certs | GET | leds_certs() | Certificate listing |
?q=nodes | GET | leds_hosts() | Node listing |
?q=hw | GET | leds_hw() | Hardware inventory |
?q=hw?cab=<cab> | GET | leds_hw() | Hardware filtered by cabinet |
?q=hw?sn=<sn> | GET | leds_hw() | Hardware filtered by serial number |
?q=hw?ip=<ip> | GET | leds_hw() | Hardware filtered by IP |
?q=hw?hrctag=<tag> | GET | leds_hw() | Hardware filtered by HRC tag |
?q=plans | GET | leds_plans() | Plan listing |
?q=sql | GET | sql_view() | SQL query interface |
?q=zoom/<code>/<type>/<rowid> | GET | leds_zoom() | Zoom viewer |
?q=zview/<file>/<xml> | GET | leds_zview() | Full-screen zoom view |
?q=ptviewer | GET | leds_ptviewer() | Panorama viewer |
?q=ptobject | GET | leds_ptobject() | Panorama object viewer |
?q=scrub | GET | scrub_view() | Scrub/data cleanup |
?q=upload | GET/POST | ko_upload2() | File upload |
?q=pdo_cr_kb | GET | pdo_cr_kb() | Create KB table |
?q=pdo_cr_leds | GET | pdo_cr_leds() | Create leds table |
?q=pdo_insert_leds | GET | pdo_insert_leds() | Insert LED record |
?q=pdo_list | GET | pdo_list() | List database tables |
?q=pdo_unload?dbcode=<db>&table=<tbl> | GET | pdo_unload() | Unload/export table |
?q=pdo_update | GET | pdo_update() | Update table data |
?q=pdo_load | GET | pdo_load() | Load table data |
?q=pdo_gridxml?dbcode=<db>&table=<tbl> | GET | pdo_gridxml() | Grid XML export |
?q=dc_rpts | GET | leds_dc_rpts() | Datacenter reports |
?q=kb_rpts | GET | leds_kb_rpts() | KB reports |
?q=certs_rpts | GET | leds_certs_rpts() | Certificate reports |
?q=cons_rpts | GET | leds_cons_rpts() | Console reports |
?q=hosts_rpts | GET | leds_hosts_rpts() | Host reports |
?q=ko_centerd_rpts | GET | leds_ko_centerd_rpts() | ko_centerd reports |
?q=nodes_rpts | GET | leds_nodes_rpts() | Node reports |
?q=form_request_access | GET | inline HTML | Access request form |
?q=konet | GET | inline HTML | Contact information |
?q=pdo | GET | inline HTML | Database table listing |
?q=tools | GET | inline HTML | Tools page |
?q=update/<name> | GET | leds_update_form() | LED update form |
?q=iperms | GET | iperms() | System permissions utility |
?q=iperms/periods_p | GET | iperms() | Run periods_p Perl script |
?q=iperms/job2db/mkwl | GET | iperms() | Run mkwl job |
?q=links | GET | html_links() | Links page |
15.2 Trigger API
The trigger endpoint provides a JSON API for browser refresh coordination across multiple clients:
Request
GET /ko_center/ko_center.php?q=trigger[&last_check=<timestamp>]
Response
{
"triggered": true|false,
"timestamp": "2026-08-01 07:05:00",
"since": "2026-08-01 07:00:00"
}
Workflow
- Browser A polls
?q=trigger every 3 seconds
- Browser B calls
?q=trigger (writes timestamp to ko_trigger.dat)
- Browser A's next poll detects the new timestamp
- Browser A calls
window.location.reload()
16. Version History
| Version | Date | Changes |
| v0.70 | 2026-08-01 | Current: q=leds_context, ranks, randomus, actions |
| v0.67 | 2025-03-25 | q=login debug |
| v0.66 | 2025-03-25 | ERR_210 /etc/hosts.allow fix |
| v0.65 | 2020-10-14 | fpbimg support |
| v0.64 | 2020-09-25 | sql3_insert_hallo, sql3_select_hallo |
| v0.64 | 2020-09-23 | Bug fixes, blank page fixes |
| v0.64 | 2019-08-27 | leds_dragdrop support |
| v0.64 | 2012-12-10 | leds_dragdrop initial |
| v0.64 | 2012-12-07 | ko_ajax, ko_dragdrop, ko_im added |
| v0.64 | 2012-12-02 | reports/rpts img, cab/cab1/cab2, leds/set/ledcode |
| v0.63 | 2012-12-02 | reports/sql |
| v0.62 | 2012-12-02 | reports/sql |
| v0.61 | 2012-11-09 | defrag/report |
| v0.60 | 2012-10-27 | passthru() support |
| v0.59 | 2012-10-27 | hostos win logic |
| v0.57 | 2012-09-27 | gui mods/allow |
| v0.56 | 2012-09-26 | datacall support |
| v0.55 | 2012-09-18 | ko_center_hosts.db3 datacall |
| v0.54 | 2012-09-18 | ko_center_cons.db3 |
| v0.53 | 2012-08-29 | new /pat url, /nap |
| v0.52 | 2012-08-29 | ?q=kb/rpts/rpt_id&fmt=xml & fmt=csv |
| v0.51 | 2012-08-28 | rptsxml |
| v0.50 | 2012-08-28 | jqgrid-4.4.0 integration |
| v0.49 | 2012-08-24 | errtxt, fixtxt to files, fmt4search |
| v0.48 | 2012-08-24 | ko_center.db3 nodes tables & reports |
| v0.47 | 2012-08-23 | ko_center_certs |
| v0.46 | 2012-08-23 | kb upload size increase |
| v0.45 | 2012-08-22 | ko_centerd rpts view grids |
| v0.44 | 2012-08-22 | mod views |
| v0.43 | 2012-08-17 | mod views |
| v0.42 | 2012-08-16 | logins for led tweets |
| v0.41 | 2012-08-16 | ?q=certs/rpts |
| v0.40 | 2012-08-16 | ?q=kb/rpts |
| v0.39 | 2012-08-14 | ko_center main page org |
| v0.38 | 2012-08-13 | ?q=kb/view kb/mod dbgrid links for kb certs |
| v0.37 | 2012-08-09 | links reorg + certs |
| v0.36 | 2012-08-09 | ?q=kb |
| v0.35 | 2012-08-09 | itil to links |
| v0.35 | 2012-08-08 | ko_center_certs.dbe |
| v0.34 | 2012-08-03 | dyn pchart example link & debug |
| v0.33 | 2012-08-01 | pchart link |
| v0.32 | 2012-07-30 | pdo_cr_kb, pdo_cr_flds, new/add/mod/upd/view |
| v0.31 | 2012-07-30 | pdo_cr_kb, pdo_cr_flds |
| v0.30 | 2012-07-27 | pdo_cr_kb |
| v0.29 | 2012-07-27 | newpass1 newpass2 |
| v0.28 | 2012-07-27 | user=hosts.allow[2] |
| v0.27 | — | q=sql/cr/kb |
| v0.26 | — | newpass1 newpass2 |
| v0.25 | — | user info from hosts.allow |
| v0.24 | 2012-07-20 | session role check |
| v0.23 | 2012-07-20 | es/hs,vg,bp/ ... |
| v0.22 | 2012-07-20 | es/us/koSYS_us.php ko_center/us/koSYS_us.php |
| v0.21 | 2012-06-27 | rename scrub update to scrub |
| v0.20 | 2012-06-19 | korhe_us.db3 |
| v0.19 | 2012-06-19 | koaix_us.db3 |
| v0.18 | 2012-06-18 | add kb, bp tables |
| v0.17 | 2012-06-08 | add kb, bp tables |
| v0.16 | 2012-06-05 | add ko_center tables |
| v0.15 | 2012-06-01 | add hs tables |
| v0.14 | 2012-05-31 | add grid tables users us |
| v0.13 | 2012-05-31 | $files=getfilko_center( $path, $mask ) |
| v0.12 | 2012-05-31 | gunzip scrubfile accommodation |
| v0.11 | 2012-05-31 | add serena link |
| v0.10 | 2012-05-16 | refresh to kohpx_vg.php kohpx_us.php kohpx_sw.php |
| v0.09 | 2012-04-25 | db3 grid from /home/ko/vg/kohpx_vg.db3 |
| v0.08 | 2012-03-13 | q=links, sw reports pending |
| v0.07 | 2012-03-13 | btn_footers |
| v0.06 | 2012-03-13 | q=scrub consolidate upload examples |
| v0.05 | 2012-02-16 | ko_upload scrub2 |
| v0.04 | 2012-02-16 | ko_upload scrub |
| v0.03 | 2012-02-07 | Initial development |
| v0.02 | 2012-02-07 | Initial version |
| v0.01 | 2012-02-05 | First release |