255 lines
11 KiB
HTML
255 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Admin Dashboard - NinjaCross</title>
|
||
<link rel="icon" type="image/x-icon" href="/pictures/favicon.ico">
|
||
<link rel="stylesheet" href="/css/admin-dashboard.css">
|
||
</head>
|
||
<body>
|
||
<div class="header">
|
||
<h1>🛡️ Admin Dashboard</h1>
|
||
<div class="user-info">
|
||
<span id="username">Loading...</span>
|
||
<span id="accessBadge" class="access-badge">Level ?</span>
|
||
<button id="generatorBtn" class="btn btn-success" style="display: none;">
|
||
🔧 Lizenzgenerator
|
||
</button>
|
||
<button id="logoutBtn" class="btn btn-danger">Logout</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="container">
|
||
<!-- Statistiken -->
|
||
<div class="stats-grid">
|
||
<div class="stat-card">
|
||
<div class="stat-number" id="totalPlayers">-</div>
|
||
<div class="stat-label">Spieler</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-number" id="totalRuns">-</div>
|
||
<div class="stat-label">Läufe</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-number" id="totalLocations">-</div>
|
||
<div class="stat-label">Standorte</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-number" id="totalAdminUsers">-</div>
|
||
<div class="stat-label">Admin-Benutzer</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Hauptseiten-Besuche -->
|
||
<div class="page-stats-section">
|
||
<h2>🏠 Hauptseiten-Besuche</h2>
|
||
<div class="page-stats-grid">
|
||
<div class="page-stat-card">
|
||
<h3>Heute</h3>
|
||
<div id="todayStats" class="page-stats-content">Lade...</div>
|
||
</div>
|
||
<div class="page-stat-card">
|
||
<h3>Diese Woche</h3>
|
||
<div id="weekStats" class="page-stats-content">Lade...</div>
|
||
</div>
|
||
<div class="page-stat-card">
|
||
<h3>Dieser Monat</h3>
|
||
<div id="monthStats" class="page-stats-content">Lade...</div>
|
||
</div>
|
||
<div class="page-stat-card">
|
||
<h3>Gesamt</h3>
|
||
<div id="totalStats" class="page-stats-content">Lade...</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Verlinkungs-Statistiken -->
|
||
<div class="link-stats-section">
|
||
<h3>🔗 Account-Verknüpfungen</h3>
|
||
<div class="link-stats-grid">
|
||
<div class="link-stat-card">
|
||
<div class="link-stat-number" id="totalPlayersCount">-</div>
|
||
<div class="link-stat-label">Gesamt Spieler</div>
|
||
</div>
|
||
<div class="link-stat-card">
|
||
<div class="link-stat-number" id="linkedPlayersCount">-</div>
|
||
<div class="link-stat-label">Verknüpfte Spieler</div>
|
||
</div>
|
||
<div class="link-stat-card">
|
||
<div class="link-stat-number" id="linkPercentage">-</div>
|
||
<div class="link-stat-label">Verknüpfungsrate</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Dashboard Cards -->
|
||
<div class="dashboard-grid">
|
||
<!-- Benutzer-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">👥</span> Benutzer-Verwaltung</h3>
|
||
<p>Verwalte Supabase-Benutzer und deren RFID-Verknüpfungen</p>
|
||
<button class="btn" onclick="showUserManagement()">Benutzer anzeigen</button>
|
||
</div>
|
||
|
||
<!-- Spieler-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">🏃</span> Spieler-Verwaltung</h3>
|
||
<p>Verwalte Spieler und deren RFID-UIDs</p>
|
||
<button class="btn" onclick="showPlayerManagement()">Spieler anzeigen</button>
|
||
</div>
|
||
|
||
<!-- Blacklist-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">🚫</span> Blacklist-Verwaltung</h3>
|
||
<p>Verwalte verbotene Namen und Begriffe</p>
|
||
<button class="btn" onclick="showBlacklistManagement()">Blacklist verwalten</button>
|
||
</div>
|
||
|
||
|
||
<!-- Läufe-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">⏱️</span> Läufe-Verwaltung</h3>
|
||
<p>Zeige und lösche Läufe</p>
|
||
<button class="btn" onclick="showRunManagement()">Läufe anzeigen</button>
|
||
</div>
|
||
|
||
<!-- Standort-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">📍</span> Standort-Verwaltung</h3>
|
||
<p>Verwalte Standorte und deren Koordinaten</p>
|
||
<button class="btn" onclick="showLocationManagement()">Standorte anzeigen</button>
|
||
</div>
|
||
|
||
<!-- Admin-Benutzer -->
|
||
<div class="card">
|
||
<h3><span class="icon">🔐</span> Admin-Benutzer</h3>
|
||
<p>Verwalte Admin-Benutzer und Zugriffsrechte</p>
|
||
<button class="btn" onclick="showAdminUserManagement()">Admins anzeigen</button>
|
||
</div>
|
||
|
||
<!-- Achievement-Verwaltung -->
|
||
<div class="card">
|
||
<h3><span class="icon">🏆</span> Achievement-Verwaltung</h3>
|
||
<p>Verwalte Achievements und Spieler-Achievements</p>
|
||
<button class="btn" onclick="showAchievementManagement()">Achievements verwalten</button>
|
||
</div>
|
||
|
||
<!-- System-Info -->
|
||
<div class="card">
|
||
<h3><span class="icon">📊</span> System-Informationen</h3>
|
||
<p>Server-Status und Systemdaten</p>
|
||
<button class="btn" onclick="showSystemInfo()">Info anzeigen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Daten-Anzeige Bereich -->
|
||
<div id="dataSection" style="display: none;">
|
||
<div class="card">
|
||
<h3 id="dataTitle">Daten</h3>
|
||
<div class="search-container">
|
||
<input type="text" id="searchInput" class="search-input" placeholder="Suchen...">
|
||
<button class="btn" onclick="refreshData()">🔄 Aktualisieren</button>
|
||
<button class="btn btn-success" onclick="showAddModal()">➕ Hinzufügen</button>
|
||
</div>
|
||
<div id="dataContent">
|
||
<div class="loading">Lade Daten...</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Modals -->
|
||
<div id="addModal" class="modal">
|
||
<div class="modal-content">
|
||
<span class="close">×</span>
|
||
<h3 id="modalTitle">Element hinzufügen</h3>
|
||
<div class="message" id="modalMessage"></div>
|
||
<form id="addForm">
|
||
<div id="formFields"></div>
|
||
<button type="submit" class="btn">Speichern</button>
|
||
<button type="button" class="btn btn-danger" onclick="closeModal()">Abbrechen</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="confirmModal" class="modal">
|
||
<div class="modal-content">
|
||
<span class="close">×</span>
|
||
<h3>Bestätigung</h3>
|
||
<p id="confirmMessage">Sind Sie sicher?</p>
|
||
<button id="confirmYes" class="btn btn-danger">Ja, löschen</button>
|
||
<button id="confirmNo" class="btn">Abbrechen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Blacklist Management Modal -->
|
||
<div id="blacklistModal" class="modal">
|
||
<div class="modal-content" style="max-width: 800px;">
|
||
<span class="close" onclick="closeModal('blacklistModal')">×</span>
|
||
<h3>🚫 Blacklist-Verwaltung</h3>
|
||
<div class="message" id="blacklistMessage"></div>
|
||
|
||
<!-- Test Name Section -->
|
||
<div style="border: 1px solid #ddd; padding: 1rem; margin-bottom: 1rem; border-radius: 5px;">
|
||
<h4>Name testen</h4>
|
||
<div style="display: flex; gap: 1rem; margin-bottom: 1rem;">
|
||
<input type="text" id="testFirstname" placeholder="Vorname" style="flex: 1; padding: 0.5rem;">
|
||
<input type="text" id="testLastname" placeholder="Nachname" style="flex: 1; padding: 0.5rem;">
|
||
<button class="btn" onclick="testNameAgainstBlacklist()">Testen</button>
|
||
<button class="btn" onclick="testLevenshteinDetailed()" style="background: #9c27b0; color: white;">Levenshtein Details</button>
|
||
</div>
|
||
<div id="testResult" style="padding: 0.5rem; border-radius: 3px; display: none;"></div>
|
||
</div>
|
||
|
||
<!-- Add New Entry Section -->
|
||
<div style="border: 1px solid #ddd; padding: 1rem; margin-bottom: 1rem; border-radius: 5px;">
|
||
<h4>Neuen Eintrag hinzufügen</h4>
|
||
<div style="display: flex; gap: 1rem; margin-bottom: 1rem;">
|
||
<input type="text" id="newTerm" placeholder="Begriff" style="flex: 1; padding: 0.5rem;">
|
||
<select id="newCategory" style="flex: 1; padding: 0.5rem;">
|
||
<option value="historical">Historisch belastet</option>
|
||
<option value="offensive">Beleidigend/anstößig</option>
|
||
<option value="titles">Titel/Berufsbezeichnung</option>
|
||
<option value="brands">Markenname</option>
|
||
<option value="inappropriate">Unpassend</option>
|
||
<option value="racial">Rassistisch/ethnisch</option>
|
||
<option value="religious">Religiös beleidigend</option>
|
||
<option value="disability">Behinderungsbezogen</option>
|
||
<option value="leetspeak">Verschleiert</option>
|
||
<option value="cyberbullying">Cyberbullying</option>
|
||
<option value="drugs">Drogenbezogen</option>
|
||
<option value="violence">Gewalt/Bedrohung</option>
|
||
</select>
|
||
<button class="btn btn-success" onclick="addToBlacklist()">Hinzufügen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Blacklist Content -->
|
||
<div id="blacklistContent">
|
||
<div class="loading">Lade Blacklist...</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Footer -->
|
||
<footer class="footer">
|
||
<div class="footer-content">
|
||
<div class="footer-links">
|
||
<a href="/impressum.html" class="footer-link">Impressum</a>
|
||
<a href="/datenschutz.html" class="footer-link">Datenschutz</a>
|
||
<button id="cookie-settings-footer" class="footer-link cookie-settings-btn">Cookie-Einstellungen</button>
|
||
</div>
|
||
<div class="footer-text">
|
||
<p>© 2024 NinjaCross. Alle Rechte vorbehalten.</p>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
|
||
<!-- Application JavaScript -->
|
||
<script src="/js/cookie-consent.js"></script>
|
||
<script src="/js/admin-dashboard.js"></script>
|
||
</body>
|
||
</html>
|