fix: alles auf eine Adresse, Rueckfrage wieder entfernt

Die Zustandsseite /zentrale/{durchwahl} war ein Fehlgriff. Sie wurde als
"Adresse fuer den Alltag" eingefuehrt und war damit eine zweite URL, die
man sich merken muss. Wer sie nicht hatte, kam nicht mehr aus der Zentrale
heraus: auf /zentrale sah man nur, dass jemand anderes eingetragen ist,
ohne einen Weg zum Freigeben.

Jetzt gibt es genau eine Adresse. Auf /zentrale die eigene Durchwahl
eintragen, und die Seite zeigt die Knoepfe, die fuer diese Person gerade
gelten - derselbe Weg fuehrt zum Uebernehmen und zum Freigeben. Das
Durchwahl-Feld ist immer da, auch wenn die Zentrale besetzt ist, und der
Hilfetext nennt beide Wege.

- /zentrale/{durchwahl} bleibt als Kurzform fuer QR-Codes, leitet aber nur
  auf /zentrale?durchwahl=... um
- alle Aktionen leiten auf /zentrale zurueck statt auf eine Unterseite
- der Knopf heisst "Zentrale freigeben" statt "Zurueck auf mein
  Tuerschild", weil das die Sicht des Bedienenden ist
- kein Hinweis mehr, sich eine persoenliche Adresse als Lesezeichen zu
  merken - das war die Ursache der Verwirrung

