diff --git a/DeskHub-Webseite/staff/status_page.php b/DeskHub-Webseite/staff/status_page.php
index 20b2c7fe..01925a60 100644
--- a/DeskHub-Webseite/staff/status_page.php
+++ b/DeskHub-Webseite/staff/status_page.php
@@ -1,110 +1,228 @@
-
-Statusseite
-= e($err) ?>
-Eine öffentliche Seite, auf der Ihre Kunden sehen, ob alles läuft, und über Störungen und Wartungen informiert werden.
- Adresse: = e(base_url()) ?>/status.php
-
-
-
-
-
Dienste
-
Noch keine Dienste. Legen Sie unten zum Beispiel „Webseite“, „E-Mail“ oder „Telefon“ an.
-
-
-
= e($c['name']) ?>= e($c['description']) ?>
-
-
-
-
-
-
-
-
-
-
-
Meldungen
-
Keine Meldungen in den letzten 60 Tagen.
-
-
-
= e($i['title']) ?>
-
· = e(format_dt((string) $i['created_at'])) ?>= $i['component_name'] ? ' · ' . e($i['component_name']) : '' ?> · = e($incStates[$i['status']] ?? $i['status']) ?>
-
= e($incStates[$u['status']] ?? $u['status']) ?>: = nl2br(e((string) $u['body'])) ?>
-
-
-
-
-
-
-
-
+
+Statusseite
+= e($err) ?>
+Eine öffentliche Seite, auf der Ihre Kunden sehen, ob alles läuft, und über Störungen und Wartungen informiert werden.
+ Adresse: = e(base_url()) ?>/status.php
+
+
= $automaticChecks ?> Dienst= $automaticChecks === 1 ? '' : 'e' ?> werden automatisch geprüft
+
· = $pendingChecks ?> = $pendingChecks === 1 ? 'Dienst wartet' : 'Dienste warten' ?> auf ein Prüfziel
+
+
DeskHub erkennt Datenbank, API, konfigurierte Mailserver, Push-Zugang sowie Android- und Windows-Verbindungen automatisch. Android-Apps gelten bei einem API-Kontakt innerhalb der letzten 60 Minuten, Windows-Apps innerhalb der letzten 10 Minuten als verbunden. Statusprüfungen laufen jede Minute; externe Webseiten und weitere Apps benötigen eine Prüf-URL.
+
+
+
+
+
+
+
+
+Seiteneinstellungen
+
+
+
+
+
+
+ Dienste & automatische Prüfungen
+ Automatisch geprüfte Dienste erhalten ihren Status selbst. Während geplanter Arbeiten kannst du sie auf Wartung setzen. Für nicht erkannte externe Dienste ist eine Prüf-URL nötig.
+
+ Eigenen Dienst hinzufügen
+
+
+ Noch keine Dienste. Legen Sie unten zum Beispiel Webseite, E-Mail oder Telefon an.
+
+
+
+
= e($c['name']) ?>= e($c['description']) ?>
+
Automatische Prüfung: = e($checkInfo['label']) ?> · = $c['last_checked_at'] ? 'zuletzt ' . e(format_dt((string) $c['last_checked_at'])) : 'wartet auf ersten Lauf' ?>Manuell verwaltetPrüfziel fehlt – wartet auf Zuordnung · = (int) $c['last_check_ms'] ?> ms
+
= e((string) $c['last_check_error']) ?>
+
+
+
+
+ = e($st[0]) ?>
+
+
+
+
+
+
+
+
+ Prüfung konfigurieren
+
+
+
+
+
+
+
+ Kategorien verwalten (= count($categories) ?>)
+
+
+
KategorieReihenfolge
+
+ = e($category['name']) ?>
+
+
+
+
Noch keine Kategorien angelegt.
+
+
+
+
+Störung oder Wartung melden
+
+
+
+
+ Meldungen (= count($incidents) ?>)
+ Keine Meldungen in den letzten 60 Tagen.
+
+
+
= e($i['title']) ?>
+
· = e(format_dt((string) $i['created_at'])) ?>= $i['component_name'] ? ' · ' . e($i['component_name']) : '' ?> · = e($incStates[$i['status']] ?? $i['status']) ?>
+
= e($incStates[$u['status']] ?? $u['status']) ?>: = nl2br(e((string) $u['body'])) ?>
+
+
+
+
+
+
+
+
diff --git a/DeskHub-Webseite/tests/backup_page_nas.php b/DeskHub-Webseite/tests/backup_page_nas.php
index 9b0a6b68..21a90773 100644
--- a/DeskHub-Webseite/tests/backup_page_nas.php
+++ b/DeskHub-Webseite/tests/backup_page_nas.php
@@ -108,7 +108,9 @@ try {
// 2) Einrichten über das Formular
[$s, $b] = $req('POST', $pluginUrl, ['csrf_token' => $csrf($page), 'do' => 'save', 'enabled' => '1', 'host' => '127.0.0.1', 'port' => (string) $davPort, 'https' => '', 'user' => 'nas', 'password' => $davPass,
'target' => '/dav/DeskHub-Backups/', 'mirror' => '1', 'db' => '1', 'files' => '1', 'scope' => 'important', 'interval' => 'daily', 'time' => '02:00', 'keep_days' => '0', 'keep' => '10', 'verify_tls' => '1'], $jar);
- $check($s === 200 && str_contains($b, 'Einstellungen gespeichert'), 'Einstellungen speichern meldet Erfolg (HTTP ' . $s . ')');
+ $check($s === 200 && str_contains($b, 'location.replace') && !str_contains($b, 'Fatal error'), 'Nach dem Speichern ersetzt sich die Seite durch die normale Adresse (kein erneutes Absenden beim Neuladen, HTTP ' . $s . ')');
+ [, $b] = $req('GET', $pluginUrl, [], $jar);
+ $check(str_contains($b, 'Einstellungen gespeichert'), 'Einstellungen speichern meldet Erfolg');
$check(str_contains($b, 'NAS erreichbar'), 'Die Seite zeigt „NAS erreichbar“ nach dem Einrichten');
$check(!str_contains($b, 'Fatal error') && !str_contains($b, 'Warning:'), 'Die Seite erzeugt keine PHP-Fehler');
@@ -124,9 +126,12 @@ try {
$check(str_contains($bp, '☁ auf NAS') || (str_contains($bp, 'nur hier') && str_contains($bp, '☁ Auf NAS')), 'Die Backup-Liste zeigt bei dem Backup die NAS-Marke (schon kopiert oder „nur hier“ mit Knopf „Auf NAS“; der Plugin-Takt kann bereits gelaufen sein)');
[, $pp] = $req('GET', $pluginUrl, [], $jar);
[$s, $b] = $req('POST', $pluginUrl, ['csrf_token' => $csrf($pp), 'do' => 'sync'], $jar);
+ $check(str_contains($b, 'location.replace'), 'Auch nach „Fehlende kopieren“ lädt die Seite die normale Adresse: Neuladen (alle 10 s) oder F5 sendet den Klick nicht noch einmal ab');
$check($name !== '' && in_array($name, $remoteFiles(), true), 'Das Backup der Backup-Seite wird auf die NAS kopiert (Aktion „Fehlende kopieren“)');
[, $bp] = $req('GET', '/staff/backup.php', [], $jar);
$check(str_contains($bp, '☁ auf NAS'), 'Danach trägt es in der Backup-Liste die Marke „auf NAS“');
+ // Das Kopieren läuft seit Plugin 2.3 im Hintergrund (nach der Antwort): die Seite nach dem Klick neu laden
+ [, $b] = $req('GET', $pluginUrl, [], $jar);
$check(str_contains($b, '☁ auf der NAS') && str_contains($b, $name), 'Die Plugin-Seite zeigt es als „auf der NAS“');
// 4) Lokal löschen: bleibt als „nur auf der NAS“ sichtbar und lässt sich zurückholen