Display-Seiten: Gäste holen sich den Zugang selbst
Für Empfang, Lobby oder Tagungsraum lässt sich je Site eine öffentliche Seite anlegen (kiosk.php), die auf einem Bildschirm oder Tablet läuft: ein großer Knopf, ein Klick, ein Zugangscode mit QR-Code. Nach einer einstellbaren Anzeigedauer springt der Bildschirm zurück, damit der nächste Gast nicht den Code seines Vorgängers sieht. Verwaltung unter Administration → Display-Seiten: - Site und optionales Voucher-Profil (bestimmt Laufzeit, Geräte, QoS) - eigene Überschrift und Text für den Bildschirm - Codes pro Tag, Wartezeit zwischen zwei Codes, Anzeigedauer - geheimer Link zum Kopieren, als QR-Code anzeigbar und jederzeit erneuerbar (der alte Link gilt dann sofort nicht mehr) Absicherung: der Link ist der Zugang, deshalb Tageslimit und Wartezeit je Display, CSRF-Token am Formular, `noindex` im Kopf und ein Eintrag im Audit-Log für jeden ausgegebenen Code. Webhooks werden für Kiosk-Codes bewusst nicht ausgelöst – ein Empfangsdisplay würde den Kanal fluten. Technik: - neue Tabelle `kiosks`, `vouchers.kiosk_id` hält die Herkunft fest (Migration 0005, database.sql nachgezogen) - includes/Kiosk.php kapselt Token, Limits und Profil-Auflösung - includes/VoucherService.php bündelt die Voucher-Erstellung, die vorher in index.php lag und für den Kiosk ein zweites Mal nötig gewesen wäre - Startbildschirm zeigt zusätzlich einen QR auf sich selbst, damit Gäste die Seite am eigenen Handy öffnen können Tests: 9 neue Fälle für Token-Prüfung, Wartezeit, Tageslimit und Profil-Auflösung (38 Tests gesamt), PHPStan deckt Kiosk.php mit ab. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5d72febadc
commit
61810eb050
30 changed files with 1360 additions and 29 deletions
53
lang/de.php
53
lang/de.php
|
|
@ -470,6 +470,59 @@ return [
|
|||
'print_valid_until' => 'Gültig bis',
|
||||
'print_devices' => 'Geräte',
|
||||
'credit_by' => 'Entwickelt von',
|
||||
'kiosk_default_headline' => 'Kostenloses Gäste-WLAN',
|
||||
'kiosk_default_subline' => 'Tippen Sie auf den Knopf – Sie erhalten sofort einen persönlichen Zugangscode.',
|
||||
'kiosk_button' => 'Zugangscode holen',
|
||||
'kiosk_working' => 'Einen Moment …',
|
||||
'kiosk_ready' => 'Ihr Zugangscode',
|
||||
'kiosk_scan_code' => 'QR-Code scannen oder Code eintippen',
|
||||
'kiosk_reset_in' => 'Der Bildschirm wird in {seconds} Sekunden zurückgesetzt.',
|
||||
'kiosk_done' => 'Fertig',
|
||||
'kiosk_phone_hint' => 'Oder mit dem Handy scannen und dort öffnen',
|
||||
'kiosk_error_cooldown' => 'Gerade wurde ein Code ausgegeben. Bitte {seconds} Sekunden warten.',
|
||||
'kiosk_error_limit' => 'Für heute sind keine Zugänge mehr verfügbar. Bitte wenden Sie sich an den Empfang.',
|
||||
'kiosk_error_generic' => 'Der Zugang konnte gerade nicht erstellt werden. Bitte erneut versuchen.',
|
||||
'kiosk_unknown' => 'Diese Seite ist nicht verfügbar',
|
||||
'kiosk_unknown_hint' => 'Der Link ist ungültig oder wurde deaktiviert.',
|
||||
'audit_action_voucher_kiosk' => 'Voucher am Display geholt',
|
||||
'nav_kiosks' => 'Display-Seiten',
|
||||
'kiosks_title' => 'Display-Seiten',
|
||||
'kiosks_subtitle' => 'Öffentliche Seiten für Bildschirme und Tablets – Gäste holen sich den Zugang selbst.',
|
||||
'kiosks_add' => 'Display-Seite anlegen',
|
||||
'kiosks_edit' => 'Display-Seite bearbeiten',
|
||||
'kiosks_empty' => 'Noch keine Display-Seite angelegt.',
|
||||
'kiosks_no_sites' => 'Legen Sie zuerst eine Site an, dann können Sie dafür eine Display-Seite erstellen.',
|
||||
'kiosks_name' => 'Bezeichnung',
|
||||
'kiosks_name_placeholder' => 'z.B. Empfang Erdgeschoss',
|
||||
'kiosks_name_hint' => 'Erscheint im Audit-Log und als Voucher-Name.',
|
||||
'kiosks_template' => 'Voucher-Profil',
|
||||
'kiosks_no_template' => 'Standardwerte verwenden',
|
||||
'kiosks_template_hint' => 'Bestimmt Laufzeit, Geräteanzahl und Bandbreite der ausgegebenen Codes.',
|
||||
'kiosks_headline' => 'Überschrift auf dem Bildschirm',
|
||||
'kiosks_subline' => 'Text darunter',
|
||||
'kiosks_daily_limit' => 'Codes pro Tag',
|
||||
'kiosks_daily_limit_hint' => '0 = unbegrenzt. Schützt vor Missbrauch, wenn der Link weitergegeben wird.',
|
||||
'kiosks_cooldown' => 'Wartezeit (Sekunden)',
|
||||
'kiosks_cooldown_hint' => 'Abstand zwischen zwei Codes an diesem Display.',
|
||||
'kiosks_display' => 'Anzeigedauer (Sekunden)',
|
||||
'kiosks_display_hint' => 'Danach springt der Bildschirm zurück auf den Startbildschirm.',
|
||||
'kiosks_active' => 'Display-Seite aktiv',
|
||||
'kiosks_link' => 'Öffentlicher Link',
|
||||
'kiosks_open' => 'Öffnen',
|
||||
'kiosks_qr' => 'QR-Code',
|
||||
'kiosks_qr_hint' => 'Am Bildschirm aufhängen oder abfotografieren, um die Seite auf einem Tablet zu öffnen.',
|
||||
'kiosks_today' => 'heute',
|
||||
'kiosks_total' => 'insgesamt',
|
||||
'kiosks_renew' => 'Link erneuern',
|
||||
'kiosks_renew_confirm' => 'Neuen Link erzeugen? Der bisherige Link funktioniert danach nicht mehr.',
|
||||
'kiosks_delete_confirm' => 'Display-Seite wirklich löschen?',
|
||||
'kiosks_added' => 'Display-Seite angelegt.',
|
||||
'kiosks_updated' => 'Display-Seite gespeichert.',
|
||||
'kiosks_deleted' => 'Display-Seite gelöscht.',
|
||||
'kiosks_token_renewed' => 'Neuer Link erzeugt – der alte ist ab sofort ungültig.',
|
||||
'audit_action_kiosk_created' => 'Display-Seite angelegt',
|
||||
'audit_action_kiosk_updated' => 'Display-Seite geändert',
|
||||
'audit_action_kiosk_deleted' => 'Display-Seite gelöscht',
|
||||
'settings_tab_general' => 'Allgemein',
|
||||
'settings_tab_defaults' => 'Voucher-Standards',
|
||||
'settings_tab_cron' => 'Cron-Sync',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue