<?php require_once __DIR__.'/../app/bootstrap.php'; $user=require_login($pdo); if(!is_superadmin($user)){ http_response_code(403); exit('Zugriff verweigert.'); } require_once __DIR__.'/_layout.php'; page_header('Manuals'); ?>
<section class="admin-faq-hero">
  <p class="pill">Superadmin-Handbuch</p>
  <h2>Manuals</h2>
  <p class="lead">Praxisanleitungen für Personen, die QRator auf einem eigenen Server installieren, betreiben und aktualisieren.</p>
</section>
<section class="backend-faq-list">
  <details open><summary>Wie installiere ich QRator auf einem eigenen Server?</summary><p>ZIP-Paket entpacken oder hochladen, eine MySQL-/MariaDB-Datenbank vorbereiten und <code>install.php</code> im Browser öffnen. Im Installer werden Datenbankzugang, Tabellenpräfix und das erste Superadmin-Konto eingerichtet. Nach erfolgreicher Installation ist der Installer gesperrt.</p></details>
  <details><summary>Welche Dateien und Ordner sind besonders wichtig?</summary><p><code>app/config.php</code> enthält die lokale Installationseinstellung und darf bei Updates nicht überschrieben werden. <code>/storage</code> enthält lokale Dateien wie Logos oder generierte Inhalte. <code>/update</code> wird für Update-Pakete, Backups und Protokolle verwendet.</p></details>
  <details><summary>Wie erstelle ich ein erstes Superadmin-Konto?</summary><p>Das erste Superadmin-Konto wird im Installer angelegt. Superadmins verwalten Benutzer, Rollen, Gruppenfreigaben, Updates sowie die QRator-Systemseiten FAQ, Changelog, Systemanforderungen und Manuals.</p></details>
  <details><summary>Wie funktionieren Benutzer, Rollen und Freigaben?</summary><p>Normale Benutzer sehen nur QR-Codes, die sie selbst erstellt haben oder die über Gruppen mit ihnen geteilt wurden. Superadmins sehen und verwalten das gesamte System. Gruppen können Leserechte oder Bearbeitungsrechte für andere Benutzer erhalten.</p></details>
  <details><summary>Wie installiere ich ein Online-Update?</summary><p>Als Superadmin im Backend <code>Updates</code> öffnen. Im Tab <code>Online-Update</code> zeigt QRator verfügbare Versionen an. Mit <code>Update installieren</code> wird das ZIP geladen, per SHA-256 geprüft, ein Backup erstellt und anschliessend installiert.</p></details>
  <details><summary>Wie installiere ich ein lokales Update?</summary><p>Im Tab <code>Lokales Update</code> ein offizielles QRator-ZIP hochladen oder ein bereits im Ordner <code>/update</code> abgelegtes Paket installieren. QRator prüft Dateiname, ZIP-Struktur und Sicherheitsregeln, bevor Dateien ersetzt werden.</p></details>
  <details><summary>Was ist SHA-256 und warum ist es wichtig?</summary><p>SHA-256 ist der digitale Fingerabdruck des Update-ZIP. QRator berechnet diesen Wert nach dem Download und vergleicht ihn mit dem Wert aus <code>kanalspezifische Update-JSON</code>. Nur wenn beide Werte übereinstimmen, wird das Update installiert.</p></details>
  <details><summary>Wie berechne ich den SHA-256-Hash unter Windows?</summary><p>Im Ordner der ZIP-Datei PowerShell öffnen und ausführen: <code>Get-FileHash .\qr-code-manager-v24.2.zip -Algorithm SHA256</code>. Den Wert aus der Spalte <code>Hash</code> in die Update-Manifestdatei eintragen.</p></details>
  <details><summary>Wie muss kanalspezifische Update-JSON aufgebaut sein?</summary><p>Die Manifestdatei enthält mindestens <code>latest_version</code>, <code>channel</code>, <code>download_url</code>, <code>changelog_url</code>, <code>sha256</code>, <code>minimum_php</code> und <code>release_date</code>. Optional können <code>notes</code> als Liste ergänzt werden. Die Datei muss als rohes JSON, UTF-8 ohne BOM und ohne zusätzliche Zeichen gespeichert werden.</p></details>
  <details><summary>Wie wird ein eigenes Update-Repository betrieben?</summary><p>Auf einer HTTPS-Domain eine <code>kanalspezifische Update-JSON</code> bereitstellen und die ZIP-Dateien in einem Ordner wie <code>/releases/</code> ablegen. Die <code>download_url</code> in <code>kanalspezifische Update-JSON</code> muss exakt auf das finale ZIP zeigen. Nach jeder Änderung am ZIP muss der SHA-256-Wert neu berechnet werden.</p></details>
  <details><summary>Welche Dateien bleiben bei Updates erhalten?</summary><p>QRator schützt lokale Installationsdaten wie <code>app/config.php</code>, Uploads, Storage-Dateien und Update-Backups. Die Programmdateien, Systemseiten, Versionsnummer und Update-Logik werden durch das jeweilige Release vorgegeben.</p></details>
  <details><summary>Wie wird QRator nach einem Update geprüft?</summary><p>Nach dem Update als Superadmin anmelden, Dashboard öffnen, Versionsnummer im Backend prüfen, Update-Seite aufrufen und einen bestehenden QR-Code testweise öffnen. Bei Hosting mit OPcache sollte der Cache nach einem Update geleert oder PHP neu gestartet werden.</p></details>
