diff --git a/srv/tesm/templates/maintenance.html b/srv/tesm/templates/maintenance.html index 6f2b4ee..66b5482 100644 --- a/srv/tesm/templates/maintenance.html +++ b/srv/tesm/templates/maintenance.html @@ -68,6 +68,7 @@ {% if can_run %} + {% endif %} @@ -86,17 +87,26 @@ {% if can_run %}
-
Ausgewählte Geräte aktualisieren (nicht-interaktiv, unbeaufsichtigte Konfig-Rückfragen werden automatisch mit den bisherigen Werten beantwortet).
- +
Ausgewählte Geräte aktualisieren (nicht-interaktiv, unbeaufsichtigte Konfig-Rückfragen werden automatisch mit den bisherigen Werten beantwortet) oder neu starten.
+
+ + +
{% endif %} {% if can_run %} {% for d in devices %} +
+ +
@@ -118,6 +128,24 @@ document.getElementById("selectAll")?.addEventListener("change", function () { }, this); }); +// Nutzt bewusst dieselben Checkboxen/dasselbe #updateForm wie "Update +// starten" (kein eigenes, verschachteltes
noetig) -- die +// action wird nur fuer diesen einen Submit umgebogen, ein Seitenaufruf +// danach setzt sie ueber den Server-seitig gerenderten Ausgangszustand +// ohnehin wieder zurueck. +function bulkReboot() { + const checked = document.querySelectorAll(".maint-check:checked"); + if (!checked.length) { + showToast("Bitte mindestens ein Gerät auswählen.", "danger"); + return; + } + window.confirmAction(`${checked.length} ausgewählte Gerät(e) jetzt per SSH neu starten?`, function () { + const form = document.getElementById("updateForm"); + form.action = "{{ url_for('maintenance_reboot') }}"; + form.submit(); + }); +} + function filterTable(inputId, tableId) { const q = document.getElementById(inputId).value.trim().toLowerCase(); document.querySelectorAll(`#${tableId} tbody tr`).forEach(row => { diff --git a/srv/tesm/templates/papierkorb.html b/srv/tesm/templates/papierkorb.html index e60df9d..c96fb15 100644 --- a/srv/tesm/templates/papierkorb.html +++ b/srv/tesm/templates/papierkorb.html @@ -22,12 +22,24 @@

Clients ({{ trash.devices|length }})

{% if trash.devices %} -
- - +
+
+
+ + +
+
+
+
NameIPGelöscht amAktionen
+ + + + + + {% for d in trash.devices %} - + @@ -58,12 +70,24 @@

Switche ({{ trash.switches|length }})

{% if trash.switches %} -
-
NameIPGelöscht amAktionen
{{ d['name'] }} {{ d['ip'] }} {{ d['deleted_at'] }}
- +
+
+
+ + +
+
+
+
HostnameIPGelöscht amAktionen
+ + + + + + {% for s in trash.switches %} - + @@ -94,12 +118,24 @@

Zugangsdaten ({{ trash.credentials|length }})

{% if trash.credentials %} -
-
HostnameIPGelöscht amAktionen
{{ s['hostname'] }} {{ s['ip'] }} {{ s['deleted_at'] }}
- +
+
+
+ + +
+
+
+
NameUsernameGelöscht amAktionen
+ + + + + + {% for c in trash.credentials %} - + @@ -130,13 +166,25 @@

Benutzer ({{ trash.users|length }})

{% if trash.users %} -
-
NameUsernameGelöscht amAktionen
{{ c['name'] }} {{ c['username'] }} {{ c['deleted_at'] }}
- +
+
+
+ + +
+
+
+
UsernameNameGelöscht amAktionen
+ + + + + + {% for u in trash.users %} {% set full_name = [u['first_name'], u['last_name']]|select|join(' ') %} - + @@ -167,12 +215,23 @@

Gruppen ({{ trash.groups|length }})

{% if trash.groups %} -
-
UsernameNameGelöscht amAktionen
{{ u['username'] }} {{ full_name or '—' }} {{ u['deleted_at'] }}
- +
+
+
+ + +
+
+
+
NameGelöscht amAktionen
+ + + + + {% for g in trash.groups %} - +
NameGelöscht amAktionen
{{ g['name'] }} {{ g['deleted_at'] }} @@ -201,4 +260,14 @@ + + {% endblock %}