diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84463-PageTsConfigOptionModweb_listnewWizardsDropped.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84463-PageTsConfigOptionModweb_listnewWizardsDropped.rst
new file mode 100644
index 000000000000..8f08bbf0f92b
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84463-PageTsConfigOptionModweb_listnewWizardsDropped.rst
@@ -0,0 +1,41 @@
+.. include:: ../../Includes.txt
+
+=========================================================================
+Deprecation: #84463 - PageTsConfig option mod.web_list.newWizards dropped
+=========================================================================
+
+See :issue:`84463`
+
+Description
+===========
+
+The widely unknown PageTsConfig option :ts:`mod.web_list.newWizards` has
+been enabled by default and dropped.
+
+PHP property :php:`newWizards` of class :php:`TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList`
+has been deprecated along the way.
+
+
+Impact
+======
+
+The "+" sign in the list module of `pages` table now by default links to the wizard
+to select the new page position.
+
+The "+" sign in the list module of `tt_content` table now by default links to the
+new content element wizard in a modal.
+
+
+Affected Installations
+======================
+
+Most installations should not be affected by the code change, the extension scanner
+will find extensions using the mentioned class property.
+
+
+Migration
+=========
+
+Do not use property :php:`newWizards` anymore, drop the PageTsConfig option if used.
+
+.. index:: Backend, PHP-API, TSConfig, PartiallyScanned
\ No newline at end of file
diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php
index b50dbbc5df50..2403c9bd05b3 100644
--- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php
+++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php
@@ -547,4 +547,9 @@
'Deprecation-84338-ProtectedMethodsAndPropertiesInTableController.rst',
],
],
+ 'TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList->newWizards' => [
+ 'restFiles' => [
+ 'Deprecation-84463-PageTsConfigOptionModweb_listnewWizardsDropped.rst',
+ ],
+ ],
];
diff --git a/typo3/sysext/recordlist/Classes/Controller/RecordListController.php b/typo3/sysext/recordlist/Classes/Controller/RecordListController.php
index 2d42972b25ab..93cdfd8e42ec 100644
--- a/typo3/sysext/recordlist/Classes/Controller/RecordListController.php
+++ b/typo3/sysext/recordlist/Classes/Controller/RecordListController.php
@@ -327,7 +327,6 @@ public function main()
$dblist->tableTSconfigOverTCA = $this->modTSconfig['properties']['table.'];
$dblist->allowedNewTables = GeneralUtility::trimExplode(',', $this->modTSconfig['properties']['allowedNewTables'], true);
$dblist->deniedNewTables = GeneralUtility::trimExplode(',', $this->modTSconfig['properties']['deniedNewTables'], true);
- $dblist->newWizards = $this->modTSconfig['properties']['newWizards'] ? 1 : 0;
$dblist->pageRow = $this->pageinfo;
$dblist->counter++;
$dblist->MOD_MENU = ['bigControlPanel' => '', 'clipBoard' => ''];
diff --git a/typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php b/typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php
index 195e283d50b7..72d52983c867 100644
--- a/typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php
+++ b/typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php
@@ -24,6 +24,7 @@
use TYPO3\CMS\Backend\Tree\View\PageTreeView;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
@@ -53,6 +54,15 @@
*/
class DatabaseRecordList
{
+ use PublicPropertyDeprecationTrait;
+
+ /**
+ * @var array
+ */
+ protected $deprecatedPublicProperties = [
+ 'newWizards' => 'Using $newWizards of class DatabaseRecordList from outside is discouraged, property will be removed in v10.',
+ ];
+
// *********
// External:
// *********
@@ -75,10 +85,11 @@ class DatabaseRecordList
/**
* If TRUE, the control panel will contain links to the create-new wizards for
- * pages and tt_content elements (normally, the link goes to just creatinga new
+ * pages and tt_content elements (normally, the link goes to just creating a new
* element without the wizards!).
*
* @var bool
+ * @deprecated and unused since v9, will be removed in v10
*/
public $newWizards = false;
@@ -1661,16 +1672,23 @@ public function renderListHeader($table, $currentIdList)
$spriteIcon = $table === 'pages'
? $this->iconFactory->getIcon('actions-page-new', Icon::SIZE_SMALL)
: $this->iconFactory->getIcon('actions-add', Icon::SIZE_SMALL);
- if ($table === 'tt_content' && $this->newWizards) {
+ if ($table === 'tt_content') {
// If mod.newContentElementWizard.override is set, use that extension's create new content wizard instead:
$tmpTSc = BackendUtility::getModTSconfig($this->pageinfo['uid'], 'mod');
- $newContentElementWizard = $tmpTSc['properties']['newContentElementWizard.']['override'] ?? 'new_content_element';
- $newContentWizScriptPath = (string)$uriBuilder->buildUriFromRoute($newContentElementWizard, ['id' => $this->id]);
-
- $onClick = 'return jumpExt(' . GeneralUtility::quoteJSvalue($newContentWizScriptPath) . ');';
- $icon = '' . $spriteIcon->render() . '';
- } elseif ($table === 'pages' && $this->newWizards) {
+ $newContentElementWizard = $tmpTSc['properties']['newContentElementWizard.']['override'] ?? 'new_content_element_wizard';
+ $url = (string)$uriBuilder->buildUriFromRoute(
+ $newContentElementWizard,
+ [
+ 'id' => $this->id,
+ 'returnUrl' => GeneralUtility::getIndpEnv('REQUEST_URI'),
+ ]
+ );
+ $icon = 'getLL('new')) . '"'
+ . 'class="btn btn-default t3js-toggle-new-content-element-wizard">'
+ . $spriteIcon->render()
+ . '';
+ } elseif ($table === 'pages') {
$parameters = ['id' => $this->id, 'pagesOnly' => 1, 'returnUrl' => GeneralUtility::getIndpEnv('REQUEST_URI')];
$href = (string)$uriBuilder->buildUriFromRoute('db_new', $parameters);
$icon = ''