Files
christianandClaude Opus 5 426e36905d 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>
2026-08-21 09:19:59 +00:00

223 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zentrale - Busylight</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<div class="container">
<div class="row justify-content-center mt-4 mb-5">
<div class="col-md-5">
<div class="card shadow-sm">
<div class="card-body p-4">
<div class="text-center mb-4">
<img src="{{ logo_url() }}" alt="Logo" style="height: 40px;" class="mb-2">
<h5 class="mb-0">Zentrale besetzen</h5>
</div>
{# ── Rueckmeldung der letzten Aktion ───────────────────────────────── #}
{% if done == 'uebernommen' %}
<div class="alert alert-success py-2"><small><i class="bi bi-check-circle"></i>
Du sitzt jetzt auf der Zentrale.</small></div>
{% elif done == 'bereits' %}
<div class="alert alert-info py-2"><small><i class="bi bi-info-circle"></i>
Du warst schon auf der Zentrale eingetragen. Das Licht wurde neu gesetzt.</small></div>
{% elif done == 'zurueck' %}
<div class="alert alert-success py-2"><small><i class="bi bi-check-circle"></i>
Zurueck auf dem eigenen Tuerschild.</small></div>
{% elif done == 'abgemeldet' %}
<div class="alert alert-success py-2"><small><i class="bi bi-check-circle"></i>
Von der Zentrale abgemeldet.</small></div>
{% elif done == 'stammplatz_hier' %}
<div class="alert alert-info py-2"><small><i class="bi bi-info-circle"></i>
Die Zentrale ist dein eigener Platz - es gibt nichts zurueckzusetzen.</small></div>
{% elif done == 'err_unbekannt' %}
<div class="alert alert-danger py-2"><small><i class="bi bi-x-circle"></i>
Die Durchwahl {{ extension }} ist keinem aktiven Benutzer zugeordnet.</small></div>
{% elif done == 'err_nicht_eingerichtet' %}
<div class="alert alert-warning py-2"><small><i class="bi bi-gear"></i>
Die Zentrale ist noch nicht eingerichtet.</small></div>
{% elif done == 'err_heimat_belegt' %}
<div class="alert alert-danger py-2"><small><i class="bi bi-x-circle"></i>
Dein eigenes Tuerschild ist inzwischen
{%- if home_blocker %} {{ home_blocker }}{% else %} jemand anderem{% endif %} zugeordnet.
Es wurde nichts geaendert - bitte den Administrator ansprechen.</small></div>
{% elif done == 'err_nichts_zu_tun' %}
<div class="alert alert-danger py-2"><small><i class="bi bi-x-circle"></i>
Du sitzt nicht auf der Zentrale und es ist kein eigenes Tuerschild gemerkt.</small></div>
{% elif done == 'err_stammplatz_fremd' %}
<div class="alert alert-warning py-2"><small><i class="bi bi-exclamation-triangle"></i>
Die Zentrale ist dein eigener Platz, aktuell hat sie jemand anderes.
Mit "Zentrale uebernehmen" holst du sie zurueck.</small></div>
{% endif %}
{% if not target %}
<div class="alert alert-warning py-2 mb-0">
<small><i class="bi bi-gear"></i>
Die Zentrale ist noch nicht eingerichtet. Unter
<strong>Einstellungen &gt; Zentrale</strong> muss ein Busylight und ein
Segment ausgewaehlt werden.</small>
</div>
{% else %}
{# ── Zustand der Zentrale, immer sichtbar ──────────────────────────── #}
<div class="border rounded p-3 mb-3 bg-white">
<small class="text-muted d-block">Busylight der Zentrale</small>
<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 %}
<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 %}
</strong>
{% if occupant_is_owner %}
<div><small class="text-muted">Das ist der Stammplatz dieser Person.</small></div>
{% endif %}
{% else %}
<span class="text-muted"><i class="bi bi-person-dash"></i> niemand - die Zentrale ist frei</span>
{% endif %}
{% if owner_waiting %}
<div class="mt-2"><small class="text-muted">
<i class="bi bi-hourglass-split"></i>
{{ owner_waiting }} gehoert auf die Zentrale und kommt automatisch zurueck,
sobald sie freigegeben wird.
</small></div>
{% endif %}
</div>
{% if not user %}
{# ── Eintritt: Durchwahl. Derselbe Weg fuer Uebernehmen und Freigeben. ── #}
<form method="get" action="/zentrale">
<div class="mb-3">
<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">
{% 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 %}
{# ── 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 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,
danach kommst du automatisch zurueck.</small>
</div>
{% elif is_here %}
<div class="alert alert-primary py-2">
<small><i class="bi bi-person-check"></i>
Du sitzt aktuell auf der Zentrale.
{% if home %}
Dein eigenes Tuerschild ({{ home.name or home.hostname }}, Segment {{ home.segment }})
ist bis zur Rueckkehr ausgeschaltet.
{% endif %}
</small>
</div>
<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> Zentrale freigeben
</button>
</form>
{% if home_blocker %}
<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 %}
{% else %}
<form method="post" action="/api/zentrale/uebernehmen" 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-in-right"></i>
{% if occupant %}Zentrale uebernehmen{% else %}Zentrale besetzen{% endif %}
</button>
<small class="text-muted">
{% if occupant and occupant_is_owner %}
{{ occupant.display_name }} gehoert auf die Zentrale und kommt automatisch
zurueck, sobald du wieder freigibst.
{% elif occupant and occupant_has_home %}
{{ occupant.display_name }} wird dabei auf das eigene Tuerschild
zurueckgesetzt.
{% elif occupant %}
{{ 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 %}
</small>
</form>
{% if home %}
<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>
<small class="text-muted">
Gemerkt: {{ home.name or home.hostname }}, Segment {{ home.segment }}.
</small>
</form>
{% endif %}
{% 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">
<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>
</div>
</div>
</div>
</body>
</html>