'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 += '
| ID | Benutzer | Name | Admin | Erstellt | |
';
users.forEach(function(u) {
h += '| ' + u.id + ' | ' + Markdown.esc(u.username) + ' | ' + Markdown.esc(u.display_name) + ' | ';
h += '' + (u.is_admin ? 'Ja' : 'Nein') + ' | ' + new Date(u.created_at).toLocaleDateString('de-DE') + ' | ';
h += '' + (u.id !== App.currentUser.id ? '' : '') + ' |
';
});
h += '
';
h += '
Neuer Benutzer
';
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)';
});
}
};