' . "\n"; } // Preload imports foreach ($chunk['imports'] ?? [] as $importKey) { $imp = $manifest[$importKey] ?? null; if ($imp) { echo '' . "\n"; } } // Main entry echo '' . "\n"; } // Dev fallback: keine Manifest-Datei → direkte TS-Referenz (Vite Dev Server) } /** Session-Kontext als JS-Variable injizieren */ function injectSessionContext(): void { $ctx = [ 'sessionId' => Session::studentId(), 'teacherId' => Session::teacherId(), 'baseUrl' => BASE_URL, 'basePath' => BASE_PATH, ]; echo '' . "\n"; } /** * Plattform-Live-Client in eine Sim-Render-HTML einfügen. * * Stellt sicher, dass `window.__GGS__` mit `sessionId`, `simId`, `baseUrl`, * `basePath`, `apiUrl` belegt ist (Sim-eigene Werte gewinnen) und lädt * danach `assets/js/live-client.js`. Der Live-Client kümmert sich dann um * Heartbeat / Pause-Polling / Spectator-Mode. * * In jedem Sim-Wrapper kurz vor `echo $html` aufrufen: * $html = ggs_inject_live($html, 'logistik'); */ function ggs_inject_live(string $html, string $simId): string { $bp = BASE_PATH; $bu = BASE_URL; $sid = Session::studentId() ?? ''; $ctx = [ 'sessionId' => $sid, 'simId' => $simId, 'baseUrl' => $bu, 'basePath' => $bp, 'apiUrl' => $bu . '/php/api', ]; $ctxJson = json_encode($ctx, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // Sim-eigene __GGS__-Felder gewinnen — wir ergänzen nur Plattform-Felder. $bootstrap = ''; $tag = ''; $injection = $bootstrap . "\n" . $tag . "\n"; // Sicheres Inject: vor dem letzten . Falls keines, einfach anhängen. $pos = strrpos($html, ''); if ($pos === false) return $html . "\n" . $injection; return substr($html, 0, $pos) . $injection . substr($html, $pos); } /** Seite rendern: HTML laden, Session-Kontext + Favicon injizieren, ausgeben */ function renderPage(string $htmlFile): void { $html = file_get_contents(APP_ROOT . '/' . $htmlFile); // Favicon-Block (ersetzt alte logo.png Referenz) $bp = BASE_PATH; $favicon = << HTML; // Alten Favicon-Link ersetzen oder vor einfuegen if (preg_match('/]*rel=["\']icon["\'][^>]*>/', $html)) { $html = preg_replace('/]*rel=["\']icon["\'][^>]*>\s*/', '', $html); } $html = str_replace('', $favicon . "\n", $html); // Session-Kontext $ctx = ''; echo str_replace('', $ctx . "\n", $html); }