From 7f1d93debdfe10928fa78ec969723f4c71af094c Mon Sep 17 00:00:00 2001 From: Friederich Loheide Date: Wed, 23 Sep 2026 06:38:08 +0000 Subject: [PATCH] Barrierefreiheit und mobile Darstellung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Kontrast: gedämpfter Text war mit 3,1:1 unter WCAG AA, jetzt 4,9:1 (hell) bzw. 6,4:1 (dunkel) - Sprungmarke „Zum Inhalt springen" in Admin-Shell und Voucher-Seite - aria-label für alle reinen Icon-Schaltflächen (Theme, Menü, Abmelden, Zeilenaktionen), aria-current auf dem aktiven Navigationspunkt, role="group" für den Sprachumschalter - 194 dekorative Icons mit aria-hidden versehen, damit Screenreader sie nicht vorlesen - Toast-Container als aria-live-Bereich ausgezeichnet - prefers-reduced-motion schaltet Animationen und Übergänge ab Tabellen (Benutzer, Vouchers, Profile, Audit-Log, Dashboard, API-Keys) werden unter 720 px zu Karten: die Spaltenüberschrift steht per data-label vor dem Wert, statt horizontal zu scrollen. Datums- und Zeitformat in der Voucher-Liste folgen jetzt der gewählten Sprache statt fest de-DE. Co-Authored-By: Claude Opus 5 --- admin/api_keys.php | 16 +- admin/audit_log.php | 30 +- admin/index.php | 40 +- admin/reports.php | 8 +- admin/security.php | 12 +- admin/settings.php | 106 ++--- admin/sites.php | 36 +- admin/templates.php | 40 +- admin/users.php | 44 +- admin/vouchers.php | 58 +-- assets/global.css | 65 ++- forgot_password.php | 2 +- includes/admin_nav.php | 28 +- index.php | 53 +-- install.php | 758 +++++++++++++++++------------------ lang/de.php | 9 + lang/en.php | 9 + login.php | 16 +- login_simple.php | 4 +- reset_password.php | 2 +- updater/templates/update.php | 12 +- 21 files changed, 716 insertions(+), 632 deletions(-) diff --git a/admin/api_keys.php b/admin/api_keys.php index 550bd03..ccc0c24 100644 --- a/admin/api_keys.php +++ b/admin/api_keys.php @@ -115,17 +115,17 @@ $adminBase = '';

