diff --git a/Readme.md b/Readme.md index af6cb97..7019def 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.5.0-blueviolet) +![Version](https://img.shields.io/badge/Version-2.4.0-blueviolet) ![CI](https://github.com/friloo/unifi-voucher-tool/actions/workflows/ci.yml/badge.svg) @@ -45,8 +45,6 @@ - 💾 **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 @@ -61,35 +59,31 @@ ## 📸 Screenshots -> Alle Screenshots stammen aus der Oberfläche in Version 2.5.0 (neues Design-System). - ### Anmeldung & Voucher-Erstellung
- Anmeldung - Anmeldung mit eigenem Branding + Login mit Microsoft 365 + Voucher erstellen + Voucher-Ergebnis
-
- Voucher erstellen - Einstellungen der Login-Seite -
+### Bulk-Erstellung & Dark Mode
- Voucher-Ergebnis mit QR-Code Bulk-Voucher-Erstellung -
- -### Administration - -
- Dashboard Dashboard im Dark Mode
+### Administration & Updater +
- Live-Voucher-Verwaltung - Einstellungen + Dashboard + Auto-Updater +
+ +
+ Updater – Ausgangszustand + Wartungsmodus
### REST-API, 2FA & Integrationen @@ -103,17 +97,6 @@ Zwei-Faktor-Authentifizierung -### Updater & Wartungsmodus - -
- Updater – Ausgangszustand - Auto-Updater mit verfügbarem Update -
- -
- Wartungsmodus -
- --- ## 📋 Anforderungen @@ -237,57 +220,6 @@ 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: @@ -446,12 +378,11 @@ 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.5.0** · Autor: **Friederich Loheide** · Lizenz: **MIT** +**Version 2.4.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
diff --git a/admin/api_keys.php b/admin/api_keys.php index 4817b71..a2bbbfb 100644 --- a/admin/api_keys.php +++ b/admin/api_keys.php @@ -68,12 +68,28 @@ $adminBase = ''; API-Schlüssel – <?= htmlspecialchars($appTitle) ?> - + + + +

🔑 API-Schlüssel

@@ -114,7 +130,6 @@ $adminBase = '';

Noch keine API-Schlüssel angelegt.

-
@@ -124,16 +139,15 @@ $adminBase = ''; - +
NamePräfixScopeLimitStatusZuletzt genutztErstellt von
- Löschen + Löschen
-
@@ -151,7 +165,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 edde07b..0af636a 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,12 +70,42 @@ $actionLabels = [ <?= __('audit_title') ?> - <?= htmlspecialchars($appTitle) ?> + + @@ -121,7 +151,6 @@ $actionLabels = [

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

💾 Backup & Restore

@@ -143,7 +153,7 @@ $adminBase = ''; - + diff --git a/admin/import.php b/admin/import.php index d938ac5..dfb9725 100644 --- a/admin/import.php +++ b/admin/import.php @@ -93,12 +93,22 @@ $adminBase = ''; CSV-Import – <?= htmlspecialchars($appTitle) ?> - + + + +

📥 Voucher-Import (CSV)

@@ -132,7 +142,7 @@ $adminBase = ''; - + diff --git a/admin/index.php b/admin/index.php index a7fa9a0..e432205 100644 --- a/admin/index.php +++ b/admin/index.php @@ -92,6 +92,74 @@ $currentPage = 'dashboard'; <?= __('dashboard_title') ?> – <?= htmlspecialchars($appTitle) ?> +