'use strict'; var Admin = { render: function() { var el = document.getElementById('content'); if (!App.currentUser || !App.currentUser.is_admin) { el.textContent = 'Kein Zugriff'; return; } el.textContent = 'Lade Admin...'; var self = this; API.get('/admin/users').then(function(data) { self.renderPanel(el, data.users); }) .catch(function(e) { el.textContent = e.message; }); }, renderPanel: function(el, users) { var h = ''; h += '

Benutzer

'; h += ''; users.forEach(function(u) { h += ''; h += ''; h += ''; }); h += '
IDBenutzerNameAdminErstellt
' + u.id + '' + Markdown.esc(u.username) + '' + Markdown.esc(u.display_name) + '' + (u.is_admin ? 'Ja' : 'Nein') + '' + new Date(u.created_at).toLocaleDateString('de-DE') + '' + (u.id !== App.currentUser.id ? '' : '') + '
'; h += '

Neuer Benutzer

'; h += '
'; h += '

'; h += '

'; h += '

'; h += '
'; h += '
'; h += '
'; h += '

Content

'; h += '

Markdown-Dateien neu einlesen und Datenbank aktualisieren.

'; h += ''; h += '
'; el.innerHTML = h; var self = this; el.querySelectorAll('[data-del]').forEach(function(btn) { btn.addEventListener('click', function() { self.deleteUser(parseInt(btn.dataset.del), btn.dataset.name); }); }); document.getElementById('add-user-form').addEventListener('submit', function(e) { e.preventDefault(); self.addUser(); }); document.getElementById('import-btn').addEventListener('click', function() { self.importContent(); }); }, addUser: function() { var msg = document.getElementById('add-user-msg'); var self = this; API.post('/admin/users', { username: document.getElementById('new-username').value.trim(), display_name: document.getElementById('new-displayname').value.trim(), password: document.getElementById('new-password').value, is_admin: document.getElementById('new-is-admin').checked }).then(function() { msg.textContent = 'Benutzer erstellt!'; msg.style.color = 'var(--green)'; self.render(); }).catch(function(e) { msg.textContent = e.message; msg.style.color = 'var(--red)'; }); }, deleteUser: function(id, name) { if (!confirm('Benutzer "' + name + '" wirklich entfernen? Lernfortschritt geht verloren.')) return; var self = this; API.del('/admin/users/' + id).then(function() { self.render(); }) .catch(function(e) { alert('Fehler: ' + e.message); }); }, importContent: function() { var msg = document.getElementById('import-msg'); msg.textContent = 'Importiere...'; msg.style.color = 'var(--text-muted)'; API.post('/admin/import').then(function(data) { var s = data.stats; msg.textContent = 'Fertig! ' + s.decks + ' Decks, ' + s.cards + ' Karten, ' + s.tutorials + ' Tutorials, ' + s.cheatsheets + ' Cheat Sheets importiert.'; msg.style.color = 'var(--green)'; }).catch(function(e) { msg.textContent = e.message; msg.style.color = 'var(--red)'; }); } };