- +
- - - - - - - + + + + + + +
uvt_uvt_ diff --git a/admin/audit_log.php b/admin/audit_log.php index 551a042..52d2937 100644 --- a/admin/audit_log.php +++ b/admin/audit_log.php @@ -71,7 +71,7 @@ foreach (['voucher_created', 'voucher_bulk', 'user_login', 'user_logout', 'user_
-
+
@@ -96,8 +96,8 @@ foreach (['voucher_created', 'voucher_bulk', 'user_login', 'user_logout', 'user_
- - Zurücksetzen + + Zurücksetzen
@@ -105,15 +105,15 @@ foreach (['voucher_created', 'voucher_bulk', 'user_login', 'user_logout', 'user_
- + Einträge
-

+

- +
@@ -127,34 +127,34 @@ foreach (['voucher_created', 'voucher_bulk', 'user_login', 'user_logout', 'user_ - - - - - - + @@ -169,13 +169,13 @@ foreach (['voucher_created', 'voucher_bulk', 'user_login', 'user_logout', 'user_ $filterAction, 'user_id' => $filterUser])); if ($page > 1): ?> - + - + diff --git a/admin/index.php b/admin/index.php index 7f743d6..4f3ee40 100644 --- a/admin/index.php +++ b/admin/index.php @@ -105,7 +105,7 @@ $currentPage = 'dashboard'; DB @@ -114,21 +114,21 @@ $currentPage = 'dashboard';
-
+
-
+
-
+
@@ -136,21 +136,21 @@ $currentPage = 'dashboard';
-
+
-
+
-
+
@@ -183,9 +183,9 @@ $currentPage = 'dashboard';
-
+

- +
@@ -204,7 +204,7 @@ $currentPage = 'dashboard';

-

+

    @@ -225,21 +225,21 @@ $currentPage = 'dashboard';
- +
-

+

-
+
+ +
- System/Anonym +
+ : - +
+
- - - - + + + @@ -255,7 +255,7 @@ $currentPage = 'dashboard'; -
+
diff --git a/admin/reports.php b/admin/reports.php index cfd7d51..7b2aebf 100644 --- a/admin/reports.php +++ b/admin/reports.php @@ -115,10 +115,10 @@ $adminBase = ''; - - - - + + + +
diff --git a/admin/security.php b/admin/security.php index d71fcc3..3de454c 100644 --- a/admin/security.php +++ b/admin/security.php @@ -104,7 +104,7 @@ $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0;
- +

@@ -119,7 +119,7 @@ $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0;
- +

@@ -128,10 +128,10 @@ $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0; -
+

-
+


backupCodesRemaining($user) ?>

@@ -143,7 +143,7 @@ $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0; -
+
  1. @@ -175,7 +175,7 @@ $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0; - +
diff --git a/admin/settings.php b/admin/settings.php index f6e7a6a..79c2532 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -277,7 +277,7 @@ function imageField(string $name, string $label, string $value, string $hint = ' - +
@@ -318,29 +318,29 @@ $adminBase = '';
-
+
-
+
- - - - - - - - - - + + + + + + + + + +
-

+

@@ -353,13 +353,13 @@ $adminBase = '';
>
- +
-

+

@@ -382,20 +382,20 @@ $adminBase = '';
-

Gültigkeits-Referenz

+

Gültigkeits-Referenz

60 Min = 1 Stunde  |  480 Min = 8 Stunden  |  1440 Min = 1 Tag  |  10080 Min = 1 Woche  |  43200 Min = 30 Tage

- +
-

+

@@ -449,8 +449,8 @@ $adminBase = '';

- - + + @@ -458,13 +458,13 @@ $adminBase = '';
- +
-

+

@@ -532,9 +532,9 @@ $adminBase = '';
- + - +
@@ -542,24 +542,24 @@ $adminBase = '';
-

+

-

+

Der Cron-Job synchronisiert automatisch alle Voucher von Ihren UniFi Controllern in die lokale Datenbank.


-

Kein Token konfiguriert.

+

Kein Token konfiguriert.

- +
- -
-
+ +
+
Cron-URL
- +
@@ -580,7 +580,7 @@ $adminBase = '';
- +
@@ -589,9 +589,9 @@ $adminBase = '';
-

Microsoft 365

+

Microsoft 365

-

Azure AD App

+

Azure AD App

Redirect URI: /m365_callback.php

@@ -600,13 +600,13 @@ $adminBase = '';
- +
-

SMTP

+

SMTP

@@ -624,20 +624,20 @@ $adminBase = '';
- +

SMTP testen

- +
-

E-Mail Templates

+

E-Mail Templates

@@ -652,18 +652,18 @@ $adminBase = '';

Platzhalter:

{USER_NAME}{CHANGES}{APP_TITLE}{SYSTEM_URL}
- +
-

System & Erweitert

+

System & Erweitert

-

WYSIWYG-Editor

+

WYSIWYG-Editor

assets/vendor/

@@ -671,7 +671,7 @@ $adminBase = '';

Druck-Template

Platzhalter:

{VOUCHER_CODE}{EXPIRY_DATE}{EXPIRY_TIME}{SITE_NAME}{MAX_USES}{APP_TITLE}{INSTRUCTIONS}
- +

System-Information

@@ -684,13 +684,13 @@ $adminBase = '';
-

+

- +
@@ -763,7 +763,7 @@ async function testSmtp() { const result = document.getElementById('smtpTestResult'); if (!email) { result.textContent = ''; return; } btn.disabled = true; - btn.innerHTML = ''; + btn.innerHTML = ''; const fd = new FormData(); fd.append('ajax_smtp_test', '1'); fd.append('csrf_token', 'getCsrfToken() ?>'); @@ -773,26 +773,26 @@ async function testSmtp() { result.textContent = data.message; result.style.color = data.success ? 'var(--success)' : 'var(--danger)'; btn.disabled = false; - btn.innerHTML = ' Testen'; + btn.innerHTML = ' Testen'; } async function testCronJob() { const btn = document.getElementById('testCronBtn'); const result = document.getElementById('testCronResult'); btn.disabled = true; - btn.innerHTML = ' '; + btn.innerHTML = ' '; try { const res = await fetch('../cron_sync.php?token='); const data = await res.json(); result.innerHTML = data.success - ? ` ${data.message}` - : ` ${data.message}`; + ? ` ${data.message}` + : ` ${data.message}`; if (data.success) showToast('success', 'Cron ausgeführt', data.message); } catch (e) { result.innerHTML = `: ${e.message}`; } btn.disabled = false; - btn.innerHTML = ' '; + btn.innerHTML = ' '; } function initTinyMCE() { diff --git a/admin/sites.php b/admin/sites.php index 18afe47..23b0e14 100644 --- a/admin/sites.php +++ b/admin/sites.php @@ -105,20 +105,20 @@ $currentPage = 'sites'; -
+
-
+
- +

@@ -132,43 +132,43 @@ $currentPage = 'sites';
- + - + - +
- +
- +
- +
@@ -219,7 +219,7 @@ $currentPage = 'sites';
@@ -269,7 +269,7 @@ $currentPage = 'sites';
@@ -278,7 +278,7 @@ $currentPage = 'sites'; -
+
diff --git a/includes/admin_nav.php b/includes/admin_nav.php index 189e438..4b5b099 100644 --- a/includes/admin_nav.php +++ b/includes/admin_nav.php @@ -48,11 +48,12 @@ foreach ($navGroups as $items) { + -
+
-

+

@@ -455,7 +456,7 @@ function buildPrintCard($template, $data, $instructionHeader, $instructionText,
-
+


isAdmin()): ?> @@ -539,7 +540,7 @@ function buildPrintCard($template, $data, $instructionHeader, $instructionText,