TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:14 +02:00
commit ff4622ba97
138 changed files with 9045 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
<?php
use TYPO3\CMS\Dashboard\Controller\DashboardAjaxController;
return [
// Dashboards
'dashboard_dashboards_get' => [
'path' => '/dashboard/dashboards/get',
'target' => DashboardAjaxController::class . '::getDashboards',
'methods' => ['GET'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_dashboard_add' => [
'path' => '/dashboard/dashboard/add',
'target' => DashboardAjaxController::class . '::addDashboard',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_dashboard_edit' => [
'path' => '/dashboard/dashboard/edit',
'target' => DashboardAjaxController::class . '::editDashboard',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_dashboard_update' => [
'path' => '/dashboard/dashboard/update',
'target' => DashboardAjaxController::class . '::updateDashboard',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_dashboard_delete' => [
'path' => '/dashboard/dashboard/delete',
'target' => DashboardAjaxController::class . '::deleteDashboard',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
// Presets
'dashboard_presets_get' => [
'path' => '/dashboard/presets/get',
'target' => DashboardAjaxController::class . '::getPresets',
'methods' => ['GET'],
'inheritAccessFromModule' => 'dashboard',
],
// Categories
'dashboard_categories_get' => [
'path' => '/dashboard/categories/get',
'target' => DashboardAjaxController::class . '::getCategories',
'methods' => ['GET'],
'inheritAccessFromModule' => 'dashboard',
],
// Widgets
'dashboard_widget_get' => [
'path' => '/dashboard/widget/get',
'target' => DashboardAjaxController::class . '::getWidget',
'methods' => ['GET'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_widget_add' => [
'path' => '/dashboard/widget/add',
'target' => DashboardAjaxController::class . '::addWidget',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_widget_remove' => [
'path' => '/dashboard/widget/remove',
'target' => DashboardAjaxController::class . '::removeWidget',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_widget_settings_get' => [
'path' => '/dashboard/widget/settings/get',
'target' => DashboardAjaxController::class . '::getWidgetSettings',
'methods' => ['GET'],
'inheritAccessFromModule' => 'dashboard',
],
'dashboard_widget_settings_update' => [
'path' => '/dashboard/widget/settings/update',
'target' => DashboardAjaxController::class . '::updateWidgetSettings',
'methods' => ['POST'],
'inheritAccessFromModule' => 'dashboard',
],
];
@@ -0,0 +1,18 @@
<?php
return [
'default' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:dashboard.default',
'description' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:dashboard.default.description',
'iconIdentifier' => 'content-dashboard',
'defaultWidgets' => ['t3information', 'docGettingStarted'],
'showInWizard' => false,
],
'empty' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:dashboard.empty',
'description' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:dashboard.empty.description',
'iconIdentifier' => 'content-dashboard-empty',
'defaultWidgets' => [],
'showInWizard' => true,
],
];
@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
return [
'general' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.general',
],
'systemInfo' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.system',
],
'typo3' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.typo3',
],
'news' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.news',
],
'documentation' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.documentation',
],
'content' => [
'title' => 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widget_group.content',
],
];
+22
View File
@@ -0,0 +1,22 @@
<?php
use TYPO3\CMS\Dashboard\Controller\DashboardController;
/**
* Definitions for modules provided by EXT:dashboard
*/
return [
'dashboard' => [
'position' => ['before' => '*'],
'standalone' => true,
'access' => 'user',
'path' => '/module/dashboard',
'iconIdentifier' => 'module-dashboard',
'labels' => 'dashboard.module',
'routes' => [
'_default' => [
'target' => DashboardController::class . '::mainAction',
],
],
],
];
+19
View File
@@ -0,0 +1,19 @@
<?php
return [
'dependencies' => [
'backend',
'core',
],
'imports' => [
'@typo3/dashboard/' => [
'path' => 'EXT:dashboard/Resources/Public/JavaScript/',
'exclude' => [
'EXT:dashboard/Resources/Public/JavaScript/Contrib/',
],
],
'chart.js' => 'EXT:dashboard/Resources/Public/JavaScript/Contrib/chartjs.js',
// legacy, has been renamed "chart.js"
'@typo3/dashboard/contrib/chartjs.js' => 'EXT:dashboard/Resources/Public/JavaScript/Contrib/chartjs.js',
],
];
+12
View File
@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace TYPO3\CMS\Dashboard;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $container, ContainerBuilder $containerBuilder) {
$containerBuilder->addCompilerPass(new DependencyInjection\DashboardWidgetPass('dashboard.widget'));
};
+252
View File
@@ -0,0 +1,252 @@
services:
_defaults:
autowire: true
autoconfigure: true
public: false
TYPO3\CMS\Dashboard\:
resource: '../Classes/*'
TYPO3\CMS\Dashboard\Widgets\WidgetConfiguration:
autowire: false
dashboard.buttons.syslogErrors:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\SysLogButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.sysLogErrors.buttonText'
dashboard.buttons.syslogUsers:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\SysLogButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.sysLogUsers.buttonText'
$channel: 'user'
cache.dashboard.rss:
class: 'TYPO3\CMS\Core\Cache\Frontend\FrontendInterface'
factory: ['@TYPO3\CMS\Core\Cache\CacheManager', 'getCache']
arguments:
$identifier: 'dashboard_rss'
dashboard.buttons.t3news:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\ButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3news.moreItems'
$link: 'https://news.typo3.com'
$target: '_blank'
dashboard.buttons.t3securityAdvisories:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\ButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3securityAdvisories.moreItems'
$link: 'https://typo3.org/help/security-advisories'
$target: '_blank'
dashboard.buttons.docGettingStarted:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\ButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.gettingStarted.content.label'
$link: 'https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Index.html'
$target: '_blank'
dashboard.buttons.docTypoScriptReference:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\ButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.typoscriptReference.content.label'
$link: 'https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Index.html'
$target: '_blank'
dashboard.buttons.docTSconfig:
class: 'TYPO3\CMS\Dashboard\Widgets\Provider\ButtonProvider'
arguments:
$title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.TSconfigReference.content.label'
$link: 'https://docs.typo3.org/m/typo3/reference-tsconfig/main/en-us/Index.html'
$target: '_blank'
dashboard.widget.rss:
class: 'TYPO3\CMS\Dashboard\Widgets\RssWidget'
tags:
- name: dashboard.widget
identifier: 'rss'
groupNames: 'news'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang_widget_rss.xlf:widget.rss.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang_widget_rss.xlf:widget.rss.description'
iconIdentifier: 'content-widget-rss'
height: 'large'
width: 'medium'
dashboard.widget.t3news:
class: 'TYPO3\CMS\Dashboard\Widgets\RssWidget'
arguments:
$buttonProvider: '@dashboard.buttons.t3news'
$options:
feedUrl: 'https://typo3.org/rss'
tags:
- name: dashboard.widget
identifier: 't3news'
groupNames: 'news'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3news.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3news.description'
iconIdentifier: 'content-widget-rss'
height: 'large'
width: 'medium'
dashboard.widget.sysLogErrors:
class: 'TYPO3\CMS\Dashboard\Widgets\BarChartWidget'
arguments:
$dataProvider: '@TYPO3\CMS\Dashboard\Widgets\Provider\SysLogErrorsDataProvider'
$buttonProvider: '@dashboard.buttons.syslogErrors'
$options:
refreshAvailable: true
tags:
- name: dashboard.widget
identifier: 'sysLogErrors'
groupNames: 'systemInfo'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.sysLogErrors.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.sysLogErrors.description'
iconIdentifier: 'content-widget-chart-bar'
height: 'medium'
width: 'medium'
dashboard.widget.docGettingStarted:
class: 'TYPO3\CMS\Dashboard\Widgets\CtaWidget'
arguments:
$buttonProvider: '@dashboard.buttons.docGettingStarted'
$options:
text: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.gettingStarted.text'
tags:
- name: dashboard.widget
identifier: 'docGettingStarted'
groupNames: 'documentation'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.gettingStarted.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.gettingStarted.description'
iconIdentifier: 'content-widget-text'
height: 'small'
dashboard.widget.docTypoScriptReference:
class: 'TYPO3\CMS\Dashboard\Widgets\CtaWidget'
arguments:
$buttonProvider: '@dashboard.buttons.docTypoScriptReference'
$options:
text: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.typoscriptReference.text'
tags:
- name: dashboard.widget
identifier: 'docTypoScriptReference'
groupNames: 'documentation'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.typoscriptReference.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.typoscriptReference.description'
iconIdentifier: 'content-widget-text'
height: 'small'
dashboard.widget.docTSconfig:
class: 'TYPO3\CMS\Dashboard\Widgets\CtaWidget'
arguments:
$buttonProvider: '@dashboard.buttons.docTSconfig'
$options:
text: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.TSconfigReference.text'
tags:
- name: dashboard.widget
identifier: 'docTSconfig'
groupNames: 'documentation'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.TSconfigReference.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.documentation.TSconfigReference.description'
iconIdentifier: 'content-widget-text'
height: 'small'
dashboard.widget.t3information:
class: 'TYPO3\CMS\Dashboard\Widgets\T3GeneralInformationWidget'
tags:
- name: dashboard.widget
identifier: 't3information'
groupNames: 'general'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3information.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3information.description'
iconIdentifier: 'content-widget-text'
height: 'medium'
width: 'medium'
dashboard.widget.typeOfUsers:
class: 'TYPO3\CMS\Dashboard\Widgets\DoughnutChartWidget'
arguments:
$dataProvider: '@TYPO3\CMS\Dashboard\Widgets\Provider\TypeOfUsersChartDataProvider'
tags:
- name: dashboard.widget
identifier: 'typeOfUsers'
groupNames: 'systemInfo'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.typeOfUsers.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.typeOfUsers.description'
iconIdentifier: 'content-widget-chart-pie'
height: 'medium'
dashboard.widget.t3securityAdvisories:
class: 'TYPO3\CMS\Dashboard\Widgets\RssWidget'
arguments:
$buttonProvider: '@dashboard.buttons.t3securityAdvisories'
$options:
feedUrl: 'https://typo3.org/rss-security'
tags:
- name: dashboard.widget
identifier: 't3securityAdvisories'
groupNames: 'news'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3securityAdvisories.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.t3securityAdvisories.description'
iconIdentifier: 'content-widget-rss'
height: 'large'
width: 'medium'
dashboard.widget.failedLogins:
class: 'TYPO3\CMS\Dashboard\Widgets\NumberWithIconWidget'
arguments:
$dataProvider: '@TYPO3\CMS\Dashboard\Widgets\Provider\NumberOfFailedLoginsDataProvider'
$options:
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.failedLogins.title'
subtitle: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.failedLogins.subtitle'
icon: 'content-elements-login'
tags:
- name: dashboard.widget
identifier: 'failedLogins'
groupNames: 'systemInfo'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.failedLogins.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.failedLogins.description'
iconIdentifier: 'content-widget-number'
dashboard.widget.bookmarks:
class: 'TYPO3\CMS\Dashboard\Widgets\BookmarksWidget'
tags:
- name: dashboard.widget
identifier: 'bookmarks'
groupNames: 'content'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang_widget_bookmarks.xlf:widget.bookmarks.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang_widget_bookmarks.xlf:widget.bookmarks.description'
iconIdentifier: 'content-bookmark'
height: 'medium'
width: 'medium'
dashboard.widget.latestChangedPages:
class: 'TYPO3\CMS\Dashboard\Widgets\LatestChangedPagesWidget'
arguments:
$options:
refreshAvailable: true
tags:
- name: dashboard.widget
identifier: 'latestChangedPages'
groupNames: 'content'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.latestChangedPages.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.latestChangedPages.description'
iconIdentifier: 'content-widget-list'
height: 'medium'
width: 'medium'
dashboard.widget.latestBeLogins:
class: 'TYPO3\CMS\Dashboard\Widgets\LatestBeLoginsWidget'
arguments:
$dataProvider: '@TYPO3\CMS\Dashboard\Widgets\Provider\LatestBeLoginsDataProvider'
$buttonProvider: '@dashboard.buttons.syslogUsers'
tags:
- name: dashboard.widget
identifier: 'latestBeLogins'
groupNames: 'systemInfo'
title: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.latestBeLogins.title'
description: 'LLL:EXT:dashboard/Resources/Private/Language/locallang.xlf:widgets.latestBeLogins.description'
iconIdentifier: 'content-widget-list'
height: 'medium'
width: 'small'
+26
View File
@@ -0,0 +1,26 @@
<?php
defined('TYPO3') or die();
call_user_func(static function () {
$additionalColumns = [
'availableWidgets' => [
'label' => 'core.tca:availableWidgets',
'config' => [
'type' => 'select',
'renderType' => 'selectCheckBox',
'itemsProcFunc' => \TYPO3\CMS\Dashboard\WidgetRegistry::class . '->widgetItemsProcFunc',
'size' => 5,
'autoSizeMax' => 50,
],
],
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('be_groups', $additionalColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'be_groups',
'availableWidgets',
'',
'after:groupMods'
);
});
+63
View File
@@ -0,0 +1,63 @@
<?php
return [
'ctrl' => [
'title' => 'dashboard.db:be_dashboard',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'adminOnly' => true,
'rootLevel' => 1,
'delete' => 'deleted',
'hideTable' => true,
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'default_sortby' => 'crdate DESC',
'typeicon_classes' => [
'default' => 'content-dashboard',
],
],
'columns' => [
// The owner of the dashboard
'cruser_id' => [
'config' => [
'type' => 'passthrough',
],
],
'identifier' => [
'label' => 'dashboard.db:identifier',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
'required' => true,
],
],
'title' => [
'label' => 'dashboard.db:title',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
'required' => true,
],
],
],
'types' => [
'1' => [
'showitem' => '
--div--;core.form.tabs:general,
identifier,title,
--div--;core.form.tabs:access,
hidden, --palette--;;timeRestriction,
--div--;core.form.tabs:extended,
',
],
],
'palettes' => [
'timeRestriction' => ['showitem' => 'starttime, endtime'],
],
];