v2026.04.24 – Web-Update, Etikettendruck, Mahn-Vorlagen & Gastschüler
Sammel-Release für alle Änderungen vom 14.04. – 24.04.2026 (Scholar-Versionen 2026.04.14-000 bis 2026.04.24-001 und Elternportal-Versionen 2026.04.14-001 bis 2026.04.24-001).
Scholar (v2026.04.24-001)
Update-System – komplette Überarbeitung
- Vollautomatisches Web-Update mit Admin-Bypass – Signiertes Cookie (
scholar_update_bypass, HMAC-SHA256, 60 min TTL) lässt den initiierenden Admin während des Updates durch den Wartungsmodus durch - Update-Fortschrittsanzeige auf der Lizenz-Seite – Live-Polling alle 3 Sekunden, Fortschrittsbalken, Schritt-für-Schritt-Liste, Farbcodierung (aktiv/abgeschlossen/fehlgeschlagen) und Fehlermeldung
- 503-Wartungsseite zeigt Live-Update-Fortschritt – Eigener
/update-progress-Endpoint, Heartbeat-Anzeige, automatischer Reload nach Wartungsmodus-Ende, 3 s Polling-Intervall - Force-Unlock-Button als Notfall-Recovery – Prozess-Kill, Lock entfernen, Wartungsmodus deaktivieren – sichtbar bei Fehler oder über 5 min ohne Heartbeat
- Graceful-Update-UI im Lizenz-Menü – Direkter Update-Button durch
AdminUpdateControlersetzt; Updates werden geplant, alle angemeldeten Benutzer erhalten einen Countdown-Hinweis mit Zeit zum Speichern - Update-System auf CRM-Server umgestellt –
crm.scholar.schulestattentwurf.io, Lizenzschlüssel- bzw. Token-basierter Download, SHA256-Checksum-Prüfung, SSL-Verify wieder aktiv - Lizenz-Key DB-first –
UpdateApplicationliest Lizenz-Key und Update-URL primär aus derconfigs-Tabelle; Fallback-Kette: DB →config/services→.env - Notfall-Bootstrap-Skript –
emergency_update_bootstrap.shfür festgefahrene Update-Mechanismen; neues Flagapp:update --skip-downloadnutzt eine bereits vorhandenestorage/app/update.zipund umgeht das Versions-Gate - Stündlicher Update-Check sendet Lizenz-Key + Domain-Header – CRM kann gruppenspezifische Versionen ausliefern
- Robusterer Update-Prozess – ZIP-Download via HTTP-Streaming statt RAM, leere ZIP wird früh erkannt,
temp_update-Verzeichnis automatisch bereinigt, veraltete Lock-Dateien (>30 min) werden entfernt,php -d memory_limit=-1 - Permission
run-updatefürPOST /updatezusätzlich erforderlich
Lernmittel & Bibliothek
- Editierbare Mahn-E-Mail-Vorlagen – Bibliothekare bearbeiten Stufe 1/2/3 unter
/lib/loans/reminder-templates. Platzhalter-Tags als Pills mit Drag & Drop, Live-Preview, „Auf Standard zurücksetzen". Neue Tabelleemail_templates, generischerEmailTemplateRenderer(Mustache-Style, kein Blade-Code-Exec) - Gesamtliste beliebtester Bücher – Neue Seite
/lib/scanner/popular-booksmit Suche, Medienart-Filter, Sortierung (Ausleihzahl / Exemplare / Titel / Jahr / Medienart) und Pagination - Exemplar-Tabelle – Bulk-Löschen per Checkbox, inline editierbarer Status-Dropdown (AJAX), neues Bemerkungsfeld pro Exemplar, Echtzeit-Barcode-Suche, Hover blendet andere Barcodes aus (Scanner liest nur den aktiven), Inventarnummer unter jedem Barcode
- Zebra ZT220 Etikettendruck – ZPL-Label (57 mm × 32 mm, 203 dpi) mit Titel, Barcode und ISBN direkt aus der Exemplar-Erfassung über IPP. Druckerkonfiguration (IP + CUPS-Queue) in EP-Einstellungen pflegbar; nachträglicher Druck per POST-Route;
label_printed_at-Feld zur Nachverfolgung - Schuljahres-Tracking für Online-Buch-Bestellungen –
school_year_idzuonline_book_ordershinzugefügt; Schuljahr-Umschalter, Verschieben-Modal zwischen Schuljahren, Export berücksichtigt gewähltes Schuljahr; Sync-Command weist neue Einträge automatisch dem aktiven Schuljahr zu - Wartungssound-Fix – Sound auf Kachel-Ansicht spielt nur noch einmal ab (Loop-Attribut entfernt)
Schüler & Klassen
- Klassendurchschnitt + Export – Klassen-Ø auf Übersichtsseite (neue Spalte) und Klassendetail-Seite (Kachel + tfoot); Export der Klassenliste mit Anzahl und Klassen-Ø als PDF und Excel; bestehende PDFs zeigen den Klassen-Ø ebenfalls im Fuß
- Gastschüler-Onboarding mit PDF-Ausgabe – Gastschüler erscheinen auf
/students/with-dates; eigenerGuestStudentOnboardingControllermit Formular, PDF-Download und Passwort-Regenerierung; PDF-Vorlage enthält Herkunftsland, Host-Schüler und gastschüler-spezifische Checkliste - Herkunftsland-Feld für Gastschüler – Länder-Dropdown nach Häufigkeit (AFS/YFU/Rotary), Spalte in Übersicht und Excel-Export
- Gastschüler-Übersicht redesigned – Card-Design, Echtzeit-Suche (Alpine.js), CSV-Export (UTF-8 BOM) und XLSX-Export, „Gastschüler anlegen" im Header
- Barcode-Druck für Gastschüler – ZPL-Etikett an BP730-Drucker, identisch zu regulären Schülern
- Schülerprofil – eingeschränkte Ansicht statt 403 – Lehrkräfte ohne Klassenzuordnung sehen Header (Name, Klasse, Foto, medizinischer Hinweis, Nachteilsausgleich, Klassenlehrer-Info) plus gelben Hinweisbalken statt einer 403-Seite
- Schülerprofil-Berechtigungen – Klassenlehrer/Fachlehrkräfte sehen E-Mail-Felder (iServ/O365) und können Passwörter zurücksetzen; eigenes Passwort und Kiosk-Versand bleiben Admin-only; Klassenlehrer/Fachlehrkräfte werden im Header angezeigt
- Zeugniskonferenz – Verwaltungs-Rolle darf Zeugnisse auch aus inaktiven Schuljahren bearbeiten
- Klassenverwaltung
/users/classes– Klassen-Filter, Nur-Klassenlehrer-Filter, inaktive Benutzer ausgeblendet - Magellan-Import –
class_idwird per Lookup ausclass_number/class_lettergesetzt; Klassenleiter-Übersicht lädt Schüler perclass_idODERclass_number+class_letter, sodass kein Schüler verloren geht - „Noten"-Tab in Schülerdetailseite zu „Zeugnisse" umbenannt
Wartung, Lager & Geräte
- Scan-Warteschlange für Lager- und Wartungsscanner – Barcodes werden gepuffert und sequenziell per AJAX verarbeitet, kein Page-Reload mehr; Status-Overlay zeigt Anzahl ausstehender Scans
- AJAX-Modal für Wartungs-Checklisten – Queue pausiert automatisch bei Geräten mit Checkliste und läuft nach Bestätigung/Abbruch weiter;
DeviceAssignmentController::kachelResponse()undMaintenanceControllerliefern JSON statt klassischem Redirect
Support & Verwaltung
- Support-Statistik-Reset – Neuer Danger-Zone-Card im adminTools › Support-Panel;
POST /admin/support-cases/reset(nur Admin) löscht alleSupportCase-Einträge mit Audit-Log und Confirm-Dialog - Quer-Navigation zwischen Support-Seiten – Sidebar-Partial mit Links zu Neuer Supportfall / Fallübersicht / Statistiken; im adminTools-Panel zusätzlich Quick-Links
- Logs- und Backup-Verwaltung in adminTools mit GFS-Retention
- Logs: Konfigurierbare Retention (Default 7 Tage), Artisan
logs:prune, UI mit Größe/Alter/Lösch-Kandidaten; Live-laravel.logbleibt erhalten - Backups:
BackupRetentionServicemit Grandfather-Father-Son-Strategie (letzte N Stunden + Tage + Monate + Jahre), optional stündliches DB-Backup, tägliche Uhrzeit per UI;backups:pruneläuft automatisch nach jedemsystem:backup - Speicherplatz-Progressbar mit Breakdown Logs/Backups/Frei (60 s Cache)
- Logs: Konfigurierbare Retention (Default 7 Tage), Artisan
- Berechtigungssystem für Küchenreservierung – Neue Spatie-Permissions
approve_kitchen_reservationundinspect_kitchen_reservationersetzen hartcodierte Rollen; bisheriges Verhalten (Admin/Schulleitung/Koordinatoren/Verwaltung) 1:1 erhalten; eigene Kategorie „Küchenreservierung" auf der Benutzer-Edit-Seite
Bugfixes
- AdminUpdateControl crashte nach Updates mit
PropertyNotFoundException [$activeSessionCount]– Computed Methods in reguläre Properties umgebaut, Befüllung inrefreshData()permount()/Action/wire:poll - Fatal Error in
PreventRequestsDuringMaintenance– MethodehasValidBypassCookieüberschrieb unbeabsichtigt die Parent-Methode (Signatur-Konflikt) → inhasValidUpdateBypassCookieumbenannt - Emergency-Bootstrap extrahiert defensiv kritische Dateien (
UpdateApplication.php,PreventRequestsDuringMaintenance.php,UpdateController.php) aus der ZIP bevorapp:updatestartet, damit ein fehlerhaftes Middleware-Update den Recovery-Pfad nicht blockiert - Update-Kopierfehler durch PDO-Deprecation behoben –
error_clear_last()vor@copy(), damiterror_get_last()den tatsächlichen Fehler liefert;bootstrap/cachewird beim Update übersprungen (wird nachartisan optimizeregeneriert) - Blade-Parser-Fehler in
reminder-templates-View (zwei Fixes) –@js()in Alpine-Attributen ersetzt durchdata-*-Attribute +x-on:-Schreibweise;<script>-Block in@verbatim/@endverbatimgewrappt;@json([...])durch@php/json_encodeersetzt - Lizenzschlüssel-Lesepfad – Direktes Lesen aus
.env, wennconfig/services.phpkeinenscholar_update-Eintrag hat; Lizenzschlüssel und Update-URL werden beim Speichern in der UI synchron in die.envgeschrieben - EP-Settings Fremdsprachenwahl – Key-Mismatch
allow_language_vote→show_Language_Votekorrigiert, damit die Einstellung korrekt ans Elternportal übertragen wird - Bearbeiten-Aktion aus Offboarding-Tabelle entfernt (Onboarding-Bearbeitung dort nicht relevant)
EpSyncController– Symfony Process durchArtisan::callersetzt (behebt Windows-Subprocess-Probleme mit MySQL-DLL-Pfaden)lib/loans/index– Null-safe-Operator fürcopy->bookundcopy->exemplarnummer(verhindert Fehler bei gelöschten Exemplaren)adminhome-Sidebar –relative+pb-24, damit die Versionsnummer das Menü nicht überlagert- Composer-Update –
--no-scripts+Artisan::call(package:discover)behebt 1200 s-Timeout durch hängendespost-autoload-dump-Hook auf PHP 8.5
Elternportal (v2026.04.24-001)
Neu
- Latein zur Fremdsprachenwahl hinzugefügt – Neue Option im Wahlformular
- API-Endpoint
/api/language-votesaktiviert – Damit Scholar die Fremdsprachenwahl-Ergebnisse überGET /api/language-votesabholen kann (geschützt viaauth.api/Bearer-Token)
Verbesserungen
- Fremdsprachenwahl – Korrekturen
- Nur Kinder des eingeloggten Elternteils werden angezeigt (statt aller Schüler)
- Nur Schüler der 5. Klasse können abstimmen
- Nur Spanisch und Französisch als Optionen (Englisch entfernt)
- Fehlermeldung bei gleicher Erst- und Zweitwahl auf Deutsch übersetzt
- Welcome-Seite – Logo größer und klarer, Hero-Bereich kompakter, Footer bleibt am Seitenende
Aufräumarbeiten
- Lernmittel-Refactoring – Legacy-Bestellsystem entfernt:
LearningMaterialOrder-Controller,OrderGroupe-Model,OrderRepository - API-Bereinigung – Felder
religionundzweite_fremdspracheausDigitalBookOrderund API-Controller entfernt - Workbook-Order-Views überarbeitet – Alte Bestell-Views (
order,orderAdditional) gelöscht
Security
- Abhängigkeiten auf sichere Versionen aktualisiert
axios^1.12.2 → ^1.15.0 (CVE-2025-62718, Critical)vite^6.2.4 → ^6.4.2 (CVE-2026-39363 High, CVE-2026-39365 Moderate)picomatchauf 4.0.4+ (CVE-2026-33671/72)league/commonmark2.8.0 → 2.8.2 (CVE-2026-33347/30838 Moderate)- Frontend-Assets neu gebaut mit Vite 6.4.2