TYPO3 Release 14.3.7
In der Reihe TYPO3 Release-Notizen beleuchten wir regelmäßig die wichtigsten Bug-Fixes/Security-Issues oder wichtigen Änderungen in einem neuen Patchlevel-Release. Diese Releases sind gemäß Roadmap bereits terminiert und erscheinen grob einmal im Monat.
Bugs haben je nach Projekt unterschiedliche Auswirkungen. Was in einem Projekt kritisch ist, kann in einem anderen kaum eine Rolle spielen. Unsere Gewichtung ist daher subjektiv und soll die Relevanz anderer Fixes nicht herabspielen.
Aktuelles Release
Dieses Security-Release behebt zwei Sicherheitslücken für Backend-Benutzer, die zum einen Task-Planer für Systemangriffe nutzen können, oder die AJAX Endpunkte fürt den Lokalisierungswizard.
Weitere Goodies dieses größeren Releases:
- Context Panel ist jetzt frei vergrößerbar!
- Viele Workspace/History-Bugfixes
- Viele Extbase-Fixes (Serialisierung, LazyProxies, Overlays)
- Viele Doctrine DBAL-Fixes
- stdWrap "override" wertet nun "0" korrekt aus
- EXT:form Bugfixes für EXT:solr Kompatibilität
- Goodie: Monorepo hat jetzt auch eine AGENTS.md!
Insgesamt gab es 139 Änderungen.
Sicherheit
- WissenswertDie AJAX-Endpunkte vom Lokalisierungswizard fügen nun genauere Rechteprüfungen durch
- WissenswertDer Task-Planer kann nicht mehr für Symfony CLI Kommandos genutzt werden die die Konfiguration setzen/auslesen
Regression-Bugfixes
TCA / Schema API / Record API
- Record-Objekte können nun direkt an den core:iconForRecord ViewHelper übergeben werden (statt ein Datenbank-Row-Array zu erfordern)
- Die Verwendung von Records im Backend nutzt nun eine einheitliche "Identität" mit wiederverwertbarem Service, um diese Objekte darzustellen (HTML für Icon, Titel, UID).
- Optimierung einiger Sprachabfragen für Datensätze im Backend-Layout-Modul/Datensatzliste für direktere Record API Integration
- Entfernung unnötiger doppelter TCA-Sortierung der TcaSchemaFactory
Site Settings / Site Sets
- Sehr wichtigDie Inhalte des Site-Objekts werden nun im Core-Cache gespeichert. Das bedeutet, nach jeder Änderung an YAML-Dateien muss der Cache nun gelöscht werden. Gut beachten, höheres Regression-Potential!
- Die Site Settings für EXT:felogin und EXT:indexed_search nutzen für die Eingabe von Page-IDs nun das dedizierte Seitenauswahl-Popup statt einer Zahleingabe
- Sites die nur eine Zahl als Identifier benutzen werfen keine Fehlermeldung (PHP Typisierung wandelt Zahlen sonst still von Strings in Integers um)
EXT:form
- WissenswertDie Erzeugung neuer Formulare per Wizard wertet nun die "Blank"-Auswahl korrekt in den Formulareigenschaften (Backend-GUI) aus
- WissenswertWenn im Backend-GUI Fehler im Formular-Editor auftauchen werden diese nun korrekt behandelt und werfen keine JavaScript-Fehler in der Folgebedienung.
- WissenswertDer Service zum Auflösen der aktuellen TypoScript-Konfiguration einer Seite wurde im EXT:form ConfirmationFinisher eigenständig aufgerufen, wodurch es die TypoScript-Isolation/Manipulation konkret im Zusammenhang mit EXT:solr brechen konnte
TypoScript
- Sehr wichtigDie TypoScript stdtWrap-Option "override" wertet eine Zahl "0" nun als richtige Zahl aus und nicht als Ersatz für "false/null". Damit können etwaige bisher als "deaktivierte" Overrides wahrgenommene TypoScript-Definitionen potentiell ungewollt ausgewertet werden - den Einsatz bitte prüfen!
- WissenswertDer Service zum Auflösen der aktuellen TypoScript-Konfiguration einer Seite wurde im ECObject ViewHelper eigenständig aufgerufen, wodurch es die TypoScript-Isolation/Manipulation konkret im Zusammenhang mit EXT:solr brechen konnte
- Bei der Nutzung vom `stdWrap.replacement` werden ungültige reguläre Ausdrücke nun ohne Verarbeitungsfehler am Inhalt durchgeführt
API (Frontend / Extbase)
- WissenswertDer PageRenderer-Kontext des PageErrorHandlers wird nun zurückgesetzt, so dass keine etwaige regulär gesammelten Assets (JS/CSS/...) in der Ausgabe der Fehlerseite erscheinen.
- WissenswertExtbase ObjectStorages können nun wirklich nur Objekte entgegennehmen, um Probleme bei der Deserialisierung bzw. ObjectStorageConversion zu vermeiden.
- WissenswertNicht-verfügbare Datei-Referenzen im Frontend-FileCollector (Dateisammlungen) werfen nun keine PHP-Fehlermeldung mehr
- WissenswertDie `setIgnoreEnableFields()` Extbase-Repository-Methode sorgt nun auch bei Extbase-Overlays dafür, dass dieser Filter berücksichtigt wird (und nun auch versteckte übersetzte Elemente zurückliefern wird, wenn man dies für das Stammelement erwartet!)
- WissenswertExtbase-Relationen können nun auch Enum-backed/JSON Objekte nun verarbeiten, bzw. schlagen auch generell nicht mehr fehl bei zugewiesenen DomainObjectInterface Objekten
- Das Extbase QueryResult kann nun wieder (z.B. in einem Cache) serialisiert werden
- LazyProxy Extbase-Elemente nutzen nun für die `isset` und `get` Zugriffe dieselbe Zugriffslogik
Fluid
- WissenswertDer neue `f:render.text` ViewHelper kann im Backend-Kontext nun richtig funktionieren (relevant für EXT:content_blocks)
- Update auf TYPO3 Fluid 5.3.2 (verbesserte Exception-Meldungen)
EXT:indexed_search
- Sehr wichtigDie Indexierung von externen URLs kann nun auch in geschützten Storages. Instanzen, die solche Inhalte nicht indexiert sehen wollen, müssen die TypoScript-Configuration nun anpassen und `config.index_externals` deaktivieren.
- Vereinfachung des Auslesens von PDF-Seitenzahlen
Backend: UI
- Sehr wichtigDas in v14 eingefügte Context Panel (zum Bearbeiten von Datensätzen in einer art modalem Fenster auf der rechten Seite) kann nun beliebig vergrößert/verkleinert werden, und speichert diese Größe abhängig vom Datensatztypen.
- Die Suchfilter-Eingabebox erhält nun auch ein ARIA-Label und einen Platzhalter
- Das Passwort-Generator für entsprechende TCA-Felder wird nun ausgeblendet, wenn keine PasswordPolicy zuordbar ist
- Das neue Content-Panel kann nun bei Änderungen in Dropdowns, die Felddarstellung beinflussen (z.b. "Plugin-Typ") den Inhalt korrekt neu laden, ohne einen doppelten Warnhinweis für "Ihr Formular enthält Änderungen" anzuzeigen.
- Abstände von Buttons im ImageCropper optimiert
- Die Suche in "SelectMultipleSideBySide" FormEngine Typen kann nun Sonderzeichen von ihren Punkten/Accents befreien, um z.b. bei Eingabe von "parte" auch "parté" zu finden (aber nicht umgekehrt).
Backend: API / Core
- WissenswertPageTSConfig in der "DrawingConfiguration" (z.B. für die Content-Elementlistencontainer) wird nun wieder mit korrekter Syntax ausgelesen (es wurde nicht überall konsistent mit und ohne "." im PHP-Arrayzugriff gearbeitet)
- WissenswertFAL: Es werden nun immer alle "sys_file" Datenbankspalten ausgelesen, statt eines bisher beschränkten Sets (`FileIndexRepository::FIELDS`)
- WissenswertDer Datenbank-Vergleich/Migrator kann nun virtuelle "Views" von Tabellen ignorieren
- WissenswertEine neue Datenbank-Indexspalte für verbesserte Lookups von Sprachvarianten von Datensätzen wurde eingefügt. Dadurch werden im DB Compare Modul diverse (optionale) Datenbankänderungen ausgewiesen.
- WissenswertDie `CategoryBasedFileCollection` wertet nun die aktuelle Frontendsprache als Beschränkung für Datensätze aus
- WissenswertDas kombinierte Editieren von einzelnen Spalten einer übersetzten Seite in der Datensatz-Ansicht ist nun wieder möglich
- WissenswertDie Sortierung von IRRE Kindelementen bei Lokalisierung forciert nun keine Umsortierung der Elemente mehr, sondern fügt neue Übersetzungen an korrekter Position ein
- Die Suchfilter-Eingabebox für "SelectTree"-Elemente (z.b. Kategorien) kann nun auch mit gewissen Sonderzeichen umgehen, die bislang eine Fehlermeldung für reguläre Ausdrücke in JavaScript erzeugten.
- Die neue System Resource API kann nun auch Metadaten durchschleifen, die bei Bildern relevant sind (Bildgröße) und auch erkennen, ob eine Resource überhaupt ein Bild ist.
- Der "ErrorPageController" kann nun auch im Failsafe-Container-Context (Install-Tool) eingesetzt werden
- Der PSR-14 Event `AfterPageTreeItemsPreparedEvent` enthält nun mehr Meta-Daten, konkret die Suchparameter. Damit müssen diese nicht mehr von Consumern manuell aus dem `$request` Objekt gepopelt werden.
- Datenbanknamen mit Punkt (".") im Namen erzeugen keine falsche Fehlermeldung mehr und können genutzt werden
- Performance-Optimierung für Datenbankabfragen bei der Index-Erzeugung für Relationen beim Speichern eines Datensatzes
- Das optional setzbare eigene "backend Logo" wird nun via System Resource API korrekt aufgelöst und führt zu meiner Deprecation-Lognachricht mehr.
- Das Erzeugen von IRRE-Kindern bei einem ungespeicherten Datensatz ist nun möglich (indem der Datensatz vorher persistiert wird)
- Die PageRouter API kann nun beim Auflösen von Sites ohne Sprachoptionen einen Fallback ohne PHP-Fehlermeldung nutzen
- Es werden nun alle PSR-3 LogLevel-Typen im TimeTracker verarbeitet
- Bei der Spaltenauswahl von Tabellen können die Sonderfelder "deleted", "l10n_source" und "l18n_diffsource" nicht mehr gewählt werden
- Checkbox-Gruppen in FormEngine werden nun mit einem "role=group" ausgezeichnet für A11y.
- Das neue TCA "JsonElement" behält Unicode-Zeichensequenzen nun bei (statt sie zwingend zu normalisieren)
- Der Server-Check im Install-Tool kann nun auch etwaige durchgereichte HTTP Auth Zugangsdaten durchreichen
- Die Eigenschaft "pages.cache_tags" wurde in der TCA-Definition so angepasst, dass nur die wirklich erlaubten Zeichen zugelassen werden, die später auch ausgewertet werden können.
- Für SQLite werden die JSON/UUID Type Mappings nun genauer deklariert
- Verbesserung des Dashboard-Widget DTOs für statische Code-Analyse
- (Ungültige) Datenbank-Indexe für nicht vorhandene Spalten werden nun übersprungen (also auch für SQLite, da MySQL/PGSQL dies intern abgefangen haben)
- "Skip foreign table query for transOrigPointerField on default language". Wer mir das ein einem Satz auf deutsch erklären kann kriegt von mir einen Kaffee ausgegeben. First come, first serve.
- Die f:debug Methode verwendet eine vereinheitlichte Form zur Prüfung von "blacklisted" Klassen
- Einträge die Relationen via DataHandler erzeugen in Kombination mit Workspaces, werten deren Attribute nun korrekt aus um fehlende als "0" Relation in die Datenbank zu schreiben anstelle eines leeren Strings.
- Auch Crop Definitionen ohne Titel können nun im Backend ohne Fehler definiert werden
- Nutzung von SQL Abfrage-Chunking/Splitting für Referenz-Index Erzeugung, um Speicherprobleme zu vermeiden bei besonders großen Datensätzen
- Die AJAX Request API (TypeScript) kann nun auch das HTTP `PATCH` Verb nutzen
- Der ExtractorService für Metadaten entfernt nun leere Werte nicht mehr vollständig, so dass Extensions darauf Einfluss nehmen können
- Der `ResoureConsistencyService` wird nun mit Symfony DI auto-configured
- Das `ProcessedFile` Objekt resettet nun ein "deleted" Flag wenn eine gelöschte Dateivariante (Cropping/Preview etc.) weiterverarbeitet wird
- Das MFA-Loginpopup setzt nun korrekte Redirects für den Fall das nicht der Login sondern eine andere Aktion abgefangen wird
- Der Datenbank-Analyser im Install-Tool meldet keine Fehlermeldung mehr bei nicht mehr genutzten Tabellen
Backend: CLI
- Die CLI Kommandos "setup" und "language:update" erhalten Autovervollständigung für einige Optionen
- Das CLI Kommando "impexp:export" erhält Autovervollständigung für einige Optionen
- Die CLI Kommandos "cache:flush", "cache:warmup", und SiteShowCommand erhalten Autovervollständigung für einige Optionen
PHP-Typfehler
- Der `PageContentFetchingProcessor` (von der Record API) vermeidet nun Typfehler bei nicht auflösbaren PageLayouts
- Vermeidung einer Fehlermeldung für rootlevel-Elemente in der Breadcrumb
Backend: FormEngine - Page Wizard
- Das Einfügen von Datensätzen im neuen Page-Wizard (z.B. bei "Shortcuts") wird nun wieder korrekt durchgeführt
- Wenn das Einfügen eines neune Datensatzes im Page-Wizard fehlschlug wird nun ein "Close"-Button im Modal angezeigt.
Backend: Extension Manager
Backend: EXT:workspaces / History
- WissenswertVermeidung einer unendlichen Rekursion vom Auflösen von Workspace-Datensatz-Abhängigkeiten (z.B. in Flexforms)
- WissenswertDer "Uniqueness"-TCA-Check von workspace-fähigen Records hat Einträge nicht korrekt ausgewertet
- Die Historie von Einträgen bei deren Veröffentlichung wird nur noch umgeschrieben bei übereinstimmender Workspace-ID
- Der Besitzer einer Datensatz-History-Änderung wird nun abhängig vom Frontend/Backend-Kontext ausgewertet
- Die History-Änderungen beim Verschieben von Datensätzen wird nun korrekt (nicht mehr als "deleted") getrackt
- History-Änderungen werden nun korrekt intern sortiert, wenn es mehrere "übereinander" liegende Datensätze gibt
- Vereinheitlichung der Hisotry CorrelationId
- Datumsangaben in den Workspace-Grids werden nun in der ICU-Syntax erzeugt (keine Änderung in der Darstellung, nur API-intern)
- Der Workspace-Indikator wird nun auch bei übersetzten Seiten richtig angezeigt
- Entfernung von Überbleibseln der alten "pid=-1" Logik von Workspace-Datensätzen
- Exceptions werden nun besser an den Client durchgereicht, so dass sie im TYPO3 Backend als Notification/Toast ausgegeben werden können
- Der "Element gehört einer Stage an"-Infoblock für Kindelemente eines Datensatzes wird nun nur noch einmalig zugewiesen/verarbeitet.
- Auch der ExtbaseHistoryWriter und weitere geben die CorrelationId nun korrekt weiter
- Kleine Bugfixsammlung für die History: Die Anzeige-Darstellung hat Duplikate nicht korrekt ausgewertet, Rollback nutzte einen instabilen GET-Aufruf, Die Verschiebungs/Änderungs-Badges erhalten etwas mehr Info
- Zusätzliche Spalten in der Workspace-Datensatzliste werden nun wieder angezeigt
- something something rollback bei Datensatz-Verschiebung
Backend: EXT:scheduler
- Der Task-Planer prüft beim direkten Ausführen eines Tasks (via CLI) etwaige bereits vorhande Informationen, statt mehrfach Tasks zu deserialisieren.
- Etwaige CLI-Formatierungen von Symfony Commands im Planer werden nun im Backend UI nicht mehr angezeigt
Backend EXT:linkvalidator
- Der LinkAnalyser wertet nun Sprachvarianten und Standardsprachen besser aus
- Nutzung besserer SQL-Indexe für Datenbankzugriffe der Linkvalidator-Datensätze
Backend EXT:impexp
EXT:redirects
Strukturelles
- WissenswertDie letzte Ausführung des "language:update" Kommandos wird nun nicht mehr in der Registry, sondern einer eigenständigen JSON-Datei in `var/labels/language_pack_states.json` gespeichert. Ein Migrationswizard dafür steht bereit.
- Anpassung der Unit-Tests, so dass temporäre Dateien/Verzeichnisse immer einen eigenständig Präfix erhalten pro Test
- runTests.sh läuft nun auch mit GIT worktress (für agent-basierte Tasks und TYPO3-Core-Entwicklung relevant)
- Wenn "ini_set" via PHP verboten ist, wird dies im Install-Tool nun ggf. als Warnung ausgewertet
Dependencies
- Doctrine DBAL wird auf 4.4.4 als Minimum angehoben
- Ermöglichung der Guzzle v8 Dependency
- Nightlies werden nun auch mit PHP 8.6 bereits getestet
