TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-91806:
|
||||
|
||||
================================================
|
||||
Deprecation: #91806 - BackendUtility viewOnClick
|
||||
================================================
|
||||
|
||||
See :issue:`91806`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`BackendUtility::viewOnClick()` is discouraged to be used
|
||||
due to its inline JavaScript and has been deprecated now.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions calling this static method will be affected. The extension
|
||||
scanner will find usages as strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The :php:`\TYPO3\CMS\Backend\Routing\PreviewUriBuilder` should be used
|
||||
instead as described in
|
||||
:doc:`/Changelog/11.0/Important-91123-AvoidUsingBackendUtilityViewOnClick`.
|
||||
|
||||
.. index:: Backend, JavaScript, PHP-API, FullyScanned, ext:backend
|
||||
@@ -0,0 +1,63 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94058:
|
||||
|
||||
=============================================
|
||||
Deprecation: #94058 - JavaScript goToModule()
|
||||
=============================================
|
||||
|
||||
See :issue:`94058`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
One of the most prominent inline JavaScript functions
|
||||
:js:`goToModule()` has been deprecated in favor of a streamlined
|
||||
ActionHandler API for JavaScript.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
When using the internal backend module entry objects via `setOnClick` and
|
||||
`getOnClick` methods, PHP deprecation warnings are now triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions referencing these methods.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the following HTML code to replace the inline :js:`goToModule()`
|
||||
call to for example link to the page module:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="#"
|
||||
data-dispatch-action="TYPO3.ModuleMenu.showModule"
|
||||
data-dispatch-args-list="web_layout"
|
||||
>
|
||||
Go to page module
|
||||
</a>
|
||||
|
||||
Inside actual JavaScript code, you can replace calls to :js:`goToModule()`
|
||||
(or :js:`top.goToModule()`) like this:
|
||||
|
||||
.. code-block:: js
|
||||
:caption: Example for TYPO3 v12+
|
||||
|
||||
// Utilize imports rather than straight usage of TYPO3.ModuleMenu.App.showModule()
|
||||
import ModuleMenu from '@typo3/backend/module-menu.js';
|
||||
|
||||
ModuleMenu.App.showModule('web_layout')
|
||||
|
||||
.. code-block:: js
|
||||
:caption: Example for TYPO3 v11
|
||||
|
||||
TYPO3.ModuleMenu.App.showModule('web_layout')
|
||||
|
||||
.. index:: JavaScript, FullyScanned, ext:backend
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94115:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #94115 - Parameter type evaluation via DocBlock comments
|
||||
=====================================================================
|
||||
|
||||
See :issue:`94115`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Extbase had a long support for detecting the actual
|
||||
target type of a method argument by parsing the DocBlock
|
||||
annotations like
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
/**
|
||||
* @param \MyVendor\MyExtension\MyModel $item
|
||||
*/
|
||||
public function myAction($item);
|
||||
|
||||
However, since PHP 7 supports to define the target type
|
||||
by specifying the type directly in the language, which is
|
||||
much faster, the "legacy" way of handling type detection for
|
||||
arguments are marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
When a DocBlock annotation like :php:`@param \MyClass $item` is added, but
|
||||
the actual type is not added to the method argument via native PHP type
|
||||
declarations, a deprecation message is now triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom Extbase extensions which
|
||||
were never upgraded to support latest PHP language constructs.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use native PHP type declarations instead - this can be achieved since TYPO3 v10:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function myAction(\MyVendor\MyExtension\MyModel $item);
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:extbase
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94137:
|
||||
|
||||
================================================================================
|
||||
Deprecation: #94137 - Switch behavior of ArrayUtility::arrayDiffAssocRecursive()
|
||||
================================================================================
|
||||
|
||||
See :issue:`94137`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Despite its name, the method
|
||||
:php:`\TYPO3\CMS\Core\Utility\ArrayUtility::arrayDiffAssocRecursive()`
|
||||
mimics the behavior of :php:`array_diff_key()` and not of
|
||||
:php:`array_diff_assoc()`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The method has been adjusted to act like :php:`array_diff_assoc()`. As this is
|
||||
considered being a breaking change, the behavior must be enabled explicitly by
|
||||
passing a third parameter :php:`$useArrayDiffAssocBehavior` being true. If the
|
||||
argument is either omitted or :php:`false`, the old behavior is kept but a
|
||||
deprecation warning will be thrown.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Every 3rd party extension using
|
||||
:php:`\TYPO3\CMS\Core\Utility\ArrayUtility::arrayDiffAssocRecursive()`
|
||||
without its third argument being :php:`true` is affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
To keep the previous :php:`array_diff_key()` based behavior, use the introduced
|
||||
method :php:`\TYPO3\CMS\Core\Utility\ArrayUtility::arrayDiffKeyRecursive()`.
|
||||
To make use of the :php:`array_diff_assoc()` based behavior, which will become
|
||||
the default behavior in TYPO3 v12, pass :php:`true` as the third argument.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,69 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94165:
|
||||
|
||||
========================================
|
||||
Deprecation: #94165 - sys_language table
|
||||
========================================
|
||||
|
||||
See :issue:`94165`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since the introduction of site handling back in TYPO3 v9, available
|
||||
languages and their associated information, for example locale, ISO code or the
|
||||
navigation title are configured in the site configurations. As a consequence,
|
||||
the :sql:`sys_language` table just duplicated this information and is therefore
|
||||
now deprecated.
|
||||
|
||||
The Core internally does not longer rely on this table but fetches
|
||||
necessary information from the site languages instead. This means, there
|
||||
won't be any relation to the :sql:`sys_language` table, which allows to
|
||||
define any kind of "ID" for the :php:`languageField` field of records, which
|
||||
is usually :sql:`sys_language_uid`.
|
||||
|
||||
Also the site languages, used in site configurations, are now completely
|
||||
independent of any :sql:`sys_language` record. Previously, when using the
|
||||
site module to create or edit a site configuration, site languages could
|
||||
only be added when a corresponding :sql:`sys_language` record existed.
|
||||
This has now changed. The site configurations' `languages` field now
|
||||
features a :guilabel:`Create new language` button, which allows to create a new
|
||||
site language for this site configuration. Such newly created site
|
||||
language will then also be available in the selector box of all other
|
||||
site configurations. The ID for a new site language is always created
|
||||
automatically (auto-increment). When selecting this site language in
|
||||
another site configuration, most of the fields will now be prefilled.
|
||||
|
||||
.. note::
|
||||
|
||||
When creating the first site configuration of a new installation, the
|
||||
languages selector box is empty, as new languages must be created via
|
||||
the :guilabel:`Create new language` button first. However, a default
|
||||
language (ID=0) record will always be added automatically.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Currently there is no direct impact. However, if your code relies on TYPO3
|
||||
processing :sql:`sys_language`, you might have to adapt those places to use
|
||||
site languages instead.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations which rely on TYPO3 processing the :sql:`sys_language`
|
||||
table. For example for fetching available languages and their related
|
||||
information.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Adapt your code to always use site languages for fetching and processing
|
||||
language related information.
|
||||
|
||||
For example, use the new TCA type `language`, introduced in :issue:`57082`,
|
||||
instead of :php:`foreign_table => sys_language` for selecting a records'
|
||||
language.
|
||||
|
||||
.. index:: Database, TCA, NotScanned, ext:core
|
||||
@@ -0,0 +1,83 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94193:
|
||||
|
||||
================================================================
|
||||
Deprecation: #94193 - Public URLs with relative paths in FAL API
|
||||
================================================================
|
||||
|
||||
See :issue:`94193`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The public FAL API for accessing the public url of a FAL object,
|
||||
for example :php:`\TYPO3\CMS\Core\Resource\FileReference` or
|
||||
:php:`\TYPO3\CMS\Core\Resource\Folder`, previously allowed to
|
||||
retrieve the relative path instead of the absolute path. This could
|
||||
be achieved by setting :php:`$relativeToCurrentScript` to :php:`true`
|
||||
while calling :php:`getPublicUrl()`.
|
||||
|
||||
FAL is only able to build relative links for local drivers. Other drivers
|
||||
would still return the absolute URL, which has often led to unexpected
|
||||
side effects.
|
||||
|
||||
Since both, frontend (site handling) and backend (url routing) are meanwhile
|
||||
fully capable of supporting absolute URLs, :php:`$relativeToCurrentScript`
|
||||
is now deprecated and will be removed in TYPO3 v12.
|
||||
|
||||
This also affects the :php:`isRelativeToCurrentScript()` method in the
|
||||
:php:`GeneratePublicUrlForResourceEvent` event, as well as the
|
||||
:php:`OnlineMediaHelperInterface`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`getPublicUrl()` on a FAL object, for example
|
||||
:php:`\TYPO3\CMS\Core\Resource\FileReference` or
|
||||
:php:`\TYPO3\CMS\Core\Resource\Folder`, with :php:`$relativeToCurrentScript`
|
||||
set to :php:`true`
|
||||
will trigger a PHP :php:`E_USER_DEPRECATED` error. The extension scanner
|
||||
will detect such calls.
|
||||
|
||||
Accessing :php:`isRelativeToCurrentScript()` on
|
||||
:php:`GeneratePublicUrlForResourceEvent` will trigger a PHP
|
||||
:php:`E_USER_DEPRECATED` error. The extension scanner will detect
|
||||
such calls.
|
||||
|
||||
Manually calling :php:`getPublicUrl()` on an :php:`OnlineMediaHelper`,
|
||||
for example :php:`YoutubeHelper`, will not trigger a PHP :php:`E_USER_DEPRECATED`
|
||||
error, but the extension scanner will detect such calls.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations which set :php:`$relativeToCurrentScript` to :php:`true`
|
||||
when calling :php:`getPublicUrl()` on a FAL object, for example
|
||||
:php:`\TYPO3\CMS\Core\Resource\FileReference` or
|
||||
:php:`\TYPO3\CMS\Core\Resource\Folder`.
|
||||
|
||||
All installations which manually call :php:`getPublicUrl()` on an
|
||||
:php:`\TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\OnlineMediaHelper`,
|
||||
for example :php:`\TYPO3\CMS\Core\Resource\Rendering\YoutubeRenderer`.
|
||||
|
||||
All installation which access :php:`isRelativeToCurrentScript()` on the
|
||||
:php:`\TYPO3\CMS\Core\Resource\Event\GeneratePublicUrlForResourceEvent` event.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Remove the :php:`$relativeToCurrentScript` parameter from all calls to
|
||||
:php:`getPublicUrl()` on FAL objects, for example
|
||||
:php:`\TYPO3\CMS\Core\Resource\FileReference` or
|
||||
:php:`\TYPO3\CMS\Core\Resource\Folder`.
|
||||
|
||||
Remove the :php:`$relativeToCurrentScript` parameter from all manual calls
|
||||
to :php:`getPublicUrl()` on a
|
||||
:php:`\TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\OnlineMediaHelper`,
|
||||
for example :php:`\TYPO3\CMS\Core\Resource\Rendering\YoutubeRenderer`.
|
||||
|
||||
Remove all calls to
|
||||
:php:`\TYPO3\CMS\Core\Resource\Event\GeneratePublicUrlForResourceEvent->isRelativeToCurrentScript()`.
|
||||
|
||||
.. index:: FAL, PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,77 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94209:
|
||||
|
||||
======================================================
|
||||
Deprecation: #94209 - Backend ModuleLayout ViewHelpers
|
||||
======================================================
|
||||
|
||||
See :issue:`94209`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following Fluid ViewHelpers have been deprecated:
|
||||
|
||||
* :html:`be:moduleLayout`
|
||||
* :html:`be:moduleLayout.menu`
|
||||
* :html:`be:moduleLayout.menuItem`
|
||||
* :html:`be:moduleLayout.button.linkButton`
|
||||
* :html:`be:moduleLayout.button.shortcutButton`
|
||||
|
||||
These ViewHelpers partially mimic their counterparts of the PHP based
|
||||
:php:`ModuleTemplate` API. They were previously used in backend modules
|
||||
when the 'doc header' handling was done in Fluid.
|
||||
|
||||
The ViewHelpers however relied on knowledge that shouldn't be the scope
|
||||
of a view component, especially variables like the current action
|
||||
and controller had to be assigned to the view in many cases.
|
||||
|
||||
Additionally, those ViewHelpers were only a sub set of the ModuleTemplate
|
||||
functionality and created a second API for the same problem domain and
|
||||
various scenarios like good shortcut implementation and main drop down
|
||||
state were hard to solve when using these ViewHelpers.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using these ViewHelpers will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Some extensions with backend modules may use these ViewHelpers. Searching
|
||||
templates for string :php:`be:moduleLayout` should reveal usages. Extensions
|
||||
extending the PHP classes are found by the extension scanner as a weak match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
In general, extensions using these ViewHelpers should switch to using the
|
||||
PHP API based on class :php:`\TYPO3\CMS\Backend\Template\ModuleTemplate`,
|
||||
usually initialized by class
|
||||
:php:`\TYPO3\CMS\Backend\Template\ModuleTemplateFactory` instead.
|
||||
All Core extensions that render backend
|
||||
modules provide usage examples and the fluent API is quite straight
|
||||
forward.
|
||||
|
||||
Using the :html:`be:moduleLayout` ViewHelper always rendered FlashMessages
|
||||
from the queue :php:`'extbase.flashmessages.' . $pluginNamespace` on top of the
|
||||
content area. You can either use the :html:`f:flashMessages` ViewHelper
|
||||
or :php:`\TYPO3\CMS\Backend\Template\ModuleTemplate::setFlashMessageQueue()`
|
||||
as replacements.
|
||||
|
||||
For Extbase base backend modules, the 'doc header' should be handled within
|
||||
controller actions, while the module body is rendered
|
||||
by the Fluid view component.
|
||||
|
||||
In case an extension heavily relies on the deprecated ViewHelpers and the
|
||||
functionality should be kept with as little work as possible, the easiest
|
||||
way is of course to simply copy the according ViewHelpers to the extension
|
||||
directly and to just adapt the namespace in templates accordingly.
|
||||
|
||||
|
||||
.. index:: Backend, Fluid, PartiallyScanned, ext:backend
|
||||
@@ -0,0 +1,50 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94223:
|
||||
|
||||
===================================================
|
||||
Deprecation: #94223 - Extbase Request->getBaseUri()
|
||||
===================================================
|
||||
|
||||
See :issue:`94223`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare Extbase towards PSR-7 compatible requests, the
|
||||
Extbase :php:`TYPO3\CMS\Extbase\Mvc\Request` has to be streamlined.
|
||||
|
||||
Method :php:`getBaseUri()` has been deprecated and shouldn't be
|
||||
used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
This getter is probably used rather seldom in extensions since both
|
||||
frontend and backend take care of base URI's in many cases already.
|
||||
The extension scanner will find remaining usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
When :php:`getBaseUri()` is called in extensions, it is most likely
|
||||
in a view related component. Since Fluid ViewHelpers currently still
|
||||
don't receive an instance of the native PSR-7 request (which will change),
|
||||
a typical substitution of this getter looks like this for now:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// @todo Adapt this example as soon as ViewHelpers receive a ServerRequestInterface
|
||||
$request = $GLOBALS['TYPO3_REQUEST'];
|
||||
$normalizedParams = $request->getAttribute('normalizedParams');
|
||||
$baseUri = $normalizedParams->getSiteUrl();
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
@@ -0,0 +1,63 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94225:
|
||||
|
||||
===============================================
|
||||
Deprecation: #94225 - f:be.container ViewHelper
|
||||
===============================================
|
||||
|
||||
See :issue:`94225`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :html:`<f:be.container>` ViewHelper has been deprecated.
|
||||
|
||||
This backend-module-related ViewHelper was pretty useless since
|
||||
it mostly provides the same functionality as :html:`<f:be.pageRenderer>`,
|
||||
with the additional opportunity to render an empty doc header.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the ViewHelper in Fluid templates will trigger a PHP
|
||||
:php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The limited functionality of the ViewHelper likely leads to little
|
||||
usage numbers.
|
||||
Searching extensions for the string html:`<f:be.container>` should
|
||||
reveal any usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
When this ViewHelper is used to register additional backend module
|
||||
resources like CSS or JavaScript, :html:`<f:be.pageRenderer>` can be
|
||||
used as drop-in replacement.
|
||||
|
||||
If the ViewHelper is used to additionally render an empty ModuleTemplate,
|
||||
this part should be moved to a controller instead. Simple example for an
|
||||
extbase controller:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$moduleTemplate->setContent($view->render());
|
||||
return $this->htmlResponse($moduleTemplate->renderContent());
|
||||
|
||||
In case your controller does not extend :php:`ActionController`, use
|
||||
the PSR-17 interfaces for generating the response:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$moduleTemplate->setContent($view->render());
|
||||
return $this->responseFactory->createResponse()
|
||||
->withHeader('Content-Type', 'text/html; charset=utf-8')
|
||||
->withBody($this->streamFactory->createStream($moduleTemplate->renderContent());
|
||||
|
||||
.. index:: Backend, Fluid, NotScanned, ext:fluid
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94227:
|
||||
|
||||
=======================================
|
||||
Deprecation: #94227 - f:base ViewHelper
|
||||
=======================================
|
||||
|
||||
See :issue:`94227`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :html:`<f:base>` ViewHelper isn't suitable in almost all use cases
|
||||
and has been deprecated: In most cases the :php:`PageRenderer` takes care of the
|
||||
main :html:`<head>` markup, directly, or indirectly via TypoScript :html:`config.baseURL`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the ViewHelper in Fluid templates will log a deprecation warning
|
||||
and the ViewHelper will be dropped with v12.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The limited use of the ViewHelper likely leads to little usage numbers.
|
||||
Searching extensions for the string html:`<f:base>` should
|
||||
reveal any usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The easiest solution is to simply copy PHP class
|
||||
:php:`TYPO3\CMS\Fluid\ViewHelpers\BaseViewHelper` to the consuming extension,
|
||||
giving the ViewHelper a happy life in an extension specific namespace.
|
||||
|
||||
|
||||
.. index:: Fluid, NotScanned, ext:fluid
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94228:
|
||||
|
||||
=====================================================
|
||||
Deprecation: #94228 - Extbase request getRequestUri()
|
||||
=====================================================
|
||||
|
||||
See :issue:`94228`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare Extbase towards PSR-7 compatible requests, the
|
||||
Extbase :php:`TYPO3\CMS\Extbase\Mvc\Request` has to be streamlined.
|
||||
|
||||
Method :php:`getRequestUri()` has been deprecated and shouldn't be
|
||||
used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extbase based extensions may use this method. The extension scanner
|
||||
will find usages as weak match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
When :php:`getRequestUri()` is called in extensions, the same information
|
||||
can be retrieved from the native PSR-7 request. At the moment, this is usually
|
||||
only available using :php:`$GLOBALS['TYPO3_REQUEST']`, but this will change
|
||||
when the Extbase request is compatible with PSR-7 ServerRequestInterface.
|
||||
A substitution looks like this for now:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// @todo Adapt this example as soon as Extbase Request implements ServerRequestInterface
|
||||
$request = $GLOBALS['TYPO3_REQUEST'];
|
||||
$normalizedParams = $request->getAttribute('normalizedParams');
|
||||
$requestUrl = $normalizedParams->getRequestUrl();
|
||||
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94231:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #94231 - Extbase InvalidRequestMethodException
|
||||
===========================================================
|
||||
|
||||
See :issue:`94231`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare towards PSR-7 Requests in Extbase, the
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Request` has to be streamlined.
|
||||
|
||||
Therefore, the internal method :php:`setMethod()` has been removed.
|
||||
This method previously threw the :php:`InvalidRequestMethodException`.
|
||||
Since this was the only usage and the exception is not used within
|
||||
TYPO3 / Extbase anymore, the exception is deprecated.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :php:`TYPO3\CMS\Extbase\Mvc\Exception\InvalidRequestMethodException`
|
||||
in custom extension code is discouraged since it will be removed with TYPO3
|
||||
v12 and is also no longer thrown by TYPO3.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extbase based extensions may manually throw or catch
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Exception\InvalidRequestMethodException`.
|
||||
The extension scanner will find those usages.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
All usages of :php:`TYPO3\CMS\Extbase\Mvc\Exception\InvalidRequestMethodException`
|
||||
in custom extension code, which is very unlikely, have to be replaced with a
|
||||
custom exception, if needed at all.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94252:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #94252 - GeneralUtility::compileSelectedGetVarsFromArray
|
||||
=====================================================================
|
||||
|
||||
See :issue:`94252`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In our effort to reduce usages of :php:`GeneralUtility::_GP()`, the
|
||||
:php:`GeneralUtility` method :php:`compileSelectedGetVarsFromArray` is
|
||||
deprecated, since it internally calls :php:`GeneralUtility::_GP()` instead
|
||||
of accessing the PSR-7 Request. The method was furthermore only used once
|
||||
in the Core since it's internal logic can easily be implemented on a case
|
||||
by case basis.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All TYPO3 installations calling this method in custom code are affected.
|
||||
The extension scanner will find such usages as strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Usages of the method in custom extension code have to be replaced
|
||||
with a custom implementations, preferably using the PSR-7 Request.
|
||||
|
||||
See: :php:`\TYPO3\CMS\Backend\Controller\EditDocumentController->compileStoreData()`
|
||||
for an example on how such migration could look like.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94272:
|
||||
|
||||
===============================================
|
||||
Deprecation: #94272 - Application->run callback
|
||||
===============================================
|
||||
|
||||
See :issue:`94272`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since the introduction of the :php:`\TYPO3\CMS\Core\Core\ApplicationInterface`
|
||||
in :issue:`67808` (TYPO3 v7), which serves as a wrapper for setting up the bootstrap and
|
||||
calling the request, it was possible to run either the console, the frontend
|
||||
or the backend by calling :php:`run()` on the corresponding Application class.
|
||||
|
||||
The :php:`run()` method also featured the possibility to provide a :php:`callback`
|
||||
as first argument. This was mainly introduced, since no proper solution for
|
||||
sub requests existed at that time. Since :issue:`83725`, the callback is not
|
||||
longer necessary as such functionality can be handled by a PSR-15
|
||||
middleware.
|
||||
|
||||
Therefore, the :php:`$execute` argument of :php:`ApplicationInterface->run()`
|
||||
has been deprecated and will be removed in v12.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Core\ApplicationInterface->run()` with the
|
||||
first argument :php:`$execute` set, triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations which manually call
|
||||
:php:`\TYPO3\CMS\Core\Core\ApplicationInterface->run()`,
|
||||
while providing a callback as first argument. The extension scanner
|
||||
will find those usages as weak match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Instances with extensions calling
|
||||
:php:`\TYPO3\CMS\Core\Core\ApplicationInterface->run()` with a callback
|
||||
as first argument need to be adapted. If possible use PSR-15 middlewares
|
||||
instead.
|
||||
|
||||
Console commands do not feature PSR-15 middlewares. Therefore, the callback
|
||||
has to be replaced by separate chained post-processing commands.
|
||||
|
||||
.. index:: CLI, PHP-API, FullyScanned, ext:core
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94309:
|
||||
|
||||
=================================================
|
||||
Deprecation: #94309 - GeneralUtility::stdAuthCode
|
||||
=================================================
|
||||
|
||||
See :issue:`94309`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::stdAuthCode()`
|
||||
has not been used within the Core since at least v9. It internally fiddles
|
||||
with the `encryptionKey` while using :php:`md5()`. Furthermore, the default
|
||||
length of 8 chars could easily lead to hash collisions. The TYPO3 Core already
|
||||
provides :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::hmac()` for such
|
||||
purposes, which is using `sha1` with a length of 40. Therefore,
|
||||
:php:`stdAuthCode()` has been deprecated and will be removed in TYPO3 v12.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All TYPO3 installations calling this method in custom code. The extension
|
||||
scanner will find all usages as strong match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace all usages of the method in custom extension code by either using
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::hmac()` or by a custom
|
||||
implementation.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94311:
|
||||
|
||||
================================================
|
||||
Deprecation: #94311 - GeneralUtility::rmFromList
|
||||
================================================
|
||||
|
||||
See :issue:`94311`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::rmFromList()` has not
|
||||
been used in the Core since v10. The method has now been deprecated
|
||||
in :php:`\TYPO3\CMS\Core\Utility\GeneralUtility` and will be removed in
|
||||
TYPO3 v12.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All TYPO3 installations calling this method in custom code. The extension
|
||||
scanner will find all such usages as strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace all usages of the method in your extension code.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94313:
|
||||
|
||||
===========================================
|
||||
Deprecation: #94313 - AbstractService class
|
||||
===========================================
|
||||
|
||||
See :issue:`94313`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`TYPO3\CMS\Core\Service\AbstractService` class is part of the ancient
|
||||
:ref:`Service API <t3coreapi:services-developer-service-api>`.
|
||||
This API did not really prevail, except it's usage for the authentication process.
|
||||
|
||||
Since the authentication service related functionality was already
|
||||
decoupled over the last years, the :php:`AbstractService` got finally
|
||||
unused in Core since :issue:`88646`. Therefore it has now been marked
|
||||
as deprecated.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Extending this class does *not* raise a deprecation error level log entry.
|
||||
The class contains only a `@deprecated` class annotation. Extension classes
|
||||
can still extend this class in v11 without impact, it will raise a PHP fatal
|
||||
error in v12, when the class is dropped.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
As mentioned, the Service API never found many usages in casual extensions.
|
||||
It is therefore pretty unlikely that well maintained projects are affected.
|
||||
The extension scanner will find any class usages as a strong match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Remove any usage of this class in your extension. In case you currently
|
||||
extend :php:`AbstractService` for use in an authentication service, which
|
||||
might be the most common scenario, you have to change your service class
|
||||
to extend from :php:`AbstractAuthenticationService` instead.
|
||||
|
||||
In case you currently extend :php:`AbstractService` for another kind of
|
||||
service, which is rather unlikely, you have to implement the necessary
|
||||
methods in your service class yourself. Please see `Service Implementation
|
||||
<https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Services/Developer/ServiceApi.html#service-implementation>`__
|
||||
for more details about the required methods. However, even better would be to
|
||||
completely migrate away from the Service API (look for :php:`GeneralUtility::makeInstanceService()`),
|
||||
since the Core will deprecate these related methods as well.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94316:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #94316 - HTTP header manipulating methods from HttpUtility
|
||||
=======================================================================
|
||||
|
||||
See :issue:`94316`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In order to properly handle PSR-7 response objects, explicit :php:`die()`
|
||||
or :php:`exit()` calls, as well as directly manipulating HTTP headers with
|
||||
:php:`header()` should be avoided. Therefore following methods from
|
||||
:php:`\TYPO3\CMS\Core\Utility\HttpUtility` have been marked as deprecated:
|
||||
|
||||
* :php:`redirect()`
|
||||
* :php:`setResponseCode()`
|
||||
* :php:`setResponseCodeAndExit()`
|
||||
|
||||
The TYPO3 Core already provides a couple of possibilities to properly handle
|
||||
such events in a PSR-7 conform way. Most of the time, a proper PSR-7 response
|
||||
can be passed back to the call stack (request handler). Unfortunately there
|
||||
might still be some places, inside the call stack, where it's not possible to
|
||||
directly return a PSR-7 response. In such case, the
|
||||
:php:`\TYPO3\CMS\Core\Http\PropagateResponseException`
|
||||
could be thrown. It will automatically be caught by a PSR-15 middleware and the
|
||||
given PSR-7 response will then directly be returned, making any :php:`die()`
|
||||
or :php:`exit()` call obsolete.
|
||||
|
||||
The usage is as following:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Before
|
||||
HttpUtility::redirect('https://example.com', HttpUtility::HTTP_STATUS_303);
|
||||
|
||||
// After
|
||||
|
||||
// Inject PSR-17 ResponseFactoryInterface
|
||||
public function __construct(ResponseFactoryInterface $responseFactory)
|
||||
{
|
||||
$this->responseFactory = $responseFactory
|
||||
}
|
||||
|
||||
// Create redirect response
|
||||
$response = $this->responseFactory
|
||||
->createResponse(303)
|
||||
->withAddedHeader('location', 'https://example.com')
|
||||
|
||||
// Return Response directly
|
||||
return $reponse;
|
||||
|
||||
// or throw PropagateResponseException
|
||||
throw new PropagateResponseException($response);
|
||||
|
||||
.. note::
|
||||
|
||||
Throwing exceptions for returning an immediate PSR-7 Response is considered
|
||||
as an intermediate solution only, until it's possible to return PSR-7
|
||||
responses in every relevant place. Therefore, the exception is marked
|
||||
as :php:`@internal` and will most likely vanish again in the future.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of those methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All TYPO3 installations calling those methods in custom code. The extension
|
||||
scanner will find all usages as strong match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace all occurrences in custom extension code. Therefore, create a redirect
|
||||
response with the PSR-17 ResponseFactoryInterface, and pass it back to the call
|
||||
stack (request handler). In case, it's not possible to directly return a PSR-7
|
||||
Response, you can use the :php:`\TYPO3\CMS\Core\Http\PropagateResponseException`
|
||||
as an intermediate solution.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,68 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94317:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #94317 - ext:form Finisher implementations
|
||||
=======================================================
|
||||
|
||||
See :issue:`94317`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In preparation of the Extbase ObjectManager deprecation in favor of
|
||||
symfony dependency injection, some details of EXT:form finishers had
|
||||
to be adapted: In contrast to Extbase object management, symfony DI does
|
||||
not support prototype classes with a mixture of manual constructor arguments,
|
||||
plus dependency injection via other constructor arguments or inject methods.
|
||||
|
||||
The EXT:form finishers based on :php:`TYPO3\CMS\Form\Domain\Finishers\FinisherInterface`
|
||||
relied on this and had to be adapted: The default constructor argument
|
||||
:php:`$finisherIdentifier` has been dropped, so finisher implementations can
|
||||
keep using dependency injection.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A compatibility layer detects non-adapted finishers and falls back to
|
||||
initialization using Extbase ObjectManager. This will will trigger a
|
||||
PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
In general only instances with custom form based on EXT:form are affected, and
|
||||
only if they implement custom finishers.
|
||||
|
||||
Most custom finishers probably extend :php:`TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`.
|
||||
Those are only affected if they override :php:`__construct()` or use or manipulate
|
||||
properties :php:`$finisherIdentifier` or :php:`$shortFinisherIdentifier` in
|
||||
:php:`inject*()` or :php:`injectObject()` methods. This is rather unlikely.
|
||||
|
||||
Custom finishers that do not extend :php:`TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`
|
||||
are affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Custom finishers should extend :php:`TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`.
|
||||
|
||||
If they must implement :php:`__construct()`, they should not expect :php:`$finisherIdentifier`
|
||||
to be hand over as first argument and must not call :php:`parent::construct()` anymore.
|
||||
|
||||
Custom finishers must not rely on :php:`$finisherIdentifier` or :php:`$shortFinisherIdentifier`
|
||||
being set in early methods like :php:`__construct()`, :php:`inject*()` and :php:`injectObject()`,
|
||||
and must not set these properties.
|
||||
|
||||
Custom finishers must implement method :php:`setFinisherIdentifier()`, this method will
|
||||
be added to :php:`TYPO3\CMS\Form\Domain\Finishers\FinisherInterface` in TYPO3 v12.
|
||||
|
||||
Custom finishers must not use class property :php:`$objectManager` since this will vanish
|
||||
in v12. This will affect more API cases and will have a dedicated deprecation file
|
||||
with more details, though.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:form
|
||||
@@ -0,0 +1,65 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94351:
|
||||
|
||||
=====================================================
|
||||
Deprecation: #94351 - ext:extbase StopActionException
|
||||
=====================================================
|
||||
|
||||
See :issue:`94351`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare towards clean PSR-7 request / response handling in
|
||||
Extbase, the Extbase internal exception
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Exception\StopActionException`
|
||||
has been deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
No deprecation is logged, but the :php:`StopActionException` will be
|
||||
removed in v12 as breaking change. Extension developers with Extbase
|
||||
based controllers can prepare in v11 towards this.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions with Extbase controllers that throw :php:`StopActionException` or
|
||||
use methods :php:`redirect` or :php:`redirectToUri` from Extbase
|
||||
:php:`\TYPO3\CMS\Extbase\Mvc\Controller\ActionController`
|
||||
are affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
As a goal, Extbase actions will *always* return a
|
||||
:php:`\Psr\Http\Message\ResponseInterface`
|
||||
in v12. v11 prepares towards this, but still throws the :php:`StopActionException`
|
||||
in :php:`redirectToUri`. Developers should prepare towards this.
|
||||
|
||||
Example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function fooAction()
|
||||
{
|
||||
$this->redirect('otherAction');
|
||||
}
|
||||
|
||||
Example compatible with v10, v11 and v12 - IDE's and static code analyzers
|
||||
may complain in v10 and v11, though:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function fooAction(): ResponseInterface
|
||||
{
|
||||
// A return is added!
|
||||
return $this->redirect('otherAction');
|
||||
}
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:extbase
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94367:
|
||||
|
||||
==============================================
|
||||
Deprecation: #94367 - Extbase ReferringRequest
|
||||
==============================================
|
||||
|
||||
See :issue:`94367`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare Extbase towards PSR-7 compatible requests, Extbase class
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Web\ReferringRequest` has been deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Creating an instance of :php:`ReferringRequest` a PHP :php:`E_USER_DEPRECATED`
|
||||
error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
:php:`ReferringRequest` has been mostly Extbase internal and rarely used in
|
||||
Extbase extensions, probably only in cases where
|
||||
:php:`ActionController->forwardToReferringRequest()` is overridden.
|
||||
The extension scanner will find usages with a strong match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Extbase internally, :php:`ReferringRequest` has only been used to
|
||||
immediately create a :php:`ForwardResponse` from it. Consuming extensions
|
||||
should follow his approach and create a :php:`ForwardResponse` directly.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94377:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #94377 - Extbase ObjectManager->getEmptyObject
|
||||
===========================================================
|
||||
|
||||
See :issue:`94377`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Extbase has the odd behavior that
|
||||
:php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface` objects -
|
||||
typically classes in :file:`Classes/Domain/Model` of Extbase enabled
|
||||
extensions - don't call :php:`__construct` when the persistence layer
|
||||
"thaws" a model from database - typically when an Extbase
|
||||
:php:`Domain/Repository` uses a :php:`->findBy*` method.
|
||||
|
||||
As a side-effect of switching away from Extbase :php:`ObjectManager` towards
|
||||
symfony based dependency injection, this behavior will change in TYPO3 v12:
|
||||
Method :php:`__construct()` will be called in v12 when the :php:`DataMapper`
|
||||
creates model instances from database rows.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
There is no impact in TYPO3 v11 and no deprecation log entry is raised.
|
||||
However, extension developers *should* prepare toward this change in v11
|
||||
to avoid any impact of a breaking change in v12.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extbase extensions having domain models that implement :php:`__construct()`
|
||||
are affected. It is rather unlikely this has any impact on the behavior
|
||||
of the extension, though.
|
||||
|
||||
Additionally, calls to API method
|
||||
:php:`TYPO3\CMS\Extbase\Object\ObjectManager->getEmptyObject()` should be
|
||||
avoided since it will vanish in v12. The vast majority of extensions will
|
||||
not do this, though. The extension scanner will find candidates.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible. Simply expect that :php:`__construct()` of a domain
|
||||
model will be called in v12 when a domain repository :php:`findBy` method
|
||||
directly or indirectly reconstitutes a model object from a database row.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94394:
|
||||
|
||||
========================================================================
|
||||
Deprecation: #94394 - Extbase Request setDispatched() and isDispatched()
|
||||
========================================================================
|
||||
|
||||
See :issue:`94394`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further prepare towards PSR-7 requests in Extbase, the two
|
||||
methods :php:`TYPO3\CMS\Extbase\Mvc\Request->setDispatched()` and
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Request->isDispatched()` have been
|
||||
marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the methods is discouraged. The Extbase dispatcher still
|
||||
recognizes them and acts accordingly, the methods do **not** raise
|
||||
a deprecation level log entry, though.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Some Extbase based extensions may use :php:`setDispatched()`, but
|
||||
it's rather unlikely since that flag has been mostly used internally
|
||||
through existing helper methods in Extbase controllers.
|
||||
|
||||
The extension scanner will find possible candidates.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Action dispatching in Extbase now depends on the returned response:
|
||||
|
||||
* A casual 2xx Response from a controller action that for instance contains HTML
|
||||
or Json stops Extbase dispatching, the response is later returned to the client.
|
||||
|
||||
* An Extbase :php:`ForwardResponse` instructs the dispatcher to dispatch
|
||||
internally to another controller action.
|
||||
|
||||
* A 3xx :php:`RedirectResponse` stops dispatching and is returned to the client
|
||||
to initiate some client redirect.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94414:
|
||||
|
||||
=====================================================
|
||||
Deprecation: #94414 - LanguageService container entry
|
||||
=====================================================
|
||||
|
||||
See :issue:`94414`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Instances of :php:`TYPO3\CMS\Core\Localization\LanguageService` require
|
||||
custom initialization with a language key and additionally depend on Core services.
|
||||
:php:`TYPO3\CMS\Core\Localization\LanguageServiceFactory` has therefore
|
||||
previously been introduced in order to manage this initialization.
|
||||
This replaced prior used instantiation via
|
||||
:php:`TYPO3\CMS\Core\Localization\LanguageService::create()` or
|
||||
:php:`GeneralUtility::makeInstance(LanguageService::class)`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Injecting :php:`TYPO3\CMS\Core\Localization\LanguageService` or creating
|
||||
instances via :php:`GeneralUtility::makeInstance(LanguageService::class)`,
|
||||
:php:`LanguageService::create()`, :php:`LanguageService::createFromUserPreferences()`
|
||||
or :php:`LanguageService::createFromSiteLanguage()` will trigger a
|
||||
PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions injecting :php:`TYPO3\CMS\Core\Localization\LanguageService`
|
||||
or creating custom instances via :php:`GeneralUtility::makeInstance(LanguageService::class)`
|
||||
or :php:`TYPO3\CMS\Core\Localization\LanguageService::create()`.
|
||||
|
||||
This is relatively unlikely since most usages are bootstrap related and
|
||||
extensions usually access the prepared LanguageService via :php:`GLOBALS['LANG']`
|
||||
in normal cases.
|
||||
|
||||
Usages of :php:`LanguageService::create()`, :php:`LanguageService::createFromUserPreferences()`
|
||||
and :php:`LanguageService::createFromSiteLanguage()` are be found by the extension scanner
|
||||
as strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The factory :php:`TYPO3\CMS\Core\Localization\LanguageServiceFactory`
|
||||
should be injected and used instead.
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:core
|
||||
@@ -0,0 +1,54 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-89507:
|
||||
|
||||
==================================================
|
||||
Feature: #89507 - Add description for TCA palettes
|
||||
==================================================
|
||||
|
||||
See :issue:`89507`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new TCA property :php:`description` on palettes entry level has been
|
||||
introduced. If provided, the FormEngine will render its value below the
|
||||
palette label, similar to the TCA field description. The value data
|
||||
type is the same as for the palette label: a localized string. This
|
||||
additional help text can therefore be used to clarify some field
|
||||
usages directly in the UI.
|
||||
|
||||
.. note::
|
||||
|
||||
In contrast to the palette label, the description property can not
|
||||
be overwritten on a record type basis.
|
||||
|
||||
Example usage:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'types' => [
|
||||
'0' => [
|
||||
'showitem' => '
|
||||
--div--;palette,
|
||||
--palette--;;palette_1,
|
||||
'
|
||||
]
|
||||
],
|
||||
|
||||
'palettes' => [
|
||||
'palette_1' => [
|
||||
'label' => 'palette_1',
|
||||
'description' => 'palette_1_description',
|
||||
'showitem' => 'palette_field_1, palette_field_2, palette_field_3',
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Integrators now have the ability to add additional information
|
||||
to TCA palettes, supporting editors on their daily work.
|
||||
|
||||
.. index:: Backend, TCA, ext:backend
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-89700:
|
||||
|
||||
=====================================================
|
||||
Feature: #89700 - Show layouts in the Web Info module
|
||||
=====================================================
|
||||
|
||||
See :issue:`89700`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
It's now possible to get an overview of the configured backend and
|
||||
frontend layouts of a page in the :guilabel:`Web->Info` module. Therefore a
|
||||
new entry "Layouts" is available for the page tree overview.
|
||||
|
||||
Besides the "Backend Layout (this page only)", the "Backend Layout (subpages of this page)"
|
||||
and the "Layout" fields, which do all just display the title of the current
|
||||
field value, an additional field "Actual backend layout" is displayed. This
|
||||
field contains the title of the backend layout, which is actually used for
|
||||
the page. If set, this is the same as "Backend Layout (this page only)".
|
||||
Otherwise, it contains the inherited layout from a parent page, which
|
||||
defined "Backend Layout (subpages of this page)".
|
||||
|
||||
This is especially useful for editors to determine the actually used
|
||||
backend layout, which was previously often difficult. For example in
|
||||
installations with large page trees and highly developed inheritance.
|
||||
|
||||
In case the current field value is invalid, e.g. referencing a non-existent
|
||||
backend layout, this is now also shown to the editor.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The :guilabel:`Web->Info` module now contains a new page tree overview type, which
|
||||
contains the layout related fields as well as an additional field,
|
||||
displaying the actually used backend layout for the corresponding page.
|
||||
|
||||
.. index:: Backend, TSConfig, ext:core
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-92358:
|
||||
|
||||
=================================================================
|
||||
Feature: #92358 - Add getModuleTemplate() to PageLayoutController
|
||||
=================================================================
|
||||
|
||||
See :issue:`92358`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`TYPO3\CMS\Backend\Controller\PageLayoutController` features
|
||||
two hooks for manipulating the "Page" module. :php:`drawHeaderHook` and
|
||||
:php:`drawFooterHook`. Those hooks already
|
||||
receive the parent object :php:`PageLayoutController`. Since the calling
|
||||
code expects the hooks to return additional content, it was previously
|
||||
not possible to change other parts of the module, for example the module header.
|
||||
|
||||
To give developers more possibilities in manipulating the "Page" module,
|
||||
using the mentioned hooks, the parent object now contains a new getter
|
||||
method :php:`getModuleTemplate()`. It can for example be used to add an
|
||||
additional button to the modules' button bar.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function drawHeaderHook(array $parameters, PageLayoutController $parentObject)
|
||||
{
|
||||
$moduleTemplate = $parentObject->getModuleTemplate();
|
||||
$buttonBar = $moduleTemplate->getDocHeaderComponent()->getButtonBar();
|
||||
|
||||
$linkButton = $buttonBar
|
||||
->makeLinkButton()
|
||||
->setHref('/typo3/some/url')
|
||||
->setTitle('My custom button')
|
||||
->setClasses('custom-link-class')
|
||||
->setIcon($moduleTemplate->getIconFactory()->getIcon('actions-link', Icon::SIZE_SMALL));
|
||||
|
||||
$buttonBar->addButton($linkButton);
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
When using either the :php:`drawHeaderHook` or the :php:`drawFooterHook` of the
|
||||
:php:`PageLayoutController`, the provided parent object now contains
|
||||
the :php:`getModuleTemplate()` method, which can be used to retrieve
|
||||
the corresponding :php:`\TYPO3\CMS\Backend\Template\ModuleTemplate` instance.
|
||||
This provides more flexibility to third party code manipulating the "Page"
|
||||
module view.
|
||||
|
||||
.. index:: Backend, PHP-API, ext:backend
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-92518:
|
||||
|
||||
===========================================================================
|
||||
Feature: #92518 - Download and filename options added to FileDumpController
|
||||
===========================================================================
|
||||
|
||||
See :issue:`92518`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`\TYPO3\CMS\Core\Controller\FileDumpController` has been extended with
|
||||
the parameters :php:`dl` and :php:`fn`.
|
||||
|
||||
* :php:`dl`: Force download of the file
|
||||
* :php:`fn`: Use an alternative filename
|
||||
|
||||
See the following example on how to create a URI including the new parameters:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
// use TYPO3\CMS\Core\Utility\PathUtility;
|
||||
// use TYPO3\CMS\Core\Core\Environment;
|
||||
$queryParameterArray = [
|
||||
'eID' => 'dumpFile',
|
||||
't' => 'f',
|
||||
'f' => $resourceObject->getUid(),
|
||||
'dl' => true,
|
||||
'fn' => 'alternative-filename.jpg'
|
||||
];
|
||||
$queryParameterArray['token'] =
|
||||
GeneralUtility::hmac(
|
||||
implode('|', $queryParameterArray),
|
||||
'resourceStorageDumpFile'
|
||||
);
|
||||
|
||||
$publicUrl =
|
||||
GeneralUtility::locationHeaderUrl(
|
||||
PathUtility::getAbsoluteWebPath(Environment::getPublicPath() . '/index.php')
|
||||
);
|
||||
$publicUrl .= '?' . http_build_query($queryParameterArray, '', '&', PHP_QUERY_RFC3986);
|
||||
|
||||
This will create a URI from a :sql:`sys_file` record and trigger a download of the
|
||||
file with the alternative filename, using the :html:`Content-Disposition: attachment`
|
||||
header.
|
||||
|
||||
To ease the use of the file dump functionality, also a new ViewHelper
|
||||
is added. See :doc:`FileViewHelper <../11.3/Feature-92518-IntroduceFileViewHelper>`
|
||||
for further information.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The `dumpFile` eID script is now capable of the `dl` parameter, forcing
|
||||
the download of the corresponding file, as well as the `fn` parameter,
|
||||
which can be used to define an alternative file name.
|
||||
|
||||
.. index:: FAL, ext:core
|
||||
@@ -0,0 +1,73 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-92518-1668719172:
|
||||
|
||||
==========================================
|
||||
Feature: #92518 - Introduce FileViewHelper
|
||||
==========================================
|
||||
|
||||
See :issue:`92518`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :doc:`#92518 <../11.3/Feature-92518-DownloadAndFilenameOptionsAddedToFileDumpController>`,
|
||||
the :php:`\TYPO3\CMS\Core\Controller\FileDumpController` has been extended with
|
||||
new options to force the download of a file, as well as the option to define a
|
||||
custom filename.
|
||||
|
||||
To ease the use of the file dump functionality, especially the newly introduced
|
||||
options, a new ViewHelper :php:`TYPO3\CMS\Fluid\ViewHelpers\Link\FileViewHelper`
|
||||
is added, which allows extension authors to easily create links to both public
|
||||
and non-public files.
|
||||
|
||||
The usage is as following:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<f:link.file file="{file}" download="true" filename="alternative-name.jpg">
|
||||
Download file
|
||||
</f:link.file>
|
||||
|
||||
The above example will create a link to the given file, forcing a direct
|
||||
download, while using the alternative filename.
|
||||
|
||||
In case the file is publicly accessible, a direct link will be used. Otherwise
|
||||
the file dump functionality comes into play.
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<!-- Public file -->
|
||||
<a href="https://example.com/fileadmin/path/to/file.jpg"
|
||||
download="alternative-name.jpg"
|
||||
>
|
||||
Download file
|
||||
</a>
|
||||
|
||||
<!-- Non-public file -->
|
||||
<a href="https://example.com/index.php?eID=dumpFile&t=f&f=123&dl=1&fn=alternative-name.jpg&token=79bce812">
|
||||
Download file
|
||||
</a>
|
||||
|
||||
.. note::
|
||||
|
||||
The :php:`file` argument accepts a
|
||||
:php:`\TYPO3\CMS\Core\Resource\FileInterface`. So either a
|
||||
:php:`\TYPO3\CMS\Core\Resource\File`,
|
||||
a :php:`\TYPO3\CMS\Core\Resource\FileReference` or a
|
||||
:php:`\TYPO3\CMS\Core\Resource\ProcessedFile` can be provided.
|
||||
|
||||
.. note::
|
||||
|
||||
The :html:`filename` argument accepts an alternative filename. In case the
|
||||
provided filename contains a file extension, this must be the same
|
||||
as from the :html:`file` object. If file extensions is omitted, the original
|
||||
file extension is automatically appended to the given filename.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new ViewHelper allows creating links to files - even non-public ones -
|
||||
in a straightforward way within Fluid templates.
|
||||
|
||||
.. index:: FAL, Fluid, ext:fluid
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93114:
|
||||
|
||||
=================================================================
|
||||
Feature: #93114 - Native support for language Shona (Bantu) added
|
||||
=================================================================
|
||||
|
||||
See :issue:`93114`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 now supports Shona (Bantu language) - the language of the Shona
|
||||
people of Zimbabwe - out of the box.
|
||||
|
||||
Shona is one of the most widely spoken Bantu languages
|
||||
(`Shona on Wikipedia <https://en.wikipedia.org/wiki/Shona_language>`__).
|
||||
|
||||
The ISO 639-1 code for Shona is "sn", which is how TYPO3
|
||||
is accessing the language internally.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to
|
||||
|
||||
* Fetch translated labels from translations.typo3.org / CrowdIn
|
||||
automatically within the TYPO3 Backend
|
||||
* Switch the Backend Interface to Shona language
|
||||
* Create a new language in a site configuration using Shona
|
||||
* Create translation files with the "sn" prefix (such as `sn.locallang.xlf`)
|
||||
to create your own labels
|
||||
|
||||
and TYPO3 will pick Shona as a language just like any other
|
||||
supported language.
|
||||
|
||||
.. index:: Backend, Frontend, ext:core
|
||||
@@ -0,0 +1,84 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93210:
|
||||
|
||||
==========================================================
|
||||
Feature: #93210 - Possibility to refresh dashboard widgets
|
||||
==========================================================
|
||||
|
||||
See :issue:`93210`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
For some widgets it makes sense for users to be able to refresh the widget
|
||||
without reloading the complete dashboard. Therefore, a new refresh action
|
||||
button will be available in the top right corner of widgets, which have the
|
||||
refresh option enabled.
|
||||
|
||||
To enable the refresh action button, you have to define the
|
||||
:yaml:`refreshAvailable` option in the :yaml:`$options` part of the widget
|
||||
registration. Below is an example of a RSS widget with the refresh option enabled.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
dashboard.widget.myOwnRSSWidget:
|
||||
class: 'TYPO3\CMS\Dashboard\Widgets\RssWidget'
|
||||
arguments:
|
||||
$view: '@dashboard.views.widget'
|
||||
$cache: '@cache.dashboard.rss'
|
||||
$options:
|
||||
rssFile: 'https://typo3.org/rss'
|
||||
lifeTime: 43200
|
||||
refreshAvailable: true
|
||||
tags:
|
||||
- name: dashboard.widget
|
||||
identifier: 'myOwnRSSWidget'
|
||||
groupNames: ‘general’
|
||||
title: 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:widgets.myOwnRSSWidget.title'
|
||||
description: 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:widgets.myOwnRSSWidget.description'
|
||||
iconIdentifier: 'content-widget-rss'
|
||||
height: 'medium'
|
||||
width: 'medium'
|
||||
|
||||
.. note::
|
||||
|
||||
In this example, the TYPO3 Core :php:`TYPO3\CMS\Dashboard\Widgets\RssWidget`
|
||||
widget class is used. In case you have implemented own widget classes, you
|
||||
have to add the :php:`getOptions()` method, returning :php:`$this->options`,
|
||||
to the corresponding classes. Otherwise the refresh option won't have any
|
||||
effect. The method will anyways be required by the :php:`WidgetInterface`
|
||||
in TYPO3 v12.
|
||||
|
||||
JavaScript API
|
||||
==============
|
||||
|
||||
Besides having a refresh action button on widgets, which have the new option
|
||||
enabled, it is possible for all widgets to dispatch an event, which will cause
|
||||
the widget being refreshed. This is possible for all widgets on the dashboard
|
||||
even when the :yaml:`refreshAvailable` option is not defined, or set to `false`.
|
||||
This will give developers the option to refresh the widgets whenever they think
|
||||
it is appropriate.
|
||||
|
||||
You therefore need to dispatch the :js:`widgetRefresh` event on the
|
||||
widget container (the :html:`div` element with the :html:`dashboard-item` class).
|
||||
You can identify the container by the data attribute :html:`widget-hash`, which
|
||||
is a unique hash for every widget, even if you have more widgets of the same
|
||||
type on your dashboard.
|
||||
|
||||
A small example below:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
document
|
||||
.querySelector('[data-widget-hash="{your-unique-widget-hash}"]')
|
||||
.dispatchEvent(new Event('widgetRefresh', {bubbles: true}));
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Widgets with the option :yaml:`refreshAvailable` set to `true`, will now
|
||||
feature a refresh action button in the top right corner of the widget.
|
||||
|
||||
.. index:: Backend, ext:beuser
|
||||
@@ -0,0 +1,23 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93631:
|
||||
|
||||
=====================================
|
||||
Feature: #93631 - Support for PHP 8.0
|
||||
=====================================
|
||||
|
||||
See :issue:`93631`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 Core is now compatible with PHP 8.0, which is officially supported
|
||||
with security updates until 26th November 2023.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
TYPO3 can now be installed on systems running with PHP 8.0.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93668:
|
||||
|
||||
=========================================================
|
||||
Feature: #93668 - Possibility to configure Symfony mailer
|
||||
=========================================================
|
||||
|
||||
See :issue:`93668`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The install tool has now the possibility to configure the Symfony mailer with
|
||||
DSN. Symfony provides different mail transports like SMTP, sendmail or many 3rd
|
||||
party email providers like AWS SES, Gmail, MailChimp, Mailgun and more. You can
|
||||
find all supported providers in the
|
||||
`Symfony documentation <https://symfony.com/doc/current/mailer.html>`__.
|
||||
|
||||
In the module :guilabel:`Admin tools > Settings` go to the card
|
||||
:guilabel:`Configure Installation-Wide Options` and open the dialog.
|
||||
Select :guilabel:`Mail` and set :php:`[MAIL][transport]` to :php:`dsn`.
|
||||
|
||||
Additionally set :php:`[MAIL][dsn]` like described in the Symfony documentation.
|
||||
|
||||
Examples:
|
||||
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['MAIL']['dsn'] = "smtp://user:pass@smtp.example.com:25"`
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['MAIL']['dsn'] = "sendmail://default"`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If :php:`[MAIL][transport]` is set to :php:`dsn` all mails are sent with your
|
||||
configured DSN.
|
||||
|
||||
.. index:: LocalConfiguration, ext:core
|
||||
@@ -0,0 +1,109 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93825:
|
||||
|
||||
=================================================
|
||||
Feature: #93825 - Rate limiting for failed logins
|
||||
=================================================
|
||||
|
||||
See :issue:`93825`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 backend and frontend login now uses a rate limiter by default,
|
||||
which prevents further authentication attempts for an IP address,
|
||||
if a configurable amount of login attempts is exceeded in a given time.
|
||||
|
||||
The hardcoded wait time of 5 seconds after a failed login has been removed,
|
||||
since it offers no real protection against brute force attacks and may
|
||||
result in unwanted side effects.
|
||||
|
||||
.. important::
|
||||
|
||||
Rate limiters do not provide a useful protection against DoS attacks.
|
||||
They should be used to limit the amount of requests to certain routes
|
||||
(for example login or form submission) of an application.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
TYPO3 ships with a rate limiter for backend and frontend authentication.
|
||||
It implements the "Sliding Window Rate Limiter" allowing to define a
|
||||
maximum amount of login attempts for a given range of time before further login
|
||||
attempts will be denied for the remote IP address.
|
||||
|
||||
A configurable list of IP addresses allows to exclude certain IP addresses or IP
|
||||
address blocks from being rate limited.
|
||||
|
||||
The rate limiter utilizes the TYPO3 caching framework as storage for
|
||||
rate limiter states. The rate limiter takes care of garbage collection
|
||||
for affected cache tables on every login request.
|
||||
|
||||
Note, that clearing the system cache will purge all limiter states.
|
||||
|
||||
Backend login
|
||||
-------------
|
||||
|
||||
The rate limiter :php:`Symfony\Component\RateLimiter\LoginRateLimiter`
|
||||
for the TYPO3 backend login is enabled by
|
||||
default and configured with the following default values:
|
||||
|
||||
* Maximum 5 login attempts for a timeframe of 15 minutes
|
||||
* No IP address excluded
|
||||
|
||||
When the maximum amount of login attempts has exceeded, a
|
||||
:php:`\TYPO3\CMS\Core\RateLimiter\RequestRateLimitedException`
|
||||
exception is thrown. The exception implements
|
||||
:php:`\TYPO3\CMS\Core\Error\Http\AbstractClientErrorException`
|
||||
resulting in a user readable error message together with a 403 HTTP status code.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The rate limiter for the TYPO3 backend can be configured using the
|
||||
Settings module or the Install tool. The following new configuration
|
||||
values are available:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['BE']['loginRateLimit'] = 5;
|
||||
$GLOBALS['TYPO3_CONF_VARS']['BE']['loginRateLimitInterval'] = '15 minutes';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['BE']['loginRateLimitIpExcludeList'] = '';
|
||||
|
||||
Setting `[BE][loginRateLimit] = 0` will disable rate limiting. The same
|
||||
applies, if `[BE][loginRateLimitIpExcludeList] = '*'` is configured.
|
||||
|
||||
The provided defaults for `[BE][loginRateLimitInterval]` can be customized
|
||||
in `AdditionalConfiguration.php` by configuring a date/time string following
|
||||
PHP relative formats.
|
||||
|
||||
Frontend login
|
||||
--------------
|
||||
|
||||
The rate limiter for the TYPO3 frontend login is enabled by
|
||||
default and configured with the following default values:
|
||||
|
||||
* Maximum 10 login attempts for a timeframe of 15 minutes
|
||||
* No IP address exclude list
|
||||
|
||||
When the maximum amount of login attempts is exceeded, a
|
||||
:php:`\TYPO3\CMS\Core\RateLimiter\RequestRateLimitedException`
|
||||
exception is thrown. The exception implements
|
||||
:php:`\TYPO3\CMS\Core\Error\Http\AbstractClientErrorException`
|
||||
resulting in a user readable error message together with a 403 HTTP status code.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Configuration is similar to the rate limiter for the backend login.
|
||||
|
||||
The following new configuration values are available:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['loginRateLimit'] = 10;
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['loginRateLimitInterval'] = '15 minutes';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['loginRateLimitIpExcludeList'] = '';
|
||||
|
||||
.. index:: Backend, Frontend, ext:core
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93835:
|
||||
|
||||
====================================================================
|
||||
Feature: #93835 - AddErrorForProperty function for AbstractValidator
|
||||
====================================================================
|
||||
|
||||
See :issue:`93835`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When validating Extbase models, it could be helpful to assign the encountered
|
||||
error to a certain property. This is already possible by using
|
||||
:php:`$this->result->forProperty($propertyPath)->addError($error);`. This
|
||||
method however is cumbersome and requires knowledge about the result object.
|
||||
To ease the pain for developers, a convenience method :php:`addErrorForProperty`
|
||||
is now available.
|
||||
|
||||
Use it like this in a validator class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
public function isValid(): void
|
||||
{
|
||||
// validation
|
||||
$this->addErrorForProperty(
|
||||
'object.property.name',
|
||||
$this->translateErrorMessage(
|
||||
'validator.errormessage',
|
||||
'my-ext'
|
||||
),
|
||||
// tstamp_of_now_as_errorcode
|
||||
123456789
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new method enables developers adding custom error messages to validation
|
||||
results of properties in a convenient way.
|
||||
|
||||
.. index:: ext:extbase
|
||||
@@ -0,0 +1,70 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93921:
|
||||
|
||||
=======================================
|
||||
Feature: #93921 - Sharing backend links
|
||||
=======================================
|
||||
|
||||
See :issue:`93921`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With the introduction of backend URL rewrites in :issue:`93048` and
|
||||
the backend module web component router in :issue:`93988`, it's finally
|
||||
possible to share backend URLs between each other.
|
||||
|
||||
To ease the use of this, the
|
||||
:php:`\TYPO3\CMS\Backend\Template\Components\Buttons\Action\ShortcutButton` is
|
||||
extended for
|
||||
a new option :php:`$copyUrlToClipboard`, which defaults to :php:`true`.
|
||||
This option extends the shortcut button in the module header of a backend
|
||||
module. Therefore, the button's icon is also changed. On click, a dropdown
|
||||
opens, including the additional possibility to copy the current backend URL
|
||||
directly to the operating system's clipboard, next to the already existing
|
||||
bookmark option.
|
||||
|
||||
For the dropdown button, a new icon :php:`share-alt` is registered, which can
|
||||
be used through the :php:`IconFactory`.
|
||||
|
||||
In case you are using the shortcut API in your custom backend module and
|
||||
don't want to use this additional option, you can disabled it by setting
|
||||
:php:`$shortcutButton->setCopyUrlToClipboard(false)`. If disabled, the
|
||||
shortcut button is rendered with the same behaviour as before.
|
||||
|
||||
.. note::
|
||||
|
||||
Since both ViewHelpers, :html:`<be:moduleLayout.button.shortcutButton>`
|
||||
as well as :html:`<f:be.buttons.shortcut>` are deprecated, the new option
|
||||
is not available for those. In case you are currently using one of those
|
||||
ViewHelpers, but still want to profit from the new option in your custom
|
||||
backend modules, you have to create the shortcut button in the corresponding
|
||||
controller using the shortcut API. This will anyways be required in TYPO3 v12.
|
||||
|
||||
Besides the new option for the :php:`ShortcutButton`, a new constant
|
||||
:php:`SHAREABLE_URL` is available in the :php:`UriBuilder`. It can be
|
||||
used as value for the :php:`$referenceType` parameter, which is available
|
||||
for most of the "buildUri" methods, for example :php:`UriBuilder->buildUriFromRoute()`.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$uri = $uriBuilder->buildUriFromRoute($routeName, $arguments, UriBuilder::SHAREABLE_URL);
|
||||
|
||||
The above example will return an absolute URL without the automatically
|
||||
created token parameter.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the new option is enabled, instead of the shortcut button, a dropdown
|
||||
menu is displayed in the module header, including two options:
|
||||
|
||||
* Option to add a shortcut to the current page
|
||||
* Option to copy the URL of the current page to the operating system's clipboard
|
||||
|
||||
When setting :php:`UriBuilder::SHAREABLE_URL` as :php:`$referenceType` in
|
||||
one of the "buildUri" methods supporting this parameter, a shareable URL
|
||||
will be returned.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94081:
|
||||
|
||||
===========================================
|
||||
Feature: #94081 - TCA readOnly for t3editor
|
||||
===========================================
|
||||
|
||||
See :issue:`94081`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TCA :php:`'type' => 'text'` (textarea) based FormEngine
|
||||
render type :php:`'renderType' => 't3editor'` now supports the
|
||||
:php:`'readOnly' => true` option. If set, syntax highlighting
|
||||
is applied as usual, but the corresponding text can not be edited.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
't3editor_2' => [
|
||||
'label' => 't3editor_2',
|
||||
'description' => 'readOnly=true',
|
||||
'config' => [
|
||||
'type' => 'text',
|
||||
'renderType' => 't3editor',
|
||||
'format' => 'html',
|
||||
'readOnly' => true,
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This minor feature allows rendering highlighted code without the edit option.
|
||||
|
||||
.. index:: Backend, TCA, ext:backend
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94143:
|
||||
|
||||
====================================================
|
||||
Feature: #94143 - Display creation date of redirects
|
||||
====================================================
|
||||
|
||||
See :issue:`94143`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The EXT:redirects system extension provides a straightforward way of managing
|
||||
redirects within a TYPO3 installation. The corresponding backend module
|
||||
can be used to filter, create and analyse those redirects.
|
||||
|
||||
Measuring the redirects performance is possible via the "Redirects hit count"
|
||||
feature, which - if enabled - displays the amount of hits for each redirect
|
||||
in the listing. More detailed information, for example the last hit, are
|
||||
available in the records' "Statistics" tab.
|
||||
|
||||
This tab is now extended to also display the creation date of the redirect.
|
||||
This is especially useful to set the amount of hits in relation to the period
|
||||
of the redirect existence.
|
||||
|
||||
.. note::
|
||||
|
||||
The creation date will only be shown if the "Redirects hit count"
|
||||
feature is enabled, see:
|
||||
:doc:`#83677 <../9.1/Feature-83677-GloballyDisableenableRedirectHitStatistics>`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The creation date of a redirect is now shown in the :guilabel:`Statistics` tab
|
||||
of the record's editing mask.
|
||||
|
||||
.. index:: Backend, TCA, ext:redirects
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94206:
|
||||
|
||||
============================================================================
|
||||
Feature: #94206 - Add excludePagesRecursive option to XML sitemap generation
|
||||
============================================================================
|
||||
|
||||
See :issue:`94206`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With this option you can exclude pages recursively in the XML sitemap:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
pages {
|
||||
config {
|
||||
# comma-separated list of page UIDs which should be excluded recursively
|
||||
excludePagesRecursive = 2,3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new option enables integrators to easily exclude pages recursively in the XML sitemap
|
||||
|
||||
.. index:: ext:seo
|
||||
@@ -0,0 +1,23 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94210:
|
||||
|
||||
============================================================
|
||||
Feature: #94210 - Information about inherited backend layout
|
||||
============================================================
|
||||
|
||||
See :issue:`94210`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When editing a page record, the field :php:`pages.backend_layout_next_level` can
|
||||
be used to apply a backend layout to all subpages.
|
||||
|
||||
This can make it difficult for the editor to determine the currently applied
|
||||
backend layout. To help the editor in case of an inherited layout a message
|
||||
is now displayed below the :php:`pages.backend_layout` field label via a
|
||||
new FormEngine field information.
|
||||
|
||||
|
||||
.. index:: Backend, TCA, ext:backend
|
||||
@@ -0,0 +1,52 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94218:
|
||||
|
||||
=============================================================
|
||||
Feature: #94218 - Selectable columns per table in record list
|
||||
=============================================================
|
||||
|
||||
See :issue:`94218`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Record List (commonly known from the list module) previously allowed to
|
||||
select specific columns for a table at the bottom of the module via the
|
||||
so-called "field selector".
|
||||
|
||||
This approach had several drawbacks:
|
||||
|
||||
* UX-wise the selection was not directly visible for users, as the component was
|
||||
separated at the module page at the bottom
|
||||
* Only possible to select fields explicitly in the "single-table view"
|
||||
|
||||
Instead, this feature - the column selector - is now available at all times in
|
||||
the title row of each table, regardless of the single-table-view, making it
|
||||
much more appealing and prominent to use for editors.
|
||||
|
||||
This feature is active by default, and can be disabled via UserTSconfig per
|
||||
table or completely for a specific user or usergroup.
|
||||
|
||||
Use cases / examples via UserTSconfig:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
# disable the column selector for tt_content
|
||||
mod.web_list.table.tt_content.displayColumnSelector = 0
|
||||
|
||||
# disable the column selector completely
|
||||
mod.web_list.displayColumnSelector = 0
|
||||
|
||||
# Disable the column selector everywhere except for a specific table
|
||||
mod.web_list.displayColumnSelector = 0
|
||||
mod.web_list.table.sys_category.displayColumnSelector = 1
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The field selector at the bottom is not available anymore,
|
||||
it has been replaced by a dropdown selector at the top of each table.
|
||||
|
||||
.. index:: Backend, TSConfig, ext:recordlist
|
||||
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94345:
|
||||
|
||||
=========================================
|
||||
Feature: #94345 - Auto-detect event types
|
||||
=========================================
|
||||
|
||||
See :issue:`94345`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
If no "event" tag is specified on an event listener in Services.yaml, the
|
||||
event is automatically derived from the event method itself using reflection.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
In the vast majority of cases, the "event" tag on an event listener in Services.yaml
|
||||
is no longer necessary.
|
||||
|
||||
Given this example event listener implementation:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
final class CategoryPermissionsAspect
|
||||
{
|
||||
public function addUserPermissionsToCategoryTreeData(ModifyTreeDataEvent $event): void
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
With this registration:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
TYPO3\CMS\Backend\Security\CategoryPermissionsAspect:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'backend-user-permissions'
|
||||
method: 'addUserPermissionsToCategoryTreeData'
|
||||
event: TYPO3\CMS\Core\Tree\Event\ModifyTreeDataEvent
|
||||
|
||||
|
||||
The :yaml:`event:` tag can be omitted, since it's automatically read from
|
||||
the method signature :php:`addUserPermissionsToCategoryTreeData(ModifyTreeDataEvent $event)`
|
||||
of the listener implementation:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
TYPO3\CMS\Backend\Security\CategoryPermissionsAspect:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'backend-user-permissions'
|
||||
method: 'addUserPermissionsToCategoryTreeData'
|
||||
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94374:
|
||||
|
||||
=====================================================================
|
||||
Feature: #94374 - Create new file mount via the folder's context menu
|
||||
=====================================================================
|
||||
|
||||
See :issue:`94374`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`sys_filemounts` records are an important feature, which
|
||||
allows administrators to restrict their users to specific folders
|
||||
in a file storage.
|
||||
|
||||
The workflow however was always to first create the folder in the
|
||||
"Filelist" module and afterwards switch to the list module to create
|
||||
a new :php:`sys_filemounts` record for this folder. This furthermore
|
||||
always required the administrator to select both, the storage and
|
||||
the previously created folder, in the new record.
|
||||
|
||||
To ease the use for administrators, the context menu of folders is
|
||||
extended with a new option "New Filemount". Using this option opens
|
||||
the FormEngine with a new :php:`sys_filemounts` record, having the
|
||||
correct storage and folder prefilled.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to create new file mounts directly in the Filelist
|
||||
module, using the new "New Filemount" option in the folder's context
|
||||
menu. This option also prefills the new record with the correct storage
|
||||
and folder values.
|
||||
|
||||
.. index:: Backend, ext:filelist
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94390:
|
||||
|
||||
==================================================================================
|
||||
Feature: #94390 - Dropdown for record list and file list in favor of Extended View
|
||||
==================================================================================
|
||||
|
||||
See :issue:`94390`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The option "Extended View", which was used in the TYPO3 Backend
|
||||
modules :guilabel:`Web => List` and :guilabel:`File => Filelist` to show
|
||||
additional icons, has been removed in favor of a dropdown with all items which is
|
||||
always available.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This change is added as a user experience improvement over an additional
|
||||
configuration option to give editors a unified experience, as
|
||||
the additional menu with alternative items is common in other
|
||||
web applications.
|
||||
|
||||
The TSconfig options `options.file_list.enableDisplayBigControlPanel`
|
||||
and `mod.web_list.enableDisplayBigControlPanel` have no effect anymore,
|
||||
because the checkboxes are removed.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,51 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94411:
|
||||
|
||||
===============================================
|
||||
Feature: #94411 - Record list download settings
|
||||
===============================================
|
||||
|
||||
See :issue:`94411`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In :issue:`94366`, the record download functionality in the List
|
||||
module was improved. Since then, the download could be triggered via a
|
||||
button in each table's header and no longer just in the single table view.
|
||||
|
||||
The download however did still not allow to adjust any settings, such as
|
||||
the definition of a custom filename. Furthermore, only CSV was available
|
||||
as possible download format.
|
||||
|
||||
Therefore, and to further improve the already existing record download
|
||||
functionality, the download button in the table's header does not longer
|
||||
trigger the download directly, but opens a modal with various adjustable
|
||||
download settings such as:
|
||||
|
||||
* Selection of columns to download: All columns or selected columns
|
||||
* Selection of the record values format: Either raw database values
|
||||
or processed (resolved) values
|
||||
* Definition of a custom filename
|
||||
* Selection of the download format (for example CSV)
|
||||
|
||||
Also download format specific options are available, for example selection of
|
||||
the delimiter for CSV downloads.
|
||||
|
||||
In case your installation already defines related TSconfig options
|
||||
(for example :typoscript:`mod.web_list.csvDelimiter`), they will be added
|
||||
as default value to the configuration modal.
|
||||
|
||||
Besides introducing those settings, also JSON is now available as
|
||||
an alternative download format, including a format specific option,
|
||||
which allows to define additional meta information to be included in
|
||||
the download.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to configure the download of records in the
|
||||
record list. Furthermore, the new format option :php:`json` is available.
|
||||
|
||||
.. index:: Backend, ext:recordlist
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94428:
|
||||
|
||||
===================================================================
|
||||
Feature: #94428 - Extbase Request implements ServerRequestInterface
|
||||
===================================================================
|
||||
|
||||
See :issue:`94428`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Extbase :php:`TYPO3\CMS\Extbase\Mvc\Request` now implements
|
||||
the PSR-7 :php:`ServerRequestInterface` and thus holds all request
|
||||
related information of the main Core request in addition to the
|
||||
plugin namespace specific Extbase arguments.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This allows getting information of the main request especially within
|
||||
Extbase controllers from :php:`$this->request`.
|
||||
|
||||
Developers of Fluid ViewHelpers can now retrieve the main PSR-7 request
|
||||
in many contexts from :php:`$renderingContext->getRequest()`, in addition
|
||||
to the Extbase specific information specified by
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Request\RequestInterface`.
|
||||
|
||||
Note that with future patches, the request assigned to ViewHelper
|
||||
:php:`RenderingContext` may NOT implement Extbase
|
||||
:php:`TYPO3\CMS\Extbase\Mvc\Request\RequestInterface` anymore, and
|
||||
only PSR-7 :php:`ServerRequestInterface`. This will be the case when the
|
||||
ViewHelper is not called from within an Extbase plugin, but when Fluid
|
||||
is started as "standalone view" in non-extbase based plugins: Often in
|
||||
backend scenarios like toolbars, doc headers, non-extbase modules, etc.
|
||||
Extensions should thus test for instance of Extbase :php:`RequestInterface`
|
||||
if they don't know the context and rely on Extbase specific request data.
|
||||
|
||||
|
||||
.. index:: PHP-API, ext:extbase
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94447:
|
||||
|
||||
=========================================================
|
||||
Feature: #94447 - Native support for language Welsh added
|
||||
=========================================================
|
||||
|
||||
See :issue:`94447`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 now supports Welsh (historically known as "Cymbric"). Welsh is part
|
||||
of the Celtic language family - is the official language in Wales, which is
|
||||
part of the United Kingdom.
|
||||
|
||||
The ISO 639-1 code for Welsh is "cy", which is how TYPO3
|
||||
is accessing the language internally.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to
|
||||
|
||||
* Fetch translated labels from translations.typo3.org / CrowdIn automatically
|
||||
within the TYPO3 Backend
|
||||
* Switch the backend interface to Welsh language
|
||||
* Create a new language in a site configuration using Welsh
|
||||
* Create translation files with the "cy" prefix (such as `cy.locallang.xlf`)
|
||||
to create your own labels
|
||||
|
||||
and TYPO3 will pick Welsh as a language just like any other supported language.
|
||||
|
||||
.. index:: Backend, Frontend, ext:core
|
||||
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94452:
|
||||
|
||||
============================================================
|
||||
Feature: #94452 - Improved multi-selection in file selection
|
||||
============================================================
|
||||
|
||||
See :issue:`94452`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The file selector, which is used in TYPO3 Backend, to choose one
|
||||
or multiple files to be connected via :sql:`sys_file_reference` in the
|
||||
FormEngine, has been improved to have a better visual option
|
||||
when selecting multiple records.
|
||||
|
||||
Previously, there was a checkbox button at the end of each file row. The
|
||||
checkbox is now re-ordered and moved to the beginning
|
||||
of each row and is now based on our TYPO3 Icon Set.
|
||||
|
||||
In addition, the view is more compact and when selecting multiple
|
||||
items there is an option to select all items, no items or to toggle the
|
||||
selection. The :guilabel:`Import selection` button now has a visual text next to
|
||||
the icon, making it clearer what this button does.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Selection of files is now quicker to grasp for editors working
|
||||
with files.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94474:
|
||||
|
||||
================================================================
|
||||
Feature: #94474 - Improved show columns selection in record list
|
||||
================================================================
|
||||
|
||||
See :issue:`94474`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since :issue:`94218`, the column selector in the record list,
|
||||
formerly known as "field selector", is available for each
|
||||
individual record type in its table header. When accessing
|
||||
the selector, a dropdown opened, displaying all available
|
||||
columns.
|
||||
|
||||
This was already a huge improvement, as the selection was
|
||||
now directly bound to the corresponding table and was
|
||||
always available, not only in the "single-table view".
|
||||
|
||||
However, there were still some drawbacks, especially the fact
|
||||
that the dropdown solution could lead to confusion in case a
|
||||
record contains a couple of columns with long labels. Therefore,
|
||||
the column selection has been improved and is now not longer
|
||||
opened in a dropdown, but lives in a clear and large enough modal.
|
||||
|
||||
In the new modal, besides the columns to select, there are three
|
||||
new options available:
|
||||
|
||||
* Option to select all columns
|
||||
* Option to unselect all columns
|
||||
* Option to toggle (invert) the current selection
|
||||
|
||||
Those options are also fixed at the top, so they are always
|
||||
visible, even for records with a lot of columns, for example `pages`.
|
||||
|
||||
Management fields, such as `uid` or `cr_date` are now displayed
|
||||
with human-readable labels, making them more useful for editors.
|
||||
Especially because those labels are not only used in the selector,
|
||||
but are now also displayed in the record list table header.
|
||||
|
||||
Furthermore, the columns are now sorted lexically, while always
|
||||
enabled columns, such as the record title, are always at the top
|
||||
and all columns, not having a label, are added at the end of the list.
|
||||
|
||||
The checkboxes are improved in their size and appearance. Instead of
|
||||
the usual "check" icon, an "eye" icon is used, making the intention
|
||||
clear.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The column selector of each table in the record list now opens
|
||||
a modal with improved selection functionality and an overall
|
||||
improved UX.
|
||||
|
||||
.. index:: Backend, ext:recordlist
|
||||
@@ -0,0 +1,25 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94524:
|
||||
|
||||
===============================================================
|
||||
Feature: #94524 - Edit metadata for a file via the context menu
|
||||
===============================================================
|
||||
|
||||
See :issue:`94524`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Editing metadata of files is an important task for editors.
|
||||
To ease the use, the context menu for files has been extended
|
||||
by a new option :guilabel:`Edit metadata of this file`, which can be
|
||||
used to direly jump into the corresponding editing mask.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to edit a file's metadata directly via the
|
||||
context menu.
|
||||
|
||||
.. index:: Backend, ext:filelist
|
||||
@@ -0,0 +1,50 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-91496:
|
||||
|
||||
===========================================================
|
||||
Important: #91496 - Changes to password reset functionality
|
||||
===========================================================
|
||||
|
||||
See :issue:`91496`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
For various reasons, administrators may disable the password reset functionality,
|
||||
introduced in :issue:`89513`, by setting
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset']= false`.
|
||||
If disabled, TYPO3 Backend users are not able to initiate the
|
||||
password reset process anymore.
|
||||
|
||||
This however previously also disabled the password reset cli command as well as
|
||||
the reset password action in the backend user module. Since it is a valid
|
||||
use case for administrators to disallow a password reset initiated by users on
|
||||
the login screen, they might still need the possibility to do so, on their own.
|
||||
|
||||
Therefore, some things changed in the password reset implementation:
|
||||
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset']` now only
|
||||
affects the password reset functionality on the login screen
|
||||
* :php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordResetForAdmins']` is
|
||||
unchanged and affects all places
|
||||
* Initiating the password reset on CLI is now always enabled, while still
|
||||
taking the `passwordResetForAdmins` option into account
|
||||
* Initiating the password reset in the backend can now be disabled separately
|
||||
with a new user TSconfig option :typoscript:`options.passwordReset`
|
||||
|
||||
For compatibility reasons, the new user TSconfig option defaults to :php:`true`.
|
||||
To completely disable the password reset in the backend for all users, you can
|
||||
set the user TSconfig globally in your :php:`ext_localconf.php`:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// use \TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
ExtensionManagementUtility::addUserTSConfig(
|
||||
'options.passwordReset = 0'
|
||||
);
|
||||
|
||||
If required, this can of course still be overwritten on a per user basis
|
||||
in the corresponding :guilabel:`TSconfig` field.
|
||||
|
||||
.. index:: Backend, CLI, TSConfig, ext:backend
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94312:
|
||||
|
||||
===================================================================================
|
||||
Important: #94312 - Removed BE/loginSecurityLevel and FE/loginSecurityLevel options
|
||||
===================================================================================
|
||||
|
||||
See :issue:`94312`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The `FE/loginSecurityLevel` and `BE/loginSecurityLevel` options were used to
|
||||
define the security level of the backend and frontend login. Since dropping
|
||||
the two possibilities `challenged` and `superchallenged` in v7, `rsa` and
|
||||
`normal` were the only two valid values left.
|
||||
|
||||
The `rsa` value however also became more or less obsolete, after dropping
|
||||
`EXT:rsaauth` from Core in :issue:`87470`. Setting `rsa` therefore only had
|
||||
effect in case the standalone `friendsoftypo3/rsaauth` extension was installed.
|
||||
|
||||
Finally, with :issue:`94279` also the support for the standalone
|
||||
`friendsoftypo3/rsaauth` was abandoned, making the `loginSecurityLevel`
|
||||
option superfluous, as `normal` was left as the only valid option.
|
||||
|
||||
Therefore, both options `FE/loginSecurityLevel` and `BE/loginSecurityLevel`
|
||||
have been removed. As a result and to follow our backwards-compatibility promise,
|
||||
all authentication services will still receive the `$passwordTransmissionStrategy`
|
||||
argument in their :php:`processLoginData()` method, which however will now
|
||||
always be `normal`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The options have been removed from the TYPO3's default configuration.
|
||||
When those options have been set in your :php:`LocalConfiguration.php`
|
||||
or :php:`AdditionalConfiguration.php` files, they are automatically
|
||||
removed when accessing the Install Tool or System Maintenance area.
|
||||
|
||||
.. index:: LocalConfiguration, ext:core
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94315:
|
||||
|
||||
=================================================================
|
||||
Important: #94315 - Use proper PSR-3 logging messages and context
|
||||
=================================================================
|
||||
|
||||
See :issue:`94315`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The v11 Core is looking into proper PSR-3 Logging implementation again. When
|
||||
analyzing the current situation, we realized many Core logging calls were
|
||||
using messages that violated the PSR-3
|
||||
`placeholder specification <https://www.php-fig.org/psr/psr-3/>`__.
|
||||
|
||||
The v11 Core fixed all places, but it's likely extensions have this issue,
|
||||
too. Extension developers should have a look at their logger calls and adapt
|
||||
them if necessary.
|
||||
|
||||
Typical call before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$this->logger->alert(
|
||||
'Password reset requested for email "' .
|
||||
$emailAddress . '" . but was requested too many times.'
|
||||
);
|
||||
|
||||
Correct call:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$this->logger->alert(
|
||||
'Password reset requested for email {email} but was requested too many times.',
|
||||
['email' => $emailAddress]
|
||||
);
|
||||
|
||||
First argument is :php:`message`, second (optional) argument is :php:`context`.
|
||||
A message can use :php:`{placeholders}`.
|
||||
|
||||
All Core provided log writers will substitute placeholders in the message
|
||||
with data from the context array, if a context array key with same name exists.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,53 @@
|
||||
:template: changelogOverview.html
|
||||
.. include:: /Includes.rst.txt
|
||||
.. _changelog-11-3:
|
||||
|
||||
============
|
||||
11.3 Changes
|
||||
============
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
:depth: 1
|
||||
|
||||
Breaking Changes
|
||||
================
|
||||
|
||||
None since TYPO3 v11.0 release.
|
||||
|
||||
.. attention::
|
||||
|
||||
After TYPO3 v11.0, only new functionality with a solid migration path can be added on top,
|
||||
with aiming for as little as possible breaking changes after the initial v11.0 release on the way to LTS.
|
||||
|
||||
Features
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Feature-*
|
||||
|
||||
Deprecation
|
||||
===========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Deprecation-*
|
||||
|
||||
Important
|
||||
=========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Important-*
|
||||
Reference in New Issue
Block a user