From 0ce527c69e29b7119318fcb3c039ab4b856c8430 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Jan 2026 17:47:56 +0000 Subject: [PATCH] Add comprehensive admin settings control panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Erweitere Admin-Bereich um umfangreiche Settings-Steuerung: **Punkt 2 - UI Anzeige:** - Empfehlungs-Banner ein/aus - QR-Code Section ein/aus - Social Media Links ein/aus - Patrouille Suisse Section ein/aus **Punkt 3 - Zoom & Timelapse:** - Zoom-Controls anzeigen/verstecken - Max Zoom-Level konfigurierbar (1.5x - 4.0x) - Timelapse Rückwärts-Modus ein/aus **Punkt 5 - Content Management:** - Gästebuch aktivieren/deaktivieren - Galerie aktivieren/deaktivieren - KI-Events anzeigen/verstecken - Max Gästebuch-Einträge limit **Punkt 6 - Technische Settings:** - Viewer Update-Intervall konfigurierbar - Session Timeout einstellbar **Punkt 7 - Theme & Design:** - Standard-Theme auswählbar (Legacy/Alpine/Modern) - Theme-Switcher anzeigen/verstecken (war auskommentiert) **Punkt 8 - SEO & Meta:** - Custom Title konfigurierbar - Meta Description editierbar - Meta Keywords verwaltbar **Technische Änderungen:** - SettingsManager.php: Neue Defaults und Helper-Methoden - Admin-Panel: Neue Settings-Gruppen mit Toggle-Switches - JavaScript: Live-Apply ohne Reload für alle Settings - HTML: Sections mit PHP-Settings verbunden - CSS: Admin-Panel Styling hinzugefügt - TimelapseController: reverseEnabled Setting integriert --- aurora-livecam/SettingsManager.php | 118 ++++++- aurora-livecam/index.php | 503 +++++++++++++++++++++++++++-- 2 files changed, 600 insertions(+), 21 deletions(-) diff --git a/aurora-livecam/SettingsManager.php b/aurora-livecam/SettingsManager.php index 6c8b7a6..0db1f1d 100644 --- a/aurora-livecam/SettingsManager.php +++ b/aurora-livecam/SettingsManager.php @@ -26,7 +26,8 @@ class SettingsManager { return [ 'viewer_display' => [ 'enabled' => true, - 'min_viewers' => 1 + 'min_viewers' => 1, + 'update_interval' => 5 // Sekunden ], 'video_mode' => [ 'play_in_player' => true, @@ -36,6 +37,42 @@ class SettingsManager { 'default_speed' => 1, 'available_speeds' => [1, 10, 100] ], + // Punkt 2: UI-Anzeige Features + 'ui_display' => [ + 'show_recommendation_banner' => true, + 'show_qr_code' => true, + 'show_social_media' => true, + 'show_patrouille_suisse' => true + ], + // Punkt 3: Zoom & Timelapse + 'zoom_timelapse' => [ + 'show_zoom_controls' => true, + 'max_zoom_level' => 4.0, + 'timelapse_reverse_enabled' => true + ], + // Punkt 5: Content Management + 'content' => [ + 'guestbook_enabled' => true, + 'gallery_enabled' => true, + 'ai_events_enabled' => true, + 'max_guestbook_entries' => 50 + ], + // Punkt 6: Technische Settings + 'technical' => [ + 'viewer_update_interval' => 5, // Sekunden + 'session_timeout' => 30 // Sekunden + ], + // Punkt 7: Theme & Design + 'theme' => [ + 'default_theme' => 'theme-legacy', + 'show_theme_switcher' => false + ], + // Punkt 8: SEO & Meta + 'seo' => [ + 'custom_title' => '', + 'meta_description' => '', + 'meta_keywords' => '' + ], 'last_updated' => null, 'updated_by' => null ]; @@ -123,4 +160,83 @@ class SettingsManager { public function shouldAllowDownload() { return $this->get('video_mode.allow_download') === true; } + + // UI Display Helper + public function shouldShowRecommendationBanner() { + return $this->get('ui_display.show_recommendation_banner') === true; + } + + public function shouldShowQRCode() { + return $this->get('ui_display.show_qr_code') === true; + } + + public function shouldShowSocialMedia() { + return $this->get('ui_display.show_social_media') === true; + } + + public function shouldShowPatrouillesuisse() { + return $this->get('ui_display.show_patrouille_suisse') === true; + } + + // Content Management Helper + public function isGuestbookEnabled() { + return $this->get('content.guestbook_enabled') === true; + } + + public function isGalleryEnabled() { + return $this->get('content.gallery_enabled') === true; + } + + public function isAIEventsEnabled() { + return $this->get('content.ai_events_enabled') === true; + } + + public function getMaxGuestbookEntries() { + return $this->get('content.max_guestbook_entries') ?? 50; + } + + // Theme Helper + public function getDefaultTheme() { + return $this->get('theme.default_theme') ?? 'theme-legacy'; + } + + public function shouldShowThemeSwitcher() { + return $this->get('theme.show_theme_switcher') === true; + } + + // Technical Helper + public function getViewerUpdateInterval() { + return $this->get('technical.viewer_update_interval') ?? 5; + } + + public function getSessionTimeout() { + return $this->get('technical.session_timeout') ?? 30; + } + + // Zoom & Timelapse Helper + public function shouldShowZoomControls() { + return $this->get('zoom_timelapse.show_zoom_controls') === true; + } + + public function getMaxZoomLevel() { + return $this->get('zoom_timelapse.max_zoom_level') ?? 4.0; + } + + public function isTimelapseReverseEnabled() { + return $this->get('zoom_timelapse.timelapse_reverse_enabled') === true; + } + + // SEO Helper + public function getCustomTitle() { + $title = $this->get('seo.custom_title'); + return !empty($title) ? $title : null; + } + + public function getMetaDescription() { + return $this->get('seo.meta_description') ?? ''; + } + + public function getMetaKeywords() { + return $this->get('seo.meta_keywords') ?? ''; + } } diff --git a/aurora-livecam/index.php b/aurora-livecam/index.php index 3b12eed..5ac8104 100644 --- a/aurora-livecam/index.php +++ b/aurora-livecam/index.php @@ -559,7 +559,7 @@ class VisualCalendarManager { } // === AI-EREIGNISSE === - if (!empty($aiEvents)) { + if (!empty($aiEvents) && (!$this->settingsManager || $this->settingsManager->isAIEventsEnabled())) { $output .= '
'; $output .= '
🤖 AI-erkannte Ereignisse
'; $output .= '
'; @@ -1073,6 +1073,197 @@ class AdminManager { $output .= '
'; $output .= '
'; // settings-group + // UI Display Settings (Punkt 2) + $output .= '
'; + $output .= '

🖼️ UI Anzeige

'; + + $output .= '
'; + $output .= 'Empfehlungs-Banner anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'QR-Code Section anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Social Media Links anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Patrouille Suisse Section anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + + // Zoom & Timelapse Settings (Punkt 3) + $output .= '
'; + $output .= '

🔍 Zoom & Timelapse

'; + + $output .= '
'; + $output .= 'Zoom-Controls anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Max Zoom-Level'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Timelapse Rückwärts-Modus'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + + // Content Management Settings (Punkt 5) + $output .= '
'; + $output .= '

📝 Content Management

'; + + $output .= '
'; + $output .= 'Gästebuch aktivieren'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Galerie aktivieren'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'KI-Events anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Max Gästebuch-Einträge'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + + // Technical Settings (Punkt 6) + $output .= '
'; + $output .= '

⚙️ Technische Einstellungen

'; + + $output .= '
'; + $output .= 'Viewer Update-Intervall (Sekunden)'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Session Timeout (Sekunden)'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + + // Theme Settings (Punkt 7) + $output .= '
'; + $output .= '

🎨 Theme & Design

'; + + $output .= '
'; + $output .= 'Standard-Theme'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Theme-Switcher anzeigen'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + + // SEO Settings (Punkt 8) + $output .= '
'; + $output .= '

🔍 SEO & Meta

'; + + $output .= '
'; + $output .= 'Custom Title (leer = Standard)'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Meta Description'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + + $output .= '
'; + $output .= 'Meta Keywords'; + $output .= '
'; + $output .= ''; + $output .= '
'; + $output .= '
'; + $output .= '
'; // settings-group + $output .= ''; // admin-settings-panel // Bestehender Admin-Content @@ -1383,11 +1574,11 @@ $minViewersToShow = $settingsManager->get('viewer_display.min_viewers'); - <?php echo $siteConfig['siteTitle']; ?> + <?php echo $settingsManager->getCustomTitle() ?: $siteConfig['siteTitle']; ?> - - + + @@ -1896,6 +2087,119 @@ button[type="submit"]:hover { background-color: #45a049; } .modal-next { right: 0; } .modal-prev { left: 0; } +/* Admin Settings Panel */ +#admin-settings-panel { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + padding: 30px; + border-radius: 12px; + margin-bottom: 30px; + box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3); +} +#admin-settings-panel h3 { + color: white; + margin: 0 0 25px 0; + font-size: 24px; + text-align: center; +} +.settings-group { + background: rgba(255, 255, 255, 0.95); + padding: 20px; + border-radius: 8px; + margin-bottom: 15px; +} +.settings-group h4 { + margin: 0 0 15px 0; + color: #667eea; + font-size: 18px; + border-bottom: 2px solid #667eea; + padding-bottom: 8px; +} +.setting-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 0; + border-bottom: 1px solid #f0f0f0; +} +.setting-row:last-child { + border-bottom: none; +} +.setting-label { + font-weight: 500; + color: #333; + flex: 1; +} +.setting-input { + display: flex; + align-items: center; + min-width: 200px; +} +.number-input, .text-input, .select-input { + width: 100%; + padding: 8px 12px; + border: 2px solid #ddd; + border-radius: 5px; + font-size: 14px; + transition: border-color 0.3s; +} +.number-input:focus, .text-input:focus, .select-input:focus { + outline: none; + border-color: #667eea; +} +.textarea-input { + width: 100%; + padding: 8px 12px; + border: 2px solid #ddd; + border-radius: 5px; + font-size: 14px; + font-family: Arial, sans-serif; + resize: vertical; + transition: border-color 0.3s; +} +.textarea-input:focus { + outline: none; + border-color: #667eea; +} +.toggle-switch { + position: relative; + display: inline-block; + width: 50px; + height: 24px; +} +.toggle-switch input { + opacity: 0; + width: 0; + height: 0; +} +.toggle-slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: 0.3s; + border-radius: 24px; +} +.toggle-slider:before { + position: absolute; + content: ""; + height: 18px; + width: 18px; + left: 3px; + bottom: 3px; + background-color: white; + transition: 0.3s; + border-radius: 50%; +} +.toggle-switch input:checked + .toggle-slider { + background: linear-gradient(135deg, #667eea, #764ba2); +} +.toggle-switch input:checked + .toggle-slider:before { + transform: translateX(26px); +} + /* Language Switch */ #language-switch { position: fixed; top: 10px; right: 10px; z-index: 1000; background-color: rgba(255, 255, 255, 0.8); border-radius: 5px; padding: 5px; } .lang-button { background: none; border: none; cursor: pointer; padding: 5px; opacity: 0.7; transition: opacity 0.3s; margin: 0 2px; } @@ -2105,7 +2409,7 @@ body.theme-neo footer { - + @@ -2147,12 +2451,12 @@ body.theme-neo footer { - + @@ -2176,7 +2480,7 @@ body.theme-neo footer { -