TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:31 +02:00
commit 3e43c11539
407 changed files with 51272 additions and 0 deletions
@@ -0,0 +1,81 @@
<f:layout name="Cards"/>
<f:section name="headline">
<h1>Upgrade</h1>
</f:section>
<f:section name="cards">
<div class="card card-size-small {f:if(condition:'{composerMode}', then: 'card-disabled')}">
<f:render partial="Card/Header" arguments="{ title: 'Update TYPO3 Core', subtitle: 'Core Upgrade', icon: 'EXT:install/Resources/Public/Icons/modules/install-update.svg'}"/>
<div class="card-body">
<p class="card-text">Update your TYPO3 installation (support for symbolic links required).</p>
</div>
<f:if condition="{composerMode}">
<f:then>
<div class="card-footer text-variant">
This function is not available as your installation is in composer mode. Please refer to the
<a href="https://docs.typo3.org/upgrade" target="_blank" rel="noreferrer">TYPO3 upgrade guide</a> for more information on how to upgrade your instance.
</div>
</f:then>
<f:else>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/core-update.js">Update Core&hellip;</button>
</div>
</f:else>
</f:if>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Upgrade Wizard', subtitle: 'Core Upgrade', icon: 'EXT:install/Resources/Public/Icons/modules/install-wizards.svg'}" />
<div class="card-body">
<p class="card-text">Finalise the upgrade process when moving to a major release of TYPO3.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/upgrade-wizards.js">Run Upgrade Wizard&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'View Upgrade Documentation', subtitle: 'Core Upgrade', icon: 'EXT:install/Resources/Public/Icons/modules/install-documentation.svg'}" />
<div class="card-body">
<p class="card-text">View and search for important changes that have been made in major and minor releases of TYPO3.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/upgrade-docs.js">View Upgrade Documentation&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Check for Broken Extensions', subtitle: 'Extensions', icon: 'EXT:install/Resources/Public/Icons/modules/install-check-brokenextension.svg'}" />
<div class="card-body">
<p class="card-text">Check compatibility of active extensions with the current TYPO3 installation.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="small" data-import="@typo3/install/module/upgrade/extension-compat-tester.js">Check Extension Compatibility&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Check TCA Migrations', subtitle: 'TCA', icon: 'EXT:install/Resources/Public/Icons/modules/install-check-tca.svg'}" />
<div class="card-body">
<p class="card-text">Identify any third-party extensions with an outdated TCA configuration which should be adapted for the installed version of TYPO3.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/tca-migrations-check.js">Check TCA Migrations&hellip;</button>
</div>
</div>
<div class="card card-size-small {f:if(condition:'!{hasExtensions}', then: 'card-disabled')}">
<f:render partial="Card/Header" arguments="{ title: 'Scan Extension Files', subtitle: 'Extensions', icon: 'EXT:install/Resources/Public/Icons/modules/install-scan-extensions.svg'}" />
<div class="card-body">
<p class="card-text">Scan extensions for deprecated or outdated TYPO3 API calls.</p>
</div>
<f:if condition="{hasExtensions}">
<f:then>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/extension-scanner.js">Scan Extension Files&hellip;</button>
</div>
</f:then>
<f:else>
<div class="card-footer text-variant">
This feature is not available because no extension folders were found.
</div>
</f:else>
</f:if>
</div>
</f:section>
@@ -0,0 +1,26 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>Automatically updates the TYPO3 CMS core to its latest minor release if these criteria are met:</p>
<ul>
<li>It only works under Unix and MacOS (support of symbolic links is required).</li>
<li><code>typo3_src</code> must be a symbolic link to the extracted TYPO3 source directory.</li>
<li>The symbolic link needs to be writable (and deletable) by the web server user.</li>
<li>The document root directory needs to be writable.</li>
<li>One path above document root (<code>../</code>) needs to be writable (new directories will be created).</li>
<li>The <code>tar</code> command must be available for extracting the TYPO3 source package.</li>
</ul>
<div class="t3js-coreUpdate-output">
<f:if condition="!{coreIsUpdatable}">
<f:be.infobox title="This feature is disabled in this installation">
<p>
<f:if condition="{coreUpdateComposerMode}">Composer Mode is active. Please update using composer commands.<br></f:if>
<f:if condition="!{coreUpdateEnabled}">The environment variable was set <code>TYPO3_DISABLE_CORE_UPDATER=1</code>.<br></f:if>
<f:if condition="!{coreUpdateIsReleasedVersion}">This system uses an unreleased TYPO3 core version.<br></f:if>
<f:if condition="!{coreUpdateIsSymLinkedCore}">This action can only be used with a linked <code>typo3_src</code>.</f:if>
</p>
</f:be.infobox>
</f:if>
</div>
</html>
@@ -0,0 +1,16 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Checks whether the local extensions' ext_localconf files can be included without errors,
meaning they can be loaded without breaking the system.
</p>
<div
class="t3js-module-content"
data-extension-compat-tester-load-ext_localconf-token="{extensionCompatTesterLoadExtLocalconfToken}"
data-extension-compat-tester-uninstall-extension-token="{extensionCompatTesterUninstallToken}"
>
<div class="t3js-extensionCompatTester-output"></div>
</div>
</html>
@@ -0,0 +1,132 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
This module scans extensions for usage of deprecated and removed TYPO3 API calls.
The module can be a great help for extension developers and site maintainers when
upgrading to new core versions. However, the detection approach - based on static
code analysis - is limited by concept: false positives/negatives are impossible to avoid.
Further details can be found at
<a style="text-decoration: underline;" target="_blank" rel="noreferrer" href="https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/ExtensionScanner/Index.html">
the official docs.
</a>
</p>
<div style="display: none">
<div id="t3js-extensionScanner-file-hit-template">
<div class="panel t3js-extensionScanner-hit-panel risk-medium">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed t3js-extensionScanner-hit-file-panel-head"
data-bs-toggle="collapse"
data-bs-target="#collapse"
aria-controls="collapse"
aria-expanded="false"
id="heading-not-affected"
>
<div class="panel-title">
<div><strong class="t3js-extensionScanner-hit-filename">aFile</strong></div>
<div class="t3js-extensionScanner-hit-message">aMessage</div>
</div>
<div class="panel-badge t3js-extensionScanner-hit-badges">
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapse" class="panel-collapse collapse t3js-extensionScanner-hit-file-panel-body">
<div class="panel-body">
<pre class="language-php"><strong class="t3js-extensionScanner-hit-file-line"></strong><span class="t3js-extensionScanner-hit-file-lineContent"></span></pre>
<div class="panel-group t3js-extensionScanner-hit-file-rest-container"></div>
</div>
</div>
</div>
</div>
<div id="t3js-extensionScanner-file-hit-rest-template">
<div class="panel t3js-extensionScanner-hit-rest-panel risk-medium">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed t3js-extensionScanner-hit-rest-panel-head"
data-bs-toggle="collapse"
data-bs-target="#collapse-rest"
aria-controls="collapse-rest"
aria-expanded="false"
>
<div class="panel-title">
<strong class="t3js-extensionScanner-hit-rest-headline">restFileHeadline</strong>
</div>
<div class="panel-badge">
<span class="badge badge-default t3js-extensionScanner-hit-rest-badge">aBadge</span>
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapse-rest" class="panel-collapse collapse t3js-extensionScanner-hit-rest-panel-body">
<pre class="panel-body t3js-extensionScanner-hit-rest-body">restFileContent</pre>
</div>
</div>
</div>
</div>
<div
class="t3js-module-content"
data-extension-scanner-files-token="{extensionScannerFilesToken}"
data-extension-scanner-scan-file-token="{extensionScannerScanFileToken}"
data-extension-scanner-mark-fully-scanned-rest-files-token="{extensionScannerMarkFullyScannedRestFilesToken}"
>
<typo3-backend-progress-bar class="t3js-extensionScanner-progress-all-extension" value="0" hidden></typo3-backend-progress-bar>
<h2>Extensions</h2>
<div class="panel-group panel-group-scanner-extensions">
<f:for each="{extensionScannerExtensionList}" as="extension" iteration="iterator">
<div
class="panel panel-default t3js-extensionScanner-extension t3js-extensionScanner-extension-{extension}"
data-extension="{extension}">
<div class="panel-progress">
<div class="panel-progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;">
<span class="visually-hidden">0%</span>
</div>
</div>
<div class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-target="#extension-{iterator.index}"
aria-controls="extension-{iterator.index}"
aria-expanded="false"
>
<div class="panel-title">
Extension: <strong>{extension}</strong>
</div>
<div class="panel-heading-text t3js-extensionScanner-number-of-files">
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div class="panel-collapse collapse" id="extension-{iterator.index}">
<div class="panel-body hide t3js-extensionScanner-extension-body"></div>
<div class="panel-footer">
<p>
<span>Effective lines of code: <span class="t3js-extensionScanner-extension-body-loc">0</span></span><br>
<span>Files ignored by scanner: <span class="t3js-extensionScanner-extension-body-ignored-files">0</span></span><br>
<span>Code lines ignored by scanner: <span class="t3js-extensionScanner-extension-body-ignored-lines">0</span></span>
</p>
<button type="submit" class="btn btn-default t3js-extensionScanner-scan-single">
Scanning…
</button>
</div>
</div>
</div>
</f:for>
</div>
</div>
</html>
@@ -0,0 +1,9 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Checks whether the current TCA needs migrations and displays the new migration paths which need to be adjusted
manually.
</p>
<div class="t3js-tcaMigrationsCheck-output"></div>
</html>
@@ -0,0 +1,15 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:for each="{upgradeDocsFiles}" key="fileId" as="fileArray">
<f:render partial="Upgrade/UpgradeDocs/PanelItem" arguments="{id: 'file-{fileId}', fileArray: fileArray, state: 'regular'}"/>
</f:for>
<f:for each="{upgradeDocsReadFiles}" key="fileId" as="fileArray">
<f:render partial="Upgrade/UpgradeDocs/PanelItem" arguments="{id: 'file-{fileId}', fileArray: fileArray, state: 'read', read: 'true'}"/>
</f:for>
<f:for each="{upgradeDocsNotAffectedFiles}" key="fileId" as="fileArray">
<f:render partial="Upgrade/UpgradeDocs/PanelItem" arguments="{id: 'file-{fileId}', fileArray: fileArray, state: 'notAffected', read: 'true'}"/>
</f:for>
</html>
@@ -0,0 +1,109 @@
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-upgrade-docs-mark-read-token="{upgradeDocsMarkReadToken}" data-upgrade-docs-unmark-read-token="{upgradeDocsUnmarkReadToken}">
<div class="form-group">
<label for="upgrade-docs-search-field" class="visually-hidden">Search</label>
<input
type="search"
autocomplete="off"
id="upgrade-docs-search-field"
class="form-control t3js-upgradeDocs-fulltext-search"
placeholder="Enter searchword"
disabled
>
</div>
<div class="form-group">
<div class="input-group flex-nowrap">
<span class="input-group-text">Filter by:</span>
<select-pure
default-label="Select category"
class="t3js-upgradeDocs-select-pure"
multiple
tabindex=""
disabled
>
</select-pure>
</div>
</div>
<div class="panel-group" role="tablist" aria-multiselectable="true">
<f:for each="{upgradeDocsVersions}" as="version" iteration="iterator">
<div class="panel panel-default panel-version t3js-version-changes" data-version="{version}">
<div class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-target="#version-{iterator.index}"
aria-controls="version-{iterator.index}"
aria-expanded="false"
id="heading-{iterator.index}"
>
<div class="panel-title">
Version: <strong>{version}</strong>
<span class="t3js-panel-loading"><core:icon identifier="spinner-circle" size="small" /></span>
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div class="panel-collapse collapse"
id="version-{iterator.index}" role="tabpanel" data-group-version="{version}">
<div class="panel-body t3js-changelog-list" role="tablist" aria-multiselectable="false"></div>
</div>
</div>
</f:for>
<div class="panel panel-default panel-version">
<div class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-target="#collapseRead"
aria-controls="collapseRead"
aria-expanded="false"
id="heading-read"
>
<div class="panel-title">
Files marked as read
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div class="panel-collapse collapse" id="collapseRead" role="tabpanel" data-group-version="read">
<div class="panel-body panel-body-read t3js-changelog-list" role="tablist" aria-multiselectable="false"></div>
</div>
</div>
<div class="panel panel-default panel-version">
<div class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-target="#collapseNotAffected"
aria-controls="collapseNotAffected"
aria-expanded="false"
id="heading-not-affected"
>
<div class="panel-title">
Files marked as not affected by extension scanner
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div class="panel-collapse collapse" id="collapseNotAffected" role="tabpanel" data-group-version="notAffected">
<div class="panel-body panel-body-not-affected t3js-changelog-list" role="tablist" aria-multiselectable="false"></div>
</div>
</div>
</div>
</div>
</html>
@@ -0,0 +1,122 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
If you upgrade your TYPO3 installation from one major version to another (e.g. {currentVersion - 1} LTS to {currentVersion} LTS),
then the Upgrade Wizards guide you through the necessary steps to upgrade your database
records or explicitly install extensions that ship with the latest TYPO3 version.
</p>
<div class="t3js-upgrade-status-section">
<div class="t3js-upgradeWizards-wizards-messages-output"></div>
<div class="upgradeWizards-wizards-output t3js-upgradeWizards-wizards-output"></div>
<h4 class="mt-4">Wizards marked as done</h4>
<p>
Some wizards fully automatically check whether they should be executed, while others just
set a flag in the system registry if they have been executed once. This "I have been executed"
flag can be reset by selecting specific wizards from the list below, so the according wizards
show up as possible upgrade wizards again.
</p>
<div
class="t3js-module-content"
data-upgrade-wizards-mark-undone-token="{upgradeWizardsMarkUndoneToken}"
data-upgrade-wizards-input-token="{upgradeWizardsInputToken}"
data-upgrade-wizards-execute-token="{upgradeWizardsExecuteToken}"
>
<div class="t3js-upgradeWizards-done-output"></div>
</div>
</div>
<template id="t3js-upgradeWizards-blocking-charset-template">
<p>
The default database charset of the main MySQL database is not utf-8.
<br />
You have to run this update wizard before you can run any other update
wizard to make sure new tables and fields are created with the correct
charset.
<br />
WARNING: This will NOT convert any existing data.
</p>
<button type="button" class="btn btn-default t3js-upgradeWizards-blocking-charset-fix">
Set default charset to utf8
</button>
</template>
<template id="t3js-upgradeWizards-blocking-adds-template">
<p class="mt-4">
There are tables or fields in the database which need to be created.
<br />
You have to run this update wizard before you can run any other update
wizard to make sure all needed tables and fields are present.
</p>
<p class="t3js-upgradeWizards-blocking-adds-rows"></p>
<button type="button" class="btn btn-default t3js-upgradeWizards-blocking-adds-execute">
Create missing tables and fields
</button>
</template>
<template id="t3js-upgradeWizards-list-template">
<f:comment><!--
@todo: this whole "partial" gets reloaded everytime the "Upgrade status" is re-calculated
this is an issue with the progress bar as it thus is re-rendered all the time
--></f:comment>
<h4 class="mt-4">Upgrade status</h4>
<typo3-backend-progress-bar value="0" max="100"></typo3-backend-progress-bar>
<div class="module-action-list t3js-upgradeWizards-list-rows mt-4"></div>
</template>
<template id="t3js-upgradeWizards-list-row-template">
<div class="module-action-item">
<div class="module-action-item-body">
<div class="module-action-item-title t3js-upgradeWizards-list-row-title"></div>
<div class="module-action-item-description t3js-upgradeWizards-list-row-explanation"></div>
</div>
<div class="module-action-item-action">
<button type="button" class="btn btn-default t3js-upgradeWizards-list-row-execute">
<core:icon identifier="actions-play" size="small" /> Execute
</button>
</div>
</div>
</template>
<template id="t3js-upgradeWizards-input">
<form class="card">
<div class="card-header">
<h4 class="t3js-upgradeWizards-input-title">{updateData.title}</h4>
</div>
<div class="card-body">
<p class="t3js-upgradeWizards-input-description">{updateData.description}</p>
<div class="t3js-upgradeWizards-input-html"></div>
</div>
<div class="card-footer">
<button type="button" class="btn btn-warning t3js-upgradeWizards-input-perform">
Perform updates
</button>
<button type="button" class="btn btn-default t3js-upgradeWizards-input-abort">
Abort
</button>
</div>
</form>
</template>
<template id="t3js-upgradeWizards-done-body-template">
<div class="table-fit mb-0">
<table class="table table-striped">
<tbody class="t3js-upgradeWizards-done-rows"></tbody>
</table>
</div>
</template>
<template id="t3js-upgradeWizards-done-row-template">
<tr>
<td>
<button type="button" class="btn btn-default t3js-upgradeWizards-done-markUndone">
Mark undone
</button>
</td>
<td class="t3js-upgradeWizards-done-title">
</td>
</tr>
</template>
</html>