feat: Einführung neuer API-Endpunkte zur Verwaltung von Benutzereinstellungen und Druckerstatus. Implementierung von Funktionen zur Überprüfung wartender Jobs und zur Aktualisierung aller Drucker. Verbesserung der Benutzeroberfläche durch optimierte Ladeanzeigen und Warnungen für Offline-Drucker. Anpassungen in den Templates zur Unterstützung neuer Funktionen und zur Verbesserung der Benutzererfahrung.

This commit is contained in:
2025-05-27 12:19:03 +02:00
parent cbe1864678
commit e9071c7b57
11 changed files with 1101 additions and 17 deletions

View File

@@ -2,6 +2,12 @@
{% block title %}Einstellungen - MYP Platform{% endblock %}
{% block head %}
{{ super() }}
<!-- CSRF Token für AJAX-Anfragen -->
<meta name="csrf-token" content="{{ csrf_token() }}">
{% endblock %}
{% block content %}
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Header -->
@@ -431,15 +437,21 @@
};
// Einstellungen an den Server senden
const response = await apiCall('/user/update-settings', {
const response = await fetch('/user/update-settings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''
},
body: JSON.stringify(settings)
});
if (response.success) {
const result = await response.json();
if (result.success) {
showFlashMessage('Alle Einstellungen wurden erfolgreich gespeichert', 'success');
} else {
throw new Error(response.message || 'Unbekannter Fehler');
throw new Error(result.error || 'Unbekannter Fehler');
}
} catch (error) {
console.error('Fehler beim Speichern der Einstellungen:', error);
@@ -447,6 +459,58 @@
}
}
// Einstellungen beim Laden der Seite abrufen
async function loadUserSettings() {
try {
const response = await fetch('/api/user/settings');
const result = await response.json();
if (result.success) {
const settings = result.settings;
// Theme-Einstellungen anwenden
if (settings.theme === 'dark') {
localStorage.setItem(STORAGE_KEY, 'true');
document.documentElement.classList.add('dark');
setActiveThemeButton(darkThemeBtn);
} else if (settings.theme === 'light') {
localStorage.setItem(STORAGE_KEY, 'false');
document.documentElement.classList.remove('dark');
setActiveThemeButton(lightThemeBtn);
} else {
localStorage.removeItem(STORAGE_KEY);
setActiveThemeButton(systemThemeBtn);
}
// Weitere Einstellungen anwenden
document.getElementById('reduced-motion').checked = settings.reduced_motion;
document.getElementById('notify-new-jobs').checked = settings.notifications.new_jobs;
document.getElementById('notify-job-updates').checked = settings.notifications.job_updates;
document.getElementById('notify-system').checked = settings.notifications.system;
document.getElementById('notify-email').checked = settings.notifications.email;
document.getElementById('activity-logs').checked = settings.privacy.activity_logs;
document.getElementById('two-factor').checked = settings.privacy.two_factor;
document.getElementById('auto-logout').value = settings.privacy.auto_logout;
// Kontrast-Einstellungen
if (settings.contrast === 'high') {
localStorage.setItem('myp-contrast', 'high');
document.documentElement.classList.add('high-contrast');
setActiveContrastButton(highContrastBtn);
} else {
localStorage.setItem('myp-contrast', 'normal');
document.documentElement.classList.remove('high-contrast');
setActiveContrastButton(normalContrastBtn);
}
}
} catch (error) {
console.error('Fehler beim Laden der Einstellungen:', error);
}
}
// Einstellungen beim Laden der Seite abrufen
loadUserSettings();
// Helper function to show flash messages
function showFlashMessage(message, type = 'info') {
// Use the global toast manager if available