</section>
<section class="admin-faq-hero" style="margin-top:24px">
  <p class="pill">Troubleshooting</p>
  <h2>Häufige Probleme und Lösungen</h2>
  <p class="lead">Kurzdiagnosen für typische Installations- und Updatefälle.</p>
</section>
<section class="backend-faq-list">
  <details open><summary>Update-Check meldet HTTP 404</summary><p>Die in QRator verwendete Manifest-URL oder die URL in der Serverkonfiguration ist nicht erreichbar. Die angezeigte <code>kanalspezifische Update-JSON</code>-Adresse im Browser prüfen. Liefert der Browser korrekt JSON, aber QRator weiterhin 404, OPcache leeren und sicherstellen, dass die aktuelle QRator-Version installiert ist.</p></details>
  <details><summary>Update-Manifest ist kein gültiges JSON</summary><p>Die Manifestdatei enthält meist unsichtbare Zeichen, HTML, falsche Kodierung oder wurde nicht als rohes JSON gespeichert. Inhalt in einem Codeeditor öffnen, als UTF-8 ohne BOM speichern und sicherstellen, dass die Datei direkt mit <code>{</code> beginnt und mit <code>}</code> endet.</p></details>
  <details><summary>Backend zeigt nach dem Update noch die alte Version</summary><p>Prüfen, ob die neue Version der Programmdateien wirklich installiert wurde. Falls die Dateien korrekt sind, liegt es häufig an OPcache. Im Hosting OPcache leeren, PHP neu starten oder kurz auf eine andere PHP-Version und zurück wechseln.</p></details>
  <details><summary>SHA-256 stimmt nicht</summary><p>Der Hash gehört nicht zur exakt installierten oder bereitgestellten ZIP-Datei. ZIP nicht nachträglich neu packen oder verändern. Finales ZIP erneut prüfen, Hash neu berechnen und <code>kanalspezifische Update-JSON</code> aktualisieren.</p></details>
  <details><summary>Online-Update kann nicht installiert werden</summary><p>Prüfen, ob der Server ausgehend HTTPS-Verbindungen erlaubt, <code>ZipArchive</code> aktiv ist, genügend Speicher vorhanden ist und der Webserver in <code>/update</code> sowie die Programmordner schreiben darf.</p></details>
  <details><summary>Lokales Update wird abgelehnt</summary><p>Dateiname, ZIP-Struktur und Inhalt prüfen. Das ZIP muss die QRator-Dateien direkt enthalten und darf keine zusätzliche übergeordnete Ordner-Ebene oder fremde Dateien ausserhalb der erwarteten Struktur enthalten.</p></details>
  <details><summary>Update-Markierung wird nicht angezeigt</summary><p>QRator cached die Online-Prüfung kurzzeitig, damit das Backend schnell bleibt. Nach Aktualisierung von <code>kanalspezifische Update-JSON</code> einige Minuten warten oder die Update-Seite direkt öffnen, damit der Check erneuert wird.</p></details>
  <details><summary>Favicon oder neue Assets erscheinen nicht</summary><p>Browser-Cache leeren oder die Seite hart neu laden. Favicons werden von Browsern besonders aggressiv zwischengespeichert. Falls nötig, kurz in einem privaten Browserfenster testen.</p></details>
</section>
<?php page_footer(); ?>
