diff --git a/Readme.md b/Readme.md index 7019def..af6cb97 100644 --- a/Readme.md +++ b/Readme.md @@ -8,7 +8,7 @@ ![MySQL](https://img.shields.io/badge/MySQL-5.7%2B%20%2F%20MariaDB-4479A1?logo=mysql&logoColor=white) ![UniFi OS](https://img.shields.io/badge/UniFi%20OS-7.0%2B-0559C9?logo=ubiquiti&logoColor=white) ![License](https://img.shields.io/badge/Lizenz-MIT-green) -![Version](https://img.shields.io/badge/Version-2.4.0-blueviolet) +![Version](https://img.shields.io/badge/Version-2.5.0-blueviolet) ![CI](https://github.com/friloo/unifi-voucher-tool/actions/workflows/ci.yml/badge.svg) @@ -45,6 +45,8 @@ - 💾 **Config-Backup & -Restore** (JSON Export/Import) - 🐳 **Docker** – Dockerfile + docker-compose (MariaDB) - 🌍 **Öffentlicher Modus** – optional ohne Login nutzbar (mit CSRF-Schutz & Throttle) +- 🎨 **Einheitliches Design-System** – ein Stylesheet für Frontend, Login und Backend (Tokens, Komponenten, Light/Dark) +- 🏷️ **Login-Seite individualisierbar** – Firmenname, Logo, Texte, Hintergrundbild bzw. Farbverlauf - 🌗 **Dark Mode** – umschaltbar, Einstellung wird im Browser gespeichert - 🌐 **Mehrsprachig** – Deutsch / Englisch per Umschalter (`lang/`) - 📱 **Responsive Admin-Layout** mit Hamburger-Menü & Sidebar-Overlay @@ -59,31 +61,35 @@ ## 📸 Screenshots +> Alle Screenshots stammen aus der Oberfläche in Version 2.5.0 (neues Design-System). + ### Anmeldung & Voucher-Erstellung
- Login mit Microsoft 365 - Voucher erstellen - Voucher-Ergebnis + Anmeldung + Anmeldung mit eigenem Branding
-### Bulk-Erstellung & Dark Mode -
- Bulk-Voucher-Erstellung - Dashboard im Dark Mode + Voucher erstellen + Einstellungen der Login-Seite
-### Administration & Updater +
+ Voucher-Ergebnis mit QR-Code + Bulk-Voucher-Erstellung +
+ +### Administration
Dashboard - Auto-Updater + Dashboard im Dark Mode
- Updater – Ausgangszustand - Wartungsmodus + Live-Voucher-Verwaltung + Einstellungen
### REST-API, 2FA & Integrationen @@ -97,6 +103,17 @@ Zwei-Faktor-Authentifizierung +### Updater & Wartungsmodus + +
+ Updater – Ausgangszustand + Auto-Updater mit verfügbarem Update +
+ +
+ Wartungsmodus +
+ --- ## 📋 Anforderungen @@ -220,6 +237,57 @@ Den Token finden Sie unter **Administration → Einstellungen → Cron**. --- +## 🎨 Design-System + +Frontend, Login-Seiten, Installer, Updater und der gesamte Admin-Bereich nutzen ein +gemeinsames Stylesheet: **`assets/global.css`**. + +- **Design-Tokens** (`:root` bzw. `[data-theme="dark"]`) für Flächen, Text, Linien, + Markenfarbe, Statusfarben, Radien, Schatten und Layout-Maße +- **Komponenten** darauf aufgebaut: Buttons, Formularfelder, Cards, Tabellen, Badges, + Alerts, Tabs, Pagination, Modals, Toasts, Statistik-Kacheln, Sidebar/Topbar +- **Dark Mode** ausschließlich über Tokens – keine `!important`-Overrides mehr +- **Schriftart** Inter (via Google Fonts) mit System-Font-Fallback + +Eigenes Branding lässt sich meist mit wenigen Zeilen umsetzen – z. B. in einer +eigenen CSS-Datei oder direkt in `assets/global.css`: + +```css +:root { + --accent: #0f766e; /* Primärfarbe (Buttons, aktive Navigation) */ + --accent-hover: #0d5f59; + --accent-soft: #e6f4f2; /* Flächen für aktive Zustände */ + --brand-gradient: linear-gradient(135deg, #0f766e 0%, #0ea5e9 100%); + --r-lg: 14px; /* Eckenradius für Cards */ +} +``` + +Logo und Favicon werden nicht über CSS, sondern unter +**Administration → Einstellungen → Allgemein** gesetzt. + +### Login-Seite individualisieren + +Unter **Administration → Einstellungen → Login-Seite** lässt sich die Anmeldeseite +ohne Code-Änderung an das eigene Haus anpassen. Leere Felder verwenden jeweils den +Standardwert – eine frische Installation sieht also unverändert aus. + +| Einstellung | Wirkung | +|---|---| +| Linke Bildspalte anzeigen | Split-Screen an/aus. Aus = zentrierte Anmeldekarte | +| Firmenname | Name neben dem Logo bzw. in der Fußzeile (leer = Anwendungstitel) | +| Logo (URL) | Eigenes Logo in der Bildspalte (leer = allgemeines Logo) | +| Überschrift / Beschreibungstext | Claim in der Bildspalte | +| Stichpunkte | Liste mit Haken – ein Stichpunkt pro Zeile, leer = keine Liste | +| Fußzeile | z. B. `© 2026 Muster GmbH · Datenschutz · Impressum` | +| Hintergrundbild (URL) | Formatfüllendes Bild der Bildspalte | +| Verlauf Start-/Endfarbe | Farbverlauf, wenn kein Bild gesetzt ist | +| Abdunklung (%) | Dunkle Ebene über dem Bild, damit der Text lesbar bleibt | + +Über **„Vorschau öffnen"** lässt sich die Login-Seite als angemeldeter Administrator +ansehen (`login.php?preview=1`), ohne sich abzumelden. + +--- + ## 🛡️ Sicherheit Das Tool ist auf einen sicheren Standardbetrieb ausgelegt: @@ -378,11 +446,12 @@ setzen (`DB_*`, `APP_KEY`). - [x] Docker-Container - [x] Erweiterte Reporting-Funktionen (CSV/PDF) + Health-Endpoint - [x] 2FA-Recovery-Codes, API-Scopes/Rate-Limit/OpenAPI, Test-Suite (PHPUnit/PHPStan) +- [x] Gemeinsames Design-System für Frontend, Login und Backend ---
-**Version 2.4.0** · Autor: **Friederich Loheide** · Lizenz: **MIT** +**Version 2.5.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
diff --git a/admin/api_keys.php b/admin/api_keys.php index a2bbbfb..4817b71 100644 --- a/admin/api_keys.php +++ b/admin/api_keys.php @@ -68,28 +68,12 @@ $adminBase = ''; API-Schlüssel – <?= htmlspecialchars($appTitle) ?> - - - -

🔑 API-Schlüssel

+
@@ -130,6 +114,7 @@ code { font-family:monospace; background:var(--bg-hover); padding:2px 6px; borde

Noch keine API-Schlüssel angelegt.

+
@@ -139,15 +124,16 @@ code { font-family:monospace; background:var(--bg-hover); padding:2px 6px; borde - +
NamePräfixScopeLimitStatusZuletzt genutztErstellt von
- Löschen + Löschen
+
@@ -165,7 +151,7 @@ curl https://IHRE-DOMAIN/api/sites.php -H "X-API-Key: uvt_…"

OpenAPI-Spezifikation (Import in Postman/Swagger): /api/openapi.php

- + diff --git a/admin/audit_log.php b/admin/audit_log.php index 0af636a..edde07b 100644 --- a/admin/audit_log.php +++ b/admin/audit_log.php @@ -46,21 +46,21 @@ $currentPage = 'audit_log'; $adminBase = ''; $actionLabels = [ - 'voucher_created' => '🎫 Voucher erstellt', - 'voucher_bulk' => '🎫 Bulk Voucher', - 'user_login' => '🔐 Login', - 'user_logout' => '🚪 Logout', - 'user_created' => '👤 Benutzer erstellt', - 'user_updated' => '👤 Benutzer geändert', - 'user_deleted' => '👤 Benutzer gelöscht', - 'site_added' => '🌐 Site hinzugefügt', - 'site_updated' => '🌐 Site geändert', - 'site_deleted' => '🌐 Site gelöscht', - 'settings_saved' => '⚙️ Einstellungen gespeichert', - 'password_reset' => '🔑 Passwort-Reset', - 'template_created' => '📋 Profil erstellt', - 'template_updated' => '📋 Profil geändert', - 'template_deleted' => '📋 Profil gelöscht', + 'voucher_created' => 'Voucher erstellt', + 'voucher_bulk' => 'Bulk Voucher', + 'user_login' => 'Login', + 'user_logout' => 'Logout', + 'user_created' => 'Benutzer erstellt', + 'user_updated' => 'Benutzer geändert', + 'user_deleted' => 'Benutzer gelöscht', + 'site_added' => 'Site hinzugefügt', + 'site_updated' => 'Site geändert', + 'site_deleted' => 'Site gelöscht', + 'settings_saved' => 'Einstellungen gespeichert', + 'password_reset' => 'Passwort-Reset', + 'template_created' => 'Profil erstellt', + 'template_updated' => 'Profil geändert', + 'template_deleted' => 'Profil gelöscht', ]; ?> @@ -70,42 +70,12 @@ $actionLabels = [ <?= __('audit_title') ?> - <?= htmlspecialchars($appTitle) ?> - - @@ -151,6 +121,7 @@ $actionLabels = [

+
@@ -197,6 +168,7 @@ $actionLabels = [
+
1): ?> @@ -221,7 +193,7 @@ $actionLabels = [ - + diff --git a/admin/backup.php b/admin/backup.php index 0faf942..b8afeee 100644 --- a/admin/backup.php +++ b/admin/backup.php @@ -114,22 +114,12 @@ $adminBase = ''; Backup & Restore – <?= htmlspecialchars($appTitle) ?> - - - -

💾 Backup & Restore

+
@@ -153,7 +143,7 @@ input[type=file] { margin:10px 0; color:var(--text-primary); } - + diff --git a/admin/import.php b/admin/import.php index dfb9725..d938ac5 100644 --- a/admin/import.php +++ b/admin/import.php @@ -93,22 +93,12 @@ $adminBase = ''; CSV-Import – <?= htmlspecialchars($appTitle) ?> - - - -

📥 Voucher-Import (CSV)

+
@@ -142,7 +132,7 @@ code { font-family:monospace; background:var(--bg-hover); padding:2px 6px; borde - + diff --git a/admin/index.php b/admin/index.php index e432205..a7fa9a0 100644 --- a/admin/index.php +++ b/admin/index.php @@ -92,74 +92,6 @@ $currentPage = 'dashboard'; <?= __('dashboard_title') ?> – <?= htmlspecialchars($appTitle) ?> -