TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85613:
|
||||
|
||||
=======================================
|
||||
Deprecation: #85613 - Category Registry
|
||||
=======================================
|
||||
|
||||
See :issue:`85613`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :issue:`94622` the new TCA type `category` has been introduced
|
||||
as a replacement for the :php:`\TYPO3\CMS\Core\Category\CategoryRegistry`.
|
||||
Therefore, the :php:`CategoryRegistry` together with
|
||||
:php:`\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable()`
|
||||
method have been marked as deprecated and will be removed in TYPO3 v12.
|
||||
|
||||
The main reasons for this replacement are:
|
||||
|
||||
* Using a dedicated type is more intuitive and consistent
|
||||
* No more :file:`TCA/Overrides` are necessary for defining category fields
|
||||
* The new implementation is state of the art (e.g. direct usage of
|
||||
the Doctrine API for automatically adding the database columns)
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Defining category fields for tables with
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['defaultCategorizedTables']` or
|
||||
by calling :php:`ExtensionManagementUtility::makeCategorizable()` will
|
||||
trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
The extension scanner will furthermore detect any call to
|
||||
:php:`ExtensionManagementUtility::makeCategorizable()` and
|
||||
:php:`CategoryRegistry` as strong match and any usage of
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['defaultCategorizedTables']`
|
||||
as weak match.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations registering category fields using
|
||||
:php:`ExtensionManagementUtility::makeCategorizable()` or defining
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['defaultCategorizedTables']`.
|
||||
|
||||
Furthermore, all installations, which directly access the :php:`CategoryRegistry`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Directly define category fields in the corresponding TCA, using the :php:`category`
|
||||
TCA type. Have a look at the corresponding
|
||||
:doc:`changelog <../11.4/Feature-94622-NewTCATypeCategory>`, for code
|
||||
examples.
|
||||
|
||||
.. index:: PHP-API, TCA, PartiallyScanned, ext:core
|
||||
@@ -0,0 +1,63 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94619:
|
||||
|
||||
===========================================
|
||||
Deprecation: #94619 - Extbase ObjectManager
|
||||
===========================================
|
||||
|
||||
See :issue:`94619`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Extbase ObjectManager as the legacy core object lifecycle and
|
||||
dependency injection solution has been marked discouraged with TYPO3 v10 and
|
||||
its introduction of the Symfony based dependency injection solution already.
|
||||
|
||||
TYPO3 v11 no longer uses the Extbase ObjectManager - only in a couple
|
||||
of places as fallback for third party extensions. The entire construct has now
|
||||
been marked as deprecated and will be removed with v12:
|
||||
|
||||
* :php:`TYPO3\CMS\Extbase\Object\ObjectManagerInterface` - Main interface
|
||||
* :php:`TYPO3\CMS\Extbase\Object\ObjectManager` - Main implementation
|
||||
* :php:`TYPO3\CMS\Extbase\Object\Container\Container` - Internal lifecycle management
|
||||
* :php:`TYPO3\CMS\Extbase\Object\Exception` - Base exception
|
||||
* :php:`TYPO3\CMS\Extbase\Object\Exception\CannotBuildObjectException` - Detail exception
|
||||
* :php:`TYPO3\CMS\Extbase\Object\Container\Exception\CannotReconstituteObjectException` - Detail exception
|
||||
* :php:`TYPO3\CMS\Extbase\Object\Container\Exception\UnknownObjectException` - Detail exception
|
||||
* :php:`TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException` - Detail exception, obsolete
|
||||
by deprecation of Extbase signal slot dispatcher already.
|
||||
* :php:`TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException` - Detail exception, obsolete
|
||||
by deprecation of Extbase signal slot dispatcher already.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Directly or indirectly calling :php:`\TYPO3\CMS\Extbase\Object\ObjectManager->get()`
|
||||
will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions that have been properly cleaned up for TYPO3 v10 compatibility are not affected.
|
||||
|
||||
Extensions still relying on Extbase ObjectManager are strongly encouraged to
|
||||
switch to :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance()` and
|
||||
Symfony based DI instead.
|
||||
|
||||
The extension scanner will find usages of the above classes and interfaces and shows
|
||||
them as deprecated with a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Documentation of migration paths have been established with TYPO3 v10
|
||||
documentation already. The :ref:`TYPO3 explained dependency injection section<t3coreapi:DependencyInjection>`
|
||||
and the :ref:`ObjectManager->get() v10 changelog entry <changelog-Deprecation-90803-ObjectManagerGet>`
|
||||
are especially helpful.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
@@ -0,0 +1,75 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94654:
|
||||
|
||||
====================================================
|
||||
Deprecation: #94654 - Generic Extbase domain classes
|
||||
====================================================
|
||||
|
||||
See :issue:`94654`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Most Extbase "generic" domain model and repositories have been marked as deprecated:
|
||||
They are opinionated implementations and can't be "correct" since the
|
||||
domains they are used in are unique.
|
||||
|
||||
The following classes have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Model\BackendUser`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Model\BackendUserGroup`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Model\FrontendUser`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Repository\BackendUserGroupRepository`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository`
|
||||
* :php:`TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using or extending the above classes is deprecated since TYPO3 v11.
|
||||
They will be removed with TYPO3 v12.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Various Extbase based extensions may use or extend the classes. The
|
||||
extension scanner will find usages with a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The migration paths are usually straight forward.
|
||||
|
||||
Extensions that extend the repository classes should extend Extbase
|
||||
:php:`TYPO3\CMS\Extbase\Persistence\Repository` instead and maybe copy
|
||||
body methods like :php:`initializeObject()` if given and not overridden
|
||||
already.
|
||||
|
||||
Extensions that use the Extbase repositories directly should copy the
|
||||
class to their extension namespace and use the own ones instead.
|
||||
|
||||
Extensions that extend the model classes should extend
|
||||
:php:`TYPO3\CMS\Extbase\DomainObject\AbstractEntity` instead and copy
|
||||
the properties, getters and setters they need from the Extbase classes.
|
||||
Those copied properties may need database mapping entries, which can
|
||||
be copied from :file:`EXT:extbase/Configuration/Extbase/Persistence/Classes.php`.
|
||||
|
||||
Extensions that use the Extbase models directly should copy the class
|
||||
to their extension namespace, ideally strip them down to what the extension
|
||||
actually needs, and copy the needed mapping information from
|
||||
:file:`EXT:extbase/Configuration/Extbase/Persistence/Classes.php`.
|
||||
|
||||
No database update of existing rows should be needed when transferring
|
||||
the models to an own namespace, since none of the Extbase models
|
||||
configured a :php:`recordType` in the mapping file at
|
||||
:file:`EXT:extbase/Configuration/Extbase/Persistence/Classes.php`.
|
||||
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
@@ -0,0 +1,72 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94664:
|
||||
|
||||
=======================================
|
||||
Deprecation: #94664 - Pdo cache backend
|
||||
=======================================
|
||||
|
||||
See :issue:`94664`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Caching Framework backend implementation :php:`TYPO3\CMS\Core\Cache\Backend\PdoBackend`
|
||||
is superseded by the :php:`TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend` since
|
||||
introduction of Doctrine DBAL. There is little reason to use :php:`PdoBackend` instead
|
||||
of the :php:`Typo3DatabaseBackend` and the latter is optimized much better.
|
||||
|
||||
:php:`PdoBackend` has thus been marked as deprecated and should not be used anymore.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The implementation has been marked as deprecated, usages trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Some instances *may* use this cache backend, but chances are low. This can
|
||||
be verified in the backend "Configuration" module, section "TYPO3_CONF_VARS",
|
||||
searching for string "PdoBackend".
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
TYPO3 cache backend configuration is usually done in :file:`LocalConfiguration.php`.
|
||||
Affected instances should switch to :php:`Typo3DatabaseBackend` and eventually update
|
||||
database schema.
|
||||
|
||||
:file:`LocalConfiguration.php` example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'SYS' => [
|
||||
'caching' => [
|
||||
'cacheConfigurations' => [
|
||||
'aCache' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\PdoBackend',
|
||||
...
|
||||
|
||||
:file:`LocalConfiguration.php` example after:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'SYS' => [
|
||||
'caching' => [
|
||||
'cacheConfigurations' => [
|
||||
'aCache' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
...
|
||||
|
||||
|
||||
In case this cache backend is still used for whatever reason and can't be dropped
|
||||
easily, the class should be copied to an own extension having an own namespace. The
|
||||
instance configuration needs to be adapted accordingly. Note there is an additional
|
||||
schema definition file in :file:`EXT:core/Resources/Private/Sql/Cache/Backend/PdoBackendCacheAndTags.sql`,
|
||||
that should be copied along the way with it's location being updated in the cache class.
|
||||
|
||||
.. index:: LocalConfiguration, PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,74 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94665:
|
||||
|
||||
============================================
|
||||
Deprecation: #94665 - Wincache cache backend
|
||||
============================================
|
||||
|
||||
See :issue:`94665`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Caching Framework backend implementation :php:`TYPO3\CMS\Core\Cache\Backend\WincacheBackend`
|
||||
is not maintained since Microsoft dropped its support: A PHP 7.4 compatible version
|
||||
came long after PHP 7.4 release and there are no PHP 8.0 works in sight. This backend
|
||||
in general found relatively little use and can be substituted with the well
|
||||
maintained ApcuBackend key/value store on Windows platforms.
|
||||
|
||||
:php:`WincacheBackend` has been marked as deprecated and should not be used anymore.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The implementation has been marked as deprecated, usages trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Some instances hosted on Windows platform *may* use this cache backend. This can be
|
||||
verified in the backend "Configuration" module, section "TYPO3_CONF_VARS", searching
|
||||
for string "WincacheBackend".
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
TYPO3 cache backend configuration is usually done in :file:`LocalConfiguration.php`.
|
||||
Affected instances could switch to :php:`ApcuBackend` if the :php:`apcu` PHP module
|
||||
is loaded, or alternatively to some other backend like :php:`RedisBackend`,
|
||||
:php:`MemcachedBackend` or :php:`Typo3DatabaseBackend`, depending on the specific
|
||||
cache size and usage characteristics.
|
||||
|
||||
|
||||
:file:`LocalConfiguration.php` example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'SYS' => [
|
||||
'caching' => [
|
||||
'cacheConfigurations' => [
|
||||
'aCache' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\WincacheBackend',
|
||||
...
|
||||
|
||||
:file:`LocalConfiguration.php` example after:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'SYS' => [
|
||||
'caching' => [
|
||||
'cacheConfigurations' => [
|
||||
'aCache' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\ApcuBackend',
|
||||
...
|
||||
|
||||
|
||||
In case this cache backend is still used for whatever reason and can't be dropped
|
||||
easily, the class should be copied to an own extension having an own namespace. The
|
||||
instance configuration needs to be adapted accordingly.
|
||||
|
||||
.. index:: LocalConfiguration, PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94684:
|
||||
|
||||
================================================
|
||||
Deprecation: #94684 - GeneralUtility::shortMD5()
|
||||
================================================
|
||||
|
||||
See :issue:`94684`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility\GeneralUtility::shortMD5()` is a
|
||||
shorthand method to create an MD5 string trimmed to a defined length, by default
|
||||
10 characters.
|
||||
|
||||
Such shortened checksums are highly susceptible to collisions, thus this method
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::shortMD5()` will trigger a
|
||||
PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any extension using :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::shortMD5()` is
|
||||
affected. The extension scanner will find usages of that method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the native :php:`md5()` function to create checksums. In conjunction with
|
||||
:php:`substr()` the old behavior can be recovered: :php:`substr(md5($string), 0, 10)`.
|
||||
|
||||
If checksums are stored in the database, adapt the respective
|
||||
:file:`ext_tables.sql` file to use :sql:`VARCHAR(32)` for the affected database
|
||||
fields.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,207 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94687:
|
||||
|
||||
==================================================
|
||||
Deprecation: #94687 - Deprecate SoftReferenceIndex
|
||||
==================================================
|
||||
|
||||
See :issue:`94687`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`TYPO3\CMS\Core\Database\SoftReferenceIndex` class combined all core
|
||||
soft reference parser implementations into one class. Each and every parser
|
||||
had its own method residing in one class. It is now possible to define
|
||||
a dedicated class for each parser, as a result :php:`SoftReferenceIndex` is not
|
||||
needed anymore and has been therefore marked as deprecated.
|
||||
|
||||
The related method :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::softRefParserObj()`
|
||||
was used to get the according soft reference parser object and was basically a
|
||||
factory method. This logic has been moved into
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserFactory`.
|
||||
:php:`BackendUtility::softRefParserObj` has been marked as internal in TYPO3 v11
|
||||
already. To ease migration, the old static method is still in place and triggers
|
||||
a PHP :php:`E_USER_DEPRECATED` error when called.
|
||||
|
||||
Another tightly coupled method :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::explodeSoftRefParserList()`,
|
||||
which was used to parse the comma separated list of soft reference parsers
|
||||
and return them as an array, has now also been marked as deprecated. It was mostly used
|
||||
for internal purposes. The corresponding logic now resides in the
|
||||
:php:`getParsersBySoftRefParserList` method of
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserFactory`.
|
||||
|
||||
All soft reference parsers are now required to implement the
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
Not doing so will trigger a PHP :php:`E_USER_DEPRECATED` error. In TYPO3 v12 this will throw an exception.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The following class is marked as deprecated. Instantiating this class will
|
||||
trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
* :php:`TYPO3\CMS\Core\Database\SoftReferenceIndex`
|
||||
|
||||
The following methods are marked as deprecated. Calling these methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
* :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::softRefParserObj()`
|
||||
* :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::explodeSoftRefParserList()`
|
||||
|
||||
Soft reference parsers must implement
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
Otherwise a PHP :php:`E_USER_DEPRECATED` error will be triggered and an exception will be thrown
|
||||
in TYPO3 v12.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
* All installations registering user-defined soft reference parsers not
|
||||
implementing :php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
* All installations calling any of the above-mentioned methods.
|
||||
* All installations, which are using :php:`TYPO3\CMS\Core\Database\SoftReferenceIndex`
|
||||
directly.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Among other methods
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`
|
||||
ensures the method :php:`parse` is implemented. The previously used method name
|
||||
:php:`findRef()` can be simply renamed to :php:`parse()`. The first 4 parameters
|
||||
:php:`$table`, :php:`$field`, :php:`$uid` and :php:`$content` stay the same, as
|
||||
well as the seventh (now fifth) and last parameter :php:`$structurePath`. The
|
||||
remaining two parameters :php:`$spKey` (now :php:`$parserKey`) and
|
||||
:php:`$spParams` (now :php:`$parameters`) have to be set by the
|
||||
:php:`setParserKey()` method, in case they are needed. The key can be retrieved
|
||||
by using the :php:`getParserKey()` method.
|
||||
|
||||
The return type has been changed to an instance of
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserResult`. It
|
||||
provides as static factory method simply called :php:`create()`. It expects the
|
||||
`content` part of the old array as the first parameter and the `elements` part
|
||||
as the second. If there are no matches, one can simply call
|
||||
:php:`SoftReferenceParserResult::createWithoutMatches()`.
|
||||
|
||||
If needed, one could also extend
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\AbstractSoftReferenceParser`.
|
||||
This abstract class comes with the helper method :php:`makeTokenID()` (originally
|
||||
in :php:`TYPO3\CMS\Core\Database\SoftReferenceIndex`) and a new method
|
||||
:php:`setTokenIdBasePrefix`, which sets the concatenated string for the property
|
||||
:php:`tokenID_basePrefix`.
|
||||
|
||||
Example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
class MySoftReferenceParser implements SingletonInterface
|
||||
{
|
||||
public function findRef($table, $field, $uid, $content, $spKey, $spParams, $structurePath = '')
|
||||
{
|
||||
...
|
||||
|
||||
if (!empty($elements)) {
|
||||
$resultArray = [
|
||||
'content' => $content,
|
||||
'elements' => $elements
|
||||
];
|
||||
return $resultArray;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Example after:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
class MySoftReferenceParser implements SoftReferenceParserInterface
|
||||
{
|
||||
protected string $parserKey = '';
|
||||
protected array $parameters = [];
|
||||
|
||||
public function parse(string $table, string $field, int $uid, string $content, string $structurePath = ''): SoftReferenceParserResult
|
||||
{
|
||||
...
|
||||
|
||||
if (!empty($elements)) {
|
||||
return SoftReferenceParserResult::create(
|
||||
$content,
|
||||
$elements
|
||||
);
|
||||
}
|
||||
return SoftReferenceParserResult::createWithoutMatches();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $parserKey The softref parser key.
|
||||
* @param array $parameters Parameters of the softlink parser. Basically this is the content inside optional []-brackets after the softref keys. Parameters are exploded by ";
|
||||
*/
|
||||
public function setParserKey(string $parserKey, array $parameters): void
|
||||
{
|
||||
$this->parserKey = $parserKey;
|
||||
$this->parameters = $parameters;
|
||||
}
|
||||
|
||||
public function getParserKey(): string
|
||||
{
|
||||
return $this->parserKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Instead of calling :php:`BackendUtility::softRefParserObj()` one should now create
|
||||
an instance of :php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserFactory`.
|
||||
This factory has a method: :php:`getSoftReferenceParser()`, which expects the
|
||||
soft reference key as first argument (just like the BackendUtility method).
|
||||
|
||||
Example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$softRefObj = BackendUtility::softRefParserObj('typolink');
|
||||
|
||||
Example after:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$softReferenceParserFactory = GeneralUtility::makeInstance(SoftReferenceParserFactory::class);
|
||||
$softReferenceParser = $softReferenceParserFactory->getSoftReferenceParser('typolink');
|
||||
|
||||
The method :php:`BackendUtility::explodeSoftRefParserList()` should be replaced by
|
||||
instantiating :php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserFactory`
|
||||
and calling :php:`getParsersBySoftRefParserList()`. This method expects the
|
||||
:php:`$parserList` as first argument, same as in the :php:`BackendUtility`
|
||||
The second argument is a fallback configuration array for softref parsers.
|
||||
This method returns an iterable of
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
|
||||
Example before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$softRefs = BackendUtility::explodeSoftRefParserList($conf['softref']);
|
||||
|
||||
foreach ($softRefs as $spKey => $spParams) {
|
||||
$softRefObj = BackendUtility::softRefParserObj($spKey);
|
||||
$resultArray = $softRefObj->findRef($table, $field, $idRecord, $valueField, $spKey, $softRefParams);
|
||||
}
|
||||
|
||||
Example after:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
foreach ($softReferenceParserFactory->getParsersBySoftRefParserList($conf['softref'], $softRefParams) as $softReferenceParser) {
|
||||
$parserResult = $softReferenceParser->parse($table, $field, $idRecord, $valueField);
|
||||
}
|
||||
|
||||
|
||||
Related
|
||||
=======
|
||||
|
||||
* :doc:`RegisterSoftReferenceParsersViaDI (Feature) <Feature-94741-RegisterSoftReferenceParsersViaDI>`
|
||||
* :doc:`RegisterSoftReferenceParsersViaDI (Deprecation) <Deprecation-94741-RegisterSoftReferenceParsersViaDI>`
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:core
|
||||
@@ -0,0 +1,68 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94741:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #94741 - Register SoftReference parsers via DI
|
||||
===========================================================
|
||||
|
||||
See :issue:`94741`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The former way of registering soft reference parsers in the global array
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser']`
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Registering soft reference parsers in the global array will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations, that register user-defined soft reference parsers in the
|
||||
global array
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser']`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the new way of registering soft reference parsers by dependency injection
|
||||
in the corresponding `Configuration/Services.(yaml|php)` file of your extension.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser']['your_key'] = \VENDOR\Extension\SoftReference\YourSoftReferenceParser::class;
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
VENDOR\Extension\SoftReference\YourSoftReferenceParser:
|
||||
tags:
|
||||
- name: softreference.parser
|
||||
parserKey: your_key
|
||||
|
||||
.. note::
|
||||
|
||||
If a parser is registered in both ways with the same key, the registration
|
||||
in the global array takes precedence to ensure backwards-compatibility.
|
||||
|
||||
To ensure compatibility with TYPO3 v10-v12, it is recommended to register
|
||||
both places at the same time.
|
||||
|
||||
Related
|
||||
=======
|
||||
|
||||
* :doc:`RegisterSoftReferenceParsersViaDI (Feature) <Feature-94741-RegisterSoftReferenceParsersViaDI>`
|
||||
* :doc:`SoftReferenceIndex (Deprecation) <Deprecation-94687-SoftReferenceIndex>`
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,76 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94762:
|
||||
|
||||
==========================================================
|
||||
Deprecation: #94762 - Deprecate JavaScript top.fsMod state
|
||||
==========================================================
|
||||
|
||||
See :issue:`94762`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The JavaScript object :js:`top.fsMod` manages the "state" for page-tree and
|
||||
file-tree related contexts in the backend user-interface like this:
|
||||
|
||||
* :js:`top.fsMod.recentIds.web` contained the current ("recent")
|
||||
page or file related identifier details were shown for
|
||||
* :js:`top.fsMod.navFrameHighlightedID.web` contained the currently
|
||||
selected identifier that was highlighted in page-tree or file-tree
|
||||
* :js:`top.fsMod.currentBank` contained the current mount point or
|
||||
file mount ("bank") used in page-tree or file-tree
|
||||
|
||||
To get rid of inline JavaScript and reduce usage of JavaScript :js:`top.*`,
|
||||
mentioned :js:`top.fsMod` has been marked as deprecated and replaced by new component
|
||||
:js:`TYPO3/CMS/Backend/Storage/ModuleStateStorage`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
As fall-back, reading from :js:`top.fsMod` is still possible, changing
|
||||
data will cause a JavaScript exception.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Sites using custom modifications for JavaScript aspects in the backend user
|
||||
interface relying on :js:`top.fsMod`.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
New :js:`ModuleStorage` component is capable of providing similar behavior,
|
||||
corresponding state is written to `sessionStorage` and available for current
|
||||
client user session (per browser tab).
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
import {ModuleStateStorage} from '../Storage/ModuleStateStorage';
|
||||
let identifier: string, selection: string|null, mount: string|null;
|
||||
|
||||
// reading state
|
||||
// -------------
|
||||
|
||||
const currentState = ModuleStateStorage.current('web');
|
||||
|
||||
identifier = top.fsMod.recentIds.web; // deprecated
|
||||
identifier = currentState.identifier; // replacement
|
||||
|
||||
selection = top.fsMod.navFrameHighlightedID.web; // deprecated
|
||||
selection = currentState.selection; // replacement
|
||||
|
||||
mount = top.fsMod.currentBank; // deprecated
|
||||
mount = currentState.mount; // replacement
|
||||
|
||||
// updating state
|
||||
// --------------
|
||||
|
||||
// ModuleStateStorage.update(module, identifier, selected, mount?)
|
||||
ModuleStateStorage.update('web', 123, true, '0');
|
||||
|
||||
// ModuleStateStorage.updateWithCurrentMount(module, identifier, selected)
|
||||
ModuleStateStorage.updateWithCurrentMount('web', 123, true);
|
||||
|
||||
|
||||
.. index:: Backend, JavaScript, NotScanned, ext:backend
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94902:
|
||||
|
||||
=============================================================================
|
||||
Deprecation: #94902 - Deprecate lowerCamelCase options of EXT:impexp commands
|
||||
=============================================================================
|
||||
|
||||
See :issue:`94902`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The CLI commands :bash:`impexp:export` and :bash:`impexp:import` offered
|
||||
lowerCamelCased options, while the other TYPO3 Core commands offer lowercase
|
||||
options only. The lowercase option aliases were introduced in both commands and
|
||||
the lowerCamelCased options were marked as deprecated and will be removed in
|
||||
TYPO3 v12.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the CLI commands :bash:`impexp:export` or :bash:`impexp:import` are
|
||||
executed with lowerCamelCased options, a PHP :php:`E_USER_DEPRECATED` error is
|
||||
raised.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation using lowerCamelCased options with commands
|
||||
:bash:`impexp:export` or :bash:`impexp:import`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Switch to the lower-cased option aliases:
|
||||
|
||||
1. :bash:`impexp:export --includeRelated` => :bash:`impexp:export --include-related`
|
||||
2. :bash:`impexp:export --includeStatic` => :bash:`impexp:export --include-static`
|
||||
3. :bash:`impexp:export --excludeDisabledRecords` => :bash:`impexp:export --exclude-disabled-records`
|
||||
4. :bash:`impexp:export --excludeHtmlCss` => :bash:`impexp:export --exclude-html-css`
|
||||
5. :bash:`impexp:export --saveFilesOutsideExportFile` => :bash:`impexp:export --save-files-outside-export-file`
|
||||
6. :bash:`impexp:import --updateRecords` => :bash:`impexp:import --update-records`
|
||||
7. :bash:`impexp:import --ignorePid` => :bash:`impexp:import --ignore-pid`
|
||||
8. :bash:`impexp:import --forceUid` => :bash:`impexp:import --force-uid`
|
||||
9. :bash:`impexp:import --importMode` => :bash:`impexp:import --import-mode`
|
||||
10. :bash:`impexp:import --enableLog` => :bash:`impexp:import --enable-log`
|
||||
|
||||
.. index:: CLI, NotScanned, ext:impexp
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94953:
|
||||
|
||||
===============================================================
|
||||
Deprecation: #94953 - Edit panel related frontend functionality
|
||||
===============================================================
|
||||
|
||||
See :issue:`94953`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With the extraction of the "feedit" extension from TYPO3 core in v10 a
|
||||
couple of TypoScript related properties have been rendered unused. Extensions
|
||||
that provide a frontend editing approach should implement these on their own.
|
||||
|
||||
The following TypoScript properties have been marked as deprecated and
|
||||
will be removed in TYPO3 v12:
|
||||
|
||||
* :typoscript:`stdWrap.editPanel`
|
||||
* :typoscript:`stdWrap.editPanel.`
|
||||
* :typoscript:`stdWrap.editIcons`
|
||||
* :typoscript:`stdWrap.editIcons.`
|
||||
* :typoscript:`EDITPANEL` content object
|
||||
|
||||
Related PHP code has been marked as deprecated:
|
||||
|
||||
* Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_editIcons()` - scanned
|
||||
* Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_editPanel()` - scanned
|
||||
* Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->editPanel()` - scanned
|
||||
* Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->editIcons()` - scanned
|
||||
* Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->isDisabled()` - not scanned
|
||||
* Class :php:`TYPO3\CMS\Frontend\ContentObject\EditPanelContentObject` - scanned
|
||||
* Hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']` - scanned, logged
|
||||
* Property :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController.php->displayEditIcons` - scanned
|
||||
* Property :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController.php->displayFieldEditIcons` - scanned
|
||||
* Method :php:`TYPO3\CMS\Frontend\Plugin\AbstractPlugin->pi_getEditPanel()` - scanned, logged
|
||||
* Method :php:`TYPO3\CMS\Frontend\Plugin\AbstractPlugin->pi_getEditIcon()` - scanned, logged
|
||||
* Property :php:`TYPO3\CMS\Frontend\Plugin\AbstractPlugin->pi_EPtemp_cObj` - scanned
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Some of the method usages will trigger a PHP :php:`E_USER_DEPRECATED` error upon use. The
|
||||
core extension EXT:fluid_styled_content still sets stdWrap.editPanel and
|
||||
stdWrap.editIcons properties for content elements, so the known frontend editing
|
||||
related extensions EXT:feedit and EXT:frontend_editing will continue to work
|
||||
in v11. Those properties will be removed with v12.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances that use frontend editing extensions - most notably EXT:feedit or
|
||||
EXT:frontend_editing - may see deprecated functionality being logged. The
|
||||
extension scanner will find PHP usages. Using the TypoScript properties is
|
||||
not logged.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Frontend editing related extensions like EXT:feedit and EXT:frontend_editing
|
||||
should no longer rely on core provided preparation. The stdWrap functionality
|
||||
can be integrated with stdWrap related hooks, the `EDITPANEL` cObj can be registered
|
||||
as extension provided content object, which obsoleted the use of the
|
||||
:php:`typo3/classes/class.frontendedit.php` hook.
|
||||
|
||||
.. index:: Frontend, PHP-API, TypoScript, PartiallyScanned, ext:frontend
|
||||
@@ -0,0 +1,79 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94956:
|
||||
|
||||
==================================
|
||||
Deprecation: #94956 - Public $cObj
|
||||
==================================
|
||||
|
||||
See :issue:`94956`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Frontend plugins receive an instance of :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer` when
|
||||
called via :php:`ContentObjectRenderer->callUserFunction()`. This is
|
||||
typically the case for plugins called as :typoscript:`USER` or indirectly
|
||||
as :typoscript:`USER_INT` type.
|
||||
|
||||
The instance of :php:`ContentObjectRenderer` has previously been set by
|
||||
declaring a public (!) property :php:`cObj` in the consuming class.
|
||||
|
||||
Handing a :php:`ContentObjectRenderer` instance around this way is hard to
|
||||
follow and has thus been deprecated: Declaring :php:`public $cObj` should
|
||||
be avoided. Frontend plugins that need the current :php:`ContentObjectRenderer`
|
||||
should have a public :php:`setContentObjectRenderer()` method instead.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Declaring :php:`public $cObj` in a class called by
|
||||
:php:`ContentObjectRenderer->callUserFunction()` triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Frontend extension classes that neither extend :php:`TYPO3\CMS\Frontend\Plugin\AbstractPlugin`
|
||||
("pibase") nor Extbase :php:`TYPO3\CMS\Extbase\Mvc\Controller\ActionController`
|
||||
and have a public property :php:`cObj` are affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
When instantiating the frontend plugin, :php:`ContentObjectRenderer->callUserFunction()`
|
||||
now checks for a public method :php:`setContentObjectRenderer()` to explicitly set
|
||||
an instance of the :php:`ContentObjectRenderer`.
|
||||
|
||||
Many plugins may not need this instance at all. If the ContentObjectRenderer instance
|
||||
used within the plugin does not rely on further ContentObjectRenderer state, for instance
|
||||
if it only calls :php:`stdWrap()` or similar without using state like :typoscript:`LOAD_REGISTER`,
|
||||
the :php:`cObj` class property should be avoided and an own instance of ContentObjectRenderer
|
||||
should be created.
|
||||
|
||||
Classes that do rely on current ContentObjectRenderer state should adapt their code.
|
||||
|
||||
Before::
|
||||
|
||||
class Foo
|
||||
{
|
||||
public $cObj;
|
||||
}
|
||||
|
||||
|
||||
After::
|
||||
|
||||
class Foo
|
||||
{
|
||||
protected $cObj;
|
||||
|
||||
public function setContentObjectRenderer(ContentObjectRenderer $cObj): void
|
||||
{
|
||||
$this->cObj = $cObj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.. index:: Frontend, PHP-API, NotScanned, ext:frontend
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94957:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #94957 - TypoScriptFrontendController->cObjectDepthCounter
|
||||
=======================================================================
|
||||
|
||||
See :issue:`94957`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`TypoScriptFrontendController` contains a property to prevent endless
|
||||
recursion of content objects during frontend rendering. With TypoScript
|
||||
becoming less complex, this check becomes obsolete. To reduce dependencies
|
||||
between :php:`TypoScriptFrontendController` and :php:`ContentObjectRenderer`,
|
||||
the handling has been removed and property :php:`TypoScriptFrontendController->cObjectDepthCounter`
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If a TypoScript setup somehow manages to create a recursion, PHP will now stop
|
||||
with a fatal PHP nesting level error at some point, instead TYPO3 frontend
|
||||
rendering silently stopping.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using property :php:`TypoScriptFrontendController->cObjectDepthCounter`
|
||||
are affected. That property has been handled mostly internally, this case is unlikely.
|
||||
The extension scanner will find usages with a weak match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Drop usages of property :php:`TypoScriptFrontendController->cObjectDepthCounter`,
|
||||
it is unused within TYPO3 v11.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94958:
|
||||
|
||||
======================================================
|
||||
Deprecation: #94958 - ContentObjectRenderer properties
|
||||
======================================================
|
||||
|
||||
See :issue:`94958`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A couple of outdated and mostly unused properties of class
|
||||
:php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer` have been marked
|
||||
as deprecated:
|
||||
|
||||
* :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->align` - Unused
|
||||
* :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->oldData` - Unused
|
||||
* :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->alternativeData` - Never set, only output during debug
|
||||
* :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->currentRecordTotal` - Set, but never used
|
||||
* :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->recordRegister` - Unused
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Those properties did not have a purpose. Extensions shouldn't see
|
||||
negative impact.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions that set or read these properties may be affected.
|
||||
This is rather unlikely. The extension scanner finds candidates.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Drop usages. The properties will vanish in v12.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94959:
|
||||
|
||||
=========================================================================
|
||||
Deprecation: #94959 - ContentObjectRenderer constructor in StandaloneView
|
||||
=========================================================================
|
||||
|
||||
See :issue:`94959`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer` constructor
|
||||
argument of :php:`TYPO3\CMS\Fluid\View\StandaloneView` has been marked as
|
||||
deprecated. The TYPO3 core never used this optional argument and
|
||||
it added a hard dependency to Extbase classes from StandaloneView, which should
|
||||
be avoided.
|
||||
|
||||
The :php:`ContentObjectRenderer` instance within :php:`StandaloneView` has been used to update
|
||||
the Extbase :php:`\TYPO3\CMS\Extbase\Configuration\ConfigurationManager` singleton,
|
||||
even though Extbase bootstrap already sets the current ContentObjectRenderer to
|
||||
:php:`ConfigurationManager`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Extensions creating instances of :php:`StandaloneView` and handing over an
|
||||
instance of :php:`ContentObjectRenderer` as constructor argument will see a PHP :php:`E_USER_DEPRECATED` error raised.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Most instances are probably not affected by this change since handing over
|
||||
the constructor argument is rather unusual.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Do not hand over an instance of :php:`ContentObjectRenderer` when creating an
|
||||
instance of :php:`StandaloneView`.
|
||||
|
||||
.. index:: Fluid, PHP-API, NotScanned, ext:fluid
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94979:
|
||||
|
||||
=======================================================================================
|
||||
Deprecation: #94979 - Using CacheManager or Database Connections during TYPO3 bootstrap
|
||||
=======================================================================================
|
||||
|
||||
See :issue:`94979`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 now triggers a PHP :php:`E_USER_DEPRECATED` error if extension authors
|
||||
or site admins have code in their :file:`ext_localconf.php`,
|
||||
:file:`Configuration/TCA/*` configuration files or :file:`ext_tables.php`, that
|
||||
calls the :php:`\TYPO3\CMS\Core\Cache\CacheManager` or interacts with the database.
|
||||
|
||||
This is important for extension authors as TYPO3 will become
|
||||
stricter in the future in terms of booting up TYPO3's Core Configuration, making
|
||||
typical requests much faster, as all configuration can be cached away. When
|
||||
using TYPO3 in a build environment, this will also lead to possibilities to
|
||||
pre-warmup caches during the build phase of a new deployment.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing the database and utilizing the Cache Manager in
|
||||
these files will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions using Cache Manager
|
||||
or Database Connections in their configuration files (see above).
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use proper places to initialize extensions, and only when
|
||||
needed to reduce the general time to boot up TYPO3's configuration.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94991:
|
||||
|
||||
==========================================
|
||||
Deprecation: #94991 - Extbase AbstractView
|
||||
==========================================
|
||||
|
||||
See :issue:`94991`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To simplify and streamline Fluid view related class inheritance,
|
||||
the Extbase class :php:`TYPO3\CMS\Extbase\Mvc\View\AbstractView`
|
||||
has been marked as deprecated and will be removed in TYPO3 v12.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Extending the class should be avoided. Consuming classes should
|
||||
directly implement :php:`TYPO3\CMS\Extbase\Mvc\View\ViewInterface`
|
||||
instead.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with own Extbase view classes that extend :php:`AbstractView`
|
||||
are affected, but this is rather uncommon. The extension scanner will
|
||||
find class usages as a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Affected Extbase view classes should implement :php:`ViewInterface` instead
|
||||
and not extend :php:`AbstractView` anymore. The most simple solution is to
|
||||
copy the interface implementation from the deprecated :php:`AbstractView` class.
|
||||
|
||||
.. index:: Fluid, PHP-API, FullyScanned, ext:extbase
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-94996:
|
||||
|
||||
========================================================================================
|
||||
Deprecation: #94996 - In Composer Mode, all Extensions should be installed with Composer
|
||||
========================================================================================
|
||||
|
||||
See :issue:`94996`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Having extensions within :file:`typo3conf/ext` in Composer mode, which have not
|
||||
been installed with Composer, has been marked as deprecated.
|
||||
|
||||
TYPO3 Extensions are Composer packages and therefore Composer mechanisms should
|
||||
be used to install them properly in the project, and not placed manually in their
|
||||
target location :file:`typo3conf/ext`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A PHP :php:`E_USER_DEPRECATED` error is raised for any extension that is not
|
||||
installed with Composer, if the instance is composer based.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Composer based TYPO3 projects, that have extensions directly in :file:`typo3conf/ext`,
|
||||
for instance under version control.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Composer based TYPO3 projects, that have extensions directly in :file:`typo3conf/ext`
|
||||
under version control, should migrate them to be installed using the Composer path
|
||||
repository mechanism:
|
||||
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"repositories": [
|
||||
{
|
||||
"type": "path",
|
||||
"url": "./packages/*/"
|
||||
},
|
||||
],
|
||||
"require": {
|
||||
"my/example-extension": "@dev",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Now, when `example-extension` is located in :file:`packages/example-extension`, it is picked
|
||||
up by composer and symlinked into :file:`typo3conf/ext/example_extension`.
|
||||
|
||||
.. index:: CLI, NotScanned, ext:core
|
||||
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95003:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #95003 - Extbase ViewInterface canRender()
|
||||
=======================================================
|
||||
|
||||
See :issue:`95003`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To streamline and simplify Fluid view related classes, the
|
||||
Extbase related :php:`TYPO3\CMS\Extbase\Mvc\View\ViewInterface`
|
||||
method :php:`canRender()` has been dropped from the interface.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The method should not be used anymore. Implementations in consuming
|
||||
view classes are kept in TYPO3 v11 but have been marked as deprecated and
|
||||
trigger a PHP :php:`E_USER_DEPRECATED` error upon usage.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Method :php:`canRender()` had limited use within Extbase, it is rather
|
||||
unlikely many instances with extensions using the method exist. It's
|
||||
purpose was to check for Fluid template existence before calling
|
||||
:php:`$view->render()`, but all existing view implementations throw an
|
||||
exception during :php:`render()` if a template path can't be resolved.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Do not call :php:`canRender()` on template view instances, but let
|
||||
:php:`render()` throw :php:`\TYPO3Fluid\Fluid\View\Exception\InvalidTemplateResourceException` on error
|
||||
instead.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:extbase
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95005:
|
||||
|
||||
=======================================
|
||||
Deprecation: #95005 - Extbase EmptyView
|
||||
=======================================
|
||||
|
||||
See :issue:`95005`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further clean up and streamline Fluid view related functionality, the
|
||||
Extbase related view class :php:`TYPO3\CMS\Extbase\Mvc\View\EmptyView`
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :php:`EmptyView` has been marked as deprecated and trigger a PHP :php:`E_USER_DEPRECATED` error upon use.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The class has been unused within TYPO3 core since its introduction in TYPO3 4.5.
|
||||
It is rather unlikely instances have extensions using the class. The extension
|
||||
scanner finds usages with a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If rendering "nothing" by a view instance is needed for whatever reason, the
|
||||
same result can be achieved with a :php:`TYPO3\CMS\Fluid\View\StandaloneView`
|
||||
view instance by setting :php:`$view->setTemplateSource('')` and calling
|
||||
:php:`$view->render()`. But it's of course quicker to simply not render
|
||||
anything at all.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95009:
|
||||
|
||||
===================================================================================================
|
||||
Deprecation: #95009 - Passing TypoScript configuration as constructor argument to Exception handler
|
||||
===================================================================================================
|
||||
|
||||
See :issue:`95009`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :typoscript:`config.contentObjectExceptionHandler` it's possible to
|
||||
adjust the exception handler behavior of the frontend. It's even possible
|
||||
to use an own exception handler class. Previously, the TypoScript configuration
|
||||
was therefore passed to the exception handler via a constructor argument. This
|
||||
has now been deprecated to allow the use of DI.
|
||||
|
||||
The configuration will now be passed using the new :php:`setConfiguration()`
|
||||
method. This method will be enforced by the :php:`ExceptionHandlerInterface`
|
||||
in TYPO3 v12.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using a custom exception handler, while not implementing the :php:`setConfiguration()`
|
||||
method will trigger a deprecation log entry. The method will be enforced
|
||||
in TYPO3 v12.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations defining a custom exception handler via the TypoScript
|
||||
configuration :typoscript:`config.contentObjectExceptionHandler`, while
|
||||
not implementing the :php:`setConfiguration()` method.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Remove the :php:`$configuration` argument from the constructor of any
|
||||
custom exception handler class and implement the :php:`setConfiguration()`
|
||||
method instead.
|
||||
|
||||
.. index:: Frontend, PHP-API, NotScanned, ext:frontend
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95011:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #95011 - Various global JavaScript functions and variables
|
||||
=======================================================================
|
||||
|
||||
See :issue:`95011`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following globally available variables in TYPO3 Backend's JavaScript code have been marked as deprecated:
|
||||
|
||||
* :js:`top.currentSubScript`
|
||||
* :js:`top.currentModuleLoaded`
|
||||
* :js:`top.nextLoadModuleUrl`
|
||||
|
||||
In addition the global JavaScript function :js:`jump()` has
|
||||
been marked as deprecated as well.
|
||||
|
||||
This functionality has been around for a very long time, and
|
||||
is superseded by TYPO3's Module Menu Component (since 4.5) and the newly introduced Backend Routing Component in JavaScript
|
||||
since TYPO3 v11.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The variables will work and be filled as expected in TYPO3 v11, but will not be available anymore in TYPO3 v12.
|
||||
|
||||
Calling :js:`jump()` will trigger a JavaScript warning in ones'
|
||||
browser console.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions which utilize Backend
|
||||
JavaScript and using the legacy functionality, which is highly
|
||||
unlikely.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the ModuleMenu JavaScript API or the Router API to find out the current module or go to a specific route:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const router = document.querySelector('typo3-backend-module-router');
|
||||
router.setAttribute('endpoint', url);
|
||||
router.setAttribute('module', moduleName);
|
||||
|
||||
|
||||
.. index:: Backend, JavaScript, NotScanned, ext:backend
|
||||
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95037:
|
||||
|
||||
======================================================
|
||||
Deprecation: #95037 - rootUid related setting of trees
|
||||
======================================================
|
||||
|
||||
See :issue:`95037`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The setting :php:`rootUid` used in FormEngine's :php:`treeConfig` is superseded by
|
||||
:php:`startingPoints` and has been marked as deprecated.
|
||||
|
||||
In :php:`TYPO3\CMS\Core\Tree\TableConfiguration\DatabaseTreeDataProvider` the
|
||||
following methods have been marked as deprecated:
|
||||
|
||||
* :php:`setRootUid()`
|
||||
* :php:`getRootUid()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using `treeConfig/rootUid` in TCA will trigger a TCA migration to
|
||||
`treeConfig/startingPoints` and raise a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
The same applies to the according page TSconfig option.
|
||||
|
||||
The extension scanner detects any call to :php:`setRootUid()`
|
||||
or :php:`getRootUid()` as weak match.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All extensions defining `rootUid` in their `TCA` or `TSconfig` are affected.
|
||||
Furthermore all extensions directly calling one of the mentioned methods in
|
||||
:php:`TYPO3\CMS\Core\Tree\TableConfiguration\DatabaseTreeDataProvider`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The setting `treeConfig/rootUid` can be migrated to `treeConfig/startingPoints`
|
||||
passing the value as string, since `treeConfig/startingPoints` takes a
|
||||
comma-separated value. The methods :php:`setRootUid()` and :php:`getRootUid()`
|
||||
can be replaced by their successors :php:`setStartingPoints()` and
|
||||
:php:`getStartingPoints()`.
|
||||
|
||||
.. index:: Backend, PartiallyScanned, ext:backend
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95062:
|
||||
|
||||
===================================================================================
|
||||
Deprecation: #95062 - $skipSorting argument of RelationHandler->writeForeignField()
|
||||
===================================================================================
|
||||
|
||||
See :issue:`95062`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further clean up :php:`TYPO3\CMS\Core\DataHandling\DataHandler`, the unused
|
||||
internal property :php:`callFromImpExp` has been removed. Its single usage has
|
||||
been the 4th argument of :php:`TYPO3\CMS\Core\Database\RelationHandler->writeForeignField()`.
|
||||
Handing over this argument to :php:`RelationHandler->writeForeignField()` has been
|
||||
marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`TYPO3\CMS\Core\Database\RelationHandler->writeForeignField()` with
|
||||
4th argument triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
It is unlikely instances contain extensions using the above argument, since
|
||||
it carried a core internal information tailored for EXT:impexp specific needs.
|
||||
The extension scanner will find usages as weak match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration available. Consuming extensions should drop that argument.
|
||||
Calling RelationHandler->writeForeignField() with non-default true as fourth
|
||||
argument skipped some relation-sorting related code, which should be avoided.
|
||||
|
||||
.. index:: Database, FullyScanned, ext:core
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95065:
|
||||
|
||||
============================================================
|
||||
Deprecation: #95065 - Hook extTablesInclusion-PostProcessing
|
||||
============================================================
|
||||
|
||||
See :issue:`95065`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['extTablesInclusion-PostProcessing']`
|
||||
which is executed after :file:`ext_tables.php` files are included has been marked
|
||||
as deprecated.
|
||||
|
||||
The accompanied PHP interface for such hooks
|
||||
:php:`TYPO3\CMS\Core\Database\TableConfigurationPostProcessingHookInterface` is
|
||||
marked as deprecated as well.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If a hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to PSR-14 events, mainly the newly introduced :php:`\TYPO3\CMS\Core\Core\Event\BootCompletedEvent` and
|
||||
the existing :php:`\TYPO3\CMS\Core\Configuration\Event\AfterTcaCompilationEvent`
|
||||
depending on the use-case.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95077-1668719172:
|
||||
|
||||
============================================
|
||||
Deprecation: #95077 - Filelist editIconsHook
|
||||
============================================
|
||||
|
||||
See :issue:`95077`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['fileList']['editIconsHook']`
|
||||
which is executed in the :php:`FileList` class to manipulate the icons, used
|
||||
for the edit control section in the files and folders listing, has been marked as
|
||||
deprecated.
|
||||
|
||||
The accompanied PHP interface for such hooks
|
||||
:php:`TYPO3\CMS\Filelist\FileListEditIconHookInterface` has been marked
|
||||
as deprecated as well.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If a hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
The extension scanner also detects any usage
|
||||
of the deprecated interface as strong, and the definition of the
|
||||
hook as weak match.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to the newly introduced :php:`\TYPO3\CMS\Filelist\Event\ProcessFileListActionsEvent` PSR-14 event.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:filelist
|
||||
@@ -0,0 +1,41 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95077:
|
||||
|
||||
===================================================
|
||||
Deprecation: #95077 - FileDump CheckFileAccess hook
|
||||
===================================================
|
||||
|
||||
See :issue:`95077`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['FileDumpEID.php']['checkFileAccess']`
|
||||
which is executed in the :php:`\TYPO3\CMS\Core\Controller\FileDumpController` class, enabling third-party
|
||||
code to perform additional access / security checks before dumping the requested
|
||||
file, has been marked as deprecated.
|
||||
|
||||
The accompanied PHP interface for the hook
|
||||
:php:`TYPO3\CMS\Core\Resource\Hook\FileDumpEIDHookInterface` has been marked
|
||||
as deprecated as well.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If a hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
The extension scanner also detects any usage
|
||||
of the deprecated interface as strong, and the definition of the
|
||||
hook as weak match.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to the newly introduced :php:`\TYPO3\CMS\Core\Resource\Event\ModifyFileDumpEvent` PSR-14 event.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95083:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #95083 - Backend toolbar CacheActions hook
|
||||
=======================================================
|
||||
|
||||
See :issue:`95083`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['additionalBackendItems']['cacheActions']`
|
||||
which can be used to modify the cache actions, shown in the TYPO3 Backend
|
||||
top toolbar, has been marked as deprecated.
|
||||
|
||||
The accompanied PHP interface for the hook
|
||||
:php:`TYPO3\CMS\Backend\Toolbar\ClearCacheActionsHookInterface` has been
|
||||
marked as deprecated as well.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
The extension scanner also detects any usage
|
||||
of the deprecated interface as strong, and the definition of the
|
||||
hook as weak match.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to the newly introduced :php:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent` PSR-14 event.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:backend
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95089:
|
||||
|
||||
==========================================================
|
||||
Deprecation: #95089 - ExtendedFileUtility ProcessData hook
|
||||
==========================================================
|
||||
|
||||
See :issue:`95089`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_extfilefunc.php']['processData']`
|
||||
which can be used to execute additional tasks, after a file operation has
|
||||
been performed, has been marked as deprecated.
|
||||
|
||||
The accompanied PHP interface for the hook
|
||||
:php:`TYPO3\CMS\Core\Utility\File\ExtendedFileUtilityProcessDataHookInterface`
|
||||
has been marked as deprecated as well.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
The extension scanner also detects any usage
|
||||
of the deprecated interface as strong, and the definition of the
|
||||
hook as weak match.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to the newly introduced :php:`AfterFileCommandProcessedEvent` PSR-14 event.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,48 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-95105:
|
||||
|
||||
==============================================
|
||||
Deprecation: #95105 - DatabaseRecordList hooks
|
||||
==============================================
|
||||
|
||||
See :issue:`95105`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list_extra.inc']['actions']`
|
||||
which is used in the :php:`DatabaseRecordList` class for modifying the
|
||||
behavior of each table listing, has been marked as deprecated.
|
||||
|
||||
Using this hook always required to implement the :php:`\TYPO3\CMS\Recordlist\RecordList\RecordListHookInterface`,
|
||||
which then required the corresponding hook class to implement four different
|
||||
hook methods, even if only one of them was needed.
|
||||
|
||||
Furthermore are those methods no longer sufficient since e.g. the "controls"
|
||||
and "clip" sections were merged together already. Therefore, also the
|
||||
accompanied PHP interface :php:`TYPO3\CMS\Recordlist\RecordList\RecordListHookInterface`
|
||||
has been marked as deprecated.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the hook is registered in a TYPO3 installation, a PHP :php:`E_USER_DEPRECATED` error is triggered. The extension scanner also detects any usage
|
||||
of the deprecated interface as strong, and the definition of the
|
||||
hook as weak match.
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions using this hook.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to the corresponding RecordList PSR-14 events:
|
||||
|
||||
- `\TYPO3\CMS\Recordlist\Event\ModifyRecordListTableActionsEvent`
|
||||
- `\TYPO3\CMS\Recordlist\Event\ModifyRecordListHeaderColumnsEvent`
|
||||
- `\TYPO3\CMS\Recordlist\Event\ModifyRecordListRecordActionsEvent`
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,33 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-71775:
|
||||
|
||||
==========================================
|
||||
Feature: #71775 - HtmlParser allows srcset
|
||||
==========================================
|
||||
|
||||
See :issue:`71775`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`\TYPO3\CMS\Core\Html\HtmlParser` - most commonly used when rendering RTE fields
|
||||
in the frontend - now handles the :html:`srcset` attribute.
|
||||
|
||||
A casual use case for this are responsive images:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<picture>
|
||||
<source media="(max-width: 799px)" srcset="small-image.jpg">
|
||||
<source media="(min-width: 800px)" srcset="larger-image.jpg">
|
||||
</picture>
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :html:`source` tag with :html:`srcset` attribute is allowed and
|
||||
:html:`srcset` values are prefixed correctly.
|
||||
|
||||
.. index:: Frontend, RTE, ext:core
|
||||
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84115:
|
||||
|
||||
============================================================
|
||||
Feature: #84115 - Doctrine DBAL - notInSet() for expressions
|
||||
============================================================
|
||||
|
||||
See :issue:`84115`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3's Database Abstraction Layer supports a wide range of
|
||||
cross-RDBMS-functionality to limit SELECT statements via
|
||||
the ExpressionBuilder.
|
||||
|
||||
When using :php:`\TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder`
|
||||
for comma-separated lists, the call :php:`inSet()` can be used to detect database rows
|
||||
which include a value in a comma-separated list, such as
|
||||
:sql:`pages.fe_group` where the UIDs of allowed frontend user groups
|
||||
are stored.
|
||||
|
||||
The method :php:`notInSet()` has been added to TYPO3's DBAL ExpressionBuilder,
|
||||
which works as the opposite functionality:
|
||||
"Get all rows where a certain value is NOT in the list of comma-separated values".
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to use :php:`notInSet()` via Doctrine DBAL
|
||||
Expression Builder for SQLite, MySQL/MariaDB, PostgreSQL and MSSQL Backends.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('fe_users');
|
||||
$result = $queryBuilder
|
||||
->select('*')
|
||||
->from('fe_users')
|
||||
->where(
|
||||
$queryBuilder->expr()->notInSet('usergroup', '5')
|
||||
)
|
||||
->execute();
|
||||
|
||||
|
||||
This queries all frontend users which do not directly belong
|
||||
to usergroup of with uid "5".
|
||||
|
||||
Please note that this functionality is for extension authors
|
||||
and their usage should be thought-through properly, as queries such as "Show me all results where the usergroup has NO access to" isn't a use-case for `notInSet()`.
|
||||
|
||||
.. index:: Database, ext:core
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84184:
|
||||
|
||||
====================================================
|
||||
Feature: #84184 - Show columns selection in filelist
|
||||
====================================================
|
||||
|
||||
See :issue:`84184`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The column selector, introduced in :issue:`94218` and improved
|
||||
in :issue:`94474`, is now also available in the filelist module.
|
||||
|
||||
As already known from the recordlist, it can be used to manage the fields,
|
||||
displayed for each file / folder, while containing convenience actions,
|
||||
such as "filter", "check all / none" and "toggle selection".
|
||||
|
||||
The fields to be selected are a combination of special fields, such as
|
||||
`references` or `read/write` permissions, the corresponding `sys_file`
|
||||
record fields, as well as all available `sys_file_metadata` fields.
|
||||
|
||||
Administrators can manage whether the column selection is available
|
||||
for their users with a new User TSconfig option:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
# disable the column selector
|
||||
options.file_list.displayColumnSelector = 0
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to manage the displayed fields for files / folders
|
||||
in the filelist module, using the columns selection component.
|
||||
|
||||
.. index:: Backend
|
||||
@@ -0,0 +1,64 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84718:
|
||||
|
||||
======================================================
|
||||
Feature: #84718 - Add CLI export command to EXT:impexp
|
||||
======================================================
|
||||
|
||||
See :issue:`84718`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new CLI command
|
||||
|
||||
- :bash:`impexp:export`
|
||||
|
||||
was added as the missing twin of the existing CLI command :bash:`impexp:import`.
|
||||
|
||||
The export command can be executed via
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
typo3/sysext/core/bin/typo3 impexp:export [options] [--] [<filename>]
|
||||
|
||||
and exports the entire TYPO3 page tree - or parts of it - to a data file of
|
||||
format XML or T3D, which can be used for import into any TYPO3 instance or
|
||||
as initial page tree of a :ref:`distribution <t3coreapi:distribution>`.
|
||||
|
||||
The export can be fine-tuned through the complete set of options already
|
||||
available in the export view of the TYPO3 backend:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Arguments:
|
||||
filename The filename to export to (without file extension)
|
||||
|
||||
Options:
|
||||
--type[=TYPE] The file type (xml, t3d, t3d_compressed). [default: "xml"]
|
||||
--pid[=PID] The root page of the exported page tree. [default: -1]
|
||||
--levels[=LEVELS] The depth of the exported page tree. "-2": "Records on this page", "-1": "Expanded tree", "0": "This page", "1": "1 level down", .. "999": "Infinite levels". [default: 0]
|
||||
--table[=TABLE] Include all records of this table. Examples: "_ALL", "tt_content", "sys_file_reference", etc. (multiple values allowed)
|
||||
--record[=RECORD] Include this specific record. Pattern is "{table}:{record}". Examples: "tt_content:12", etc. (multiple values allowed)
|
||||
--list[=LIST] Include the records of this table and this page. Pattern is "{table}:{pid}". Examples: "sys_language:0", etc. (multiple values allowed)
|
||||
--includeRelated[=INCLUDERELATED] Include record relations to this table, including the related record. Examples: "_ALL", "sys_category", etc. (multiple values allowed)
|
||||
--includeStatic[=INCLUDESTATIC] Include record relations to this table, excluding the related record. Examples: "_ALL", "sys_language", etc. (multiple values allowed)
|
||||
--exclude[=EXCLUDE] Exclude this specific record. Pattern is "{table}:{record}". Examples: "fe_users:3", etc. (multiple values allowed)
|
||||
--excludeDisabledRecords Exclude records which are handled as disabled by their TCA configuration, e.g. by fields "disabled", "starttime" or "endtime".
|
||||
--excludeHtmlCss Exclude referenced HTML and CSS files.
|
||||
--title[=TITLE] The meta title of the export.
|
||||
--description[=DESCRIPTION] The meta description of the export.
|
||||
--notes[=NOTES] The meta notes of the export.
|
||||
--dependency[=DEPENDENCY] This TYPO3 extension is required for the exported records. Examples: "news", "powermail", etc. (multiple values allowed)
|
||||
--saveFilesOutsideExportFile Save files into separate folder instead of including them into the common export file. Folder name pattern is "{filename}.files".
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Exporting a TYPO3 page tree without time limit is now possible via CLI.
|
||||
|
||||
Repeated exports with the same configuration become easily documentable and
|
||||
applicable - for example during distribution development.
|
||||
|
||||
.. index:: CLI, ext:impexp
|
||||
@@ -0,0 +1,60 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-90197:
|
||||
|
||||
=======================================================
|
||||
Feature: #90197 - Introduce cache:flush console command
|
||||
=======================================================
|
||||
|
||||
See :issue:`90197`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
It is now possible to flush TYPO3 caches using the command line.
|
||||
|
||||
The administrator can use the following CLI command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
./typo3/sysext/core/bin/typo3 cache:flush
|
||||
|
||||
Specific cache groups can be defined via the group option.
|
||||
The usage is described as:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cache:flush [--group <all|system|di|pages|…>]
|
||||
|
||||
All available cache groups can be supplied as option. The command defaults to
|
||||
flush all available cache groups as the install tool does.
|
||||
|
||||
Extensions that register custom caches may listen to the
|
||||
via :php:`TYPO3\CMS\Core\Cache\Event\CacheFlushEvent`, but usually the
|
||||
cache flush via CacheManager groups will suffice.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is often required to clear caches during deployment of TYPO3 instance
|
||||
updates, in order for content changes to become active.
|
||||
|
||||
TYPO3 caches can now be flushed in release postparatory steps. The integrator
|
||||
may decide to flush all caches (common practice with `EXT:typo3_console`) or
|
||||
may alternatively flush selected groups (e.g. 'pages') in case the `cache:warmup`
|
||||
(see :issue:`93436`) command is used as companion in release preparatory steps.
|
||||
|
||||
Deployment steps could then be:
|
||||
|
||||
* Release preparation:
|
||||
|
||||
* git-checkout/rsync your codebase (on CI or on live system)
|
||||
* `composer install` (on CI or on live system)
|
||||
* `vendor/bin/typo3 cache:warmup --group system` (*only* on the live system)
|
||||
|
||||
* Change release symlink to the new release folder
|
||||
* Release postparation
|
||||
|
||||
* `vendor/bin/typo3 cache:flush --group pages`
|
||||
|
||||
.. index:: CLI, ext:core
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-90336:
|
||||
|
||||
============================================================
|
||||
Feature: #90336 - CKEditor Autolinking uses https by default
|
||||
============================================================
|
||||
|
||||
See :issue:`90336`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 ships with a CKEditor plugin called "autolinking", which
|
||||
automatically converts typed text within a RTE to an external URL.
|
||||
|
||||
When typing `www.typo3.org` this is automatically converted to
|
||||
an absolute external link, which previously used `http://` as
|
||||
schema.
|
||||
|
||||
Nowadays, over 90% of the web is served via the https protocol
|
||||
and secure connections via SSL/TLS, where it is safe to
|
||||
use secure-by-default links.
|
||||
|
||||
When not specifically using a schema as prefix for an autolinking
|
||||
URL, CKEditor now uses `https` instead of `http` as schema by default.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
When typing a URL like www.typo3.org in the RTE and the autolinking
|
||||
plugin is activated, the default schema used is now `https` instead
|
||||
of `http` for any new links.
|
||||
|
||||
However, it is - as before - fully possible to manually change a
|
||||
link to use the `http://` schema instead.
|
||||
|
||||
.. index:: RTE, ext:rte_ckeditor
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-90347:
|
||||
|
||||
===========================================================================
|
||||
Feature: #90347 - Enable recursive transformation of properties in JsonView
|
||||
===========================================================================
|
||||
|
||||
See :issue:`90347`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Extbase :php:`\TYPO3\CMS\Extbase\Mvc\View\JsonView` is now able to resolve
|
||||
recursive properties of objects, e.g. directories containing directories or
|
||||
comments containing comments as replies.
|
||||
|
||||
Examples:
|
||||
|
||||
1. This is for 1:1 relations, where a comment has at most 1 comment.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$configuration = [
|
||||
'comment' => [
|
||||
'_recursive' => ['comment']
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
2. This is for the more common 1:n relation in which you have lists of sub objects.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$configuration = [
|
||||
'directories' => [
|
||||
'_descendAll' => [
|
||||
'_recursive' => ['directories']
|
||||
],
|
||||
]
|
||||
];
|
||||
|
||||
You can put all the other configuration like :php:`_only` or :php:`_exclude` at the same
|
||||
level as :php:`_recursive` and the view will apply this for all levels.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Developers can now use the :php:`_recursive` property in the :php:`JsonView`
|
||||
configuration in order to resolve recursive properties instead of defining each
|
||||
level manually.
|
||||
|
||||
.. index:: ext:extbase
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-90548:
|
||||
|
||||
=================================================================
|
||||
Feature: #90548 - Download multiple files and folders in filelist
|
||||
=================================================================
|
||||
|
||||
See :issue:`90548`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
From time to time, editors might need to download files and folders,
|
||||
which are stored in the TYPO3 installation. Therefore, the filelist
|
||||
module has been improved to provide a couple of possibilities for
|
||||
downloading the stored files and folders.
|
||||
|
||||
The action bar on the top of the listing now features the "Download"
|
||||
option. It is shown, as soon as a file or folder is selected. It can
|
||||
therefore be used to download a specific selection of files and folders.
|
||||
|
||||
The "Download" option has furthermore been added to the context menu as
|
||||
well as the secondary menu. Those options can be used to download
|
||||
a single file or folder.
|
||||
|
||||
Administrators can furthermore specify, which file extensions are allowed
|
||||
for their users to be downloaded. Therefore, following user TSconfig is
|
||||
available, expecting a comma-separated list of file extensions:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
# Either an allow list
|
||||
options.file_list.fileDownload.allowedFileExtensions = png,svg,pdf
|
||||
|
||||
# or a deny list
|
||||
options.file_list.fileDownload.disallowedFileExtensions = yaml,exe,html
|
||||
|
||||
It's also possible to completely disable the file download for users:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
options.file_list.fileDownload.enabled = 0
|
||||
|
||||
.. note::
|
||||
|
||||
When downloading folders, all readable subfolders and their files
|
||||
are included in the generated ZIP file as well.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to download files and folders in the filelist module.
|
||||
|
||||
.. index:: Backend, ext:filelist
|
||||
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-91021:
|
||||
|
||||
======================================================
|
||||
Feature: #91021 - Filter by stage in Workspaces Module
|
||||
======================================================
|
||||
|
||||
See :issue:`91021`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When reviewing staged changes in a larger workspace environment,
|
||||
editors who need to review changes or send them to the next
|
||||
stage now have an additional filter dropdown in the Workspaces
|
||||
module to only show records that are in a specific stage.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A new dropdown to narrow down lot of records has been added
|
||||
to the Workspaces administration module, which is automatically
|
||||
populated with available stages for the specific workspace.
|
||||
|
||||
.. index:: Backend, ext:workspaces
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-92460:
|
||||
|
||||
=================================================================
|
||||
Feature: #92460 - Split default from all languages in page module
|
||||
=================================================================
|
||||
|
||||
See :issue:`92460`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The view "Languages" in the page module allows to display content elements of
|
||||
the default language next to the ones of the selected language.
|
||||
|
||||
If the default language is chosen, instead of rendering all content elements
|
||||
of all languages, now only the content elements of the default language are
|
||||
rendered.
|
||||
|
||||
If an editor requires to see all content elements of all languages, the
|
||||
option "All languages" can be selected.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Having many languages and many content elements can be a performance issue
|
||||
in the page module which is now fixed.
|
||||
|
||||
Additionally the language view is now consistent with the column view.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93197:
|
||||
|
||||
====================================================================
|
||||
Feature: #93197 - Resolve collection types of non-persistent objects
|
||||
====================================================================
|
||||
|
||||
See :issue:`93197`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Collection types are used to define a specific class that should be within
|
||||
Extbase's :php:`\TYPO3\CMS\Extbase\Persistence\ObjectStorage` class.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
/**
|
||||
* @param ObjectStorage<Item> $items
|
||||
*/
|
||||
public function setItems(ObjectStorage $items): void
|
||||
{
|
||||
$this->items = $items;
|
||||
}
|
||||
|
||||
These docblocks are analyzed so the :php:`PropertyMapper` knows how to map
|
||||
incoming requests. This mapping already works for persistent objects
|
||||
(domain models). As non-persistent objects are also used for property mapping,
|
||||
namely DTOs (data transfer objects), this now works for them, too.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Developers can use collection types in docblock annotations for non-persistent
|
||||
objects. The collection type is considered while property mapping requests.
|
||||
|
||||
.. index:: PHP-API, ext:extbase
|
||||
@@ -0,0 +1,85 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-93436:
|
||||
|
||||
========================================================
|
||||
Feature: #93436 - Introduce cache:warmup console command
|
||||
========================================================
|
||||
|
||||
See :issue:`93436`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
It is now possible to warmup TYPO3 caches using the command line.
|
||||
|
||||
The administrator can use the following CLI command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
./typo3/sysext/core/bin/typo3 cache:warmup
|
||||
|
||||
Specific cache groups can be defined via the group option.
|
||||
The usage is described as:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cache:warmup [--group <all|system|di|pages|…>]
|
||||
|
||||
All available cache groups can be supplied as option. The command defaults to
|
||||
warm all available cache groups.
|
||||
|
||||
Extensions that register custom caches are encouraged to implement cache warmers
|
||||
via :php:`TYPO3\CMS\Core\Cache\Event\CacheWarmupEvent`.
|
||||
|
||||
Note: TYPO3 frontend caches will not be warmed by TYPO3 core, such functionality
|
||||
could be added by third party extensions with the help of
|
||||
:php:`TYPO3\CMS\Core\Cache\Event\CacheWarmupEvent`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is common practice to clear all caches during deployment of TYPO3 instance
|
||||
updates. This means that the first request after a deployment usually takes
|
||||
a major amount of time and blocks other requests due to cache-locks.
|
||||
|
||||
TYPO3 caches can now be warmed during deployment in release preparatory steps in
|
||||
symlink based deployment/release procedures. This enables fast first requests
|
||||
with all (or at least system) caches being prepared and warmed.
|
||||
|
||||
Caches are often filesystem relevant (filepaths are calculated into cache
|
||||
hashes), therefore cache warmup should only be performed on the live system,
|
||||
in the *final* folder of a new release, and ideally before switching
|
||||
to that new release (via symlink switch). Note that caches that have be
|
||||
pre-created in CI will likely be useless as cache hashes will not match.
|
||||
|
||||
To summarize: Cache warmup is to be used during deployment, on the live system
|
||||
server, inside the new release folder and before switching the new release live.
|
||||
|
||||
Deployment steps are:
|
||||
|
||||
* Release preparation:
|
||||
|
||||
* git-checkout/rsync your codebase (on CI or on live system)
|
||||
* `composer install` (on CI or on live system)
|
||||
* `vendor/bin/typo3 cache:warmup --group system` (*only* on the live system)
|
||||
|
||||
* Change release symlink to the new release folder
|
||||
* Release postparation
|
||||
|
||||
* Clear only the page related caches (e.g. via database truncate or an
|
||||
upcoming `cache:flush` command)
|
||||
|
||||
The conceptional idea is to warmup all file-related caches *before* (symlink)
|
||||
switching to a new release and to *only* flush database and frontend (shared)
|
||||
caches after the symlink switch. Database warmup could be implemented with
|
||||
the help of the :php:`TYPO3\CMS\Core\Cache\Event\CacheWarmupEvent` as an
|
||||
additionally functionality by third party extensions.
|
||||
|
||||
Note that file-related caches (summarized into the group "system") can safely be
|
||||
cleared before doing a release switch, as it is recommended to keep file caches
|
||||
per release. In other words, share :file:`var/session`, :file:`var/log`,
|
||||
:file:`var/lock` and :file:`var/charset` between releases, but keep
|
||||
:file:`var/cache` be associated only with one release.
|
||||
|
||||
.. index:: CLI, ext:core
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94402:
|
||||
|
||||
=====================================================================
|
||||
Feature: #94402 - Generate error pages via TYPO3-internal sub-request
|
||||
=====================================================================
|
||||
|
||||
See :issue:`94402`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Error pages (such as 404 - not found, or 403 - access denied) may now be generated
|
||||
via a TYPO3-internal sub-request instead of an external HTTP
|
||||
request (cURL over Guzzle).
|
||||
|
||||
This feature is disabled by default, as there are some cases where stateful information
|
||||
is not correctly reset for the subrequest. It may be enabled on an experimental
|
||||
basis via a feature flag called `subrequestPageErrors` in the "Settings"
|
||||
module.
|
||||
|
||||
This change will default to enabled in a future version once all stateful services
|
||||
are identified and removed.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Generating error pages internally reduces the server load drastically, and
|
||||
solves various issues when dealing with load-balanced systems where the hostname
|
||||
of the server might not match the public-facing server ("front server").
|
||||
|
||||
However, in some cases there might be problems with third-party extensions
|
||||
that override super globals (e.g. :php:`$_GET` and :php:`$_POST`), where the option could be
|
||||
disabled. There are also some remaining cases in core of stateful services that,
|
||||
in some configurations, result in incorrect error pages being generated. For that
|
||||
reason the feature defaults to disabled for now.
|
||||
|
||||
This feature is only relevant for site configurations loading error pages
|
||||
from a different Page ID.
|
||||
|
||||
.. index:: Frontend, PHP-API, ext:frontend
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94406:
|
||||
|
||||
=====================================================================
|
||||
Feature: #94406 - Override fileFolder TCA configuration with TSconfig
|
||||
=====================================================================
|
||||
|
||||
See :issue:`94406`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The special `fileFolder configuration options <https://docs.typo3.org/m/typo3/reference-tca/main/en-us/ColumnsConfig/Type/Select/Properties/FileFolder.html#filefolder>`__
|
||||
for TCA columns of type :php:`select` can be used to fill a select field with files
|
||||
(images / icons) from a defined folder. This is really handy, e.g. for selecting
|
||||
predefined icons from a corporate icon set. However, in installations with
|
||||
multiple sites, such icon sets usually differ from site to site.
|
||||
|
||||
Therefore, the :php:`fileFolder` configuration can now be overridden with page
|
||||
TSconfig, allowing administrators to easily handle those situations by e.g.
|
||||
using different folders or allowing different file extensions, per site.
|
||||
|
||||
To streamline both, the TCA configuration and the corresponding overrides,
|
||||
the :php:`fileFolder` configuration options have been moved into a dedicated sub
|
||||
array :php:`fileFolderConfig`, some options have been renamed:
|
||||
|
||||
* :php:`fileFolder` option :php:`folder`
|
||||
* :php:`fileFolder_extList` to :php:`allowedExtensions`
|
||||
* :php:`fileFolder_recursions` to :php:`depth`
|
||||
|
||||
A TCA migration wizard is available, showing where adjustments have to take place.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'aField' => [
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'fileFolder' => 'EXT:my_ext/Resources/Public/Icons',
|
||||
'fileFolder_extList' => 'svg',
|
||||
'fileFolder_recursions' => 1,
|
||||
]
|
||||
]
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'aField' => [
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'fileFolderConfig' => [
|
||||
'folder' => 'EXT:styleguide/Resources/Public/Icons',
|
||||
'allowedExtensions' => 'svg',
|
||||
'depth' => 1,
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
Thus, the following TSconfig options can be used to overriding their
|
||||
TCA counterpart:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.fileFolderConfig.folder
|
||||
config.fileFolderConfig.allowedExtensions
|
||||
config.fileFolderConfig.depth
|
||||
|
||||
As already known from TCEFORM, those options can be used on various levels
|
||||
|
||||
On table level:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
TCEFORM.myTable.myField.config.fileFolderConfig.folder
|
||||
|
||||
On table and record type level:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
TCEFORM.myTable.myFiled.types.myType.config.fileFolderConfig.folder
|
||||
|
||||
On flex form field level:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
TCEFORM.myTable.pi_flexform.my_ext_pi1.sDEF.myField.config.fileFolderConfig.folder
|
||||
|
||||
.. note::
|
||||
|
||||
Except :typoscript:`config.fileFolderConfig.folder`, the new options can not
|
||||
only be used to override an existing property, but also to define
|
||||
one, which has not yet been configured in TCA.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to override the TCA :php:`fileFolder` configuration options
|
||||
with page TSconfig, allowing administrators to manipulate the available
|
||||
items on a page basis.
|
||||
|
||||
The :php:`fileFolder` TCA configuration is furthermore streamlined and now
|
||||
encapsulated in a dedicated sub array :php:`fileFolderConfig`.
|
||||
|
||||
.. index:: Backend, TCA, TSConfig, ext:backend
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94489:
|
||||
|
||||
================================================
|
||||
Feature: #94489 - Filter for redirects never hit
|
||||
================================================
|
||||
|
||||
See :issue:`94489`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since :issue:`89115` TYPO3 is able to automatically create redirects
|
||||
whenever an editor changes a slug of a page. This is a really handy feature.
|
||||
However on large sites this could quickly lead to a lot of redirects, which
|
||||
may will never be used by any website visitor.
|
||||
|
||||
To support editors by managing their redirects, a new filter option
|
||||
:guilabel:`Never hit` has been added to the Redirects modules' filter.
|
||||
Activating this option therefore filters the list for redirects, which
|
||||
where never hit before.
|
||||
|
||||
.. note::
|
||||
|
||||
The filter option will only be available, if the "Redirects hit count"
|
||||
feature is enabled, see:
|
||||
:doc:`#83677 <../9.1/Feature-83677-GloballyDisableenableRedirectHitStatistics>`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A new filter option :guilabel:`Never hit` is available in the Redirects
|
||||
module, allowing editors to filter for redirects, which were never hit before.
|
||||
|
||||
.. index:: Backend, ext:redirects
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94577:
|
||||
|
||||
========================================================================
|
||||
Feature: #94577 - Clear indexed_search documents when content is changed
|
||||
========================================================================
|
||||
|
||||
See :issue:`94577`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new Extension Configuration setting `deleteFromIndexAfterEditing` has been added
|
||||
to the extension `indexed_search`.
|
||||
|
||||
If enabled and a page or its content is edited, :php:`DataHandler` triggers a hook
|
||||
to remove the page and its content from the search index.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A separate index and clearing it is always a tradeoff between having wrong content
|
||||
and no content in the search result. The index is filled by website visitors or bots
|
||||
calling the page in the frontend or by using the 3rd party extension crawler_.
|
||||
|
||||
If the setting is enabled and the page is not yet re-indexed, **no** content will
|
||||
be shown in the search result, no matter if the editor just fixed one tiny typo in a content element.
|
||||
|
||||
If the feature flag is disabled, the editor needs to manually clear the index.
|
||||
|
||||
.. _crawler: https://extensions.typo3.org/extension/crawler
|
||||
|
||||
.. index:: Backend, ext:indexed_search
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94590:
|
||||
|
||||
======================================================================
|
||||
Feature: #94590 - Allow icon identifiers in report module registration
|
||||
======================================================================
|
||||
|
||||
See :issue:`94590`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further streamline the usage of the Icon Registry, the reports registration
|
||||
array now allows to define icon identifiers for the :php:`icon` key. Absolute
|
||||
paths and paths with `EXT:` prefix are still possible.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status'] = [
|
||||
'title' => 'LLL:EXT:reports/Resources/Private/Language/locallang_reports.xlf:status_report_title',
|
||||
'icon' => 'module-reports', // Icon identifiers are now possible here.
|
||||
'description' => 'LLL:EXT:reports/Resources/Private/Language/locallang_reports.xlf:status_report_description',
|
||||
'report' => \TYPO3\CMS\Reports\Report\Status\Status::class
|
||||
];
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Developers are now able to provide icon identifiers in the reports module
|
||||
registration array.
|
||||
|
||||
.. index:: Backend, PHP-API, ext:reports
|
||||
@@ -0,0 +1,128 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94622:
|
||||
|
||||
=========================================
|
||||
Feature: #94622 - New TCA type "category"
|
||||
=========================================
|
||||
|
||||
See :issue:`94622`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new TCA field type called :php:`category` has been added to TYPO3 Core.
|
||||
Its main purpose is to simplify the TCA configuration when adding a category
|
||||
tree to a record. It therefore supersedes the :php:`\TYPO3\CMS\Core\Category\CategoryRegistry` as well
|
||||
as the :php:`\TYPO3\CMS\Core\Utility\ExtensionManagementUtility->makeCategorizable()`, which required
|
||||
creating a "TCA overrides" file.
|
||||
|
||||
Both, the :php:`CategoryRegistry` as well as
|
||||
:php:`ExtensionManagementUtility->makeCategorizable()` are going to be
|
||||
deprecated in the future.
|
||||
|
||||
While using the new type, TYPO3 takes care of generating the necessary TCA
|
||||
configuration and also adds the database column automatically. Developers
|
||||
only have to configure the TCA column and add it to the desired record types.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TCA'][$myTable]['columns']['categories'] = [
|
||||
'config' => [
|
||||
'type' => 'category'
|
||||
]
|
||||
];
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes($myTable, 'categories');
|
||||
|
||||
The above example does not contain the new option :php:`relationship`
|
||||
since the default is :php:`manyToMany`. All possible values are:
|
||||
|
||||
* :php:`oneToOne`: Stores the uid of the selected category. When using this
|
||||
relationship, :php:`maxitems=1` will automatically be added to the column configuration
|
||||
* :php:`oneToMany`: Stores the uids of selected categories in a comma-separated list
|
||||
* :php:`manyToMany` (default): Uses the intermediate table :sql:`sys_category_record_mm`
|
||||
and only stores the categories count on the local side. This is the use case,
|
||||
which was previously accomplished using :php:`ExtensionManagementUtility->makeCategorizable()`.
|
||||
|
||||
This means, the new type can not only be used with :php:`relationship=manyToMany` as
|
||||
a replacement for :php:`makeCategorizable` but can be used for other use
|
||||
cases too. In case a category tree is required, only allowing one category
|
||||
to be selected, the necessary configuration reduces to
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TCA'][$myTable]['columns']['mainCategory'] = [
|
||||
'config' => [
|
||||
'type' => 'category',
|
||||
'relationship' => 'oneToOne'
|
||||
]
|
||||
];
|
||||
|
||||
All other relevant options, e.g. :php:`maxitems=1`, are being set automatically.
|
||||
|
||||
Besides :php:`type` and :php:`relationship`, following type specific options
|
||||
are available:
|
||||
|
||||
* :php:`default`
|
||||
* :php:`exclusiveKeys`: As known from :php:`renderType=selectTree`
|
||||
* :php:`treeConfig`: As known from :php:`renderType=selectTree`
|
||||
|
||||
It's possible to use TSconfig options, such as
|
||||
:typoscript:`removeItems`. However, adding static items with TSconfig is not
|
||||
implemented for this type. For such special cases, please continue using TCA
|
||||
type :php:`select`.
|
||||
|
||||
The Override matrix - specifying the options which can be overridden in
|
||||
TSconfig - is extended for the new type. Following options can be overridden:
|
||||
|
||||
* :php:`size`
|
||||
* :php:`maxitems`
|
||||
* :php:`minitems`
|
||||
* :php:`readOnly`
|
||||
* :php:`treeConfig`
|
||||
|
||||
.. note::
|
||||
|
||||
It's still possible to configure a category tree with :php:`type=select`
|
||||
and :php:`renderType=selectTree`. This configuration will still work, but
|
||||
could in most cases be simplified, using the new :php:`category` TCA type.
|
||||
|
||||
Flexform usage
|
||||
--------------
|
||||
|
||||
It's also possible to use the new type in flexform data structures. However,
|
||||
due to some limitations in flexform, the "manyToMany" relationship is not
|
||||
supported. Therefore, the default relationship - used if none is defined -
|
||||
is "oneToMany". This is anyways the most common use case for flexforms,
|
||||
as it's not important to look from the other side "which flexform elements
|
||||
reference this category". An example of the "oneToMany" use case is EXT:news,
|
||||
which allows to only display news of specific categories in the list view.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<T3DataStructure>
|
||||
<ROOT>
|
||||
<TCEforms>
|
||||
<sheetTitle>aTitle</sheetTitle>
|
||||
</TCEforms>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<categories>
|
||||
<TCEforms>
|
||||
<config>
|
||||
<type>category</type>
|
||||
</config>
|
||||
</TCEforms>
|
||||
</categories>
|
||||
</el>
|
||||
</ROOT>
|
||||
</T3DataStructure>
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to simplify the TCA configuration for category fields,
|
||||
using the new TCA type :php:`category`.
|
||||
|
||||
.. index:: Backend, TCA, ext:backend
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94623:
|
||||
|
||||
==================================================================================
|
||||
Feature: #94623 - tt_content images, assets, media showPossibleLocalizationRecords
|
||||
==================================================================================
|
||||
|
||||
See :issue:`94623`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When a default language content element is localized to another language
|
||||
in "connected" / "translation" mode (as opposed to "copy"), relations like
|
||||
images and assets connected to the default language record are localized as well.
|
||||
|
||||
When the default language element is later changed and additional images, assets
|
||||
or media relations are added, the localized content element now shows those new
|
||||
default language relations as shadowed box and allows to localize them with one click.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This is a usability improvement for editors, who now see which tt_content
|
||||
relations of casual elements like "Image" and "Media" are missing when
|
||||
editing localizations. They can localize those with one click.
|
||||
|
||||
.. index:: Backend, TCA, ext:backend
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94653:
|
||||
|
||||
===============================================================
|
||||
Feature: #94653 - Autocomplete attribute for PasswordViewHelper
|
||||
===============================================================
|
||||
|
||||
See :issue:`94653`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since password managers are frequently used by end users nowadays,
|
||||
a password field can define the :html:`autocomplete` attribute,
|
||||
which informs the users' password manager how to fill the corresponding
|
||||
field. For example, creating a new password or filling in the current password.
|
||||
|
||||
See `MDN Allowing autocomplete`_ for a full list of possible attribute values.
|
||||
|
||||
To ease the use for integrators and developers, the attribute can now
|
||||
directly be added as tag attribute to the :php:`PasswordViewHelper`.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<f:form.password name="newPassword" value="" autocomplete="new-password" />
|
||||
|
||||
<!-- Output -->
|
||||
|
||||
<input type="password" name="myNewPassword" value="" autocomplete="new-password" />
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to specify the :html:`autocomplete` attribute for the password
|
||||
field through the :php:`PasswordViewHelper`.
|
||||
|
||||
.. _MDN Allowing autocomplete: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password#allowing_autocomplete
|
||||
|
||||
.. index:: Fluid, ext:fluid
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94662:
|
||||
|
||||
===============================================================================
|
||||
Feature: #94662 - Add placeholder for site configuration in foreign_table_where
|
||||
===============================================================================
|
||||
|
||||
See :issue:`94662`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`foreign_table_where` setting in TCA allows some old marker-based
|
||||
placeholder to customize the query. The best place to define site-dependent
|
||||
settings is the site configuration, which now can be used within
|
||||
:php:`foreign_table_where`.
|
||||
|
||||
To access a configuration value the following syntax is available:
|
||||
|
||||
* `###SITE:<KEY>###` - <KEY> is your setting name from site config e.g. `###SITE:rootPageId###`
|
||||
* `###SITE:<KEY>.<SUBKEY>###` - an array path notation is possible. e.g. `###SITE:mySetting.categoryPid###`
|
||||
|
||||
Example:
|
||||
--------
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
...
|
||||
'fieldConfiguration' => [
|
||||
'foreign_table_where' => ' AND ({#sys_category}.{#uid} = ###SITE:rootPageId### OR {#sys_category}.{#pid} = ###SITE:mySetting.categoryPid###) ORDER BY {#sys_category}.{#title} ASC',
|
||||
],
|
||||
...
|
||||
|
||||
.. index:: Backend, FlexForm, TCA, NotScanned, ext:backend
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94680:
|
||||
|
||||
==============================================
|
||||
Feature: #94680 - Show columns selector filter
|
||||
==============================================
|
||||
|
||||
See :issue:`94680`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In :issue:`94474`, the column selector in the record list, formerly known
|
||||
as "field selector", got improved by adding a couple of actions, such
|
||||
as "check all" and by moving the selection into a modal instead of a dropdown.
|
||||
However, since there are tables, e.g. :sql:`pages` or :sql:`tt_content`, which
|
||||
contain a lot of columns, it could sometimes still be unnecessarily hard
|
||||
to find a specific column in such a list.
|
||||
|
||||
Therefore, the columns selectors' action bar has been extended for
|
||||
a new filter, which can be used to quickly find the desired column
|
||||
in such large lists.
|
||||
|
||||
When the filter is active - at least one character was entered - all other
|
||||
actions are bound to the current filter result. This means, when using the
|
||||
"check all" action, while the list is filtered, the action is only applied
|
||||
to the currently visible items. This comes in handy in case a group of
|
||||
columns, sharing the same name (e.g. "backend layouts" in :sql:`pages`) should
|
||||
be selected.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to filter the list of columns in the "Show column selector"
|
||||
of the recordlist module.
|
||||
|
||||
.. index:: Backend, ext:recordlist
|
||||
@@ -0,0 +1,51 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94692-1657826754:
|
||||
|
||||
=========================================================
|
||||
Feature: #94692 - Registering Icons via Service Container
|
||||
=========================================================
|
||||
|
||||
See :issue:`94692`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Extensions can now register their custom icons via
|
||||
a configuration file placed in :file:`Configuration/Icons.php` of their
|
||||
extension directory, e.g. :file:`typo3conf/ext/my_extension/Configuration/Icons.php`.
|
||||
|
||||
Each file needs to return a flat PHP configuration array, with
|
||||
custom options used for the IconRegistry to register a new icon.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
return [
|
||||
'myicon' => [
|
||||
'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
|
||||
'source' => 'EXT:my_extension/Resources/Public/Icons/myicon.svg'
|
||||
],
|
||||
'anothericon' => [
|
||||
'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
|
||||
'source' => 'EXT:my_extension/Resources/Public/Icons/anothericon.svg'
|
||||
],
|
||||
...
|
||||
];
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the new approach improves the loading speed of every request
|
||||
as the registration can be handled at once and cached
|
||||
during warmup of the core caches.
|
||||
|
||||
In addition, extension authors' :file:`ext_localconf.php` files are
|
||||
drastically reduced, as extension authors have a better overview
|
||||
and a better separation of concerns when registering custom
|
||||
functionality.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94741:
|
||||
|
||||
=======================================================
|
||||
Feature: #94741 - Register SoftReference parsers via DI
|
||||
=======================================================
|
||||
|
||||
See :issue:`94741`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Parsers for :ref:`soft references <t3coreapi:soft-references>` can now be
|
||||
registered via dependency injection in the corresponding
|
||||
:file:`Configuration/Services.(yaml|php)` file of your extension. This is done
|
||||
by tagging your class with the new tag name :yaml:`softreference.parser` and
|
||||
providing the parser key for the attribute :yaml:`parserKey`.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
VENDOR\Extension\SoftReference\YourSoftReferenceParser:
|
||||
tags:
|
||||
- name: softreference.parser
|
||||
parserKey: your_key
|
||||
|
||||
In addition, parsers now have to implement
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
This interface describes the :php:`parse()` method, which is very similar to the
|
||||
old method :php:`findRef()`. The difference is that :php:`$parserKey` (former
|
||||
known as :php:`$spKey`) and :php:`$parameters` (former known as
|
||||
:php:`$spParams`) can now be optionally set with the :php:`setParserKey()` method.
|
||||
The key can be retrieved with the :php:`getParserKey()` method.
|
||||
|
||||
The return type has also been changed to
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserResult`.
|
||||
This model holds the former result array key entries :php:`content` and
|
||||
:php:`elements` as properties and has appropriate getter methods for them. It
|
||||
should be created by its own factory method
|
||||
:php:`SoftReferenceParserResult::create()`, which expects both above-mentioned
|
||||
arguments to be provided. If the result is empty,
|
||||
:php:`SoftReferenceParserResult::createWithoutMatches()` should be used instead.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Developers can register their user-defined soft reference parsers in their
|
||||
:file:`Configuration/Services.(yaml|php)` file. In addition, parser have to
|
||||
implement the new interface
|
||||
:php:`TYPO3\CMS\Core\DataHandling\SoftReference\SoftReferenceParserInterface`.
|
||||
|
||||
|
||||
Related
|
||||
=======
|
||||
|
||||
* :doc:`RegisterSoftReferenceParsersViaDI (Deprecation) <Deprecation-94741-RegisterSoftReferenceParsersViaDI>`
|
||||
* :doc:`SoftReferenceIndex (Deprecation) <Deprecation-94687-SoftReferenceIndex>`
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94765:
|
||||
|
||||
====================================================
|
||||
Feature: #94765 - Introduce showNewRecordLink option
|
||||
====================================================
|
||||
|
||||
See :issue:`94765`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Previously, it was not possible to disable the "new record" link in
|
||||
TCA :php:`inline` elements, without simultaneously also disabling either the
|
||||
"+" button in each inline records' header (using
|
||||
:php:`['appearance']['enabledControls']['new']`) or all other
|
||||
"level links" (using :php:`['appearance']['levelLinksPosition'] = 'none'`).
|
||||
|
||||
To allow integrators to disable this link without any further side
|
||||
effects, the option :php:`showNewRecordLink` has been introduced
|
||||
to TCA type :php:`inline`.
|
||||
|
||||
With this introduction, the already mentioned
|
||||
:php:`['appearance']['enabledControls']['new']` option does from now on
|
||||
only manage the display of the "+" button of each inline record and does
|
||||
not longer affect the "New record" link.
|
||||
|
||||
Furthermore the :php:`['appearance']['levelLinksPosition']` option does
|
||||
no longer support `none` as value. This option should only be used to
|
||||
position the level links, not to hide them. This can be
|
||||
achieved by setting the corresponding link specific options
|
||||
:php:`showAllLocalizationLink`, :php:`showSynchronizationLink` and
|
||||
:php:`showNewRecordLink` to :php:`false`. A TCA migration is in place,
|
||||
replacing all TCA configurations, using the
|
||||
:php:`['appearance']['levelLinksPosition']` option with `none` as value
|
||||
and showing where code adaptations need to take place.
|
||||
|
||||
If not set, the new :php:`showNewRecordLink` option defaults to :php:`true`.
|
||||
|
||||
An example to disable the "New record" button:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'inlineField' => [
|
||||
'label' => 'Inline without New record link',
|
||||
'config' => [
|
||||
'type' => 'inline',
|
||||
'appearance' => [
|
||||
'showNewRecordLink' => false,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to disable the "New record" link of TCA :php:`inline` elements
|
||||
without any side effects.
|
||||
|
||||
.. index:: TCA, ext:backend
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94819:
|
||||
|
||||
============================================
|
||||
Feature: #94819 - Improved Workspaces module
|
||||
============================================
|
||||
|
||||
See :issue:`94819`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The workspaces module has been improved in usability:
|
||||
|
||||
For the initial loading of the module, the AJAX request has
|
||||
to process less data as all information is already loaded with
|
||||
the module.
|
||||
|
||||
A loading indicator is now visible during AJAX requests to
|
||||
show editors that there is work in progress.
|
||||
|
||||
A dropdown is now used to choose between multiple workspaces,
|
||||
which is especially useful when having multiple workspaces.
|
||||
|
||||
Administrators can edit workspace settings directly
|
||||
from the module's docheader area.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The overall user experience has been improved and administrators
|
||||
do not need to use the list module to manage workspaces anymore.
|
||||
|
||||
.. index:: Backend, ext:workspaces
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94889:
|
||||
|
||||
======================================================================
|
||||
Feature: #94889 - Add "result" option to typolink returnLast parameter
|
||||
======================================================================
|
||||
|
||||
See :issue:`94889`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This change introduces a new :php:`\TYPO3\CMS\Frontend\Typolink\LinkResult` object along with an
|
||||
interface, containing the base result of a generated link by TypoLink.
|
||||
|
||||
This object should contain all information needed to put together
|
||||
an :html:`<a>` tag or return a URL in the future.
|
||||
|
||||
For the time being this new class is used to build links from
|
||||
:php:`\TYPO3\CMS\Frontend\Typolink\AbstractTypolinkBuilder` implementations, and in addition
|
||||
should be able to be returned fully by :typoscript:`typolink` in the future.
|
||||
|
||||
In addition, this object helps to build links needed
|
||||
for e.g. JSON responses to contain all information
|
||||
of the link to be serialized.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This feature allows user to handle link's data in more consistent way, also
|
||||
simplifies typolink handling in different outputs than HTML, like i.e. JSON
|
||||
|
||||
.. index:: PHP-API, TypoScript, ext:frontend
|
||||
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94906:
|
||||
|
||||
====================================================
|
||||
Feature: #94906 - Multi record selection in filelist
|
||||
====================================================
|
||||
|
||||
See :issue:`94906`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :issue:`94452` the file list in the file selector has been improved
|
||||
by introducing an optimized way of selecting the files to attach to a record.
|
||||
|
||||
Those optimizations have now also been added to the filelist module. The
|
||||
checkboxes, previously only used for adding files / folders to the
|
||||
clipboard, are now always shown in front of each file / folder and are
|
||||
now independent of the current clipboard mode. Furthermore, the
|
||||
convenience actions such as "check all", "uncheck all" and "toggle
|
||||
selection" are now available in the filelist, too.
|
||||
|
||||
By decoupling the selection from the clipboard logic, it is
|
||||
now possible to directly work with the current selection without the
|
||||
need to transfer it to the clipboard first. This means, editing or
|
||||
deleting multiple files is now directly possible without any clipboard
|
||||
interaction. The available actions appear once an element has been
|
||||
selected.
|
||||
|
||||
As mentioned above, the "Edit marked" action has been added to the
|
||||
filelist, which might already be known from the recordlist module.
|
||||
This action allows to edit the :sql:`sys_file_metadata` records of
|
||||
all selected files at once.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Selection of files and folders is now quicker to grasp for editors working
|
||||
in the filelist module. It is also possible to directly
|
||||
execute actions, e.g. editing metadata of selected files, without
|
||||
transferring them to the clipboard first.
|
||||
|
||||
.. index:: Backend, ext:filelist
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94944:
|
||||
|
||||
===============================================================
|
||||
Feature: #94944 - Keyboard shortcuts for multi record selection
|
||||
===============================================================
|
||||
|
||||
See :issue:`94944`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To further increase the usability in the Backend, the multi record selection,
|
||||
introduced with :issue:`94906`, has been extended for keyboard shortcuts.
|
||||
|
||||
The shortcuts can be used in every module, which implements the multi record
|
||||
selection. You can recognize this by the dropdown menu in the first header
|
||||
column of the record listing.
|
||||
|
||||
In such module, when clicking on a checkbox while holding the
|
||||
|
||||
* `shift` key: All records in the range of the last clicked checkbox and the current one are checked / unchecked
|
||||
|
||||
* `option` (macOS) or `ctrl` (Windows / Linux) key: The current selection is toggled (inverted)
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The multi record selection now also features keyboard shortcuts to further
|
||||
increase the usability of this component.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,25 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94966:
|
||||
|
||||
==========================================================
|
||||
Feature: #94966 - Show debugger in Application Information
|
||||
==========================================================
|
||||
|
||||
See :issue:`94966`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The "Application Information" menu is now able to show an enabled debugger and
|
||||
its version, if available. Supported debuggers are xdebug and Zend Debugger at
|
||||
the moment.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If a debugger is activated and can be determined via :php:`extension_loaded()`,
|
||||
the "Application Information" will show such an activated debugger.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-94996:
|
||||
|
||||
======================================================================
|
||||
Feature: #94996 - Consider all Composer installed extensions as active
|
||||
======================================================================
|
||||
|
||||
See :issue:`94996`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All TYPO3 extensions installed with Composer are now considered to be active and
|
||||
therefore can and will interact with TYPO3 API.
|
||||
|
||||
At Composer install time a persistent artifact is created, holding the information
|
||||
which extensions are installed and the path where these reside. This makes
|
||||
the :file:`typo3conf/PackageStates.php` file obsolete and it is neither created nor
|
||||
evaluated anymore.
|
||||
|
||||
For Composer based installs the artifact is located at
|
||||
:file:`vendor/typo3/PackageArtifact.php`. This file must be deployed
|
||||
together with all other Composer dependencies. In a TYPO3v11 sprint this file was located at
|
||||
:file:`var/build/PackageArtifact.php` which did need a special handling and caused
|
||||
some issues for example on platform.sh, which were solved by storing it in the vendor folder.
|
||||
|
||||
Any extension present in the :file:`typo3conf/ext` folder, but not installed by Composer,
|
||||
will still be considered and marked as part of TYPO3 packages when executing
|
||||
:bash:`composer install`. The only requirement here is, that such extensions need a
|
||||
:file:`composer.json` file nonetheless.
|
||||
Note this behaviour is deprecated and will be removed with TYPO3 v12.
|
||||
|
||||
Because all extensions present in the system are considered to be active,
|
||||
the Extension Manager UI is adapted to not allow changing the active state of
|
||||
extensions anymore for composer based instances. Respectively the commands
|
||||
:bash:`extension:activate` and :bash:`extension:deactivate` are disabled in Composer managed
|
||||
systems as well.
|
||||
|
||||
A new command :bash:`extension:setup` is introduced, which supersedes both the extension
|
||||
manager UI as well as the activate/deactivate commands. It performs all steps that
|
||||
were performed during activation and deactivation (the active-state is of course not changed).
|
||||
|
||||
With the command :bash:`extension:setup` *all* extensions are set up in terms of
|
||||
database schema changes, static data import, distribution files imports, etc.
|
||||
As example, requiring an additional extension and then using this command will
|
||||
create database tables or additional database fields the extension provides.
|
||||
|
||||
Any installed Composer package that defines an `extra.typo3/cms` section in
|
||||
their :file:`composer.json` file will be considered a TYPO3 extension and will
|
||||
have full access to the TYPO3 API.
|
||||
|
||||
However, because these Composer packages reside in the :file:`vendor` folder, they can
|
||||
not deliver public resources. This remains exclusive for TYPO3 extensions
|
||||
installed into :file:`typo3conf/ext` for now - those composer packages that not only
|
||||
have a `extra.typo3/cms` section, but are also of type `typo3-cms-extension`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
In Composer mode this has the following impact:
|
||||
|
||||
The :file:`PackageStates.php` file is completely ignored. When migrating projects that
|
||||
still have this file e.g. under version control, it is recommended to remove this file.
|
||||
|
||||
Projects with extensions that reside directly in :file:`typo3conf/ext`, and which therefore
|
||||
are not installed with Composer, should consider migrating them to a local path repository.
|
||||
In any case, such extensions now require to have a :file:`composer.json` file. This file
|
||||
can be created by using the according UI in the Extension Manager.
|
||||
|
||||
When working on a Composer based project and adding new extensions via the Composer
|
||||
cli tool during development, all added extensions are considered active automatically,
|
||||
but are not yet set up in terms of database schema changes for example. The TYPO3 cli
|
||||
command :bash:`extension:setup` needs to be executed additionally. :bash:`extension:setup` can and
|
||||
should also be used, when deploying a TYPO3 project to make sure database schema is up to date.
|
||||
|
||||
The Composer root project package will be recognized as a TYPO3 extension as well, if it provides a
|
||||
`extra.typo3/cms` section in its `composer.json`, as mentioned above. Because this package,
|
||||
like packages in the `vendor` folder isn't accessible by the web server,
|
||||
the root package can not deliver public resources as well.
|
||||
|
||||
However, when extensions are used as root package for testing (e.g., for running unit,
|
||||
functional or integration tests in a CI pipeline) **and** these extensions have files in the `Resources/Public` directory,
|
||||
a symlink in the `typo3conf/ext` directory is automatically created.
|
||||
Additionally the package path is adapted to be inside `typo3conf/ext`.
|
||||
This allows TYPO3 to properly calculate URLs for public resources of this extension.
|
||||
|
||||
If the root package isn't of type `typo3-cms-extension` or does not have a `Resources/Public` directory
|
||||
the absolute path to the extension remains the original path to the composer root directory
|
||||
and no symlink is created.
|
||||
|
||||
This special behaviour for root packages of type `typo3-cms-extension`
|
||||
is introduced as a temporary fix to ease extension testing. It is explicitly **NOT**
|
||||
recommended to use such a setup in production.
|
||||
|
||||
The :file:`ext_emconf.php` file of extensions is now obsolete and therefore completely ignored
|
||||
in Composer based instances. Make sure the information in the :file:`composer.json` file is in
|
||||
sync with the one in your :file:`ext_emconf.php` file in case you want to provide one for
|
||||
compatibility with non Composer mode.
|
||||
|
||||
.. index:: CLI, ext:core
|
||||
@@ -0,0 +1,31 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95034:
|
||||
|
||||
============================================================
|
||||
Feature: #95034 - List views: Select a row by clicking on it
|
||||
============================================================
|
||||
|
||||
See :issue:`95034`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The multi record selection, introduced in :issue:`94906`, has been
|
||||
improved for a convenience method, making the selection of rows
|
||||
more pleasant. It's now possible to select a row by
|
||||
simply clicking anywhere on it. Certainly, this does not influence
|
||||
any other action on this row, e.g. a link or a button. Only if the
|
||||
click event is on the row itself, e.g. any empty space, the automatic
|
||||
selection is performed.
|
||||
|
||||
Besides selecting a single row, also the keyboard actions, introduced
|
||||
in :issue:`94944`, can be used while clicking on the row, allowing to
|
||||
further optimize workflows.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It's now possible to select a row by clicking anywhere on it.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95035:
|
||||
|
||||
================================================
|
||||
Feature: #95035 - "Collapse all" for large trees
|
||||
================================================
|
||||
|
||||
See :issue:`95035`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new button "Collapse all" is added for all SVG-based trees,
|
||||
which is helpful for installations with a lot of pages or folders,
|
||||
and editors can quickly get an overview again of the entry points.
|
||||
|
||||
The feature collapses all pages / folders inside the tree
|
||||
except for the items on the root level.
|
||||
|
||||
This feature is now also available in all Record Selector and
|
||||
Link Picker with SVG Trees as they all are based on the same
|
||||
code base.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A new icon is shown in the Toolbar of all trees to select additional actions.
|
||||
|
||||
The "Refresh tree" button is now moved to the additional options
|
||||
dropdown as well to clean up the Interface and enhance User Experience.
|
||||
|
||||
.. index:: Backend, JavaScript, ext:backend
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95037:
|
||||
|
||||
======================================================================
|
||||
Feature: #95037 - New startingPoints setting for FormEngine treeConfig
|
||||
======================================================================
|
||||
|
||||
See :issue:`95037`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TCA option :php:`treeConfig` used in :php:`renderType=selectTree` and :php:`type=category` has a new
|
||||
setting :php:`startingPoints` that allows to set multiple records as roots for tree
|
||||
records.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The setting takes a CSV value, e.g. `2,3,4711`, which takes records of the pids
|
||||
`2`, `3` and `4711` into account and creates a tree of these records.
|
||||
|
||||
Additionally, each value used in :php:`startingPoints` may be fed from a site
|
||||
configuration by using the :php:`###SITE:###` syntax.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Site config
|
||||
base: /
|
||||
rootPageId: 1
|
||||
categories:
|
||||
root: 123
|
||||
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Example TCA config
|
||||
'config' => [
|
||||
'treeConfig' => [
|
||||
'startingPoints' => '1,2,###SITE:categories.root###',
|
||||
],
|
||||
],
|
||||
|
||||
This will evaluate to :php:`'startingPoints' => '1,2,123'`.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95044:
|
||||
|
||||
=============================================================
|
||||
Feature: #95044 - Support autowired LoggerInterface injection
|
||||
=============================================================
|
||||
|
||||
See :issue:`95044`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Logger instances may be required to be available during object
|
||||
construction, LoggerAwareInterface isn't an option in that case.
|
||||
Therefore :php:`\Psr\Log\LoggerInterface` as constructor argument
|
||||
is now autowired (if the service is configured to use autowiring)
|
||||
and instantiated with an object-specific logger.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Services are no longer required to use
|
||||
:php:`\Psr\Log\LoggerAwareInterface` and :php:`\Psr\Log\LoggerAwareTrait`,
|
||||
but can add a constructor argument :php:`\Psr\Log\LoggerInterface` instead.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class MyClass {
|
||||
private LoggerInterface $logger;
|
||||
|
||||
public function __construct(LoggerInterface $logger) {
|
||||
$this->logger = $logger;
|
||||
}
|
||||
}
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,84 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95061:
|
||||
|
||||
=====================================================
|
||||
Feature: #95061 - Auto creation of MM tables from TCA
|
||||
=====================================================
|
||||
|
||||
See :issue:`95061`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TCA table column fields that define :php:`['config']['MM']` can omit specification of the
|
||||
intermediate mm table layout in :file:`ext_tables.sql`. The TYPO3 database analyzer
|
||||
takes care of proper schema definition.
|
||||
|
||||
This feature has been implemented to simplify developers life and to enable the TYPO3
|
||||
core to handle those schema details since many extensions tend to specify incomplete
|
||||
or broken mm table schema definitions when dealing with this complex area.
|
||||
|
||||
Extensions are strongly encouraged to drop :file:`ext_tables.sql` :sql:`CREATE TABLE`
|
||||
definitions for those intermediate tables referenced by :php:`TCA` table columns. Dropping
|
||||
these definitions allows the core to adapt and migrate definitions if needed.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Extension developers don't need to deal with :file:`ext_tables.sql` definitions of
|
||||
"mm" tables anymore. The TYPO3 schema analyzer creates the intermediate schema depending
|
||||
on :php:`TCA` field definition. The schema analyzer tries to apply default specifications
|
||||
if possible. Single :file:`ext_tables.sql` definitions take precedence, though.
|
||||
|
||||
In practice, suppose the "local" side of a mm table is defined as such in TCA:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
...
|
||||
'columns' => [
|
||||
...
|
||||
'myField' => [
|
||||
'label' => 'myField',
|
||||
'config' => [
|
||||
'type' => 'group',
|
||||
'foreign_table' => 'tx_myextension_myfield_child',
|
||||
'MM' => 'tx_myextension_myfield_mm',
|
||||
]
|
||||
],
|
||||
...
|
||||
],
|
||||
...
|
||||
|
||||
Until now, a schema definition similar to this had to be in place in :file:`ext_tables.sql`:
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
CREATE TABLE tx_myextension_myfield_mm (
|
||||
uid_local int(11) DEFAULT '0' NOT NULL,
|
||||
uid_foreign int(11) DEFAULT '0' NOT NULL,
|
||||
sorting int(11) DEFAULT '0' NOT NULL,
|
||||
|
||||
KEY uid_local (uid_local),
|
||||
KEY uid_foreign (uid_foreign)
|
||||
);
|
||||
|
||||
This section can and should be dropped. Indicators a schema definition is affected by this:
|
||||
|
||||
* A table column TCA config defines :php:`MM` with :php:`type='select'`, :php:`type='group'`
|
||||
or :php:`type='inline'`.
|
||||
* The "MM" intermediate table has *no* TCA table definition (!).
|
||||
* :file:`ext_tables.sql` specifies a table with fields :sql:`uid_local` and :sql:`uid_foreign`.
|
||||
|
||||
The schema analyzer takes care of further possible fields apart from :sql:`uid_local` and
|
||||
:sql:`uid_foreign`, like :sql:`sorting`, :sql:`sorting_foreign`, :sql:`tablenames`,
|
||||
:sql:`fieldname` and :sql:`uid` if necessary, depending on "local" side of the TCA definition.
|
||||
|
||||
In general, in case an extension got that definition right up until now, the schema analyzer
|
||||
should not drop or add any additional fields automatically when removing these sections from
|
||||
:file:`ext_tables.sql`. Developers are strongly encouraged to drop affected :sql:`CREATE TABLE`
|
||||
definitions from :file:`ext_tables.sql` and to verify the install tool schema migrator acts as
|
||||
expected. The core takes care of these specifications from now on and may add adaptions or migrations
|
||||
to streamline further details in the future.
|
||||
|
||||
.. index:: Database, ext:core
|
||||
@@ -0,0 +1,47 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95065:
|
||||
|
||||
===============================================
|
||||
Feature: #95065 - New PSR-14 BootCompletedEvent
|
||||
===============================================
|
||||
|
||||
See :issue:`95065`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new PSR-14 event :php:`\TYPO3\CMS\Core\Core\Event\BootCompletedEvent` has been added to TYPO3
|
||||
Core. This event is fired on every request when TYPO3 has been
|
||||
fully booted, right after all configuration files have been added.
|
||||
|
||||
This new Event complements the :php:`\TYPO3\CMS\Core\Configuration\Event\AfterTcaCompilationEvent` which
|
||||
is executed after TCA configuration has been assembled.
|
||||
|
||||
Registration of the Event in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\Bootstrap\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/my-listener'
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
class MyEventListener {
|
||||
public function __invoke(BootCompletedEvent $e): void
|
||||
{
|
||||
// do your magic
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Use cases for this event is to alter or to boot up extensions'
|
||||
code which needs to be executed at any time, and needs
|
||||
TYPO3's full configuration including all loaded extensions.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95068:
|
||||
|
||||
======================================================
|
||||
Feature: #95068 - Multi record selection in recordlist
|
||||
======================================================
|
||||
|
||||
See :issue:`95068`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :issue:`94906` the multi record selection component has been
|
||||
introduced to TYPO3. Next to proper keyboard support, it enables
|
||||
editors to easily select multiple records with a couple of convenience
|
||||
methods, such as "select all", "toggle selection" or "select range".
|
||||
|
||||
This component has now also been added to the :guilabel:`Web > List`
|
||||
module. Therefore the "clipboard" column has been removed. All clipboard
|
||||
actions, e.g. "paste content", have been moved to the multi record selection
|
||||
action bar in the table header. Because the component is not bound to the
|
||||
clipboard functionality, editors are now able to perform actions, such
|
||||
as editing or deleting multiple records, without moving them to the
|
||||
clipboard first.
|
||||
|
||||
As already known from other modules, the available actions (edit, copy,
|
||||
delete, etc.) are shown in the table header, as soon as one record is
|
||||
selected. An exception is the "Edit this field" button, displayed next
|
||||
to each column header, which represents a real database field (only in
|
||||
the "single table view"). It can be used to edit a single field for all
|
||||
displayed records. This button now also respects the current selection,
|
||||
making it possible to edit a single field for only a specific selection
|
||||
of records.
|
||||
|
||||
Manipulating the displayed actions in the table header is still possible
|
||||
using the `\TYPO3\CMS\Recordlist\Event\ModifyRecordListTableActionsEvent`
|
||||
PSR-14 event.
|
||||
|
||||
In case you are still using the TSconfig option
|
||||
:typoscript:`showClipControlPanelsDespiteOfCMlayers`, which is rather
|
||||
unlikely as it wasn't properly respected in latest versions at all,
|
||||
you should remove it now, since it is no longer evaluated due to
|
||||
the removal of the clipboard column.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Editing multiple records in the :guilabel:`Web > List` module has been
|
||||
improved and is now no longer bound to the clipboard functionality.
|
||||
|
||||
Setting the TSconfig option :typoscript:`showClipControlPanelsDespiteOfCMlayers`
|
||||
has no effect anymore.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,49 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95077-1668719172:
|
||||
|
||||
========================================================
|
||||
Feature: #95077 - New PSR-14 ProcessFileListActionsEvent
|
||||
========================================================
|
||||
|
||||
See :issue:`95077`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new PSR-14 event :php:`\TYPO3\CMS\Core\Configuration\Event\ProcessFileListActionsEvent` has been added to
|
||||
TYPO3 Core. This event is fired after generating the actions for the
|
||||
files and folders listing in the :guilabel:`File > Filelist` module.
|
||||
|
||||
Registration of the Event in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\FileList\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/filelist/my-event-listener'
|
||||
|
||||
The corresponding event listener class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Filelist\Event\ProcessFileListActionsEvent;
|
||||
|
||||
class MyEventListener {
|
||||
|
||||
public function __invoke(ProcessFileListActionsEvent $event): void
|
||||
{
|
||||
// do your magic
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This event can be used to manipulate the icons, used for the edit control
|
||||
section in the files and folders listing within the :guilabel:`File > Filelist`
|
||||
module.
|
||||
|
||||
.. index:: PHP-API, ext:filelist
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95079:
|
||||
|
||||
============================================================================
|
||||
Feature: #95079 - Support PHP 8 style Channel attribute for logger injection
|
||||
============================================================================
|
||||
|
||||
See :issue:`95079`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Services are now able to control the component name that an
|
||||
injected logger is created with.
|
||||
This allows to group logs of related classes and is basically
|
||||
a channel system as often used in monolog.
|
||||
|
||||
The :php:`\TYPO3\CMS\Core\Log\Channel` attribute is supported for constructor
|
||||
argument injection as a class and parameter specific attribute and for
|
||||
:php:`\Psr\Log\LoggerAwareInterface` dependency injection services as a class attribute.
|
||||
|
||||
This feature is only available with PHP 8.
|
||||
The channel attribute will be gracefully ignored in PHP 7,
|
||||
and the classic component name will be used instead.
|
||||
|
||||
|
||||
Registration via class attribute for :php:`\Psr\Log\LoggerInterface` injection:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use TYPO3\CMS\Core\Log\Channel;
|
||||
#[Channel('security')]
|
||||
class MyClass
|
||||
{
|
||||
private LoggerInterface $logger;
|
||||
public function __construct(LoggerInterface $logger)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
// do your magic
|
||||
}
|
||||
}
|
||||
|
||||
Registration via parameter attribute for :php:`LoggerInterface` injection,
|
||||
overwrites possible class attributes:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use TYPO3\CMS\Core\Log\Channel;
|
||||
class MyClass
|
||||
{
|
||||
private LoggerInterface $logger;
|
||||
public function __construct(
|
||||
#[Channel('security')]
|
||||
LoggerInterface $logger
|
||||
) {
|
||||
$this->logger = $logger;
|
||||
// do your magic
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Registration via class attribute for :php:`LoggerAwareInterface` services.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Log\LoggerAwareInterface;
|
||||
use Psr\Log\LoggerAwareTrait;
|
||||
use TYPO3\CMS\Core\Log\Channel;
|
||||
#[Channel('security')]
|
||||
class MyClass implements LoggerAwareInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
}
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to group several classes into channels, regardless of the
|
||||
PHP namespace.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,57 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95077:
|
||||
|
||||
================================================
|
||||
Feature: #95077 - New PSR-14 ModifyFileDumpEvent
|
||||
================================================
|
||||
|
||||
See :issue:`95077`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new PSR-14 event :php:`\TYPO3\CMS\Core\Resource\Event\ModifyFileDumpEvent`
|
||||
has been added to TYPO3 Core. This event is fired in the
|
||||
:php:`\TYPO3\CMS\Core\Controller\FileDumpController` and allows extensions
|
||||
to perform additional access / security checks before dumping a file. The
|
||||
event does not only contain the file to dump but also the PSR-7 Request.
|
||||
|
||||
In case the file dump should be rejected, the event has to set a PSR-7
|
||||
:php:`\Psr\Http\Message\ResponseInterface`, usually with a `403` status code.
|
||||
This will then immediately stop the propagation.
|
||||
|
||||
With the new event, it's not only possible to reject the file dump request,
|
||||
but also to replace the file, which should be dumped.
|
||||
|
||||
Registration of the Event in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\Resource\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/resource/my-event-listener'
|
||||
|
||||
The corresponding event listener class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Resource\Event\ModifyFileDumpEvent;
|
||||
|
||||
class MyEventListener {
|
||||
|
||||
public function __invoke(ModifyFileDumpEvent $event): void
|
||||
{
|
||||
// do magic here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This event can be used to modify the file dump request, by either
|
||||
adding an alternative response or by replacing the file being dumped.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95083:
|
||||
|
||||
=========================================================
|
||||
Feature: #95083 - New PSR-14 ModifyClearCacheActionsEvent
|
||||
=========================================================
|
||||
|
||||
See :issue:`95083`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new PSR-14 event :php:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent`
|
||||
has been added to TYPO3 Core. This event is fired in the
|
||||
:php:`\TYPO3\CMS\Backend\Backend\ToolbarItems\ClearCacheToolbarItem`
|
||||
class and allows extensions to modify the clear cache actions, shown
|
||||
in the TYPO3 Backend top toolbar.
|
||||
|
||||
The event can be used to change or remove existing clear cache
|
||||
actions, as well as to add new actions. Therefore the event also
|
||||
contains, next to the usual "getter" and "setter", the convenience
|
||||
method :php:`add` for the :php:`cacheActions` and
|
||||
:php:`cacheActionIdentifiers` arrays.
|
||||
|
||||
Registration of the Event in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\Toolbar\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/toolbar/my-event-listener'
|
||||
|
||||
The corresponding event listener class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent;
|
||||
|
||||
class MyEventListener {
|
||||
|
||||
public function __invoke(ModifyClearCacheActionsEvent $event): void
|
||||
{
|
||||
// do magic here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This event can be used to modify the clear cache actions, shown in the
|
||||
TYPO3 Backend top toolbar.
|
||||
|
||||
.. index:: PHP-API, ext:backend
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95089:
|
||||
|
||||
===========================================================
|
||||
Feature: #95089 - New PSR-14 AfterFileCommandProcessedEvent
|
||||
===========================================================
|
||||
|
||||
See :issue:`95089`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new PSR-14 event :php:`\TYPO3\CMS\Core\Resource\Event\AfterFileCommandProcessedEvent`
|
||||
has been added to TYPO3 Core. This event is fired in the
|
||||
:php:`\TYPO3\CMS\Core\Utility\File\ExtendedFileUtility`
|
||||
class and allows extensions to execute additional tasks, after a file
|
||||
operation has been performed.
|
||||
|
||||
The event features the following methods:
|
||||
|
||||
- :php:`getCommand()`: Returns the command array while the array key is the performed action and the value is the command data ("cmdArr")
|
||||
- :php:`getResult()`: Returns the operation result, which could e.g. be an uploaded or changed :php:`File` or a :php:`boolean` for the "delete" action
|
||||
- :php:`getConflictMode()`: The conflict mode for the performed operation, e.g. "rename" or "cancel"
|
||||
|
||||
Registration of the Event in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\File\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/file/my-event-listener'
|
||||
|
||||
The corresponding event listener class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Resource\Event\AfterFileCommandProcessedEvent;
|
||||
|
||||
class MyEventListener {
|
||||
|
||||
public function __invoke(AfterFileCommandProcessedEvent $event): void
|
||||
{
|
||||
// do magic here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This event can be used to perform additional tasks for specific file commands.
|
||||
For example, trigger a custom indexer after a file has been uploaded.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,133 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-95105:
|
||||
|
||||
======================================================
|
||||
Feature: #95105 - New PSR-14 DatabaseRecordList events
|
||||
======================================================
|
||||
|
||||
See :issue:`95105`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A couple of new PSR-14 events for the :php:`\TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList` class
|
||||
have been added to TYPO3 Core. They are mainly a direct replacement for
|
||||
the hook methods, defined in the
|
||||
:php:`\TYPO3\CMS\Recordlist\RecordList\RecordListHookInterface`, while
|
||||
their functionality is improved and extended.
|
||||
|
||||
The new events can be used to modify the behaviour of each table listing,
|
||||
which means they can be used to either add, change or even remove columns
|
||||
and actions.
|
||||
|
||||
Following events have been added:
|
||||
|
||||
- :php:`\TYPO3\CMS\Recordlist\Event\ModifyRecordListTableActionsEvent`
|
||||
- :php:`\TYPO3\CMS\Recordlist\Event\ModifyRecordListHeaderColumnsEvent`
|
||||
- :php:`\TYPO3\CMS\Recordlist\Event\ModifyRecordListRecordActionsEvent`
|
||||
|
||||
They all behave in the same way. There is always the subject, e.g. the
|
||||
record actions or the header columns, together with information like the
|
||||
current table, the current :php:`DatabaseRecordList` instance and the
|
||||
current record or the record uids. The subject is therefore equipped
|
||||
with the usual CRUD methods like :php:`set`, :php:`get` or :php:`remove`. This makes
|
||||
working with those values much more pleasant. See the below code examples
|
||||
on how those can be used. Some events also feature additional methods
|
||||
to influence e.g. the table header attributes or the label, which is
|
||||
being displayed in case no actions are available for the current user.
|
||||
|
||||
An example registration of the events in your extensions' :file:`Services.yaml`:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
MyVendor\MyPackage\RecordList\MyEventListener:
|
||||
tags:
|
||||
- name: event.listener
|
||||
identifier: 'my-package/recordlist/my-event-listener'
|
||||
method: 'modifyRecordActions'
|
||||
- name: event.listener
|
||||
identifier: 'my-package/recordlist/my-event-listener'
|
||||
method: 'modifyHeaderColumns'
|
||||
- name: event.listener
|
||||
identifier: 'my-package/recordlist/my-event-listener'
|
||||
method: 'modifyTableActions'
|
||||
|
||||
The corresponding event listener class:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use TYPO3\CMS\Recordlist\Event\ModifyRecordListHeaderColumnsEvent;
|
||||
use TYPO3\CMS\Recordlist\Event\ModifyRecordListRecordActionsEvent;
|
||||
use TYPO3\CMS\Recordlist\Event\ModifyRecordListTableActionsEvent;
|
||||
|
||||
class MyEventListener {
|
||||
|
||||
protected LoggerInterface $logger;
|
||||
|
||||
public function __construct(LoggerInterface $logger)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
public function modifyRecordActions(ModifyRecordListRecordActionsEvent $event): void
|
||||
{
|
||||
$currentTable = $event->getTable();
|
||||
|
||||
// Add a custom action for a custom table in the secondary action bar, before the "move" action
|
||||
if ($currentTable === 'my_custom_table' && !$event->hasAction('myAction')) {
|
||||
$event->setAction(
|
||||
'<button>My Action</button>',
|
||||
'myAction',
|
||||
'secondary',
|
||||
'move'
|
||||
);
|
||||
}
|
||||
|
||||
// Remove the "viewBig" action in case more than 4 actions exist in the group
|
||||
if (count($event->getActionGroup('secondary')) > 4 && $event->hasAction('viewBig')) {
|
||||
$event->removeAction('viewBig');
|
||||
}
|
||||
|
||||
// Move the "delete" action after the "edit" action
|
||||
$event->setAction('', 'delete', 'primary', '', 'edit');
|
||||
}
|
||||
|
||||
public function modifyHeaderColumns(ModifyRecordListHeaderColumnsEvent $event): void
|
||||
{
|
||||
// Change label of "control" column
|
||||
$event->setColumn('Custom Controls', '_CONTROL_');
|
||||
|
||||
// Add a custom class for the table header row
|
||||
$event->setHeaderAttributes(['class' => 'my-custom-class']);
|
||||
}
|
||||
|
||||
public function modifyTableActions(ModifyRecordListTableActionsEvent $event): void
|
||||
{
|
||||
// Remove "edit" action and log, if this failed
|
||||
$actionRemoved = $event->removeAction('unknown');
|
||||
if (!$actionRemoved) {
|
||||
$this->logger->warning('Action "unknown" could not be removed');
|
||||
}
|
||||
|
||||
// Add a custom clipboard action after "copyMarked"
|
||||
$event->setAction('<button>My action</button>', 'myAction', '', 'copyMarked');
|
||||
|
||||
// Set a custom label for the case, no actions are available for the user
|
||||
$event->setNoActionLabel('No actions available due to missing permissions.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Please have a look at the concrete implementation for a list of all
|
||||
available methods and their functionalities.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new PSR-14 events can be used to modify various parts within the
|
||||
RecordList module in an object-oriented way.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,24 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-90264:
|
||||
|
||||
=============================================================
|
||||
Important: #90264 - Initialize datepicker JS in external file
|
||||
=============================================================
|
||||
|
||||
See :issue:`90264`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The initialization of the datepicker has been moved into an external
|
||||
file residing in :file:`EXT:form/Resources/Public/JavaScript/Frontend/DatePicker.js`.
|
||||
Some installations might restrict requesting public resources from :file:`/typo3/`.
|
||||
Therefore, a new YAML configuration has been introduced:
|
||||
|
||||
:yaml:`TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.DatePicker.properties.datePickerInitializationJavaScriptFile`
|
||||
|
||||
That way, integrators are able to move the file to a different folder
|
||||
which is publicly accessible.
|
||||
|
||||
.. index:: ext:form
|
||||
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-92202:
|
||||
|
||||
========================================================
|
||||
Important: #92202 - Remove exclude from important fields
|
||||
========================================================
|
||||
|
||||
See :issue:`92202`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To simplify the setup of permissions, the following fields are now shown always to every editor:
|
||||
|
||||
* Field "colPos" from table "tt_content"
|
||||
* Field "slug" from table "pages"
|
||||
|
||||
If the fields should be hidden, either the setting :php:`'exclude' => true` can be set in your
|
||||
site package extension or the following TsConfig can be used:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
TCEFORM.pages.slug.disabled = 1
|
||||
TCEFORM.tt_content.colPos.disabled = 1
|
||||
|
||||
.. index:: Backend, ext:core, TCA
|
||||
@@ -0,0 +1,61 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94280:
|
||||
|
||||
====================================================================
|
||||
Important: #94280 - Move contents of ext_*.php into global namespace
|
||||
====================================================================
|
||||
|
||||
See :issue:`94280`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When warming up caches, the code of the files :file:`ext_localconf.php` and
|
||||
:file:`ext_tables.php` are now scoped into the global namespace.
|
||||
|
||||
.. warning::
|
||||
|
||||
The content of such :file:`ext_*.php` files **must not** be wrapped in a
|
||||
local namespace by extension authors. This will result in nested namespaces
|
||||
and therefore cause PHP errors only solvable by clearing the caches via
|
||||
Install Tool!
|
||||
|
||||
|
||||
Example code from the cache file:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
/**
|
||||
* Extension: frontend
|
||||
* File: /var/www/html/public/typo3/sysext/frontend/ext_localconf.php
|
||||
*/
|
||||
|
||||
namespace {
|
||||
// Content of EXT:frontend/ext_localconf.php
|
||||
}
|
||||
|
||||
Having a namespace allows extension authors to import classes by the
|
||||
keyword :php:`use`.
|
||||
|
||||
Example :file:`ext_localconf.php`:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
|
||||
defined('TYPO3') or die();
|
||||
|
||||
ExtensionManagementUtility::addUserTSConfig('
|
||||
options.saveDocView = 1
|
||||
options.saveDocNew = 1
|
||||
options.saveDocNew.pages = 0
|
||||
options.saveDocNew.sys_file = 0
|
||||
options.saveDocNew.sys_file_metadata = 0
|
||||
options.disableDelete.sys_file = 1
|
||||
');
|
||||
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94615:
|
||||
|
||||
==============================================================================================
|
||||
Important: #94615 - Fluid view helpers f:link.external and f:uri.external use https by default
|
||||
==============================================================================================
|
||||
|
||||
See :issue:`94615`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When using the Fluid view helpers :html:`f:uri.external` or :html:`f:link.external` without
|
||||
an explicitly specified scheme, the target link now uses :html:`https` instead of :html:`http`.
|
||||
|
||||
Given the following Fluid snippets:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<f:link.external uri="www.some-domain.tld">some content</f:link.external>
|
||||
<f:uri.external uri="www.some-domain.tld" />
|
||||
|
||||
The result before:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="http://www.some-domain.tld">some content</a>
|
||||
http://www.some-domain.tld
|
||||
|
||||
New result:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="https://www.some-domain.tld">some content</a>
|
||||
https://www.some-domain.tld
|
||||
|
||||
If the new default can not be used, the :html:`http` scheme needs to be specified. Examples:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<f:link.external uri="http://www.some-domain.tld">some content</f:link.external>
|
||||
<f:link.external uri="www.some-domain.tld" defaultScheme="http">some content</f:link.external>
|
||||
<f:uri.external uri="http://www.some-domain.tld" />
|
||||
<f:uri.external uri="www.some-domain.tld" defaultScheme="http" />
|
||||
|
||||
|
||||
.. index:: Fluid, ext:fluid
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94697:
|
||||
|
||||
====================================================================================
|
||||
Important: #94697 - Quote database identifiers when used instead of globally upfront
|
||||
====================================================================================
|
||||
|
||||
See :issue:`94697`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When using :php:`TCA` keys that contain SQL fragments like :php:`foreign_table_where`,
|
||||
:php:`MM_table_where` and :php:`search.andWhere`, it is important to use a special syntax
|
||||
for SQL field names to stay DBAL compatible.
|
||||
|
||||
See :doc:`#81751 <../8.7.x/Important-81751-DbalCompatibleQuotingInTca>` for details.
|
||||
It boils down to: Use :sql:`{#colPos}=0` instead of :sql:`colPos=0` to stay DBAL
|
||||
compatible. The core then takes care field names are properly quoted for the
|
||||
specific DBMS that is used.
|
||||
|
||||
This quoting preparation has been performed during TCA cache warmup until now.
|
||||
This had the main disadvantage that this early boostrap step already needs a
|
||||
working database connection. The core however plans to introduce features to
|
||||
allow cache warmups as separate step in CI/CD systems. Those usually don't have
|
||||
the target database available, and in general it's ugly that an early warmup
|
||||
needs a database connection.
|
||||
|
||||
Therefore, the field name quoting of SQL fragments is now no longer performed
|
||||
during TCA cache warmup, but instead directly done in places where those
|
||||
TCA keys are used to create the final queries.
|
||||
|
||||
Since extensions might rely on identifiers within these settings being properly
|
||||
quoted, a feature flag called `runtimeDbQuotingOfTcaConfiguration` is introduced
|
||||
to revert to the old behaviour with TYPO3 v11.
|
||||
|
||||
Extension authors who access these TCA properties, which is quite unlikely,
|
||||
can use the feature flag to support both variants to ensure compatibility
|
||||
between TYPO3 v10, v11 and TYPO3 v12.
|
||||
|
||||
Starting with TYPO3 v12.0, this feature flag will be enabled at all times.
|
||||
|
||||
.. index:: Database, TCA, ext:core
|
||||
@@ -0,0 +1,20 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94830:
|
||||
|
||||
==================================================
|
||||
Important: #94830 - Update egulias/email-validator
|
||||
==================================================
|
||||
|
||||
See :issue:`94830`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The package `egulias/email-validator` has been updated from version 2.1.25 to 3.1.1.
|
||||
|
||||
The validation of emails which are using edge cases of the RFC might change.
|
||||
|
||||
The full changelog is available at https://github.com/egulias/EmailValidator/blob/3.x/CHANGELOG.md
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94876:
|
||||
|
||||
====================================================================
|
||||
Important: #94876 - Remove "Non-XML text" validator from form editor
|
||||
====================================================================
|
||||
|
||||
See :issue:`94876`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The "Non-XML text" validator has been removed from the UI of the form editor.
|
||||
Here's why:
|
||||
|
||||
* The validator has a very specific purpose since it is only useful for values
|
||||
which are output in an HTML context without escaping. By default, this is never
|
||||
the case in TYPO3 thanks to the automatic escaping in Fluid.
|
||||
* The form editor is meant to be used by editors and integrators where the
|
||||
most use cases involve output of form values within TYPO3 (website / mail). This
|
||||
validator does not serve any purpose then.
|
||||
* The form editor should be uncluttered and stripped from too technical and
|
||||
complex concepts which this validator belongs to.
|
||||
|
||||
If there are already text validators within a form definition, the UI keeps the
|
||||
corresponding validator editors. I.e. the form editor will display them. In newly
|
||||
created forms, the text validator can no longer be added by default.
|
||||
|
||||
If you want to re-add this validator just extend your own form configuration.
|
||||
The following example adds the "Non-XML text" validator to the form element
|
||||
`Text`. The path :yaml:`TYPO3.CMS.Form.prototypes.standard.formElementsDefinition.Text.formEditor.editors.900`
|
||||
contains the definition for the validators. We are adding the validator with the key
|
||||
`100` to not interfere with keys already taken by the core (`10` to `90`).
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
TYPO3:
|
||||
CMS:
|
||||
Form:
|
||||
prototypes:
|
||||
standard:
|
||||
formElementsDefinition:
|
||||
Text:
|
||||
formEditor:
|
||||
editors:
|
||||
900:
|
||||
selectOptions:
|
||||
100:
|
||||
value: Text
|
||||
label: formEditor.elements.TextMixin.editor.validators.Text.label
|
||||
|
||||
.. index:: Backend, ext:form
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-94889:
|
||||
|
||||
========================================================================================
|
||||
Important: #94889 - AbstractTypoLinkBuilder::build now returns array|LinkResultInterface
|
||||
========================================================================================
|
||||
|
||||
See :issue:`94889`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method signature of :php:`\TYPO3\CMS\Frontend\Typolink\AbstractTypoLinkBuilder` has changed, as
|
||||
:php:`array` return type has been removed, thus loosening the inheritance
|
||||
criteria for TYPO3 v11.
|
||||
|
||||
In TYPO3 v12 :php:`AbstractTypoLinkBuilder` will have a
|
||||
:php:`\TYPO3\CMS\Frontend\Typolink\LinkResultInterface` return type.
|
||||
|
||||
Extensions using this class can stay compatible with two major TYPO3 LTS
|
||||
versions by doing the following:
|
||||
|
||||
* Keeping an :php:`array` return type to stay compatible with
|
||||
TYPO3 v10 and TYPO3 v11.
|
||||
* Using the :php:`LinkResultInterface` return type to stay compatible with
|
||||
TYPO3 v11 and TYPO3 v12+.
|
||||
|
||||
.. index:: Frontend, PHP-API, TypoScript, ext:frontend
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-95647:
|
||||
|
||||
==============================================================
|
||||
Important: #95647 - Composer installations and extension usage
|
||||
==============================================================
|
||||
|
||||
See :issue:`95647`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :issue:`94996` the behavior for Composer-based installations has changed.
|
||||
|
||||
Importance of :file:`ext_emconf.php` file
|
||||
-----------------------------------------
|
||||
|
||||
The :file:`ext_emconf.php` file which is located in the extensions' base folder,
|
||||
is not evaluated anymore in Composer-based installations. This means, the
|
||||
ordering of the extensions and their dependencies are now loaded from the
|
||||
:file:`composer.json` file, instead of :file:`ext_emconf.php`.
|
||||
|
||||
For non-Composer installation ("Classic Mode") the `ext_emconf.php` file is the
|
||||
source of truth for required dependencies and the loading order of active
|
||||
extensions.
|
||||
|
||||
Extension authors should ensure that the information in the :file:`composer.json`
|
||||
file is in sync with the one in the extensions' :file:`ext_emconf.php` file.
|
||||
This is especially important regarding constraints like `depends` , `conflicts`
|
||||
and `suggests`. Use the equivalent settings in :file:`composer.json` `require`,
|
||||
`conflict` and `suggest` to set dependencies and ensure a specific loading order.
|
||||
|
||||
It is recommended to keep :file:`ext_emconf.php` and :file:`composer.json` in
|
||||
any public extension that is published to TYPO3 Extension Repository (TER), and
|
||||
to ensure optimal compatibility with Composer-based installations and Classic
|
||||
mode.
|
||||
|
||||
Removal of :file:`PackageStates.php`
|
||||
------------------------------------
|
||||
|
||||
The :file:`typo3conf/PackageStates.php` file is not evaluated anymore in
|
||||
Composer-based installations. When updating TYPO3 installations that still
|
||||
contain this file e.g. under version control, the file can safely be removed.
|
||||
|
||||
Use the TYPO3 CLI command :bash:`extension:setup` to set up all extensions
|
||||
available in Composer.
|
||||
|
||||
Package information (like paths or extension meta data) is still stored in and evaluated from
|
||||
a file in Composer's :file:`vendor` folder. This file is written after Composer dumps autoload information.
|
||||
Make sure all files from that (:file:`vendor`) folder are transferred during a deployment.
|
||||
This means no special action compared to previous TYPO3 versions is required regarding the :file:`vendor` folder
|
||||
with TYPO3 11 LTS.
|
||||
|
||||
.. Important::
|
||||
TYPO3 version 11.5.0 to 11.5.2 stored package information in :file:`var/build/` folder,
|
||||
which previously required this folder to be transferred as well during a deployment.
|
||||
This is not required any more now. Transferring the :file:`vendor` folder is sufficient now.
|
||||
|
||||
All extensions are always active
|
||||
--------------------------------
|
||||
|
||||
All extensions and their dependant extensions required via Composer in a
|
||||
Composer-based TYPO3 installation are **always** activated. It is not possible
|
||||
to disable an extension by using the Extension Manager anymore.
|
||||
|
||||
The TYPO3 CLI command :bash:`extension:setup` can be used after each
|
||||
`composer require` or `composer update` command to update the database schema
|
||||
and other important actions usually done when previously activating an extension
|
||||
in the Extension Manager.
|
||||
|
||||
.. index:: Backend, Frontend, ext:core
|
||||
@@ -0,0 +1,53 @@
|
||||
:template: changelogOverview.html
|
||||
.. include:: /Includes.rst.txt
|
||||
.. _changelog-11-4:
|
||||
|
||||
============
|
||||
11.4 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