SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,319
Folders
408
Scanned Size
3.84 GB
PHP Files
879
Editable Text Files
12,580
File viewer
guarded to /htdocs
/SI/operations/bootstrap.php
<?php declare(strict_types=1); $roots = [dirname(__DIR__) . '/private', dirname(__DIR__, 2) . '/private', '/private']; foreach ($roots as $root) { foreach (['config.php', 'twilio.php'] as $file) { $path = rtrim($root, '/') . '/' . $file; if (is_file($path) && is_readable($path)) require_once $path; } } function si_ops_private_root(): string { if (defined('GUARDIAN_PRIVATE_ROOT')) return rtrim((string) GUARDIAN_PRIVATE_ROOT, '/'); foreach ([dirname(__DIR__, 2) . '/private', dirname(__DIR__) . '/private', '/private'] as $path) { if (is_dir($path)) return rtrim($path, '/'); } return dirname(__DIR__); } function si_ops_base_url(): string { return defined('APP_BASE_URL') ? rtrim((string) APP_BASE_URL, '/') : 'https://www.gaylordsinclair.com'; } function si_ops_log_rows(string $name, int $limit = 160): array { $file = si_ops_private_root() . '/logs/' . $name . '.ndjson'; if (!is_readable($file)) return []; $lines = array_slice(file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [], -$limit); $rows = []; foreach (array_reverse($lines) as $line) { $row = json_decode($line, true); if (is_array($row)) $rows[] = $row; } return $rows; } function si_ops_twilio(string $resource, array $fields): array { if (!defined('TWILIO_ACCOUNT_SID')) return ['ok'=>false,'error'=>'Twilio account is unavailable.']; $user = defined('TWILIO_API_KEY_SID') ? (string) TWILIO_API_KEY_SID : (string) TWILIO_ACCOUNT_SID; $pass = defined('TWILIO_API_KEY_SECRET') ? (string) TWILIO_API_KEY_SECRET : (defined('TWILIO_AUTH_TOKEN') ? (string) TWILIO_AUTH_TOKEN : ''); if ($pass === '' || str_contains($pass, 'PASTE_') || !function_exists('curl_init')) return ['ok'=>false,'error'=>'Twilio credential is unavailable.']; $url = 'https://api.twilio.com/2010-04-01/Accounts/' . rawurlencode((string) TWILIO_ACCOUNT_SID) . '/' . $resource . '.json'; $c = curl_init($url); curl_setopt_array($c,[CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>http_build_query($fields),CURLOPT_RETURNTRANSFER=>true,CURLOPT_USERPWD=>$user.':'.$pass,CURLOPT_HTTPAUTH=>CURLAUTH_BASIC,CURLOPT_TIMEOUT=>20]); $body=curl_exec($c); $status=(int)curl_getinfo($c,CURLINFO_RESPONSE_CODE); $err=curl_error($c); curl_close($c); $data=is_string($body)?json_decode($body,true):null; return $status>=200&&$status<300 ? ['ok'=>true,'data'=>$data] : ['ok'=>false,'error'=>is_array($data)?(string)($data['message']??'Twilio rejected the request.'):($err?:'Twilio request failed.')]; } function si_ops_e164(string $number): string { $number = preg_replace('/[^\d+]/', '', $number) ?? ''; if (preg_match('/^\d{10}$/', $number)) $number = '+1'.$number; return preg_match('/^\+[1-9]\d{7,14}$/', $number) ? $number : ''; }
Save file
Quick jump
open a path
Open