TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:34 +02:00
commit 8a3bef5a34
61 changed files with 4603 additions and 0 deletions
@@ -0,0 +1,113 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<h1>{f:translate(key:'reports.messages:contentStatistics.title')}</h1>
<p class="lead">{f:translate(key:'reports.messages:contentStatistics.description')}</p>
<f:if condition="{data.error}">
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}">{f:translate(key:'reports.messages:contentStatistics.existingElements.error')}</f:be.infobox>
</f:if>
<f:if condition="{data.exists}">
<h2>{f:translate(key:'reports.messages:contentStatistics.existingElements.header')}</h2>
<p>{f:translate(key:'reports.messages:contentStatistics.existingElements.description')}</p>
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">{f:translate(key:'reports.messages:contentStatistics.existingElements.explanation')}</f:be.infobox>
<f:for each="{data.exists}" as="groupItem" key="group">
<f:if condition="{groupItem.elements}">
<f:if condition="{groupItem.header}">
<h3>{f:translate(key:groupItem.header, default:groupItem.header)} ({groupItem.elements -> f:count()})</h3>
</f:if>
<f:for each="{groupItem.elements}" as="type" key="ctype" iteration="i">
<f:render section="panel" arguments="{type:type, ctype:ctype, mode:'exists'}" />
</f:for>
</f:if>
</f:for>
</f:if>
<f:if condition="{data.unused}">
<h2>{f:translate(key:'reports.messages:contentStatistics.unusedElements.header')}</h2>
<p>{f:translate(key:'reports.messages:contentStatistics.unusedElements.description')}</p>
<f:for each="{data.unused}" as="groupItem" key="group">
<f:if condition="{groupItem.elements}">
<f:if condition="{groupItem.header}">
<h3>{f:translate(key:groupItem.header, default:groupItem.header)} ({groupItem.elements -> f:count()})</h3>
</f:if>
<div class="panel-group">
<f:for each="{groupItem.elements}" as="type" key="ctype" iteration="i">
<f:render section="panel" arguments="{type:type, ctype:ctype, mode:'unused'}" />
</f:for>
</div>
</f:if>
</f:for>
</f:if>
</f:section>
<f:section name="panel">
<div class="panel panel-default">
<h4 class="panel-heading">
<div class="panel-heading-row">
<button class="panel-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapsible-panel-{ctype}" aria-expanded="false">
<span class="caret"></span>
<div class="panel-title">
<f:if condition="{type.iconIdentifier}">
<core:icon identifier="{type.iconIdentifier}" overlay="{type.iconOverlay}" />
</f:if>
{f:translate(key:type.title, default:type.title)}
<code>[{ctype}]</code>
</div>
</button>
<div>
<f:if condition="{mode} == exists">
<f:then>
<f:translate key="reports.messages:contentStatistics.statistic.active_text" arguments="{0:type.count.visible, 1:type.count.hidden}" />
</f:then>
<f:else if="{type.count.deleted}">
<f:translate key="reports.messages:contentStatistics.statistic.deleted_text" arguments="{0:type.count.deleted}" />
</f:else>
</f:if>
</div>
<f:if condition="{type.count}">
<div class="panel-actions">
<a class="btn btn-default btn-sm" href="{be:moduleLink(route: 'system_reports_contentstatistics', arguments:{ctype:ctype})}">
<core:icon identifier="actions-document-view" />
{f:translate(key:'core.common:details')}
</a>
</div>
</f:if>
</div>
</h4>
<div class="panel-collapse collapse" id="collapsible-panel-{ctype}" aria-expanded="false">
<div class="panel-body">
<h4><f:translate key="reports.messages:contentStatistics.fields" arguments="{0:'{type.fields -> f:count()}'}" /></h4>
<table class="table table-sm table-hover table-condensed table-striped">
<thead>
<tr>
<th>{f:translate(key:'core.core:labels.th.name')}</th>
<th>{f:translate(key:'reports.messages:contentStatistics.field.type')}</th>
<th>{f:translate(key:'reports.messages:contentStatistics.field.not_excluded')}</th>
<th>{f:translate(key:'reports.messages:contentStatistics.field.required')}</th>
</tr>
</thead>
<tbody>
<f:for each="{type.fields}" as="field">
<tr>
<td>{f:translate(key:field.label, default:field.label)} <code>[{field.name}]</code></td>
<td>{field.type}</td>
<td>{f:if(condition:'!{field.configuration.exclude}', then:'{core:icon(identifier:\'actions-check-circle\')}')}</td>
<td>{f:if(condition:field.configuration.required, then:'{core:icon(identifier:\'actions-check-circle\')}')}</td>
</tr>
</f:for>
</tbody>
</table>
</div>
</div>
</div>
</f:section>
</html>
@@ -0,0 +1,174 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<h1>{f:translate(key:label, default:label)} <code>[{ctype}]</code></h1>
<h2>{f:translate(key:'reports.messages:contentStatistics.statistic')}</h2>
<div class="table-fit">
<table class="table table-striped table-hover">
<tr>
<th>{f:translate(key:'core.general:LGL.enabled')}</th>
<td>{count.visible}</td>
</tr>
<tr>
<th>{f:translate(key:'core.general:LGL.disabled')}</th>
<td>{count.hidden}</td>
</tr>
<tr>
<th>{f:translate(key:'reports.messages:contentStatistics.statistic.deleted')}</th>
<td>{count.deleted}</td>
</tr>
</table>
</div>
<h2 id="recordlist">{f:translate(key:'reports.messages:contentStatistics.records')}</h2>
<f:if condition="{rows}">
<f:then>
<div class="table-fit">
<table class="table table-striped table-hover table-border">
<thead>
<tr>
<th>UID</th>
<th>{f:translate(key:'frontend.db.tt_content:header')}</th>
<th>{f:translate(key:'core.core:labels.pid')}</th>
<th>{f:translate(key:'core.core:labels.tstamp')}</th>
<th>{f:translate(key:'core.core:labels.path')}</th>
<th></th>
</tr>
</thead>
<tbody>
<f:for each="{rows}" as="row">
<tr>
<td class="nowrap">{row.uid}</td>
<td class="col-title col-responsive nowrap">
<be:link.editRecord
returnUrl="{returnUrl}"
table="tt_content"
uid="{row.uid}"
title="{f:translate(key:'core.mod_web_list:edit')}"
>
<span><core:iconForRecord table="tt_content" row="{row}" /></span>
{row.header}
</be:link.editRecord>
</td>
<td class="nowrap">{row.pid}</td>
<td class="nowrap">{row.tstamp_formatted}</td>
<td class="col-path nowrap">{row.path}</td>
<td class="col-control nowrap">
<div class="btn-group" role="group">
<be:link.editRecord
uid="{row.uid}"
table="tt_content"
class="btn btn-default"
returnUrl="{returnUrl}"
title="{f:translate(key:'core.mod_web_list:edit')}"
>
<core:icon identifier="actions-open" />
</be:link.editRecord>
</div>
</td>
</tr>
</f:for>
</tbody>
</table>
</div>
<f:if condition="{paginator.numberOfPages} > 1">
<nav class="pagination-wrap">
<ul class="pagination">
<f:if condition="{pagination.previousPageNumber}">
<f:then>
<li class="page-item">
<a href="{f:be.uri(route:'system_reports_contentstatistics', parameters:'{ctype: ctype, page:1}')}#recordlist" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.first')}" class="page-link">
<core:icon identifier="actions-view-paging-first" />
</a>
</li>
<li class="page-item">
<a href="{f:be.uri(route:'system_reports_contentstatistics', parameters:'{ctype: ctype, page:pagination.previousPageNumber}')}#recordlist" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.previous')}" class="page-link">
<core:icon identifier="actions-view-paging-previous" />
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<span class="page-link">
{pagination.startRecordNumber} - {pagination.endRecordNumber}
</span>
</li>
<li class="page-item">
<span class="page-link">
<f:translate extensionName="fluid" key="widget.pagination.page" />
<f:variable name="goToPageUrl">
<f:be.uri route="system_reports_contentstatistics" parameters="{action:'overview', page:987654322}" />
</f:variable>
<form data-on-submit="processNavigate" class="form-inline">
<input type="number"
value="{paginator.currentPageNumber}"
name="paginator-target-page"
class="form-control form-control-sm paginator-input"
min="1"
max="{paginator.numberOfPages}"
data-number-of-pages="{paginator.numberOfPages}"
data-url="{goToPageUrl}" />
</form>
/ {paginator.numberOfPages}
</span>
</li>
<f:if condition="{pagination.nextPageNumber}">
<f:then>
<li class="page-item">
<a href="{f:be.uri(route:'system_reports_contentstatistics', parameters:'{ctype: ctype, page: pagination.nextPageNumber}')}#recordlist" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.next')}" class="page-link">
<core:icon identifier="actions-view-paging-next" />
</a>
</li>
<li class="page-item">
<a href="{f:be.uri(route:'system_reports_contentstatistics', parameters:'{ctype: ctype, page: paginator.numberOfPages}')}#recordlist" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.last')}" class="page-link">
<core:icon identifier="actions-view-paging-last" />
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<a href="{f:be.uri(route:'system_reports_contentstatistics', parameters:'{ctype: ctype, page: paginator.currentPageNumber}')}#recordlist" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.refresh')}" class="page-link">
<core:icon identifier="actions-refresh" />
</a>
</li>
</ul>
</nav>
</f:if>
</f:then>
<f:else>
<f:be.infobox>{f:translate(key:'reports.messages:contentStatistics.noRecords')}</f:be.infobox>
</f:else>
</f:if>
</f:section>
</html>
@@ -0,0 +1,2 @@
<f:layout name="SystemEmail" />
<f:section name="Main">{message -> f:format.raw()}</f:section>
@@ -0,0 +1,98 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<h1>{f:translate(key:'title', domain:'reports.modules.statistics')}</h1>
<p>{f:translate(key:'description', domain:'reports.modules.statistics')}</p>
<h2>{f:translate(key:'pages', domain: 'reports.modules.statistics')}</h2>
<div class="table-fit">
<table class="table table-striped table-hover">
<colgroup>
<col width="24">
<col>
<col width="150">
</colgroup>
<thead>
<tr>
<th colspan="2"></th>
<th>{f:translate(key:'count', domain: 'reports.modules.statistics')}</th>
</tr>
</thead>
<tbody>
<f:for each="{pages}" as="item" key="name">
<tr>
<td><f:format.raw>{item.icon}</f:format.raw></td>
<td>{f:translate(key:'{name}', domain: 'reports.modules.statistics')}</td>
<td>{item.count}</td>
</tr>
</f:for>
</tbody>
</table>
</div>
<h2>{f:translate(key:'doktype', domain: 'reports.modules.statistics')}</h2>
<div class="table-fit">
<table class="table table-striped table-hover">
<colgroup>
<col width="24">
<col>
<col width="150">
</colgroup>
<thead>
<tr>
<th></th>
<th>{f:translate(key:'doktype_value', domain: 'reports.modules.statistics')}</th>
<th>{f:translate(key:'count', domain: 'reports.modules.statistics')}</th>
</tr>
</thead>
<tbody>
<f:for each="{doktypes}" as="item">
<tr>
<td><f:format.raw>{item.icon}</f:format.raw></td>
<td>{item.title}</td>
<td>{item.count}</td>
</tr>
</f:for>
</tbody>
</table>
</div>
<h2>{f:translate(key:'tables', domain: 'reports.modules.statistics')}</h2>
<div class="table-fit">
<table class="table table-striped table-hover">
<colgroup>
<col width="24">
<col>
<col width="150">
</colgroup>
<thead>
<tr>
<th></th>
<th>{f:translate(domain:'reports.modules.statistics', key:'label')}</th>
<th>{f:translate(domain:'reports.modules.statistics', key:'tablename')}</th>
<th>{f:translate(domain:'reports.modules.statistics', key:'total_lost')}</th>
<th></th>
</tr>
</thead>
<tbody>
<f:for each="{tables}" key="name" as="item">
<tr>
<td><f:format.raw>{item.icon}</f:format.raw></td>
<td>{item.title}</td>
<td>{name}</td>
<td>{item.count}</td>
<td><f:format.raw>{item.lostRecords}</f:format.raw></td>
</tr>
</f:for>
</tbody>
</table>
</div>
</f:section>
</html>
@@ -0,0 +1,40 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<h1>
<f:translate key="title" domain="reports.modules.status" />
</h1>
<p>
<f:translate key="description" domain="reports.modules.status" />
</p>
<f:for each="{statusCollection}" as="statuses" key="title">
<h2>{title}</h2>
<div class="statusreport-wrapper">
<f:for each="{statuses}" as="status">
<div class="statusreport" data-severity="{status.severity.cssClass}">
<div class="statusreport-indicator">
<div class="statusreport-indicator-icon">
<core:icon identifier="{severityIconMapping.{status.severity.value}}" size="default" />
</div>
</div>
<div class="statusreport-title">
{status.title}
</div>
<div class="statusreport-body">
<strong>{status.value}</strong><br>
{status.message -> f:format.raw()}
</div>
</div>
</f:for>
</div>
</f:for>
</f:section>
</html>