$(document).ready(function() { // Auth check $.get('/api/auth/me') .done(function(user) { if(user.role !== 'admin') { alert('Kein Zugriff!'); window.location.href = '/'; } else { loadUsers(); loadFolders(); $('body').removeClass('is-preload'); } }) .fail(function() { window.location.href = '/'; }); // Logout $('#logout-btn').click(function(e) { e.preventDefault(); $.post('/api/auth/logout').done(function() { window.location.href = '/'; }); }); // ==================== NUTZER ==================== function loadUsers() { $.get('/api/admin/users').done(function(users) { $('#users-tbody').empty(); $('#user-select').html(''); users.forEach(function(u) { var badge = $('').addClass('badge badge-' + u.role).text(u.role); var created = u.created_at ? new Date(u.created_at).toLocaleDateString('de-DE') : '-'; var info = created; if (u.role === 'client' && u.expires_at) { var expDate = new Date(u.expires_at).toLocaleDateString('de-DE'); if (u.expired) { badge = $('').addClass('badge badge-expired').text('abgelaufen'); info = 'Abgelaufen: ' + expDate; } else { info = 'Bis: ' + expDate; } } var row = $(''); var userCell = $('').text(u.username + ' ').append(badge); var actions = $(''); $('') .data('user-id', u.id) .data('username', u.username) .appendTo(actions); $('') .data('user-id', u.id) .data('username', u.username) .appendTo(actions); row.append($('').text(u.id)); row.append(userCell); row.append($('').text(u.role)); row.append($('').text(info)); row.append(actions); $('#users-tbody').append(row); // Dropdown fuer Ordner-Zuweisung (nur non-admin) if (u.role !== 'admin') { $('#user-select').append($('').val(u.id).text(u.username + ' (' + u.role + ')')); } }); }); } // Nutzer erstellen $('#create-user-form').submit(function(e) { e.preventDefault(); $.post('/api/admin/users', { username: $('#new-username').val(), password: $('#new-password').val(), role: $('#new-role').val() }).done(function() { $('#new-username').val(''); $('#new-password').val(''); loadUsers(); }).fail(function(err) { alert('Fehler: ' + (err.responseJSON ? err.responseJSON.error : 'Unbekannt')); }); }); // Nutzer loeschen function deleteUser(id, name) { if (confirm('Nutzer "' + name + '" wirklich loeschen?')) { $.ajax({ url: '/api/admin/users/' + id, type: 'DELETE' }) .done(loadUsers) .fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); } } $('#users-tbody').on('click', '.user-delete', function() { deleteUser($(this).data('user-id'), $(this).data('username')); }); // Passwort aendern (Admin setzt fuer anderen User) function changePassword(id, name) { var newPw = prompt('Neues Passwort fuer "' + name + '":'); if (!newPw) return; $.ajax({ url: '/api/admin/users/' + id + '/password', type: 'PUT', contentType: 'application/json', data: JSON.stringify({ new_password: newPw }) }).done(function() { alert('Passwort geaendert!'); }).fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); } $('#users-tbody').on('click', '.user-password', function() { changePassword($(this).data('user-id'), $(this).data('username')); }); // ==================== ORDNER-ZUWEISUNG ==================== function loadFolders() { $.get('/api/admin/folders').done(function(folders) { $('#folder-checkboxes').empty(); if (folders.length === 0) { $('#folder-checkboxes').html('

Keine Unterordner in Websitebilder gefunden. Erstelle Ordner in Nextcloud.

'); return; } folders.forEach(function(f) { var wrapper = $('
'); var label = $(''); $('').val(f).appendTo(label); label.append(' '); $('').appendTo(label); label.append(' ' + f); wrapper.append(label); $('#folder-checkboxes').append(wrapper); }); }); } // Bei User-Auswahl: zugewiesene Ordner laden $('#user-select').change(function() { var uid = $(this).val(); $('.folder-cb').prop('checked', false); if (!uid) return; $.get('/api/admin/assign?user_id=' + uid).done(function(assignedFolders) { assignedFolders.forEach(function(f) { $('.folder-cb').filter(function() { return $(this).val() === f; }).prop('checked', true); }); }); }); // Zuweisung speichern $('#save-assignments').click(function() { var uid = $('#user-select').val(); if (!uid) return alert('Bitte Nutzer waehlen'); var selected = []; $('.folder-cb:checked').each(function() { selected.push($(this).val()); }); $.ajax({ url: '/api/admin/assign', type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: uid, folders: selected }) }).done(function() { $('#assign-status').text('Gespeichert!').fadeIn().delay(2000).fadeOut(); }).fail(function() { alert('Fehler beim Speichern'); }); }); // ==================== EIGENES PASSWORT ==================== $('#admin-pw-form').submit(function(e) { e.preventDefault(); $.post('/api/auth/change-password', { old_password: $('#admin-pw-old').val(), new_password: $('#admin-pw-new').val() }).done(function() { alert('Passwort geaendert!'); $('#admin-pw-old, #admin-pw-new').val(''); }).fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); }); });