From 6da46f040a9f6bcc37f80a938f949047536a1498 Mon Sep 17 00:00:00 2001 From: Friederich Loheide Date: Wed, 23 Sep 2026 06:23:44 +0000 Subject: [PATCH 1/8] =?UTF-8?q?Alle=20Frontend-Assets=20lokal=20ausliefern?= =?UTF-8?q?=20statt=20=C3=BCber=20CDNs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inter, Font Awesome, Chart.js, qrcodejs und TinyMCE liegen jetzt unter assets/vendor/ und werden vom eigenen Server ausgeliefert. Warum: - Datenschutz: bisher ging bei jedem Seitenaufruf die IP der Nutzer an Google Fonts, cdnjs, jsDelivr und Tiny Cloud - Funktion: UniFi-Installationen stehen oft in abgeschotteten Netzen – dort fehlten bisher Schrift, Icons, Diagramme und Editor Neu: includes/Ui.php - Ui::head()/Ui::script() binden die Assets ein und hängen einen Versionsstempel an (?v=filemtime), damit Browser nach einem Update nicht das alte CSS aus dem Cache nehmen - Ui::themeScript() setzt das Theme aus der gespeicherten Auswahl oder – wenn keine vorliegt – aus prefers-color-scheme; global.js folgt Systemwechseln live, solange nichts manuell gewählt wurde - ergänzt, damit Formularelemente passen Der TinyMCE-API-Key entfällt: der Editor läuft immer lokal (GPL-Variante), inklusive deutscher Oberfläche, wenn die App auf Deutsch steht. Neu: tools/demo/build.py – baut aus dem Projekt eine Demo-Instanz ohne Datenbank (Stubs für Database/Auth, feste Beispieldaten). Damit lassen sich Screenshots reproduzierbar erzeugen und alle Seiten einmal rendern (Smoke-Test), ohne eine MySQL-Instanz aufzusetzen. Co-Authored-By: Claude Opus 5 --- admin/index.php | 3 +- admin/reports.php | 3 +- admin/security.php | 10 +- admin/settings.php | 23 +- assets/global.js | 17 +- assets/vendor/README.md | 30 ++ assets/vendor/chartjs/chart.umd.min.js | 20 + assets/vendor/fontawesome/fontawesome.css | 11 + .../fontawesome/webfonts/fa-brands-400.woff2 | Bin 0 -> 108020 bytes .../fontawesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 150124 bytes assets/vendor/inter/Inter-Bold.woff2 | Bin 0 -> 111040 bytes assets/vendor/inter/Inter-Medium.woff2 | Bin 0 -> 111380 bytes assets/vendor/inter/Inter-Regular.woff2 | Bin 0 -> 108488 bytes assets/vendor/inter/Inter-SemiBold.woff2 | Bin 0 -> 111588 bytes assets/vendor/inter/inter.css | 30 ++ assets/vendor/qrcodejs/qrcode.min.js | 1 + .../vendor/tinymce/icons/default/icons.min.js | 1 + assets/vendor/tinymce/langs/de.js | 406 ++++++++++++++++++ assets/vendor/tinymce/license.txt | 21 + assets/vendor/tinymce/models/dom/model.min.js | 4 + .../tinymce/plugins/advlist/plugin.min.js | 4 + .../tinymce/plugins/autolink/plugin.min.js | 4 + .../vendor/tinymce/plugins/code/plugin.min.js | 4 + .../tinymce/plugins/fullscreen/plugin.min.js | 4 + .../tinymce/plugins/help/js/i18n/keynav/de.js | 90 ++++ .../tinymce/plugins/help/js/i18n/keynav/en.js | 90 ++++ .../vendor/tinymce/plugins/help/plugin.min.js | 4 + .../vendor/tinymce/plugins/link/plugin.min.js | 4 + .../tinymce/plugins/lists/plugin.min.js | 4 + .../plugins/searchreplace/plugin.min.js | 4 + .../tinymce/plugins/table/plugin.min.js | 4 + .../plugins/visualblocks/plugin.min.js | 4 + .../tinymce/plugins/wordcount/plugin.min.js | 4 + .../skins/content/dark/content.min.css | 1 + .../skins/content/default/content.min.css | 1 + .../skins/ui/oxide-dark/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../tinymce/skins/ui/oxide/content.min.css | 1 + .../tinymce/skins/ui/oxide/skin.min.css | 1 + .../vendor/tinymce/themes/silver/theme.min.js | 4 + assets/vendor/tinymce/tinymce.min.js | 4 + forgot_password.php | 8 +- includes/Ui.php | 145 +++++++ includes/admin_nav.php | 18 +- index.php | 10 +- install.php | 7 +- login.php | 8 +- login_simple.php | 373 ++++++++-------- m365_debug.php | 4 +- reset_password.php | 8 +- test.php | 5 +- tools/demo/build.py | 108 +++++ tools/demo/overlay/demo-assets/background.svg | 22 + tools/demo/overlay/demo-assets/logo.svg | 9 + tools/demo/overlay/includes/Auth.php | 31 ++ tools/demo/overlay/includes/Database.php | 164 +++++++ updater/templates/update.php | 8 +- 57 files changed, 1479 insertions(+), 267 deletions(-) create mode 100644 assets/vendor/README.md create mode 100644 assets/vendor/chartjs/chart.umd.min.js create mode 100644 assets/vendor/fontawesome/fontawesome.css create mode 100644 assets/vendor/fontawesome/webfonts/fa-brands-400.woff2 create mode 100644 assets/vendor/fontawesome/webfonts/fa-solid-900.woff2 create mode 100644 assets/vendor/inter/Inter-Bold.woff2 create mode 100644 assets/vendor/inter/Inter-Medium.woff2 create mode 100644 assets/vendor/inter/Inter-Regular.woff2 create mode 100644 assets/vendor/inter/Inter-SemiBold.woff2 create mode 100644 assets/vendor/inter/inter.css create mode 100644 assets/vendor/qrcodejs/qrcode.min.js create mode 100644 assets/vendor/tinymce/icons/default/icons.min.js create mode 100644 assets/vendor/tinymce/langs/de.js create mode 100644 assets/vendor/tinymce/license.txt create mode 100644 assets/vendor/tinymce/models/dom/model.min.js create mode 100644 assets/vendor/tinymce/plugins/advlist/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/autolink/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/code/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/help/js/i18n/keynav/de.js create mode 100644 assets/vendor/tinymce/plugins/help/js/i18n/keynav/en.js create mode 100644 assets/vendor/tinymce/plugins/help/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/link/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/lists/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/table/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 assets/vendor/tinymce/plugins/wordcount/plugin.min.js create mode 100644 assets/vendor/tinymce/skins/content/dark/content.min.css create mode 100644 assets/vendor/tinymce/skins/content/default/content.min.css create mode 100644 assets/vendor/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 assets/vendor/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 assets/vendor/tinymce/skins/ui/oxide/content.min.css create mode 100644 assets/vendor/tinymce/skins/ui/oxide/skin.min.css create mode 100644 assets/vendor/tinymce/themes/silver/theme.min.js create mode 100644 assets/vendor/tinymce/tinymce.min.js create mode 100644 includes/Ui.php create mode 100755 tools/demo/build.py create mode 100644 tools/demo/overlay/demo-assets/background.svg create mode 100644 tools/demo/overlay/demo-assets/logo.svg create mode 100644 tools/demo/overlay/includes/Auth.php create mode 100644 tools/demo/overlay/includes/Database.php diff --git a/admin/index.php b/admin/index.php index a7fa9a0..7f743d6 100644 --- a/admin/index.php +++ b/admin/index.php @@ -6,6 +6,7 @@ ini_set('log_errors', 1); require_once __DIR__ . '/../config.php'; require_once __DIR__ . '/../includes/Database.php'; require_once __DIR__ . '/../includes/Auth.php'; +require_once __DIR__ . '/../includes/Ui.php'; require_once __DIR__ . '/../includes/UniFiController.php'; require_once __DIR__ . '/../includes/I18n.php'; @@ -90,7 +91,7 @@ $currentPage = 'dashboard'; <?= __('dashboard_title') ?> – <?= htmlspecialchars($appTitle) ?> - +