TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:09 +02:00
commit af8cc155b5
6818 changed files with 642608 additions and 0 deletions
@@ -0,0 +1,41 @@
.. include:: /Includes.rst.txt
.. _breaking-83638:
===================================================================================
Breaking: #83638 - Redirect functionality moved from sys_domain to redirects module
===================================================================================
See :issue:`83638`
Description
===========
Records of type `sys_domain` previously provided the possibility to provide a redirect via the fields `redirectTo`,
`redirectHttpStatusCode` and `prepend_params`. The functionality has been moved from `sys_domain` to the
new `sys_redirect` database records.
Impact
======
The database fields `redirectTo`, `redirectHttpStatusCode` and `prepend_params` of table `sys_domain` have been removed.
Domain selection logic has been simplified to not consider these fields anymore.
Affected Installations
======================
All installations directly accessing the database fields `redirectTo`, `redirectHttpStatusCode` and `prepend_params` of
table `sys_domain` and having configured redirects in `sys_domain`.
Migration
=========
An upgrade wizard is provided to migrate `sys_domain` records with redirects to `sys_redirect` records.
If you directly accessed the named database fields above, change the queries accordingly to select the corresponding
`sys_redirect` records.
.. index:: Frontend, NotScanned
@@ -0,0 +1,50 @@
.. include:: /Includes.rst.txt
.. _deprecation-81852:
=====================================================
Deprecation: #81852 - Deprecated Usage of EXT:rsaauth
=====================================================
See :issue:`81852`
Description
===========
The extension rsaauth has been marked as deprecated. The reasons are:
* With the extension the password transmission is the only thing that is encrypted
* Even though the transmission is encrypted, the public key exchange from server to client
is not authenticated. This means an attacker in the middle can hand out a bogus public key
to the client, which means that the password will then be encrypted with the key of the attacker
* Session ids via cookies are still transferred unencrypted. Since (valid) session ids are almost
as valuable as passwords, jumping through hoops to protect the password, but keeping the session
id unencrypted, seems irrational (and is insecure).
Impact
======
An additional report checks the usage of the extension and if the backend is served via https.
Affected Installations
======================
Any TYPO3 site using the extension rsaauth.
Migration
=========
Use https:// for any site, especially for pages which transfer passwords, including TYPO3 backend and frontend logins.
The usage of a secure connection is also enforced by the browsers which mark http:// pages that
collect passwords or credit cards as insecure. In long-term all http:// sites will be marked as insecure.
After removing rsaauth, the :php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['loginSecurityLevel']` and
:php:`$GLOBALS['TYPO3_CONF_VARS']['FE']['loginSecurityLevel']` must be set to :php:`normal`,
otherwise login will not be possible.
.. index:: Backend, Frontend, NotScanned
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _deprecation-83503:
=====================================================
Deprecation: #83503 - Deprecate unneeded RawValidator
=====================================================
See :issue:`83503`
Description
===========
The `RawValidator` does not actually validate anything at all. It was meant to be some kind of NullObject to prevent a
`NoSuchValidatorException` when resolving a validator from the detected type of a param. As these Exceptions are caught,
the Validator has been marked as deprecated and will be removed in CMS 10.
Impact
======
If you rely on the `RawValidator` you will need to implement it yourself.
Affected Installations
======================
All installations that use the `RawValidator`. As the validator does not validate anything the chances are high that it
does not affect anyone at all.
Migration
=========
If needed, create the Validator yourself.
.. index:: PHP-API, PartiallyScanned
@@ -0,0 +1,35 @@
.. include:: /Includes.rst.txt
.. _deprecation-83511:
=========================================================
Deprecation: #83511 - Deprecate AbstractValidatorTestcase
=========================================================
See :issue:`83511`
Description
===========
The class AbstractValidatorTestcase has been marked as deprecated and will be removed in CMS 10.
Impact
======
Test cases for validators that extend that class will no longer work.
Affected Installations
======================
All installations that make use of that class
Migration
=========
Put the logic of that test case into your own test cases.
.. index:: PHP-API, FullyScanned
@@ -0,0 +1,55 @@
.. include:: /Includes.rst.txt
.. _deprecation-83592:
=============================================================================
Deprecation: #83592 - impexp: Removed "Maximum number of records" restriction
=============================================================================
See :issue:`83592`
Description
===========
When exporting pages or records using the "Export" interface of
extension :php:`impexp`, the restriction to export only a maximum
number of records has been removed.
Impact
======
The export module now exports any number of records. It is up
to the user to restrict this in a sane way: During import the
number of records influences import runtime. This heavily depends
on given server performance, an artificial limit given by the system
is not suitable.
On PHP level, two export related methods changed their signature:
* :php:`TYPO3\CMS\Impexp\Controller\ImportExportController->addRecordsForPid()` -
Third method argument marked as deprecated
* :php:`TYPO3\CMS\Impexp\Controller\ImportExportController->exec_listQueryPid` -
Third method argument marked as deprecated
Affected Installations
======================
Backend interface users are probably not affected much: Users of the
export module usually set the 'maximum number of records' value high
enough to export everything they wanted already. The interface now
just misses the according input fields.
Migration
=========
On PHP level, the extension scanner will find extensions that use
the changed methods and checks if they are called with the
correct number of arguments. Additionally, :php:`E_USER_DEPRECATED`
errors are logged at runtime if using these methods the old way.
.. index:: Backend, PHP-API, FullyScanned, ext:impexp
@@ -0,0 +1,43 @@
.. include:: /Includes.rst.txt
.. _deprecation-83596:
=================================================================
Deprecation: #83596 - impexp: Removed "Max file size" restriction
=================================================================
See :issue:`83596`
Description
===========
When exporting files using the "Export" interface of extension
:php:`impexp`, the restriction to only export files of a certain
maximum size has been removed.
Impact
======
On PHP level, one class property has been marked as deprecated and is unused now:
* :php:`TYPO3\CMS\Impexp\Export->maxFileSize`
Affected Installations
======================
Backend users are probably not affected much: Users of the
export module usually set the 'max file size' value high
enough to export everything they wanted already. The interface now
just misses the according input fields and exports files of all sizes.
Migration
=========
On PHP level, the extension scanner will find extensions that
still use the deprecated property.
.. index:: Backend, PHP-API, FullyScanned, ext:impexp
@@ -0,0 +1,43 @@
.. include:: /Includes.rst.txt
.. _deprecation-83606:
===================================================
Deprecation: #83606 - impexp: Size handling removed
===================================================
See :issue:`83606`
Description
===========
When exporting or importing structures via extension :php:`impexp`,
records and files wrote size information to export files and checked
these during import. This functionality has been removed.
Impact
======
This change has no impact on editors, on PHP level, two class
properties have been marked as deprecated:
* :php:`TYPO3\CMS\Impexp\Export->maxRecordSize`
* :php:`TYPO3\CMS\Impexp\Export->maxExportSize`
Affected Installations
======================
Using these properties in PHP has been deprecated, they will be removed
with CMS 10. The extension scanner will find possible usages.
Migration
=========
Don't access these properties anymore, they are ignored.
.. index:: Backend, PHP-API, FullyScanned, ext:impexp
@@ -0,0 +1,23 @@
.. include:: /Includes.rst.txt
.. _feature-61170:
=====================================================
Feature: #61170 - Add additional hook for record list
=====================================================
See :issue:`61170`
Description
===========
An additional hook has been added to `EXT:recordlist` to render content above any other content.
Example of usage
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/Modules/Recordlist/index.php']['drawHeaderHook']['extkey'] = \Vendor\Extkey\Hooks\PageHook::class . '->render';
.. index:: Backend, LocalConfiguration
@@ -0,0 +1,30 @@
.. include:: /Includes.rst.txt
.. _feature-83350:
===================================================
Feature: #83350 - Add recursive filtering of arrays
===================================================
See :issue:`83350`
Description
===========
The new method :php:`\TYPO3\CMS\Core\Utility\ArrayUtility::filterRecursive()` has been added as an enhancement to the
`PHP function`_ :php:`array_filter()` to filter multidimensional arrays.
The method :php:`ArrayUtility::filterRecursive()` behaves just like :php:`array_filter()` and if no callback is defined,
values are removed if they equal to boolean :php:`false`. See `converting to boolean`_.
.. _`PHP function`: https://secure.php.net/manual/en/function.array-filter.php
.. _`converting to boolean`: https://secure.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
Impact
======
Arrays can be filtered recursive using the new method.
.. index:: PHP-API
@@ -0,0 +1,45 @@
.. include:: /Includes.rst.txt
.. _feature-83429:
=================================
Feature: #83429 - Feature Toggles
=================================
See :issue:`83429`
Description
===========
In order to allow better support for alternative functionality while keeping old functionality, a new API
for enabling installation-wide features - called "Feature Toggles" - has been added.
The new API checks against a system-wide option array within :php:`$TYPO3_CONF_VARS['SYS']['features']` which can be
enabled system-wide. Both TYPO3 Core and Extensions can then provide alternative functionality for a certain
feature.
Features are usually breaking changes for a minor version / sprint release, which site administrators can enable
at their own risk, or stay fully compatible with third-party extensions by choosing not to enable them.
Examples for having features are:
* Throw exceptions on certain occasions instead of just returning a string message as error message.
* Disable obsolete functionality which might still be used, but slows down the system.
* Enable alternative `PageNotFound handling` for an installation.
Impact
======
Features are documented for TYPO3 Core. For extension authors, the API can be used for any custom
feature provided by an extension:
.. code-block:: php
if (GeneralUtility::makeInstance(Features::class)->isFeatureEnabled('myFeatureName')) {
// do custom processing
}
.. index:: LocalConfiguration, PHP-API
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _feature-83449:
======================================================================================
Feature: #83449 - Make list of fields configurable in Pagetree overview in Info module
======================================================================================
See :issue:`83449`
Description
===========
The available fields in the module "Pagetree overview" in the Info module by default ship with the entries
"Basic settings", "Cache and age" and "Record overview".
By using `PageTsConfig` it is now possible to change the available fields and add additional entries to the selectbox.
.. code-block:: typoscript
mod.web_info.fieldDefinitions {
0 {
label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_0
fields = title,uid,alias,starttime,endtime,fe_group,target,url,shortcut,shortcut_mode
}
1 {
label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_1
fields = title,uid,###ALL_TABLES###
}
2 {
label = LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:pages_2
fields = title,uid,table_tt_content,table_fe_users
}
}
Next to using a list of fields from the `pages` table you can add counters for records in a given table by prefixing a
table name with `table_` and adding it to the list of fields.
The string `###ALL_TABLES###` is replaced with a list of all table names an editor has access to.
.. index:: Backend
@@ -0,0 +1,28 @@
.. include:: /Includes.rst.txt
.. _feature-83461:
============================================================
Feature: #83461 - Show fieldname next to title in debug mode
============================================================
See :issue:`83461`
Description
===========
If the configuration `['BE']['debug']` is enabled and the current user is an administrator, the name of a DB field
is prepended to the title of each field generated by the `FormEngine`.
Impact
======
The correct name of a field is important to know for developers and integrators. Examples are setting up access
permissions or configuration using TsConfig.
Instead of looking into the source code of the browser, it is now possible to display those name by enabling the debug
mode for the backend.
.. index:: Backend
@@ -0,0 +1,47 @@
.. include:: /Includes.rst.txt
.. _feature-83529:
=====================================================
Feature: #83529 - Execute hooks on backend user login
=====================================================
See :issue:`83529`
Description
===========
When a user successfully logs in to the backend of TYPO3, registered hooks are executed.
Developers can register their hooks as shown below.
.. code-block:: php
// Register hook on successful BE user login
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauthgroup.php']['backendUserLogin'][] =
\Vendor\MyExtension\Hooks\BackendUserLogin::class . '->dispatch';
On user login, method :php:`dispatch()` of class :php:`\Vendor\MyExtension\Hooks\BackendUserLogin`
is executed and the backend user array is passed as a parameter:
.. code-block:: php
public function dispatch(array $backendUser)
{
if (isset($backendUser['user']['username'])) {
$username = $backendUser['user']['username'];
$email = $backendUser['user']['email'];
// do something...
}
}
Impact
======
TYPO3 core developers as well as extension developers can develop functions which will be executed
when a backend user successfully logs in to the backend of TYPO3.
A typical use case would be any type of notification service.
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,54 @@
.. include:: /Includes.rst.txt
.. _feature-83631:
=============================================================
Feature: #83631 - System Extension "redirects" has been added
=============================================================
See :issue:`83631`
Description
===========
A new system extension "redirects" has been added, which ships flexible handling of HTTP redirects,
useful both for marketers and site administrators.
It adds a new module called "Redirects" (under a new main module called "Site Management").
A new DB table "sys_redirect" has been added, which allows to configure a redirect from a source
(host+path) to a destination target. The destination target can be any kind of Uri (used by the LinkService).
Any time a redirect is added or modified, a list of all redirects is added to the cache management,
allowing to fetch all redirects at once, reducing the number of queries to the DB in the frontend to 1 query
(or to one query to the file system, as the power lies in the caching framework).
A simple hit statistics counter is implemented as well.
Impact
======
A system extension "Redirects" was added with the following features:
* A new sub module "Redirects"
* Possibility to add redirects with the following caveats
* Source may be a specific domain, domain with port or "any" domain
* Source Path may be an absolute path (`/foo/bar/`) or a regular expression (`#f(.*?)#`)
* Target may be selected with the link wizard (and may be a page, file, folder or external URL)
* The target can be forced to HTTPS only
* The status code of the redirect can be configured per redirect
* Existing GET variables can be kept through the redirect
* Redirects can be set up for specific time frames or indefinitely
* An `X-Redirect-By: TYPO3` header is added to each redirect initiated by the module
* A simple database based hit counter shows how often a redirect was executed and may be manually reset
The default settings of TYPO3s cache backend allow for about 65.000 redirects.
If you have more (or in the future might have more) than 65.000 redirects it is advised to switch to a different cache
backend like redis.
.. index:: Backend, Frontend
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _feature-83637:
=========================================================
Feature: #83637 - Added new main module "Site Management"
=========================================================
See :issue:`83637`
Description
===========
A new main module for the TYPO3 Backend "Site" (module key "site") has been added to the TYPO3 Core.
Its main purpose is to host submodules related to integrators and site maintainers to configure a website,
language configuration, domains and routing.
For TYPO3 9.1, the system extension "redirects" adds URL redirects to the main module, if installed.
Impact
======
To add a new module to the Site main module, register a module within an extensions` :php:'ext_tables.php' file:
.. code-block:: php
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule(
'site',
'mymodule',
'',
'',
[
'routeTarget' => \MyVendor\MyPackage\Controller\MyModuleController::class . '::handleRequest',
'access' => 'group,user',
'name' => 'site_mymodule',
'icon' => 'EXT:mypackage/Resources/Public/Icons/module_icon.svg',
'labels' => 'LLL:EXT:mypackage/Resources/Private/Language/locallang_module_mymodule.xlf'
]
);
.. index:: Backend
@@ -0,0 +1,35 @@
.. include:: /Includes.rst.txt
.. _feature-83677:
=================================================================
Feature: #83677 - Globally disable/enable redirect hit statistics
=================================================================
See :issue:`83677`
Description
===========
The redirects module provides the optional feature to count hits on redirects.
On most installations this will probably be achieved using analytics tools such as
Google Analytics, Piwik or alike - for those not using any other ways of measuring,
counting hits can be enabled with a feature switch.
Impact
======
Redirect hit counting can be enabled by setting
.. code-block:: php
'SYS' => [
'features' => [
'redirects.hitCount' => true
],
],
Be aware that every hit on a redirect will result in an additional SQL `UPDATE` query.
.. index:: Database, Frontend, LocalConfiguration
+42
View File
@@ -0,0 +1,42 @@
:template: changelogOverview.html
.. include:: /Includes.rst.txt
.. _changelog-9-1:
9.1 Changes
===========
**Table of contents**
.. contents::
:local:
:depth: 1
Breaking Changes
^^^^^^^^^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Breaking-*
Features
^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Feature-*
Deprecation
^^^^^^^^^^^
.. toctree::
:maxdepth: 1
:titlesonly:
:glob:
Deprecation-*