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,6 @@
<f:layout name="SystemEmail" />
<f:section name="Title">{headline}</f:section>
<f:section name="Main">
<h4>{introduction}</h4>
<p>There has been a successful Install Tool login at TYPO3 site "{typo3.sitename}" from the IP address <strong>{normalizedParams.remoteAddress}</strong>.</p>
</f:section>
@@ -0,0 +1,5 @@
<f:layout name="SystemEmail" />
<f:section name="Title">{headline}</f:section>
<f:section name="Main">{introduction}
There has been a successful Install Tool login at TYPO3 site "{typo3.sitename}" from the IP address "{normalizedParams.remoteAddress}".
</f:section>
@@ -0,0 +1,6 @@
<f:layout name="SystemEmail" />
<f:section name="Title">{headline}</f:section>
<f:section name="Main">
<h4>{introduction}</h4>
<p>There has been an Install Tool login attempt at TYPO3 site "{typo3.sitename}" from the IP address <strong>{normalizedParams.remoteAddress}</strong>.</p>
</f:section>
@@ -0,0 +1,5 @@
<f:layout name="SystemEmail" />
<f:section name="Title">{headline}</f:section>
<f:section name="Main">{introduction}
There has been an Install Tool login attempt at TYPO3 site "{typo3.sitename}" from the IP address "{normalizedParams.remoteAddress}".
</f:section>
@@ -0,0 +1,62 @@
<f:layout name="Cards"/>
<f:section name="headline">
<h1>Environment</h1>
</f:section>
<f:section name="cards">
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Environment Overview', subtitle: 'Environment', icon: 'EXT:install/Resources/Public/Icons/modules/install-show-environment.svg'}" />
<div class="card-body">
<p class="card-text">Review details of the host environment, including web server, PHP version, selected database, and the application context.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="small" data-import="@typo3/install/module/environment/system-information.js">Show System Information&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Environment Status', subtitle: 'PHP', icon: 'EXT:install/Resources/Public/Icons/modules/install-test-environment.svg'}" />
<div class="card-body">
<p class="card-text">Analyze host environment for conditions that could prevent TYPO3 from operating correctly.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/environment/environment-check.js">Check Environment&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Directory Status', subtitle: 'Permissions', icon: 'EXT:install/Resources/Public/Icons/modules/install-check-directory.svg'}" />
<div class="card-body">
<p class="card-text">Analyze folder structure to verify file and directory permissions and detect missing items.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/environment/folder-structure.js">Check Directory Status&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'PHP Info', subtitle: 'PHP', icon: 'EXT:install/Resources/Public/Icons/modules/install-php-info.svg'}" />
<div class="card-body">
<p class="card-text">View detailed information about the PHP installation, including version details and enabled extensions.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/environment/php-info.js">View PHP Info&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Test Mail Setup', subtitle: 'Mail', icon: 'EXT:install/Resources/Public/Icons/modules/install-test-mail.svg'}" />
<div class="card-body">
<p class="card-text">Test your mail configuration by sending out a dummy email via TYPO3.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="small" data-import="@typo3/install/module/environment/mail-test.js">Test Mail Setup&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Image Processing', subtitle: 'Image Processing', icon: 'EXT:install/Resources/Public/Icons/modules/install-test-image.svg'}" />
<div class="card-body">
<p class="card-text">Create test images and compare them with reference images to verify that image processing works correctly in your environment.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/environment/image-processing.js">Test Images&hellip;</button>
</div>
</div>
</f:section>
@@ -0,0 +1,5 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-environmentCheck-output"></div>
</html>
@@ -0,0 +1,20 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>Root Directory: <strong>{publicPath}</strong></p>
<div class="t3js-folderStructure-output mt-4" style="display:none"></div>
<div class="t3js-folderStructure-errors mt-4" style="display:none">
<h3>These files or folders have errors and may be fixed automatically:</h3>
<div class="t3js-folderStructure-errors-list"></div>
</div>
<h3 class="mt-4">Default File and Directory permissions</h3>
<div class="t3js-folderStructure-permissions"></div>
<div class="t3js-folderStructure-ok mt-4" style="display:none">
<h3>These structures don't need to be fixed:</h3>
<div class="t3js-folderStructure-ok-list"></div>
</div>
</html>
@@ -0,0 +1,380 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<h2>True type font tests</h2>
<f:be.infobox title="FreeType2 hint" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
<p>If the two images below do not look the same, please check your FreeType 2 module.</p>
</f:be.infobox>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingTrueType"></div>
<h2>Convert image formats to jpg</h2>
<p>
This verifies that your ImageMagick / GraphicsMagick installation is able to read the default
formats <code>jpg</code>, <code>gif</code>, <code>png</code>, <code>tif</code>, <code>pdf</code> and
<code>ai</code>, <code>webp</code> and <code>avif</code>.
The tool <code>identify</code> is used to read the pixel dimensions of non-web formats and 'convert' is used to
read the image and convert it to <code>jpg</code>.
</p>
<f:be.infobox title="Dark images" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
<p>
In case the images appear remarkably darker than the reference images,
try to set<br/> <code>$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_colorspace'] = 'sRGB';</code>.
</p>
</f:be.infobox>
<h3>Read jpg</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadJpg"></div>
<h3>Read gif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadGif"></div>
<h3>Read png</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadPng"></div>
<h3>Read webp</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadWebp"></div>
<h3>Read avif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadAvif"></div>
<h3>Read tif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadTif"></div>
<h3>Read pdf</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadPdf"></div>
<h3>Read ai</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingReadAi"></div>
<h2>Writing gif, png, webp, avif</h2>
<p>
This verifies that ImageMagick / GraphicsMagick is able to write GIF, PNG, WEBP and AVIF files.
</p>
<h3>Write gif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingWriteGif"></div>
<h3>Write png</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingWritePng"></div>
<h3>Write webp</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingWriteWebp"></div>
<h3>Write avif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingWriteAvif"></div>
<h2>Scaling images</h2>
<p>
This shows how ImageMagick / GraphicsMagick reacts when scaling transparent GIF and PNG files.
</p>
<h3>gif to gif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGifToGif"></div>
<h3>png to png</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingPngToPng"></div>
<h3>gif to jpg</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGifToJpg"></div>
<h3>transparent svg to webp</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingSvgToWebp"></div>
<h3>transparent svg to png</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingSvgToPng"></div>
<h2>Special image formats</h2>
<p>
This shows how ImageMagick /GraphicsMagicks reacts when converting to image formats like WEBP and AVIF.
</p>
<h3>jpg to webp</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingJpgToWebp"></div>
<h3>jpg to avif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingJpgToAvif"></div>
<h3>png to webp</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingPngToWebp"></div>
<h3>png to avif</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingPngToAvif"></div>
<h2>Combining images</h2>
<p>
This verifies that the ImageMagick / GraphicsMagick tools, <code>combine</code>, <code>composite</code>, are able to
combine two images through a grayscale mask.
</p>
<h3>Combine using a GIF mask with only black and white</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingCombineGifMask"></div>
<h3>Combine using a JPG mask with graylevels</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingCombineJpgMask"></div>
<h2>GDlib</h2>
<p>
This verifies that the GDLib installation works properly.
</p>
<h3>Create simple image</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibSimple"></div>
<h3>Create image with box from file</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibFromFile"></div>
<h3>Create webp image with box from webp file</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibFromFileToWebp"></div>
<h3>Create avif image with box from file</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibFromFileToAvif"></div>
<h3>Render text with TrueType font</h3>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibRenderText"></div>
<h3>Render text with TrueType font using 'niceText' option</h3>
<f:be.infobox title="Note on 'niceText'" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
<p>
'niceText' is a concept that tries to improve the antialiasing of the rendered type by actually
rendering the textstring in double size on a black/white mask, downscaling the mask and masking
the text onto the image through this mask. This involves ImageMagick / GraphicsMagick 'combine'/'composite' and 'convert'.
</p>
</f:be.infobox>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibNiceText"></div>
<h3>Render 'niceText' with a shadow under</h3>
<f:be.infobox title="Note on 'shadow'" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
<p>
This test makes sense only if the above test had a correct output. But if so, you may not see
a soft drop-shadow from the third text string as you should. In that case you are most likely using
ImageMagick 5 and should set the flag <code>$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_effects']</code>.
</p>
</f:be.infobox>
<div class="t3js-imageProcessing-twinContainer" data-test="imageProcessingGdlibNiceTextShadow"></div>
<div class="panel-group mb-0" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-parent="#accordion"
data-bs-target="#collapseConfiguration"
aria-controls="collapseConfiguration"
aria-expanded="false"
id="headingConfiguration"
>
<div class="panel-title">
<strong>Current configuration</strong>
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapseConfiguration" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingConfiguration">
<div class="table-fit">
<table class="table table-striped">
<tr>
<td>{imageProcessingProcessor} enabled:</td>
<td>{f:if(condition:imageProcessingEnabled, then:'Yes', else:'No')}</td>
</tr>
<tr>
<td>ImageMagick or GraphicsMagick:</td>
<td>{imageProcessingProcessor}</td>
</tr>
<tr>
<td>{imageProcessingProcessor} path:</td>
<td>{imageProcessingPath}</td>
</tr>
<tr>
<td>{imageProcessingProcessor} version:</td>
<td>{imageProcessingVersion}</td>
</tr>
<tr>
<td>{imageProcessingProcessor} effects enabled:</td>
<td>{imageProcessingEffects} <span>(Blurring/Sharpening with {imageProcessingProcessor})</span></td>
</tr>
<tr>
<td>GDLib enabled:</td>
<td>{f:if(condition:imageProcessingGdlibEnabled, then:'Yes', else:'No')}</td>
</tr>
<tr>
<td>GDLib using PNG:</td>
<td>{f:if(condition:imageProcessingGdlibPng, then:'Yes', else:'No')}</td>
</tr>
<tr>
<td>File Formats:</td>
<td>{imageProcessingFileFormats}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="panel panel-default">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-parent="#accordion"
data-bs-target="#collapseVerify"
aria-controls="collapseVerify"
aria-expanded="false"
id="headingVerify"
>
<div class="panel-title">
<strong>Verify test results</strong>
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapseVerify" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingVerify">
<div class="panel-body">
<h3>Verify test results</h3>
<p>
This page performs image processing and displays the result. It's a thorough check
that everything you've configured is working correctly.
</p>
<p>
It's quite simple to verify your installation; Just look down the page, the images
in pairs should look like each other. If some images are not alike, something is
wrong. You may also notice warnings and errors if this tool found signs of any problems.
</p>
<p>
The image to the left is the reference image (how it should be) and to the right
the image made by your server.
</p>
</div>
</div>
</div>
<div class="panel panel-default">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-parent="#accordion"
data-bs-target="#collapseAbout"
aria-controls="collapseAbout"
aria-expanded="false"
id="headingAbout"
>
<div class="panel-title">
<strong>About image handling</strong>
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapseAbout" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingAbout">
<div class="panel-body">
<p>
TYPO3 is known for its ability to process images on the server.
</p>
<p>
In the backend interface (TBE) thumbnails are automatically generated
as well as icons, menu items and pane tabs (by GDLib).
In the frontend all kinds of graphical elements are processed. Typically, images are
scaled down to fit the pages (by ImageMagick/GraphicsMagick) and menu items, graphical headers and
such are generated automatically (by GDLib + ImageMagick/GraphicsMagick). In addition, TYPO3 is able
to handle many file formats (thanks to ImageMagick/GraphicsMagick), for example TIF, BMP, PCX, TGA,
AI and PDF in addition to the standard web formats; JPG, GIF, PNG. Additional image formats like WEBP
and AVIF are available depending on installed codecs on the system.
</p>
<p>
In order to do this, TYPO3 uses two sets of tools:
</p>
<strong>
ImageMagick / GraphicsMagick:
</strong>
<p>
For conversion of non-web formats to web formats, combining images with alpha-masks,
performing image-effects like blurring and sharpening.
</p>
<p>
ImageMagick is a collection of external programs on the server called by the exec()
function in PHP. TYPO3 uses three of these, namely 'convert' (converting file formats,
scaling, effects), 'combine'/'composite' (combining images with masks) and 'identify'
(returns image information). GraphicsMagick is an alternative to ImageMagick and can
be enabled by setting [GFX][processor] to 'GraphicsMagick'. This is recommended and enabled
by default. Because ImageMagick and GraphicsMagick are external programs, a requirement
must be met: The programs must be installed on the server and working. ImageMagick is
available for both Windows and Unix. The current version is 6+. ImageMagick homepage is
at <a href="https://www.imagemagick.org/">https://www.imagemagick.org/</a>
</p>
<strong>GDLib:</strong>
<p>
For drawing boxes and rendering text on images with TrueType fonts. Also used for
icons, menuitems and generally the TypoScript GIFBUILDER object is based on GDlib,
but extensively utilizing ImageMagick to process intermediate results.
</p>
<p>
GDLib is accessed through internal functions in PHP, you'll need a version of PHP
with GDLib compiled in. Also in order to use TrueType fonts with GDLib you'll
need FreeType compiled in as well.
</p>
</div>
</div>
</div>
<div class="panel panel-default">
<h2 class="panel-heading" role="tab">
<div class="panel-heading-row">
<button
type="button"
class="panel-button collapsed"
data-bs-toggle="collapse"
data-bs-parent="#accordion"
data-bs-target="#collapseTestImages"
aria-controls="collapseTestImages"
aria-expanded="false"
id="headingTestImages"
>
<div class="panel-title">
<strong>About test images</strong>
</div>
<span class="caret"></span>
</button>
</div>
</h2>
<div id="collapseTestImages" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTestImages">
<div class="panel-body">
<p>
Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or
<a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>],
<a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a>
</p>
</div>
</div>
</div>
</div>
<template id="t3js-imageProcessing-twinImage-template">
<div class="t3-install-displaytwinimageimages t3js-imageProcessing-images" hidden>
<div class="row">
<div class="col-12 col-md-6">
<h3>Reference</h3>
<div class="bg-transparent-emulation">
<img class="reference"/>
</div>
</div>
<div class="col-12 col-md-6">
<h3>Your system</h3>
<div class="bg-transparent-emulation">
<img class="result"/>
</div>
</div>
</div>
</div>
<div class="t3-install-displaytwinimagetextarea t3js-imageProcessing-command" hidden>
<pre class="language-bash"><code class="language-bash t3js-imageProcessing-command-text"></code></pre>
</div>
</template>
</html>
@@ -0,0 +1,45 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Check the basic mail functionality by entering your email address here and clicking the button.
You should then receive a test email from "{mailTestSenderAddress}".
</p>
<p>
If no email is received, your setup might be broken. Check the following:
</p>
<ul>
<li>
If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to mail or sendmail, TYPO3 tries to use
the operating systems' sendmail application. There might be no such program installed.
</li>
<li>
If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to smtp, check if the data given in
<code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_*']</code> is valid. Wrong data here results in faulty
requests to the mail server. You can find the resulting messages in the mail server log.
</li>
</ul>
<p>
Not receiving the test email could also be a consequence of it being intercepted by a spam filter or due to the
sending domain's email security settings, such as SPF record, which may prevent successful delivery.
</p>
<div class="t3js-module-content" data-mail-test-token="{mailTestToken}">
<div class="t3js-mailTest-output"></div>
<f:if condition="{isSendPossible}">
<form id="t3js-mailTest-form" spellcheck="false">
<div class="form-group">
<label class="form-label" for="t3-install-checkmail">Email address:</label>
<input
id="t3-install-checkmail"
type="email"
class="t3-install-form-input-text form-control t3js-mailTest-email"
required
/>
</div>
</form>
</f:if>
</div>
</html>
@@ -0,0 +1,7 @@
<html xmlns:i="http://typo3.org/ns/TYPO3/CMS/Install/ViewHelpers" data-namespace-typo3-fluid="true">
<div id="phpinfo">
<i:phpInfo/>
</div>
</html>
@@ -0,0 +1,62 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:i="http://typo3.org/ns/TYPO3/CMS/Install/ViewHelpers" data-namespace-typo3-fluid="true">
<table class="table table-striped table-bordered">
<tr>
<td>Operating system:</td>
<td><strong>{systemInformationOperatingSystem}</strong></td>
</tr>
<tr>
<td>PHP version:</td>
<td>
<strong>{phpVersion}</strong>
</td>
</tr>
<tr>
<td>PHP CGI detected:</td>
<td><strong>{f:if(condition:systemInformationCgiDetected, then:'Yes', else:'No')}</strong></td>
</tr>
<f:if condition="{systemInformationDatabaseConnections -> f:count()} > 1">
<tr>
<td>Number of database connections:</td>
<td><strong>{systemInformationDatabaseConnections -> f:count()}</strong></td>
</tr>
</f:if>
<f:for each="{systemInformationDatabaseConnections}" as="connection">
<tr>
<td>Database connection <strong>'{connection.connectionName}'</strong></td>
<td>
<ul>
<li><strong>Database name:</strong> {connection.databaseName}</li>
<li><strong>Username:</strong> {connection.username}</li>
<li><strong>Host:</strong> {connection.host}</li>
<f:if condition="{connection.port}">
<f:then>
<li><strong>Port:</strong> {connection.port}</li>
</f:then>
<f:else>
<li>
<strong>Socket:</strong>
{f:if(condition:connection.socket, then: '{connection.socket}', else:'<em>PHP default</em>')}
</li>
</f:else>
</f:if>
<li>
<strong>Version:</strong> {connection.version}
</li>
<li><strong>Tables:</strong> {connection.numberOfTables}</li>
<f:if condition="{connection.numberOfMappedTables}">
<f:then>
<li><strong>Mapped tables:</strong> {connection.numberOfMappedTables}</li>
</f:then>
</f:if>
</ul>
</td>
</tr>
</f:for>
<tr>
<td>Application Context:</td>
<td><strong class="text-{systemInformationApplicationContext.status}">{systemInformationApplicationContext.context}</strong></td>
</tr>
</table>
</html>
@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-icon-cache-identifier="{iconCacheIdentifier}"
>
<head>
<title>Installing TYPO3 CMS</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="{f:uri.resource(path: 'EXT:backend/Resources/Public/Css/backend.css')}?{bust}" />
<link rel="stylesheet" href="{f:uri.resource(path: 'EXT:backend/Resources/Public/Css/webfonts.css')}?{bust}" />
<link rel="icon" type="image/vnd.microsoft.icon" href="{f:uri.resource(path: 'EXT:install/Resources/Public/Icons/favicon.ico')}?{bust}" />
{importmap->f:format.raw()}
</head>
<body class="t3js-body typo3-install">
<script type="module" src="{initModule}"></script>
</body>
</html>
@@ -0,0 +1,15 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="typo3-install-container">
<div class="typo3-install-content">
<div class="typo3-install-content-header">
<img src="{f:uri.resource(path: 'EXT:core/Resources/Public/Images/typo3_light_dark.svg')}" width="130" class="typo3-install-content-header-logo" />
<h1>Installing TYPO3 CMS</h1>
</div>
<div class="typo3-install-content-progress">
<typo3-backend-progress-bar class="t3js-installer-progress" value="0" max="5" label="Step 0 of 5 completed"></typo3-backend-progress-bar>
</div>
<div class="t3js-installer-content">
</div>
</div>
</div>
</html>
@@ -0,0 +1,403 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-installer-database-connect-execute-token="{executeDatabaseConnectToken}">
<div class="typo3-install-content-body">
<h2>Connect to database</h2>
<f:if condition="{hasAtLeastOneOption}">
<f:then>
<p>
You will need to create a database user with the appropriate privileges to access your database.
</p>
<div class="typo3-install-content-spacer"></div>
<div class="t3js-installer-databaseConnect-output"></div>
<div class="typo3-install-content-spacer"></div>
<form method="post" spellcheck="false">
<div class="form-group">
<label for="t3js-connect-database-driver" class="form-label">Connection</label>
<select id="t3js-connect-database-driver" class="form-select" name="install[values][availableSet]" placeholder="sqlite">
<f:if condition="{hasMysqliManualConfiguration}">
<option
value="mysqliManualConfiguration"
{f:if(condition:'{activeAvailableOption} == mysqliManualConfiguration', then: 'selected="selected"')}
>
[MySQLi] Manually configured MySQL TCP/IP connection
</option>
</f:if>
<f:if condition="{hasMysqliSocketManualConfiguration}">
<option
value="mysqliSocketManualConfiguration"
{f:if(condition:'{activeAvailableOption} == mysqliSocketManualConfiguration', then: 'selected="selected"')}
>
[MySQLi] Manually configured MySQL socket connection
</option>
</f:if>
<f:if condition="{hasPdoMysqlManualConfiguration}">
<option
value="pdoMysqlManualConfiguration"
{f:if(condition:'{activeAvailableOption} == pdoMysqlManualConfiguration', then: 'selected="selected"')}
>
[PDO] Manually configured MySQL TCP/IP connection
</option>
</f:if>
<f:if condition="{hasPdoMysqlSocketManualConfiguration}">
<option
value="pdoMysqlSocketManualConfiguration"
{f:if(condition:'{activeAvailableOption} == pdoMysqlSocketManualConfiguration', then: 'selected="selected"')}
>
[PDO] Manually configured MySQL socket connection
</option>
</f:if>
<f:if condition="{hasPostgresManualConfiguration}">
<option
value="postgresManualConfiguration"
{f:if(condition:'{activeAvailableOption} == postgresManualConfiguration', then: 'selected="selected"')}
>
Manually configured PostgreSQL connection
</option>
</f:if>
<f:if condition="{hasSqliteManualConfiguration}">
<option
value="sqliteManualConfiguration"
{f:if(condition:'{activeAvailableOption} == sqliteManualConfiguration', then: 'selected="selected"')}
>
Manually configured SQLite connection
</option>
</f:if>
<f:if condition="{hasConfigurationFromEnvironment}">
<option
value="configurationFromEnvironment"
{f:if(condition:'{activeAvailableOption} == configurationFromEnvironment', then: 'selected="selected"')}
>
Configuration from environment variables
</option>
</f:if>
</select>
</div>
<f:if condition="{hasMysqliManualConfiguration}">
<div id="mysqliManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="mysqli" name="install[values][driver]"/>
<div class="row">
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliManualConfiguration-username" class="form-label">
Username
</label>
<input
id="t3-install-step-mysqliManualConfiguration-username"
class="form-control"
type="text"
value="{mysqliManualConfigurationOptions.username}"
name="install[values][username]"
autocomplete="off"
placeholder="db-user"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliManualConfiguration-password" class="form-label">
Password
</label>
<input
id="t3-install-step-mysqliManualConfiguration-password"
class="form-control"
type="password"
value="{mysqliManualConfigurationOptions.password}"
name="install[values][password]"
autocomplete="off"
placeholder="password"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliManualConfiguration-host" class="form-label">
Host
</label>
<input
id="t3-install-step-mysqliManualConfiguration-host"
class="t3-install-form-input-text form-control"
type="text"
value="{mysqliManualConfigurationOptions.host}"
name="install[values][host]"
placeholder="127.0.0.1"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliManualConfiguration-port" class="form-label">
Port
</label>
<input
id="t3-install-step-mysqliManualConfiguration-port"
class="t3-install-form-input-text form-control"
type="text"
value="{mysqliManualConfigurationOptions.port}"
name="install[values][port]"
placeholder="3306"
/>
</div>
</div>
</div>
</f:if>
<f:if condition="{hasMysqliSocketManualConfiguration}">
<div id="mysqliSocketManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="mysqli" name="install[values][driver]"/>
<div class="row">
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliSocketManualConfiguration-username" class="form-label">
Username
</label>
<input
id="t3-install-step-mysqliSocketManualConfiguration-username"
class="form-control"
type="text"
value="{mysqliSocketManualConfigurationOptions.username}"
name="install[values][username]"
autocomplete="off"
placeholder="db-user"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-mysqliSocketManualConfiguration-password" class="form-label">
Password
</label>
<input
id="t3-install-step-mysqliSocketManualConfiguration-password"
class="form-control"
type="password"
value="{mysqliSocketManualConfigurationOptions.password}"
name="install[values][password]"
autocomplete="off"
placeholder="password"
/>
</div>
</div>
<input type="hidden" value="localhost" name="install[values][host]"/>
<div class="form-group">
<label for="t3-install-step-mysqliSocketManualConfiguration-socket" class="form-label">
Socket
</label>
<input
id="t3-install-step-mysqliSocketManualConfiguration-socket"
class="t3-install-form-input-text form-control"
type="text"
value="{mysqliSocketManualConfigurationOptions.socket}"
name="install[values][socket]"
placeholder="Default socket or enter name"
/>
</div>
</div>
</f:if>
<f:if condition="{hasPdoMysqlManualConfiguration}">
<div id="pdoMysqlManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="pdo_mysql" name="install[values][driver]"/>
<div class="row">
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlManualConfiguration-username" class="form-label">
Username
</label>
<input
id="t3-install-step-pdoMysqlManualConfiguration-username"
class="form-control"
type="text"
value="{mysqliManualConfigurationOptions.username}"
name="install[values][username]"
autocomplete="off"
placeholder="db-user"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlManualConfiguration-password" class="form-label">
Password
</label>
<input
id="t3-install-step-pdoMysqlManualConfiguration-password"
class="form-control"
type="password"
value="{pdoMysqlManualConfigurationOptions.password}"
name="install[values][password]"
autocomplete="off"
placeholder="password"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlManualConfiguration-host" class="form-label">
Host
</label>
<input
id="t3-install-step-pdoMysqlManualConfiguration-host"
class="t3-install-form-input-text form-control"
type="text"
value="{pdoMysqlManualConfigurationOptions.host}"
name="install[values][host]"
placeholder="127.0.0.1"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlManualConfiguration-port" class="form-label">
Port
</label>
<input
id="t3-install-step-pdoMysqlManualConfiguration-port"
class="t3-install-form-input-text form-control"
type="text"
value="{pdoMysqlManualConfigurationOptions.port}"
name="install[values][port]"
placeholder="port"
/>
</div>
</div>
</div>
</f:if>
<f:if condition="{hasPdoMysqlSocketManualConfiguration}">
<div id="pdoMysqlSocketManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="pdo_mysql" name="install[values][driver]"/>
<div class="row">
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlSocketManualConfiguration-username" class="form-label">
Username
</label>
<input
id="t3-install-step-pdoMysqlSocketManualConfiguration-username"
class="form-control"
type="text"
value="{pdoMysqlSocketManualConfigurationOptions.username}"
name="install[values][username]"
autocomplete="off"
placeholder="db-user"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-pdoMysqlSocketManualConfiguration-password" class="form-label">
Password
</label>
<input
id="t3-install-step-pdoMysqlSocketManualConfiguration-password"
class="form-control"
type="password"
value="{pdoMysqlSocketManualConfigurationOptions.password}"
name="install[values][password]"
autocomplete="off"
placeholder="password"
/>
</div>
</div>
<input type="hidden" value="localhost" name="install[values][host]"/>
<div class="form-group">
<label for="t3-install-step-pdoMysqlSocketManualConfiguration-socket" class="form-label">
Socket
</label>
<input
id="t3-install-step-pdoMysqlSocketManualConfiguration-socket"
class="t3-install-form-input-text form-control"
type="text"
value="{pdoMysqlSocketManualConfigurationOptions.socket}"
name="install[values][socket]"
placeholder="Default socket or enter name"
/>
</div>
</div>
</f:if>
<f:if condition="{hasPostgresManualConfiguration}">
<div id="postgresManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="pdo_pgsql" name="install[values][driver]"/>
<div class="form-group">
<label for="t3-install-step-postgresManualConfiguration-database" class="form-label">
Database
</label>
<input
id="t3-install-step-postgresManualConfiguration-database"
class="t3-install-form-input-text form-control"
type="text"
value="{postgresManualConfigurationOptions.database}"
name="install[values][database]"
placeholder="database"
/>
</div>
<div class="row">
<div class="form-group col-md-6">
<label for="t3-install-step-postgresManualConfiguration-username" class="form-label">
Username
</label>
<input
id="t3-install-step-postgresManualConfiguration-username"
class="form-control"
type="text"
value="{postgresManualConfigurationOptions.username}"
name="install[values][username]"
autocomplete="off"
placeholder="db-user"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-postgresManualConfiguration-password" class="form-label">
Password
</label>
<input
id="t3-install-step-postgresManualConfiguration-password"
class="form-control"
type="password"
value="{postgresManualConfigurationOptions.password}"
name="install[values][password]"
autocomplete="off"
placeholder="password"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-postgresManualConfiguration-host" class="form-label">
Host
</label>
<input
id="t3-install-step-postgresManualConfiguration-host"
class="t3-install-form-input-text form-control"
type="text"
value="{postgresManualConfigurationOptions.host}"
name="install[values][host]"
placeholder="127.0.0.1"
/>
</div>
<div class="form-group col-md-6">
<label for="t3-install-step-postgresManualConfiguration-port" class="form-label">
Port
</label>
<input
id="t3-install-step-postgresManualConfiguration-port"
class="t3-install-form-input-text form-control"
type="text"
value="{postgresManualConfigurationOptions.port}"
name="install[values][port]"
placeholder=""
/>
</div>
</div>
</div>
</f:if>
<f:if condition="{hasSqliteManualConfiguration}">
<div id="sqliteManualConfiguration" class="t3-install-driver-data" hidden>
<input type="hidden" value="pdo_sqlite" name="install[values][driver]"/>
</div>
</f:if>
<f:if condition="{hasConfigurationFromEnvironment}">
<div id="configurationFromEnvironment" class="t3-install-driver-data" hidden>
</div>
</f:if>
<div class="text-end">
<button type="submit" class="btn btn-primary t3js-installer-databaseConnect-execute">
Continue
</button>
</div>
</form>
</f:then>
<f:else>
<div class="t3js-message alert alert-danger" role="alert">
<h4 class="alert-title">No database driver found</h4>
<p class="alert-message">You have no database driver installed or enabled. Please install a driver in order to complete the database connection.</p>
</div>
</f:else>
</f:if>
</div>
</div>
</html>
@@ -0,0 +1,91 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-installer-database-data-execute-token="{executeDatabaseDataToken}">
<div class="typo3-install-content-body">
<h2>Create administrative user and specify site name</h2>
<p>
Use this account to log into the backend of your site.<br>
The password you provide for this account is also used to access the <strong>Install Tool</strong>.
</p>
<p>On this page you can also set a name for your new website.</p>
<div class="typo3-install-content-spacer"></div>
<div class="t3js-installer-databaseData-output"></div>
<div class="typo3-install-content-spacer"></div>
<form method="post" id="stepInstaller-databaseData" class="t3-install-form-label-before" spellcheck="false">
<input type="hidden" value="execute" name="install[set]" />
<div class="form-group">
<label for="username" class="form-label">Username</label>
<input
class="t3-install-form-input-text form-control"
name="install[values][username]"
id="username"
placeholder="admin"
autocomplete="off"
/>
</div>
<div class="form-group" style="position:relative">
<label for="password" class="form-label">Password</label>
<input
class="t3-install-form-input-text t3-install-form-password-strength form-control"
name="install[values][password]"
id="password"
type="password"
autocomplete="off"
placeholder="random password"
/>
<f:comment><!-- @todo: Add API for input group addons in floating forms--></f:comment>
<button
type="button"
class="t3-install-form-password-toggle btn btn-link"
data-toggle-target="#password" data-toggle-state="invisible"
style="position:absolute;bottom:.65em;right:.8em;outline:none;box-shadow:none"
aria-label="Toggle password visibility"
>
<core:icon identifier="actions-lock" size="small" />
<core:icon identifier="actions-eye" size="small" />
</button>
</div>
<f:be.infobox
title="Password security"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
>
If compromised, this account will provide an attacker with complete access to your installation.<br>
A strong password is recommended. Include lower and upper case characters, special characters and numbers. Your password must be at least eight characters long.
</f:be.infobox>
<div class="form-group">
<label for="email" class="form-label">Email address</label>
<input
type="email"
class="t3-install-form-input-text form-control"
name="install[values][email]"
id="email"
placeholder="you@me.com"
/>
</div>
<div class="form-group">
<label for="sitename" class="form-label">Site name</label>
<input
class="t3-install-form-input-text form-control"
name="install[values][sitename]"
id="sitename"
type="text"
value="{siteName}"
placeholder="Your new website"
/>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary t3js-installer-databaseData-execute">
Continue
</button>
</div>
</form>
</div>
</div>
</html>
@@ -0,0 +1,97 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-installer-database-select-execute-token="{executeDatabaseSelectToken}" data-installer-database-check-requirements-execute-token="{executeCheckDatabaseRequirementsToken}">
<div class="typo3-install-content-body">
<h2>Select a database</h2>
<div class="typo3-install-content-spacer"></div>
<div class="t3js-installer-databaseSelect-output"></div>
<div class="typo3-install-content-spacer"></div>
<f:if condition="{errors -> f:count()}">
<f:for each="{errors}" as="error">
<f:be.infobox
title="Exception"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}"
>
{error}
</f:be.infobox>
</f:for>
</f:if>
<form method="post" id="stepInstaller-databaseSelect" spellcheck="false">
<div class="form-group">
<div class="form-check">
<input
id="t3-install-form-db-select-type-existing"
type="radio"
name="install[values][type]"
value="existing"
checked="checked"
class="form-check-input"
/>
<label class="form-check-label" for="t3-install-form-db-select-type-existing">
Use an existing empty database:
</label>
</div>
<div class="form-group">
<label class="form-label" for="t3-install-step-database-existing">
Select a database
</label>
<select
id="t3-install-step-database-existing"
name="install[values][existing]"
class="form-select"
onfocus="document.getElementById('t3-install-form-db-select-type-existing').checked=true;"
>
<option value="">-- Choose --</option>
<f:for each="{databaseList}" as="database">
<f:if condition="{database.tables} || {database.readonly}">
<f:then>
<option value="{database.name}" disabled="disabled">{database.name} ({f:if(condition: database.readonly, then: 'readonly', else: '{database.tables} Tables')})</option>
</f:then>
<f:else>
<option value="{database.name}">{database.name}</option>
</f:else>
</f:if>
</f:for>
</select>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input
id="t3-install-form-db-select-type-new"
type="radio"
name="install[values][type]"
value="new"
class="form-check-input"
/>
<label class="form-check-label" for="t3-install-form-db-select-type-new">
Create a new database:
</label>
</div>
<div class="form-group">
<label class="form-label" for="t3-install-step-database-new">
Specify a name for your TYPO3 database
</label>
<input
id="t3-install-step-database-new"
class="t3-install-form-input-text form-control"
type="text"
name="install[values][new]"
checked="checked"
onfocus="document.getElementById('t3-install-form-db-select-type-new').checked=true;"
/>
</div>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary t3js-installer-databaseSelect-execute">
Continue
</button>
</div>
</form>
</div>
</div>
</html>
@@ -0,0 +1,116 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-installer-default-configuration-execute-token="{executeDefaultConfigurationToken}">
<div class="typo3-install-content-body">
<h2>Installation complete</h2>
<div class="typo3-install-content-spacer"></div>
<div class="t3js-installer-defaultConfiguration-output"></div>
<div class="typo3-install-content-spacer"></div>
<h3>Initial site setup</h3>
<p>
Your TYPO3 installation is ready. You can now set up your first website.
</p>
<form method="post" spellcheck="false">
<f:if condition="{distributions.active}">
<f:then>
<div class="panel panel-default">
<h3 class="panel-heading">Active distributions</h3>
<div class="panel-body">
<p>
These pre-configured distribution will have their demo content, pages, and site configuration being imported.
</p>
<ul>
<f:for each="{distributions.active}" as="distribution">
<li>
<strong>{distribution.title}</strong>
<f:if condition="{distribution.description}">
<br /><small>{distribution.description}</small>
</f:if>
</li>
</f:for>
</ul>
</div>
</div>
</f:then>
<f:else>
<f:if condition="{distributions.inactive}">
<div class="panel panel-default">
<h3 class="panel-heading">Available distributions</h3>
<div class="panel-body">
<p>
Import a pre-configured distribution with demo content, pages, and site configuration.
</p>
<f:for each="{distributions.inactive}" as="distribution" iteration="iterator">
<div class="form-check">
<input class="form-check-input" type="radio" id="create-site-{distribution.packageKey}" name="install[values][sitesetup]" value="createsite:{distribution.packageKey}"{f:if(condition: iterator.isFirst, then: ' checked="checked"')} />
<label class="form-check-label" for="create-site-{distribution.packageKey}">
<strong>{distribution.title}</strong>
<f:if condition="{distribution.description}">
<br /><small>{distribution.description}</small>
</f:if>
</label>
</div>
</f:for>
</div>
</div>
</f:if>
<div class="panel panel-default">
<h3 class="panel-heading">Other options</h3>
<div class="panel-body">
<f:if condition="!{composerMode}">
<div class="form-check">
<input class="form-check-input" type="radio" id="load-distributions" name="install[values][sitesetup]" value="loaddistribution" />
<label class="form-check-label" for="load-distributions">
<strong>Browse all distributions</strong>
<br /><small>View a list of available distributions after login</small>
</label>
</div>
</f:if>
<f:if condition="{offerToCreateBasicSite}">
<div class="form-check">
<input class="form-check-input" type="radio" id="create-site" name="install[values][sitesetup]" value="createsite"{f:if(condition: '{distributions.inactive -> f:count()} === 0', then: ' checked="checked"')} />
<label class="form-check-label" for="create-site">
<strong>Create a basic starter website</strong>
<br /><small>Set up a root page, site configuration and basic content rendering</small>
</label>
</div>
</f:if>
<div class="form-check">
<input class="form-check-input" type="radio" id="do-nothing" name="install[values][sitesetup]" value="donothing" />
<label class="form-check-label" for="do-nothing">
<strong>Skip setup</strong>
<br /><small>Do nothing, take me straight to the backend</small>
</label>
</div>
</div>
</div>
</f:else>
</f:if>
<div class="panel panel-default">
<h3 class="panel-heading">Pre-configured backend user groups</h3>
<div class="panel-body">
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" id="create-groups" name="install[values][backendgroups]" value="creategroups" />
<label class="form-check-label" for="create-groups">
<strong>Create default backend user groups</strong>
<br /><small>Pre-configured "Editor" and "Advanced Editor" groups, ready to use</small>
</label>
</div>
</div>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary t3js-installer-defaultConfiguration-execute">
Finish installation
</button>
</div>
</form>
</div>
</div>
</html>
@@ -0,0 +1,36 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="typo3-install-content-body">
<h2>Environment Overview</h2>
<p>First the Install Wizard needs to inspect your web server and identify any issues that may prevent TYPO3 from running correctly.</p>
<div class="t3js-installer-environment-details" hidden>
<h3>Problems Detected</h3>
</div>
<div class="row justify-content-between">
<form class="col-auto t3js-installer-environmentFolders-bad" hidden>
<div class="typo3-install-content-spacer-small">
<button type="submit" class="btn btn-default t3js-installer-environmentFolders-retry">
Scan environment again
</button>
</div>
</form>
<form class="col-auto t3js-installer-environmentFolders-bad" hidden>
<div class="typo3-install-content-spacer-small">
<button type="submit" class="btn btn-danger t3js-installer-environmentFolders-execute float-end">
Continue with errors
</button>
</div>
</form>
<form class="col-auto t3js-installer-environmentFolders-good" hidden>
<div class="typo3-install-content-spacer-small">
<button type="submit" class="btn btn-success t3js-installer-environmentFolders-execute float-end">
No problems detected, continue with installation
</button>
</div>
</form>
</div>
</div>
</html>
@@ -0,0 +1,19 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="typo3-install-content-body">
<h2>Thank you for choosing TYPO3</h2>
<p>The Installation Wizard will guide you through the necessary steps required to install TYPO3 on your web server.</p>
<p>To begin the installation, create an empty file called
<code>FIRST_INSTALL</code> in the document root of your web server.</p>
<p class="text-variant">
<strong>Please note:</strong>
The filename is case-sensitive, and it will be deleted once the installation process is complete.
</p>
<f:be.infobox title="New to TYPO3?" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
We recommend reading the
<a href="https://docs.typo3.org/Home/GettingStarted.html" target="_blank" rel="noreferrer"><u>Getting Started Documentation</u></a>.
</f:be.infobox>
</div>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en"
{f:if(condition: colorScheme, then: ' data-color-scheme="{colorScheme}"')}{f:if(condition: theme, then: ' data-theme="{theme}"')}
data-icon-cache-identifier="{iconCacheIdentifier}"
>
<head>
<title>Install Tool on site {siteName}</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="{f:uri.resource(path: 'EXT:backend/Resources/Public/Css/backend.css')}?{bust}" />
<link rel="stylesheet" href="{f:uri.resource(path: 'EXT:backend/Resources/Public/Css/webfonts.css')}?{bust}" />
<link rel="icon" type="image/vnd.microsoft.icon" href="{f:uri.resource(path: 'EXT:install/Resources/Public/Icons/favicon.ico')}?{bust}" />
{importmap->f:format.raw()}
<script type="module" src="{initModule}"></script>
</head>
<body class="t3js-body" data-controller="{controller}" data-context="{context}">
<div id="t3js-ui-block" class="ui-block">
<core:icon identifier="spinner-circle" size="large" />
<h2 id="t3js-ui-block-detail">Initializing</h2>
</div>
</body>
</html>
@@ -0,0 +1,174 @@
<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"
>
<f:if condition="{context} == 'backend'">
<f:then>
<div class="module module-layout-normal" data-module-id="" data-module-name="{moduleName}">
<div class="module-docheader module-docheader-navigation t3js-module-docheader-navigation">
<div class="module-docheader-column module-docheader-column-breadcrumb"></div>
<div class="module-docheader-column"></div>
</div>
<div class="module-body t3js-module-body">
<div class="module-body-container t3js-module-body-container">
<div id="t3js-ui-block" class="ui-block">
<core:icon identifier="spinner-circle" size="large" />
<h2 id="t3js-ui-block-detail">Loading cards</h2>
</div>
</div>
</div>
</div>
</f:then>
<f:else>
<div class="scaffold t3js-scaffold">
<div class="scaffold-header t3js-scaffold-header">
<div class="scaffold-topbar t3js-scaffold-topbar">
<div class="topbar t3js-topbar">
<typo3-backend-sidebar-toggle
class="topbar-button topbar-button-modulemenu"
label-collapse="Collapse sidebar"
label-expand="Expand sidebar"
></typo3-backend-sidebar-toggle>
<a class="topbar-site" href="" target="_top" title="TYPO3.CMS">
<span class="topbar-site-logo">
<img src="{f:uri.resource(path: 'EXT:install/Resources/Public/Images/typo3_logo_orange.svg')}" width="22" height="22" title="TYPO3 Content Management System" alt="TYPO3 Content Management System">
</span>
<span class="topbar-site-title">
<span class="topbar-site-name">Install Tool<f:if condition="{siteName}"> on site: {siteName}</f:if></span>
<span class="topbar-site-version">TYPO3 CMS {currentTypo3Version}</span>
</span>
</a>
</div>
</div>
</div>
<div class="scaffold-sidebar t3js-scaffold-sidebar">
<div class="sidebar-container">
<div class="sidebar-component">
<div class="modulemenu t3js-modulemenu" role="menubar" data-role="modulemenu" id="modulemenu">
<ul class="modulemenu-group-container">
<li data-level="1">
<a
href="?__typo3_install&{f:format.urlencode(value: 'install[controller]')}=maintenance"
title="Maintenance"
class="modulemenu-action"
role="menuitem"
data-installroute-controller="maintenance"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-install-maintenance" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Maintenance</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li data-level="1">
<a
href="?__typo3_install&{f:format.urlencode(value: 'install[controller]')}=settings"
title="Settings"
class="modulemenu-action"
role="menuitem"
data-installroute-controller="settings"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-install-settings" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Settings</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li data-level="1">
<a
href="?__typo3_install&{f:format.urlencode(value: 'install[controller]')}=upgrade"
title="Upgrade"
class="modulemenu-action"
role="menuitem"
data-installroute-controller="upgrade"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-install-upgrade" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Upgrade</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li data-level="1">
<a
href="?__typo3_install&{f:format.urlencode(value: 'install[controller]')}=environment"
title="Environment"
class="modulemenu-action"
role="menuitem"
data-installroute-controller="environment"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-install-environment" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Environment</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li class="modulemenu-group-spacer"></li>
<li data-level="1">
<a
href="{backendUrl}"
title="Switch to Backend"
class="modulemenu-action"
role="menuitem"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-web" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Switch to Backend</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li data-level="1">
<a
href="{frontendUrl}"
title="Switch to Frontend"
class="modulemenu-action"
role="menuitem"
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="module-site" size="medium" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Switch to Frontend</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
<li class="modulemenu-group-spacer"></li>
<li data-level="1">
<a
title="Logout"
class="modulemenu-action t3js-login-lockInstallTool"
role="menuitem"
id="logout"
href=""
>
<span class="modulemenu-icon" aria-hidden="true"><core:icon identifier="actions-logout" alternativeMarkupIdentifier="inline"/></span>
<span class="modulemenu-name">Logout</span>
<span class="modulemenu-indicator" aria-hidden="true"></span>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="scaffold-content t3js-scaffold-content">
<div class="scaffold-content-module t3js-scaffold-content-module">
<div class="module">
<div class="module-body t3js-module-body">
<div class="module-body-container t3js-module-body-container">
<div id="t3js-ui-block" class="ui-block">
<core:icon identifier="spinner-circle" size="large" />
<h2 id="t3js-ui-block-detail">Loading cards</h2>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="scaffold-overlay"></div>
</div>
</f:else>
</f:if>
</html>
@@ -0,0 +1,43 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="typo3-install-container">
<div class="typo3-install-content">
<div class="typo3-install-content-header">
<img src="{f:uri.resource(path: 'EXT:core/Resources/Public/Images/typo3_light_dark.svg')}" width="130" class="logo" alt="TYPO3 logo" />
<h1>The Install Tool is locked</h1>
</div>
<div class="typo3-install-content-body">
<div class="callout callout-warning">
<div class="callout-content">
<div class="callout-title">The Install Tool is locked</div>
<div class="callout-body">
<ul>
<li>
<strong>If you are installing TYPO3</strong>, please create the file
<code>FIRST_INSTALL</code> in the document root of your web server.
New to TYPO3? We recommend reading the
<a href="https://docs.typo3.org/permalink/t3start:start" target="_blank" rel="noreferrer"><u>Getting Started Documentation</u></a>.
</li>
<li>
<strong>For an existing TYPO3 installation</strong>, please create the file
<code>ENABLE_INSTALL_TOOL</code> in the directory <code>{enableInstallToolPath}</code>.
</li>
</ul>
<p>
Either file must be writable by the web server user.
The filename is case-sensitive. The file can be empty.
</p>
<p>
<strong>Security note:</strong>
When you are finished with your task, you should rename or delete any <code>FIRST_INSTALL</code>
and <code>ENABLE_INSTALL_TOOL</code> files. They will automatically be deleted if you log out of
the Install Tool or if the file is older than one hour.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</html>
@@ -0,0 +1,73 @@
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:i="http://typo3.org/ns/TYPO3/CMS/Install/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="typo3-install-container">
<div class="typo3-install-content">
<div class="typo3-install-content-header">
<img src="{f:uri.resource(path: 'EXT:core/Resources/Public/Images/typo3_light_dark.svg')}" width="130" class="logo" alt="TYPO3 logo" />
<h1>Login to TYPO3 Install Tool</h1>
<f:if condition="{siteName}"><p>Site: {siteName}</p></f:if>
</div>
<div class="typo3-install-content-body">
<form method="post" id="t3-install-form-login" data-login-token="{loginToken}" spellcheck="false">
<div class="form-group">
<label class="form-label" for="t3-install-form-password">Password</label>
<input class="form-control t3-install-form-input-text" id="t3-install-form-password" type="password" name="install[password]" autofocus="autofocus" />
</div>
<div class="form-group">
<button type="button" class="btn btn-primary t3js-login-login">
Login
</button>
<f:if condition="!{installToolEnableFilePermanent}">
<button type="button" class="btn btn-default t3js-login-lockInstallTool">
<core:icon identifier="actions-lock" size="small" /> Lock Install Tool again
</button>
</f:if>
</div>
</form>
<div class="t3js-login-output"></div>
<f:if condition="{installToolEnableFilePermanent}">
<div class="callout callout-danger">
<div class="callout-content">
<div class="callout-title">Install Tool is permanently enabled</div>
<div class="callout-body">
The Install Tool is permanently enabled because our <code>ENABLE_INSTALL_TOOL</code> file contains
the text <em>KEEP_FILE</em>. <strong>Never use this on production systems!</strong>
</div>
</div>
</div>
</f:if>
<div class="callout callout-info">
<div class="callout-content">
<div class="callout-title">Information</div>
<div class="callout-body">
By default the Install Tool password is the one specified during the installation.
</div>
</div>
</div>
<div class="callout callout-warning">
<div class="callout-content">
<div class="callout-title">Important</div>
<div class="callout-body">
If you don't know the current password, you can set a new one by setting the value of
<code>$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']</code> in <code>{configFile}</code> to
the hash value of the password you desire, which will be shown if you enter the desired password
in this form and submit it.
<br /><br />
You can also use the <code>bin/typo3 install:password:set</code> command to set this password via
the command line interface (CLI).
<br /><br />
This password gives an attacker full control over your instance if cracked. It should be strong
(include lower and upper case characters, special characters and numbers) and at least eight characters long.
</div>
</div>
</div>
</div>
</div>
</div>
</html>
@@ -0,0 +1,99 @@
<f:layout name="Cards"/>
<f:section name="headline">
<h1>Maintenance</h1>
</f:section>
<f:section name="cards">
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Flush TYPO3 and PHP Cache', subtitle: 'Caching', icon: 'EXT:install/Resources/Public/Icons/modules/install-clear-cache.svg'}" />
<div class="card-body">
<p class="card-text">Clear all registered TYPO3 caches, including opcode and dependency injection cache.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-inline="1" data-import="@typo3/install/module/maintenance/cache.js">Flush cache</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Analyze Database Structure', subtitle: 'Database', icon: 'EXT:install/Resources/Public/Icons/modules/install-database-analyze.svg'}" />
<div class="card-body">
<p class="card-text">Compare and update the database table and field definitions of your installation against the specification defined for activated extension.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/maintenance/database-analyzer.js">Analyze database&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Remove Temporary Assets', subtitle: 'Caching', icon: 'EXT:install/Resources/Public/Icons/modules/install-clear-files.svg'}" />
<div class="card-body">
<p class="card-text">Clear temporary files including concatenated JS/CSS files and processed images.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/maintenance/clear-typo3temp-files.js">Scan temporary files&hellip;</button>
</div>
</div>
<div class="card card-size-small {f:if(condition:'{composerMode}', then: 'card-disabled')}">
<f:render partial="Card/Header" arguments="{ title: 'Rebuild PHP Autoload Information', subtitle: 'Caching', icon: 'EXT:install/Resources/Public/Icons/modules/install-clear-autoload.svg'}" />
<div class="card-body">
<p class="card-text">Reset autoload information for active third party extensions.</p>
</div>
<f:if condition="{composerMode}">
<f:then>
<div class="card-footer text-variant">
This feature is unavailable because the installation is running in Composer mode.
Guide: <a href="https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Autoloading/Index.html#loading-classes-with-composer-mode" target="_blank" rel="noreferrer">Composer dumpautoload</a>.
</div>
</f:then>
<f:else>
<div class="card-footer">
<button type="button" class="btn btn-default" data-inline="1" data-import="@typo3/install/module/maintenance/dump-autoload.js">Dump autoload</button>
</div>
</f:else>
</f:if>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Clear Persistent Database Tables', subtitle: 'Database', icon: 'EXT:install/Resources/Public/Icons/modules/install-clear-database.svg'}" />
<div class="card-body">
<p class="card-text">Truncate persistent database tables which are not related to caching.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/maintenance/clear-tables.js">Scan tables&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Check and Update Reference Index', subtitle: 'Database', icon: 'EXT:install/Resources/Public/Icons/modules/install-database-analyze.svg'}" />
<div class="card-body">
<p class="card-text">Verify the reference index for inconsistencies or rebuild it to update database relations.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/maintenance/reference-index.js">Manage reference index&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Create Administrative User', subtitle: 'Backend Users', icon: 'EXT:install/Resources/Public/Icons/modules/install-create-admin.svg'}" />
<div class="card-body">
<p class="card-text">Create new administrative users and grant them system maintainer privileges (optional).</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="small" data-import="@typo3/install/module/maintenance/create-admin.js">Create Administrator&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Reset Backend User Preferences', subtitle: 'Backend Users', icon: 'EXT:install/Resources/Public/Icons/modules/install-reset-user.svg'}" />
<div class="card-body">
<p class="card-text">Clear preferences and settings for all backend users. This action permanently deletes all user-specific data in the database table <code>be_users</code>.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-inline="1" data-import="@typo3/install/module/maintenance/reset-backend-user-uc.js">Reset backend user preferences</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Manage Language Packs', subtitle: 'Language', icon: 'EXT:install/Resources/Public/Icons/modules/install-manage-language.svg'}" />
<div class="card-body">
<p class="card-text">Download and update language packs for installed extensions and the TYPO3 backend.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/maintenance/language-packs.js">Manage languages&hellip;</button>
</div>
</div>
</f:section>
@@ -0,0 +1,35 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Clear semi-temporary data stored in persistent database tables that are not affected by the
<strong>"Clear All Cache"</strong> action.
</p>
<p>
This removes all records from the selected tables and may be useful in specific maintenance scenarios.
</p>
<p>
<strong>Use with caution.</strong> Clearing these tables can affect site functionality, for example by logging out users,
removing session or basket data, and deleting log information.
</p>
<div class="t3js-module-content" data-clear-tables-clear-token="{clearTablesClearToken}">
<div class="module-action-list t3js-clearTables-stat-container"></div>
</div>
<template id="t3js-clearTables-stat-template">
<div class="module-action-item">
<div class="module-action-item-body">
<div class="module-action-item-title t3js-clearTables-stat-description">{clearTableStatistic.description}</div>
<div class="module-action-item-description">
<strong class="t3js-clearTables-stat-rows"></strong> row(s) found in table <code class="t3js-clearTables-stat-name"></code>
</div>
</div>
<div class="module-action-item-action">
<button type="button" class="btn btn-default btn-sm t3js-clearTables-clear">
<core:icon identifier="actions-delete" size="small" /> Delete rows
</button>
</div>
</div>
</template>
</html>
@@ -0,0 +1,36 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Remove processed files and cached images stored by TYPO3 to free up disk space.
</p>
<p>
TYPO3 stores processed files (such as image variants and thumbnails) in a dedicated directory
that can grow quickly over time.<br>
Use this action to delete these files. Afterward, clear the cache database tables to ensure consistency.
</p>
<p>
The File Abstraction Layer (FAL) also keeps database records for processed files. If image processing settings
have changed (see <strong>System → Settings → Configure Installation-Wide Options → [GFX]</strong>),
removing processed files forces them to be regenerated with the updated configuration.
</p>
<div class="t3js-module-content" data-clear-typo3temp-delete-token="{clearTypo3tempFilesToken}">
<div class="module-action-list t3js-clearTypo3temp-stat-container"></div>
</div>
<template id="t3js-clearTypo3temp-stat-template">
<div class="module-action-item">
<div class="module-action-item-body">
<div class="module-action-item-description">
<strong class="t3js-clearTypo3temp-stat-directory"></strong> contains <output class="t3js-clearTypo3temp-stat-numberOfFiles"></output> files
</div>
</div>
<div class="module-action-item-action">
<button type="button" class="btn btn-default btn-sm t3js-clearTypo3temp-delete">
<core:icon identifier="actions-delete" size="small" /> Delete files
</button>
</div>
</div>
</template>
</html>
@@ -0,0 +1,78 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-create-admin-token="{createAdminToken}">
<form action="" id="t3js-createAdmin-form" method="post" spellcheck="false">
<div class="form-group">
<label for="t3-install-admin-username" class="form-label">Username:</label>
<input
id="t3-install-admin-username"
class="t3-install-form-input-text t3js-createAdmin-user form-control"
type="text"
autocomplete="off"
required
/>
</div>
<div class="form-group">
<label for="t3-install-admin-password" class="form-label">Password:</label>
<input
id="t3-install-admin-password"
class="t3-install-form-input-text t3-install-form-password-strength t3js-createAdmin-password form-control"
type="password"
autocomplete="off"
required
/>
<f:if condition="{passwordPolicyRequirements}">
<p class="mt-2 mb-1 text-variant">Password must match the following requirements:</p>
<ul>
<f:for each="{passwordPolicyRequirements}" as="requirement">
<li class="text-variant">{requirement}</li>
</f:for>
</ul>
</f:if>
</div>
<div class="form-group">
<label for="t3-install-admin-password-repeat" class="form-label">Repeat password:</label>
<input
id="t3-install-admin-password-repeat"
class="t3-install-form-input-text t3js-createAdmin-password-check form-control"
type="password"
autocomplete="off"
required
/>
</div>
<div class="form-group">
<label for="t3-install-admin-realname" class="form-label">Name</label>
<input
type="text"
class="t3-install-form-input-text t3js-createAdmin-realname form-control"
name="realName"
id="t3-install-admin-realname"
/>
</div>
<div class="form-group">
<label for="t3-install-admin-email" class="form-label">Email address</label>
<input
type="email"
class="t3-install-form-input-text t3js-createAdmin-email form-control"
name="email"
id="t3-install-admin-email"
/>
</div>
<div class="form-group">
<div class="form-check">
<input
class="t3-install-form-input-checkbox t3js-createAdmin-system-maintainer form-check-input"
type="checkbox"
id="typo3-install-admin-add-as-system-maintainer"
/>
<label for="typo3-install-admin-add-as-system-maintainer" class="form-check-label">
Add as system maintainer
</label>
</div>
</div>
<div class="t3js-createAdmin-output"></div>
</form>
</div>
</html>
@@ -0,0 +1,55 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Compare the current database structure with the definitions provided by all loaded extensions
(<code>ext_tables.sql</code>).<br>
Apply suggested changes to update, modify, or remove tables and fields as needed.
</p>
<div class="t3js-databaseAnalyzer-notification"></div>
<div class="t3js-module-content" data-database-analyzer-execute-token="{databaseAnalyzerExecuteToken}">
<div class="t3js-databaseAnalyzer-output"></div>
</div>
<template id="t3js-databaseAnalyzer-suggestion-block">
<fieldset>
<h4 class="t3js-databaseAnalyzer-suggestion-block-legend"></h4>
<ol class="list-unstyled t3js-databaseAnalyzer-suggestion-list">
<li class="t3-install-form-label-after">
<div class="form-check">
<input
type="checkbox"
class="form-check-input t3js-databaseAnalyzer-suggestion-block-checkbox"
/>
<label class="form-check-label t3js-databaseAnalyzer-suggestion-block-label">select/deselect all</label>
</div>
</li>
</ol>
</fieldset>
</template>
<template id="t3js-databaseAnalyzer-suggestion-line-template">
<li class="t3js-databaseAnalyzer-suggestion-line t3-install-form-label-after">
<div class="form-check">
<input
type="checkbox"
class="form-check-input t3js-databaseAnalyzer-suggestion-line-checkbox"
value="1"
/>
<label class="form-check-label t3js-databaseAnalyzer-suggestion-line-label">
<span class="t3js-databaseAnalyzer-suggestion-line-statement"></span>
<span class="t3js-databaseAnalyzer-suggestion-line-current" style="display:none;">
<br>
Current value: <span class="t3js-databaseAnalyzer-suggestion-line-current-value"></span>
</span>
<span class="t3js-databaseAnalyzer-suggestion-line-count" style="display:none;">
<br>
Rows in table: <span class="t3js-databaseAnalyzer-suggestion-line-count-value"></span>
</span>
</label>
</div>
</li>
</template>
</html>
@@ -0,0 +1,33 @@
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
<div
class="t3js-module-content"
data-language-packs-activate-language-token="{languagePacksActivateLanguageToken}"
data-language-packs-deactivate-language-token="{languagePacksDeactivateLanguageToken}"
data-language-packs-update-pack-token="{languagePacksUpdatePackToken}"
data-language-packs-update-iso-times-token="{languagePacksUpdateIsoTimesToken}"
data-configuration-is-writable="{f:if(condition: isWritable, then: 'true', else: 'false')}"
>
<p>
Manage available language packs for your TYPO3 installation.
</p>
<p>
View available languages (excluding the default English), enable or disable localizations, and update language packs
from the <a target="_blank" rel="noreferrer" href="https://localize.typo3.org/xliff/status.html">
<u>TYPO3 translation server</u></a>.
</p>
<p>
Missing or incorrect translations can be improved by contributing through
<a target="_blank" rel="noreferrer" href="https://crowdin.com/profile/TYPO3">
<u>Crowdin</u></a>. See the <a target="_blank" rel="noreferrer" href="https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Localization/TranslationServer/Crowdin.html">
<u>TYPO3 documentation</u></a> for details.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<div class="t3js-languagePacks-notifications"></div>
<div class="t3js-languagePacks-output"></div>
<div class="t3js-languagePacks-mainContent"></div>
</div>
</html>
@@ -0,0 +1,31 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Check and update the reference index, which tracks relations between database records in TYPO3.<br>
Use this tool to verify the integrity of existing references or to rebuild the index to ensure all relations are correctly recorded.
</p>
<p>
<strong>Check:</strong> Verifies the reference index and reports issues without making changes.<br>
<strong>Update:</strong> Rebuilds the entire reference index. This may take some time on large installations.
</p>
<div class="t3js-module-content mb-4" data-reference-index-token="{referenceIndexToken}">
<div class="t3js-referenceIndex-result"></div>
</div>
<f:be.infobox
title="Using the command line interface"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
>
<p>You can also run the check as a shell script using CLI if the processing takes longer than the PHP max_execution_time allows.</p>
<p>
To check the reference index use:<br>
<code>php {binaryPath} referenceindex:update -c</code>
</p>
<p>
To update the reference index use:<br>
<code>php {binaryPath} referenceindex:update</code>
</p>
</f:be.infobox>
</html>
@@ -0,0 +1,66 @@
<f:layout name="Cards"/>
<f:section name="headline">
<h1>Settings</h1>
</f:section>
<f:section name="header">
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
</f:section>
<f:section name="cards">
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Extension Configuration', subtitle: 'Global Configuration', icon: 'EXT:install/Resources/Public/Icons/modules/install-extension-settings.svg'}" />
<div class="card-body">
<p class="card-text">Configure settings for enabled extensions.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/settings/extension-configuration.js">Configure extensions&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Change Install Tool Password', subtitle: 'Access', icon: 'EXT:install/Resources/Public/Icons/modules/install-password.svg'}" />
<div class="card-body">
<p class="card-text">Set a new password for the Install Tool when accessed in Standalone mode.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="small" data-import="@typo3/install/module/settings/change-install-tool-password.js">Change Install Tool Password&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Manage System Maintainers', subtitle: 'Access', icon: 'EXT:install/Resources/Public/Icons/modules/install-manage-maintainer.svg'}" />
<div class="card-body">
<p class="card-text">Specify which backend administrators can access System modules and the Install Tool in Standalone Mode.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="medium" data-import="@typo3/install/module/settings/system-maintainer.js">Manage System Maintainers&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Configuration Presets', subtitle: 'Global Configuration', icon: 'EXT:install/Resources/Public/Icons/modules/install-manage-presets.svg'}" />
<div class="card-body">
<p class="card-text">Configure image processing, debug/live mode and mail settings.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/settings/presets.js">Choose Preset&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Feature Toggles', subtitle: 'Global Configuration', icon: 'EXT:install/Resources/Public/Icons/modules/install-manage-features.svg'}" />
<div class="card-body">
<p class="card-text">Enable and disable core features.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-modal-size="medium" data-import="@typo3/install/module/settings/features.js">Configure Features&hellip;</button>
</div>
</div>
<div class="card card-size-small">
<f:render partial="Card/Header" arguments="{ title: 'Configure Installation-Wide Options', subtitle: 'Global Configuration', icon: 'EXT:install/Resources/Public/Icons/modules/install-manage-settings.svg'}" />
<div class="card-body">
<p class="card-text">Modify settings written to <code>system/settings.php</code>.</p>
</div>
<div class="card-footer">
<button type="button" class="btn btn-default" data-import="@typo3/install/module/settings/local-configuration.js">Configure options&hellip;</button>
</div>
</div>
</f:section>
@@ -0,0 +1,39 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Set a new password for the Install Tool. The password hash is stored in <code>system/settings.php</code>,
and replaces the previously configured password.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<div class="t3js-module-content" data-install-tool-token="{changeInstallToolPasswordToken}">
<form action="" id="t3js-changeInstallToolPassword-form" method="post" spellcheck="false">
<div class="form-group">
<label for="t3-install-tool-password" class="form-label">Enter new password:</label>
<input
id="t3-install-tool-password"
class="t3-install-form-input-text t3-install-form-password-strength t3js-changeInstallToolPassword-password form-control"
type="password"
autocomplete="off"
required
{f:if(condition: '!{isWritable}', then: 'disabled')}
/>
</div>
<div class="form-group">
<label for="t3-install-tool-password-repeat" class="form-label">Repeat password:</label>
<input
id="t3-install-tool-password-repeat"
class="t3-install-form-input-text t3js-changeInstallToolPassword-password-check form-control"
type="password"
autocomplete="off"
required
{f:if(condition: '!{isWritable}', then: 'disabled')}
/>
</div>
<div class="t3js-changeInstallToolPassword-output"></div>
</form>
</div>
</html>
@@ -0,0 +1,31 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="t3js-module-content" data-extension-configuration-write-token="{extensionConfigurationWriteToken}">
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<div class="t3js-extensionConfiguration-output"></div>
<div class="form-group">
<label
for="extension-configuration-search"
class="visually-hidden"
>
Filter by
</label>
<input
id="extension-configuration-search"
type="search"
autocomplete="off"
class="form-control t3js-extensionConfiguration-search"
placeholder="search setting"
>
</div>
<div class="panel-group" role="tablist" aria-multiselectable="true">
<f:for each="{extensionsWithConfigurations}" as="extensionData" key="extensionKey">
<f:render partial="Settings/ExtensionConfiguration/ExtensionForm" arguments="{_all}"/>
</f:for>
</div>
</div>
</html>
@@ -0,0 +1,41 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Feature toggles allow new TYPO3 Core functionalities to be activated for testing on upgraded installations,
while maintaining the previous behaviour. These features are enabled by default on new TYPO3 installations.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<h2>Available features</h2>
<div class="t3js-module-content" data-features-save-token="{featuresSaveToken}">
<form method="post">
<div class="card-container">
<f:for each="{features}" as="feature" iteration="iterator">
<div class="card card-size-large">
<div class="card-header">
<h3>{feature.label}</h3>
</div>
<div class="card-body">
<div class="form-check form-switch">
<input
type="checkbox"
class="form-check-input"
value="1"
name="install[values][{feature.name}]"
id="t3-install-tool-features-{feature.name}"
{f:if(condition: '{feature.value} == 1', then: 'checked="checked"')}
{f:if(condition: '!{isWritable}', then: 'disabled')}
/>
<label class="form-check-label" for="t3-install-tool-features-{feature.name}">
<p>{feature.description -> f:sanitize.html()}</p>
<strong>Default setting: {f:if(condition: '{feature.default} == 1', then: 'Enabled', else: 'Disabled')}</strong>
</label>
</div>
</div>
</div>
</f:for>
</div>
</form>
</div>
</html>
@@ -0,0 +1,37 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
TYPO3 writes modified values to the file system/settings.php.
You can manually override most configuration options by storing them in the optional file system/additional.php.
The TYPO3 Core does not change the content of this file.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<div class="t3js-module-content" data-local-configuration-write-token="{localConfigurationWriteToken}">
<div class="form-group">
<label
for="localconfiguration-search"
class="visually-hidden"
>
Filter by
</label>
<input
id="localconfiguration-search"
type="search"
autocomplete="off"
class="form-control t3js-localConfiguration-search"
placeholder="search setting"
>
</div>
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<f:for each="{localConfigurationData}" as="sectionData" key="sectionName">
<f:if condition="{sectionData.items}">
<f:render partial="Settings/LocalConfiguration/SubSection" arguments="{_all}"/>
</f:if>
</f:for>
</div>
</div>
</html>
@@ -0,0 +1,30 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Review and apply recommended configuration presets based on the detected environment setup.
</p>
<p>
TYPO3 can also run in a specific application context defined through an environment variable
in the web server configuration. This context can be accessed in <code>system/additional.php</code>
or in TypoScript to customize configuration accordingly.
</p>
<p>
Changed values are written to <code>system/settings.php</code>. The optional file
<code>system/additional.php</code> is not managed by the TYPO3 core and may override certain
settings. Administrators must maintain this file manually and should use it with caution.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<div class="t3js-module-content" data-presets-activate-token="{presetsActivateToken}" data-presets-content-token="{presetsGetContentToken}">
<form method="post">
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<f:for each="{presetFeatures}" as="feature">
<f:render partial="Settings/Presets/{feature.name}" arguments="{_all}"/>
</f:for>
</div>
</form>
</div>
<div class="t3js-presets-output"></div>
</html>
@@ -0,0 +1,40 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<p>
Define backend administrative users who will have full access to the System modules in the backend.
Note that all backend administrative users have access to this module when the system is running in <strong>Development mode</strong>.
</p>
<f:render partial="Generic/ConfigurationNotWritable" arguments="{_all}"/>
<f:if condition="{systemMaintainerIsDevelopmentContext}">
<div class="alert alert-info">
<div class="alert-message">
This TYPO3 instance is set to "Development" context, all backend admin users
can see the system maintenance related main module entries.
</div>
</div>
</f:if>
<div class="t3js-module-content" data-system-maintainer-write-token="{systemMaintainerWriteToken}">
<div class="form-group">
<div class="input-group flex-nowrap">
<span class="input-group-text">System Maintainer:</span>
<select-pure
multiple
default-label="Select system maintainers"
{f:if(condition: '!{isWritable}', then: 'disabled')}
class="t3js-systemMaintainer-select-pure">
<f:for each="{users}" as="user">
<option-pure value="{user.uid}" {f:if(condition: user.isSystemMaintainer, then: 'selected')}>
{f:if(condition: user.disable, then: '[DISABLED] ')} {user.username}
</option-pure>
</f:for>
</select-pure>
</div>
</div>
<div class="t3js-systemMaintainer-output"></div>
</div>
</html>
@@ -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>