# 12 LTS 2023-04-25 * Bug #82024: no more non breaking space in default editor * Task #87419: Deprecate functionality used to add inline styles & scripts * Feature #87421: Integrate CSP reporting endpoint * Feature #87423: Integrate CSP management module * Task #88158: [RESEARCH] Replace moment with Luxon * Feature #89917: Set new page access group to parent page access group * Feature #92231: Add some more error messages to linkvalidator * Feature #92861: Introduce "minlength" to input fields * Feature #93182: Configurable compressed file extension * Feature #93832: Allow arbitrary attributes on script tag * Feature #94117: Register extbase type converters as services * Task #94246: Reorganize sudo mode handling * Feature #94274: PHP 7.4 preloading * Feature #94600: Use Monolog for injected logging services * Task #95898: Extend build process to monitor Content Security Policy violations * Task #96123: Remove legacy Element Browser hooks * Task #96173: Remove hideIfNotTranslated and hideIfDefaultLanguage methods * Epic #96323: TYPO3 Backend: ES6 Module (ESM) support * Task #96327: Update yarn to v3.x * Feature #96688: Use PHP 8 Attributes for Extbase Annotations * Task #96690: Add PHPStan plugins for PHPUnit and Prophecay * Bug #96713: Fix incorrect Prophecy usages * Bug #96734: Fix PHPStan issues in StagesService * Bug #96766: Misleading copy'n'paste error in a comment in AbstractViewHelper * Bug #96929: TCA / TCA overrides with variable leaks * Task #97015: Extract eval=required in a separate bool property * Task #97020: Fix the return type annotation for GeneralUtility::getIndpEnv * Task #97057: Deprecate RequireJS related APIs * Task #97066: Add a replacement for FormEngine requireJsModules array * Task #97067: Provide ES6 replacement for TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent::getModules * Task #97068: Generate a random importmap nonce for CSP compliance * Task #97163: Update to PHPStan 1.4.9 * Epic #97210: Core types added * Task #97376: Add a code of conduct document * Task #97385: Fix type annotation of HistoryService::differencesObject * Task #97396: Annotate nullable properties in workspaces as such * Task #97397: Update PHPStan * Task #97402: Update PHPUnit & friends * Bug #97407: Fix an incorrect type annotation in the DataHandler * Task #97409: Drop/comment pointless checks in GridDataService * Task #97410: Use more native types for the admin panel controllers * Bug #97413: Fix the generics annotations of makeInstance * Bug #97417: ObjectStorage::current and ::getInfo crash on empty storages * Epic #97419: Reduce PHPStan warnings in workspaces * Bug #97420: Fix type errors in the workspaces data handler hook * Task #97421: Simplify a condition in workspaces DataHandlerHook * Bug #97422: Fix fetching the UID for workspaces in the DataHandlerHook * Bug #97423: WorkspaceRecord cannot be XCLASSed * Bug #97424: Type warnings in CommandMap * Bug #97425: Type warning in workspaces ActionHandler * Task #97426: Improve the type annotations of the setup extension * Task #97435: Properly deprecate the check for the SiteLanguageAwareTrait * Task #97476: Update to PHPStan 1.16.0 * Feature #97480: lowlevel: List of Symfony Expression Language provider * Bug #97554: Invalid array access in ObjectStorage::offsetGet for value that is not in the storage * Task #97572: Make ClassNamingUtility strict * Task #97574: Ignore PHPStan warnings in tests for contract violations for GU::makeInstance * Task #97578: Mark GeneralUtility as strict * Bug #97579: Avoid calling string functions with non-strings in GeneralUtility * Bug #97580: Always call GU::intExplode with a string parameter * Bug #97582: Always call GU::intExplode with a string parameter in EXT:core * Bug #97583: Always call GU::intExplode with a string parameter in Extbase * Bug #97584: Always call GU::intExplode with a string parameter in EXT:frontend * Bug #97630: Mark nullable properties in EXT:core as such * Task #97631: Use more ::class notation in tests * Bug #97634: Stop mocking nonexistent classes * Task #97677: Update the testing framework and regenerate the PHPStan baseline * Task #97678: Update PHPStan * Bug #97687: Align field declarations in tests with the latest TF changes * Task #97702: Remove more redundant type annotations from tests * Task #97703: Mark GU::tempname as returning a non-empty string * Task #97706: Update PHPStan to 1.7.3 * Task #97711: Improve the return type annotation of ListUtility::resolveSpecialFolderNames * Task #97736: Remove PhpStorm meta configuration for getAccessibleMock etc. * Bug #97756: Test failure in NormalizeCommandTest with PHP 8.1.7 * Task #97820: Improve type annotations in Extbase Repository * Task #97823: Update PHPStan * Task #97858: Improve type annotations regarding storage folder names * Task #97859: Annotate that methods from InaccessibleFolder never return * Task #97892: Add native types to the GeneralUtility properties * Task #97893: Improve type annotation for GU::setIndpEnv * Feature #97922: Use combined field for base and path in sys_filemounts * Task #97955: Also run the nightly PHPStan builds with highest dependencies * Task #97956: Bump the Doctrine dependencies * Task #97959: Update PHPStan & friends * Bug #97960: Always call GU::trimExplode with a string parameter in EXT:extbase and EXT:fluid * Feature #98130: Allow deprecation of icons in extensions * Task #98133: Use more native types in the blog example * Task #98246: Update PHPStan * Bug #98247: runTests.sh -s clean also deletes .cache/.npmrc * Feature #98316: Allow custom services.yaml per installation * Task #98320: [UX] - Add label text to various buttons in docheader * Task #98334: Mark config.disableImgBorderAttr as removed * Bug #98346: GeneralUtility::flushInternalRuntimeCaches should also flush the class name cache * Feature #98348: Utilize modal for backend search * Feature #98373: Reactions - Incoming WebHooks for TYPO3 * Feature #98394: Allow Extension to prevent downloading of language packs * Task #98415: Allow arbitrary number of arguments for logicalAnd / logicalOr * Task #98476: Allow BE users to click anywhere in the textarea to activate input area * Task #98491: Remove outdated t3editor requirejs configuration * Task #98496: Remove outdated ckeditor requirejs configuration * Task #98512: Improve type annotations for ExpressionBuilder::literal * Task #98517: Show username in password recovery email * Task #98519: Uninitialized properties in DebuggerUtility * Task #98524: Update to PHPStan 1.8.7 * Bug #98526: Allow import of TypoScript files from inside a TypoScript hierarchy again * Bug #98527: Site module template requires EXT:extensionmanager * Task #98541: Update to PHPStan 1.8.8 * Bug #98606: Link text in typoLink_PostProc hook * Bug #98619: Not possible to click the new CE button if CE is current active target in URL * Task #98621: Use PageTreeRepository consistently * Task #98645: Optimize default dashboard content and layout * Bug #98717: Changes in RTE are lost when closing content element form * Task #98913: Update to PHPStan 1.8.11 * Task #98937: Clean up types in ResourceStorageTest * Feature #98952: Use wildcard in TCEMAIN.clearCacheCmd = cacheTag:tag * Bug #98964: Menu object caching creates too many records resulting in huge cache_hash table * Task #98986: Upgrade to PHPStan 1.9.0 * Task #99045: Update to PHPStan 1.9.2 * Feature #99070: Move the NoopEventDispatcher available to extensions * Task #99109: Annotate ActionController methods that never return * Task #99110: Make the action name in ActionController redirect/forward nullable * Task #99111: Make the type annotations for backend view helper arguments more specific * Bug #99118: Add Event to FileBrowser * Task #99208: Improve usability of "Create Administrative User" function * Task #99210: [UX] - Highlight content elements in an inconsistent translation state * Task #99215: [UX] - Remove label from clear cache button * Task #99218: [UX] - Swap position for buttons in docheader in history module * Task #99219: [UX] - Add label for edit button in docheader for info module * Bug #99227: Deprecate stdWrap property `strftime` * Task #99229: [UX] - Add label to go back buttons in docheader * Task #99230: [UX] - Use unified buttons in Scheduler docheader * Feature #99236: Allow username in systemMaintainers configuration * Task #99247: [UX] - Unify position for docheader buttons * Feature #99258: Removal of deleted records + supporting EXT:recycler * Bug #99290: Search UI error: dropdown is behind grouping titles * Feature #99320: Use database native common table expression to fetch page tree * Bug #99327: CKEditor: Multiple stylesheets in config.contentsCss are not working anymore * Bug #99377: Constant substitution not working * Task #99389: Update to PHPStan 1.9.4 * Bug #99458: Form module throws error, when there is no TS database template * Bug #99535: Ckeditor5 htmlSupport * Task #99660: Remove content element section from NewRecordController * Bug #99687: Fix typos in newly introduced ext:tstemplate xlf files * Task #99701: [UX] - Unify Labels for list view table header * Bug #99702: [UX] - Use correct download icon in list module * Task #99714: [UX] - Use checkbox icon in ColumnSelector * Task #99727: [UX] - Adjusting the appearance of the tables in the list module * Bug #99734: Extbase UriBuilder->setRequest() is internal but recommended to use * Task #99849: Mark disabled (hidden) groups in EXT:scheduler * Bug #99855: Editing scheduler task that belongs to a hidden group * Task #99867: Add delete button for backend usergroups * Task #99874: Allow editing of scheduler groups within the module * Bug #99878: Scheduler task end date is always added automatically when validation fails * Bug #99917: Get rid of newly introduced inline JavaScript "javascript:;" * Task #99931: Make extbase repository generic (phpstan-wise) * Bug #99942: Custom icon for module "PageTsConfig" * Task #100032: Add default HTTP security headers for backend * Task #100033: Deprecate $GLOBALS['TBE_STYLES']['stylesheet'] and $GLOBALS['TBE_STYLES']['stylesheet2'] * Bug #100061: Wrong example for GeneralUtility::_GPmerged() migration * Feature #100066: Make PSR-7 request globally available in AbstractUserAuthentication * Feature #100071: Introduce non-magic repository find methods * Bug #100072: Luxembourgish is not available * Feature #100077: Add PSR-14 event to conditionally disable request token validation * Feature #100116: Make PSR-7 request accessible for authentication services * Task #100119: UnableToLinkException should be strictly typed * Task #100135: Remove cookieWarning in ext:felogin * Task #100140: Properly handle inline stylesheets * Task #100141: Add possibility to add resource hashes * Task #100172: Convert class ApplicationType to enum * Task #100173: Mark several internal methods and properties protected in UserAuthentication * Bug #100176: Translations not available in v12.2 when using language key with country in site config * Bug #100180: Unable to deactivate thumbnails in element browser * Task #100287: Fix spelling error * Task #100295: Prevent setting empty password in backend password recovery * Task #100300: Respect security.usePasswordPolicyForFrontendUsers in TCA type=password * Task #100331: List PSR-14 events in EXT:redirects documentation * Bug #100350: Date ViewHelper uses wrong DateFormatter function * Task #100355: Deprecate methods in PasswordChangeEvent * Bug #100359: Using TCA type "checkbox" in custom site configuration field throws error * Bug #100362: Issue with imageUpload and fileUpload fieds * Bug #100379: Exporting page tree with shortcuts * Task #100405: Deprecate TSFE->type * Bug #100446: Add youtube-nocookie.com to static CSP declarations * Task #100454: Deprecate various functionality in legacy tree implementations * Bug #100459: Deprecate BackendUtility::getRecordToolTip * Bug #100460: Page preview of different domain cannot be shown in web>view module * Task #100461: Deprecate TypoScript config.xhtmlDoctype * Bug #100505: RTE loads CSS file path as string, but path comes as array * Bug #100517: Content Security Policy: Report is not stored when no site language is defined on "/" * Bug #100521: Undefined array key warnings in DatabaseIntegrityController * Task #100522: Correct example for LoginAttemptFailedEvent * Task #100524: Scheduler close button inconsisten behavior * Task #100534: Avoid PHP deprecation in CSP report * Bug #100547: Some icons not rendered anymore having strict CSP style-src directive * Bug #100552: webhooks fail if site is imported and webhooks imported * Bug #100557: Endless loop when saving content and "Source" view is open * Bug #100558: Content Security Policy: asset 'livereload' is blocked * Task #100566: Separate move page + move content element * Bug #100568: Fatal error on upgrade on v12 with email fields * Bug #100572: Module configuration - own navigation component not loaded * Bug #100574: Undefined array key 1 in UserInformationService.php line 235 * Task #100587: Deprecate form engine result property additionalJavaScriptPost & inline JavaScript customEval * Bug #100595: Unable to call method "getPageType" of object "TYPO3\CMS\Backend\Routing\RouteResult". * Task #100597: Deprecate getThumbnailUrl() and getLinkToDataHandlerAction() * Task #100602: Update Doctrine DBAL * Task #100614: Deprecate PageRenderer::$inlineJavascriptWrap and $inlineCssWrap * Task #100615: Return early in ContentObjectRenderer::cObjGet() * Bug #100618: CSP module: Mute and delete of violations do not work * Bug #100621: CSP: Reduce a directive by a URL in csp.yaml is not working * Bug #100630: typo3/cms-extbase package with doctrine/Instantiator v2 requirement conflicts with jms/serializer * Task #100634: Remove option for enabling RTE per user * Bug #100650: CKEditor 5 in TYPO3 v12 removes mutiple css classes * Task #100659: Use official translations for ISO 639-1/2 languages * Task #100664: Allow using nonce values explicitly in PageRenderer methods handling inline code * Bug #100665: Handle dynamic nonce update in cached HTML markup * Task #100667: Apply nonce hint (window.litNonce) on demand only * Task #100668: Avoid usages of getLL in various system extensions * Task #100669: Avoid usages of getLL in various system extensions * Task #100672: Correct examples around getTSFE() in changelogs * Task #100673: Remove several unused imports * Bug #100679: ckeditor drops classes set by linkbrowser if undefined * Task #100691: Track CSP nonce consumption * Task #100695: Move Cookie logic out of userAuth * Task #100712: Let CSP Policy tests be functional only * Task #100714: Incomplete code example for ModifyCacheLifetimeForPageEvent * Task #100721: Deprecate various label-related methods and properties * Task #100722: Fix AccessLifetime cases * Task #100727: Streamline CSP aspects * Task #100731: Correct deprecation notice in LocalizationUtility * Task #100732: Allow f:asset.css and f:asset.script to use CSP nonce * Bug #100736: AbstractExceptionHandler::IGNORED_EXCEPTION_CODES is now public * Task #100751: Update typo3/testing-framework with latest changes * Task #100753: Revise changelogs for v12.4 * Bug #100757: CSP module: When clicking "Remove All" the details view stays open * Bug #100767: typo3-console setup fails with EXT:workspaces * Bug #100774: Fluid Select ViewHelper getIdentifierByObject failes * Bug #100776: TsConfig tt_content_defValues translation * Bug #100777: BE: FAL images in Flexform not showing or saved * Task #100781: Remove example CKEditor plugin * Bug #100787: $GLOBALS['TSFE']->fe_user->setKey() seems not to create cookie "fe_typo_user" * Bug #100798: CSP: wildcard is url-encoded * Bug #100842: Problem with TCEFORM selecbox and item selector in OS dark mode * Bug #100845: TypeError setTargetPageType has to be int, string given * Bug #100851: Syntax error while Upgrading from 12.3 to 12.4.1 * Bug #100854: LLL: references in options comments of Extension Settings were not translated * Bug #100856: SilentConfigurationUpgradeService removed FE/versionNumberInFilename setting * Bug #100880: block comments are not working as described in documentation in constants for root page * Task #100881: [DOCS] Remove section using version constraint when installing EXT:linkvalidator * Task #100882: [DOCS] Add SQL and memory metrics to toolbar * Bug #100884: Datepicker styles (today, year selector) * Feature #100891: CKeditor add option to insert images * Bug #100916: lockIPv4PartCount) must be of type int