Termin aus Mail, Rollen & Rechte, Abwesenheiten, Glas-Darstellung und Pi-Betrieb

- Termin aus Mail: Mailtext oder .eml per Drag & Drop/Strg+V auf Terminplan
  oder Aufgaben, KI schlägt Aufgaben vor, Prüfung im Aufgaben-Panel; neues
  Notizfeld je Aufgabe (plan_todos.notiz)
- Terminplan: Meilensteine ohne Aufgabenbezug je in eigener Zeile,
  "+ Neu"-Menü klappt neben schmaler Seitenleiste nach rechts, Leistungsphasen
- Rollen & Rechte, Abwesenheiten-Seite, Benachrichtigungen, Rundgang
- Glas-Darstellung, Logo als Favicon
- Pi-Betrieb: PDF-Arbeit im Kindprozess, Wächter, Einrichtungs- und
  Prüfskript inkl. WLAN-Wächter

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
erikandClaude Opus 5.5 committed 2026-10-29 14:16:52 +01:00
1 parent f4fb3c550b
commit b7e0bd0d92
56 files changed
+12265 -2974

No files matched your search

+14 -1
View File
@@ -52,7 +52,12 @@ function renderSettingsAccount(){
<span id="settingsEmailError" class="settings-warn" hidden></span>
</span>
</div>`
+ row('Rolle', currentUser.role === 'admin' ? 'Administrator' : 'Mitglied')
+ row('Rolle', currentUser.rolleName || currentUser.role)
// Glas-Darstellung (public/glas.css) je Browser abschaltbar — etwa auf
// einem langsamen Rechner, dem die Unschärfe zu viel Leistung kostet.
+ row('Darstellung', `<label class="settings-glas-schalter"><input type="checkbox" id="settingsGlas"
${document.documentElement.classList.contains('glas') ? 'checked' : ''} onchange="setGlasDarstellung(this.checked)">
Glas-Darstellung (Transparenz und Unschärfe)</label>`)
// Ohne Personen-Zuordnung bleibt „Meine Aufgaben" leer, weil die Aufgaben
// über plan_todo_assignees.person_id zugeordnet werden (siehe
// GET /my-dashboard). Deshalb steht der Hinweis hier und nicht nur dort.
@@ -64,6 +69,14 @@ function renderSettingsAccount(){
: '');
}
// setGlasDarstellung: schaltet die Glas-Darstellung in diesem Browser ein
// oder aus (Klasse html.glas, gemerkt in localStorage). Wirkt sofort, ohne
// Neuladen. Parameter: an (Boolean). Keine Rückgabe.
function setGlasDarstellung(an){
document.documentElement.classList.toggle('glas', !!an);
try { localStorage.setItem('projuebersicht-glas', an ? 'an' : 'aus'); } catch(e){ /* nur Komfort */ }
}
// submitEmailChange: schickt die eigene E-Mail-Adresse an POST /change-email.
// Anders als der Passwortwechsel braucht es kein aktuelles Passwort zur
// Bestätigung — die Route ist ohnehin an die eigene, per Session