TYPO3 v15 dev-main snapshot ()
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _breaking-85080:
|
||||
|
||||
==========================================================================================
|
||||
Breaking: #85080 - Method "isEnabled()" added to RenderableInterface and FinisherInterface
|
||||
==========================================================================================
|
||||
|
||||
See :issue:`85080`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new method :php:`isEnabled()` has been added to the :php:`RenderableInterface` as well as the :php:`FinisherInterface`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Third party code implementing these interfaces and not extending :php:`AbstractRenderable` or :php:`AbstractFinisher` will
|
||||
cause a fatal error if used in a form.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with third party code implementing these interfaces and not extending :php:`AbstractRenderable` or :php:`AbstractFinisher`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Third party code implementing these interfaces must be updated to implement the :php:`isEnabled()` method, preferably
|
||||
by extending :php:`AbstractRenderable` (or one of its subclasses) or :php:`AbstractFinisher`.
|
||||
|
||||
.. index:: ext:form, NotScanned
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _breaking-85398:
|
||||
|
||||
===============================================
|
||||
Breaking: #85398 - Drop documentation extension
|
||||
===============================================
|
||||
|
||||
See :issue:`85398`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Fetching and rendering extension and core manuals directly within
|
||||
the backend using the documentation extension has been dropped
|
||||
from the TYPO3 backend.
|
||||
|
||||
The module never found broad acceptance and usage in the community,
|
||||
had various hard to resolve flaws and has been a maintenance burden
|
||||
for the documentation team ever since.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The Documentation module does not exist anymore and cannot be used
|
||||
to display manuals in the TYPO3 backend.
|
||||
|
||||
The previously required extension "documentation" is not available anymore.
|
||||
|
||||
New installations do not have the `documentation` extension installed by default.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Every TYPO3 instance.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Current documentation of core functionality, core extensions and
|
||||
community extensions can always be found on docs_ directly.
|
||||
|
||||
Flush all TYPO3 Core Caches to ensure that :php:`PackageStates.php` is rebuilt
|
||||
without the documentation extension.
|
||||
|
||||
For composer installations, ensure that the dependency to `typo3/cms-documentation` is removed.
|
||||
|
||||
Extensions authors need to ensure that dependencies to `EXT:documentation` are removed, if
|
||||
they existed before.
|
||||
|
||||
.. _docs: https://docs.typo3.org
|
||||
|
||||
.. index:: ext:documentation, NotScanned
|
||||
@@ -0,0 +1,73 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _breaking-85761:
|
||||
|
||||
===============================================
|
||||
Breaking: #85761 - Authentication chain changes
|
||||
===============================================
|
||||
|
||||
See :issue:`85761`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Most TYPO3 instances can ignore this.
|
||||
|
||||
An instance must consider this security relevant documentation if all of the below criteria are met:
|
||||
|
||||
* Additional authentication services are active in an instance, for example an LDAP extension,
|
||||
an openId extension, some single sign on extension, or similar. The reports module with top
|
||||
module selection "Installed services" shows those extensions. If an instance is only dealing
|
||||
with core related authentication services like "saltedpasswords", "rsaauth" and "core", it is
|
||||
not affected.
|
||||
* One of these not native core services is registered with a priority lower than 70 and higher than 50, see
|
||||
the configuration module in the backend and verify if some non-core extension registers with
|
||||
such a priority. Most additional authentication services however register with a priority higher than 70.
|
||||
* The additional authentication service is registered for type 'authUserBE' or 'authUserFE'.
|
||||
|
||||
In the unlikely case such a service type with a priority between 70 and 50 has been registered,
|
||||
security relevant changes may be needed to be applied when upgrading to TYPO3 v9.
|
||||
|
||||
The core service to compare a password against a salted password hash in the database has been
|
||||
moved from priority 70 to priority 50. The salted passwords service on priority 70 did not continue
|
||||
to lower prioritized authentication services if the password in the database has been recognized by
|
||||
salted passwords as a valid hash, but the password did not match. The default core service denied
|
||||
calling services lower in the chain if the password has been recognized as hash which the
|
||||
salted passwords hash service could handle, but the password did not validate.
|
||||
|
||||
With reducing the priority of the salted password hash check from priority 70 to 50 the following
|
||||
edge case applies: If a service is registered between 70 and 50, this service is now called before
|
||||
the salted passwords hash check. It thus may be called more often than before and may need to change
|
||||
its return value. It can no longer rely on the salted passwords service to deny a successful
|
||||
authentication if the submitted password is stored in the database as hashed password, but the
|
||||
database hash does not match the submitted password a user has sent to login.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If an instance provides additional authentication services, and if one of that services does
|
||||
not return correct authentication values, this may open an authentication bypass security issue
|
||||
when upgrading to TYPO3 v9.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
See description.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If an instance is affected, consider the following migration thoughts:
|
||||
|
||||
* Ensure the authentication service between priority 70 and 50 on type 'authUserBE' and 'authUserFE'
|
||||
does not rely on the result auf the salted passwords evaluation.
|
||||
* Consider this authentication services is called more often than before since the previous service
|
||||
that denied login on priority 70 is now located at priority 50.
|
||||
* Check the return values of the authentication services.
|
||||
* Read the source code of :php:`TYPO3\CMS\Core\Authentication->authUser()` for more details on possible
|
||||
return values. Consider the priority driven call chain.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:saltedpasswords
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-65578:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #65578 - config.concatenateJsAndCss and concatenateFiles
|
||||
=====================================================================
|
||||
|
||||
See :issue:`65578`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TypoScript property `config.concatenateJsAndCss` and the related methods within :php:`PageRenderer` have
|
||||
been marked as deprecated:
|
||||
|
||||
* :php:`PageRenderer->getConcatenateFiles()`
|
||||
* :php:`PageRenderer->enableConcatenateFiles()`
|
||||
* :php:`PageRenderer->disableConcatenateFiles()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Setting the TypoScript property or calling one of the methods above will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations setting the TypoScript property or calling one of the PHP methods directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the TypoScript properties :typoscript:`config.concatenateJs` and :typoscript:`config.concatenateCss`
|
||||
and the corresponding methods in PageRenderer class directly.
|
||||
|
||||
.. index:: Frontend, PHP-API, TypoScript, PartiallyScanned
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-81430:
|
||||
|
||||
====================================================================
|
||||
Deprecation: #81430 - TypoScriptTemplateModuleController::renderList
|
||||
====================================================================
|
||||
|
||||
See :issue:`81430`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP method :php:`TypoScriptTemplateModuleController::renderList` has been marked as deprecated and will be removed with TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Installations accessing the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances calling the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration available. Remove the method call, implement the required functionality in your own code or unload the extension.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-83750:
|
||||
|
||||
============================================================
|
||||
Deprecation: #83750 - Adapt TCA signature for customControls
|
||||
============================================================
|
||||
|
||||
See :issue:`83750`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
According to the TCA documentation since TYPO3 v4.7, the definition of "customControls" for "inline" columns
|
||||
is as follows:
|
||||
|
||||
.. important::
|
||||
|
||||
Numerical array containing definitions of custom header controls for IRRE fields. This makes it possible to
|
||||
create special controls by calling user-defined functions (userFuncs). Each item in the array item must be
|
||||
an array itself, with at least on key "userFunc" pointing to the user function to call.
|
||||
|
||||
The implementation instead relied on the userFunc string being provided as the key of the array.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
TCA definition for "inline" fields using custom header controls for IRRE fields will trigger a PHP :php:`E_USER_DEPRECATED` error:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'some-column' => [
|
||||
'config' => [
|
||||
'type' => 'inline',
|
||||
// ...
|
||||
'customControls' => [
|
||||
\Vendor\MyExtension\Tca\MyFirstCustomControl::class . '->render',
|
||||
\Vendor\MyExtension\Tca\MySecondCustomControl::class . '->render'
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Update the TCA definition with a :php:`userFunc` key to specify the method to be called:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
'some-column' => [
|
||||
'config' => [
|
||||
'type' => 'inline',
|
||||
// ...
|
||||
'customControls' => [
|
||||
[
|
||||
'userFunc' => \Vendor\MyExtension\Tca\MyFirstCustomControl::class . '->render'
|
||||
],
|
||||
[
|
||||
'userFunc' => \Vendor\MyExtension\Tca\MySecondCustomControl::class . '->render'
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
.. index:: TCA, NotScanned, ext:core
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84133:
|
||||
|
||||
===============================================================================
|
||||
Deprecation: #84133 - Deprecate _isHiddenFormElement and _isReadOnlyFormElement
|
||||
===============================================================================
|
||||
|
||||
See :issue:`84133`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties have been marked as deprecated and should not be used any longer:
|
||||
|
||||
* :yaml:`renderingOptions._isHiddenFormElement`
|
||||
* :yaml:`renderingOptions._isReadOnlyFormElement`
|
||||
|
||||
Those properties are available for the following form elements of the form framework:
|
||||
|
||||
* ContentElement
|
||||
* Hidden
|
||||
* Honeypot
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The properties mentioned are still available in TYPO3 v9, but they will be dropped in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any form built with the form framework is affected as soon as those properties have been manually
|
||||
added to the form definition.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Usages of the above mentioned properties should be switched to the variants feature instead.
|
||||
|
||||
.. index:: Frontend, NotScanned, ext:form
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84375:
|
||||
|
||||
==============================================================================
|
||||
Deprecation: #84375 - Protected methods and properties in PageLayoutController
|
||||
==============================================================================
|
||||
|
||||
See :issue:`84375`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Some methods in the :php:`TYPO3\CMS\Backend\Controller\PageLayoutController`
|
||||
have been marked as deprecated and will be removed in TYPO3 v10:
|
||||
|
||||
* [not scanned] :php:`init()`
|
||||
* [not scanned] :php:`main()`
|
||||
* [not scanned] :php:`menuConfig()`
|
||||
* [not scanned] :php:`renderContent()`
|
||||
* [not scanned] :php:`clearCache()`
|
||||
* [not scanned] :php:`getModuleTemplate()`
|
||||
* :php:`getLocalizedPageTitle()`
|
||||
* :php:`getNumberOfHiddenElements()`
|
||||
* :php:`local_linkThisScript()`
|
||||
* :php:`pageIsNotLockedForEditors()`
|
||||
* :php:`contentIsNotLockedForEditors()`
|
||||
|
||||
Likewise some properties have been marked as deprecated:
|
||||
|
||||
* [not scanned] :php:`pointer`
|
||||
* [not scanned] :php:`imagemode`
|
||||
* [not scanned] :php:`search_field`
|
||||
* [not scanned] :php:`search_levels`
|
||||
* [not scanned] :php:`showLimit`
|
||||
* [not scanned] :php:`returnUrl`
|
||||
* [not scanned] :php:`clear_cache`
|
||||
* :php:`popView`
|
||||
* [not scanned] :php:`perms_clause`
|
||||
* [not scanned] :php:`modTSconfig`
|
||||
* :php:`modSharedTSconfig`
|
||||
* [not scanned] :php:`descrTable`
|
||||
* :php:`colPosList`
|
||||
* :php:`EDIT_CONTENT`
|
||||
* :php:`CALC_PERMS`
|
||||
* :php:`current_sys_language`
|
||||
* :php:`MCONF`
|
||||
* :php:`MOD_MENU`
|
||||
* [not scanned] :php:`content`
|
||||
* :php:`activeColPosList`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing the properties or calling the methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which accesses the properties directly or calls the methods.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
In general, extensions should not instantiate and re-use controllers of the core. Existing
|
||||
usages should be rewritten to be free of calls like these.
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84387:
|
||||
|
||||
=================================================================================
|
||||
Deprecation: #84387 - Deprecated method and property in SchedulerModuleController
|
||||
=================================================================================
|
||||
|
||||
See :issue:`84387`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The property :php:`$CMD` and the method :php:`addMessage()` in the :php:`SchedulerModuleController`
|
||||
have been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing the property or calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which accesses the property directly or calls the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Instead of accessing the property :php:`SchedulerModuleController::$CMD`, the method :php:`getCurrentAction()`
|
||||
must be used which returns an instance of the :php:`TYPO3\CMS\Scheduler\Task\Enumeration\Action` enumeration.
|
||||
|
||||
Instead of calling the method :php:`SchedulerModuleController::addMessage()`, in your additional field providers
|
||||
you can now extend :php:`TYPO3\CMS\Scheduler\AbstractAdditionalFieldProvider` which provides a method :php:`addMessage()`
|
||||
with the same API like before.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84414:
|
||||
|
||||
====================================================
|
||||
Deprecation: #84414 - BackendUtility::shortcutExists
|
||||
====================================================
|
||||
|
||||
See :issue:`84414`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP method :php:`TYPO3\CMS\Backend\Utility\BackendUtility::shortcutExists()` has been marked as deprecated and will be removed with TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Installations accessing the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances calling the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use an instance of :php:`TYPO3\CMS\Backend\Backend\Shortcut\ShortcutRepository` and call method :php:`shortcutExists()` to get the same behavior.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned, ext:backend
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-84584:
|
||||
|
||||
=========================================================================================
|
||||
Deprecation: #84584 - AdminPanelView: isAdminModuleEnabled and ext_makeToolbar deprecated
|
||||
=========================================================================================
|
||||
|
||||
See :issue:`84584`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Due to the complete refactoring of the admin panel, the following methods have been deprecated:
|
||||
|
||||
- :php:`\TYPO3\CMS\Adminpanel\View\AdminPanelView::isAdminModuleEnabled()`
|
||||
- :php:`\TYPO3\CMS\Adminpanel\View\AdminPanelView::ext_makeToolBar()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling either one of the methods results in a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Installations calling either one of the methods mentioned.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate :php:`\TYPO3\CMS\Adminpanel\View\AdminPanelView::isAdminModuleEnabled()`:
|
||||
|
||||
- Refactor your admin panel modules to the new API (using :php:`AbstractModule` / :php:`AdminPanelModuleInterface`) and check via :php:`Module->isEnabled()`.
|
||||
- When using this with existing admin panel modules call :php:`isEnabled()` on the new module instance instead.
|
||||
|
||||
Migrate :php:`\TYPO3\CMS\Adminpanel\View\AdminPanelView::ext_makeToolBar()`:
|
||||
|
||||
- When creating custom edit toolbars, build them by yourself matching your templates and styles - you can use :php:`\TYPO3\CMS\Adminpanel\Service\EditToolbarService::createToolbar()` as an inspiration on how to do so.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:adminpanel
|
||||
@@ -0,0 +1,48 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85004:
|
||||
|
||||
============================================================
|
||||
Deprecation: #85004 - Deprecate methods in ReflectionService
|
||||
============================================================
|
||||
|
||||
See :issue:`85004`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods within :php:`TYPO3\CMS\Extbase\Reflection\ReflectionService` have been marked
|
||||
as deprecated:
|
||||
|
||||
* :php:`getClassTagsValues()`
|
||||
* :php:`getClassTagValues()`
|
||||
* :php:`getClassPropertyNames()`
|
||||
* :php:`hasMethod()`
|
||||
* :php:`getMethodTagsValues()`
|
||||
* :php:`getMethodParameters()`
|
||||
* :php:`getPropertyTagsValues()`
|
||||
* :php:`getPropertyTagValues()`
|
||||
* :php:`isClassTaggedWith()`
|
||||
* :php:`isPropertyTaggedWith()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the deprecated methods above will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with a custom extension trying to gather reflection data via :php:`TYPO3\CMS\Extbase\Reflection\ReflectionService`
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Instead of fetching reflection data via :php:`TYPO3\CMS\Extbase\Reflection\ReflectionService`, the needed data should
|
||||
directly be fetched from a :php:`TYPO3\CMS\Extbase\Reflection\ClassSchema` instance. An instance can be created by calling
|
||||
:php:`TYPO3\CMS\Extbase\Reflection\ReflectionService::getClassSchema()`.
|
||||
|
||||
.. index:: PHP-API, ext:extbase, FullyScanned
|
||||
@@ -0,0 +1,50 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85164:
|
||||
|
||||
==============================================
|
||||
Deprecation: #85164 - Language related methods
|
||||
==============================================
|
||||
|
||||
See :issue:`85164`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Various methods related to site language handling have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Info\Controller\TranslationStatusController->getSystemLanguages()`
|
||||
* :php:`TYPO3\CMS\Backend\View\PageLayoutView->languageFlag()`
|
||||
|
||||
These properties have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Backend\View\PageLayoutView->languageIconTitles`
|
||||
* :php:`TYPO3\CMS\Backend\View\PageLayoutView->translateTools`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions calling one of the methods mentioned above.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Above calls can often be substituted using the :php:`Site` object that is always
|
||||
initialized during core bootstrap. In backend HTTP use cases, the object can be retrieved
|
||||
using code like this:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$currentSite = $request->getAttribute('site');
|
||||
$availableLanguages = $currentSite->getAvailableLanguages($this->getBackendUser(), false, $this->id);
|
||||
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,54 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85196:
|
||||
|
||||
===================================================
|
||||
Deprecation: #85196 - Protect SetupModuleController
|
||||
===================================================
|
||||
|
||||
See :issue:`85196`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This file is about third party usage (consumer that call the class as well as
|
||||
signals or hooks depending on it) of :php:`TYPO3\CMS\Setup\Controller\SetupModuleController`.
|
||||
|
||||
A series of class properties changed visibility to protected.
|
||||
They will trigger PHP :php:`E_USER_DEPRECATED` errors if called from outside:
|
||||
|
||||
* :php:`$OLD_BE_USER`
|
||||
* :php:`$MOD_MENU`
|
||||
* :php:`$MOD_SETTINGS`
|
||||
* [not scanned] :php:`$content`
|
||||
* :php:`$overrideConf`
|
||||
* :php:`$languageUpdate`
|
||||
|
||||
These methods have been marked as deprecated and will be removed with TYPO3 v10:
|
||||
|
||||
* :php:`getFormProtection()`
|
||||
* :php:`simulateUser()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the methods mentioned above or accessing one of the properties on an instance of
|
||||
:php:`SetupModuleController` will trigger a PHP :php:`E_USER_DEPRECATED` error in TYPO3 v9 and a PHP fatal error in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The extension scanner will find most usages, but may also find some false positives. The most
|
||||
common property and method names like :php:`$content` are not registered and will not be found
|
||||
if an extension uses that on an instance of :php:`SetupModuleController`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
In general, extensions should not instantiate and re-use controllers of the core. Existing
|
||||
usages should be rewritten to be free of calls like these.
|
||||
|
||||
.. index:: Backend, PHP-API, PartiallyScanned, ext:setup
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85285:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #85285 - Deprecated path related constants
|
||||
=======================================================
|
||||
|
||||
See :issue:`85285`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following constants have been marked as deprecated and should not be used any longer:
|
||||
|
||||
* :php:`PATH_thisScript`
|
||||
Use :php:`Environment::getCurrentScript()` instead
|
||||
|
||||
* :php:`PATH_site`
|
||||
Use :php:`Environment::getPublicPath() . '/'` instead
|
||||
|
||||
* :php:`PATH_typo3`
|
||||
Use :php:`Environment::getPublicPath() . '/typo3/'` instead
|
||||
|
||||
* :php:`PATH_typo3conf`
|
||||
Use :php:`Environment::getPublicPath() . '/typo3conf'` instead
|
||||
|
||||
* :php:`TYPO3_OS`
|
||||
Use :php:`Environment::isWindows()` and :php:`Environment::isUnix()` instead
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The above constants are still defined in TYPO3 v9, but their definition will be
|
||||
dropped in v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Constants can not be deprecated as such and using them does not trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
Extensions in v9 should not use them any longer but switch to the alternatives already.
|
||||
|
||||
The extension scanner will find usages of the above constants and marks them as strong
|
||||
matches.
|
||||
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Usages of the above constants should be switched to the Environment class methods instead.
|
||||
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85300:
|
||||
|
||||
==================================================
|
||||
Deprecation: #85300 - DataHandler resorting method
|
||||
==================================================
|
||||
|
||||
See :issue:`85300`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The public :php:`DataHandler->resorting` method has been marked as deprecated. It will be removed in v10.0.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Installations using this method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations xclassing DataHandler, or having call the method mentioned.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the newly introduced :php:`DataHandler->increaseSortingOfFollowingRecords` method instead.
|
||||
|
||||
.. index:: Backend, FullyScanned, ext:core
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85389:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #85389 - Various public properties in favor of Context API
|
||||
=======================================================================
|
||||
|
||||
See :issue:`85389`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following properties have been marked as deprecated in favor of the newly introduced Context API:
|
||||
|
||||
* :php:`TypoScriptFrontendController->loginUser`
|
||||
* :php:`TypoScriptFrontendController->gr_list`
|
||||
* :php:`TypoScriptFrontendController->beUserLogin`
|
||||
* :php:`TypoScriptFrontendController->showHiddenPage`
|
||||
* :php:`TypoScriptFrontendController->showHiddenRecords`
|
||||
|
||||
The Context API supersedes the public properties in favor of decoupling the information from global objects.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Reading or writing information on any of the public properties will trigger a PHP :php:`E_USER_DEPRECATED` error,
|
||||
however the value is still stored and contains the same information as before.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation using extensions accessing this kind of information.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use Context API / Aspects instead to read from this information.
|
||||
Instantiate the context object and get an aspect:
|
||||
|
||||
* :php:`$context = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Context\Context::class);`
|
||||
* :php:`$context->getPropertyFromAspect('visibility', 'includeHiddenPages')` instead of :php:`$TSFE->showHiddenPage`
|
||||
* :php:`$context->getPropertyFromAspect('visibility', 'includeHiddenContent')` instead of :php:`$TSFE->showHiddenRecords`
|
||||
* :php:`$context->getPropertyFromAspect('frontend.user', 'isLoggedIn')` instead of :php:`$TSFE->loginUser`
|
||||
* :php:`$context->getPropertyFromAspect('backend.user', 'isLoggedIn')` instead of :php:`$TSFE->beUserLogin`
|
||||
* :php:`$context->getPropertyFromAspect('frontend.user', 'groupIds')` instead of :php:`$TSFE->gr_list`
|
||||
|
||||
For more information see :ref:`Context API chapter<t3coreapi:context-api>` in TYPO3 Explained.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85394:
|
||||
|
||||
==============================================================
|
||||
Deprecation: #85394 - Class Core\Database\PdoHelper deprecated
|
||||
==============================================================
|
||||
|
||||
See :issue:`85394`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP class :php:`TYPO3\CMS\Core\Database\PdoHelper` and its static method
|
||||
:php:`importSql()` have been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method triggers a PHP :php:`E_USER_DEPRECATED` error, the class will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions calling :php:`TYPO3\CMS\Core\Database\PdoHelper::importSql()`.
|
||||
The extension scanner will find affected extensions.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The method has been of limited use from an extension point of view. If needed by an extension,
|
||||
the method should be copied over into extension code.
|
||||
|
||||
.. index:: Database, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85408:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #85408 - TemplateService init() deprecated
|
||||
=======================================================
|
||||
|
||||
See :issue:`85408`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`TYPO3\CMS\Core\TypoScript\TemplateService->init()` has been marked as deprecated
|
||||
and should not be used any longer.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling above method triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with extensions calling the above method. However, the extension scanner
|
||||
is not configured to find this too generic method name.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The business code of the method is done within :php:`__construct()`, an explicit call
|
||||
to :php:`init()` is no longer needed and can be removed.
|
||||
|
||||
.. index:: PHP-API, NotScanned
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85445:
|
||||
|
||||
==================================================
|
||||
Deprecation: #85445 - TemplateService->getFileName
|
||||
==================================================
|
||||
|
||||
See :issue:`85445`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP method :php:`TYPO3\CMS\Core\TypoScript\TemplateService->getFileName()` has been marked as deprecated, as
|
||||
it is technically extracted into separate functionality with modern architecture throwing PHP Exceptions when
|
||||
a file name is invalid.
|
||||
|
||||
Along with the method the public property :php:`$fileCache` has been marked as deprecated, which acted as a simple first-level
|
||||
in-memory cache.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly or accessing the public property will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation dealing with PHP code in Frontend (e.g. `$TSFE->tmpl->getFileName()`).
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use :php:`TYPO3\CMS\Frontend\Resource\FilePathSanitizer->sanitize($filePath)` instead.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85451:
|
||||
|
||||
========================================================================
|
||||
Deprecation: #85451 - ContentObjectRenderer->calcIntExplode() deprecated
|
||||
========================================================================
|
||||
|
||||
See :issue:`85451`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->calcIntExplode()`
|
||||
has been marked as deprecated and should not be used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the method will trigger a PHP :php:`E_USER_DEPRECATED` error, the method will
|
||||
be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
The tiny method has been a helper for GMENU rendering and was
|
||||
most likely only used internally. The extension scanner will
|
||||
find possible usages within extensions.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Copy the method to the extension code if needed.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85462-1668719172:
|
||||
|
||||
=====================================================
|
||||
Deprecation: #85462 - Signal 'hasInstalledExtensions'
|
||||
=====================================================
|
||||
|
||||
See :issue:`85462`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The usage of signal :php:`hasInstalledExtensions` of class
|
||||
:php:`\TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService`
|
||||
has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
The signal is a duplication of :php:`afterExtensionInstall` that is also emitted during
|
||||
extension installation.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Slots of this signal will get executed in TYPO3 v9 but will be abandoned with TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions that register slots for the signal :php:`hasInstalledExtensions` of class
|
||||
:php:`\TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Extensions should use the signal :php:`afterExtensionInstall` of class
|
||||
:php:`\TYPO3\CMS\Extensionmanager\Utility\InstallUtility` instead which is emitted after an
|
||||
extension has been installed.
|
||||
|
||||
.. index:: Backend, LocalConfiguration, PHP-API, NotScanned, ext:extensionmanager
|
||||
@@ -0,0 +1,44 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85462:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #85462 - Signal 'tablesDefinitionIsBeingBuilt'
|
||||
===========================================================
|
||||
|
||||
See :issue:`85462`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The usage of signal :php:`tablesDefinitionIsBeingBuilt` of class
|
||||
:php:`\TYPO3\CMS\Extensionmanager\Utility\InstallUtility`
|
||||
has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
The signal is a duplication of :php:`tablesDefinitionIsBeingBuilt` of class
|
||||
:php:`\TYPO3\CMS\Install\Service\SqlExpectedSchemaService` that is now also emitted during
|
||||
extension installation.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Slots of this signal will get executed in TYPO3 v9 but will be abandoned with TYPO3 v10. If a slot provides
|
||||
SQL definitions a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions that register slots for the signal :php:`tablesDefinitionIsBeingBuilt` of class
|
||||
:php:`\TYPO3\CMS\Extensionmanager\Utility\InstallUtility`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Extensions should use the signal :php:`tablesDefinitionIsBeingBuilt` of class
|
||||
:php:`\TYPO3\CMS\Install\Service\SqlExpectedSchemaService` instead which is now emitted during an
|
||||
extension installation.
|
||||
|
||||
.. index:: Backend, LocalConfiguration, PHP-API, NotScanned, ext:extensionmanager
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85543:
|
||||
|
||||
====================================================================================================
|
||||
Deprecation: #85543 - Language-related properties in TypoScriptFrontendController and PageRepository
|
||||
====================================================================================================
|
||||
|
||||
See :issue:`85543`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With the introduction of a LanguageAspect within the new Context API, the following public properties
|
||||
have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_uid`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_content`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_contentOL`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_mode`
|
||||
* :php:`TYPO3\CMS\Frontend\Page\PageRepository->sys_language_uid`
|
||||
|
||||
Additionally, in order to create a better abstraction, the third constructor argument of
|
||||
:php:`TYPO3\CMS\Core\Utility\RootlineUtility` now expects a :php:`Context` object instead of a :php:`PageRepository`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing or setting one of the properties will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Calling RootlineUtility constructor with a PageRepository as a third argument will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any multi-lingual TYPO3 installation with custom non-Extbase-related PHP code.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the new :php:`LanguageAspect` with various superior properties to access the various values.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language');
|
||||
// (previously known as TSFE->sys_language_uid)
|
||||
$languageAspect->getId();
|
||||
// (previously known as TSFE->sys_language_content)
|
||||
$languageAspect->getContentId();
|
||||
// (previously known as TSFE->sys_language_contentOL)
|
||||
$languageAspect->getLegacyOverlayType();
|
||||
// (previously known as TSFE->sys_language_mode)
|
||||
$languageAspect->getLegacyLanguageMode();
|
||||
|
||||
Also, have a detailed look on what other properties the language aspect offers for creating fallback chains,
|
||||
and more sophisticated overlays.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85553:
|
||||
|
||||
=======================================================================================
|
||||
Deprecation: #85553 - PageRepository language-related methods use null as default value
|
||||
=======================================================================================
|
||||
|
||||
See :issue:`85553`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The second parameter of the following methods now have a different default value (:php:`null`) than
|
||||
before (:php:`-1`), to detect if the parameter is omitted or passed in explicitly:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\Page\PageRepository->getPageOverlay()`
|
||||
* :php:`TYPO3\CMS\Frontend\Page\PageRepository->getPagesOverlay()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of these methods with the second argument with :php:`-1` will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions related to language handling.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
In the unlikely case of directly calling these methods with :php:`-1`, it is recommended to remove
|
||||
the second (optional) parameter completely, which will work in TYPO3 v8, TYPO3 v9 and in TYPO3 v10.
|
||||
|
||||
.. index:: Frontend, PHP-API, NotScanned, ext:frontend
|
||||
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85554:
|
||||
|
||||
==========================================================
|
||||
Deprecation: #85554 - PageRepository->checkWorkspaceAccess
|
||||
==========================================================
|
||||
|
||||
See :issue:`85554`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The unused method :php:`TYPO3\CMS\Frontend\Page\PageRepository->checkWorkspaceAccess()` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this public method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Implement the check on :php:`BE_USER->checkWorkspace($workspaceId)` directly in the callers code.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85555:
|
||||
|
||||
===============================================================
|
||||
Deprecation: #85555 - TypoScriptFrontendController->getUniqueId
|
||||
===============================================================
|
||||
|
||||
See :issue:`85555`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The unused method :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->getUniqueId()` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this public method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
It is recommended to build a fully unique string functionality in a separate PHP class, if needed, decorated
|
||||
with a proper singleton pattern, or a runtime cache.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85556:
|
||||
|
||||
===========================================================
|
||||
Deprecation: #85556 - PageRepository->versioningWorkspaceId
|
||||
===========================================================
|
||||
|
||||
See :issue:`85556`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The public property :php:`TYPO3\CMS\Frontend\Page\PageRepository->versioningWorkspaceId` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing or setting the property directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this public property directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the Context API and its workspace aspect
|
||||
|
||||
:php:`GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('workspace', 'id', 0);`
|
||||
|
||||
directly when reading the workspace ID, or instantiate a custom PageRepository with a custom context (see Context
|
||||
API docs) for custom usages.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85557:
|
||||
|
||||
=================================================
|
||||
Deprecation: #85557 - PageRepository->getRootLine
|
||||
=================================================
|
||||
|
||||
See :issue:`85557`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The public method :php:`TYPO3\CMS\Frontend\Page\PageRepository->getRootLine()` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
As `getRootLine()` acts as a simple wrapper around `RootlineUtility`, it is recommended to instantiate
|
||||
the RootLineUtility directly and catch any specific exceptions directly.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85558:
|
||||
|
||||
=========================================================
|
||||
Deprecation: #85558 - ContentObjectRenderer->enableFields
|
||||
=========================================================
|
||||
|
||||
See :issue:`85558`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The public method :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->enableFields()` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
As :php:`enableFields()` acts as a simple wrapper around :php:`PageRepository->enableFields()`, it is recommended
|
||||
to instantiate PageRepository directly.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85646:
|
||||
|
||||
=========================================================
|
||||
Deprecation: #85646 - Deprecate eID implemented as script
|
||||
=========================================================
|
||||
|
||||
See :issue:`85646`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Calling a frontend eID as a direct script call has been marked as deprecated.
|
||||
|
||||
Setting a PHP eID include like this triggers PHP :php:`E_USER_DEPRECATED` error::
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['myEid'] = 'EXT:myExt/Resources/Php/MyAjax.php';
|
||||
|
||||
This is not valid anymore. Instead, a class / method combination should be used::
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['myEid'] = \MyVendor\MyExt\Controller\MyEidController::class . '::myMethod';
|
||||
|
||||
The main difference is that a script call does not execute code if calling :php:`require()` on
|
||||
it directly anymore, but needs a proper registration including an entry method to be called.
|
||||
This increases encapsulation and security.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
eIDs which are registered with a direct script include trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
3rd party extensions which implement eIDs with a script to a file instead of
|
||||
a class->method combination.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Register eID with a class::method syntax like :php:`\TYPO3\CMS\Frontend\MyClass::myMethod` instead.
|
||||
|
||||
.. index:: Frontend, NotScanned
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85666:
|
||||
|
||||
================================================================
|
||||
Deprecation: #85666 - TypoScriptFrontendController->initTemplate
|
||||
================================================================
|
||||
|
||||
See :issue:`85666`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->initTemplate()` has been marked as
|
||||
deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom extensions calling this public method directly.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The method call can simply get removed, the TemplateService in instantiated by TSFE on demand.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85678-1668719172:
|
||||
|
||||
=============================================
|
||||
Deprecation: #85678 - config.titleTagFunction
|
||||
=============================================
|
||||
|
||||
See :issue:`85678`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TypoScript option :typoscript:`config.titleTagFunction` has been marked as deprecated and will be removed with TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Installations using the option will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using the option.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Please use the new PageTitle API to alter the title tag.
|
||||
|
||||
.. index:: TypoScript, NotScanned
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85678:
|
||||
|
||||
====================================================
|
||||
Deprecation: #85678 - $GLOBALS['TSFE']->altPageTitle
|
||||
====================================================
|
||||
|
||||
See :issue:`85678`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP property :php:`$GLOBALS['TSFE']->altPageTitle` has been marked as deprecated and will be removed with TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Installations using this property will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using the property.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Please use the new PageTitle API to alter the title tag.
|
||||
|
||||
.. index:: TypoScript, NotScanned
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85687:
|
||||
|
||||
==================================================
|
||||
Deprecation: #85687 - Deprecate RuntimeCacheWriter
|
||||
==================================================
|
||||
|
||||
See :issue:`85687`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The RuntimeCacheWriter was introduced in TYPO3 9.3 and misused the TYPO3 Caching Framework to provide InMemoryLogging
|
||||
for the AdminPanel. Instead of having a generic LogWriter in the LoggingFramework this belongs
|
||||
to the admin panel scope wise and implementation wise separated from the CachingFramework.
|
||||
|
||||
The RuntimeCacheWriter has therefore been deprecated and the AdminPanel will use custom log writers on demand when
|
||||
they will become necessary.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling RuntimeCacheWriter will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any installation using the RuntimeCacheWriter.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Write your own CacheWriter (see `\TYPO3\CMS\Core\Log\Writer\WriterInterface`) or - if you need the exact same
|
||||
functionality - copy the old RuntimeCacheWriter to your own extension scope and use it.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:adminpanel
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85699:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #85699 - Various methods in PageRepository
|
||||
=======================================================
|
||||
|
||||
See :issue:`85699`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The methods :php:`PageRepository::getMovePlaceholder()` and :php:`PageRepository::movePlhOL()`
|
||||
have been marked as internal.
|
||||
|
||||
The methods :php:`PageRepository::getRecordsByField` and :php:`PageRepository::getFileReferences()`
|
||||
have been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the mentioned methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which calls the methods mentioned above.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No direct migration available.
|
||||
If you need one of the mentioned methods you can copy them over to your extension.
|
||||
|
||||
.. index:: Frontend, FullyScanned
|
||||
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85701:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #85701 - Various methods in ModuleTemplate
|
||||
=======================================================
|
||||
|
||||
See :issue:`85701`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The methods :php:`ModuleTemplate::icons()` and :php:`ModuleTemplate::loadJavascriptLib()`
|
||||
have been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the mentioned methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which calls the methods mentioned.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
There is no migration for the method :php:`ModuleTemplate::icons()` available.
|
||||
The method :php:`ModuleTemplate::loadJavascriptLib()` can be replaced by using :php:`PageRenderer` directly.
|
||||
|
||||
.. index:: Backend, FullyScanned
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85707:
|
||||
|
||||
=============================================
|
||||
Deprecation: #85707 - LoginFramesetController
|
||||
=============================================
|
||||
|
||||
See :issue:`85707`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The class :php:`TYPO3\CMS\Backend\Controller\LoginFramesetController` builds a simple HTML frameset
|
||||
and has been replaced by using the full logic within :php:`LoginController` or a request to
|
||||
`index.php?loginRefresh=1` directly.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Instantiating the LoginFramesetController class will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with custom logic using the rare functionality of LoginFramesetController.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Reference `index.php?loginRefresh=1` in the callers code directly, or re-implement the frameset if
|
||||
necessary.
|
||||
|
||||
.. index:: Backend, FullyScanned, ext:backend
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85727:
|
||||
|
||||
==================================================================
|
||||
Deprecation: #85727 - DatabaseIntegrityCheck moved to EXT:lowlevel
|
||||
==================================================================
|
||||
|
||||
See :issue:`85727`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PHP class :php:`TYPO3\CMS\Core\Integrity\DatabaseIntegrityCheck` has been moved from the system
|
||||
extension `core` to `lowlevel`. The PHP class has been renamed to
|
||||
:php:`TYPO3\CMS\Lowlevel\Integrity\DatabaseIntegrityCheck`.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the old class name will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation where this PHP class is in use within a TYPO3 extension.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Ensure that the system extension `lowlevel` is installed, and the caller code uses the new class name.
|
||||
|
||||
For TYPO3 v9, the old class is kept in place and will be removed in TYPO3 v10.
|
||||
|
||||
.. index:: ext:lowlevel, FullyScanned
|
||||
@@ -0,0 +1,40 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85735:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #85735 - Various method and property in DocumentTemplate
|
||||
=====================================================================
|
||||
|
||||
See :issue:`85735`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`DocumentTemplate::addStyleSheet()` has been marked as deprecated.
|
||||
|
||||
The property :php:`DocumentTemplate::hasDocheader` has been marked as protected as the property is not evaluated anymore in the core.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`DocumentTemplate::addStyleSheet()` will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Using the property :php:`DocumentTemplate::hasDocheader` will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances with third party code directly accessing the method or the property.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
:php:`DocumentTemplate::addStyleSheet()` can be replaced by using :php:`PageRenderer::addCssFile()`.
|
||||
|
||||
The property has no migration available.
|
||||
|
||||
.. index:: Backend, FullyScanned, PHP-API
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85759:
|
||||
|
||||
=================================================
|
||||
Deprecation: #85759 - GeneralUtility::getHostName
|
||||
=================================================
|
||||
|
||||
See :issue:`85759`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`GeneralUtility::getHostName()` has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the mentioned method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which accesses the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration available.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85760:
|
||||
|
||||
======================================================
|
||||
Deprecation: #85760 - GeneralUtility::unQuoteFilenames
|
||||
======================================================
|
||||
|
||||
See :issue:`85760`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`GeneralUtility::unQuoteFilenames()` has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the mentioned method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which accesses the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration available.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85761:
|
||||
|
||||
===========================================
|
||||
Deprecation: #85761 - SaltedPasswordService
|
||||
===========================================
|
||||
|
||||
See :issue:`85761`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Class :php:`TYPO3\CMS\Saltedpasswords\SaltedPasswordService` has been deprecated and
|
||||
should not be used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Instantiating :php:`SaltedPasswordService` will log a deprecation message.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
This class is usually not called by extensions, it is unlikely instances are affected by this.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
The service has been migrated into the basic core authentication service chain for
|
||||
frontend and backend. Usually no migration is needed.
|
||||
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:saltedpasswords
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85793:
|
||||
|
||||
=====================================================================
|
||||
Deprecation: #85793 - Several constants from SystemEnvironmentBuilder
|
||||
=====================================================================
|
||||
|
||||
See :issue:`85793`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following constants have been deprecated and should not be used any longer:
|
||||
|
||||
* :php:`NUL` (Use :php:`"\0"` instead)
|
||||
|
||||
* :php:`TAB` (Use :php:`"\t"` instead)
|
||||
|
||||
* :php:`SUB` (Use :php:`chr(26)` instead)
|
||||
|
||||
* :php:`TYPO3_URL_MAILINGLISTS`
|
||||
|
||||
* :php:`TYPO3_URL_DOCUMENTATION`
|
||||
|
||||
* :php:`TYPO3_URL_DOCUMENTATION_TSREF`
|
||||
|
||||
* :php:`TYPO3_URL_DOCUMENTATION_TSCONFIG`
|
||||
|
||||
* :php:`TYPO3_URL_CONSULTANCY`
|
||||
|
||||
* :php:`TYPO3_URL_CONTRIBUTE`
|
||||
|
||||
* :php:`TYPO3_URL_SECURITY`
|
||||
|
||||
* :php:`TYPO3_URL_DOWNLOAD`
|
||||
|
||||
* :php:`TYPO3_URL_SYSTEMREQUIREMENTS`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The above constants are still defined in TYPO3 v9, but their definition will be
|
||||
dropped in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Constants can not be deprecated as such and using them does not trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
Extensions in TYPO3 v9 should not use them any longer but switch to the alternatives already.
|
||||
|
||||
The extension scanner will find usages of the above constants and marks them as strong
|
||||
matches.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use one of the :php:`chr(*)` variants or replace the constant usage with the URL in your own code.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,54 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85796:
|
||||
|
||||
===============================================
|
||||
Deprecation: #85796 - Salted passwords cleanups
|
||||
===============================================
|
||||
|
||||
See :issue:`85796`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
These methods have been marked as deprecated:
|
||||
|
||||
:php:`TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance()`
|
||||
Use :php:`SaltFactory->get()` to retrieve a hash instance of for a given password hash.
|
||||
Use :php:`SaltFactory->getDefaultHashInstance()` to retrieve an instance of the configured default hash algorithm
|
||||
for a given context. See the method comments for usage details.
|
||||
|
||||
:php:`TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::determineSaltingHashingMethod()`
|
||||
Use :php:`SaltFactory->getDefaultHashInstance()` instead.
|
||||
|
||||
:php:`TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::setPreferredHashingMethod()`
|
||||
This method was only used for unit testing and has been marked as deprecated without substitution since
|
||||
object instances of :php:`SaltFactory` can now be properly mocked.
|
||||
Use :php:`Prophecy` to do that in unit tests that have :php:`SaltFactory` as dependency.
|
||||
|
||||
:php:`TYPO3\CMS\Saltedpasswords\Utility\SaltedPasswordsUtility->getNumberOfBackendUsersWithInsecurePassword()`
|
||||
This internal method is unused and there is no new implementation to substitute it.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling one of the above methods will trigger a PHP :php:`E_USER_DEPRECATED` error and a fatal PHP error in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Most instances are not affected by this change if they don't have custom authentication
|
||||
services loaded that add magic with stored local password hashes, and if they don't use
|
||||
the :php:`SaltFactory` in own extension which is a seldom use case.
|
||||
|
||||
The extension scanner will find usages in extensions.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the new factory methods as outlined in the description section.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:saltedpasswords
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85801:
|
||||
|
||||
============================================================================
|
||||
Deprecation: #85801 - GeneralUtility::explodeUrl2Array - 2nd method argument
|
||||
============================================================================
|
||||
|
||||
See :issue:`85801`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The second argument in :php:`TYPO3\CMS\Core\Utility\GeneralUtility::explodeUrl2Array()` has been marked as deprecated.
|
||||
|
||||
Setting this (optional) argument to :php:`true` calls the native PHP function :php:`parse_str()`, which
|
||||
should be used instead directly.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method with an explicitly set second argument will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with a custom extension calling the method above with a second method argument.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If the second argument was set to :php:`true` before, use the native PHP function :php:`parse_str()`, if the
|
||||
second parameter was set to :php:`false` before, just remove it from the method call.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85802:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #85802 - Move FlexFormService from EXT:extbase to EXT:core
|
||||
=======================================================================
|
||||
|
||||
See :issue:`85802`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Move FlexFormService from EXT:extbase to EXT:core.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The PHP class :php:`TYPO3\CMS\Extbase\Service\FlexFormService` has been moved from the system
|
||||
extension `extbase` to `core`. The PHP class has been renamed to
|
||||
:php:`TYPO3\CMS\Core\Service\FlexFormService`.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation where this PHP class is in use within a TYPO3 extension.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the new namespace to reference the :php:`TYPO3\CMS\Core\Service\FlexFormService`.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85804:
|
||||
|
||||
=============================================================
|
||||
Deprecation: #85804 - Salted password hash class deprecations
|
||||
=============================================================
|
||||
|
||||
See :issue:`85804`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Selecting the hash algorithm used to store frontend and backend user hashes is
|
||||
now a "preset" and can be changed using "Admin tools" -> "Settings" -> "Configuration Presets".
|
||||
|
||||
Existing settings are updated automatically when upgrading from an older TYPO3 version to
|
||||
TYPO3 v9. The detail list below is only interesting for instances that need to
|
||||
run custom hash mechanisms.
|
||||
|
||||
The password hash mechanism used for backend user passwords has been moved from
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['saltedpasswords']['BE']['saltedPWHashingMethod']`
|
||||
to :php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordHashing']['className']`. Options for a specific
|
||||
hash algorithms can be defined using :php:`$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordHashing']['options']`.
|
||||
|
||||
The password hash mechanism used for frontend user passwords has been moved from
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['saltedpasswords']['FE']['saltedPWHashingMethod']`
|
||||
to :php:`$GLOBALS['TYPO3_CONF_VARS']['FE']['passwordHashing']['className']`. Options for a specific
|
||||
hash algorithms can be defined using :php:`$GLOBALS['TYPO3_CONF_VARS']['FE']['passwordHashing']['options']`.
|
||||
|
||||
Custom password hash algorithms should now be registered in
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['availablePasswordHashAlgorithms']`.
|
||||
The usage of the former array entry
|
||||
:php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/saltedpasswords']['saltMethods']` has been marked as deprecated.
|
||||
|
||||
These interfaces and classes have been marked as deprecated and should not be implemented any longer:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\ComposedSaltInterface`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\AbstractComposedSalt`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Utility\ExtensionManagerConfigurationUtility`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Utility\SaltedPasswordsUtility`
|
||||
|
||||
An interface has been changed:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\SaltInterface->getHashedPassword(string $password)` - The
|
||||
second argument has been dropped. Classes implementing the interface should remove the second argument.
|
||||
|
||||
These methods have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Argon2iSalt->getOptions()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Argon2iSalt->setOptions()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BcryptSalt->getOptions()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BcryptSalt->setOptions()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getMinHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getSaltLength()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getSetting()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->setHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->setMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->setMinHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt->getSetting()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt->getSaltLength()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getMinHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getSaltLength()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getSetting()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->setHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->setMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->setMinHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getMinHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getSaltLength()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getSetting()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->setHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->setMaxHashCount()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->setMinHashCount()`
|
||||
|
||||
These methods changed their signature:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->getHashedPassword()` - Second argument marked as deprecated
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt->getHashedPassword()` - Second argument marked as deprecated
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->getHashedPassword()` - Second argument marked as deprecated
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->getHashedPassword()` - Second argument marked as deprecated
|
||||
|
||||
These methods changed their visibility from public to protected:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->isValidSalt()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt->base64Encode()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt->isValidSalt()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt->base64Encode()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->isValidSalt()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->base64Encode()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt->base64Decode()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->isValidSalt()`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt->base64Encode()`
|
||||
|
||||
These class constants have been marked as deprecated and will be removed in TYPO3 v10:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt::ITOA64`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt::HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt::MAX_HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt::MIN_HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt::ITOA64`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt::ITOA64`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt::HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt::MAX_HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt::MIN_HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt::ITOA64`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt::HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt::MAX_HASH_COUNT`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt::MIN_HASH_COUNT`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using functionality from the above list will trigger PHP :php:`E_USER_DEPRECATED` errors.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Almost no TYPO3 instances are directly affected by the changes outlined above. A configuration
|
||||
upgrade is in place to move from old to new settings when calling the install tool the first time
|
||||
after upgrade without further user interaction.
|
||||
|
||||
If in rare cases an existing TYPO3 instance runs custom salt mechanisms, the extension scanner
|
||||
will find affected code places that should be adapted.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If the extension scanner finds affected code, adapt the method calls, class constant usages and interface usages.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:saltedpasswords
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85806:
|
||||
|
||||
==================================================================================
|
||||
Deprecation: #85806 - Second argument of PageRenderer::addInlineLanguageLabelArray
|
||||
==================================================================================
|
||||
|
||||
See :issue:`85806`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The second argument in :php:`TYPO3\CMS\Core\Page\PageRenderer::addInlineLanguageLabelArray()` has been marked as deprecated.
|
||||
|
||||
Setting this (optional) argument to :php:`true` must be resolved by using the :php:`TYPO3\CMS\Core\Localization\LanguageService` directly.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method with an explicitly set second argument will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with a custom extension calling the method above with a second method argument.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
If the second argument was set to :php:`true` before, use the :php:`TYPO3\CMS\Core\Localization\LanguageService`. If the
|
||||
second parameter was set to :php:`false` before, just remove it from the method call.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85807:
|
||||
|
||||
================================================================
|
||||
Deprecation: #85807 - EnvironmentService::isEnvironmentInCliMode
|
||||
================================================================
|
||||
|
||||
See :issue:`85807`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`TYPO3\CMS\Extbase\Service\EnvironmentService::isEnvironmentInCliMode()` has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with a custom extension calling the method above.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use :php:`TYPO3\CMS\Core\Core\Environment::isCli()` as replacement.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:extbase
|
||||
@@ -0,0 +1,55 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85821:
|
||||
|
||||
=======================================
|
||||
Deprecation: #85821 - bootstrap methods
|
||||
=======================================
|
||||
|
||||
See :issue:`85821`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods of :php:`TYPO3\CMS\Core\Core\Bootstrap` have been marked as deprecated. Some of
|
||||
them will just change their visibility from public to protected in TYPO3 v10 and thus should not
|
||||
be called externally any longer:
|
||||
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::usesComposerClassLoading()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::getInstance()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->configure()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::checkIfEssentialConfigurationExists()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->setEarlyInstance()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstance()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstances()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::loadConfigurationAndInitialize()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->initializePackageManagement()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::populateLocalConfiguration()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::disableCoreCache()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::initializeCachingFramework()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap->setRequestType()`
|
||||
* :php:`TYPO3\CMS\Core\Core\Bootstrap::setFinalCachingFrameworkCacheConfiguration()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This deprecation is only interesting for code that interferes with early core bootstrap.
|
||||
Those may trigger PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using early bootstrap code may be affected by this. Those should strive for
|
||||
using the general entry method :php:`Bootstrap::init()` instead.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
See changes on the typo3/testing-framework which formerly used early instance
|
||||
bootstrap calls for an example on how existing code can be refactored to use
|
||||
the top level :php:`Bootstrap::init()` instead.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85822:
|
||||
|
||||
============================================================================
|
||||
Deprecation: #85822 - Static class TYPO3\\CMS\\Frontend\\Page\\PageGenerator
|
||||
============================================================================
|
||||
|
||||
See :issue:`85822`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PSR-15 RequestHandler is responsible for compiling content. There is no need anymore to directly access and set global objects, which are available already in the RequestHandler.
|
||||
|
||||
Therefore this logic is moved into RequestHandler and the PHP class :php:`TYPO3\CMS\Frontend\Page\PageGenerator`
|
||||
has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods within the PHP class will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with a custom extension calling the static class.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Move the render logic to your own extension or use the RequestHandler to compile the functionality.
|
||||
|
||||
The unrelated method :php:`PageRenderer::inline2TempFile()` has been moved into proper methods found at
|
||||
|
||||
* :php:`GeneralUtility::writeJavaScriptContentToTemporaryFile($content)`
|
||||
* :php:`GeneralUtility::writeStyleSheetContentToTemporaryFile($content)`
|
||||
|
||||
.. index:: Frontend, FullyScanned, ext:frontend
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85833:
|
||||
|
||||
==========================================================================
|
||||
Deprecation: #85833 - Extension saltedpasswords merged into core extension
|
||||
==========================================================================
|
||||
|
||||
See :issue:`85833`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
`EXT:saltedpasswords` has been merged into the `core` extension. All
|
||||
classes have been moved to the PHP namespace :php:`TYPO3\CMS\Core\Crypto\PasswordHashing`.
|
||||
|
||||
The documentation has been moved to the Core API document and can be found
|
||||
`online <https://docs.typo3.org/typo3cms/CoreApiReference/stable/ApiOverview/PasswordHashing/>`_.
|
||||
|
||||
Classes that have been marked as deprecated have been moved to the same namespace and will be removed in TYPO3 v10.
|
||||
|
||||
The following classes have been renamed:
|
||||
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Argon2iSalt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Argon2iPasswordHash::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BcryptSalt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BcryptPasswordHash::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\BlowfishSalt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BlowfishPasswordHash::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Exception\InvalidSaltException::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\InvalidPasswordHashException::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Md5Salt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Md5PasswordHash::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\PasswordHashFactory::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\SaltInterface::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\PasswordHashInterface::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\Pbkdf2Salt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Pbkdf2PasswordHash::class`
|
||||
* :php:`TYPO3\CMS\Saltedpasswords\Salt\PhpassSalt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\PhpassPasswordHash::class`
|
||||
* (deprecated) :php:`TYPO3\CMS\Saltedpasswords\Salt\AbstractComposedSalt::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\AbstractComposedSalt::class`
|
||||
* (deprecated) :php:`TYPO3\CMS\Saltedpasswords\Salt\ComposedSaltInterface::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\ComposedPasswordHashInterface::class`
|
||||
* (deprecated) :php:`TYPO3\CMS\Saltedpasswords\Utility\ExensionManagerConfigurationUtility::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\ExtensionManagerConfigurationUtility::class`
|
||||
* (deprecated) :php:`TYPO3\CMS\Saltedpasswords\SaltedPasswordService::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\SaltedPasswordService::class`
|
||||
* (deprecated) :php:`TYPO3\CMS\Saltedpasswords\Utility\SaltedPasswordsUtility::class` to :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\SaltedPasswordsUtility::class`
|
||||
|
||||
The following language files have been moved:
|
||||
|
||||
* (deprecated) :file:`saltedpasswords/Resources/Private/Language/locallang.xlf` to :file:`core/Resources/Private/Language/locallang_deprecated_saltedpasswords.xlf`
|
||||
* (deprecated) :file:`saltedpasswords/Resources/Private/Language/locallang_em.xlf` to :file:`core/Resources/Private/Language/locallang_deprecated_saltedpasswords_em.xlf`
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This change is usually transparent for TYPO3 instances. The old class names have been defined as
|
||||
aliases to the new names. They will continue to work in TYPO3 v9 and be dropped in TYPO3 v10.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Almost no instance is directly affected by this change, most instances need no configuration change.
|
||||
In rare cases, if extensions directly deal with password hashing, class namespaces may need to be adapted.
|
||||
The extension scanner will find usages of old class names.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use the new class names and drop usages of deprecated classes.
|
||||
|
||||
.. index:: Backend, PHP-API, FullyScanned, ext:saltedpasswords
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85836:
|
||||
|
||||
=================================================
|
||||
Deprecation: #85836 - BackendUtility::getTCAtypes
|
||||
=================================================
|
||||
|
||||
See :issue:`85836`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method :php:`BackendUtility::getTCAtypes()` has been marked as deprecated and will be removed in TYPO3 v10.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the mentioned method will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Third party code which accesses the method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration available.
|
||||
|
||||
.. index:: Backend, FullyScanned, ext:backend
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85858:
|
||||
|
||||
==================================================
|
||||
Deprecation: #85858 - GeneralUtility::clientInfo()
|
||||
==================================================
|
||||
|
||||
See :issue:`85858`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The helper method :php:`GeneralUtility::clientInfo()` responsible for
|
||||
parsing the server variable :php:`$_SERVER['HTTP_USER_AGENT']` has been marked
|
||||
as deprecated.
|
||||
|
||||
This method is not up-to-date with current browser headers, and in light of
|
||||
browser that are able to fake the HTTP_USER_AGENT the detection is not practical
|
||||
anymore.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with extensions directly calling this method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Depending on the use-case, it is best to use the PSR-7-based request object,
|
||||
if available in the context, or `$_SERVER['HTTP_USER_AGENT']` to detect a
|
||||
specific browser/client user agent.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85878:
|
||||
|
||||
=========================================================
|
||||
Deprecation: #85878 - EidUtility and various TSFE methods
|
||||
=========================================================
|
||||
|
||||
See :issue:`85878`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The Utility class :php:`TYPO3\CMS\Frontend\Utility\EidUtility` has been marked as deprecated.
|
||||
|
||||
The following methods have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->initFEuser()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->storeSessionData()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->previewInfo()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->hook_eofe()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->addTempContentHttpHeaders()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sendCacheHeaders()`
|
||||
|
||||
The following hook has been marked as deprecated:
|
||||
|
||||
* `$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_previewInfo']`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods or registering a hook listener will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with custom functionality in the frontend using any of the methods, or the hook.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
As all functionality has been set up via PSR-15 middlewares, use a PSR-15 middleware instead.
|
||||
|
||||
The method :php:`storeSessionData()` should be replaced with :php:`TSFE->fe_user->storeSessionData()`.
|
||||
|
||||
The methods :php:`addTempContentHttpHeaders()` and :php:`sendCacheHeaders()` are now incorporated
|
||||
within :php:`TSFE->processOutput()`. This function should be used, or rather add custom headers
|
||||
to a PSR-15 Response object if available.
|
||||
|
||||
On top, the hook is superseded by the Frontend Hook `hook_eofe` which is executed in the Frontend rendering
|
||||
flow directly afterwards.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned, ext:frontend
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85892:
|
||||
|
||||
====================================================================
|
||||
Deprecation: #85892 - Various methods regarding sys_domain-resolving
|
||||
====================================================================
|
||||
|
||||
See :issue:`85892`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Various methods specific for handling `sys_domain` records have been marked as deprecated. As the new site handling is in place in favor of using `sys_domain`
|
||||
records, these methods have been centralized in a :php:`LegacyDomainResolver` class, which is however marked as internal.
|
||||
|
||||
Instead, generating URLs should be done via the new PageUriBuilder and Routing API, which covers both the new
|
||||
site handling and the specific sys_domain record.
|
||||
|
||||
The following methods have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->domainNameMatchesCurrentRequest()`
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->getDomainDataForPid()`
|
||||
* :php:`TYPO3\CMS\Backend\Utility\BackendUtility::getDomainStartPage()`
|
||||
* :php:`TYPO3\CMS\Backend\Utility\BackendUtility::firstDomainRecord()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any installation with custom functionality regarding `sys_domain` handling where any of the methods mentioned above are used.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to either the new Routing API (finalized for 9 LTS) or implement the functionality in your own, or use the :php:`LegacyDomainResolver` class,
|
||||
but since the concept of sys_domain handling will be removed in TYPO3 v10, consider use of the Site handling functionality instead.
|
||||
|
||||
.. index:: Frontend, Backend, FullyScanned
|
||||
@@ -0,0 +1,152 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85902:
|
||||
|
||||
===================================
|
||||
Deprecation: #85902 - IMGMENU/GMENU
|
||||
===================================
|
||||
|
||||
See :issue:`85902`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Rendering a Hierarchical Menu via TypoScript previously allowed various rendering methods, namely textual (`TMENU`),
|
||||
but also rendering menu items as images (`GMENU`) or as an image map (`IMGMENU`). Both graphical possibilities
|
||||
have been marked as deprecated, as it is considered bad practice building websites
|
||||
nowadays - images with a fixed width, and text within images has various drawbacks in terms of accessibility and
|
||||
responsive renderings.
|
||||
|
||||
The following PHP classes have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject`
|
||||
|
||||
The related TypoScript menu objects `GMENU` and `GMENUITEM` as well as `IMGMENU` and `IMGMENUITEM` have been
|
||||
marked as deprecated.
|
||||
|
||||
On top the following TypoScript options within a MENU item, regarding TMENU have been marked as deprecated:
|
||||
|
||||
* imgNamePrefix
|
||||
* imgNameNotRandom
|
||||
|
||||
The following TMENU item properties should not be used anymore.
|
||||
|
||||
* RO_chBgColor
|
||||
* beforeImg
|
||||
* beforeImgTagParams
|
||||
* beforeImgLink
|
||||
* beforeROImg
|
||||
* RO
|
||||
* afterImg
|
||||
* afterImgTagParams
|
||||
* afterImgLink
|
||||
* afterROImg
|
||||
|
||||
The following item states have been marked as deprecated ("RO" for "rollover" in graphics-related items).
|
||||
|
||||
* IFSUBRO
|
||||
* ACTRO
|
||||
* ACTIFSUBRO
|
||||
* CURRO
|
||||
* CURIFSUBRO
|
||||
* USRRO
|
||||
* USERDEF1RO
|
||||
* USERDEF2RO
|
||||
|
||||
The following previously public properties are now marked as internal and trigger a PHP :php:`E_USER_DEPRECATED` error,
|
||||
partly due to preparations of refactoring the PHP code once GMENU functionality is removed, and partly
|
||||
due to the highly connected functionality within the PHP classes:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDlist`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf`
|
||||
* [not scanned] :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->tmpl`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page`
|
||||
* [not scanned] :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->id`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute`
|
||||
|
||||
The following methods have changed visibility:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->subMenu()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink()`
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_RO()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_init()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeLinking()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_afterLinking()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeAllWrap()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_finish()`
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->getBeforeAfter()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap()`
|
||||
* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish()`
|
||||
|
||||
The following functionality has been marked as deprecated as well:
|
||||
|
||||
* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->setJS('mouseOver')`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Instantiating any of the deprecated PHP classes, or calling any of the PHP methods will trigger a
|
||||
PHP :php:`E_USER_DEPRECATED` error, as well as setting any of the previously public properties.
|
||||
|
||||
Using `GMENU` or `IMGMENU` or any of the TypoScript settings will also raise a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations using `GMENU` or `IMGMENU` TypoScript functionality, roll-over functionality within menus
|
||||
in Frontend, or image-related functionality related to `HMENU`, or extending `HMENU` with their custom menus.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate to `TMENU` by using "before" and "after" functionality to effectively render images with `GIFBUILDER`.
|
||||
|
||||
.. index:: Frontend, TypoScript, PartiallyScanned, ext:frontend
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85960:
|
||||
|
||||
================================================================================================================
|
||||
Deprecation: #85960 - AbstractUserAuthentication::compareUident and AbstractAuthenticationService->compareUident
|
||||
================================================================================================================
|
||||
|
||||
See :issue:`85960`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Two methods related to old plain text or simple md5 related password checking have
|
||||
been marked as deprecated after those have been unused or overridden for a while already:
|
||||
|
||||
* :php:`TYPO3\CMS\Core\Authentication\AbstractUserAuthentication->compareUident()`
|
||||
* :php:`TYPO3\CMS\Core\Authentication\AbstractAuthenticationService->compareUident()`
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the above methods will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Instances using special authentication extensions might be
|
||||
affected. The extension scanner should find usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Do not use plain text or simple md5 based password comparison in authentication services.
|
||||
|
||||
.. index:: PHP-API, FullyScanned
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85971:
|
||||
|
||||
=====================================================
|
||||
Deprecation: #85971 - PageRepository->getFirstWebPage
|
||||
=====================================================
|
||||
|
||||
See :issue:`85971`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The method php:`PageRepository->getFirstWebPage()` is only used when no "?id" parameter is given, and no rootpage was resolved.
|
||||
|
||||
As this is the only use-case, a more generic "getMenu" method can be used, which does the
|
||||
same except for not "limiting" the query to one result, so there is a minimal memory penalty when doing so.
|
||||
However due to Pseudo-Site functionality this drawback only applies to rare cases.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with extensions directly calling this method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Use php:`PageRepository->getMenu()` instead.
|
||||
|
||||
.. index:: Frontend, FullyScanned, ext:frontend
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85977:
|
||||
|
||||
========================================================================================
|
||||
Deprecation: #85977 - Extbase CLI functionality, Command Controllers and @cli Annotation
|
||||
========================================================================================
|
||||
|
||||
See :issue:`85977`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
TYPO3 supports Symfony Console commands natively since TYPO3 v8. Since TYPO3 v9.0 it is possible to also register
|
||||
Symfony Console commands within scheduler, just like Extbase CommandControllers can be handled.
|
||||
|
||||
The main advantage of Symfony Console commands over Extbase Command Controllers is that they run very early in a
|
||||
CLI context, not needing a database connection or other restrictions. On top comes better alias handling, CLI argument
|
||||
and option handling.
|
||||
|
||||
As a trade-off, Extbase's ObjectManager and Configuration Handling and ORM is not available by default.
|
||||
|
||||
Since TYPO3 v9.4, it is possible to also register a Symfony Console command as "schedulable", to control the visibility
|
||||
of a certain Symfony Command in Scheduler, making the PHPDoc annotation :php:`@cli` obsolete.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using a CommandController via CLI will trigger a PHP :php:`E_USER_DEPRECATED` error. All other PHP classes for Extbase's CLI
|
||||
functionality have been marked as deprecated, but will not trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
Using :php:`@cli` will also trigger a PHP :php:`E_USER_DEPRECATED` error. After the annotation has been removed from your commands, they will appear in the list of
|
||||
executable commands in the scheduler module.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
All installations that make use of command controllers or methods tagged with :php:`@cli`.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Migrate custom commands within CommandControllers as symfony commands as TYPO3 Core does. Use specific argument
|
||||
definitions on what parameters will be available.
|
||||
|
||||
See documentation https://symfony.com/doc/current/console.html and
|
||||
:ref:`t3coreapi:symfony-console-commands` for detailed
|
||||
descriptions on how to write Console Commands and how to integrate them into TYPO3.
|
||||
|
||||
Think twice whether you need all of Extbase's power of Dependency Injection (ObjectManager / ObjectContainer) and Domain
|
||||
Model / Repositories and ORM, or if native database queries will suit your task better.
|
||||
|
||||
If anything related to DataHandler and Backend permission handling is necessary, you should run
|
||||
:php:`Bootstrap::initializeBackendAuthentication();`.
|
||||
|
||||
.. index:: ext:scheduler, FullyScanned
|
||||
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85978:
|
||||
|
||||
==============================================
|
||||
Deprecation: #85978 - GraphicalFunctions->init
|
||||
==============================================
|
||||
|
||||
See :issue:`85978`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The init method of :php:`GraphicalFunctions/Gifbuilder` was used as a constructor to set up various internal properties, and is now transferred into a real constructor, making the extra call to :php:`init()` obsolete.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling the method directly will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Any TYPO3 installation with extensions directly calling this method.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration is needed, the constructor of :php:`GraphicalFunctions/Gifbuilder` takes care of the initialization of all settings.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,48 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-85996:
|
||||
|
||||
========================================================
|
||||
Deprecation: #85996 - ExtensionManager CommandController
|
||||
========================================================
|
||||
|
||||
See :issue:`85996`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following Extension Manager CLI commands have been reimplemented internally with Symfony console
|
||||
commands:
|
||||
|
||||
* :bash:`extensionmanager:extension:install`, now :bash:`extension:activate`
|
||||
* :bash:`extensionmanager:extension:uninstall`, now :bash:`extension:deactivate`
|
||||
* :bash:`extensionmanager:extension:dumpclassloadinginformation`, now :bash:`dumpautoload`
|
||||
|
||||
The left-over command controller PHP class :php:`TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController`
|
||||
is not in use anymore, and therefore has been marked as deprecated.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the commands within the PHP class will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations that extend the command controller directly in extensions are affected by this change.
|
||||
Installations simply using the CLI entrypoint are not affected.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
* use :bash:`extension:activate` instead of :bash:`extensionmanager:extension:install`
|
||||
* use :bash:`extension:deactivate` instead of :bash:`extensionmanager:extension:uninstall`
|
||||
* use :bash:`dumpautoload` instead of :bash:`extensionmanager:extension:dumpclassloadinginformation`
|
||||
|
||||
In order to achieve the same functionality within custom PHP code, it is recommended to use the
|
||||
underlying logic within the commands instead of calling or extending the command controller class.
|
||||
|
||||
.. index:: CLI, FullyScanned, ext:extensionmanager
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86001:
|
||||
|
||||
===================================================================
|
||||
Deprecation: #86001 - Workspaces tasks migrated to symfony commands
|
||||
===================================================================
|
||||
|
||||
See :issue:`86001`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The custom scheduler tasks for workspace publishing and removing of preview links have been migrated
|
||||
to custom symfony commands, making the functionality specifically within the scheduler context obsolete.
|
||||
|
||||
The following tasks should not be used anymore:
|
||||
|
||||
* Workspaces auto-publication
|
||||
* Workspaces cleanup preview links
|
||||
|
||||
The following related classes have been marked as deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Workspaces\Service\AutoPublishService`
|
||||
* :php:`TYPO3\CMS\Workspaces\Task\AutoPublishTask`
|
||||
* :php:`TYPO3\CMS\Workspaces\Task\CleanupPreviewLinkTask`
|
||||
|
||||
The scheduler tasks are still available, but marked as obsolete.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Executing one of the tasks above will trigger a PHP :php:`E_USER_DEPRECATED` error. Calling any of the classes from the outside
|
||||
will also trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 Installations using workspaces in combination with any of the two scheduler tasks.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Create a new scheduler task based on the Symfony Command and select one of the symfony-based commands
|
||||
"cleanup:previewlinks" or "workspace:auto-publish" respectively.
|
||||
|
||||
.. index:: CLI, FullyScanned, ext:workspaces
|
||||
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86002:
|
||||
|
||||
=============================================================
|
||||
Deprecation: #86002 - TSFE constructor with no_cache argument
|
||||
=============================================================
|
||||
|
||||
See :issue:`86002`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The 4th constructor argument of the PHP class :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController`
|
||||
(a.k.a. "TSFE") was previously used to determine if the GET/POST parameter "no_cache" was set, which is
|
||||
moved to a PSR-15 middleware now, making the argument obsolete. This argument is now set to "null" by default.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If anything other than the null value is given to the constructor method, a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions that instantiate the PHP class manually and setting the 4th
|
||||
constructor argument.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Set the constructor argument to "null" when instantiating the class manually, use `$tsfe->set_no_cache()` instead
|
||||
to manually disable the caching mechanism.
|
||||
|
||||
.. index:: Frontend, PHP-API, FullyScanned
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86046:
|
||||
|
||||
==========================================================================================
|
||||
Deprecation: #86046 - Additional arguments in several TypoScriptFrontendController methods
|
||||
==========================================================================================
|
||||
|
||||
See :issue:`86046`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following public methods within :php:`TypoScriptFrontendController` now expect an argument:
|
||||
|
||||
* :php:`calculateLinkVars(array $queryParams)`
|
||||
* :php:`preparePageContentGeneration(ServerRequestInterface $request)`
|
||||
|
||||
This is necessary to avoid usage of the PHP global variables $_GET/$_POST.
|
||||
|
||||
In addition, to be backwards-compatible with extensions previously using
|
||||
:php:`GeneralUtility::_GETset()`, this method now also updates the global PSR-7 request
|
||||
for the time being, although this method will be removed in the future.
|
||||
|
||||
TYPO3 aims to not access global state in the future, in order to do proper "sub requests".
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling any of the methods mentioned above without a method argument will trigger an according
|
||||
PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions using these methods.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Inject either QueryParameters from a given PSR-7 request object or the object itself,
|
||||
by looking at the according method signature.
|
||||
|
||||
.. index:: Frontend, FullyScanned, ext:frontend
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-86109:
|
||||
|
||||
========================================================
|
||||
Deprecation: #86109 - Class UserStorageCapabilityService
|
||||
========================================================
|
||||
|
||||
See :issue:`86109`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Class :php:`TYPO3\CMS\Core\Resource\Service\UserStorageCapabilityService` has been
|
||||
marked as deprecated and should not be used any longer.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This core internal class has been switched from a `TCA` :php:`userFunc` to a
|
||||
:php:`renderType`.
|
||||
|
||||
|
||||
Affected Installations
|
||||
======================
|
||||
|
||||
Extensions probably never used this internal class, however, the extension
|
||||
scanner will still find any usages.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No migration possible.
|
||||
|
||||
.. index:: Backend, PHP-API, TCA, FullyScanned
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-13265:
|
||||
|
||||
============================================================================
|
||||
Feature: #13265 - Select first element of PageTree toolbar on initialization
|
||||
============================================================================
|
||||
|
||||
See :issue:`13265`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The first element of the PageTree toolbar is now selected when initialized. The possibility to
|
||||
close/hide a toolbar option has been removed. Either the page type or the filter/search is displayed.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The user always sees an open element of the PageTree toolbar.
|
||||
|
||||
.. index:: Backend, JavaScript, ext:backend
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-44297:
|
||||
|
||||
=====================================================================
|
||||
Feature: #44297 - Interval presets for cron command of scheduler task
|
||||
=====================================================================
|
||||
|
||||
See :issue:`44297`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To support administrators creating scheduler tasks, presets have been added to the frequency field.
|
||||
|
||||
The default presets are:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['frequencyOptions'] = [
|
||||
'0 9,15 * * 1-5' => 'LLL:EXT:scheduler/Resources/Private/Language/locallang.xlf:command.example1',
|
||||
'0 */2 * * *' => 'LLL:EXT:scheduler/Resources/Private/Language/locallang.xlf:command.example2',
|
||||
'*/20 * * * *' => 'LLL:EXT:scheduler/Resources/Private/Language/locallang.xlf:command.example3',
|
||||
'0 7 * * 2' => 'LLL:EXT:scheduler/Resources/Private/Language/locallang.xlf:command.example4',
|
||||
];
|
||||
|
||||
.. index:: Backend, ext:scheduler
|
||||
@@ -0,0 +1,29 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-57331:
|
||||
|
||||
=====================================================
|
||||
Feature: #57331 - Support dash in CurrencyViewHelper
|
||||
=====================================================
|
||||
|
||||
See :issue:`57331`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`useDash` option has been added to the CurrencyViewHelper.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
If the option :php:`useDash` is set and a value without decimals (see example) is given, the decimal place is rendered as a dash.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<!-- Renders "54321.-" -->
|
||||
<f:format.currency useDash="true">54321.00</f:format.currency>
|
||||
|
||||
.. index:: Fluid, ext:fluid
|
||||
@@ -0,0 +1,20 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-75806:
|
||||
|
||||
======================================
|
||||
Feature: #75806 - Add hreflang support
|
||||
======================================
|
||||
|
||||
See :issue:`75806`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
"hreflang" tags are now added automatically for multilanguage websites based on the one-tree principle.
|
||||
|
||||
The href is relative as long as the domain is the same. If the domain differs the href becomes absolute.
|
||||
The x-default href is the first supported language.
|
||||
The value of "hreflang" is the one set in the new sites module.
|
||||
|
||||
.. index:: Frontend, ext:seo
|
||||
@@ -0,0 +1,32 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-83476:
|
||||
|
||||
===================================================
|
||||
Feature: #83476 - Load merged JS files asynchronous
|
||||
===================================================
|
||||
|
||||
See :issue:`83476`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The async attribute is now assigned to the script tag of the concatenated JS files if all files have the async attribute enabled in TypoScript.
|
||||
|
||||
Example:
|
||||
--------
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.concatenateJs = 1
|
||||
|
||||
page = PAGE
|
||||
page.includeJSFooter {
|
||||
test = fileadmin/user_upload/test.js
|
||||
test.async = 1
|
||||
|
||||
test2 = fileadmin/user_upload/test2.js
|
||||
test2.async = 1
|
||||
}
|
||||
|
||||
.. index:: Frontend, TypoScript, ext:core
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-83749:
|
||||
|
||||
==================================================================
|
||||
Feature: #83749 - Filtering and Pagination in the redirects module
|
||||
==================================================================
|
||||
|
||||
See :issue:`83749`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The backend module "Redirects" received filtering and pagination to improve the overall usability.
|
||||
|
||||
The list of redirects can be filtered by:
|
||||
|
||||
- The source host
|
||||
- The source path
|
||||
- The destination (either the path or the Page ID)
|
||||
- The target status code
|
||||
|
||||
All filters are concatenated by a logical AND.
|
||||
|
||||
Pagination is set to 50 records per page.
|
||||
|
||||
Some minor usability improvements have been made as well:
|
||||
|
||||
- The source path crops after 100 characters to keep the table from expanding too much.
|
||||
- The destination column also shows the Page ID if the target is a page.
|
||||
- Redirects are sorted by source host (1st) and source path (2nd).
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
With these improvements it is now possible to easily manage a big amount of redirect records.
|
||||
|
||||
.. index:: Backend, ext:redirects
|
||||
@@ -0,0 +1,489 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84133:
|
||||
|
||||
====================================
|
||||
Feature: #84133 - Introduce variants
|
||||
====================================
|
||||
|
||||
See :issue:`84133`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
|
||||
Short Description
|
||||
-----------------
|
||||
|
||||
Variants allow you to change properties of a form element and can be activated based on conditions.
|
||||
|
||||
This makes it possible to manipulate form element properties, validator options, and finisher options based on conditions.
|
||||
|
||||
This allows you among other things:
|
||||
|
||||
* translate form element values depending on the frontend language
|
||||
* set and remove validators of one form element depending on the value of another form element
|
||||
* hide entire steps (form pages) depending on the value of a form element
|
||||
* set finisher options depending on the value of a form element
|
||||
* hiding a form element in certain finishers and on the summary step
|
||||
|
||||
This feature implements variants for frontend rendering and the ability to define variants in form definitions.
|
||||
The implementation to define variants graphically in the form editor is out of scope of this patchset.
|
||||
|
||||
|
||||
Basics
|
||||
------
|
||||
|
||||
Variants allow you to change properties of form elements, validators, and finishers and are activated by conditions.
|
||||
They are defined on the form element level either statically in form definitions or created programmatically through an API.
|
||||
|
||||
The variants defined within a form definition are automatically applied to the form based on their conditions at runtime.
|
||||
Programmatically, variants can be applied at any time.
|
||||
|
||||
Furthermore, the conditions of a variant can be evaluated programmatically at any time. However, some conditions are only
|
||||
available at runtime, for example a check for a form element value.
|
||||
|
||||
Custom conditions and operators can be added easily.
|
||||
|
||||
Only the form element properties listed in a variant are applied to the form element, all other properties are retained.
|
||||
An exception to this rule are finishers and validators. If finishers or validators are **not** defined within a variant, the
|
||||
original finishers and validators will be used. If at least one finisher or validator is defined in a variant, the
|
||||
originally defined finishers or validators are overwritten by the list of finishers and validators of the variant.
|
||||
|
||||
Variants defined within a form definition are **all** processed and applied in the order of their condition matches. This means
|
||||
if variant 1 sets the label of a form element to "X" and variant 2 sets the label to "Y", then variant 2 is applied, i.e. the label
|
||||
will be "Y".
|
||||
|
||||
|
||||
Variants definition
|
||||
-------------------
|
||||
|
||||
Variants are defined on the form element level. Check the following - incomplete - example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: ''
|
||||
variants:
|
||||
-
|
||||
identifier: variant-1
|
||||
condition: 'formValues["checkbox-1"] == 1'
|
||||
# If the condition matches, the label property of the form element is set to the value 'foo'
|
||||
label: foo
|
||||
|
||||
|
||||
As usual :yaml:`identifier` must be a unique name of the variant on the form element level.
|
||||
|
||||
Each variant has a single :yaml:`condition` which lets the variants' changes get applied if it matches.
|
||||
|
||||
If the :yaml:`condition` of a variant matches, the remaining properties are applied to the form element. In the
|
||||
aforementioned example the label of the form element :yaml:`text-1` is changed to ``foo`` if the checkbox
|
||||
:yaml:`checkbox-1` is checked.
|
||||
|
||||
The following properties can be overwritten by variants within the topmost element (:yaml:`Form`):
|
||||
|
||||
* :yaml:`label`
|
||||
* :yaml:`renderingOptions`
|
||||
* :yaml:`finishers`
|
||||
* :yaml:`rendererClassName`
|
||||
|
||||
The following properties can be overwritten by variants within all of the other form elements:
|
||||
|
||||
* :yaml:`enabled`
|
||||
* :yaml:`label`
|
||||
* :yaml:`defaultValue`
|
||||
* :yaml:`properties`
|
||||
* :yaml:`renderingOptions`
|
||||
* :yaml:`validators`
|
||||
|
||||
|
||||
Conditions
|
||||
----------
|
||||
|
||||
The form framework uses the Symfony component `expression language` to match the conditions. (@see https://symfony.com/doc/4.1/components/expression_language.html)
|
||||
An expression is a one-liner that returns a boolean value like :yaml:`applicationContext matches "#Production/Local#"`.
|
||||
Please read https://symfony.com/doc/4.1/components/expression_language/syntax.html to learn more about this topic.
|
||||
The form framework extends the expression language with some variables which can be used to access form values and environment settings.
|
||||
|
||||
|
||||
``formRuntime`` (object)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can access every public method from the :php:`\TYPO3\CMS\Form\Domain\Runtime\FormRuntime` (@see https://docs.typo3.org/typo3cms/extensions/form/ApiReference/Index.html#typo3-cms-form-domain-model-formruntime).
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`formRuntime.getIdentifier() == "test"`.
|
||||
|
||||
|
||||
``formValues`` (array)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`formValues` holds all of the submitted form element values. Each key within this array represents a form element identifier.
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`formValues["text-1"] == "yes"`.
|
||||
|
||||
|
||||
``stepIdentifier`` (string)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`stepIdentifier` is set to the :yaml:`identifier` of the current step.
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`stepIdentifier == "page-1"`.
|
||||
|
||||
|
||||
``stepType`` (string)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`stepType` is set to the :yaml:`type` of the current step.
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`stepType == "SummaryPage"`.
|
||||
|
||||
|
||||
``finisherIdentifier`` (string)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`finisherIdentifier` is set to the :yaml:`identifier` of the current finisher or an empty string (while no finishers are executed).
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`finisherIdentifier == "EmailToSender"`.
|
||||
|
||||
|
||||
``siteLanguage`` (object)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can access every public method from :php:`\TYPO3\CMS\Core\Site\Entity\SiteLanguage`.
|
||||
The most needed ones are probably:
|
||||
|
||||
* getLanguageId() / Aka sys_language_uid.
|
||||
* getLocale() / The language locale. Something like 'en_US.UTF-8'.
|
||||
* getTypo3Language() / The language key for XLF files. Something like 'de' or 'default'.
|
||||
* getTwoLetterIsoCode() / Returns the ISO-639-1 language ISO code. Something like 'de'.
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`siteLanguage("locale") == "de_DE"`.
|
||||
|
||||
|
||||
``applicationContext`` (string)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`applicationContext` is set to the application context (@see GeneralUtility::getApplicationContext()).
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`applicationContext matches "#Production/Local#"`.
|
||||
|
||||
|
||||
``contentObject`` (array)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:yaml:`contentObject` is set to the data of the current content object or to an empty array if no content object is available.
|
||||
|
||||
Example
|
||||
'''''''
|
||||
|
||||
:yaml:`contentObject["pid"] in [23, 42]`.
|
||||
|
||||
|
||||
Working with variants programmatically
|
||||
--------------------------------------
|
||||
|
||||
Create a variant with conditions through the PHP API:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
/** @var TYPO3\CMS\Form\Domain\Model\Renderable\RenderableVariantInterface $variant */
|
||||
$variant = $formElement->createVariant([
|
||||
'identifier' => 'variant-1',
|
||||
'condition' => 'formValues["checkbox-1"] == 1',
|
||||
'label' => 'foo',
|
||||
]);
|
||||
|
||||
Get all variants of a form element:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
/** @var TYPO3\CMS\Form\Domain\Model\Renderable\RenderableVariantInterface[] $variants */
|
||||
$variants = $formElement->getVariants();
|
||||
|
||||
Apply a variant to a form element regardless of its defined conditions:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$formElement->applyVariant($variant);
|
||||
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
Translate form element values depending on the frontend language:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
prototypeName: standard
|
||||
label: DE
|
||||
renderingOptions:
|
||||
submitButtonLabel: Abschicken
|
||||
variants:
|
||||
-
|
||||
identifier: language-variant-1
|
||||
condition: 'siteLanguage("locale") == "en_US.UTF-8"'
|
||||
label: EN
|
||||
renderingOptions:
|
||||
submitButtonLabel: Submit
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: DE
|
||||
renderingOptions:
|
||||
previousButtonLabel: 'zurück'
|
||||
nextButtonLabel: 'weiter'
|
||||
variants:
|
||||
-
|
||||
identifier: language-variant-1
|
||||
condition: 'siteLanguage("locale") == "en_US.UTF-8"'
|
||||
label: EN
|
||||
renderingOptions:
|
||||
previousButtonLabel: 'Previous step'
|
||||
nextButtonLabel: 'Next step'
|
||||
renderables:
|
||||
-
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: DE
|
||||
properties:
|
||||
fluidAdditionalAttributes:
|
||||
placeholder: Platzhalter
|
||||
variants:
|
||||
-
|
||||
identifier: language-variant-1
|
||||
condition: 'siteLanguage("locale") == "en_US.UTF-8"'
|
||||
label: EN
|
||||
properties:
|
||||
fluidAdditionalAttributes:
|
||||
placeholder: Placeholder
|
||||
|
||||
Set validators of one form element depending on the value of another form element:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
label: test
|
||||
prototypeName: standard
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: Step
|
||||
renderables:
|
||||
-
|
||||
defaultValue: ''
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: 'Email address'
|
||||
variants:
|
||||
-
|
||||
identifier: variant-1
|
||||
condition: 'formValues["checkbox-1"] == 1'
|
||||
properties:
|
||||
fluidAdditionalAttributes:
|
||||
required: 'required'
|
||||
validators:
|
||||
-
|
||||
identifier: NotEmpty
|
||||
-
|
||||
identifier: EmailAddress
|
||||
-
|
||||
type: Checkbox
|
||||
identifier: checkbox-1
|
||||
label: 'Subscribe to newsletter'
|
||||
|
||||
Hide entire steps depending on the value of a form element:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
prototypeName: standard
|
||||
label: Test
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: 'Page 1'
|
||||
renderables:
|
||||
-
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: 'Text 1'
|
||||
-
|
||||
type: Checkbox
|
||||
identifier: checkbox-1
|
||||
label: 'Skip page 2'
|
||||
variants:
|
||||
-
|
||||
identifier: hide-1
|
||||
condition: 'stepType == "SummaryPage"'
|
||||
renderingOptions:
|
||||
enabled: false
|
||||
-
|
||||
type: Page
|
||||
identifier: page-2
|
||||
label: 'Page 2'
|
||||
variants:
|
||||
-
|
||||
identifier: variant-1
|
||||
condition: 'formValues["checkbox-1"] == 1'
|
||||
renderingOptions:
|
||||
enabled: false
|
||||
renderables:
|
||||
-
|
||||
type: Text
|
||||
identifier: text-2
|
||||
label: 'Text 2'
|
||||
-
|
||||
type: SummaryPage
|
||||
identifier: summarypage-1
|
||||
label: 'Summary step'
|
||||
|
||||
Set finisher values depending on the application context:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
prototypeName: standard
|
||||
label: Test
|
||||
renderingOptions:
|
||||
submitButtonLabel: Submit
|
||||
finishers:
|
||||
-
|
||||
identifier: Confirmation
|
||||
options:
|
||||
message: 'Thank you'
|
||||
variants:
|
||||
-
|
||||
identifier: variant-1
|
||||
condition: 'applicationContext matches "#Production/Local#"'
|
||||
finishers:
|
||||
-
|
||||
identifier: Confirmation
|
||||
options:
|
||||
message: 'ouy knahT'
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: 'Page 1'
|
||||
renderingOptions:
|
||||
previousButtonLabel: 'Previous step'
|
||||
nextButtonLabel: 'Next step'
|
||||
|
||||
Hide a form element in certain finishers and on the summary step:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
prototypeName: standard
|
||||
label: Test
|
||||
finishers:
|
||||
-
|
||||
identifier: EmailToReceiver
|
||||
options:
|
||||
subject: Testmail
|
||||
recipientAddress: tritum@example.org
|
||||
recipientName: 'Test'
|
||||
senderAddress: tritum@example.org
|
||||
senderName: tritum@example.org
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: 'Page 1'
|
||||
renderables:
|
||||
-
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: 'Text 1'
|
||||
variants:
|
||||
-
|
||||
identifier: hide-1
|
||||
renderingOptions:
|
||||
enabled: false
|
||||
condition: 'stepType == "SummaryPage" || finisherIdentifier in ["EmailToSender", "EmailToReceiver"]'
|
||||
-
|
||||
type: Text
|
||||
identifier: text-2
|
||||
label: 'Text 2'
|
||||
-
|
||||
type: SummaryPage
|
||||
identifier: summarypage-1
|
||||
label: 'Summary step'
|
||||
|
||||
|
||||
Adding own expression language providers
|
||||
----------------------------------------
|
||||
|
||||
If you need to extend the expression language with custom functions you
|
||||
can extend it. For more information check the official `docs <https://symfony.com/doc/5.4/components/expression_language/extending.html#using-expression-providers>`__
|
||||
and the appropriate :ref:`TYPO3 implementation details<t3coreapi:symfony-expression-language>`.
|
||||
|
||||
Register the expression language provider in the extension file
|
||||
:file:`Configuration/ExpressionLanguage.php`. Make sure your expression
|
||||
language provider implements :php:`Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface`.
|
||||
|
||||
.. code-block:: php
|
||||
:caption: EXT:some_extension/Configuration/ExpressionLanguage.php
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
Vendor\MyExtension\ExpressionLanguage\CustomExpressionLanguageProvider::class,
|
||||
],
|
||||
];
|
||||
|
||||
Adding own expression language variables
|
||||
----------------------------------------
|
||||
|
||||
If you need to add custom variables to the expression language you can
|
||||
extend it. Then the variables are ready to be checked in conditions.
|
||||
|
||||
Register a custom expression language provider as written above and
|
||||
provide the expression language variables:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: EXT:some_extension/Classes/ExpressionLanguage/CustomExpressionLanguageProvider.php
|
||||
|
||||
class CustomExpressionLanguageProvider extends AbstractProvider
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->expressionLanguageVariables = [
|
||||
'variableA' => 'valueB',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.. index:: Frontend, ext:form
|
||||
@@ -0,0 +1,99 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84525:
|
||||
|
||||
=============================
|
||||
Feature: #84525 - XML Sitemap
|
||||
=============================
|
||||
|
||||
See :issue:`84525`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
It is now possible to generate XML sitemaps for SEO purposes without using 3rd-party plugins.
|
||||
When enabled, this new feature will create a sitemap index with one or more sitemaps in it.
|
||||
Out-of-the-box it will have one sitemap containing all the pages of the current site and
|
||||
language. Per site and per language you have the possibility to render a different sitemap.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
The XML sitemap is disabled by default. You can easily enable it by installing the system
|
||||
extension "seo" and including the static TypoScript template "XML Sitemap (seo)". It is also
|
||||
mandatory to have a site configuration for your rootpage(s).
|
||||
|
||||
How to access your XML sitemap
|
||||
------------------------------
|
||||
|
||||
Until it is possible to have a default route with the new URL handling mechanism, you can access
|
||||
the sitemaps by calling https://yourdomain.com/?type=1533906435 in your browser. You will first see the sitemap
|
||||
index. By default you will see one sitemap in the index. This is the sitemap for pages.
|
||||
|
||||
If you have multiple siteroots or multiple languages with different domains or language prefixes,
|
||||
you can just go to the domain that handles the siteroot / language. The sitemap will be based on
|
||||
the settings for that domain.
|
||||
|
||||
XmlSitemapDataProviders
|
||||
-----------------------
|
||||
|
||||
The rendering of sitemaps is based on XmlSitemapDataProviders. EXT:seo extension ships with two
|
||||
XmlSitemapDataProviders. The first one is the :php:`PagesXmlSitemapDataProvider`. This will generate a sitemap
|
||||
of pages based on the siteroot that is detected. You can configure if you have additional conditions
|
||||
for the selection of pages. You also have the possibility to exclude certain doktypes.
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
pages {
|
||||
config {
|
||||
excludedDoktypes = 137, 138
|
||||
additionalWhere = no_index = 0 AND canonical_link = ''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
If you also have an extension installed and want a sitemap of those records, you can use the
|
||||
:php:`RecordsXmlSitemapDataProvider`. You can add for example a sitemap for news records:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
<unique key> {
|
||||
provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
|
||||
config {
|
||||
table = news_table
|
||||
sortField = sorting
|
||||
lastModifiedField = tstamp
|
||||
additionalWhere = no_index = 0 AND canonical_link = ''
|
||||
pid = <page id('s) containing news records>
|
||||
url {
|
||||
pageId = <your detail page id>
|
||||
fieldToParameterMap {
|
||||
uid = tx_extension_pi1[news]
|
||||
}
|
||||
additionalGetParameters {
|
||||
tx_extension_pi1.controller = News
|
||||
tx_extension_pi1.action = detail
|
||||
}
|
||||
useCacheHash = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
You can add several sitemaps and those will be added to the sitemap index automatically.
|
||||
|
||||
.. index:: Frontend, ext:seo
|
||||
@@ -0,0 +1,30 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84584:
|
||||
|
||||
===========================================
|
||||
Feature: #84584 - Re-Design the admin panel
|
||||
===========================================
|
||||
|
||||
See :issue:`84584`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The admin panel got a complete overhaul regarding its design as well as the underlying code and extensibility.
|
||||
|
||||
UI wise the following changes were done
|
||||
|
||||
- Ajax is used to save configuration options, so only a single reload is triggered even if multiple settings changed.
|
||||
- Settings influencing page rendering are grouped together.
|
||||
- Most important info is available at a glance with possibilities to show extended information.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new admin panel provides a better look and feel as well as more convenient access to information and more flexible extensibility.
|
||||
For backwards compatibility enabling and disabling modules or options for editors is still possible via User TSConfig.
|
||||
|
||||
|
||||
.. index:: Frontend, PHP-API, ext:adminpanel
|
||||
@@ -0,0 +1,28 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84606:
|
||||
|
||||
==============================================
|
||||
Feature: #84606 - Add Log Module to AdminPanel
|
||||
==============================================
|
||||
|
||||
See :issue:`84606`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A log module has been added to the adminPanel to display log entries generated during the current request.
|
||||
|
||||
It displays all log entries generated via the logging framework during the request.
|
||||
|
||||
Display options include grouping by log level and component, additionally the log level
|
||||
which shall be logged has been made configurable.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A new AdminPanel sub module displaying log entries has been added in a new main module "Debug" which may
|
||||
be extended with further debug information.
|
||||
|
||||
.. index:: Frontend, ext:adminpanel
|
||||
@@ -0,0 +1,28 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84609:
|
||||
|
||||
==================================================
|
||||
Feature: #84609 - Add SQL Log Module to AdminPanel
|
||||
==================================================
|
||||
|
||||
See :issue:`84609`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new AdminPanel module has been introduced which shows SQL queries done to generate the current page.
|
||||
The module includes a short trace of the query so developers may locate where it was initiated as well as - in case
|
||||
it's a prepared statement - the placeholder values to enable checking variations of the query.
|
||||
|
||||
Logging of queries is done via the Doctrine SQL Logger capabilities and enabled whenever the AdminPanel is activated /
|
||||
open in the frontend. Logging is only done for the currently logged in backend user, this way the overall performance
|
||||
impact is negligible.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The AdminPanel has a new sub module "Query Information" in the "Debug" section.
|
||||
|
||||
.. index:: Backend, Database, Frontend, ext:adminpanel
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84704:
|
||||
|
||||
========================================================================
|
||||
Feature: #84704 - Open specific field when fixing links in Linkvalidator
|
||||
========================================================================
|
||||
|
||||
See :issue:`84704`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When fixing links in Linkvalidator, a click on the edit icon
|
||||
for the respective broken link opens an edit form.
|
||||
|
||||
The whole form opening provided too much information, where just the problematic field would have been enough.
|
||||
Now only the required field is open for editing, with an additional option to switch to the whole form if necessary.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Only affects Linkvalidator. Editing broken links should be easier now.
|
||||
|
||||
.. index:: Backend, ext:linkvalidator
|
||||
@@ -0,0 +1,67 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-84729:
|
||||
|
||||
=====================================
|
||||
Feature: #84729 - New TCA type "slug"
|
||||
=====================================
|
||||
|
||||
See :issue:`84729`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new TCA field type called `slug` has been added to TYPO3 Core. Its main purpose is to define parts of a URL
|
||||
path to generate and resolve URLs.
|
||||
|
||||
With a URL like `https://www.typo3.org/ch/community/values/core-values/` a URL slug is typically a part like
|
||||
`/community` or `/community/values/core-values`.
|
||||
|
||||
Within TYPO3, a slug is always part of the URL "path" - it does not contain scheme, host, HTTP verb, etc.
|
||||
|
||||
A slug is usually added to a TCA-based database table, containing some rules for evaluation and definition.
|
||||
|
||||
In contrast to concepts within RealURL of "URL segments", a slug is a segment of a URL, but it is not limited
|
||||
to be separated by slashes. Therefore, a slug can contain slashes.
|
||||
|
||||
In the future, it could be possible to generate slugs for any TCA table, but its's main usage will be for the "pages"
|
||||
TCA structure.
|
||||
|
||||
If a TCA table contains a field called "slug", it needs to be filled for every existing record. It can
|
||||
be shown and edited via regular Backend Forms, and is also evaluated during persistence via DataHandler.
|
||||
|
||||
The default behaviour of a slug is as follows:
|
||||
|
||||
* A slug only contains characters which are allowed within URLs. Spaces, commas and other special characters are converted to a fallback character.
|
||||
* A slug is always lower-cased.
|
||||
* A slug is unicode-aware.
|
||||
|
||||
The following options apply to the new TCA type::
|
||||
|
||||
'config' => [
|
||||
'type' => 'slug',
|
||||
'generatorOptions' => [
|
||||
'fields' => ['title', 'nav_title'],
|
||||
'fieldSeparator' => '/',
|
||||
'prefixParentPageSlug' => true
|
||||
],
|
||||
'fallbackCharacter' => '-',
|
||||
'eval' => 'uniqueInSite'
|
||||
]
|
||||
|
||||
The new `eval` option `uniqueInSite` has been introduced to evaluate if a record is unique in a page tree (specific to a
|
||||
language).
|
||||
|
||||
The new slug TCA type allows for two `eval` options `uniqueInSite` or `uniqueInPid` (useful for third-party
|
||||
records), and no other eval setting is checked for. It is possible to set both eval options, however it is
|
||||
recommended not to do so.
|
||||
|
||||
It is possible to build a default value from the rootline (very helpful for pages, or categorized slugs),
|
||||
but also to just generate a "speaking" segment from e.g. a news title.
|
||||
|
||||
Sanitation and Validation configuration options apply when persisting a record via DataHandler.
|
||||
|
||||
In the backend forms a validation happens by an AJAX call, which immediately checks any input and receives
|
||||
a new proposal in case the slug is already used.
|
||||
|
||||
.. index:: TCA, ext:core
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85080:
|
||||
|
||||
=====================================================================
|
||||
Feature: #85080 - Add property to disable form elements and finishers
|
||||
=====================================================================
|
||||
|
||||
See :issue:`85080`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new rendering option for form elements and finishers has been introduced named :yaml:`enabled`
|
||||
which takes a boolean value (:yaml:`true` or :yaml:`false`).
|
||||
|
||||
Setting :yaml:`enabled: true` for a form element renders it in the frontend and enables processing
|
||||
of its value including property mapping and validation. Setting :yaml:`enabled: false` instead
|
||||
disables the form element in the frontend.
|
||||
|
||||
Setting :yaml:`enabled: true` for a finisher executes it when submitting forms, setting :yaml:`enabled: false`
|
||||
skips the finisher instead.
|
||||
|
||||
By default :yaml:`enabled` is set to :yaml:`true`.
|
||||
|
||||
|
||||
Usage:
|
||||
======
|
||||
|
||||
All form elements and finishers except the root form element and the first form page can be enabled
|
||||
or disabled.
|
||||
|
||||
An example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: Form
|
||||
identifier: test
|
||||
label: test
|
||||
prototypeName: standard
|
||||
renderables:
|
||||
-
|
||||
type: Page
|
||||
identifier: page-1
|
||||
label: Step
|
||||
renderables:
|
||||
-
|
||||
type: Text
|
||||
identifier: text-1
|
||||
label: Text
|
||||
defaultValue: ''
|
||||
-
|
||||
type: Checkbox
|
||||
identifier: checkbox-1
|
||||
label: Checkbox
|
||||
renderingOptions:
|
||||
enabled: true
|
||||
-
|
||||
type: SummaryPage
|
||||
identifier: summarypage-1
|
||||
label: 'Summary step'
|
||||
renderingOptions:
|
||||
enabled: false
|
||||
finishers:
|
||||
-
|
||||
identifier: Confirmation
|
||||
options:
|
||||
message: thx
|
||||
-
|
||||
identifier: Confirmation
|
||||
options:
|
||||
message: 'thx again'
|
||||
renderingOptions:
|
||||
enabled: '{checkbox-1}'
|
||||
|
||||
In this example the form element :yaml:`checkbox-1` has been enabled explicitly but it is fine to
|
||||
leave this out since this is the default state (which can be seen in the element :yaml:`text-1`).
|
||||
|
||||
The :yaml:`summarypage-1` has been disabled completely, for example to temporarily remove it from
|
||||
the form.
|
||||
|
||||
The second :yaml:`Confirmation` finisher takes the fact into account that finishers can refer to
|
||||
form values. It is only enabled if the form element :yaml:`checkbox-1` has been activated by the
|
||||
user. Otherwise the finisher is skipped.
|
||||
|
||||
.. index:: Frontend, ext:form, NotScanned
|
||||
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85146:
|
||||
|
||||
==========================================================
|
||||
Feature: #85146 - Read environment variables in TypoScript
|
||||
==========================================================
|
||||
|
||||
See :issue:`85146`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
There is a new TypoScript value modifier `getEnv()`. The modifier checks if the variable given as its argument is set
|
||||
and reads the value if so, overriding any existing value. If the environment variable is not set, the variable given on
|
||||
the left-hand side of the expression is not changed.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Write a TypoScript statement like this to use environment values in your TypoScript:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
# Define default value
|
||||
myConstant = defaultValue
|
||||
# Enable overriding by environment variable
|
||||
myConstant := getEnv(TS_MYCONSTANT)
|
||||
|
||||
To have a value actually inserted, your PHP execution environment (webserver, PHP-FPM) needs to have these variables
|
||||
set, or you need a mechanism like dotenv to set them in your running TYPO3.
|
||||
|
||||
As it is a syntax feature you can use it in both constants and setup plus it gets cached, as opposed to the getText
|
||||
`getenv` feature.
|
||||
|
||||
.. index:: TypoScript, ext:core
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85164-1668719172:
|
||||
|
||||
==========================================================================
|
||||
Feature: #85164 - Available languages respects site configuration settings
|
||||
==========================================================================
|
||||
|
||||
See :issue:`85164`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When the backend shows the list of available languages - for instance in the page module
|
||||
language selector, when editing records and in the list module - the list of languages
|
||||
is now restricted to those defined by the site module.
|
||||
|
||||
If there are for instance five language records in the system, but a site configures
|
||||
only three of them for a page tree, only those three are considered when rendering
|
||||
language drop downs.
|
||||
|
||||
In case no site configuration has been created for a tree, all language records are shown. In
|
||||
this case the Page TSconfig options :typoscript:`mod.SHARED.defaultLanguageFlag`,
|
||||
:typoscript:`mod.SHARED.defaultLanguageLabel` and :typoscript:`mod.SHARED.disableLanguages` settings
|
||||
are also considered - those are obsolete if a site configuration exists.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,24 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85164:
|
||||
|
||||
======================================================
|
||||
Feature: #85164 - Enable Languages on a per-site basis
|
||||
======================================================
|
||||
|
||||
See :issue:`85164`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
When configuring a new site with multiple languages, is it now possible to not allow a language to be rendered
|
||||
in the TYPO3 Frontend. A new checkbox in the Site Handling module allows to add a language but not render it in
|
||||
Frontend to allow to prepare a new translation of a website before it is going live.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Going live with a new language is now as easy as turning on one checkbox.
|
||||
|
||||
.. index:: Frontend
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85236:
|
||||
|
||||
=======================================================================
|
||||
Feature: #85236 - Infix option to default log file names for FileWriter
|
||||
=======================================================================
|
||||
|
||||
See :issue:`85236`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new option :php:`logFileInfix` for the :php:`FileWriter` has been introduced.
|
||||
This allows to set a different name for the log file that is created by the :php:`FileWriter`
|
||||
without having to define a full path to the file.
|
||||
|
||||
The example configuration will use the log file named :file:`typo3\_special\_\<hash>.log`
|
||||
for any log message stemming from a class from the :php:`Vendor\ExtName` namespace.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['LOG']['Vendor']['ExtName']['writerConfiguration'] = [
|
||||
\TYPO3\CMS\Core\Log\LogLevel::INFO => [
|
||||
\TYPO3\CMS\Core\Log\Writer\FileWriter::class => [
|
||||
'logFileInfix' => 'special'
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The behaviour for existing :php:`FileWriter` configurations is not changed.
|
||||
|
||||
.. index:: LocalConfiguration, ext:core
|
||||
@@ -0,0 +1,31 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85247:
|
||||
|
||||
===========================================================
|
||||
Feature: #85247 - Trait to detect public deprecated methods
|
||||
===========================================================
|
||||
|
||||
See :issue:`85247`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The trait :php:`TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait` has been added
|
||||
to allow setting public methods to protected in a backwards compatible way.
|
||||
|
||||
The core uses this trait to set public methods that should be protected or private but
|
||||
are accessible code wise for historical reasons, while extensions using the methods do not
|
||||
break, but a PHP :php:`E_USER_DEPRECATED` error is triggered.
|
||||
|
||||
Classes using this trait have a property :php:`$deprecatedPublicMethods` that lists all
|
||||
methods covered by the trait.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Core classes using this trait trigger PHP :php:`E_USER_DEPRECATED` errors if an extension uses a method that
|
||||
has been made protected using the trait functionality.
|
||||
|
||||
.. index:: PHP-API
|
||||
@@ -0,0 +1,47 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85256:
|
||||
|
||||
=========================================
|
||||
Feature: #85256 - Install TYPO3 on SQLite
|
||||
=========================================
|
||||
|
||||
See :issue:`85256`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The TYPO3 web installer allows to install the system on `SQLite` DBMS.
|
||||
|
||||
This platform can be selected if :php:`pdo_sqlite` is available in PHP, which is
|
||||
often the case. SQLite can be a nice DBMS for relatively small instances and has
|
||||
the advantage that no further server side daemon is needed.
|
||||
|
||||
Administrators must keep an eye on security if using this platform:
|
||||
|
||||
In SQLite, a database is stored in a single file. In TYPO3, its default location
|
||||
is the var/sqlite path of the instance which is derived from environment variable
|
||||
:php:`TYPO3_PATH_APP`. If that variable is **not** set which is
|
||||
often the case in non-composer instances, **the database file will end up in the
|
||||
web server accessible document root directory :file:`typo3conf/`**!
|
||||
|
||||
To prevent guessing the database name and simply downloading it, the installer appends
|
||||
a random string to the database filename during installation. Additionally, the demo
|
||||
Apache :file:`_.htaccess` file prevents downloading :file:`.sqlite` files. The demo
|
||||
MicroSoft IIS web server configuration in file :file:`_web.config` comes with the same
|
||||
restriction.
|
||||
|
||||
Administrators installing TYPO3 using the SQLite platform should thus test if the
|
||||
database is downloadable from the web and take measures to prevent this by either
|
||||
configuring the web server to deny this file, or - better - by moving the config folder
|
||||
out of the web root, which is good practice anyway.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
TYPO3 can be installed to run on SQLite. If choosing this option, administrators
|
||||
must check the file is never delivered by the web server.
|
||||
|
||||
|
||||
.. index:: Database
|
||||
@@ -0,0 +1,22 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85313:
|
||||
|
||||
================================================
|
||||
Feature: #85313 - Add notes field to pages table
|
||||
================================================
|
||||
|
||||
See :issue:`85313`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A :php:`descriptionColumn` has been added to the pages table.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Users can add notes to each page record to inform other users of important facts or similar.
|
||||
|
||||
.. index:: Backend
|
||||
@@ -0,0 +1,25 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85355:
|
||||
|
||||
==========================================================
|
||||
Feature: #85355 - Support basic HTML5 fields in FormEngine
|
||||
==========================================================
|
||||
|
||||
See :issue:`85355`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The FormEngine renders now HTML5 specific field types and attributes.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Depending on the :php:`eval` configuration, the input types may be :html:`text`, :html:`number`
|
||||
or :html:`email.`
|
||||
If :php:`range` is configured, its values are stored in :html:`min` and :html:`max` attributes
|
||||
for number fields.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,127 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85389:
|
||||
|
||||
==========================================================
|
||||
Feature: #85389 - Context API for consistent data handling
|
||||
==========================================================
|
||||
|
||||
See :issue:`85389`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new Context API is introduced, which encapsulates various information for data retrieval (e.g. inside
|
||||
the database) and analysis of current permissions and caching information.
|
||||
|
||||
Previously, various information was distributed inside globally accessible objects (:php:`$TSFE` or :php:`$BE_USER`)
|
||||
like the current workspace ID or if a frontend or backend user is authenticated. Having a global object
|
||||
available was also dependent on the current request type (frontend or backend), instead of having
|
||||
one consistent place where all this data is located.
|
||||
|
||||
The context is currently instantiated at the very beginning of each TYPO3 entry point, keeping track
|
||||
of the current time (formally known as :php:`$GLOBALS['EXEC_TIME']`, if a user is logged in,
|
||||
and which workspace is currently accessed.
|
||||
|
||||
This information is separated in so-called "Aspects", each being responsible for a certain area:
|
||||
|
||||
- :php:`VisibilityAspect`, holding information if hidden/deleted records should be fetched from the database
|
||||
- :php:`DateTimeAspect`, keeping the current date as immutable datetime object
|
||||
- :php:`UserAspect`, holding frontend/backend user IDs, usernames and usergroups
|
||||
- :php:`WorkspaceAspect`, holding the currently visible workspace (default to "0"/ live)
|
||||
- :php:`LanguageAspect`, holding information about the currently used language/overlay/fallback strategy
|
||||
|
||||
Extensions can add their own Aspects as well, as they only need to implement the AspectInterface.
|
||||
|
||||
The Context object is used as a Singleton, available via :php:`GeneralUtility::makeInstance(Context::class)`.
|
||||
|
||||
Adding or replacing an aspect has implications on the whole further request. The recommended way on doing
|
||||
so is using a PSR-15 middleware. In the future (TYPO3 v10), the global context will have a "frozen" state
|
||||
after all PSR-15 middlewares are run through, to ensure a consistent object throughout all renderings
|
||||
within a backend.
|
||||
|
||||
However, if, for a certain retrieval part a custom context is needed, the necessary PHP classes, like
|
||||
:php:`PageRepository` can receive a custom Context object. For this to work, a new Context object can be
|
||||
created via :php:`new Context()` or cloned from the master context via
|
||||
:php:`$myContext = clone GeneralUtility::makeInstance(Context::class);` to keep all existing aspects and only to
|
||||
override a certain aspect locally.
|
||||
|
||||
A huge benefit when using the Context API is a strong decoupling of various architectural failures within
|
||||
TYPO3 Core, which are now "Context aware" and do not depend on a certain global object being available.
|
||||
|
||||
This will not only unify the code quality, but also introduce a better standard, where hard intermingling within
|
||||
Extbase, PageRepository and TypoScriptFrontendController can be found.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new Context API replaces lots of places known for a very long time:
|
||||
|
||||
* :php:`DateTimeAspect` replaces :php:`$GLOBALS['SIM_EXEC_TIME']` and :php:`$GLOBALS['EXEC_TIME']`
|
||||
* :php:`VisibilityAspect` replaces :php:`$GLOBALS['TSFE']->showHiddenPages` and :php:`$GLOBALS['TSFE']->showHiddenRecords`
|
||||
* :php:`WorkspaceAspect` replaces :php:`$GLOBALS['BE_USER']->workspace`
|
||||
* :php:`LanguageAspect` replaces various properties related to language Id, overlay and fallback logic, mostly within Frontend
|
||||
* :php:`UserAspect` replaces various calls and checks on :php:`$GLOBALS['BE_USER']` and :php:`$GLOBALS['TSFE']->fe_user` options when only some information is needed.
|
||||
|
||||
|
||||
TYPO3 Core comes with the following Aspects within the global context:
|
||||
|
||||
* date
|
||||
* frontend.user
|
||||
* backend.user
|
||||
* workspace
|
||||
* visibility
|
||||
* language
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
As for TYPO3 v9, the old properties can be used the same way as before, but will trigger a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
It is recommended to read data from the current global Context for custom extensions:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$context = GeneralUtility::makeInstance(Context::class);
|
||||
|
||||
// Reading the current data instead of $GLOBALS['EXEC_TIME']
|
||||
$currentTimestamp = $context->getPropertyFromAspect('date', 'timestamp');
|
||||
|
||||
// Checking if a user is logged in
|
||||
$userIsLoggedIn = $context->getPropertyFromAspect('frontend.user', 'isLoggedIn');
|
||||
|
||||
|
||||
If an aspect needs to be added, or a middleware replaces an aspect, the main context object can be altered.
|
||||
|
||||
However, if custom DB queries need to be made, it is strongly recommended to clone the context object:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Current global context
|
||||
$context = GeneralUtility::makeInstance(Context::class);
|
||||
$localContextWithoutFrontendUser = clone $context;
|
||||
$localContextWithoutFrontendUser->setAspect('frontend.user', GeneralUtility::makeInstance(UserAspect::class, null);
|
||||
|
||||
// Fetch a page which is publicly available, but not accessible when logged in
|
||||
$sysPage = GeneralUtility::makeInstance(PageRepository::class, $localContextWithoutFrontendUser);
|
||||
$pageRow = $sysPage->getPage($pageId);
|
||||
|
||||
|
||||
As a rule of thumb:
|
||||
|
||||
- If new code is written that depends on external factors for querying data, ensure that a context object
|
||||
can be handed in via e.g. the constructor.
|
||||
- If you are sure, that the consuming class is NOT altering the context object, the main context object can be used
|
||||
- If the consuming class, e.g. ContentObjectRenderer is altering the context object, it is recommended to hand in a clone
|
||||
of a context.
|
||||
|
||||
Further development
|
||||
===================
|
||||
|
||||
There will be additional aspects that will be introduced in TYPO3 Core. Also see PSR-15 middlewares shipped with TYPO3
|
||||
Frontend or Backend to see how aspects can be modified and set.
|
||||
|
||||
Aspects eventually will become the successor of Database Restrictions, as they contain all information
|
||||
necessary to restrict a database query.
|
||||
|
||||
.. index:: PHP-API, ext:core
|
||||
@@ -0,0 +1,42 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85410:
|
||||
|
||||
================================================
|
||||
Feature: #85410 - Allow TCA description property
|
||||
================================================
|
||||
|
||||
See :issue:`85410`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new `TCA` property `description` on column field level has been introduced.
|
||||
The value data type is a localized string, similar and on the same level as `label`.
|
||||
|
||||
The property can be used to display an additional help text between the field label and
|
||||
the user input when editing records. As an example, the core uses the description property
|
||||
in the site configuration module when editing a site on some properties like `identifier`.
|
||||
|
||||
The property is available on all common `TCA` types like `input` and `select` and so on.
|
||||
|
||||
Example::
|
||||
|
||||
'columns' => [
|
||||
'myField' => [
|
||||
'label' => 'My label',
|
||||
'description' => 'LLL:EXT:my_ext/Resources/Private/Language/locallang_tca.xlf:field.description',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The change is fully backwards compatible and can be used by integrators or administrators
|
||||
to hint editors for expected field input.
|
||||
|
||||
.. index:: Backend, FlexForm, TCA
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85550:
|
||||
|
||||
========================================================================
|
||||
Feature: #85550 - Introduce context for TypoScript data getText property
|
||||
========================================================================
|
||||
|
||||
See :issue:`85550`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new context API can now be accessed via the :typoscript:`getText` property in TypoScript.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
page.10 = TEXT
|
||||
page.10.data = context:workspace:id
|
||||
page.10.wrap = You are in workspace: |
|
||||
|
||||
Where as `context` is the keyword for accessing an aspect, the second part is the name of the aspect,
|
||||
and the third part is the property of the aspect.
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
data = context:[aspectName]:[propertyName]
|
||||
|
||||
If a property is an array, it is converted into a comma-separated list.
|
||||
|
||||
.. index:: TypoScript, ext:frontend
|
||||
@@ -0,0 +1,29 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85590:
|
||||
|
||||
==============================================================
|
||||
Feature: #85590 - Add hooks for DatabaseRecordList CSV actions
|
||||
==============================================================
|
||||
|
||||
See :issue:`85590`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
It is now possible to customize the csv output in the DatabaseRecordList with hooks.
|
||||
|
||||
The following two hooks were implemented:
|
||||
|
||||
- customizeCsvHeader for the header
|
||||
- customizeCsvRow for a single row
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][DatabaseRecordList::class]['customizeCsvRow'][] = \Vendor\ExtName\Hooks\CsvExport::class . '->customizeCsvRow';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][DatabaseRecordList::class]['customizeCsvHeader'][] = \Vendor\ExtName\Hooks\CsvExport::class . '->customizeCsvHeader';
|
||||
|
||||
.. index:: Backend, PHP-API
|
||||
@@ -0,0 +1,98 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85678:
|
||||
|
||||
===================================
|
||||
Feature: #85678 - Add PageTitle API
|
||||
===================================
|
||||
|
||||
See :issue:`85678`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
In order to keep setting the titles in control, a new API to set the page title has been introduced.
|
||||
|
||||
The API uses :php:`PageTitleProviders` to define the page title based on page record and the content on the page.
|
||||
|
||||
Based on the priority of the providers, the :php:`PageTitleProviderManager` will check the providers if a title
|
||||
is given by the provider. It will start with the highest priority PageTitleProviders and will end with the lowest
|
||||
in priority.
|
||||
|
||||
By default, the core ships three providers. The provider with the (by default) highest priority will be the
|
||||
:php:`AltPageTitleProvider`. This provider handles the (since TYPO3 v9 deprecated) property
|
||||
:php:`$GLOBALS['TSFE']->altPageTitle`. If an extension has set a value to this property, this provider will return
|
||||
that value.
|
||||
|
||||
If you have installed the system extension SEO, the second provider will be the :php:`SeoTitlePageTitleProvider`.
|
||||
When an editor has set a value for the SEO title in the page properties of the page, this provider will provide
|
||||
that title to the :php:`PageTitleProviderManager`. If you have not installed the SEO system extension, this fields
|
||||
and provider are not available.
|
||||
|
||||
The fallback provider with the lowest priority is the :php:`RecordPageTitleProvider`. When no other title is set
|
||||
by a provider, this provider will return the title of the page.
|
||||
|
||||
Besides the providers shipped by core, you can add own providers. An integrator can define the priority of the
|
||||
providers for his project.
|
||||
|
||||
Create your own PageTitleProvider
|
||||
=================================
|
||||
|
||||
Extension developers may want to have an own provider for page titles. For example if you have an extension with
|
||||
records and a detail view, the title of the page record will not be the correct title. To make sure to display
|
||||
the correct page title, you have to create your own :php:`PageTitleProvider`. It is quite easy to create one.
|
||||
|
||||
First of all create a PHP class in your extension that implements the :php:`PageTitleProviderInterface`. This will
|
||||
force you to have at least the :php:`getTitle()` method in your class. Within this method you can create your
|
||||
own logic to define the correct title.
|
||||
|
||||
Define priority of PageTitleProviders
|
||||
=====================================
|
||||
|
||||
The priority of the providers are set by the TypoScript property :typoscript:`config.pageTitleProviders`. This
|
||||
way an integrator is able to set the priorities for his project and can even have conditions in place.
|
||||
|
||||
By default, the core has the following setup:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.pageTitleProviders {
|
||||
altPageTitle {
|
||||
provider = TYPO3\CMS\Core\PageTitle\AltPageTitleProvider
|
||||
before = record
|
||||
}
|
||||
record {
|
||||
provider = TYPO3\CMS\Core\PageTitle\RecordPageTitleProvider
|
||||
}
|
||||
}
|
||||
|
||||
The ordering of the providers is based on the `before` and `after` parameters. If you want a provider to be handled
|
||||
before a specific other provider, just set that provider in the `before`, do the same with `after`.
|
||||
|
||||
If you have installed the system extension SEO, you will also get a third provider. The configuration will be:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.pageTitleProviders {
|
||||
altPageTitle {
|
||||
provider = TYPO3\CMS\Core\PageTitle\AltPageTitleProvider
|
||||
before = record
|
||||
}
|
||||
record {
|
||||
provider = TYPO3\CMS\Core\PageTitle\RecordPageTitleProvider
|
||||
}
|
||||
seo {
|
||||
provider = TYPO3\CMS\Seo\PageTitle\SeoTitlePageTitleProvider
|
||||
before = record
|
||||
after = altPageTitle
|
||||
}
|
||||
}
|
||||
|
||||
First the :php:`AltPageTitleProvider` will be checked, then the :php:`SeoTitlePageTitleProvider` (because it will be
|
||||
handled before record and after altPageTitle) and if both providers didn't provide a title, the
|
||||
:php:`RecordPageTitleProvider` will be checked.
|
||||
|
||||
You can override these settings within your own installation. You can add as many providers as you want. Be aware
|
||||
that if a provider returns a non-empty value, all provider with a lower priority won't be checked.
|
||||
|
||||
.. index:: Frontend, ext:core, ext:seo
|
||||
@@ -0,0 +1,24 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85691:
|
||||
|
||||
==============================================================
|
||||
Feature: #85691 - Show page path for references in record info
|
||||
==============================================================
|
||||
|
||||
See :issue:`85691`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The page path of record references is displayed into the table found in the record info.
|
||||
This field will display the full path to the record referencing the record in order to
|
||||
make it easier for an editor to follow to the target.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Record references via the record info are easier to find.
|
||||
|
||||
.. index:: Backend, ext:backend
|
||||
@@ -0,0 +1,33 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85698:
|
||||
|
||||
====================================================
|
||||
Feature: #85698 - New type=input eval saltedPassword
|
||||
====================================================
|
||||
|
||||
See :issue:`85698`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Setting passwords and storing them as salted passwords in the database
|
||||
is now supported by adding the eval option :php:`saltedPassword` to :php:`TCA` :php:`type=input`
|
||||
fields.
|
||||
|
||||
Fields having this eval set will get their value evaluated to a salted
|
||||
hash before they are stored by the :php:`DataHandler`.
|
||||
|
||||
Note the salt configuration for backend (BE) is considered when using this eval
|
||||
on tables that is not the :php:`fe_users` table.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The new eval substitutes custom code that has been done within the
|
||||
salted passwords extension before. It has no impact on instances
|
||||
being upgraded.
|
||||
|
||||
|
||||
.. index:: Backend, TCA
|
||||
@@ -0,0 +1,43 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85719:
|
||||
|
||||
======================================================
|
||||
Feature: #85719 - Allow sites without scheme or domain
|
||||
======================================================
|
||||
|
||||
See :issue:`85719`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Since the inception of site handling, the definition of a site base - the URL prefix - was limited to
|
||||
only allow a full URI with scheme (HTTP/HTTPS) and domain. This didn't allow to run TYPO3 on multiple
|
||||
domains, basically limiting the URL-resolving ("Site Routing") compared to previous URL handling
|
||||
solutions in the past.
|
||||
|
||||
A new site routing based on symfony/routing component allows to have a flexible routing based on
|
||||
specific schemes.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
It is now possible to set a site base prefix to just "/site1" and "/site2" or "www.mydomain.com" instead
|
||||
of entering a full URI.
|
||||
|
||||
This allows to have a Site base e.g. `www.mydomain.com` to be detected with http and https protocols,
|
||||
although it is recommended to do a HTTP to HTTPS redirect either on the webserver level, via a
|
||||
.htaccess rewrite rule, or by adding a redirect in TYPO3.
|
||||
|
||||
Please also note that this improved flexibility will introduce side-effects when having multiple sites
|
||||
with mixed configuration settings as Site base:
|
||||
|
||||
- Site 1: `/mysite/`
|
||||
- Site 2: `www.mydomain.com`
|
||||
|
||||
will be unspecific when detecting a URL like `www.mydomain/mysite/` and can lead to side-effects.
|
||||
|
||||
In this case, it is necessary by the Site Administrator to define unique Site base prefixes.
|
||||
|
||||
.. index:: Frontend
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85828:
|
||||
|
||||
=========================================================================
|
||||
Feature: #85828 - Move symfony expression language handling into EXT:core
|
||||
=========================================================================
|
||||
|
||||
See :issue:`85828`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The symfony expression language handling has been moved out of EXT:form into EXT:core.
|
||||
Thus, it is available to be used throughout the core and also for extension developers.
|
||||
|
||||
To use the expression language, a provider definition is required which implements the
|
||||
:php:`\TYPO3\CMS\Core\ExpressionLanguage\ProviderInterface`.
|
||||
The core comes with a :php:`\TYPO3\CMS\Core\ExpressionLanguage\DefaultProvider` class which can be used directly.
|
||||
For a custom implementation the :php:`\TYPO3\CMS\Core\ExpressionLanguage\AbstractProvider` class can be extended.
|
||||
|
||||
The provider can provide additional variables and expression functions to extend the expression language.
|
||||
For a custom implementation check out the :php:`\TYPO3\CMS\Form\Domain\Condition\ConditionProvider` class.
|
||||
|
||||
An example with the DefaultProvider:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$resolver = GeneralUtility::makeInstance(
|
||||
Resolver::class,
|
||||
'default',
|
||||
[
|
||||
'foo' => 1,
|
||||
'bar' => 2,
|
||||
]
|
||||
);
|
||||
$resolver->evaluate('1 < 2'); // result is true
|
||||
$resolver->evaluate('foo < bar'); // result is true
|
||||
$resolver->evaluate('bar < foo'); // result is false
|
||||
|
||||
|
||||
An example with a custom Provider:
|
||||
|
||||
First you have to configure a provider, create a file in your extension with the path and name :file:`EXT:my_ext/Configuration/ExpressionLanguage.php`:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
return [
|
||||
'my-context-identifier' => [
|
||||
\TYPO3\CMS\MyExt\ExpressionLanguage\MyCustomProvider::class,
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
Next implement your provider class :php:`\TYPO3\CMS\MyExt\ExpressionLanguage\MyCustomProvider::class`
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
class MyCustomProvider extends \TYPO3\CMS\Core\ExpressionLanguage\AbstractProvider
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->expressionLanguageVariables = [
|
||||
'foo' => 1,
|
||||
'bar' => 2,
|
||||
];
|
||||
$this->expressionLanguageProviders = [
|
||||
// We use the existing Typo3ConditionsFunctions...
|
||||
Typo3ConditionFunctionsProvider::class,
|
||||
// ... and our custom function provider
|
||||
MyCustomFunctionsProvider::class
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Next implement your provider class :php:`\TYPO3\CMS\MyExt\ExpressionLanguage\MyCustomFunctionProvider::class`
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
class MyCustomFunctionProvider implements ExpressionFunctionProviderInterface
|
||||
{
|
||||
public function getFunctions()
|
||||
{
|
||||
return [
|
||||
$this->getFooFunction(),
|
||||
];
|
||||
}
|
||||
|
||||
protected function getFooFunction(): ExpressionFunction
|
||||
{
|
||||
return new ExpressionFunction('compatVersion', function ($str) {
|
||||
// Not implemented, we only use the evaluator
|
||||
}, function ($arguments, $str) {
|
||||
return $str === 'foo';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
And now we use it:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$resolver = GeneralUtility::makeInstance(
|
||||
Resolver::class,
|
||||
'my-context-identifier',
|
||||
[
|
||||
'baz' => 3,
|
||||
]
|
||||
);
|
||||
$resolver->evaluate('1 < 2'); // result is true
|
||||
$resolver->evaluate('foo < bar'); // result is true
|
||||
$resolver->evaluate('bar < baz'); // result is true
|
||||
$resolver->evaluate('bar < foo'); // result is false
|
||||
$resolver->evaluate('foo("foo")'); // result is true
|
||||
$resolver->evaluate('foo("bar")'); // result is false
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
The expression language can now be used in other scopes and has no dependency to EXT:form.
|
||||
|
||||
.. index:: Backend, Frontend, PHP-API, ext:core
|
||||
+256
@@ -0,0 +1,256 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85829:
|
||||
|
||||
=================================================================================
|
||||
Feature: #85829 - Implement symfony expression language for TypoScript conditions
|
||||
=================================================================================
|
||||
|
||||
See :issue:`85829`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The `symfony expression language <https://symfony.com/doc/current/components/expression_language.html>`__
|
||||
has been implemented for TypoScript conditions in both frontend and backend.
|
||||
The existing conditions are available as variables and/or functions. Please check the following tables in detail.
|
||||
|
||||
General Usage
|
||||
-------------
|
||||
|
||||
To learn the full power of the symfony expression language please check the `documentation for the common expression syntax <https://symfony.com/doc/current/components/expression_language/syntax.html>`__.
|
||||
Here are some examples to understand the power of the expression language:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
[page["uid"] in 18..45]
|
||||
# This condition matches if current page uid is between 18 and 45
|
||||
[END]
|
||||
|
||||
[frontend.user.userId in [1,5,7]]
|
||||
# This condition matches if current logged in frontend user has the uid 1, 5 or 7
|
||||
[END]
|
||||
|
||||
[not ("foo" matches "/bar/")]
|
||||
# This condition does match if "foo" **not** matches the regExp: `/bar/`
|
||||
[END]
|
||||
|
||||
[applicationContext == "Production" && userId == 15]
|
||||
# This condition matches if application context is "Production" AND logged in user has the uid 15
|
||||
# Note that the old syntax with two blocks combined with && is deprecated
|
||||
# and will not work in v10:
|
||||
# [applicationContext == "Production"] && [userId == 15]
|
||||
[END]
|
||||
|
||||
[request.getNormalizedParams().getHttpHost() == 'typo3.org']
|
||||
# This condition matches if current hostname is typo3.org
|
||||
[END]
|
||||
|
||||
[like(request.getNormalizedParams().getHttpHost(), "*.devbox.local")]
|
||||
# This condition matches if current hostname is any subdomain of devbox.local
|
||||
[END]
|
||||
|
||||
[request.getNormalizedParams().isHttps() == false]
|
||||
# This condition matches if current request is **not** https
|
||||
[END]
|
||||
|
||||
[request.getPageArguments().get('foo_id') > 0]
|
||||
# This condition matches if the GET parameter foo_id is greater than 0.
|
||||
# getPageArguments() contains resolved route parts from enhancers which
|
||||
# request.getQueryParams() does not contain.
|
||||
[END]
|
||||
|
||||
[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
|
||||
# This condition matches if current query parameters have tx_news_pi[news] set to a value greater than zero
|
||||
[END]
|
||||
|
||||
|
||||
Variables
|
||||
---------
|
||||
|
||||
The following variables are available. The values are context related.
|
||||
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| Variable | Type | Description |
|
||||
+=====================+============+==============================================================================+
|
||||
| applicationContext | String | current application context as string |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| page | Array | current page record as array |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| {$foo.bar} | Constant | Any TypoScript constant is available like before. |
|
||||
| | | Depending on the type of the constant you have to use |
|
||||
| | | different conditions, see examples below: |
|
||||
| | | |
|
||||
| | | * if constant is an integer: `[{$foo.bar} == 4711]` |
|
||||
| | | * if constant is a string put constant in quotes: `["{$foo.bar}" == "4711"]` |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| tree | Object | object with tree information |
|
||||
| | | |
|
||||
| .level | Integer | current tree level |
|
||||
| | | |
|
||||
| .rootLine | Array | array of arrays with uid and pid |
|
||||
| | | |
|
||||
| .rootLineIds | Array | an array with UIDs of the root line |
|
||||
| | | |
|
||||
| .rootLineParentIds | Array | an array with parent UIDs of the root line |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| backend | Object | object with backend information (available in BE only) |
|
||||
| | | |
|
||||
| .user | Object | object with current backend user information |
|
||||
| | | |
|
||||
| .user.isAdmin | Boolean | true if current user is admin |
|
||||
| | | |
|
||||
| .user.isLoggedIn | Boolean | true if current user is logged in |
|
||||
| | | |
|
||||
| .user.userId | Integer | UID of current user |
|
||||
| | | |
|
||||
| .user.userGroupList | String | comma list of group UIDs |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| frontend | Object | object with frontend information (available in FE only) |
|
||||
| | | |
|
||||
| .user | Object | object with current frontend user information |
|
||||
| | | |
|
||||
| .user.isLoggedIn | Boolean | true if current user is logged in |
|
||||
| | | |
|
||||
| .user.userId | Integer | UID of current user |
|
||||
| | | |
|
||||
| .user.userGroupList | String | comma list of group UIDs |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| workspace | Object | object with workspace information |
|
||||
| | | |
|
||||
| .workspaceId | Integer | id of current workspace |
|
||||
| | | |
|
||||
| .isLive | Boolean | true if current workspace is live |
|
||||
| | | |
|
||||
| .isOffline | Boolean | true if current workspace is offline |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
| typo3 | Object | object with TYPO3 related information |
|
||||
| | | |
|
||||
| .version | String | TYPO3_version (e.g. 9.4.0-dev) |
|
||||
| | | |
|
||||
| .branch | String | TYPO3_branch (e.g. 9.4) |
|
||||
| | | |
|
||||
| .devIpMask | String | :php:`$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']` |
|
||||
+---------------------+------------+------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Functions
|
||||
---------
|
||||
|
||||
Functions take over the logic of the old conditions which do more than a simple comparison check.
|
||||
The following functions are available in **any** context:
|
||||
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| Function | Parameter | Description |
|
||||
+========================+=======================+=========================================================================+
|
||||
| request | Custom Object | This object provides 6 methods |
|
||||
| | | |
|
||||
| .getQueryParams() | | `[request.getQueryParams()['foo'] == 1]` |
|
||||
| | | |
|
||||
| .getParsedBody() | | `[request.getParsedBody()['foo'] == 1]` |
|
||||
| | | |
|
||||
| .getHeaders() | | `[request.getHeaders()['Accept'] == 'json']` |
|
||||
| | | |
|
||||
| .getCookieParams() | | `[request.getCookieParams()['foo'] == 1]` |
|
||||
| | | |
|
||||
| .getNormalizedParams() | | `[request.getNormalizedParams().isHttps()]` |
|
||||
| | | |
|
||||
| .getPageArguments() | | `[request.getPageArguments().get('foo_id') > 0]` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| date | String | Get current date in given format. |
|
||||
| | | Examples: |
|
||||
| | | |
|
||||
| | | * true if day of current month is 7: `[date("j") == 7]` |
|
||||
| | | * true if day of current week is 7: `[date("w") == 7]` |
|
||||
| | | * true if day of current year is 7: `[date("z") == 7]` |
|
||||
| | | * true if current hour is 7: `[date("G") == 7]` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| like | String | This function has two parameters: |
|
||||
| | | the first parameter is the string to search in |
|
||||
| | | the second parameter is the search string |
|
||||
| | | Example: `[like("foobarbaz", "*bar*")]` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| traverse | Array and String | This function has two parameters: |
|
||||
| | | - first parameter is the array to traverse |
|
||||
| | | - second parameter is the path to traverse |
|
||||
| | | Syntax: <array-key>[/<array-key>]* |
|
||||
| | | Example: `[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ip | String | Value or Constraint, Wildcard or RegExp possible |
|
||||
| | | special value: devIP (match the devIPMask) |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| compatVersion | String | version constraint, e.g. `9.4` or `9.4.0` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| loginUser | String | value or constraint, wildcard or RegExp possible |
|
||||
| | | Examples: |
|
||||
| | | |
|
||||
| | | * `[loginUser('*')]` // any logged in user |
|
||||
| | | * `[loginUser(1)]` // user with uid 1 |
|
||||
| | | * `[loginUser('1,3,5')]` // user 1, 3 or 5 |
|
||||
| | | * `[loginUser('*') == false]` // not logged in |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| getTSFE | Object | TypoScriptFrontendController (:php:`$GLOBALS['TSFE']`) |
|
||||
| | | |
|
||||
| | | Conditions based on `getTSFE()` used in a context where |
|
||||
| | | TSFE is not available will always evaluate to false. |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| getenv | String | PHP function: :php:`getenv()` |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| usergroup | String | value or constraint, wildcard or RegExp possible |
|
||||
+------------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
|
||||
|
||||
The following functions are only available in **frontend** context:
|
||||
|
||||
+--------------------+------------+-----------------------------------------------------------------+
|
||||
| Function | Parameter | Description |
|
||||
+====================+============+=================================================================+
|
||||
| session | String | Get value from session |
|
||||
| | | |
|
||||
| | | Example, matches if session value = 1234567 |
|
||||
| | | `[session("session:foo|bar") == 1234567]` |
|
||||
+--------------------+------------+-----------------------------------------------------------------+
|
||||
| site | String | get value from site configuration, or null if |
|
||||
| | | no site was found or property does not exist |
|
||||
| | | |
|
||||
| | | Example, matches if site identifier = foo |
|
||||
| | | `[site("identifier") == "foo"]` |
|
||||
| | | |
|
||||
| | | Example, matches if site `base = http://localhost` |
|
||||
| | | `[site("base") == "http://localhost"]` |
|
||||
+--------------------+------------+-----------------------------------------------------------------+
|
||||
| siteLanguage | String | get value from siteLanguage configuration, or |
|
||||
| | | null if no site was found or property does not exist |
|
||||
| | | |
|
||||
| | | Example, match if siteLanguage locale = foo |
|
||||
| | | `[siteLanguage("locale") == "de_CH"]` |
|
||||
| | | |
|
||||
| | | Example, match if siteLanguage title = Italy |
|
||||
| | | `[siteLanguage("title") == "Italy"]` |
|
||||
+--------------------+------------+-----------------------------------------------------------------+
|
||||
|
||||
|
||||
Extending the expression language with own functions (like old userFunc)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
It is possible to extend the expression language with own functions like before userFunc in the old conditions.
|
||||
An example could be :php:`TYPO3\CMS\Core\ExpressionLanguage\FunctionsProvider\TypoScriptConditionFunctionsProvider` which implements
|
||||
the most core functions.
|
||||
|
||||
Please read .. _the introduction: https://docs.typo3.org/typo3cms/extensions/core/Changelog/9.4/Feature-85828-MoveSymfonyExpressionLanguageHandlingIntoEXTcore.html first.
|
||||
|
||||
Add new methods by implementing own providers which implement the :php:`ExpressionFunctionProviderInterface` and
|
||||
register the provider for the key `typoscript` in your own :file:`Configuration/ExpressionLanguage.php` file:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
return [
|
||||
'typoscript' => [
|
||||
\TYPO3\CMS\MyExt\ExpressionLanguage\MyCustomProvider::class,
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
The code above will extend the TypoScript condition configuration with your own provider, which provide your own functions.
|
||||
|
||||
.. index:: Backend, Frontend, TypoScript, ext:core
|
||||
@@ -0,0 +1,24 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-85894:
|
||||
|
||||
=========================================================
|
||||
Feature: #85894 - Feature toggles in Admin Tools Settings
|
||||
=========================================================
|
||||
|
||||
See :issue:`85894`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Feature toggles registered in :file:`DefaultConfiguration.php` and documented
|
||||
in :file:`DefaultConfigurationDescription.yaml` can now be toggled using
|
||||
the interface Admin Tools -> Settings -> Feature toggles.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Toggling core features is possible using the backend.
|
||||
|
||||
.. index:: Backend, LocalConfiguration, ext:install
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user