""" Admin Stats Component - Statistics & GDPR Export """ def get_admin_stats_css() -> str: """CSS für Statistics (inkludiert in admin_panel.css)""" return "" def get_admin_stats_html() -> str: """HTML für Statistics (inkludiert in admin_panel.html)""" return "" def get_admin_stats_js() -> str: """JavaScript für Statistics & GDPR Export zurückgeben""" return """ let dataCategories = []; async function loadAdminStats() { const container = document.getElementById('admin-stats-container'); container.innerHTML = '
Lade Statistiken & DSGVO-Informationen...
'; try { // Lade Datenkategorien const catRes = await fetch('/api/consent/privacy/data-categories'); if (catRes.ok) { const catData = await catRes.json(); dataCategories = catData.categories || []; } renderStatsPanel(); } catch(e) { container.innerHTML = '
Fehler beim Laden: ' + e.message + '
'; } } function renderStatsPanel() { const container = document.getElementById('admin-stats-container'); // Kategorisiere Daten const essential = dataCategories.filter(c => c.is_essential); const optional = dataCategories.filter(c => !c.is_essential); const html = `

📋 DSGVO-Datenauskunft (Art. 15)

Exportieren Sie alle personenbezogenen Daten eines Nutzers als PDF-Dokument. Dies erfüllt die Anforderungen der DSGVO Art. 15 (Auskunftsrecht).

🗄️ Datenkategorien & Löschfristen

Essentielle Daten (Pflicht für Betrieb)

${essential.map(cat => ` `).join('')}
Kategorie Beschreibung Löschfrist Rechtsgrundlage
${cat.name_de} ${cat.description_de} ${cat.retention_period} ${cat.legal_basis}

Optionale Daten (nur bei Einwilligung)

${optional.map(cat => ` `).join('')}
Kategorie Beschreibung Cookie-Kategorie Löschfrist
${cat.name_de} ${cat.description_de} ${cat.cookie_category || '-'} ${cat.retention_period}
${dataCategories.length}
Datenkategorien
${essential.length}
Essentiell
${optional.length}
Optional (Opt-in)
`; container.innerHTML = html; } async function exportUserDataPdf() { const userIdInput = document.getElementById('gdpr-export-user-id'); const statusDiv = document.getElementById('gdpr-export-status'); const userId = userIdInput?.value?.trim(); statusDiv.innerHTML = 'Generiere PDF...'; try { let url = '/api/consent/privacy/export-pdf'; // Wenn eine User-ID angegeben wurde, verwende den Admin-Endpoint if (userId) { url = `/api/consent/admin/privacy/export-pdf/${userId}`; } const res = await fetch(url, { method: 'POST' }); if (!res.ok) { const error = await res.json(); throw new Error(error.detail?.message || error.detail || 'Export fehlgeschlagen'); } // PDF herunterladen const blob = await res.blob(); const downloadUrl = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = downloadUrl; a.download = userId ? `datenauskunft_${userId.slice(0,8)}.pdf` : 'breakpilot_datenauskunft.pdf'; document.body.appendChild(a); a.click(); document.body.removeChild(a); window.URL.revokeObjectURL(downloadUrl); statusDiv.innerHTML = '✓ PDF erfolgreich generiert!'; } catch(e) { statusDiv.innerHTML = `Fehler: ${e.message}`; } } async function previewUserDataHtml() { const statusDiv = document.getElementById('gdpr-export-status'); statusDiv.innerHTML = 'Lade Vorschau...'; try { const res = await fetch('/api/consent/privacy/export-html'); if (!res.ok) { throw new Error('Vorschau konnte nicht geladen werden'); } const html = await res.text(); // In neuem Tab öffnen const win = window.open('', '_blank'); win.document.write(html); win.document.close(); statusDiv.innerHTML = '✓ Vorschau in neuem Tab geöffnet'; } catch(e) { statusDiv.innerHTML = `Fehler: ${e.message}`; } } """