Die Bestaetigungsstufe vor dem Verdraengen ist wieder raus, sie war nicht
gewuenscht. Die Unterscheidung der drei Faelle am Knopf bleibt, damit
sichtbar ist, was mit dem bisherigen Besetzer passiert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-21 09:19:59 +00:00
co-authored by Claude Opus 5
parent 5d2bd8eff8
commit 426e36905d
3 changed files with 251 additions and 105 deletions
+42 -65
View File
@@ -70,8 +70,8 @@
<strong>{{ target.name }}</strong>
<small class="text-muted">(Segment {{ target.segment }})</small>
<hr class="my-2">
<small class="text-muted d-block">Aktuell besetzt von</small>
{% if occupant %}
<small class="text-muted d-block">Aktuell besetzt von</small>
<strong class="{% if is_here %}text-primary{% else %}text-success{% endif %}">
<i class="bi bi-person-fill"></i> {{ occupant.display_name }}
{%- if is_here %} <span class="badge bg-primary">das bist du</span>{% endif %}
@@ -80,7 +80,6 @@
<div><small class="text-muted">Das ist der Stammplatz dieser Person.</small></div>
{% endif %}
{% else %}
<small class="text-muted d-block">Aktuell besetzt von</small>
<span class="text-muted"><i class="bi bi-person-dash"></i> niemand - die Zentrale ist frei</span>
{% endif %}
{% if owner_waiting %}
@@ -93,30 +92,37 @@
</div>
{% if not user %}
{# ── Schritt 1: Wer bist du? ──────────────────────────────────── #}
{# ── Eintritt: Durchwahl. Derselbe Weg fuer Uebernehmen und Freigeben. ── #}
<form method="get" action="/zentrale">
<div class="mb-3">
<label class="form-label">Eigene Telefon-Durchwahl</label>
<label class="form-label">Deine Telefon-Durchwahl</label>
<input type="text" name="durchwahl" class="form-control form-control-lg text-center"
inputmode="numeric" autocomplete="off" autofocus required
value="{{ extension }}" placeholder="z.B. 123">
<small class="text-muted">
Im naechsten Schritt siehst du, was du tun kannst - es wird noch nichts geaendert.
{% if occupant %}
Damit uebernimmst du die Zentrale - oder gibst sie frei, wenn du selbst
eingetragen bist. Im naechsten Schritt siehst du, was fuer dich gilt.
{% else %}
Damit besetzt du die Zentrale. Im naechsten Schritt siehst du, was fuer
dich gilt - geaendert wird noch nichts.
{% endif %}
</small>
</div>
<button type="submit" class="btn btn-primary w-100">
<i class="bi bi-arrow-right-circle"></i> Weiter
</button>
</form>
{% else %}
{# ── Schritt 2: Zustand und passende Aktionen ──────────────────── #}
{# ── Zustand dieser Person und die passenden Knoepfe ──────────────── #}
<div class="text-center mb-3">
<small class="text-muted d-block">Durchwahl {{ user.phone_extension }}</small>
<strong>{{ user.display_name }}</strong>
</div>
{% if is_owner and is_here %}
<div class="alert alert-info py-2">
<div class="alert alert-info py-2 mb-0">
<small><i class="bi bi-house-check"></i>
Die Zentrale ist dein eigener Platz und du sitzt darauf.
Hier ist nichts zu tun - jemand anderes kann sie jederzeit uebernehmen,
@@ -136,50 +142,17 @@
<form method="post" action="/api/zentrale/verlassen" class="mb-2">
<input type="hidden" name="extension" value="{{ user.phone_extension }}">
<button type="submit" class="btn btn-primary w-100">
<i class="bi bi-box-arrow-left"></i> Zurueck auf mein Tuerschild
<i class="bi bi-box-arrow-left"></i> Zentrale freigeben
</button>
</form>
{% if home_blocker %}
<div class="alert alert-warning py-2 mb-0">
<div class="alert alert-warning py-2">
<small><i class="bi bi-exclamation-triangle"></i>
Achtung: dein Tuerschild ist derzeit {{ home_blocker }} zugeordnet.
Die Rueckkehr wird abgelehnt, solange das so ist.</small>
</div>
{% endif %}
{% elif done == 'bestaetigen' and occupant %}
{# Zweiter Schritt: verdraengen ist nie ein Versehen #}
<div class="alert alert-warning">
<strong><i class="bi bi-exclamation-triangle"></i> Wirklich uebernehmen?</strong>
<div class="mt-2"><small>
<strong>{{ occupant.display_name }}</strong> ist derzeit auf der Zentrale
eingetragen. Bitte nur uebernehmen, wenn diese Person den Empfang
tatsaechlich verlassen hat.
<br>
{% if occupant_is_owner %}
{{ occupant.display_name }} gehoert auf die Zentrale und kommt automatisch
zurueck, sobald du sie wieder freigibst.
{% elif occupant_has_home %}
{{ occupant.display_name }} wird dabei auf das eigene Tuerschild
zurueckgesetzt.
{% else %}
{{ occupant.display_name }} hat kein eigenes Tuerschild und gehoert damit
auf die Zentrale. Die Person wird als Stamm-Besetzer vermerkt und kommt
automatisch zurueck, sobald du wieder freigibst.
{% endif %}
</small></div>
</div>
<form method="post" action="/api/zentrale/uebernehmen" class="mb-2">
<input type="hidden" name="extension" value="{{ user.phone_extension }}">
<input type="hidden" name="confirm" value="ja">
<button type="submit" class="btn btn-warning w-100">
<i class="bi bi-check2-circle"></i> Ja, Zentrale uebernehmen
</button>
</form>
<a href="/zentrale/{{ user.phone_extension }}" class="btn btn-outline-secondary w-100 btn-sm">
Abbrechen
</a>
{% else %}
<form method="post" action="/api/zentrale/uebernehmen" class="mb-2">
<input type="hidden" name="extension" value="{{ user.phone_extension }}">
@@ -189,16 +162,14 @@
</button>
<small class="text-muted">
{% if occupant and occupant_is_owner %}
{{ occupant.display_name }} sitzt darauf und gehoert dorthin. Nach einer
Uebernahme kommt sie oder er automatisch zurueck, sobald du freigibst.
Du wirst noch um Bestaetigung gebeten.
{{ occupant.display_name }} gehoert auf die Zentrale und kommt automatisch
zurueck, sobald du wieder freigibst.
{% elif occupant and occupant_has_home %}
{{ occupant.display_name }} sitzt darauf und wird dabei auf das eigene
Tuerschild zurueckgesetzt. Du wirst noch um Bestaetigung gebeten.
{{ occupant.display_name }} wird dabei auf das eigene Tuerschild
zurueckgesetzt.
{% elif occupant %}
{{ occupant.display_name }} sitzt darauf und gehoert auf die Zentrale,
kommt also automatisch zurueck, sobald du freigibst.
Du wirst noch um Bestaetigung gebeten.
{{ occupant.display_name }} hat kein eigenes Tuerschild und gehoert damit
auf die Zentrale - kommt also automatisch zurueck, sobald du freigibst.
{% else %}
Die Zentrale ist frei.
{% endif %}
@@ -206,11 +177,11 @@
</form>
{% if home %}
<form method="post" action="/api/zentrale/verlassen">
<form method="post" action="/api/zentrale/verlassen" class="mb-2">
<input type="hidden" name="extension" value="{{ user.phone_extension }}">
<button type="submit" class="btn btn-outline-secondary w-100 btn-sm">
<i class="bi bi-box-arrow-left"></i> Zurueck auf mein Tuerschild
</button>
<input type="hidden" name="extension" value="{{ user.phone_extension }}">
<small class="text-muted">
Gemerkt: {{ home.name or home.hostname }}, Segment {{ home.segment }}.
</small>
@@ -218,23 +189,29 @@
{% endif %}
{% endif %}
<div class="text-center mt-3">
<a href="/zentrale/{{ user.phone_extension }}" class="text-muted small me-3">
<i class="bi bi-arrow-clockwise"></i> Aktualisieren
</a>
<a href="/zentrale" class="text-muted small">Andere Durchwahl</a>
</div>
<div class="text-center mt-2">
<small class="text-secondary" style="font-size:0.7rem">
Diese Seite als Lesezeichen: <code>/zentrale/{{ user.phone_extension }}</code>
</small>
</div>
{% endif %}
{# ── Andere Person: dasselbe Formular, dieselbe Adresse ──────────── #}
<hr class="my-3">
<form method="get" action="/zentrale" class="row g-2 align-items-end">
<div class="col">
<label class="form-label mb-1"><small class="text-muted">Andere Durchwahl</small></label>
<input type="text" name="durchwahl" class="form-control form-control-sm"
inputmode="numeric" autocomplete="off" required placeholder="z.B. 123">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-outline-secondary btn-sm">Weiter</button>
</div>
</form>
{% endif %}
<div class="text-center mt-4">
<small class="text-secondary" style="font-size:0.65rem">&copy; cynfo GmbH</small>
<a href="/zentrale" class="text-muted small">
<i class="bi bi-arrow-clockwise"></i> Zentrale-Seite neu laden
</a>
<div class="mt-2">
<small class="text-secondary" style="font-size:0.65rem">&copy; cynfo GmbH</small>
</div>
</div>
{% endif %}
</div>
</div>