TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-107931-1775647667:
|
||||
|
||||
============================================================
|
||||
Deprecation: #107931 - Lowlevel DatabaseIntegrityCheck class
|
||||
============================================================
|
||||
|
||||
See :issue:`107931`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The class :php:`\TYPO3\CMS\Lowlevel\Integrity\DatabaseIntegrityCheck` has been
|
||||
deprecated and will be removed in TYPO3 v15.0.
|
||||
|
||||
The class is no longer used internally by TYPO3 and should not be relied upon
|
||||
by extensions.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using :php-short:`\TYPO3\CMS\Lowlevel\Integrity\DatabaseIntegrityCheck` will trigger
|
||||
a PHP :php:`E_USER_DEPRECATED` error. The class will be removed in TYPO3 v15.0.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions that use
|
||||
:php-short:`\TYPO3\CMS\Lowlevel\Integrity\DatabaseIntegrityCheck` directly.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Extensions that rely on this class should implement the necessary functionality
|
||||
themselves.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:lowlevel
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109107-1772108218:
|
||||
|
||||
=============================================
|
||||
Deprecation: #109107 - CacheAction key "href"
|
||||
=============================================
|
||||
|
||||
See :issue:`109107`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :php:`CacheAction` array key :php:`href` used in cache action definitions
|
||||
provided by the
|
||||
:php:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent` has been
|
||||
deprecated in favor of :php:`endpoint`. The new key name better reflects the purpose of
|
||||
this field, which is used as an AJAX endpoint URL. The value must be a
|
||||
:php:`string`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Cache action arrays that contain an :php:`href` rather than an :php:`endpoint` key
|
||||
will trigger a PHP :php:`E_USER_DEPRECATED` notice.
|
||||
:php:`TYPO3\CMS\Backend\Backend\ToolbarItems\ClearCacheToolbarItem` will automatically
|
||||
migrate :php:`href` to :php:`endpoint` at runtime to maintain backward compatibility.
|
||||
|
||||
Support for the :php:`href` key will be removed in TYPO3 v15.0.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
Any installation that has extensions which register custom cache actions with
|
||||
:php-short:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent` and
|
||||
provide an action URL in the :php:`href` array key.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace the :php:`href` key with :php:`endpoint` in any cache action array
|
||||
returned from a :php-short:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent` listener.
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
$event->addCacheAction([
|
||||
'id' => 'my_custom_cache',
|
||||
- 'href' => $uriBuilder->buildUriFromRoute('ajax_my_cache_clear'),
|
||||
+ 'endpoint' => (string)$uriBuilder->buildUriFromRoute('ajax_my_cache_clear'),
|
||||
'iconIdentifier' => 'actions-system-cache-clear',
|
||||
'title' => 'Clear my cache',
|
||||
'description' => 'Optional description',
|
||||
'severity' => 'notice',
|
||||
]);
|
||||
|
||||
.. index:: Backend, PHP-API, ext:backend, NotScanned
|
||||
@@ -0,0 +1,127 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109438-1774951763:
|
||||
|
||||
====================================================
|
||||
Deprecation: #109438 - ext_tables.php in extensions
|
||||
====================================================
|
||||
|
||||
See :issue:`109438`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Extensions that still ship an :file:`ext_tables.php` file will now trigger
|
||||
a PHP :php:`E_USER_DEPRECATED` error when the file is loaded during
|
||||
a non-cached request or cache warm-up.
|
||||
|
||||
The :file:`ext_tables.php` file was historically used to register backend
|
||||
modules, page doktypes, user settings, and other runtime configuration.
|
||||
All of these use cases now have dedicated alternatives in modern TYPO3:
|
||||
|
||||
* Backend modules: :file:`Configuration/Backend/Modules.php`
|
||||
* Backend routes: :file:`Configuration/Backend/Routes.php`
|
||||
* User settings: :file:`Configuration/TCA/Overrides/be_users.php`
|
||||
(see :issue:`108843`)
|
||||
* Page doktype allowed record types: :file:`Configuration/TCA/Overrides/pages.php`
|
||||
(see :issue:`108557`)
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A PHP :php:`E_USER_DEPRECATED` error is triggered for every third-party
|
||||
extension that still provides an :file:`ext_tables.php` file whenever
|
||||
:file:`ext_tables.php` files are loaded without caching, for example during
|
||||
cache warm-up or in a development context.
|
||||
|
||||
Support for :file:`ext_tables.php` will be removed in TYPO3 v15.0.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
All installations with third-party extensions that still ship an
|
||||
:file:`ext_tables.php` file.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Move all registration from :file:`ext_tables.php` to the appropriate
|
||||
configuration files.
|
||||
|
||||
User settings
|
||||
-------------
|
||||
|
||||
User settings previously registered via
|
||||
:php:`TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToUserSettings()` in
|
||||
:file:`ext_tables.php` should now be registered via
|
||||
:php:`TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserSetting()` in
|
||||
:file:`Configuration/TCA/Overrides/be_users.php`.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: ext_tables.php
|
||||
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
|
||||
$GLOBALS['TYPO3_USER_SETTINGS']['columns']['myCustomSetting'] = [
|
||||
'type' => 'check',
|
||||
'label' => 'LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:myCustomSetting',
|
||||
];
|
||||
ExtensionManagementUtility::addFieldsToUserSettings(
|
||||
'myCustomSetting',
|
||||
'after:emailMeAtLogin'
|
||||
);
|
||||
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: Configuration/TCA/Overrides/be_users.php
|
||||
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
|
||||
ExtensionManagementUtility::addUserSetting(
|
||||
'myCustomSetting',
|
||||
[
|
||||
'label' => 'LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:myCustomSetting',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
'renderType' => 'checkboxToggle',
|
||||
],
|
||||
],
|
||||
'after:emailMeAtLogin'
|
||||
);
|
||||
|
||||
Page doktype allowed record types
|
||||
----------------------------------
|
||||
|
||||
Page doktypes previously registered via :php:`PageDoktypeRegistry->add()` in
|
||||
:file:`ext_tables.php` should now use the TCA option
|
||||
:php:`allowedRecordTypes` in :file:`Configuration/TCA/Overrides/pages.php`.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: ext_tables.php
|
||||
|
||||
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
|
||||
\TYPO3\CMS\Core\DataHandling\PageDoktypeRegistry::class
|
||||
)->add(116, [
|
||||
'allowedTables' => ['tt_content', 'my_custom_record'],
|
||||
]);
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: Configuration/TCA/Overrides/pages.php
|
||||
|
||||
$GLOBALS['TCA']['pages']['types']['116']['allowedRecordTypes'] = [
|
||||
'tt_content',
|
||||
'my_custom_record',
|
||||
];
|
||||
|
||||
Once all registrations have been moved, the :file:`ext_tables.php` file
|
||||
can be removed from the extension.
|
||||
|
||||
.. index:: PHP-API, NotScanned, ext:core
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109517-1744105201:
|
||||
|
||||
==========================================================================================
|
||||
Deprecation: #109517 - PSR-14 event :php:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`
|
||||
==========================================================================================
|
||||
|
||||
See :issue:`109517`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PSR-14 event
|
||||
that is dispatched in the :guilabel:`User Settings`
|
||||
panel to allow injection of custom JavaScript methods has
|
||||
been deprecated:
|
||||
|
||||
* :php:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`
|
||||
|
||||
With the integration of `EXT:setup` into `EXT:backend` (see
|
||||
:ref:`important-109517-1744105200`) this event is now superseded
|
||||
by:
|
||||
|
||||
* :php:`TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent`
|
||||
|
||||
For better dual version compatibility, no deprecation is emitted
|
||||
when using the legacy event location.
|
||||
|
||||
Migration to the new event can be done by just replacing its
|
||||
new name. For details, see :ref:`important-109517-1744105200-AddJavaScriptModulesEvent`.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Using the old event will work as before in TYPO3 v14 but will
|
||||
be removed with TYPO3 v15.0.
|
||||
|
||||
To keep listeners working, the new event
|
||||
:php-short:`TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent`
|
||||
must be utilized instead.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
Instances and extensions that register a PSR-14 listener on
|
||||
:php-short:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
See :ref:`important-109517-1744105200-AddJavaScriptModulesEvent`.
|
||||
The new event name and class namespace can be used with no further
|
||||
functional changes.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:backend
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109519-1775665165:
|
||||
|
||||
=============================================================
|
||||
Deprecation: #109519 - BackendUtility item list label methods
|
||||
=============================================================
|
||||
|
||||
See :issue:`109519`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The following methods in
|
||||
:php:`\TYPO3\CMS\Backend\Utility\BackendUtility` have been deprecated:
|
||||
|
||||
- :php:`getLabelFromItemlist()`
|
||||
- :php:`getLabelFromItemListMerged()`
|
||||
- :php:`getLabelsFromItemsList()`
|
||||
|
||||
Their logic has been moved to the new
|
||||
:php:`\TYPO3\CMS\Core\Schema\SchemaLabelResolver` class, which
|
||||
provides proper dependency injection support.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling these methods will trigger a PHP :php:`E_USER_DEPRECATED`
|
||||
error. The methods will be removed in TYPO3 v15.0.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
TYPO3 installations with extensions that call
|
||||
:php:`BackendUtility::getLabelFromItemlist()`,
|
||||
:php:`BackendUtility::getLabelFromItemListMerged()` or
|
||||
:php:`BackendUtility::getLabelsFromItemsList()`.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace calls to :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::getLabelFromItemlist()`
|
||||
with :php:`\TYPO3\CMS\Core\Schema\SchemaLabelResolver->getLabelForFieldValue()`.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
|
||||
$label = BackendUtility::getLabelFromItemlist(
|
||||
$table, $column, $value, $row
|
||||
);
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Schema\SchemaLabelResolver;
|
||||
|
||||
$label = $this->schemaLabelResolver->getLabelForFieldValue(
|
||||
$table, $column, $value, $row
|
||||
);
|
||||
|
||||
Replace calls to :php:`\TYPO3\CMS\Backend\Utility\BackendUtility::getLabelFromItemListMerged()`
|
||||
with :php:`\TYPO3\CMS\Core\Schema\SchemaLabelResolver->getLabelForFieldValue()`.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
|
||||
$label = BackendUtility::getLabelFromItemListMerged(
|
||||
$pageId, $table, $column, $value, $row
|
||||
);
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
use TYPO3\CMS\Core\Schema\SchemaLabelResolver;
|
||||
|
||||
$columnTsConfig = BackendUtility::getPagesTSconfig($pageId)
|
||||
['TCEFORM.'][$table . '.'][$column . '.'] ?? [];
|
||||
$label = $this->schemaLabelResolver->getLabelForFieldValue(
|
||||
$table, $column, $value, $row, $columnTsConfig
|
||||
);
|
||||
|
||||
Replace calls to :php:`BackendUtility::getLabelsFromItemsList()`
|
||||
with :php:`\TYPO3\CMS\Core\Schema\SchemaLabelResolver->getLabelsForFieldValues()`.
|
||||
Note that the new method returns an array of raw labels instead of a
|
||||
comma-separated translated string — callers must handle translation
|
||||
and joining themselves.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
|
||||
$labels = BackendUtility::getLabelsFromItemsList(
|
||||
$table, $column, $keyList, $columnTsConfig, $row
|
||||
);
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Schema\SchemaLabelResolver;
|
||||
|
||||
$labels = $this->schemaLabelResolver->getLabelsForFieldValues(
|
||||
$table, $column, $keyList, $row, $columnTsConfig
|
||||
);
|
||||
$translatedLabels = implode(
|
||||
', ',
|
||||
array_map($languageService->sL(...), $labels)
|
||||
);
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:backend
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109523-1775680564:
|
||||
|
||||
==============================================================================
|
||||
Deprecation: #109523 - GeneralUtility::isOnCurrentHost() without PSR-7 request
|
||||
==============================================================================
|
||||
|
||||
See :issue:`109523`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::isOnCurrentHost()` without
|
||||
providing a PSR-7 :php:`\Psr\Http\Message\ServerRequestInterface` as the
|
||||
second argument is deprecated.
|
||||
|
||||
The method previously resolved the current host via
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()`,
|
||||
which hides an implicit dependency on server globals. The method signature has been
|
||||
extended to accept an explicit PSR-7 request object, which should be passed instead.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A PHP :php:`E_USER_DEPRECATED` error is triggered when
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::isOnCurrentHost()` is called without a
|
||||
:php-short:`\Psr\Http\Message\ServerRequestInterface` argument.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
All installations with third-party extensions that call
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::isOnCurrentHost()` with
|
||||
only one argument.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Pass the current PSR-7 request as the second argument to
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::isOnCurrentHost()`.
|
||||
|
||||
Before:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
$isOnCurrentHost = GeneralUtility::isOnCurrentHost($url);
|
||||
|
||||
After:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
$isOnCurrentHost = GeneralUtility::isOnCurrentHost($url, $request);
|
||||
|
||||
The PSR-7 request is available in various places, for example as an argument
|
||||
in controller actions, via :php:`$GLOBALS['TYPO3_REQUEST']` in legacy contexts,
|
||||
and via :php-short:`\Psr\Http\Message\ServerRequestInterface` method parameters.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,71 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109529-1775733107:
|
||||
|
||||
==========================================================
|
||||
Deprecation: #109529 - Page module section markup events
|
||||
==========================================================
|
||||
|
||||
See :issue:`109529`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The PSR-14 events that allow listeners to inject HTML before or after
|
||||
content elements have been rendered inside a backend layout column have been
|
||||
deprecated and will be removed in TYPO3 v15.0:
|
||||
|
||||
* :php:`\TYPO3\CMS\Backend\View\Event\BeforeSectionMarkupGeneratedEvent`
|
||||
* :php:`\TYPO3\CMS\Backend\View\Event\AfterSectionMarkupGeneratedEvent`
|
||||
* :php:`\TYPO3\CMS\Backend\View\Event\AbstractSectionMarkupGeneratedEvent`
|
||||
|
||||
The accompanying methods :php:`GridColumn::getBeforeSectionMarkup()` and
|
||||
:php:`GridColumn::getAfterSectionMarkup()` have also been deprecated.
|
||||
|
||||
These events were introduced in TYPO3 v10.3 alongside the legacy
|
||||
:php:`PageLayoutView` class to enrich backend layout columns with custom
|
||||
markup. They expose raw HTML strings as a column-level extension point
|
||||
and force every refactoring of the page module to keep emitting that
|
||||
markup at exactly the same position in the DOM. This makes it impossible
|
||||
to keep them stable across versions while improving the page module:
|
||||
ongoing work to rebuild the page module and its drag, drop and paste
|
||||
behavior cannot proceed without locking the column's internal structure
|
||||
to whatever the events happened to assume. Removing the events is a
|
||||
prerequisite for that work.
|
||||
|
||||
The only listener that still consumed the event in the core,
|
||||
:php:`PageLayoutViewDrawEmptyColposContent`, has been removed. Its job —
|
||||
showing a placeholder block for backend layout cells that do not have a
|
||||
configured :php:`colPos` — is now performed in the Fluid template
|
||||
:file:`PageLayout/Grid/Column.fluid.html` via an :php:`{column.unassigned}`
|
||||
condition. No extension action is required for this case.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling
|
||||
:php:`\TYPO3\CMS\Backend\View\Event\AbstractSectionMarkupGeneratedEvent::setContent()`
|
||||
from a listener will trigger a deprecation-level log entry. The classes and the
|
||||
two :php:`GridColumn` getters will be removed in TYPO3 v15.0.
|
||||
|
||||
Existing listeners will keep functioning in TYPO3 v14: the dispatch sites
|
||||
in :php:`GridColumn` still fire the events and the Fluid partials still
|
||||
render the resulting :php:`{column.beforeSectionMarkup}` and
|
||||
:php:`{column.afterSectionMarkup}` strings.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
Instances and extensions that register a PSR-14 listener on
|
||||
:php-short:`\TYPO3\CMS\Backend\View\Event\BeforeSectionMarkupGeneratedEvent` or
|
||||
:php-short:`\TYPO3\CMS\Backend\View\Event\AfterSectionMarkupGeneratedEvent`, or that call
|
||||
:php:`GridColumn::getBeforeSectionMarkup()` /
|
||||
:php:`GridColumn::getAfterSectionMarkup()`.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
There is no direct replacement. Listeners that decorated backend layout
|
||||
columns through these events should be removed.
|
||||
|
||||
.. index:: Backend, PHP-API, NotScanned, ext:backend
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109544-1775761298:
|
||||
|
||||
=============================================================================
|
||||
Deprecation: #109544 - GeneralUtility::sanitizeLocalUrl() needs PSR-7 request
|
||||
=============================================================================
|
||||
|
||||
See :issue:`109544`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::sanitizeLocalUrl()` without
|
||||
passing the current PSR-7 request as the second argument is deprecated. The method
|
||||
previously resolved host and site information via
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()`, which falls back to server superglobals.
|
||||
Passing the request explicitly allows the method to read this information from
|
||||
:php:`\TYPO3\CMS\Core\Http\NormalizedParams` instead.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::sanitizeLocalUrl()`
|
||||
with only one argument triggers a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
All installations that call
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::sanitizeLocalUrl()` without
|
||||
passing a :php:`\Psr\Http\Message\ServerRequestInterface` as the second argument.
|
||||
|
||||
The extension scanner will detect affected usages as a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Pass the current PSR-7 request as the second argument:
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
- $url = GeneralUtility::sanitizeLocalUrl($url);
|
||||
+ $url = GeneralUtility::sanitizeLocalUrl($url, $request);
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109548-1775851081:
|
||||
|
||||
================================================================================
|
||||
Deprecation: #109548 - GeneralUtility::locationHeaderUrl() without PSR-7 request
|
||||
================================================================================
|
||||
|
||||
See :issue:`109548`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::locationHeaderUrl()` without
|
||||
providing a PSR-7 :php:`\Psr\Http\Message\ServerRequestInterface` as the second argument is deprecated.
|
||||
|
||||
The method previously resolved the current host and request directory via
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()`, which
|
||||
hides an implicit dependency on server globals. The method signature has been
|
||||
extended to accept an explicit PSR-7 request object, which should be passed instead.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
A PHP :php:`E_USER_DEPRECATED` error is triggered when
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::locationHeaderUrl()` is called
|
||||
without a :php-short:`\Psr\Http\Message\ServerRequestInterface` argument.
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
All installations that call
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::locationHeaderUrl()` without
|
||||
passing :php-short:`\Psr\Http\Message\ServerRequestInterface` as the second argument.
|
||||
|
||||
The extension scanner will detect affected usages as a strong match.
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Pass the current PSR-7 request as the second argument to
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::locationHeaderUrl()`.
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
+ use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
- $url = GeneralUtility::locationHeaderUrl($path);
|
||||
+ $url = GeneralUtility::locationHeaderUrl($path, $request);
|
||||
|
||||
The PSR-7 request is available in various places, for example as an argument
|
||||
in controller actions, via :php:`$GLOBALS['TYPO3_REQUEST']` in legacy contexts,
|
||||
and via :php-short:`\Psr\Http\Message\ServerRequestInterface` method parameters.
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
@@ -0,0 +1,62 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109551-1775924599:
|
||||
|
||||
=======================================================
|
||||
Deprecation: #109551 - GeneralUtility::getIndpEnv()
|
||||
=======================================================
|
||||
|
||||
See :issue:`109551`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Method :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()` has been deprecated.
|
||||
|
||||
The method abstracts server environment variables and was used to obtain request-related
|
||||
data from PHP superglobals, such as the current host, URI, and site path. This information is
|
||||
reliably available via :php:`\TYPO3\CMS\Core\Http\NormalizedParams`, which is attached
|
||||
as an attribute to the PSR-7 request.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Calling :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()` triggers
|
||||
a PHP :php:`E_USER_DEPRECATED` error.
|
||||
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
All installations that call
|
||||
:php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()` directly.
|
||||
|
||||
The extension scanner will detect affected usages as a strong match.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
Replace calls to :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv()` with the corresponding
|
||||
:php:`\TYPO3\CMS\Core\Http\NormalizedParams` getter. A
|
||||
:php-short:`\TYPO3\CMS\Core\Http\NormalizedParams` instance is available as an attribute of the PSR-7
|
||||
request:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Before
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
$siteUrl = GeneralUtility::getIndpEnv('TYPO3_SITE_URL');
|
||||
$host = GeneralUtility::getIndpEnv('HTTP_HOST');
|
||||
|
||||
// After
|
||||
use TYPO3\CMS\Core\Http\NormalizedParams;
|
||||
|
||||
/** @var NormalizedParams $normalizedParams */
|
||||
$normalizedParams = $request->getAttribute('normalizedParams');
|
||||
$siteUrl = $normalizedParams->getSiteUrl();
|
||||
$host = $normalizedParams->getHttpHost();
|
||||
|
||||
.. index:: PHP-API, FullyScanned, ext:core
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _deprecation-109575:
|
||||
|
||||
=======================================================================
|
||||
Deprecation: #109575 - Various ContentObjectRenderer properties/methods
|
||||
=======================================================================
|
||||
|
||||
See :issue:`109575`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Several properties and a methods of
|
||||
:php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer` have been
|
||||
deprecated.
|
||||
|
||||
|
||||
Properties
|
||||
----------
|
||||
|
||||
:php:`ContentObjectRenderer->$lastTypoLinkResult`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The property held the :php:`\TYPO3\CMS\Frontend\Typolink\LinkResultInterface`
|
||||
produced by the most recent :php:`createLink()` call. Relying on a
|
||||
side-effect property that is overwritten on every subsequent link call is
|
||||
fragile. Use the return value of :php:`createLink()` directly instead.
|
||||
|
||||
|
||||
:php:`ContentObjectRenderer->$currentRecordNumber` and :php:`ContentObjectRenderer->$parentRecordNumber`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These counters are incremented by :php:`ContentContentObject` and
|
||||
:php:`RecordsContentObject` while iterating over their record sets, and
|
||||
exposed to TypoScript via :typoscript:`getData cobj:parentRecordNumber`.
|
||||
They carry no known use case for third-party extensions and are
|
||||
deprecated.
|
||||
|
||||
|
||||
:php:`ContentObjectRenderer->$checkPid_badDoktypeList`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The property was intended to cache a comma-separated list of page
|
||||
doctypes that should be excluded from link target checks, but it was
|
||||
never written to or read from any code path in TYPO3 itself.
|
||||
|
||||
|
||||
Methods
|
||||
-------
|
||||
|
||||
:php:`ContentObjectRenderer->readFlexformIntoConf()`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The method parses a FlexForm XML string or array into a flat TypoScript
|
||||
configuration array. It only covered the ``sDEF`` sheet and had no
|
||||
equivalent in TYPO3 core itself. Use
|
||||
:php:`\TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools::convertFlexFormContentToArray()`
|
||||
to decode FlexForm data, and map the result into your own configuration
|
||||
structure as needed.
|
||||
|
||||
|
||||
TypoScript getData type
|
||||
-----------------------
|
||||
|
||||
The :typoscript:`cobj:parentRecordNumber` type for the
|
||||
:ref:`getData <t3tsref:data-type-gettext-cobj>` function is deprecated.
|
||||
It returned the value of :php:`$parentRecordNumber`, which is now
|
||||
deprecated.
|
||||
|
||||
|
||||
:php:`ContentObjectRenderer->getRequest()` fallback to :php:`$GLOBALS['TYPO3_REQUEST']`
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
The :php:`getRequest()` method falls back to :php:`$GLOBALS['TYPO3_REQUEST']` when no request
|
||||
had been set via :php:`setRequest()` before. This fallback has been deprecated. Third-party code that
|
||||
instantiates :php:`ContentObjectRenderer` must call :php:`setRequest(ServerRequestInterface $request)`
|
||||
before calling :php:`start()` or any other method that requires the request.
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Accessing :php:`$lastTypoLinkResult` or
|
||||
:php:`$checkPid_badDoktypeList`, calling :php:`readFlexformIntoConf()`,
|
||||
evaluating the :typoscript:`cobj:parentRecordNumber` getData type, or
|
||||
triggering the :php:`$GLOBALS['TYPO3_REQUEST']` fallback in
|
||||
:php:`getRequest()` all raise :php:`E_USER_DEPRECATED` errors at runtime.
|
||||
The fallback will additionally throw an exception in TYPO3 v15 when no
|
||||
request has been set.
|
||||
|
||||
:php:`$currentRecordNumber` and :php:`$parentRecordNumber` carry only a
|
||||
docblock :php:`@deprecated` annotation for now — they remain functional
|
||||
and do not raise runtime errors.
|
||||
|
||||
|
||||
Affected installations
|
||||
======================
|
||||
|
||||
Installations with extensions that:
|
||||
|
||||
* Read :php:`$cObj->lastTypoLinkResult` after calling :php:`createLink()`
|
||||
* Read :php:`$currentRecordNumber`, :php:`$parentRecordNumber`, or
|
||||
:php:`$checkPid_badDoktypeList`
|
||||
* Call :php:`$cObj->readFlexformIntoConf()`
|
||||
* Use the :typoscript:`cobj:parentRecordNumber` getData type in TypoScript;
|
||||
* Instantiate :php:`ContentObjectRenderer` without calling :php:`setRequest()` before :php:`start()`.
|
||||
|
||||
The extension scanner detects usages of the deprecated properties as
|
||||
weak matches.
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
:php:`$lastTypoLinkResult`
|
||||
--------------------------
|
||||
|
||||
Capture the return value of :php:`createLink()` directly:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Before
|
||||
$cObj->createLink($linkText, $conf);
|
||||
$result = $cObj->lastTypoLinkResult;
|
||||
|
||||
// After
|
||||
$result = $cObj->createLink($linkText, $conf);
|
||||
|
||||
|
||||
:php:`setRequest()` before :php:`start()`
|
||||
-----------------------------------------
|
||||
|
||||
Call :php:`setRequest()` immediately after instantiation, before any other method:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Before
|
||||
$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
|
||||
$cObj->start($data, $table);
|
||||
|
||||
// After
|
||||
$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
|
||||
$cObj->setRequest($request);
|
||||
$cObj->start($data, $table);
|
||||
|
||||
|
||||
:php:`readFlexformIntoConf()`
|
||||
----------------------------
|
||||
|
||||
Replace with :php:`FlexFormTools::convertFlexFormContentToArray()` and
|
||||
map the decoded array into the configuration structure as needed:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
// Before
|
||||
$conf = [];
|
||||
$cObj->readFlexformIntoConf($flexFormXml, $conf);
|
||||
|
||||
// After
|
||||
$conf = $this->flexFormTools->convertFlexFormContentToArray($flexFormXml);
|
||||
|
||||
|
||||
All other deprecated items
|
||||
--------------------------
|
||||
|
||||
Remove all usages. None of the remaining deprecated properties, nor
|
||||
:typoscript:`cobj:parentRecordNumber` getData type have a replacement.
|
||||
|
||||
.. index:: PHP-API, TypoScript, PartiallyScanned, ext:frontend
|
||||
@@ -0,0 +1,49 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-109107-1772108218:
|
||||
|
||||
=======================================================================
|
||||
Important: #109107 - Cache action endpoints should return JSON response
|
||||
=======================================================================
|
||||
|
||||
See :issue:`109107`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
AJAX endpoints registered as custom cache actions via
|
||||
:php:`\TYPO3\CMS\Backend\Backend\Event\ModifyClearCacheActionsEvent` should
|
||||
return a JSON response containing :php:`success`, :php:`title`, and
|
||||
:php:`message` fields.
|
||||
|
||||
The clear-cache toolbar now treats a missing or non-:php:`false` :php:`success`
|
||||
value as a successful operation and falls back to generic notification labels
|
||||
when :php:`title` or :php:`message` are absent. While this keeps older
|
||||
endpoints working without changes, providing explicit values gives users
|
||||
meaningful, context-specific feedback and ensures error conditions are surfaced
|
||||
correctly.
|
||||
|
||||
.. hint::
|
||||
|
||||
Update any custom cache action endpoint to return a structured JSON
|
||||
response:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use TYPO3\CMS\Core\Http\JsonResponse;
|
||||
|
||||
// Success
|
||||
return new JsonResponse([
|
||||
'success' => true,
|
||||
'title' => $languageService->sL('myext.locallang:notification.success.title'),
|
||||
'message' => $languageService->sL('myext.locallang:notification.success.message'),
|
||||
]);
|
||||
|
||||
// Failure
|
||||
return new JsonResponse([
|
||||
'success' => false,
|
||||
'title' => $languageService->sL('myext.locallang:notification.error.title'),
|
||||
'message' => $languageService->sL('myext.locallang:notification.error.message'),
|
||||
]);
|
||||
|
||||
.. index:: Backend, PHP-API, ext:backend, NotScanned
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-109517-1744105200:
|
||||
|
||||
==================================================================
|
||||
Important: #109517 - Setup extension merged into backend extension
|
||||
==================================================================
|
||||
|
||||
See :issue:`109517`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The system extension `setup` (`typo3/cms-setup`) existed for historical reasons
|
||||
as a separate package. It provided the "User Settings" backend module, where users
|
||||
could change their password, name, email, language, avatar and other personal
|
||||
preferences.
|
||||
|
||||
In modern web applications a user profile module should never be optional, so
|
||||
the extension has been fully merged into the `backend` extension
|
||||
(`typo3/cms-backend`). The module is now always available when the backend is
|
||||
installed and can still be hidden for individual users via user TSconfig. The
|
||||
separate package is no longer needed and should not be referenced in new
|
||||
installations.
|
||||
|
||||
For Composer-based installations
|
||||
--------------------------------
|
||||
|
||||
The Composer package `typo3/cms-backend` now **replaces** `typo3/cms-setup`.
|
||||
This means:
|
||||
|
||||
* There is no need to require `typo3/cms-setup` in :file:`composer.json`
|
||||
anymore. Existing references are resolved automatically because
|
||||
`typo3/cms-backend` declares that it replaces the package.
|
||||
* No manual action is required during an upgrade – Composer handles the
|
||||
replacement transparently.
|
||||
* New projects should **not** add `typo3/cms-setup` as a dependency.
|
||||
|
||||
For class-based references
|
||||
--------------------------
|
||||
|
||||
The following public classes have been moved and class aliases are in place for
|
||||
backwards compatibility:
|
||||
|
||||
* :php:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`
|
||||
→ :php:`TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent`
|
||||
* :php:`TYPO3\CMS\Setup\Form\Element\AvatarElement`
|
||||
→ :php:`TYPO3\CMS\Backend\Form\Element\AvatarElement`
|
||||
* :php:`TYPO3\CMS\Setup\UserFunctions\UserSettingsItemsProcFunc`
|
||||
→ :php:`TYPO3\CMS\Backend\UserFunctions\UserSettingsItemsProcFunc`
|
||||
|
||||
Extensions using the old class names will continue to work, but should be
|
||||
updated to the new namespaces.
|
||||
|
||||
.. _important-109517-1744105200-AddJavaScriptModulesEvent:
|
||||
|
||||
Moved event `AddJavaScriptModulesEvent`
|
||||
---------------------------------------
|
||||
|
||||
A special case is :php:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`. This file
|
||||
has been moved to :file:`typo3/sysext/backend/DeprecatedClasses/Setup/Event/AddJavaScriptModulesEvent.php`
|
||||
and is added as a specific PSR-4 autoload entry to the Core's :file:`composer.json`
|
||||
map, so that the legacy event can be dispatched properly. No deprecation
|
||||
message is emitted when dispatching this legacy event.
|
||||
|
||||
In addition, a new event :php:`TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent`
|
||||
has been added with a distinguishing name. Both events are dispatched in TYPO3 v14,
|
||||
with the legacy event being deprecated and removed in TYPO3 v15
|
||||
(see :ref:`deprecation-109517-1744105201`).
|
||||
|
||||
Extensions providing compatibility to two versions should proceed as below:
|
||||
|
||||
.. _important-109517-1744105200-AddJavaScriptModulesEvent-v13:
|
||||
|
||||
For compatibility with TYPO3 v13 and v14
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Only listen to the legacy event :php:`TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent`:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: EXT:my_extension/Classes/Listener/SetupModuleListener.php
|
||||
:emphasize-lines: 7,12
|
||||
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MyExtension\Listener;
|
||||
|
||||
use TYPO3\CMS\Core\Attribute\AsEventListener;
|
||||
use TYPO3\CMS\Setup\Event\AddJavaScriptModulesEvent;
|
||||
|
||||
final class SetupModuleListener
|
||||
{
|
||||
#[AsEventListener('my-extension/setup-module-listener')]
|
||||
public function __invoke(AddJavaScriptModulesEvent $event): void
|
||||
{
|
||||
$event->addJavaScriptModule('@my-extension/setupModule/some-file.js');
|
||||
}
|
||||
}
|
||||
|
||||
.. _important-109517-1744105200-AddJavaScriptModulesEvent-v14:
|
||||
|
||||
For compatibility with TYPO3 v14 and v15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Only listen to the new event :php:`TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent`:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: EXT:my_extension/Classes/Listener/SetupModuleListener.php
|
||||
:emphasize-lines: 6,12
|
||||
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MyExtension\Listener;
|
||||
|
||||
use TYPO3\CMS\Backend\Event\AddUserSettingsJavaScriptModulesEvent;
|
||||
use TYPO3\CMS\Core\Attribute\AsEventListener;
|
||||
|
||||
final class SetupModuleListener
|
||||
{
|
||||
#[AsEventListener('my-extension/setup-module-listener')]
|
||||
public function __invoke(AddUserSettingsJavaScriptModulesEvent $event): void
|
||||
{
|
||||
$event->addJavaScriptModule('@my-extension/setupModule/some-file.js');
|
||||
}
|
||||
}
|
||||
|
||||
.. index:: Backend, PHP-API, ext:backend, NotScanned
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _important-109585-1776329549:
|
||||
|
||||
====================================================================
|
||||
Important: #109585 - Serialized Credential Data in be_users settings
|
||||
====================================================================
|
||||
|
||||
See :issue:`109585`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The new mechanism of using serialized JSON data for storing
|
||||
backend user settings since TYPO3 14.2 has introduced a vulnerability
|
||||
that stored the "password" and "verify password" input data
|
||||
when changing a user's password inside the serialized user
|
||||
settings representation.
|
||||
|
||||
These passwords are no longer stored in the database columns
|
||||
:sql:`be_users.uc` and :sql:`be_users.user_settings` anymore,
|
||||
but may exist in database records during the period where
|
||||
TYPO3 v14.2 was used.
|
||||
|
||||
An upgrade wizard has been added that will remove these credentials
|
||||
from the serialized representation.
|
||||
|
||||
This upgrade wizard will detect possible records that contain
|
||||
the string `"password` or `:"password` and then unserialize
|
||||
the data, remove the two fields and re-serialize the data. It
|
||||
is important to execute this wizard for safety. If the wizard
|
||||
does not show up, no serialized credential data is found.
|
||||
|
||||
.. index:: Backend, PHP-API, ext:backend, NotScanned
|
||||
@@ -0,0 +1,55 @@
|
||||
:template: changelogOverview.html
|
||||
|
||||
.. include:: /Includes.rst.txt
|
||||
.. _changelog-14-3:
|
||||
|
||||
============
|
||||
14.3 Changes
|
||||
============
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
:depth: 1
|
||||
|
||||
Breaking Changes
|
||||
================
|
||||
|
||||
None since TYPO3 v14.0 release.
|
||||
|
||||
.. attention::
|
||||
|
||||
After TYPO3 v14.0, only new functionality with a solid migration path
|
||||
can be added on top, with aiming for as little as possible breaking changes
|
||||
after the initial v14.0 release on the way to LTS.
|
||||
|
||||
Features
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Feature-*
|
||||
|
||||
Deprecation
|
||||
===========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Deprecation-*
|
||||
|
||||
Important
|
||||
=========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Important-*
|
||||
Reference in New Issue
Block a user