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,312
Folders
410
Scanned Size
3.85 GB
PHP Files
891
Editable Text Files
12,573
File viewer
guarded to /htdocs
/connlink/test1/ui/old/lib/providers.php
<?php declare(strict_types=1); function simon_provider_dir(): string { return SIMON_UI_DIR . '/providers'; } function simon_provider_files(): array { $out=[]; foreach(glob(simon_provider_dir().'/*.php')?:[] as $f) $out[]=basename($f,'.php'); sort($out); return $out; } function simon_provider_exists(string $engine): bool { return $engine!=='' && is_file(simon_provider_dir().'/'.basename($engine).'.php'); } function simon_http_get(string $url): array { $st=microtime(true); $ctx=stream_context_create(['http'=>['method'=>'GET','timeout'=>20,'header'=>"Accept: application/json, application/rss+xml, application/xml, text/xml, text/plain, */*\r\nUser-Agent: SIMON-Shared-Backend/2.1\r\n"]]); $raw=@file_get_contents($url,false,$ctx); $ms=(int)round((microtime(true)-$st)*1000); if($raw===false) return ['ok'=>false,'error'=>'request_failed','ms'=>$ms,'json'=>null,'raw'=>null]; $json=json_decode((string)$raw,true); return ['ok'=>true,'error'=>is_array($json)?null:'non_json_response','ms'=>$ms,'json'=>is_array($json)?$json:null,'raw'=>$raw]; } function simon_extract_items(array $j): array { foreach(['items','articles','events','results','features','data','children'] as $k) if(isset($j[$k])&&is_array($j[$k])) return $j[$k]; if(isset($j['health'])&&is_array($j['health'])) return $j['health']; return array_is_list($j)?$j:[$j]; } function simon_normalize_item(array $item,array $feed): array { $d=$item['data']??$item; if(!is_array($d))$d=$item; $p=$d['properties']??[]; if(!is_array($p))$p=[]; $title=$d['title']??$d['name']??$d['headline']??$d['subject']??$p['title']??$p['place']??'(untitled)'; $summary=$d['summary']??$d['snippet']??$d['description']??$d['details']??$d['message']??$d['text']??$p['place']??''; $url=$d['url']??$d['link']??$d['href']??$d['web_url']??'#'; $pub=$d['publishedAt']??$d['published']??$d['date_utc']??$d['time']??$p['time']??gmdate('c'); if(is_numeric($pub)&&(int)$pub>1000000000) $pub=gmdate('c',((int)$pub>9999999999?(int)($pub/1000):(int)$pub)); return ['id'=>(string)($d['id']??sha1((string)$title.'|'.(string)$url)),'feed_id'=>$feed['id'],'source'=>$feed['name'],'category'=>$feed['category'],'engine'=>$feed['engine'],'title'=>(string)$title,'summary'=>(string)$summary,'url'=>(string)$url,'published'=>(string)$pub,'raw'=>$item]; } function simon_run_provider(array $feed): array { if(!$feed['enabled']) return ['ok'=>false,'status'=>'disabled','error'=>'feed_disabled','ms'=>0,'count'=>0,'items'=>[]]; $engine=$feed['engine']; if(!simon_provider_exists($engine)) return ['ok'=>false,'status'=>'provider_missing','error'=>'Provider missing: '.$engine,'ms'=>0,'count'=>0,'items'=>[]]; $file=simon_provider_dir().'/'.basename($engine).'.php'; $runner=require $file; if(is_callable($runner)) return $runner($feed); $url=(string)$feed['url']; if($url===''&&$engine==='weather'&&$feed['lat']!==null&&$feed['lon']!==null) $url='https://api.open-meteo.com/v1/forecast?'.http_build_query(['latitude'=>$feed['lat'],'longitude'=>$feed['lon'],'current'=>'temperature_2m,weather_code,wind_speed_10m','temperature_unit'=>'fahrenheit','wind_speed_unit'=>'mph','timezone'=>'auto']); if($url===''&&$engine==='webhook') $url='/connlink/test1/ui/webhook_inbox.php?stream='.rawurlencode($feed['stream']?:'default').'&limit=100'; if($url==='') return ['ok'=>false,'status'=>'missing_url','error'=>'missing_url','ms'=>0,'count'=>0,'items'=>[]]; if(!empty($feed['params'])) $url.=(str_contains($url,'?')?'&':'?').http_build_query($feed['params']); $res=simon_http_get(simon_abs_url($url)); if(!$res['ok']||!is_array($res['json'])) return ['ok'=>false,'status'=>'failed','error'=>$res['error'],'ms'=>$res['ms'],'count'=>0,'items'=>[]]; $items=[]; foreach(simon_extract_items($res['json']) as $i) if(is_array($i)) $items[]=simon_normalize_item($i,$feed); return ['ok'=>true,'status'=>'online','error'=>null,'ms'=>$res['ms'],'count'=>count($items),'items'=>$items]; } ?>
Save file
Quick jump
open a path
Open