TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<div class="about-module">
|
||||
<f:render partial="About/Logo" arguments="{_all}" />
|
||||
|
||||
<f:for each="{messages}" as="message">
|
||||
<f:be.infobox title="{f:if(condition: message.title, then: message.title, else: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.header\')}')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}">
|
||||
<p>{message.message -> f:sanitize.html()}</p>
|
||||
</f:be.infobox>
|
||||
</f:for>
|
||||
|
||||
<f:render partial="About/About" arguments="{_all}" />
|
||||
<f:render partial="About/Modules" arguments="{_all}" />
|
||||
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:donation.sectionHeadline" /></h2>
|
||||
<f:render partial="About/Donation" arguments="{_all}" />
|
||||
<f:render partial="About/Credits" arguments="{_all}" />
|
||||
<f:render partial="About/CoreTeam" arguments="{_all}" />
|
||||
<f:render partial="About/ExternalLibraries" arguments="{_all}" />
|
||||
<f:render partial="About/Extensions" arguments="{_all}" />
|
||||
|
||||
<p>
|
||||
<em>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:endText" />
|
||||
</em>
|
||||
</p>
|
||||
<p>{typo3Info.copyrightNotice -> f:format.raw()}</p>
|
||||
</div>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,86 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/java-script-module-import-event-handler.js"/>
|
||||
<f:asset.module identifier="bootstrap"/>
|
||||
<f:asset.module identifier="@typo3/backend/dropdown.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/module/router.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/viewport/content-navigation.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/storage/module-state-storage.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/toolbar.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/notification.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/info-window.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/localization.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/global-event-handler.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/action-dispatcher.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/live-search/live-search.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/live-search/element/backend-search.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/drag-tooltip.js"/>
|
||||
|
||||
<div class="scaffold{f:if(condition: '{sidebar.accessible} && {sidebar.expanded}', then: ' scaffold-sidebar-expanded')}{f:if(condition: '{isImpersonated}', then: ' scaffold-in-impersonation')} t3js-scaffold">
|
||||
<div class="scaffold-state t3js-scaffold-state"></div>
|
||||
<div class="scaffold-header t3js-scaffold-header">
|
||||
<f:render partial="Backend/Topbar" arguments="{_all}" />
|
||||
</div>
|
||||
<div class="scaffold-sidebar{f:if(condition: '!{sidebar.accessible}', then: ' scaffold-sidebar-disabled')} t3js-scaffold-sidebar">
|
||||
<f:for each="{sidebar.modules}" as="module">
|
||||
<f:asset.module identifier="{module}"/>
|
||||
</f:for>
|
||||
{sidebar.html -> f:format.raw()}
|
||||
</div>
|
||||
<div class="scaffold-content t3js-scaffold-content">
|
||||
<typo3-backend-content-navigation
|
||||
identifier="backend"
|
||||
navigation-title="{f:translate(key: 'viewport.navigation', domain: 'backend.messages')}"
|
||||
navigation-label-collapse="{f:translate(key: 'viewport.navigation.hide', domain: 'backend.messages')}"
|
||||
navigation-label-expand="{f:translate(key: 'viewport.navigation.show', domain: 'backend.messages')}"
|
||||
navigation-min-width="300"
|
||||
navigation-hidden
|
||||
>
|
||||
<div slot="navigation"></div>
|
||||
<div slot="content">
|
||||
<f:if condition="{workspaceAccessDenied}">
|
||||
<f:then>
|
||||
<div class="m-4">
|
||||
<f:be.infobox
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:noModuleAccess.workspace.title')}"
|
||||
message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:noModuleAccess.workspace.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}"
|
||||
/>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else if="{noModuleAccess}">
|
||||
<div class="m-4">
|
||||
<f:be.infobox
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:noModuleAccess.permissions.title')}"
|
||||
message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:noModuleAccess.permissions.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}"
|
||||
/>
|
||||
</div>
|
||||
</f:else>
|
||||
<f:else>
|
||||
<typo3-backend-module-router
|
||||
module="{startupModule.0}"
|
||||
endpoint="{startupModule.1}"
|
||||
state-tracker="{stateTracker}"
|
||||
sitename="{sitename}"
|
||||
{f:if(condition: sitenameFirstInBackendTitle, then: 'sitename-first')}
|
||||
entry-point="{entryPoint}"
|
||||
></typo3-backend-module-router>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</typo3-backend-content-navigation>
|
||||
</div>
|
||||
<div class="scaffold-overlay"></div>
|
||||
</div>
|
||||
|
||||
<typo3-backend-drag-tooltip></typo3-backend-drag-tooltip>
|
||||
<typo3-backend-context-menu></typo3-backend-context-menu>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:render partial="Backend/ModuleMenu" arguments="{modules: modules, modulesInformation: modulesInformation}" />
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:render partial="Backend/Topbar" arguments="{_all}" />
|
||||
</html>
|
||||
@@ -0,0 +1,84 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<form id="columnSelectorForm">
|
||||
|
||||
<div class="sticky-form-actions">
|
||||
<label
|
||||
for="columns-filter-input"
|
||||
class="visually-hidden"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_column_selector.xlf:columnsFilter" />
|
||||
</label>
|
||||
<input
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
id="columns-filter-input"
|
||||
name="columns-filter"
|
||||
class="form-control"
|
||||
value=""
|
||||
placeholder="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enterSearchString')}"
|
||||
>
|
||||
<div class="btn-group t3js-column-selector-actions">
|
||||
<button type="button" class="btn btn-default disabled" data-action="select-all">
|
||||
<core:icon identifier="actions-check-square"/> <f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.checkAll" />
|
||||
</button>
|
||||
<button type="button" class="btn btn-default disabled" data-action="select-none">
|
||||
<core:icon identifier="actions-square"/> <f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.uncheckAll" />
|
||||
</button>
|
||||
<button type="button" class="btn btn-default" data-action="select-toggle">
|
||||
<core:icon identifier="actions-document-select"/> <f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.toggleSelection" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<f:for each="{columns}" as="column">
|
||||
<div class="col-6 t3js-column-selector-container">
|
||||
<div class="mt-2 form-check form-check-type-icon-toggle {f:if(condition: column.disabled, then: 'disabled')}">
|
||||
<input
|
||||
type="checkbox"
|
||||
id="select-column-{table}-{column.name}"
|
||||
name="selectedColumns[]"
|
||||
class="form-check-input t3js-column-selector"
|
||||
value="{column.name}"
|
||||
{f:if(condition:'{column.selected}', then:' checked')}
|
||||
{f:if(condition:'{column.disabled}', then: 'disabled')}
|
||||
/>
|
||||
<label class="form-check-label" for="select-column-{table}-{column.name}">
|
||||
<span class="form-check-label-icon">
|
||||
<span class="form-check-label-icon-checked">
|
||||
<core:icon identifier="actions-check" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="form-check-label-icon-unchecked">
|
||||
<core:icon identifier="miscellaneous-placeholder" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
</span>
|
||||
<f:if condition="{column.pseudo} && {column.label}">
|
||||
<f:then>
|
||||
<span><i>{column.label}</i></span>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{column.label}">
|
||||
<span>{column.label}</span>
|
||||
</f:if>
|
||||
<span class="text-variant">[{column.name}]</span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</label>
|
||||
</div>
|
||||
<f:if condition="{column.disabled}">
|
||||
<input type="hidden" name="selectedColumns[]" value="{column.name}" />
|
||||
</f:if>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="table" value="{table}">
|
||||
|
||||
</form>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,320 @@
|
||||
<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="Before">
|
||||
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<f:if condition="{accessAllowed}">
|
||||
<f:then>
|
||||
<f:if condition="{hookContent}">
|
||||
<f:then>
|
||||
<f:format.raw>{hookContent}</f:format.raw>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="nativeContent" arguments="{_all}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.noEditPermission')}</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="nativeContent">
|
||||
<div class="card-container">
|
||||
<div class="card card-size-medium">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">
|
||||
{icon -> f:format.raw()}
|
||||
</div>
|
||||
<div class="card-header-body">
|
||||
<h2 class="card-title">{title -> f:format.crop(maxCharacters: maxTitleLength)}<f:if condition="{extraFields.uid.value}"><code>[{extraFields.uid.value}]</code></f:if></h2>
|
||||
<f:if condition="{table}">
|
||||
<span class="card-subtitle">{table}</span>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<f:for each="{extraFields}" as="extraField">
|
||||
<f:if condition="{extraField.isDatetime}">
|
||||
<div class="col-md-6">
|
||||
<strong>{extraField.fieldLabel}</strong><br>
|
||||
{extraField.value}
|
||||
</div>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
<f:if condition="{extraFields.creatorRecord}">
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-12">
|
||||
<strong>{extraFields.creatorRecord.fieldLabel}</strong>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<be:avatar backendUser="{extraFields.creatorRecord.value.uid}" showIcon="true" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<f:if condition="{extraFields.creatorRecord.value.realName}">
|
||||
<f:then>{extraFields.creatorRecord.value.realName}<br>({extraFields.creatorRecord.value.username})</f:then>
|
||||
<f:else>{extraFields.creatorRecord.value.username}</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:if condition="{missingFile}">
|
||||
<f:be.infobox title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.file_missing')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}">{missingFile}</f:be.infobox>
|
||||
</f:if>
|
||||
<f:if condition="{fileRenderer}">
|
||||
<p>
|
||||
{fileRenderer -> f:format.raw()}
|
||||
</p>
|
||||
</f:if>
|
||||
<f:if condition="{fileObject}">
|
||||
<p>
|
||||
<f:media file="{fileObject}" width="{width}" height="{height}" />
|
||||
</p>
|
||||
</f:if>
|
||||
<f:if condition="{url}">
|
||||
<p>
|
||||
<a class="btn btn-default" href="{url}" target="_blank" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.show')}">
|
||||
<core:icon identifier="actions-document-view" size="small" alternativeMarkupIdentifier="inline" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.show" />
|
||||
</a>
|
||||
<f:if condition="{editMetadataUrl}">
|
||||
<a class="btn btn-default" href="{editMetadataUrl}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.editMetadata')}">
|
||||
<core:icon identifier="actions-file-edit" size="small" alternativeMarkupIdentifier="inline" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.editMetadata" />
|
||||
</a>
|
||||
</f:if>
|
||||
</p>
|
||||
</f:if>
|
||||
|
||||
<h2><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.general" /></h2>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#fieldValues-panel"
|
||||
aria-controls="fieldValues-panel"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.fieldValues" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="fieldValues-panel" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="table-fit table-fit-wrap">
|
||||
<table class="table table-striped table-hover">
|
||||
<tbody>
|
||||
<f:for each="{fields}" as="field">
|
||||
<tr>
|
||||
<th class="col-fieldname">{field.fieldLabel}</th>
|
||||
<td class="col-word-break">{field.fieldValue}</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:if condition="{returnUrl}">
|
||||
<a class="btn btn-primary" href="{returnUrl}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:back')}">
|
||||
<core:icon identifier="actions-view-go-back" size="small" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:back" />
|
||||
</a>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{refLines} || {refFromLines}">
|
||||
<h2><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.references" /></h2>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{refLines}">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#referencesToThisItem-panel"
|
||||
aria-controls="referencesToThisItem-panel"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.referencesToThisItem" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="referencesToThisItem-panel" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-icon"></th>
|
||||
<th class="col-recordtitle"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.title" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.table" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.uid" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.field" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.flexpointer" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.softrefKey" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.sorting" /></th>
|
||||
<th class="col-control"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{refLines}" as="refLine">
|
||||
<f:render section="refLineRow" arguments="{line: refLine, maxTitleLength: maxTitleLength}" />
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{refFromLines}">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#referencesFromThisItem-panel"
|
||||
aria-controls="referencesFromThisItem-panel"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.referencesFromThisItem" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="referencesFromThisItem-panel" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-icon"></th>
|
||||
<th class="col-recordtitle"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.title" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.table" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.uid" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.field" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.flexpointer" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.softrefKey" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.sorting" /></th>
|
||||
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.refString" /></th>
|
||||
<th class="col-control"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{refFromLines}" as="refFromLine">
|
||||
<f:render section="refFromLineRow" arguments="{line: refFromLine, maxTitleLength: maxTitleLength}" />
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="refLineRow">
|
||||
<tr>
|
||||
<f:if condition="{line.record}">
|
||||
<f:then>
|
||||
<td class="col-icon"><a href="{line.url}" title="id={line.record.uid}">{line.icon -> f:format.raw()}</a></td>
|
||||
<td class="col-recordtitle"><a href="{line.url}" title="{line.recordTitle}">{line.recordTitle -> f:format.crop(maxCharacters: maxTitleLength)}</a></td>
|
||||
<td>{line.title}</td>
|
||||
<td>{line.record.uid}</td>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<td class="col-icon"><core:icon identifier="default-not-found" size="small" /></td>
|
||||
<td class="col-recordtitle"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.missing_record" /></td>
|
||||
<td>{line.row.title}</td>
|
||||
<td>{line.row.recuid}</td>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<td>{line.labelForTableColumn}</td>
|
||||
<td>{line.row.flexpointer}</td>
|
||||
<td>{line.row.softref_key}</td>
|
||||
<td>{line.row.sorting}</td>
|
||||
<td class="col-control">
|
||||
<f:render section="action" arguments="{line: line.actions}" />
|
||||
</td>
|
||||
</tr>
|
||||
</f:section>
|
||||
|
||||
<f:section name="refFromLineRow">
|
||||
<tr>
|
||||
<f:if condition="{line.record}">
|
||||
<f:then>
|
||||
<td class="col-icon"><a href="{line.url}" title="id={line.record.uid}">{line.icon -> f:format.raw()}</a></td>
|
||||
<td class="col-recordtitle"><a href="{line.url}" title="{line.recordTitle}">{line.recordTitle -> f:format.crop(maxCharacters: maxTitleLength)}</a></td>
|
||||
<td>{line.title}</td>
|
||||
<td>{line.row.ref_uid}</td>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<td class="col-icon"><core:icon identifier="default-not-found" size="small" /></td>
|
||||
<td class="col-recordtitle"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:show_item.php.missing_record" /></td>
|
||||
<td>{line.row.title}</td>
|
||||
<td>{line.row.recuid}</td>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<td>{line.labelForTableColumn}</td>
|
||||
<td>{line.row.flexpointer}</td>
|
||||
<td>{line.row.softref_key}</td>
|
||||
<td>{line.row.sorting}</td>
|
||||
<td>{line.row.ref_string}</td>
|
||||
<td class="col-control">
|
||||
<f:render section="action" arguments="{line: line.actions}" />
|
||||
</td>
|
||||
</tr>
|
||||
</f:section>
|
||||
|
||||
<f:section name="action">
|
||||
<div class="btn-group" role="group">
|
||||
<f:if condition="{line.recordsModuleUrl}">
|
||||
<button class="btn btn-default" {f:if(condition: line.previewUrlAttributes, then: '{line.previewUrlAttributes -> f:format.raw()}', else: 'disabled="true"')} title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.showPage')}">
|
||||
<core:icon identifier="actions-view-page" size="small" />
|
||||
</button>
|
||||
</f:if>
|
||||
<a class="btn btn-default{f:if(condition: '!{line}', then: ' disabled')}" href="{line.recordEditUrl}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.edit')}">
|
||||
<core:icon identifier="actions-open" size="small" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group" role="group">
|
||||
<a class="btn btn-default{f:if(condition: '!{line}', then: ' disabled')}" href="{line.recordHistoryUrl}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.history')}">
|
||||
<core:icon identifier="actions-document-history-open" size="small" />
|
||||
</a>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,37 @@
|
||||
<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="ContentElement/MoveElementLayout" />
|
||||
|
||||
<f:section name="Content">
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_content_elements.xlf:headline.{f:if(condition: makeCopyChecked, then: 'copy', else: 'move')}" arguments="{0: recordTitle, 1: record.uid}" />
|
||||
</h2>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_content_elements.xlf:currentPath" /> {pageInfo._thePathFull}</p>
|
||||
<input type="hidden" name="elementRecordTitle" id="elementRecordTitle" value="{recordTitle}" />
|
||||
<input type="hidden" name="pageRecordTitle" id="pageRecordTitle" value="{pageRecord.recordTitle}" />
|
||||
<input type="hidden" name="pageUid" id="pageUid" value="{pageInfo.uid}" />
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-check form-switch">
|
||||
<input type="checkbox" name="makeCopy" id="makeCopy" value="1" {f:if(condition: makeCopyChecked, then: 'checked')} class="form-check-input">
|
||||
<label for="makeCopy" class="form-check-label"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:makeCopy" /></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page-position-map">
|
||||
<div class="page-position-info">
|
||||
<f:if condition="{pageInfo}">
|
||||
<span title="{pageRecord.recordTooltip}"><core:iconForRecord table="pages" row="{pageInfo}" /></span>
|
||||
</f:if>
|
||||
<strong>{pageRecord.recordTitle}</strong>
|
||||
</div>
|
||||
{contentElementColumns -> f:format.raw()}
|
||||
</div>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,14 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:comment>Deliberately empty</f:comment>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,30 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="{f:if(condition: treeEnabled, then: 'ElementBrowserWithNavigation', else: 'ElementBrowser')}" />
|
||||
|
||||
<f:section name="Navigation">
|
||||
<f:if condition="{tree}">
|
||||
<f:then>
|
||||
<div class="element-browser-body">
|
||||
{tree -> f:format.raw()}
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<typo3-backend-component-page-browser
|
||||
tree-actions="{treeActions -> f:format.json()}"
|
||||
active-page="{activePage}"
|
||||
>
|
||||
</typo3-backend-component-page-browser>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<f:flashMessages queueIdentifier="core.template.flashMessages"/>
|
||||
<f:format.raw>{content}</f:format.raw>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,43 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:layout name="SystemEmail" />
|
||||
|
||||
<f:section name="Subject">Attempted login using incorrect multi-factor authentication at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Attempted login using incorrect multi-factor authentication</f:section>
|
||||
<f:section name="Main">
|
||||
<p>
|
||||
TYPO3 detected a login attempt to your TYPO3 backend account using incorrect multi-factor authentication.
|
||||
</p>
|
||||
<table cellpadding="3">
|
||||
<tr>
|
||||
<td>Sitename:</td>
|
||||
<td>{typo3.sitename} ({normalizedParams.httpHost})</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP Address:</td>
|
||||
<td>{normalizedParams.remoteAddress}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Time:</td>
|
||||
<td><f:format.date date="now"/> <f:format.date date="now" format="H:i:s T"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MFA provider:</td>
|
||||
<td>{f:translate(key: provider.title, default: provider.title)}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
If you recently tried to sign in, but mistakenly used incorrect multi-factor authentication,
|
||||
you can ignore this email.
|
||||
</p>
|
||||
<p>
|
||||
If you did not recently try to sign in, you should immediately change your password and verify your account
|
||||
settings for any unauthorized changes.
|
||||
</p>
|
||||
<p>
|
||||
Contact your TYPO3 administrator if you notice suspicious activity.
|
||||
</p>
|
||||
</f:section>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
|
||||
<f:section name="Subject">Attempted login using incorrect multi-factor authentication at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Attempted login using incorrect multi-factor authentication</f:section>
|
||||
<f:section name="Main">
|
||||
TYPO3 detected a login attempt to your TYPO3 backend account using incorrect multi-factor authentication.
|
||||
|
||||
Sitename: {typo3.sitename} ({normalizedParams.httpHost})
|
||||
IP Address: {normalizedParams.remoteAddress}
|
||||
Time: <f:format.date date="now"/> <f:format.date date="now" format="H:i:s T"/>
|
||||
MFA provider: {f:translate(key: provider.title, default: provider.title)}
|
||||
|
||||
If you recently tried to sign in, but mistakenly used incorrect multi-factor authentication, you can ignore this email.
|
||||
|
||||
If you did not recently try to sign in, you should immediately change your password and verify your account
|
||||
settings for any unauthorized changes.
|
||||
|
||||
Contact your TYPO3 administrator if you notice suspicious activity.
|
||||
</f:section>
|
||||
@@ -0,0 +1,10 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">Password reset requested at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Your email address was used to trigger a password reset</f:section>
|
||||
<f:section name="Main">
|
||||
<p>
|
||||
Unfortunately, we are unable to reset your password because your email address "{email}" is used for multiple backend user accounts at the TYPO3 instance "{typo3.sitename}".
|
||||
Please ask your administrator to generate a new password for you.
|
||||
</p>
|
||||
<f:render partial="Email/PasswordReset/ClosingParagraph" arguments="{normalizedParams: normalizedParams}" />
|
||||
</f:section>
|
||||
@@ -0,0 +1,9 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">Password reset requested at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Your email address was used to trigger a password reset</f:section>
|
||||
<f:section name="Main">
|
||||
Unfortunately, we are unable to reset your password because your email address "{email}" is used for multiple backend user accounts at the TYPO3 instance "{typo3.sitename}".
|
||||
Please ask your administrator to generate a new password for you.
|
||||
|
||||
<f:render partial="Email/PasswordReset/ClosingParagraph" arguments="{normalizedParams: normalizedParams}" />
|
||||
</f:section>
|
||||
@@ -0,0 +1,13 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">Password reset requested at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Your email address was used to trigger a password reset</f:section>
|
||||
<f:section name="Main">
|
||||
<p>
|
||||
Follow the link below to reset your backend user password at "{typo3.sitename}" (this link expires in 2 hours).
|
||||
<f:if condition="{username}">Your username is: <strong>{username}</strong></f:if>
|
||||
</p>
|
||||
<p>
|
||||
<a href="{resetLink}">Reset password</a>
|
||||
</p>
|
||||
<f:render partial="Email/PasswordReset/ClosingParagraph" arguments="{normalizedParams: normalizedParams}" />
|
||||
</f:section>
|
||||
@@ -0,0 +1,11 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">Password reset requested at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">Your email address was used to trigger a password reset</f:section>
|
||||
<f:section name="Main">
|
||||
Follow the link below to reset your backend user password at "{typo3.sitename}" (this link expires in 2 hours).
|
||||
<f:if condition="{username}">Your username is: {username}</f:if>
|
||||
|
||||
{resetLink -> f:format.raw()}
|
||||
|
||||
<f:render partial="Email/PasswordReset/ClosingParagraph" arguments="{normalizedParams: normalizedParams}" />
|
||||
</f:section>
|
||||
@@ -0,0 +1,11 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">TYPO3 Login Failure Warning (at {typo3.sitename})</f:section>
|
||||
<f:section name="Title">TYPO3 Login Failure Warning at {typo3.sitename}</f:section>
|
||||
<f:section name="Main">
|
||||
<strong>There have been some attempts ({lines -> f:count()}) to login at the TYPO3 site "{typo3.sitename}" (<strong>{normalizedParams.remoteAddress}</strong>).</strong>
|
||||
<br><br>
|
||||
This is a dump of the failures:<br>
|
||||
<f:for each="{lines}" as="line">
|
||||
{f:format.date(date:line.row.tstamp, format:'{typo3.formats.date} {typo3.formats.time}')}: {line.text}<br>
|
||||
</f:for>
|
||||
</f:section>
|
||||
@@ -0,0 +1,9 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">TYPO3 Login Failure Warning (at {typo3.sitename})</f:section>
|
||||
<f:section name="Title">TYPO3 Login Failure Warning at {typo3.sitename}</f:section>
|
||||
<f:section name="Main">There have been some attempts ({lines -> f:count()}) to login at the TYPO3 site "{typo3.sitename}" ({normalizedParams.remoteAddress}).
|
||||
|
||||
This is a dump of the failures:
|
||||
<f:for each="{lines}" as="line">{f:format.date(date:line.row.tstamp, format:'{typo3.formats.date} {typo3.formats.time}')}: {line.text -> f:format.raw()}
|
||||
</f:for>
|
||||
</f:section>
|
||||
@@ -0,0 +1,7 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">{prefix} New Login at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">{headline}</f:section>
|
||||
<f:section name="Main">
|
||||
<h4>{introduction}</h4>
|
||||
<p>The user <em>"{user.username}"</em> logged in from the IP address <strong>{normalizedParams.remoteAddress}</strong> at "{typo3.sitename}".</p>
|
||||
</f:section>
|
||||
@@ -0,0 +1,6 @@
|
||||
<f:layout name="SystemEmail" />
|
||||
<f:section name="Subject">{prefix} New Login at "{typo3.sitename}"</f:section>
|
||||
<f:section name="Title">{headline}</f:section>
|
||||
<f:section name="Main">{introduction}
|
||||
The user "{user.username}" logged in from the IP address "{normalizedParams.remoteAddress}" at the site "{typo3.sitename}".
|
||||
</f:section>
|
||||
@@ -0,0 +1,39 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<div class="module contextual-record-edit" data-module-id="{moduleId}" data-module-name="{moduleName}">
|
||||
<div class="contextual-record-edit-header">
|
||||
<div class="contextual-record-edit-title-group">
|
||||
<span class="contextual-record-edit-title">{recordTitle}</span>
|
||||
<f:if condition="{fullEditUrl}">
|
||||
<a href="{fullEditUrl}" class="btn btn-default btn-borderless t3js-contextual-fullscreen" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:openFullEditView')}">
|
||||
<core:icon identifier="actions-expand" size="small" />
|
||||
</a>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="contextual-record-edit-actions">
|
||||
<button type="submit" name="_savedok" value="1" form="ContextualRecordEditController" class="btn btn-primary">
|
||||
<core:icon identifier="actions-document-save" size="small" />
|
||||
<span class="contextual-record-edit-button-label"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:save" /></span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default t3js-contextual-close">
|
||||
<core:icon identifier="actions-close" size="small" />
|
||||
<span class="contextual-record-edit-button-label"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:close" /></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="module-body contextual-record-edit-body t3js-module-body">
|
||||
<f:if condition="{uiBlock}">
|
||||
<div id="t3js-ui-block" class="ui-block">
|
||||
<core:icon identifier="spinner-circle" size="large" />
|
||||
</div>
|
||||
</f:if>
|
||||
<f:flashMessages queueIdentifier="{flashMessageQueueIdentifier}" />
|
||||
<f:format.raw>{bodyHtml}</f:format.raw>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,27 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/localization.js"/>
|
||||
|
||||
<f:if condition="{moduleContext} != '' && {moduleContextId} != ''">
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
|
||||
<f:variable name="immediateActionArgs" value="{0: moduleContext, 1: moduleContextId}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{immediateActionArgs -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:if>
|
||||
|
||||
<f:format.raw>{bodyHtml}</f:format.raw>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,58 @@
|
||||
<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:format.raw>{fieldInformation}</f:format.raw>
|
||||
<typo3-formengine-container-inline {webComponentAttributes -> f:format.raw()}>
|
||||
<div class="form-group t3js-formengine-validation-marker t3js-inline-controls">
|
||||
<f:for each="{fileSelectors}" as="fileSelector">
|
||||
{fileSelector -> f:format.raw()}
|
||||
</f:for>
|
||||
<f:if condition="{allowedFileExtensions}">
|
||||
<f:then>
|
||||
<div class="form-text mt-2">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.allowedFileExtensions"/>
|
||||
<ul class="badge-list">
|
||||
<f:for each="{allowedFileExtensions}" as="allowedFileExtension">
|
||||
<li><span class="badge badge-secondary">{allowedFileExtension}</span></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else if="{disallowedFileExtensions}">
|
||||
<div class="form-text mt-2">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.disallowedFileExtensions"/>
|
||||
<ul class="badge-list">
|
||||
<f:for each="{disallowedFileExtensions}" as="disallowedFileExtension">
|
||||
<li><span class="badge badge-danger">{disallowedFileExtension}</span></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
<f:if condition="{showAllLocalizationLink}">
|
||||
<button type="button" class="btn btn-default t3js-synchronizelocalize-button" data-type="localize" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:localizeAllRecords')}">
|
||||
<core:icon identifier="actions-document-localize" size="small" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:localizeAllRecords" />
|
||||
</button>
|
||||
</f:if>
|
||||
<f:if condition="{showSynchronizationLink}">
|
||||
<button type="button" class="btn btn-default t3js-synchronizelocalize-button" data-type="synchronize" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:synchronizeWithOriginalLanguage')}">
|
||||
<core:icon identifier="actions-document-synchronize" size="small" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:synchronizeWithOriginalLanguage" />
|
||||
</button>
|
||||
</f:if>
|
||||
<div class="panel-group panel-hover {f:if(condition: '{showAllLocalizationLink} || {showSynchronizationLink}', then: 'mt-3')}" id="{fileReferences.id}" data-title="{fileReferences.title}">
|
||||
<f:format.raw>{fileReferences.records}</f:format.raw>
|
||||
</div>
|
||||
<f:format.raw>{fieldWizard}</f:format.raw>
|
||||
<f:if condition="{customControls}">
|
||||
<div id="{customControls.id}">
|
||||
<f:format.raw>{customControls.controls}</f:format.raw>
|
||||
</div>
|
||||
</f:if>
|
||||
<input type="hidden" class="inlineRecord" name="{formFieldName}" value="{sortableRecordUids}" data-formengine-validation-rules="{validationRules}" />
|
||||
</typo3-formengine-container-inline>
|
||||
</html>
|
||||
@@ -0,0 +1,23 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:if condition="{recordDescription}">
|
||||
<f:be.infobox title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.recordInformation')}">
|
||||
{recordDescription -> f:format.nl2br()}
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
<f:if condition="{recordReadonly}">
|
||||
<f:be.infobox title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.recordInformation')}">
|
||||
{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.recordReadonly')}
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<div class="typo3-TCEforms{f:if(condition:isNewRecord, then:' is-new')}">
|
||||
<f:format.raw>{fieldInformationHtml}</f:format.raw>
|
||||
<f:format.raw>{fieldWizardHtml}</f:format.raw>
|
||||
<f:format.raw>{childHtml}</f:format.raw>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,115 @@
|
||||
<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="formengine-field-item t3js-formengine-field-item">
|
||||
|
||||
{fieldInformation -> f:format.raw()}
|
||||
|
||||
<div class="form-wizards-wrap">
|
||||
<div class="form-wizards-item-element">
|
||||
<f:if condition="{isAllowedFileExtension} && {image.properties.width}">
|
||||
<f:then>
|
||||
<f:if condition="{config.readOnly}">
|
||||
<f:else>
|
||||
<div class="form-control-wrap">
|
||||
<input
|
||||
type="hidden"
|
||||
id="{formEngine.field.id}"
|
||||
name="{formEngine.field.name}"
|
||||
value="{formEngine.field.value}"
|
||||
data-formengine-validation-rules="{formEngine.validation}"
|
||||
/>
|
||||
<button
|
||||
class="btn btn-default t3js-image-manipulation-trigger"
|
||||
data-url="{wizardUri}"
|
||||
data-payload="{wizardPayload}"
|
||||
data-preview-url="{previewUrl}"
|
||||
data-severity="notice"
|
||||
data-modal-title="{f:render(partial: 'Form/ImageManipulationModalTitle', arguments: _all)}"
|
||||
data-image-uid="{image.uid}"
|
||||
data-crop-variants="{config.cropVariants -> f:format.json()}"
|
||||
data-button-preview-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.preview')}"
|
||||
data-button-dismiss-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.cancel')}"
|
||||
data-button-save-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.accept')}"
|
||||
data-file-field="{config.file_field}"
|
||||
data-field="{formEngine.field.id}"
|
||||
data-sync-available="{f:if(condition: '{config.syncAvailable}', then: 'true', else: 'false')}"
|
||||
>
|
||||
<core:icon identifier="actions-crop" size="small" />
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.open-editor"/>
|
||||
</button>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<div class="row media-gallery__list mt-2">
|
||||
<f:for each="{config.cropVariants}" as="cropVariant">
|
||||
<div class="col-6 col-sm-4 col-md-3 media-gallery__item">
|
||||
<p>
|
||||
<b><f:translate id="{cropVariant.title}" default="{cropVariant.title}" /></b><br/>
|
||||
<f:if condition="{cropVariant.allowedAspectRatios.{cropVariant.selectedRatio}.title}">
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.aspect-ratio"/>: <span class="t3js-image-manipulation-selected-ratio" data-crop-variant-id="{cropVariant.id}"><f:translate id="{cropVariant.allowedAspectRatios.{cropVariant.selectedRatio}.title}" default="{cropVariant.allowedAspectRatios.{cropVariant.selectedRatio}.title}" /></span>
|
||||
</f:if>
|
||||
</p>
|
||||
<div
|
||||
class="t3js-image-manipulation-preview media-object"
|
||||
data-preview-height="150"
|
||||
data-crop-variant-id="{cropVariant.id}"
|
||||
>
|
||||
<f:image
|
||||
image="{image}"
|
||||
crop="{formEngine.field.value}"
|
||||
cropVariant="{cropVariant.id}"
|
||||
maxHeight="150"
|
||||
class="thumbnail thumbnail-status"
|
||||
loading="lazy"
|
||||
additionalAttributes="{data-crop-variant: '{cropVariant -> f:format.json()}', data-crop-variant-id: cropVariant.id}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="media-body">
|
||||
<f:if condition="{image.properties.width}">
|
||||
<f:then>
|
||||
<p>
|
||||
<em>
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.supported-types-message" /><br/>
|
||||
{config.allowedExtensions -> f:format.case(mode: 'upper')}
|
||||
</em>
|
||||
</p>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="alert alert-info">
|
||||
<h4>
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.no-image-dimensions"/>
|
||||
</h4>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.no-image-dimensions-message"/>
|
||||
</p>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
|
||||
<div class="form-wizards-item-aside form-wizards-item-aside--field-control">
|
||||
<div class="btn-group">
|
||||
{fieldControl -> f:format.raw()}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-wizards-item-bottom">
|
||||
{fieldWizard -> f:format.raw()}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,104 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
>
|
||||
|
||||
<div class="modal-panel-main">
|
||||
<div id="t3js-crop-image-container" class="cropper-image-container">
|
||||
<f:image image="{image}" maxWidth="1000" maxHeight="1000" id="t3js-crop-image" additionalAttributes="{data-original-width: image.properties.width, data-original-height: image.properties.height}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-panel-sidebar">
|
||||
<div class="panel-group mb-3 d-none" id="sync-crop-variants-container">
|
||||
<div class="panel">
|
||||
<div class="panel-body">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" value="1" id="sync-crop-variants"/>
|
||||
<label class="form-check-label" for="sync-crop-variants">
|
||||
<f:translate domain="core.wizards" key="imwizard.sync-crop-variants"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" id="accordion-cropper-variants" role="tablist" aria-multiselectable="false">
|
||||
<f:for each="{cropVariants}" as="cropVariant" iteration="cropVariantIterator">
|
||||
<div class="panel panel-default" data-crop-variant-container="{cropVariant.id}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button t3js-crop-variant-trigger {f:if(condition:cropVariantIterator.isFirst, then:'is-active', else:'collapsed')}"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#cropper-collapse-{cropVariantIterator.cycle}"
|
||||
aria-expanded="{f:if(condition:cropVariantIterator.isFirst, then:'true', else:'false')}"
|
||||
aria-controls="cropper-collapse-{cropVariantIterator.cycle}"
|
||||
data-crop-variant-id="{cropVariant.id}"
|
||||
data-crop-variant
|
||||
data-exclude-from-sync="{f:if(condition:cropVariant.excludeFromSync, then:'true', else:'false')}"
|
||||
id="cropper-accordion-heading-{cropVariantIterator.cycle}"
|
||||
>
|
||||
<span class="caret"></span>
|
||||
<div class="panel-title">{cropVariant.title -> f:translate(id: cropVariant.title)}</div>
|
||||
<div class="cropper-preview-thumbnail {f:if(condition:'{image.properties.width}>{image.properties.height}', then:'wide', else: 'tall')}">
|
||||
<img class="cropper-preview-thumbnail-image" src="{f:uri.image(image:image, maxWidth:'300', maxHeight: '300')}">
|
||||
<div class="cropper-preview-thumbnail-crop-area t3js-cropper-preview-thumbnail-crop-area">
|
||||
<img src="{f:uri.image(image:image, maxWidth:'300', maxHeight: '300')}" class="cropper-preview-thumbnail-crop-image t3js-cropper-preview-thumbnail-crop-image">
|
||||
<div class="cropper-preview-thumbnail-focus-area t3js-cropper-preview-thumbnail-focus-area"></div>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="cropper-collapse-{cropVariantIterator.cycle}"
|
||||
class="panel-collapse collapse {f:if(condition:cropVariantIterator.isFirst, then:'show')}"
|
||||
role="tabpanel"
|
||||
aria-labelledby="cropper-accordion-heading-{cropVariantIterator.cycle}"
|
||||
data-bs-parent="#accordion-cropper-variants"
|
||||
>
|
||||
<div class="panel-body">
|
||||
<form class="form">
|
||||
<f:if condition="{cropVariant.allowedAspectRatios}">
|
||||
<label class="form-label" for="ratio-{cropVariantIterator.cycle}">
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.aspect-ratio"/>
|
||||
</label>
|
||||
<div id="ratio-{cropVariantIterator.cycle}" class="ratio-buttons t3js-ratio-buttons">
|
||||
<f:for each="{cropVariant.allowedAspectRatios}" as="ratio" iteration="ratioIterator">
|
||||
<label
|
||||
class="btn btn-default"
|
||||
data-method="setAspectRatio"
|
||||
data-bs-option="{ratio.id}"
|
||||
title="{f:translate(id:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.set-aspect-ratio')}"
|
||||
>
|
||||
<input
|
||||
class="visually-hidden"
|
||||
id="aspectRatio-{cropVariantIterator.cycle}-{ratioIterator.cycle}"
|
||||
name="aspectRatio-{cropVariantIterator.cycle}-{ratioIterator.cycle}"
|
||||
value="{cropVariant.id}"
|
||||
type="radio"
|
||||
/>
|
||||
<span class="t3-js-ratio-title" data-ratio-id="{cropVariant.id}{ratio.id}">{ratio.title -> f:translate(id: ratio.title)}</span> <core:icon identifier="actions-check" size="small" />
|
||||
</label>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:if>
|
||||
<label><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.selection" /></label>
|
||||
<div class="mb-3 t3js-cropper-info-crop"></div>
|
||||
<button
|
||||
class="btn btn-default"
|
||||
name="reset"
|
||||
data-crop-variant="{cropVariant -> f:format.json()}"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.reset')}"
|
||||
>
|
||||
<core:icon identifier="actions-refresh" size="small" />
|
||||
{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.reset')}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,31 @@
|
||||
<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:format.raw>{fieldInformation}</f:format.raw>
|
||||
<typo3-formengine-container-inline {webComponentAttributes -> f:format.raw()}>
|
||||
<div class="form-group t3js-formengine-validation-marker t3js-inline-controls">
|
||||
<button type="button" class="btn btn-default t3js-create-new-button" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.languages.createNew')}">
|
||||
<core:icon identifier="actions-plus" size="small" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.languages.createNew" />
|
||||
</button>
|
||||
<select id="{presetOptions.identifier}" name="preset" class="form-select t3js-create-new-preset d-inline-block w-auto">
|
||||
<option value=""><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.languages.choosePreset"/></option>
|
||||
<f:for each="{presetOptions.options}" as="option">
|
||||
<option value="{option.value}">{option.label}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
<select id="{selectorConfiguration.identifier}" class="form-select t3js-create-new-selector d-inline-block w-auto">
|
||||
<option value=""><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.languages.chooseExistingFromOtherSite"/></option>
|
||||
<f:for each="{selectorConfiguration.options}" as="option">
|
||||
<option value="{option.value}">{option.label}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="panel-group panel-hover" id="{inlineRecords.identifier}" data-title="{inlineRecords.title}">
|
||||
<f:format.raw>{inlineRecords.records}</f:format.raw>
|
||||
</div>
|
||||
<input type="hidden" class="inlineRecord" name="{nameForm}" value="{childRecordUids}" data-formengine-validation-rules="{validationRules}" />
|
||||
</typo3-formengine-container-inline>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:render partial="ModuleTemplate/Tabs" arguments="{_all}" />
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:be.infobox title="{title}" state="{state}">
|
||||
<f:format.raw>{message}</f:format.raw>
|
||||
</f:be.infobox>
|
||||
</html>
|
||||
@@ -0,0 +1,82 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="LinkBrowser" />
|
||||
|
||||
<f:section name="Content">
|
||||
<form action="" id="lmailform">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="lemail" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:emailAddress" />
|
||||
</label>
|
||||
<input
|
||||
id="lemail"
|
||||
type="email"
|
||||
name="lemail"
|
||||
class="form-control"
|
||||
value="{email}"
|
||||
required />
|
||||
</div>
|
||||
<f:if condition="{allowedLinkAttributes.subject}">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="emailSubject" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:email.subject" />
|
||||
</label>
|
||||
<input
|
||||
id="emailSubject"
|
||||
name="emailSubject"
|
||||
class="form-control"
|
||||
value="{subject}"
|
||||
data-mailto-part="subject"/>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{allowedLinkAttributes.cc}">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="emailCc" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:email.cc" />
|
||||
</label>
|
||||
<input
|
||||
id="emailCc"
|
||||
name="emailCc"
|
||||
class="form-control"
|
||||
value="{cc}"
|
||||
data-mailto-part="cc"/>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{allowedLinkAttributes.bcc}">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="emailBcc" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:email.bcc" />
|
||||
</label>
|
||||
<input
|
||||
id="emailBcc"
|
||||
name="emailBcc"
|
||||
class="form-control"
|
||||
value="{bcc}"
|
||||
data-mailto-part="bcc"/>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{allowedLinkAttributes.body}">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="emailBody" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:email.body" />
|
||||
</label>
|
||||
<textarea
|
||||
id="emailBody"
|
||||
name="emailBody"
|
||||
rows="10"
|
||||
cols="50"
|
||||
size="20"
|
||||
class="form-control"
|
||||
data-mailto-part="body">{body}</textarea>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="element-browser-form-group">
|
||||
<input class="btn btn-primary" type="submit" value="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:setLink')}" />
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,44 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="LinkBrowser" />
|
||||
|
||||
<f:section name="Navigation">
|
||||
<typo3-backend-component-page-browser
|
||||
tree-actions="{treeActions -> f:format.json()}"
|
||||
active-page="{expandedPage}"
|
||||
>
|
||||
</typo3-backend-component-page-browser>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<f:if condition="{expandActivePage}">
|
||||
<f:if condition="{activePageLink}">
|
||||
<f:then>
|
||||
<a href="{activePageLink}" class="t3js-pageLink btn btn-default">
|
||||
<f:format.raw>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:linkTo" arguments="{0: '{activePageIcon} {activePageTitle}'}">{activePageIcon} {activePageTitle}</f:translate>
|
||||
</f:format.raw>
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div>{activePageIcon -> f:format.raw()} {activePageTitle -> f:format.raw()}</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{contentElements}">
|
||||
<h4 class="mt-4 mb-3"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:contentElements" /></h4>
|
||||
<div class="list-group">
|
||||
<f:for each="{contentElements}" as="content">
|
||||
<a href="{content.url}" class="t3js-pageLink list-group-item list-group-item-action {f:if(condition: content.isSelected, then: ' active')}">
|
||||
{content.icon -> f:format.raw()} {content.title -> f:format.raw()}
|
||||
</a>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,21 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="LinkBrowser" />
|
||||
|
||||
<f:section name="Navigation"><f:if condition="{treeEnabled}">
|
||||
<typo3-backend-component-page-browser
|
||||
tree-actions="{treeActions -> f:format.json()}"
|
||||
alternative-entry-points="{pageTreeMountPoints -> f:format.json()}"
|
||||
active-page="{expandedPage}"
|
||||
>
|
||||
</typo3-backend-component-page-browser>
|
||||
</f:if></f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
{recordList -> f:format.raw()}
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,29 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="LinkBrowser" />
|
||||
|
||||
<f:section name="Content">
|
||||
<form class="form" action="" id="ltelephoneform">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="ltelephone" class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:telephoneNumber" />
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
id="ltelephone"
|
||||
type="tel"
|
||||
name="ltelephone"
|
||||
size="20"
|
||||
class="form-control"
|
||||
value="{telephone}"
|
||||
required />
|
||||
<input class="btn btn-primary" type="submit" value="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:setLink')}" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,30 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="LinkBrowser" />
|
||||
|
||||
<f:section name="Content">
|
||||
<form class="form" action="" id="lurlform">
|
||||
<div class="element-browser-form-group">
|
||||
<label for="lurl" class="form-label">
|
||||
URL
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
id="lurl"
|
||||
type="text"
|
||||
name="lurl"
|
||||
size="30"
|
||||
class="form-control"
|
||||
value="{url}"
|
||||
placeholder="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:urlPlaceholder')}"
|
||||
required />
|
||||
<input class="btn btn-primary" type="submit" value="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:setLink')}" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,56 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<tr>
|
||||
<td colspan="{colspan + 1}">
|
||||
<nav aria-labelledby="recordlist-pagination">
|
||||
<ul class="pagination mb-0">
|
||||
<li class="page-item">
|
||||
<span id="recordlist-pagination" class="page-link">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:rangeIndicator" arguments="{0: firstElement, 1: lastElement}" />
|
||||
<span class="visually-hidden">, <f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:pageIndicator" arguments="{0: currentPage, 1: totalPages}"/></span>
|
||||
</span>
|
||||
</li>
|
||||
<f:comment>First page and previous page</f:comment>
|
||||
<f:if condition="{currentPage} > 1">
|
||||
<f:then>
|
||||
<li class="page-item"><a class="page-link" href="{currentUrl}&pointer=1" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:first')}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:first')}"><core:icon identifier="actions-view-paging-first"/></a></li>
|
||||
<li class="page-item"><a class="page-link" href="{currentUrl}&pointer={currentPage -1}" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:previous')}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:previous')}"><core:icon identifier="actions-view-paging-previous" /></a></li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-first" /></span></li>
|
||||
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-previous" /></span></li>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:variable name="pageInput">
|
||||
<input type="number" autocomplete="off" data-currentpage="{currentPage}" name="pointer" min="1" max="{totalPages}" value="{currentPage}" size="3" class="t3js-recordlist-paging form-control form-control-sm paginator-input" />
|
||||
<span aria-hidden="true">
|
||||
</f:variable>
|
||||
<li class="page-item">
|
||||
<span class="page-link">
|
||||
<f:format.raw><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:pageIndicator" arguments="{0: pageInput, 1: totalPages}"/></f:format.raw></span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<f:comment>Next page and last page</f:comment>
|
||||
<f:if condition="{currentPage} < {totalPages}">
|
||||
<f:then>
|
||||
<li class="page-item"><a class="page-link" href="{currentUrl}&pointer={currentPage + 1}" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:next')}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:next')}"><core:icon identifier="actions-view-paging-next" /></a></li>
|
||||
<li class="page-item"><a class="page-link" href="{currentUrl}&pointer={totalPages}" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:last')}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:last')}"><core:icon identifier="actions-view-paging-last" /></a></li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-next" /></span></li>
|
||||
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-last" /></span></li>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<li class="page-item"><a class="page-link" href="{currentUrl}&pointer={currentPage}" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:reload')}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:reload')}"><core:icon identifier="actions-refresh" /></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,50 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<typo3-backend-live-search>
|
||||
<form>
|
||||
<div class="input-group mb-2">
|
||||
<input
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
name="query"
|
||||
class="form-control"
|
||||
placeholder="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_search')}"
|
||||
value="{searchDemand.query}"
|
||||
>
|
||||
<f:if condition="{searchProviders->f:count()} > 0">
|
||||
<button class="btn btn-default dropdown-toggle t3js-search-provider-dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
||||
<core:icon identifier="actions-filter" size="small" />
|
||||
<span class="search-option-badge badge badge-primary {activeOptions == 0 ? 'hidden' : ''}" data-active-options-counter="{activeOptions}">
|
||||
<output>{activeOptions}</output>
|
||||
<span class="visually-hidden">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_activeFilters')}</span>
|
||||
</span>
|
||||
</button>
|
||||
<div class="dropdown-menu t3js-search-provider-dropdown">
|
||||
<h6 class="dropdown-header">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_searchIn')}</h6>
|
||||
<div class="dropdown-item-text">
|
||||
<f:for each="{searchProviders}" as="searchProvider" key="searchProviderIdentifier">
|
||||
<typo3-backend-live-search-option-item
|
||||
optionId="{searchProviderIdentifier}"
|
||||
optionName="searchProviders"
|
||||
optionLabel="{searchProvider.instance.filterLabel}"
|
||||
{searchProvider.isActive ? 'active' : ''}
|
||||
></typo3-backend-live-search-option-item>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="form-text">
|
||||
<typo3-backend-live-search-hint hint="{hint}"></typo3-backend-live-search-hint>
|
||||
</div>
|
||||
<input type="hidden" name="offset" value="{searchDemand.offset}">
|
||||
<input type="hidden" name="pageId" value="{searchDemand.pageId}">
|
||||
</form>
|
||||
<typo3-backend-live-search-result-container></typo3-backend-live-search-result-container>
|
||||
<typo3-backend-live-search-result-pagination></typo3-backend-live-search-result-pagination>
|
||||
</typo3-backend-live-search>
|
||||
</html>
|
||||
@@ -0,0 +1,64 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Login" />
|
||||
|
||||
<f:section name="ResetPassword">
|
||||
<div class="typo3-login-form t3js-login-formfields">
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:headline" /></h2>
|
||||
<f:if condition="{resetInitiated}">
|
||||
<f:then>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::OK')}" disableIcon="true" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:email_sent.headline')}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:email_sent.message" arguments="{0: email}" />
|
||||
</f:be.infobox>
|
||||
<p class="float-end">
|
||||
<a href="{returnUrl}"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:button.back_to_login" /></a>.
|
||||
</p>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{invalidEmail}">
|
||||
<f:be.infobox message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:error.invalid_email')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}" />
|
||||
</f:if>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:instructions.email" /></p>
|
||||
<form action="{formUrl}" method="post" name="forget-password-form" id="typo3-forget-password-form">
|
||||
<div class="form-group">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-control-holder">
|
||||
<label class="form-label" for="typo3-forget-password-email"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:input.email" /></label>
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
value="{email}"
|
||||
placeholder="you@example.com"
|
||||
id="typo3-forget-password-email"
|
||||
class="form-control form-control-clearable input-login t3js-clearable"
|
||||
autofocus="autofocus"
|
||||
autocomplete="email"
|
||||
required="required"
|
||||
data-clearable-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inputfield.clearButton.title')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group d-grid">
|
||||
<button class="btn d-block btn-login" type="submit" name="forgetPasswordSubmit">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:button.initiate" />
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<p>
|
||||
<small>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:note.other_providers" />
|
||||
</small>
|
||||
</p>
|
||||
<p class="float-end">
|
||||
<a href="{returnUrl}"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:button.back_to_login" /></a>.
|
||||
</p>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,93 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Login" />
|
||||
|
||||
<f:section name="ResetPassword">
|
||||
<div class="typo3-login-form t3js-login-formfields">
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:headline" /></h2>
|
||||
<f:if condition="{invalidToken}">
|
||||
<f:then>
|
||||
<f:be.infobox message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:error.token_expired')}" title="" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}" />
|
||||
<div class="d-grid">
|
||||
<a class="btn d-block btn-login" href="{restartUrl}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:button.restart" />
|
||||
</a>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else if="{resetExecuted}">
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::OK')}" disableIcon="true" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:reset_success.headline')}">
|
||||
<f:format.raw>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:reset_success.message" arguments="{0: '{f:be.uri(route: \'login\')}'}"/>
|
||||
</f:format.raw>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
<f:else>
|
||||
<f:if condition="{error}">
|
||||
<f:be.infobox message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:error.password')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}" />
|
||||
</f:if>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:instructions.password" /></p>
|
||||
<form action="{formUrl}" method="post" name="forget-password-form" id="typo3-forget-password-form">
|
||||
<div class="form-group">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-control-holder">
|
||||
<label class="form-label" for="t3-reset-password"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:input.password" /></label>
|
||||
<input
|
||||
type="password"
|
||||
id="t3-reset-password"
|
||||
name="password"
|
||||
value=""
|
||||
class="form-control form-control-clearable input-login t3js-clearable t3js-capslockwarning t3js-login-password-field"
|
||||
autocomplete="new-password"
|
||||
autofocus="autofocus"
|
||||
required="required"
|
||||
spellcheck="false"
|
||||
data-capslockwarning-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslock')}"
|
||||
data-capslockwarning-message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslockStatus')}"
|
||||
data-clearable-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inputfield.clearButton.title')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-control-holder">
|
||||
<label class="form-label" for="t3-reset-password-repeat"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:input.passwordrepeat" /></label>
|
||||
<input
|
||||
type="password"
|
||||
id="t3-reset-password-repeat"
|
||||
name="passwordrepeat"
|
||||
value=""
|
||||
autocomplete="new-password"
|
||||
class="form-control form-control-clearable input-login t3js-clearable t3js-capslockwarning t3js-login-password-field"
|
||||
required="required"
|
||||
spellcheck="false"
|
||||
data-capslockwarning-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslock')}"
|
||||
data-capslockwarning-message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslockStatus')}"
|
||||
data-clearable-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inputfield.clearButton.title')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group d-grid">
|
||||
<button class="btn d-block btn-login" type="submit" name="forgotPasswordSubmit">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:button.reset" />
|
||||
</button>
|
||||
</div>
|
||||
<f:if condition="{passwordRequirements}">
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_reset_password.xlf:instructions.password_requirement" /></p>
|
||||
<ul>
|
||||
<f:for each="{passwordRequirements}" as="passwordRequirement">
|
||||
<li>{passwordRequirement}</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
</form>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,68 @@
|
||||
<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:layout name="Login" />
|
||||
|
||||
<f:section name="loginFormFields">
|
||||
<f:asset.module identifier="@typo3/backend/user-pass-login.js"/>
|
||||
|
||||
<div class="form-group t3js-login-username-section" id="t3-login-username-section">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-control-holder">
|
||||
<label class="form-label" for="t3-username"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.username" /></label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text"
|
||||
id="t3-username"
|
||||
name="username"
|
||||
value="{presetUsername}"
|
||||
class="form-control form-control-clearable input-login t3js-clearable t3js-capslockwarning t3js-login-username-field"
|
||||
autofocus="autofocus"
|
||||
autocomplete="username"
|
||||
required="required"
|
||||
spellcheck="false"
|
||||
data-capslockwarning-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslock')}"
|
||||
data-capslockwarning-message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslockStatus')}"
|
||||
data-clearable-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inputfield.clearButton.title')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group t3js-login-password-section" id="t3-login-password-section">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-control-holder">
|
||||
<label class="form-label" for="t3-password"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.password" /></label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="password"
|
||||
id="t3-password"
|
||||
name="p_field"
|
||||
value="{presetPassword}"
|
||||
class="form-control input-login t3js-clearable t3js-capslockwarning t3js-login-password-field"
|
||||
autocomplete="current-password"
|
||||
required="required"
|
||||
spellcheck="false"
|
||||
data-capslockwarning-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslock')}"
|
||||
data-capslockwarning-message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.error.capslockStatus')}"
|
||||
data-clearable-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inputfield.clearButton.title')}"
|
||||
data-passwordtoggle-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.togglePassword')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="ResetPassword">
|
||||
<div class="forgot-password my-3">
|
||||
<div class="text-end">
|
||||
<a href="{forgetPasswordUrl}"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.password_forget" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,83 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<div class="typo3-login">
|
||||
<div class="typo3-login-inner">
|
||||
<div class="typo3-login-container">
|
||||
<div class="typo3-login-wrap">
|
||||
<div class="card card-login card-mfa">
|
||||
<header class="card-heading">
|
||||
<h2 class="text-center">{provider.title -> f:translate(key: provider.title, default: provider.title)}</h2>
|
||||
</header>
|
||||
<main class="card-body">
|
||||
<f:if condition="{isLocked} || {hasAuthError}">
|
||||
<div id="t3-login-error" class="mb-2">
|
||||
<div class="alert alert-danger">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.{f:if(condition: isLocked, then: 'locked', else: 'authError')}"/>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="!{isLocked}">
|
||||
<f:then>
|
||||
<form action="{formUrl}" method="post" enctype="multipart/form-data" name="verify" id="mfaController">
|
||||
<input type="hidden" name="identifier" value="{provider.identifier}" />
|
||||
{providerContent -> f:format.raw()}
|
||||
<div class="form-group d-grid mb-2" id="t3-login-submit-section">
|
||||
<button class="btn d-block btn-login" type="submit" name="submit" autocomplete="off">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.submit"/>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:comment>In case, the provider is temporarily locked, still allow to render provider specific content.</f:comment>
|
||||
{providerContent -> f:format.raw()}
|
||||
</f:else>
|
||||
</f:if>
|
||||
<div class="cancel-authentication">
|
||||
<div class="text-end">
|
||||
<f:be.link
|
||||
route="auth_mfa"
|
||||
parameters="{action: 'cancel', redirect: redirectRoute, redirectParams: redirectParams}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.cancel')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.cancel"/>
|
||||
</f:be.link>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<f:if condition="{alternativeProviders}">
|
||||
<footer class="card-footer">
|
||||
<h5><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.alternativeProviders"/></h5>
|
||||
<ul class="list-group px-lg-4">
|
||||
<f:for each="{alternativeProviders}" as="alternativeProvider">
|
||||
<li>
|
||||
<f:be.link
|
||||
route="auth_mfa"
|
||||
parameters="{identifier: alternativeProvider.identifier, redirect: redirectRoute, redirectParams: redirectParams}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.alternativeProviders.use', arguments: {0: '{alternativeProvider.title -> f:translate(key: alternativeProvider.title, default: alternativeProvider.title)}'})}"
|
||||
>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:auth.alternativeProviders.use"
|
||||
arguments="{0: '{alternativeProvider.title -> f:translate(key: alternativeProvider.title, default: alternativeProvider.title)}'}"
|
||||
/>
|
||||
</f:be.link>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</footer>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{footerNote}">
|
||||
<aside class="typo3-login-footnote" aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.region.footnote')}">
|
||||
<p>{footerNote}</p>
|
||||
</aside>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,56 @@
|
||||
<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">
|
||||
|
||||
<f:variable name="providerTitle" value="{provider.title -> f:translate(key: provider.title, default: provider.title)}"/>
|
||||
|
||||
<h1><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.title" arguments="{0: providerTitle}"/></h1>
|
||||
<p><f:format.nl2br>{provider.description -> f:translate(key: provider.description, default: provider.description)}</f:format.nl2br></p>
|
||||
|
||||
<form
|
||||
action="{f:be.uri(route:'mfa', parameters:'{action: \'save\'}')}"
|
||||
method="post"
|
||||
enctype="multipart/form-data"
|
||||
name="edit"
|
||||
id="mfaConfigurationController">
|
||||
<input type="hidden" name="identifier" value="{provider.identifier}" />
|
||||
<div class="mb-3">
|
||||
{providerContent -> f:format.raw()}
|
||||
</div>
|
||||
<div class="mfa-provider-settings">
|
||||
<f:if condition="{provider.defaultProviderAllowed}">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-5">
|
||||
<h4><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.defaultProvider"/></h4>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.defaultProvider.description"/></p>
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="defaultProvider" id="defaultProvider" class="form-check-input" value="1" {f:if(condition: isDefaultProvider, then: 'checked="checked"')} />
|
||||
<label class="form-check-label" for="defaultProvider">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.defaultProvider.inputLabel"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h4><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.deactivateProvider"/></h4>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.deactivateProvider.description"/></p>
|
||||
<f:be.link route="mfa" parameters="{action: 'deactivate', identifier: provider.identifier}" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.deactivateProvider.linkTitle', arguments: '{0: providerTitle}')}" class="btn btn-danger">
|
||||
<core:icon identifier="actions-toggle-off" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:edit.deactivateProvider.linkText"/>
|
||||
</f:be.link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,105 @@
|
||||
<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="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.title" /></h1>
|
||||
|
||||
<f:if condition="{setupRequired}">
|
||||
<f:then>
|
||||
<f:if condition="{providers}">
|
||||
<f:then>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.setupRequired.title')}">
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.setupRequired.message"/></p>
|
||||
</f:be.infobox>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.noProviders.title')}">
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:noprovider_error_message"/></p>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else if="!{providers}">
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.noProviders.title')}">
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.noProviders.message"/></p>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{providers}">
|
||||
<f:then>
|
||||
<div class="card-container">
|
||||
<f:for each="{providers}" as="provider">
|
||||
<f:render section="Item" arguments="{provider: provider, defaultProvider: defaultProvider, recommendedProvider: recommendedProvider}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Item">
|
||||
<f:variable name="providerTitle" value="{provider.title -> f:translate(key: provider.title, default: provider.title)}"/>
|
||||
<div class="card card-size-small {f:if(condition: '{recommendedProvider} == {provider.identifier}', then: 'card-success')}" id="{provider.identifier}-provider">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">
|
||||
<core:icon identifier="{provider.iconIdentifier}" size="large"/>
|
||||
</div>
|
||||
<div class="card-header-body">
|
||||
<h2 class="card-title">
|
||||
{providerTitle}
|
||||
<be:mfa.ifHasState state="active" provider="{provider}">
|
||||
<span class="badge badge-{be:mfa.ifHasState(state: 'locked', provider: provider, then: 'danger', else: 'success')}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.badge.{be:mfa.ifHasState(state: 'locked', provider: provider, then: 'locked', else: 'active')}"/>
|
||||
</span>
|
||||
</be:mfa.ifHasState>
|
||||
<f:if condition="{defaultProvider} == {provider.identifier}">
|
||||
<span title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.defaultProvider')}">
|
||||
<core:icon identifier="actions-star" />
|
||||
</span>
|
||||
</f:if>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">{provider.description -> f:translate(key: provider.description, default: provider.description)}</p>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<be:mfa.ifHasState state="active" provider="{provider}">
|
||||
<f:then>
|
||||
<be:mfa.ifHasState state="locked" provider="{provider}">
|
||||
<f:then>
|
||||
<f:be.link route="mfa" parameters="{action: 'unlock', identifier: provider.identifier}" class="btn btn-success" title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.unlockLinkTitle', arguments: {0: providerTitle})}">
|
||||
<core:icon identifier="actions-unlock" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.unlockLinkLabel"/>
|
||||
</f:be.link>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.link route="mfa" parameters="{action: 'edit', identifier: provider.identifier}" class="btn btn-default" title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.editLinkTitle', arguments: {0: providerTitle})}">
|
||||
<core:icon identifier="actions-open" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.editLinkLabel"/>
|
||||
</f:be.link>
|
||||
</f:else>
|
||||
</be:mfa.ifHasState>
|
||||
<f:be.link route="mfa" parameters="{action: 'deactivate', identifier: provider.identifier}" class="btn btn-danger" title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.deactivateLinkTitle', arguments: {0: providerTitle})}">
|
||||
<core:icon identifier="actions-toggle-off" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.deactivateLinkLabel"/>
|
||||
</f:be.link>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.link route="mfa" parameters="{action: 'setup', identifier: provider.identifier}" class="btn btn-{f:if(condition: '{recommendedProvider} == {provider.identifier}', then: 'success', else: 'default')}" title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.setupLinkTitle', arguments: {0: providerTitle})}">
|
||||
<core:icon identifier="actions-plus" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:overview.setupLinkLabel"/>
|
||||
</f:be.link>
|
||||
</f:else>
|
||||
</be:mfa.ifHasState>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,33 @@
|
||||
<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="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:setup.title" arguments="{0: '{provider.title -> f:translate(key: provider.title, default: provider.title)}'}"/></h1>
|
||||
|
||||
<div class="row g-6">
|
||||
<div class="col">
|
||||
<form
|
||||
action="{f:be.uri(route:'mfa', parameters:'{action: \'activate\'}')}"
|
||||
method="post"
|
||||
enctype="multipart/form-data"
|
||||
name="setup"
|
||||
id="mfaConfigurationController">
|
||||
<input type="hidden" name="identifier" value="{provider.identifier}" />
|
||||
{providerContent -> f:format.raw()}
|
||||
</form>
|
||||
</div>
|
||||
<f:if condition="{provider.setupInstructions}">
|
||||
<div class="col-md-4">
|
||||
<f:render partial="Mfa/SetupInstructions" arguments="{provider: provider}" />
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,79 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<div class="typo3-login">
|
||||
<div class="typo3-login-inner">
|
||||
<div class="typo3-login-container">
|
||||
<div class="typo3-login-wrap">
|
||||
<div class="card card-login card-mfa">
|
||||
<header class="card-heading text-center">
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.selection.title" />
|
||||
</h2>
|
||||
<p class="text-variant">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.selection.message" arguments="{0: siteName}" />
|
||||
</p>
|
||||
</header>
|
||||
<main class="card-body">
|
||||
<f:if condition="{recommendedProvider} || {providers}">
|
||||
<f:then>
|
||||
<div class="list-group mb-2">
|
||||
<f:if condition="{recommendedProvider}">
|
||||
<f:render section="providerLink" arguments="{provider: recommendedProvider, highlight: '{providers -> f:count()}', redirect: redirect, redirectParams: redirectParams}" />
|
||||
</f:if>
|
||||
<f:for each="{providers}" as="provider">
|
||||
<f:render section="providerLink" arguments="{provider: provider, redirect: redirect, redirectParams: redirectParams}" />
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="alert alert-warning mb-2">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:noprovider_error_message" arguments="{0: siteName}" />
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<div class="cancel-setup">
|
||||
<div class="text-end">
|
||||
<f:be.link
|
||||
route="setup_mfa"
|
||||
parameters="{action: 'cancel', redirect: redirect, redirectParams: redirectParams}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.selection.goBack')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.selection.goBack"/>
|
||||
</f:be.link>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{footerNote}">
|
||||
<aside class="typo3-login-footnote" aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.region.footnote')}">
|
||||
<p>{footerNote}</p>
|
||||
</aside>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:section name="providerLink">
|
||||
<f:be.link
|
||||
route="setup_mfa"
|
||||
class="list-group-item list-group-item-action {f:if(condition: highlight, then: 'border-success')}"
|
||||
parameters="{action: 'setup', identifier: provider.identifier, redirect: redirect, redirectParams: redirectParams}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.setupProvider', arguments: {0: '{provider.title -> f:translate(key: provider.title, default: provider.title)}'})}"
|
||||
>
|
||||
<div class="d-flex">
|
||||
<div class="align-self-center pe-3">
|
||||
<core:icon identifier="{provider.iconIdentifier}" size="medium" />
|
||||
</div>
|
||||
<div class="align-self-center">
|
||||
<f:translate key="{provider.title}" default="{provider.title}" />
|
||||
</div>
|
||||
</div>
|
||||
</f:be.link>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,68 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<div class="typo3-login">
|
||||
<div class="typo3-login-inner">
|
||||
<div class="typo3-login-container">
|
||||
<div class="typo3-login-wrap typo3-login-wrap-large">
|
||||
<div class="card card-login card-mfa">
|
||||
<header class="card-heading text-center">
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.setupProvider" arguments="{0: '{provider.title -> f:translate(key: provider.title, default: provider.title)}'}"/>
|
||||
</h2>
|
||||
</header>
|
||||
<main class="card-body">
|
||||
<f:if condition="{hasErrors}">
|
||||
<div id="t3-login-error">
|
||||
<div class="alert alert-danger">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:activate.failure" arguments="{0: '{provider.title -> f:translate(key: provider.title, default: provider.title)}'}"/>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<form
|
||||
action="{f:be.uri(route:'setup_mfa', parameters:'{action: \'activate\', redirect: redirect, redirectParams: redirectParams}')}"
|
||||
method="post"
|
||||
enctype="multipart/form-data"
|
||||
name="setup"
|
||||
id="mfaSetupController"
|
||||
>
|
||||
{providerContent -> f:format.raw()}
|
||||
<input type="hidden" name="identifier" value="{provider.identifier}" />
|
||||
<div class="text-end">
|
||||
<f:be.link
|
||||
route="setup_mfa"
|
||||
class="btn btn-default fw-normal"
|
||||
parameters="{redirect: redirect, redirectParams: redirectParams}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.setup.cancel')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.setup.cancel"/>
|
||||
</f:be.link>
|
||||
<button type="submit" class="btn btn-info">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:standalone.setup" />
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<f:if condition="{provider.setupInstructions}">
|
||||
<div class="col-12 mt-3">
|
||||
<f:render partial="Mfa/SetupInstructions" arguments="{provider: provider}" />
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{footerNote}">
|
||||
<aside class="typo3-login-footnote" aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.region.footnote')}">
|
||||
<p>{footerNote}</p>
|
||||
</aside>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,10 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<h5>{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:2_selectPosition') -> f:format.htmlspecialchars()}</h5>
|
||||
<div class="page-position-map">
|
||||
{posMap -> f:format.raw()}
|
||||
</div>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:if condition="{positionSelection}">
|
||||
<h5>{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:1_selectType')}</h5>
|
||||
</f:if>
|
||||
|
||||
<typo3-backend-new-record-wizard
|
||||
storename="new-content-element"
|
||||
categories="{categoriesJson}"
|
||||
searchplaceholder="{f:translate(domain: 'core.misc', key: 'newContentElement.filter.placeholder')}"
|
||||
searchnothingfoundlabel="{f:translate(domain: 'core.misc', key: 'newContentElement.filter.noResults')}"
|
||||
usernotallowedlabel="{f:translate(domain: 'core.misc', key: 'newContentElement.filter.userNotAllowed')}"
|
||||
>
|
||||
</typo3-backend-new-record-wizard>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,62 @@
|
||||
<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="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:db_new.php.pagetitle" /></h1>
|
||||
<f:for each="{recordTypeGroups}" as="recordTypeGroup" key="recordTypeGroupIdentifier">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12">
|
||||
<strong>{recordTypeGroup.icon -> f:format.raw()} <f:format.case mode="capital">{recordTypeGroup.title}</f:format.case></strong>
|
||||
<div class="list-group mt-2">
|
||||
<f:for each="{recordTypeGroup.items}" key="recordTypeTable" as="recordTypeItem">
|
||||
<f:if condition="{recordTypeItem.types}">
|
||||
<f:then>
|
||||
<div class="list-group-item p-0">
|
||||
<button class="list-group-button" data-bs-toggle="collapse" data-bs-target="#{recordTypeTable}-types" aria-expanded="false" aria-controls="{recordTypeTable}-types">
|
||||
{recordTypeItem.icon -> f:format.raw()}
|
||||
{recordTypeItem.label}
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<div class="collapse" id="{recordTypeTable}-types">
|
||||
<div class="list-group m-2 mt-0">
|
||||
<f:for each="{recordTypeItem.types}" key="name" as="type">
|
||||
|
||||
<a class="list-group-item list-group-item-action" href="{type.url}" title="">
|
||||
{type.icon -> f:format.raw()}
|
||||
{type.label}
|
||||
</a>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else if="{recordTypeGroupIdentifier} == 'pages'">
|
||||
<typo3-backend-new-page-wizard-button class="list-group-item list-group-item-action"
|
||||
configuration="{recordTypeItem.wizardConfiguration -> f:format.json()}"
|
||||
data-page-create="{recordTypeTable}"
|
||||
>
|
||||
{recordTypeItem.icon -> f:format.raw()}
|
||||
{recordTypeItem.label}
|
||||
</typo3-backend-new-page-wizard-button>
|
||||
</f:else>
|
||||
<f:else>
|
||||
<a class="list-group-item list-group-item-action" href="{recordTypeItem.url}">
|
||||
{recordTypeItem.icon -> f:format.raw()}
|
||||
{recordTypeItem.label}
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,74 @@
|
||||
<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="Page/MovePageLayout" />
|
||||
|
||||
<f:section name="Content">
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:headline" arguments="{0: element.recordTitle, 1: element.record.uid}" />
|
||||
</h2>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:currentPath" /> {element.recordPath}</p>
|
||||
<input type="hidden" name="elementRecordTitle" id="elementRecordTitle" value="{element.recordTitle}" />
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-check form-switch">
|
||||
<input type="checkbox" name="makeCopy" id="makeCopy" value="1" {f:if(condition: makeCopyChecked, then: 'checked')} class="form-check-input">
|
||||
<label for="makeCopy" class="form-check-label"><f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:makeCopy" /></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page-position">
|
||||
<f:if condition="{hasEditPermissions} && {isDifferentPage}">
|
||||
<div class="page-position-control page-position-control-top">
|
||||
<button data-action="paste" data-position="{positions.above}" class="btn btn-default" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteAbove')}">
|
||||
<typo3-backend-icon identifier="apps-pagetree-drag-move-above" size="small"></typo3-backend-icon>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteAbove" />
|
||||
</button>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{isDifferentPage}">
|
||||
<f:then>
|
||||
<div class="page-position-target">
|
||||
<div class="page-position-target-abstract">
|
||||
<span title="{target.recordTooltip}"><core:iconForRecord table="pages" row="{target.record}" /></span>
|
||||
<strong>{target.recordTitle} [{target.record.uid}]</strong>
|
||||
</div>
|
||||
<div class="page-position-target-meta">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.path" />: {target.recordPath}
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:samePageConflict" arguments="{0: target.recordTitle, 1: target.record.uid}" />
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
|
||||
<f:if condition="{hasEditPermissions} && {isDifferentPage}">
|
||||
<f:if condition="!{targetHasSubpages}">
|
||||
<div class="page-position-control page-position-control-right">
|
||||
<button data-action="paste" data-position="{positions.inside}" class="btn btn-default" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteInto')}">
|
||||
<typo3-backend-icon identifier="apps-pagetree-drag-move-between" size="small"></typo3-backend-icon>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteInto" />
|
||||
</button>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<div class="page-position-control page-position-control-bottom">
|
||||
<button data-action="paste" data-position="{positions.below}" class="btn btn-default" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteBelow')}">
|
||||
<typo3-backend-icon identifier="apps-pagetree-drag-move-below" size="small"></typo3-backend-icon>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Wizards/move_page.xlf:action.pasteBelow" />
|
||||
</button>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,282 @@
|
||||
<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">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/new-multiple-pages.js"/>
|
||||
|
||||
<h1>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:title" />
|
||||
</h1>
|
||||
|
||||
<f:if condition="!{canCreateNew}">
|
||||
<f:then>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:canNotCreateNew.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:canNotCreateNew.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{hasNewPagesData}">
|
||||
<f:then>
|
||||
<f:if condition="{pagesCreated}">
|
||||
<f:then>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:pagesCreated.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:pagesCreated.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:noPagesCreated.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:noPagesCreated.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{visiblePages}">
|
||||
<h2 class="mt-4">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:newSubPages"/>
|
||||
</h2>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:newSubPages.pageTitle" /></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{visiblePages}" as="page" iteration="pageIterator">
|
||||
<tr>
|
||||
<td>
|
||||
<span class="treeline-icon treeline-icon-join{f:if(condition: '{pageIterator.isLast}', then: 'bottom')}"></span>
|
||||
<span title="id={page.uid}"><f:spaceless>
|
||||
<button type="button"
|
||||
class="btn btn-link"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="pages"
|
||||
data-contextmenu-uid="{page.uid}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
|
||||
>
|
||||
<core:iconForRecord table="pages" row="{page}" />
|
||||
</button>
|
||||
{page.title -> f:format.crop(maxCharacters: maxTitleLength)}
|
||||
</f:spaceless></span>
|
||||
</td>
|
||||
<td class="col-control">
|
||||
<div class="btn-group">
|
||||
<be:link.editRecord
|
||||
table="pages"
|
||||
uid="{page.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-page-open" />
|
||||
</be:link.editRecord>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{pageTypes->f:count()} === 0">
|
||||
<f:then>
|
||||
<f:asset.module identifier="@typo3/backend/page-wizard/new-page-wizard-button.js"/>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key: 'multiplePagesCanNotBeCreated.title', domain: 'backend.pages_new')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="multiplePagesCanNotBeCreated.message" domain="backend.pages_new"/>
|
||||
</p>
|
||||
<typo3-backend-new-page-wizard-button
|
||||
class="btn btn-secondary"
|
||||
configuration="{wizardConfiguration -> f:format.json()}"
|
||||
data-page-create="inside"
|
||||
>
|
||||
<f:translate key="multiplePagesCanNotBeCreated.buttonLabel" domain="backend.pages_new"/>
|
||||
</typo3-backend-new-page-wizard-button>
|
||||
</f:be.infobox>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{filteredTypes->f:count()} > 0">
|
||||
<f:asset.module identifier="@typo3/backend/page-wizard/new-page-wizard-button.js"/>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key: 'availablePageTypesHaveBeenFiltered.title', domain: 'backend.pages_new')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="availablePageTypesHaveBeenFiltered.message" domain="backend.pages_new"/>
|
||||
<f:for each="{filteredTypes}" as="label" iteration="i"><f:if condition="{i.isFirst}"><f:else>, </f:else></f:if>{label}</f:for>
|
||||
</p>
|
||||
<typo3-backend-new-page-wizard-button
|
||||
class="btn btn-secondary"
|
||||
configuration="{wizardConfiguration -> f:format.json()}"
|
||||
data-page-create="inside"
|
||||
>
|
||||
<f:translate key="availablePageTypesHaveBeenFiltered.buttonLabel" domain="backend.pages_new"/>
|
||||
</typo3-backend-new-page-wizard-button>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
<div class="t3js-newmultiplepages-newlinetemplate" style="display:none">
|
||||
<f:render section="FormLine" arguments="{line: {index: '[0]', label: '[1]', pageTypes: '{pageTypes}'}}" />
|
||||
</div>
|
||||
|
||||
<form action="{be:moduleLink(route:'pages_new', arguments:'{id:pageUid}')}" method="post">
|
||||
<div class="form-group t3js-newmultiplepages-container">
|
||||
<f:render section="FormLine" arguments="{line: {index: '0', label: '1', pageTypes: '{pageTypes}'}}" />
|
||||
<f:render section="FormLine" arguments="{line: {index: '1', label: '2', pageTypes: '{pageTypes}'}}" />
|
||||
<f:render section="FormLine" arguments="{line: {index: '2', label: '3', pageTypes: '{pageTypes}'}}" />
|
||||
<f:render section="FormLine" arguments="{line: {index: '3', label: '4', pageTypes: '{pageTypes}'}}" />
|
||||
<f:render section="FormLine" arguments="{line: {index: '4', label: '5', pageTypes: '{pageTypes}'}}" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<input
|
||||
class="btn btn-default t3js-newmultiplepages-createnewfields"
|
||||
type="button"
|
||||
value="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:addMoreLines')}"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="formengine-field-item">
|
||||
<div class="form-wizards-wrap">
|
||||
<div class="form-wizards-item-element">
|
||||
<div class="form-check form-check-type-icon-toggle">
|
||||
<input type="checkbox" class="form-check-input" name="createInListEnd" id="createInListEnd" value="1" />
|
||||
<label for="createInListEnd" class="form-check-label">
|
||||
<span class="form-check-label-icon">
|
||||
<span class="form-check-label-icon-checked">
|
||||
<core:icon identifier="actions-check" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="form-check-label-icon-unchecked">
|
||||
<core:icon identifier="miscellaneous-placeholder" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
</span>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:listEnd" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check form-check-type-icon-toggle">
|
||||
<input type="checkbox" class="form-check-input" name="hidePages" id="hidePages" value="1" />
|
||||
<label for="hidePages" class="form-check-label">
|
||||
<span class="form-check-label-icon">
|
||||
<span class="form-check-label-icon-checked">
|
||||
<core:icon identifier="actions-check" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="form-check-label-icon-unchecked">
|
||||
<core:icon identifier="miscellaneous-placeholder" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
</span>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:hidePages" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check form-check-type-icon-toggle">
|
||||
<input type="checkbox" class="form-check-input" name="hidePagesInMenus" id="hidePagesInMenus" value="1" />
|
||||
<label for="hidePagesInMenus" class="form-check-label">
|
||||
<span class="form-check-label-icon">
|
||||
<span class="form-check-label-icon-checked">
|
||||
<core:icon identifier="actions-check" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="form-check-label-icon-unchecked">
|
||||
<core:icon identifier="miscellaneous-placeholder" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
</span>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:hidePagesInMenus" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<input
|
||||
class="btn btn-primary"
|
||||
type="submit"
|
||||
name="create"
|
||||
value="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:create')}"
|
||||
/>
|
||||
<input
|
||||
class="btn btn-default t3js-newmultiplepages-reset-fields"
|
||||
type="reset"
|
||||
value="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:reset')}"
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="FormLine">
|
||||
<fieldset class="form-section" id="form-line-{line.index}">
|
||||
<div class="row">
|
||||
<div class="form-group col-8">
|
||||
<label class="form-label" for="page_new_{line.index}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_new.xlf:newPage"/> {line.label}
|
||||
</label>
|
||||
<div class="formengine-field-item t3js-formengine-field-item">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-wizards-wrap">
|
||||
<input
|
||||
class="form-control t3js-newmultiplepages-page-title"
|
||||
type="text"
|
||||
id="page_new_{line.index}"
|
||||
name="pages[NEW{line.index}][title]"
|
||||
placeholder="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.title')}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-4">
|
||||
<label class="form-label" for="page_new_select_{line.index}">
|
||||
<f:translate key="doktype" domain="core.db.pages"/>
|
||||
</label>
|
||||
<div class="formengine-field-item t3js-formengine-field-item">
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-wizards-wrap">
|
||||
<div class="form-wizards-item-element">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text input-group-icon" id="page_new_icon_{line.index}">
|
||||
<core:iconForRecord table="pages" row="{id: '0'}" />
|
||||
</span>
|
||||
<select id="page_new_select_{line.index}" class="form-select t3js-newmultiplepages-select-doktype" name="pages[NEW{line.index}][doktype]" data-target="#page_new_icon_{line.index}">
|
||||
<f:for each="{line.pageTypes}" as="typegroup" key="group">
|
||||
<optgroup label="{group}">
|
||||
<f:for each="{typegroup}" as="type">
|
||||
<option data-icon='{core:icon(identifier: type.icon)}' value="{type.value}">{f:translate(key: type.label, default: type.label)}</option>
|
||||
</f:for>
|
||||
</optgroup>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,163 @@
|
||||
<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">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
|
||||
<h1>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:title" />
|
||||
</h1>
|
||||
|
||||
<f:if condition="{isInWorkspace}">
|
||||
<f:then>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:notAvailableInWorkspace.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:notAvailableInWorkspace.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}"
|
||||
/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{subPages}">
|
||||
<f:then>
|
||||
<f:if condition="{hasInvisiblePage}">
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:hasInvisiblePage.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:hasInvisiblePage.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:if>
|
||||
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:currentPageOrder" />
|
||||
</h2>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:fieldTitle" />
|
||||
</th>
|
||||
<th>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:fieldSubtitle" />
|
||||
</th>
|
||||
<th>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:fieldNavTitle" />
|
||||
</th>
|
||||
<th>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:fieldTstamp" />
|
||||
</th>
|
||||
<th>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:fieldCrdate" />
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<f:for each="{subPages}" as="page">
|
||||
<tr>
|
||||
<td class="text-nowrap">
|
||||
<core:iconForRecord table="pages" row="{page.record}" />
|
||||
<f:if condition="!{page.canEdit}">
|
||||
<span title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:noEditPermissions')}">
|
||||
<core:icon identifier="status-status-permission-denied" />
|
||||
</span>
|
||||
</f:if>
|
||||
{page.record.title -> f:format.crop(maxCharacters: maxTitleLength)}
|
||||
</td>
|
||||
<td class="text-nowrap">
|
||||
{page.record.subtitle -> f:format.crop(maxCharacters: maxTitleLength)}
|
||||
</td>
|
||||
<td class="text-nowrap">
|
||||
{page.record.nav_title -> f:format.crop(maxCharacters: maxTitleLength)}
|
||||
</td>
|
||||
<td class="text-nowrap">
|
||||
<f:format.date format="{dateFormat} {timeFormat}">{page.record.tstamp}</f:format.date>
|
||||
</td>
|
||||
<td class="text-nowrap">
|
||||
<f:format.date format="{dateFormat} {timeFormat}">{page.record.crdate}</f:format.date>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrder"/>
|
||||
</h2>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'title\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderByTitle" />
|
||||
</a>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'subtitle\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderBySubtitle" />
|
||||
</a>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'nav_title\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderByNavtitle" />
|
||||
</a>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'tstamp\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderByTstamp" />
|
||||
</a>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'create\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderByCreate" />
|
||||
</a>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'pages_sort', arguments:'{id:parentPageUid, newSortBy:\'reverseCurrentSorting\'}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:pleaseConfirm')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderConfirm')}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:changeOrderReverse" />
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:noSubpages.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_pages_sort.xlf:noSubpages.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:be.infobox
|
||||
title="{error.title}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}"
|
||||
>
|
||||
{error.message}
|
||||
</f:be.infobox>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
|
||||
<f:if condition="{context.drawingConfiguration.languageComparisonMode}">
|
||||
<f:then>
|
||||
<f:render partial="PageLayout/LanguageColumns" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render partial="PageLayout/Grid" arguments="{_all}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
@@ -0,0 +1,57 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Before">
|
||||
<f:asset.module identifier="@typo3/backend/clear-cache.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/new-content-element-wizard-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/localization.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/layout-module/drag-drop.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/layout-module/velocity-scroll.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/layout-module/page-layout.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/editable-page-title.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/contextual-record-edit-trigger.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/qrcode-modal-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:variable name="immediateActionArgs" value="{0: 'web', 1: pageId}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{immediateActionArgs -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:if condition="!{pageLayoutContext.drawingConfiguration.languageComparisonMode}">
|
||||
<typo3-backend-editable-page-title
|
||||
pageTitle="{localizedPageTitle}"
|
||||
pageId="{pageId}"
|
||||
localizedPageId="{localizedPageId}"
|
||||
{isPageEditable ? 'editable' : ''}
|
||||
>
|
||||
{localizedPageTitle}
|
||||
</typo3-backend-editable-page-title>
|
||||
</f:if>
|
||||
|
||||
<f:for each="{infoBoxes}" as="infoBox">
|
||||
<f:be.infobox state="{infoBox.state}">
|
||||
<f:format.raw>{infoBox.message}</f:format.raw>
|
||||
</f:be.infobox>
|
||||
</f:for>
|
||||
|
||||
<f:format.raw>{eventContentHtmlTop}</f:format.raw>
|
||||
|
||||
<form action="{f:be.uri(route:'web_layout', parameters:'{id: pageId}')}" id="PageLayoutController" method="post">
|
||||
<f:format.raw>{mainContentHtml}</f:format.raw>
|
||||
</form>
|
||||
|
||||
<f:format.raw>{eventContentHtmlBottom}</f:format.raw>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,24 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Before">
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:variable name="immediateActionArgs" value="{0: 'web', 1: pageId}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{immediateActionArgs -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<h1>{siteName}</h1>
|
||||
<f:be.infobox message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:clickAPage_content')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" />
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
<f:render partial="PageLayout/Grid" arguments="{_all}" />
|
||||
@@ -0,0 +1,384 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:backend="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="Before">
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/tree/tree-node-toggle.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/utility/collapse-state-search.js"/>
|
||||
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<h1>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.headline"
|
||||
arguments="{
|
||||
0: '{pageTitle}'
|
||||
}"
|
||||
/>
|
||||
</h1>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.description" /></p>
|
||||
|
||||
<f:render section="Options" arguments="{_all}" />
|
||||
|
||||
<f:comment><!-- Constants from Site settings --></f:comment>
|
||||
<f:if condition="{siteSettingsAst}">
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.siteSettings" /></h2>
|
||||
<div class="panel-group">
|
||||
<f:render
|
||||
section="TreePanel"
|
||||
arguments="{
|
||||
type: 'constant',
|
||||
tree: siteSettingsAst,
|
||||
pageUid: pageUid,
|
||||
displayComments: 0
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.activePageTsConfig" /></h2>
|
||||
<f:if condition="!{pageTsConfigAst.children}">
|
||||
<f:then>
|
||||
<f:be.infobox
|
||||
message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.noPageTSconfigAvailable')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="panel-group">
|
||||
<f:if condition="{pageTsConfigConditions}">
|
||||
<f:render
|
||||
section="Conditions"
|
||||
arguments="{
|
||||
pageUid: pageUid,
|
||||
conditions: pageTsConfigConditions,
|
||||
conditionActiveCount: pageTsConfigConditionsActiveCount,
|
||||
displayConstantSubstitutions: displayConstantSubstitutions
|
||||
}"
|
||||
/>
|
||||
</f:if>
|
||||
<f:render
|
||||
section="TreePanel"
|
||||
arguments="{
|
||||
type: 'setup',
|
||||
tree: pageTsConfigAst,
|
||||
pageUid: pageUid,
|
||||
displayComments: displayComments,
|
||||
displayConstantSubstitutions: displayConstantSubstitutions
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Options">
|
||||
<div class="form-row-md align-items-md-end">
|
||||
<div class="form-group">
|
||||
<form action="#">
|
||||
<label for="searchValue" class="form-label">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.searchString" />
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
class="form-control t3js-collapse-search-term"
|
||||
id="searchValue"
|
||||
name="searchValue"
|
||||
data-persist-collapse-search-key="collapse-search-term-pagets"
|
||||
value=""
|
||||
minlength="3"
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-row-md">
|
||||
<f:if condition="{siteSettingsAst}">
|
||||
<div class="form-group">
|
||||
<form action="{f:be.uri(route: 'pagetsconfig_active', parameters: '{id: pageUid}')}" method="post">
|
||||
<input type="hidden" name="displayConstantSubstitutions" value="0" />
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input"
|
||||
name="displayConstantSubstitutions"
|
||||
id="displayConstantSubstitutions"
|
||||
value="1"
|
||||
data-global-event="change"
|
||||
data-action-submit="$form"
|
||||
data-value-selector="input[name='displayConstantSubstitutions']"
|
||||
{f:if(condition: displayConstantSubstitutions, then: 'checked="checked"')}
|
||||
/>
|
||||
<label class="form-check-label" for="displayConstantSubstitutions">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.displayConstantSubstitutions" />
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="form-group">
|
||||
<form action="{f:be.uri(route: 'pagetsconfig_active', parameters: '{id: pageUid}')}" method="post">
|
||||
<input type="hidden" name="displayComments" value="0" />
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input"
|
||||
name="displayComments"
|
||||
id="displayComments"
|
||||
value="1"
|
||||
data-global-event="change"
|
||||
data-action-submit="$form"
|
||||
data-value-selector="input[name='displayComments']"
|
||||
{f:if(condition: displayComments, then: 'checked="checked"')}
|
||||
/>
|
||||
<label class="form-check-label" for="displayComments">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.displayComments" />
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<form action="{f:be.uri(route: 'pagetsconfig_active', parameters: '{id: pageUid}')}" method="post">
|
||||
<input type="hidden" name="sortAlphabetically" value="0" />
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input"
|
||||
name="sortAlphabetically"
|
||||
id="sortAlphabetically"
|
||||
value="1"
|
||||
data-global-event="change"
|
||||
data-action-submit="$form"
|
||||
data-value-selector="input[name='sortAlphabetically']"
|
||||
{f:if(condition: sortAlphabetically, then: 'checked="checked"')}
|
||||
/>
|
||||
<label class="form-check-label" for="sortAlphabetically">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.sortAlphabetically" />
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Conditions">
|
||||
<div class="panel panel-default">
|
||||
<h3 class="panel-heading" role="tab" id="pagetsconfig-active-conditions-heading">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#pagetsconfig-active-conditions-body"
|
||||
aria-controls="pagetsconfig-active-conditions-body"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.panel.header.conditions"/></strong>
|
||||
</div>
|
||||
<f:if condition="{conditionActiveCount}">
|
||||
<div class="panel-badge">
|
||||
<span class="badge badge-info">
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.panel.info.conditionActiveCount.{f:if(condition: '{conditionActiveCount} > 1', then:'multiple', else: 'single')}"
|
||||
arguments="{0: conditionActiveCount}"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</f:if>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</h3>
|
||||
<div
|
||||
class="panel-collapse collapse"
|
||||
id="pagetsconfig-active-conditions-body"
|
||||
data-persist-collapse-state="true"
|
||||
data-persist-collapse-state-if-state="shown"
|
||||
role="tabpanel"
|
||||
aria-labelledby="pagetsconfig-active-conditions-heading"
|
||||
>
|
||||
<div class="panel-body">
|
||||
<form action="{f:be.uri(route: 'pagetsconfig_active', parameters: '{id: pageUid}')}" method="post">
|
||||
<f:for each="{conditions}" as="condition">
|
||||
<input type="hidden" name="pageTsConfigConditions[{condition.hash}]" value="0" />
|
||||
<div class="form-check form-switch">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input"
|
||||
id="condition{condition.hash}"
|
||||
name="pageTsConfigConditions[{condition.hash}]"
|
||||
value="1"
|
||||
data-global-event="change"
|
||||
data-action-submit="$form"
|
||||
data-value-selector="input[name='pageTsConfigConditions[{condition.hash}]']"
|
||||
{f:if(condition: condition.active, then: 'checked="checked"')}
|
||||
/>
|
||||
<label class="form-check-label" for="condition{condition.hash}">
|
||||
<f:if condition="{displayConstantSubstitutions} && {condition.originalValue}">
|
||||
<f:then>
|
||||
<span class="font-monospace">[{condition.value}]</span>
|
||||
<span class="diff-inline">
|
||||
<f:format.raw>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.panel.info.conditionWithConstant"
|
||||
arguments="{
|
||||
0: '{backend:typoScript.fineDiff(from: condition.originalValue, to: condition.value)}'
|
||||
}"
|
||||
/>
|
||||
</f:format.raw>
|
||||
</span>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<span class="font-monospace">[{condition.value}]</span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</label>
|
||||
</div>
|
||||
</f:for>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="TreePanel">
|
||||
<div class="panel panel-default">
|
||||
<h3 class="panel-heading" role="tab" id="pagetsconfig-active-{type}-ast-heading">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#pagetsconfig-active-{type}-ast-body"
|
||||
aria-controls="pagetsconfig-active-{type}-ast-body"
|
||||
aria-expanded="false"
|
||||
id="panel-tree-heading-{type}"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.panel.header.configuration"/></strong>
|
||||
</div>
|
||||
<div class="panel-heading-badge">
|
||||
<span class="badge badge-success hidden t3js-collapse-states-search-numberOfSearchMatches"></span>
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</h3>
|
||||
<div
|
||||
id="pagetsconfig-active-{type}-ast-body"
|
||||
class="panel-collapse collapse"
|
||||
data-persist-collapse-state="true"
|
||||
data-persist-collapse-state-if-state="shown"
|
||||
aria-labelledby="pagetsconfig-active-{type}-ast-heading"
|
||||
role="tabpanel"
|
||||
>
|
||||
<div class="panel-body panel-body-overflow t3js-collapse-states-search-tree">
|
||||
<ul class="treelist">
|
||||
<f:render
|
||||
section="Tree"
|
||||
arguments="{
|
||||
type: type,
|
||||
tree: tree,
|
||||
pageUid: pageUid,
|
||||
displayConstantSubstitutions: displayConstantSubstitutions,
|
||||
displayComments: displayComments
|
||||
}"
|
||||
/>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Tree">
|
||||
<f:for each="{tree.nextChild}" as="child">
|
||||
<f:if condition="{displayComments} && {child.comments}">
|
||||
<li class="loose">
|
||||
<div class="treelist-comment">
|
||||
<f:for each="{child.comments}" as="comment" iteration="iterator">
|
||||
<div><f:format.nl2br>{comment}</f:format.nl2br></div>
|
||||
</f:for>
|
||||
</div>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{displayConstantSubstitutions} && {child.originalValueTokenStream}">
|
||||
<li class="loose">
|
||||
<span class="diff-inline">
|
||||
<f:format.raw>
|
||||
<f:variable name="trimmedValueTokenStream"><f:format.trim>{child.originalValueTokenStream}</f:format.trim></f:variable>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_active.tree.valueWithConstant"
|
||||
arguments="{
|
||||
0: '{backend:typoScript.fineDiff(from: trimmedValueTokenStream, to: child.value)}'
|
||||
}"
|
||||
/>
|
||||
</f:format.raw>
|
||||
</span>
|
||||
</li>
|
||||
</f:if>
|
||||
<li>
|
||||
<f:if condition="{child.children}">
|
||||
<typo3-backend-tree-node-toggle
|
||||
class="treelist-control collapsed"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse-list-{child.identifier}"
|
||||
aria-expanded="false">
|
||||
</typo3-backend-tree-node-toggle>
|
||||
</f:if>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">{child.name}</span>
|
||||
<f:if condition="!{child.valueNull}">
|
||||
<span class="treelist-operator">=</span>
|
||||
<span class="treelist-value">{child.value}</span>
|
||||
</f:if>
|
||||
<f:if condition="{child.referenceSourceStream}">
|
||||
<span class="treelist-operator">=<</span>
|
||||
<span class="treelist-value">{child.referenceSourceStream}</span>
|
||||
</f:if>
|
||||
</span>
|
||||
<f:if condition="{child.children}">
|
||||
<div
|
||||
class="treelist-collapse collapse"
|
||||
data-persist-collapse-state="true"
|
||||
data-persist-collapse-state-suffix="pagets-active-{type}"
|
||||
data-persist-collapse-state-not-if-search="true"
|
||||
data-persist-collapse-state-if-state="shown"
|
||||
id="collapse-list-{child.identifier}"
|
||||
>
|
||||
<ul class="treelist">
|
||||
<f:render
|
||||
section="Tree"
|
||||
arguments="{
|
||||
type: type,
|
||||
tree: child,
|
||||
pageUid: pageUid,
|
||||
displayConstantSubstitutions: displayConstantSubstitutions,
|
||||
displayComments: displayComments
|
||||
}"
|
||||
/>
|
||||
</ul>
|
||||
</div>
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,264 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module"/>
|
||||
|
||||
<f:section name="Before">
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/tree/tree-node-toggle.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/pagetsconfig/pagetsconfig-includes.js"/>
|
||||
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<h1>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.headline"
|
||||
arguments="{
|
||||
0: '{pageTitle}'
|
||||
}"
|
||||
/>
|
||||
</h1>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.description" /></p>
|
||||
|
||||
<f:if condition="{siteSettingsTree.children}">
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.siteSettings" /></h2>
|
||||
<div class="panel-group">
|
||||
<f:render
|
||||
section="TreePanel"
|
||||
arguments="{
|
||||
type: 'constants',
|
||||
tree: siteSettingsTree,
|
||||
pageUid: pageUid
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{pageTsConfigTree.children}">
|
||||
<h2><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.pagetsconfig" /></h2>
|
||||
<div class="panel-group">
|
||||
<f:render
|
||||
section="SyntaxErrors"
|
||||
arguments="{
|
||||
type: 'constants',
|
||||
pageUid: pageUid,
|
||||
errors: syntaxErrors,
|
||||
errorCount: syntaxErrorCount
|
||||
}"
|
||||
/>
|
||||
<f:render
|
||||
section="TreePanel"
|
||||
arguments="{
|
||||
type: 'setup',
|
||||
tree: pageTsConfigTree,
|
||||
pageUid: pageUid
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="TreePanel">
|
||||
<div class="panel panel-default">
|
||||
<h3 class="panel-heading" role="tab" id="pagetsconfig-includes-{type}-tree-heading">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#pagetsconfig-includes-{type}-tree-body"
|
||||
aria-controls="pagetsconfig-includes-{type}-tree-body"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.panel.header.configuration"/></strong>
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</h3>
|
||||
<div id="pagetsconfig-includes-{type}-tree-body" class="panel-collapse collapse" data-persist-collapse-state="true" aria-labelledby="pagetsconfig-includes-{type}-tree-heading">
|
||||
<div class="panel-body panel-body-overflow">
|
||||
<ul class="treelist">
|
||||
<f:render
|
||||
section="Tree"
|
||||
arguments="{
|
||||
type: type,
|
||||
pageUid: pageUid,
|
||||
tree: tree
|
||||
}"
|
||||
/>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Tree">
|
||||
<f:if condition="{tree.children}">
|
||||
<f:for each="{tree.nextChild}" as="child">
|
||||
<li>
|
||||
<f:if condition="{child.children}">
|
||||
<typo3-backend-tree-node-toggle
|
||||
class="treelist-control treelist-control-collapsed"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse-list-{child.identifier}"
|
||||
aria-expanded="false">
|
||||
</typo3-backend-tree-node-toggle>
|
||||
</f:if>
|
||||
<div class="row justify-content-between">
|
||||
<div class="col">
|
||||
<div class="row row-cols-auto justify-content-md-between">
|
||||
<div class="col col-12 col-lg-auto">
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
<f:if condition="{child.type} == 'Segment'">
|
||||
<f:then>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.tree.child.type.Segment" />
|
||||
</f:then>
|
||||
<f:else if="{child.type} == 'Condition'">
|
||||
{child.lineStream}
|
||||
</f:else>
|
||||
<f:else if="{child.type} == 'ConditionElse'">
|
||||
{child.lineStream}
|
||||
</f:else>
|
||||
<f:else if="{child.type} == 'ConditionStop'">
|
||||
{child.lineStream}
|
||||
</f:else>
|
||||
<f:else>
|
||||
{child.name}
|
||||
</f:else>
|
||||
</f:if>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col col-12 col-lg-auto text-md-end">
|
||||
<f:comment><!-- Hand {child.type} over to f:translate and add locallang.xlf entries when Include classes stabilized. --></f:comment>
|
||||
<f:if condition="{child.type} != 'Segment'">
|
||||
<f:then>
|
||||
<span class="badge">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.tree.child.type.{child.type}" />
|
||||
</span>
|
||||
</f:then>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col col-auto text-end">
|
||||
<div class="btn-group">
|
||||
<f:be.link
|
||||
route="pagetsconfig_includes.source"
|
||||
parameters="{id: pageUid, includeType: type, identifier: child.identifier}"
|
||||
additionalAttributes="{'data-modal-title': child.name}"
|
||||
class="btn btn-default btn-sm t3js-pagetsconfig-includes-modal{f:if(condition:'!{child.lineStream}', then:' disabled')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.tree.child.btn.sourceCode')}"
|
||||
>
|
||||
<core:icon identifier="{f:if(condition:'{child.lineStream}', then:'actions-variable', else: 'empty-empty')}" />
|
||||
</f:be.link>
|
||||
<f:be.link
|
||||
route="pagetsconfig_includes.sourceWithIncludes"
|
||||
parameters="{id: pageUid, includeType: type, identifier: child.identifier}"
|
||||
additionalAttributes="{'data-modal-title': '{child.name} (with resolved includes)'}"
|
||||
class="btn btn-default btn-sm t3js-pagetsconfig-includes-modal{f:if(condition:'!{child.children}', then:' disabled')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.tree.child.btn.sourceCodeWithResolvedIncludes')}"
|
||||
>
|
||||
<core:icon identifier="{f:if(condition:'{child.children}', then:'actions-variable-select', else: 'empty-empty')}" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:if condition="{child.children}">
|
||||
<ul
|
||||
class="treelist list-group collapse"
|
||||
id="collapse-list-{child.identifier}"
|
||||
data-persist-collapse-state="true"
|
||||
data-persist-collapse-state-suffix="typoscript-include-{type}"
|
||||
data-persist-collapse-state-if-state="shown"
|
||||
>
|
||||
<f:render
|
||||
section="Tree"
|
||||
arguments="{
|
||||
type: type,
|
||||
pageUid: pageUid,
|
||||
tree: child
|
||||
}"
|
||||
/>
|
||||
</ul>
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="SyntaxErrors">
|
||||
<f:if condition="{errors}">
|
||||
<div class="panel panel-default">
|
||||
<h3 class="panel-heading" role="tab" id="pagetsconfig-includes-errors-heading">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#pagetsconfig-includes-errors-body"
|
||||
aria-controls="pagetsconfig-includes-errors-body"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.panel.header.syntaxErrors"/></strong>
|
||||
</div>
|
||||
<div class="panel-badge">
|
||||
<span class="badge badge-warning">
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.panel.info.syntaxErrorCount.{f:if(condition: '{errorCount} > 1', then:'multiple', else: 'single')}"
|
||||
arguments="{0: errorCount}"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</h3>
|
||||
<div id="pagetsconfig-includes-errors-body" class="panel-collapse collapse" data-persist-collapse-state="true" aria-labelledby="pagetsconfig-includes-errors-heading">
|
||||
<div class="panel-body">
|
||||
<f:for each="{errors}" as="error">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col">
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.syntaxError.type.{error.type}"
|
||||
arguments="{0: error.include.name, 1: '{error.lineNumber + 1}'}"
|
||||
/>
|
||||
</div>
|
||||
<div class="col col-auto text-end">
|
||||
<div class="btn-group">
|
||||
<f:be.link
|
||||
route="pagetsconfig_includes.source"
|
||||
parameters="{id: pageUid, includeType: 'setup', identifier: error.include.identifier}"
|
||||
additionalAttributes="{'data-modal-title': error.include.name}"
|
||||
class="btn btn-default btn-sm t3js-pagetsconfig-includes-modal"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_includes.syntaxError.sourceCode')}"
|
||||
>
|
||||
<core:icon identifier="actions-variable" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,76 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module"/>
|
||||
|
||||
<f:section name="Before">
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:variable name="args" value="{0: 'web', 1: id}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<h1>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_pages.headline" />
|
||||
</h1>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_pages.description" /></p>
|
||||
|
||||
<f:if condition="!{accessContent}">
|
||||
<f:then>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig.noAccess')}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="!{overviewOfPagesUsingTSConfig}">
|
||||
<f:then>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" message="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_pages.noRecords')}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_pages.pagetitle" /></th>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_pagetsconfig.xlf:module.pagetsconfig_pages.written_tsconfig_lines" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{overviewOfPagesUsingTSConfig}" as="line">
|
||||
<tr>
|
||||
<td class="align-top nowrap"><f:spaceless>
|
||||
<span style="margin-left: {line.padding}px">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="pages"
|
||||
data-contextmenu-uid="{line.title}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
|
||||
>
|
||||
<span title="id={line.title}">
|
||||
<f:format.raw>{line.icon}</f:format.raw>
|
||||
</span>
|
||||
</button>
|
||||
<f:format.raw>{line.pageTitle}</f:format.raw>
|
||||
</span>
|
||||
</f:spaceless></td>
|
||||
<td>{line.lines}</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,105 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<form
|
||||
action="{f:be.uri(route:'record_download')}"
|
||||
method="post"
|
||||
id="downloadSettingsForm"
|
||||
>
|
||||
|
||||
<h1 class="h3"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.generalSettings"/></h1>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.columnsToDownload"/>
|
||||
</label>
|
||||
<div class="form-description">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.default"
|
||||
arguments="{0: '{f:translate(key: \'LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.selectedColumns\')}'}"/>
|
||||
</div>
|
||||
<div class="form-check form-switch">
|
||||
<input type="checkbox" class="form-check-input" name="allColumns" value="1" data-empty-value="0" id="allColumns">
|
||||
<label class="form-check-label" for="allColumns">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.allColumns"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.valueFormat"/>
|
||||
</label>
|
||||
<div class="form-description">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.default"
|
||||
arguments="{0: '{f:translate(key: \'LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.processedValues\')}'}"/>
|
||||
</div>
|
||||
<div class="form-check form-switch">
|
||||
<input type="checkbox" class="form-check-input" name="rawValues" value="1" data-empty-value="0" id="rawValues"/>
|
||||
<label class="form-check-label" for="rawValues">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.rawValues"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{presets}">
|
||||
<div class="form-group">
|
||||
<label class="form-label d-block" for="preset">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.preset"/>
|
||||
</label>
|
||||
<select id="preset" name="preset" class="form-select d-block">
|
||||
<option value=""></option>
|
||||
<f:for each="{presets}" as="preset">
|
||||
<option value="{preset.identifier}" title="{f:translate(key: preset.label, default: preset.label)}">{f:translate(key: preset.label, default: preset.label)}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="filename">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.filename"/></strong>
|
||||
</label>
|
||||
<input type="text" id="filename" placeholder="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.filename.placeholder', arguments: '{0: table}')}" class="form-control" name="filename" size="30">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="format">
|
||||
<strong><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.format"/></strong>
|
||||
</label>
|
||||
<select class="form-select t3js-record-download-format-selector" id="format" name="format">
|
||||
<f:for each="{formats}" as="format" iteration="i">
|
||||
<option value="{format}" {f:if(condition: i.isFirst, then: 'selected')}><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.format.{format}"/></option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:if condition="{formatOptions}">
|
||||
<f:for each="{formatOptions}" key="formatName" as="format" iteration="i">
|
||||
<div class="{f:if(condition: '!{i.isFirst}', then: 'hide')} t3js-record-download-format-option" data-formatName="{formatName}">
|
||||
<h2 class="h3 headline-spaced"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.formatOptions.{formatName}"/></h2>
|
||||
<div class="form-row mb-0">
|
||||
<f:for each="{format.options}" key="formatOptionName" as="formatOption">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="{formatName}-{formatOptionName}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.formatOptions.{formatName}.{formatOptionName}"/>
|
||||
</label>
|
||||
<select class="form-select" id="{formatName}-{formatOptionName}" name="{formatName}[{formatOptionName}]">
|
||||
<f:for each="{formatOption}" key="optionName" as="option">
|
||||
<option value="{option}" {f:if(condition: '{format.defaults.{formatOptionName}} == {option}', then: 'selected')}>{option} ({f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_download.xlf:downloadSettings.formatOptions.{formatName}.{formatOptionName}.{optionName}')})</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</f:if>
|
||||
|
||||
<input type="hidden" name="table" value="{downloadArguments.table}"/>
|
||||
<input type="hidden" name="id" value="{downloadArguments.id}"/>
|
||||
<input type="hidden" name="searchString" value="{downloadArguments.searchString}"/>
|
||||
<input type="hidden" name="searchLevels" value="{downloadArguments.searchLevels}"/>
|
||||
<input type="hidden" name="sortField" value="{downloadArguments.sortField}"/>
|
||||
<input type="hidden" name="sortRev" value="{downloadArguments.sortRev}"/>
|
||||
</form>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,25 @@
|
||||
<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: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:title')}
|
||||
<f:if condition="{recordTable}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:headline.titleOf" />
|
||||
{recordTableReadable} "{recordTitle}"
|
||||
</f:if>
|
||||
</h1>
|
||||
<f:render partial="RecordHistory/Settings" arguments="{_all}" />
|
||||
<f:if condition="{showDifferences}">
|
||||
<f:render partial="RecordHistory/MultipleDiff" arguments="{_all}" />
|
||||
</f:if>
|
||||
<f:render partial="RecordHistory/History" arguments="{_all}" />
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,47 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Before">
|
||||
<f:asset.module identifier="@typo3/backend/recordlist.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/record-download-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/clear-cache.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/record-search.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/ajax-data-handler.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/column-selector-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-delete-action.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/clipboard-panel.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/new-content-element-wizard-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/localization.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/editable-page-title.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/page-wizard/new-page-wizard-button.js"/>
|
||||
<f:variable name="immediateActionArgs" value="{0: 'web', 1: pageId}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{immediateActionArgs -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<typo3-backend-editable-page-title
|
||||
pageTitle="{pageTitle}"
|
||||
pageId="{pageId}"
|
||||
{isPageEditable ? 'editable' : ''}
|
||||
>
|
||||
{pageTitle}
|
||||
</typo3-backend-editable-page-title>
|
||||
<f:format.raw>{additionalContentTop}</f:format.raw>
|
||||
<f:format.raw>{searchBoxHtml}</f:format.raw>
|
||||
<f:format.raw>{pageTranslationsHtml}</f:format.raw>
|
||||
<f:format.raw>{tableListHtml}</f:format.raw>
|
||||
<f:format.raw>{clipboardHtml}</f:format.raw>
|
||||
<f:format.raw>{additionalContentBottom}</f:format.raw>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,41 @@
|
||||
<div class="recordsearchbox-container" data-recordsearchbox-container>
|
||||
<form action="{formUrl}" method="post">
|
||||
<div class="input-group">
|
||||
<label for="recordsearchbox-searchterm" class="visually-hidden">
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.searchString"/>
|
||||
</label>
|
||||
<input
|
||||
data-recordsearchbox-input
|
||||
class="form-control"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
placeholder="{f:translate(id:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enterSearchString')}"
|
||||
title="{f:translate(id: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.title.searchString')}"
|
||||
name="searchTerm"
|
||||
id="recordsearchbox-searchterm"
|
||||
value="{searchString}"
|
||||
/>
|
||||
<f:if condition="{availableSearchLevels -> f:count()} > 0">
|
||||
<label for="search_levels" class="visually-hidden">
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.search_levels" />
|
||||
</label>
|
||||
<select
|
||||
data-recordsearchbox-levels
|
||||
class="form-select"
|
||||
name="search_levels"
|
||||
title="{f:translate(id: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.title.search_levels')}"
|
||||
id="search_levels"
|
||||
>
|
||||
<f:for each="{availableSearchLevels}" as="searchLevel" key="level">
|
||||
<option {f:if(condition: '{level} == {selectedSearchLevel}', then: ' selected="selected"')} value="{level}">
|
||||
<f:translate id="LLL:{searchLevel}">{searchLevel}</f:translate>
|
||||
</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</f:if>
|
||||
<button data-recordsearchbox-submit class="btn btn-default" type="submit" name="search">
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.title.search" />
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -0,0 +1,76 @@
|
||||
<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="Before">
|
||||
<f:asset.module identifier="@typo3/backend/security/element/csp-reports.js"/>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<h1><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.headline" /></h1>
|
||||
<p>
|
||||
<f:if condition="{extLowlevelAvailable}">
|
||||
<f:then>
|
||||
<f:variable name="moduleLink">
|
||||
<f:be.link route="system_config" parameters="{tree: 'contentSecurityPolicyMutations'}"><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.introtext.moduleName" /></f:be.link>
|
||||
</f:variable>
|
||||
<f:sanitize.html>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.introtext"
|
||||
arguments="{0: '{moduleLink}'}" />
|
||||
</f:sanitize.html>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.introtextLowlevelMissing"
|
||||
arguments="{0: '{f:translate(key:\'LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.introtext.moduleName\')}'}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</p>
|
||||
|
||||
<f:if condition="{configurationStatus.featureDisabled.backend} || {configurationStatus.featureDisabled.frontend}">
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.callout.featureDisabled.title')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.callout.featureDisabled.message" />
|
||||
</p>
|
||||
<ul class="mb-0">
|
||||
<f:for each="{configurationStatus.featureDisabled}" as="dispositions" key="scope">
|
||||
<f:for each="{dispositions}" as="disposition" iteration="iteration">
|
||||
<li><code>security.{scope}.{disposition}ContentSecurityPolicy</code></li>
|
||||
</f:for>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{configurationStatus.customReporting.BE} || {configurationStatus.customReporting.FE}">
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.callout.customReporting.title')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/content-security-policy.xlf:module.callout.customReporting.message" />
|
||||
</p>
|
||||
<ul class="mb-0">
|
||||
<f:for each="{configurationStatus.customReporting}" as="value" key="key">
|
||||
<li><code>$GLOBALS['TYPO3_CONF_VARS']['{key}']['contentSecurityPolicyReportingUrl'] = '{value}'</code></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<typo3-backend-security-csp-reports
|
||||
scopes="{scopes -> f:format.json()}"
|
||||
controlUri="{controlUri}">
|
||||
</typo3-backend-security-csp-reports>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,32 @@
|
||||
<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 domain="backend.user_profile" key="user_settings" />
|
||||
</h1>
|
||||
|
||||
<form
|
||||
action="{f:be.uri(route: 'user_setup')}"
|
||||
method="post"
|
||||
id="SetupModuleController"
|
||||
name="editform"
|
||||
enctype="multipart/form-data"
|
||||
spellcheck="false"
|
||||
>
|
||||
<f:format.raw>{formEngineHtml}</f:format.raw>
|
||||
|
||||
<div>
|
||||
<input type="hidden" name="formToken" value="{formToken}" />
|
||||
<input type="hidden" value="1" name="data[save]" />
|
||||
<input type="hidden" name="data[setValuesToDefault]" value="0" id="setValuesToDefault" />
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,577 @@
|
||||
<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="Before">
|
||||
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/tree/tree-node-toggle.js"/>
|
||||
<f:variable name="args" value="{0: 'site', 1: page.uid}" />
|
||||
<typo3-immediate-action
|
||||
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
|
||||
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
|
||||
></typo3-immediate-action>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:if condition="{site.identifier}">
|
||||
<h1>
|
||||
<f:if condition="{page}">
|
||||
<f:then>
|
||||
<f:translate
|
||||
key="detail.headline_with_page_title"
|
||||
domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{page.title}'
|
||||
}"
|
||||
/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:translate
|
||||
key="detail.headline_with_site_identifier"
|
||||
domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{site.identifier}'
|
||||
}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</h1>
|
||||
|
||||
<f:if condition="{site.sets -> f:count()} && {site.invalidSets}">
|
||||
<f:render partial="SiteManagement/InvalidSets" arguments="{site: site, renderMode: 'infobox'}" />
|
||||
</f:if>
|
||||
|
||||
<h2>
|
||||
<f:translate key="detail.site_configuration.headline" domain="backend.siteconfiguration" />
|
||||
</h2>
|
||||
|
||||
<f:comment><!-- Languages --></f:comment>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#languages-collapse"
|
||||
aria-controls="languages-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="detail.site_configuration.languages" domain="backend.siteconfiguration"/>
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="languages-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="table-fit">
|
||||
<table class="table table-hover table-vertical-top">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-50" colspan="2">
|
||||
<f:translate key="detail.site_configuration.languages.language" domain="backend.siteconfiguration" />
|
||||
</th>
|
||||
<th class="col-50 col-word-break">
|
||||
<f:translate key="detail.site_configuration.languages.language_url" domain="backend.siteconfiguration" />
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{site.languages}" as="language">
|
||||
<tr>
|
||||
<td class="col-icon">
|
||||
<f:if condition="{language.enabled}">
|
||||
<f:then>
|
||||
<core:icon identifier="{language.flagIdentifier}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<core:icon identifier="{language.flagIdentifier}" overlay="overlay-hidden" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
<td>
|
||||
<f:if condition="{language.enabled}">
|
||||
<f:then>
|
||||
{language.title} <code>[{language.languageId}]</code>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<span class="text-body-secondary">
|
||||
{language.title} (<f:translate key="disabled" domain="core.common">disabled</f:translate>)
|
||||
<code>[{language.languageId}]</code>
|
||||
</span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{language.base}" target="_blank">{language.base}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:comment><!-- Error handling --></f:comment>
|
||||
<f:if condition="{site.configuration.errorHandling -> f:count()} > 0">
|
||||
<f:then>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#error-handling-collapse"
|
||||
aria-controls="error-handling-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="detail.site_configuration.error_handling" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="error-handling-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="panel-body">
|
||||
<ul class="treelist">
|
||||
<f:for each="{site.configuration.errorHandling}" as="errorHandling">
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.{errorHandling.errorCode}" />
|
||||
</span>
|
||||
</span>
|
||||
<ul class="treelist">
|
||||
<f:switch expression="{errorHandling.errorHandler}">
|
||||
<f:case value="Fluid">
|
||||
<f:variable name="label" value="{f:translate(key:'site_errorhandling.errorFluidTemplate', domain:'backend.siteconfiguration_tca')}"/>
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{errorHandling.errorFluidTemplate}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
<f:case value="Page">
|
||||
<f:variable name="label" value="{f:translate(key:'site_errorhandling.errorContentSource', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{errorHandling.errorContentSource}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
<f:case value="PHP">
|
||||
<f:variable name="label" value="{f:translate(key:'site_errorhandling.errorPhpClassFQCN', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{errorHandling.errorPhpClassFQCN}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
<f:case value="LoginRedirect">
|
||||
<f:variable name="label" value="{f:translate(key:'site_errorhandling.loginRedirectTarget', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{errorHandling.loginRedirectTarget}'
|
||||
}"
|
||||
/>
|
||||
<f:variable name="label" value="{f:translate(key:'site_errorhandling.loginRedirectParameter', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:variable name="value" value="{f:translate(key:'site_errorhandling.loginRedirectParameter.{errorHandling.loginRedirectParameter}', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: value
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
</f:switch>
|
||||
</ul>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<f:translate key="detail.site_configuration.error_handling" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<f:translate key="detail.not_configured" domain="backend.siteconfiguration"/>
|
||||
</div>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:comment><!-- Static routes --></f:comment>
|
||||
<f:if condition="{site.configuration.routes -> f:count()} > 0">
|
||||
<f:then>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#routes-handling-collapse"
|
||||
aria-controls="routes-handling-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="detail.site_configuration.static_routes" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="routes-handling-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="panel-body">
|
||||
<ul class="treelist">
|
||||
<f:for each="{site.configuration.routes}" as="route">
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
{route.route}
|
||||
</span>
|
||||
</span>
|
||||
<ul class="treelist">
|
||||
<f:variable name="typeLabel" value="{f:translate(key:'site_route.type', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:if condition="{route.type} == 'uri'">
|
||||
<f:then>
|
||||
<f:variable name="typeValue" value="{f:translate(key:'site_route.source', domain:'backend.siteconfiguration_tca')}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:variable name="typeValue" value="{f:translate(key:'site_route.{route.type}', domain:'backend.siteconfiguration_tca')}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: typeLabel,
|
||||
value: typeValue
|
||||
}"
|
||||
/>
|
||||
|
||||
<f:switch expression="{route.type}">
|
||||
<f:case value="staticText">
|
||||
<f:variable name="label" value="{f:translate(key:'site_route.staticText', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{route.content}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
<f:case value="uri">
|
||||
<f:variable name="label" value="{f:translate(key:'site_route.source', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{route.source}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
<f:case value="asset">
|
||||
<f:variable name="label" value="{f:translate(key:'site_route.asset', domain:'backend.siteconfiguration_tca')}" />
|
||||
<f:render
|
||||
section="TreeItem"
|
||||
arguments="{
|
||||
label: label,
|
||||
value: '{route.asset}'
|
||||
}"
|
||||
/>
|
||||
</f:case>
|
||||
</f:switch>
|
||||
</ul>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<f:translate key="detail.site_configuration.static_routes" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<f:translate key="detail.not_configured" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:comment><!-- Route enhancers --></f:comment>
|
||||
<f:if condition="{site.configuration.routeEnhancers -> f:count()} > 0">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#route-enhancers-collapse"
|
||||
aria-controls="route-enhancers-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="detail.site_configuration.route_enhancers" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="route-enhancers-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="panel-body">
|
||||
<ul class="treelist">
|
||||
<f:for each="{site.configuration.routeEnhancers}" as="enhancer" key="enhancerName" iteration="enhancerIterator">
|
||||
<li>
|
||||
<typo3-backend-tree-node-toggle
|
||||
class="treelist-control treelist-control-collapsed"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse-enhancer-{enhancerIterator.index}"
|
||||
aria-expanded="false"
|
||||
></typo3-backend-tree-node-toggle>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
{enhancerName}
|
||||
</span>
|
||||
</span>
|
||||
<div class="treelist-collapse collapse" id="collapse-enhancer-{enhancerIterator.index}" data-persist-collapse-state="true" data-persist-collapse-state-suffix="site-route-enhancers" data-persist-collapse-state-if-state="shown">
|
||||
<f:render section="RouteEnhancerConfig" arguments="{config: enhancer, enhancerIndex: enhancerIterator.index}" />
|
||||
</div>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<h2>
|
||||
<f:translate key="detail.site_settings.headline" domain="backend.siteconfiguration" />
|
||||
</h2>
|
||||
|
||||
<f:if condition="({site.sets -> f:count()} > 0) || ({localSettings.map -> f:count()} > 0) || ({categories -> f:count()} > 0)">
|
||||
<f:then>
|
||||
<f:comment><!-- Show dependencies --></f:comment>
|
||||
<f:if condition="{site.sets -> f:count()} > 0">
|
||||
<h3>
|
||||
<f:translate key="detail.site_settings.dependencies.headline" domain="backend.siteconfiguration" />
|
||||
</h3>
|
||||
<p>
|
||||
<f:sanitize.html><f:translate key="detail.site_settings.dependencies.text" domain="backend.siteconfiguration" /></f:sanitize.html>
|
||||
</p>
|
||||
<ul>
|
||||
<f:for each="{site.sets}" as="set" iteration="setIterator">
|
||||
<li><code>{set}</code></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
|
||||
<h3>
|
||||
<f:translate key="detail.site_settings.active_settings.headline" domain="backend.siteconfiguration" />
|
||||
</h3>
|
||||
|
||||
<f:comment><!-- Settings from site configuration --></f:comment>
|
||||
<f:if condition="{localSettings.map -> f:count()} > 0">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#custom-settings-collapse"
|
||||
aria-controls="custom-settings-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
<f:translate key="detail.site_settings.active_settings.custom_site_settings" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="custom-settings-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="panel-body">
|
||||
<ul class="treelist">
|
||||
<f:for each="{localSettings.map}" as="setting" key="key">
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
{key}
|
||||
</span>
|
||||
<span class="treelist-operator">=</span>
|
||||
<span class="treelist-value">
|
||||
{setting -> f:format.json()}
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:comment><!-- Settings from site sets --></f:comment>
|
||||
<f:if condition="{categories -> f:count()} > 0">
|
||||
<f:for each="{categories}" as="category">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab">
|
||||
<div class="panel-heading-row">
|
||||
<button
|
||||
class="panel-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#siteset-{category.key}-collapse"
|
||||
aria-controls="siteset-{category.key}-collapse"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<div class="panel-title">
|
||||
{category.label}
|
||||
</div>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="siteset-{category.key}-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
|
||||
<div class="panel-body">
|
||||
<f:if condition="{category.categories -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:comment><!-- Grouped settings --></f:comment>
|
||||
<ul class="treelist">
|
||||
<f:for each="{category.categories}" as="section">
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">{section.label}</span>
|
||||
</span>
|
||||
<f:render section="Tree" arguments="{settings: '{section.settings}'}" />
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:comment><!-- Default --></f:comment>
|
||||
<f:render section="Tree" arguments="{settings: '{category.settings}'}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'detail.site_settings.no_settings_found.title', domain:'backend.siteconfiguration')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
>
|
||||
<f:sanitize.html><f:translate key="detail.site_settings.no_settings_found.message" domain="backend.siteconfiguration" /></f:sanitize.html>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Tree">
|
||||
<ul class="treelist">
|
||||
<f:for each="{settings}" as="setting">
|
||||
<f:if condition="{setting.definition.label}">
|
||||
<li class="loose">
|
||||
<div class="treelist-comment">
|
||||
<div>
|
||||
# {setting.definition.label}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</f:if>
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
{setting.definition.key}
|
||||
</span>
|
||||
<span class="treelist-operator">=</span>
|
||||
<span class="treelist-value">
|
||||
{setting.renderedValue}
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:section>
|
||||
|
||||
<f:section name="TreeItem">
|
||||
<li>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">
|
||||
{label}
|
||||
</span>
|
||||
<span class="treelist-operator">=</span>
|
||||
<span class="treelist-value">
|
||||
{value}
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</f:section>
|
||||
|
||||
<f:section name="RouteEnhancerConfig">
|
||||
<ul class="treelist">
|
||||
<f:for each="{config}" as="propertyValue" key="propertyKey" iteration="propertyIterator">
|
||||
<f:render section="RouteEnhancerProperty" arguments="{label: propertyKey, value: propertyValue, idPrefix: 'enhancer-{enhancerIndex}-{propertyIterator.index}'}" />
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:section>
|
||||
|
||||
<f:section name="RouteEnhancerProperty">
|
||||
<f:if condition="{be:type.isArray(value: value)}">
|
||||
<f:then>
|
||||
<li>
|
||||
<typo3-backend-tree-node-toggle
|
||||
class="treelist-control treelist-control-collapsed"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse-{idPrefix}"
|
||||
aria-expanded="false"
|
||||
></typo3-backend-tree-node-toggle>
|
||||
<span class="treelist-group treelist-group-monospace">
|
||||
<span class="treelist-label">{label}</span>
|
||||
</span>
|
||||
<div class="treelist-collapse collapse" id="collapse-{idPrefix}" data-persist-collapse-state="true" data-persist-collapse-state-suffix="site-route-enhancers" data-persist-collapse-state-if-state="shown">
|
||||
<ul class="treelist">
|
||||
<f:for each="{value}" as="subValue" key="subKey" iteration="subIterator">
|
||||
<f:render section="RouteEnhancerProperty" arguments="{label: subKey, value: subValue, idPrefix: '{idPrefix}-{subIterator.index}'}" />
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="TreeItem" arguments="{label: label, value: value}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
@@ -0,0 +1,32 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/site-inline-actions.js"/>
|
||||
|
||||
<f:render partial="SiteManagement/InvalidSets" arguments="{site: site}"/>
|
||||
|
||||
<form
|
||||
action="{f:be.uri(route:'site_configuration.save')}"
|
||||
method="post"
|
||||
enctype="multipart/form-data"
|
||||
name="editform"
|
||||
id="siteConfigurationController"
|
||||
>
|
||||
{formEngineHtml -> f:format.raw()}
|
||||
|
||||
<input type="hidden" name="returnUrl" value="{returnUrl}" />
|
||||
<input type="hidden" name="closeDoc" value="0" />
|
||||
<input type="hidden" name="rootPageId" value="{rootPageId}" />
|
||||
</form>
|
||||
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,633 @@
|
||||
<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="Before">
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
<h1><f:translate key="overview.title" domain="backend.siteconfiguration" /></h1>
|
||||
|
||||
<f:if condition="{rootPagesWithSiteConfiguration -> f:count()} || {rootPagesWithoutSiteConfiguration -> f:count()} || {unassignedSites -> f:count()}">
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'overview.status.title', domain:'backend.siteconfiguration')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::NOTICE')}"
|
||||
>
|
||||
<ul>
|
||||
<f:if condition="{rootPagesWithSiteConfiguration -> f:count()}">
|
||||
<li>
|
||||
<f:sanitize.html>
|
||||
<f:translate
|
||||
key="overview.info.all_sites.{f:if(condition: '{rootPagesWithSiteConfiguration -> f:count()} === 1', then: 'single', else: 'multiple')}"
|
||||
domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{rootPagesWithSiteConfiguration -> f:count()}'
|
||||
}"
|
||||
/>
|
||||
</f:sanitize.html>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{rootPagesWithoutSiteConfiguration -> f:count()}">
|
||||
<li>
|
||||
<f:sanitize.html>
|
||||
<f:translate
|
||||
key="overview.info.root_pages_without_site_sonfiguration.{f:if(condition: '{rootPagesWithoutSiteConfiguration -> f:count()} === 1', then: 'single', else: 'multiple')}"
|
||||
domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{rootPagesWithoutSiteConfiguration -> f:count()}'
|
||||
}"
|
||||
/>
|
||||
</f:sanitize.html>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{unassignedSites -> f:count()}">
|
||||
<li>
|
||||
<f:sanitize.html>
|
||||
<f:translate
|
||||
key="overview.info.unassigned_sites.{f:if(condition: '{unassignedSites -> f:count()} === 1', then: 'single', else: 'multiple')}"
|
||||
domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{unassignedSites -> f:count()}'
|
||||
}"
|
||||
/>
|
||||
</f:sanitize.html>
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<h2><f:translate key="overview.root_pages_without_site_configuration.title" domain="backend.siteconfiguration" /></h2>
|
||||
<f:if condition="!{rootPagesWithSiteConfiguration} && !{rootPagesWithoutSiteConfiguration}">
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.noPages.title')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="overview.noPages.message" domain="backend.siteconfiguration" />
|
||||
</p>
|
||||
<p>
|
||||
<be:link.documentation identifier="t3start:create-root-page" class="btn btn-default">
|
||||
<f:translate key="overview.noPages.link.label" domain="backend.siteconfiguration" />
|
||||
</be:link.documentation>
|
||||
</p>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{rootPagesWithSiteConfiguration}">
|
||||
<f:then>
|
||||
<f:if condition="{duplicatedRootPages}">
|
||||
<f:be.infobox title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.duplicatedRootPage')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}">
|
||||
<ul>
|
||||
<f:for each="{duplicatedRootPages}" key="rootPage" as="duplicateSites">
|
||||
<li>
|
||||
<strong>
|
||||
<f:translate key="overview.duplicatedRootPage.message" domain="backend.siteconfiguration" arguments="{0: rootPage}" />
|
||||
</strong>
|
||||
<f:if condition="{duplicateSites}">
|
||||
<ul>
|
||||
<f:for each="{duplicateSites}" as="duplicateSite">
|
||||
<li>{duplicateSite}</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{duplicatedEntryPoints}">
|
||||
<f:be.infobox title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.duplicatedEntryPoints')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}">
|
||||
<f:translate key="overview.duplicatedEntryPoints.listing" domain="backend.siteconfiguration" />
|
||||
<ul>
|
||||
<f:for each="{duplicatedEntryPoints}" key="item" as="schemes">
|
||||
<li>
|
||||
<strong>{item}</strong>
|
||||
<f:if condition="{schemes}">
|
||||
<ul>
|
||||
<f:for each="{schemes}" key="schema" as="count">
|
||||
<li>{schema} ({count})</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<f:render section="{viewMode.value}" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else if="{rootPagesWithoutSiteConfiguration}">
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.no_sites_with_site_configuration.title')}"
|
||||
>
|
||||
<p>
|
||||
<f:translate key="overview.no_sites_with_site_configuration.message" domain="backend.siteconfiguration" />
|
||||
</p>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{rootPagesWithoutSiteConfiguration}">
|
||||
<h2>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.rootPagesWithoutSiteConfiguration.title')}</h2>
|
||||
<p>
|
||||
<f:translate key="overview.rootPagesWithoutSiteConfiguration.description" domain="backend.siteconfiguration" />
|
||||
</p>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2" class="nowrap"><f:translate key="overview.site" domain="backend.siteconfiguration" /></th>
|
||||
<th class="align-top"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{rootPagesWithoutSiteConfiguration}" as="page">
|
||||
<tr>
|
||||
<td class="col-icon">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="pages"
|
||||
data-contextmenu-uid="{page.uid}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}">
|
||||
<core:iconForRecord table="pages" row="{page}" />
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
{page.title}
|
||||
</td>
|
||||
<td class="col-control">
|
||||
<div class="btn-group">
|
||||
<f:be.link
|
||||
route="site_configuration.edit"
|
||||
parameters="{pageUid: page.uid}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-plus" />
|
||||
<f:translate key="overview.addSiteConfiguration" domain="backend.siteconfiguration" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{unassignedSites}">
|
||||
<h2>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.unassignedSites.title')}</h2>
|
||||
<p>
|
||||
<f:translate key="overview.unassignedSites.description" domain="backend.siteconfiguration" />
|
||||
</p>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="nowrap"><f:translate key="overview.siteIdentifier" domain="backend.siteconfiguration" /></th>
|
||||
<th class="align-top"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{unassignedSites}" as="unassignedSite">
|
||||
<tr>
|
||||
<td>
|
||||
<code>{unassignedSite.identifier}</code>
|
||||
</td>
|
||||
<td class="col-control">
|
||||
<div class="btn-group">
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-default t3js-modal-trigger"
|
||||
form="form-site-configuration-delete"
|
||||
name="site"
|
||||
value="{unassignedSite.identifier}"
|
||||
data-severity="error"
|
||||
data-title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.deleteSiteConfiguration')}"
|
||||
data-button-close-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-button-ok-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:delete')}"
|
||||
>
|
||||
<core:icon identifier="actions-delete" />
|
||||
<f:translate key="overview.deleteSiteConfiguration" domain="backend.siteconfiguration" />
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{invalidSets}">
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.invalidSets.title')}"
|
||||
>
|
||||
<p>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration.xlf:overview.invalidSets.description')}</p>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><f:translate key="overview.invalidSets.set" domain="backend.siteconfiguration" /></th>
|
||||
<th><f:translate key="overview.invalidSets.error" domain="backend.siteconfiguration" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{invalidSets}" as="invalidSet">
|
||||
<tr>
|
||||
<td><code>{invalidSet.name}</code></td>
|
||||
<td>
|
||||
<f:translate key="{invalidSet.error.label}" arguments="{0: invalidSet.name, 1: invalidSet.context}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:be.infobox>
|
||||
</f:if>
|
||||
|
||||
<form action="{be:moduleLink(route:'site_configuration.delete')}" id="form-site-configuration-delete" method="post" class="hidden"></form>
|
||||
</f:section>
|
||||
|
||||
<f:section name="list">
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2" class="nowrap align-top"><f:translate key="overview.site" domain="backend.siteconfiguration" /></th>
|
||||
<th class="align-top"><f:translate key="overview.siteIdentifier" domain="backend.siteconfiguration" /></th>
|
||||
<th class="align-top"><f:translate key="site_language.language" domain="backend.siteconfiguration_tca" /></th>
|
||||
<th class="align-top"><f:translate key="overview.baseUrl" domain="backend.siteconfiguration" /></th>
|
||||
<th class="align-top"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{rootPagesWithSiteConfiguration}" as="page">
|
||||
<f:variable name="rootPage" value="{page}" />
|
||||
<f:for each="{page.rootline}" as="rootLinePage" iteration="rootLinePageIterator">
|
||||
<f:if condition="{rootLinePage.uid} == {page.uid}">
|
||||
<f:variable name="rootPage" value="{rootLinePage}" />
|
||||
</f:if>
|
||||
</f:for>
|
||||
<tr>
|
||||
<td class="col-icon align-top">
|
||||
<button type="button"
|
||||
class="btn btn-link"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="pages"
|
||||
data-contextmenu-uid="{rootPage.uid}"
|
||||
aria-label="{f:translate(key: 'labels.contextMenu.open', domain:'core.core')}">
|
||||
<core:iconForRecord table="pages" row="{rootPage}" />
|
||||
</button>
|
||||
</td>
|
||||
<td class="align-top">
|
||||
<f:if condition="{page.siteIdentifier}">
|
||||
<f:then>
|
||||
<f:be.link route="site_configuration.edit" parameters="{site: page.siteIdentifier}" title="{f:translate(key:'overview.editSiteConfiguration', domain:'backend.siteconfiguration')}">
|
||||
{rootPage.title}
|
||||
</f:be.link>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{rootPage.title}
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="align-top">
|
||||
<f:if condition="{page.siteIdentifier}">
|
||||
<f:then>
|
||||
<code>{page.siteIdentifier}</code>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div>
|
||||
<f:be.link route="site_configuration.edit" parameters="{pageUid: page.uid}" class="btn btn-primary">
|
||||
<f:translate key="overview.addSiteConfiguration" domain="backend.siteconfiguration" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{page.siteConfiguration.invalidSets}">
|
||||
<f:render partial="SiteManagement/InvalidSets" arguments="{site: page.siteConfiguration}"/>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="align-top">
|
||||
<f:if condition="{page.siteConfiguration}">
|
||||
<f:for each="{page.siteConfiguration.allLanguages}" as="siteLanguage" iteration="siteLanguageIterator">
|
||||
<div class="{f:if(condition: '{siteLanguageIterator.isLast}', then: '', else: 'mb-2')}">
|
||||
<f:if condition="{siteLanguage.enabled}">
|
||||
<f:then>
|
||||
<core:icon identifier="{siteLanguage.flagIdentifier}" /> {siteLanguage.title} <code>[{siteLanguage.languageId}]</code>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<core:icon identifier="{siteLanguage.flagIdentifier}" overlay="overlay-hidden" />
|
||||
<span class="text-variant">{siteLanguage.title} (<f:translate key="disabled" domain="core.common">disabled</f:translate>) <code>[{siteLanguage.languageId}]</code></span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:for>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="align-top">
|
||||
<f:if condition="{page.siteConfiguration}">
|
||||
<f:for each="{page.siteConfiguration.allLanguages}" as="siteLanguage" iteration="siteLanguageIterator">
|
||||
<div class="{f:if(condition: '{siteLanguageIterator.isLast}', then: '', else: 'mb-2')}">
|
||||
<a href="{siteLanguage.base}" target="_blank">{siteLanguage.base}</a>
|
||||
</div>
|
||||
</f:for>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="align-top nowrap col-control">
|
||||
<div class="btn-group">
|
||||
<f:if condition="{page.siteIdentifier}">
|
||||
<f:be.link
|
||||
route="site_configuration.detail"
|
||||
parameters="{site: page.siteIdentifier}"
|
||||
title="{f:translate(key:'overview.btn.details', domain:'backend.siteconfiguration')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-system-options-view" />
|
||||
</f:be.link>
|
||||
<f:be.link
|
||||
route="site_configuration.edit"
|
||||
parameters="{site: page.siteIdentifier}"
|
||||
title="{f:translate(key:'overview.editSiteConfiguration', domain:'backend.siteconfiguration')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</f:be.link>
|
||||
<f:if condition="{page.siteConfiguration.sets -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:variable name="returnUrl">{f:be.uri(route: 'site_configuration')}</f:variable>
|
||||
<f:be.link
|
||||
route="site_configuration.editSettings"
|
||||
parameters="{site: page.siteIdentifier, returnUrl: returnUrl}"
|
||||
title="{f:translate(key:'overview.editSiteSettings', domain:'backend.siteconfiguration')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-cog" />
|
||||
</f:be.link>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<button
|
||||
disabled
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
title="{f:translate(key:'overview.editSiteSettingsUnavailable', domain:'backend.siteconfiguration')}}"
|
||||
>
|
||||
<core:icon identifier="actions-cog" />
|
||||
</button>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-default t3js-modal-trigger"
|
||||
form="form-site-configuration-delete"
|
||||
name="site"
|
||||
value="{page.siteIdentifier}"
|
||||
title="{f:translate(key:'overview.deleteSiteConfiguration', domain:'backend.siteconfiguration')}}"
|
||||
data-severity="error"
|
||||
data-title="{f:translate(key:'overview.deleteSiteConfiguration', domain:'backend.siteconfiguration')}}"
|
||||
data-button-close-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-button-ok-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:delete')}"
|
||||
>
|
||||
<core:icon identifier="actions-delete" />
|
||||
</button>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="tiles">
|
||||
<div class="card-container">
|
||||
<f:for each="{rootPagesWithSiteConfiguration}" as="page">
|
||||
<f:variable name="rootPage" value="{page}" />
|
||||
<f:for each="{page.rootline}" as="rootLinePage" iteration="rootLinePageIterator">
|
||||
<f:if condition="{rootLinePage.uid} == {page.uid}">
|
||||
<f:variable name="rootPage" value="{rootLinePage}" />
|
||||
</f:if>
|
||||
</f:for>
|
||||
<div class="card card-size-medium">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="pages"
|
||||
data-contextmenu-uid="{rootPage.uid}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
|
||||
>
|
||||
<core:iconForRecord table="pages" row="{rootPage}" size="medium" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-header-body">
|
||||
<h2 class="card-title">
|
||||
{rootPage.title}
|
||||
</h2>
|
||||
<f:if condition="{page.siteIdentifier}">
|
||||
<span class="card-subtitle">
|
||||
<code>{page.siteIdentifier}</code>
|
||||
</span>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{page.siteConfiguration}">
|
||||
<ul class="list-group list-group-flush">
|
||||
<li class="list-group-item">
|
||||
<div class="d-sm-flex justify-content-sm-between">
|
||||
<strong>
|
||||
<f:translate key="overview.entry_point" domain="backend.siteconfiguration" />:
|
||||
</strong>
|
||||
<div>
|
||||
<a href="{page.siteConfiguration.base}" target="_blank">{page.siteConfiguration.base}</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<div class="d-sm-flex justify-content-sm-between">
|
||||
<strong>
|
||||
<f:translate key="overview.languages" domain="backend.siteconfiguration" />:
|
||||
</strong>
|
||||
<div>
|
||||
<core:icon identifier="{page.siteConfiguration.allLanguages.0.flagIdentifier}" /> {page.siteConfiguration.allLanguages.0.title}
|
||||
<f:if condition="{page.siteConfiguration.allLanguages -> f:count()} > 1">
|
||||
<f:variable name="siteLanguageAmount" value="{page.siteConfiguration.allLanguages -> f:count()}" />
|
||||
<f:translate
|
||||
key="overview.languages.amount" domain="backend.siteconfiguration"
|
||||
arguments="{
|
||||
0: '{siteLanguageAmount - 1}'
|
||||
}"
|
||||
/>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<div class="d-sm-flex justify-content-sm-between">
|
||||
<strong>
|
||||
<f:translate key="overview.site_sets" domain="backend.siteconfiguration" />:
|
||||
</strong>
|
||||
<div>
|
||||
<f:if condition="{page.siteConfiguration.sets -> f:count()}">
|
||||
<f:then>
|
||||
<div class="d-none d-sm-inline">
|
||||
<core:icon identifier="actions-check" />
|
||||
<span class="visually-hidden">
|
||||
<f:translate key="overview.site_sets.yes" domain="backend.siteconfiguration" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-inline d-sm-none">
|
||||
<f:translate key="overview.site_sets.yes" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="none" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{page.siteConfiguration.invalidSets}">
|
||||
<f:render partial="SiteManagement/InvalidSets" arguments="{site: page.siteConfiguration}"/>
|
||||
</f:if>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<div class="d-sm-flex justify-content-sm-between">
|
||||
<strong>
|
||||
<f:translate key="overview.error_handling" domain="backend.siteconfiguration" />:
|
||||
</strong>
|
||||
<div>
|
||||
<f:if condition="{page.siteConfiguration.configuration.errorHandling -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:for each="{page.siteConfiguration.configuration.errorHandling}" as="errorHandling" iteration="errorHandlingIterator">
|
||||
{errorHandling.errorCode}{f:if(condition: '{errorHandlingIterator.isLast}', then: '', else: ', ')}
|
||||
</f:for>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="none" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<div class="d-sm-flex justify-content-sm-between">
|
||||
<strong>
|
||||
<f:translate key="overview.static_routes" domain="backend.siteconfiguration" />:
|
||||
</strong>
|
||||
<div>
|
||||
<f:if condition="{page.siteConfiguration.configuration.routes -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:for each="{page.siteConfiguration.configuration.routes}" as="route" iteration="routeIterator">
|
||||
{route.route}{f:if(condition: '{routeIterator.isLast}', then: '', else: ', ')}
|
||||
</f:for>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="none" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</f:if>
|
||||
<div class="card-footer">
|
||||
<f:if condition="{page.siteIdentifier}">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="btn-group">
|
||||
<f:be.link
|
||||
route="site_configuration.detail"
|
||||
parameters="{site: page.siteIdentifier}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-system-options-view" />
|
||||
<f:translate key="overview.btn.details" domain="backend.siteconfiguration" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<f:be.link
|
||||
route="site_configuration.edit"
|
||||
parameters="{site: page.siteIdentifier}"
|
||||
title="{f:translate(key:'overview.editSiteConfiguration', domain:'backend.siteconfiguration')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</f:be.link>
|
||||
<f:if condition="{page.siteConfiguration.sets -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:be.link
|
||||
route="site_configuration.editSettings"
|
||||
parameters="{site: page.siteIdentifier, returnUrl: returnUrl}"
|
||||
title="{f:translate(key:'overview.editSiteSettings', domain:'backend.siteconfiguration')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-cog" />
|
||||
</f:be.link>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<button
|
||||
disabled
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
title="{f:translate(key:'overview.editSiteSettingsUnavailable', domain:'backend.siteconfiguration')}"
|
||||
>
|
||||
<core:icon identifier="actions-cog" />
|
||||
</button>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-default t3js-modal-trigger"
|
||||
form="form-site-configuration-delete"
|
||||
name="site"
|
||||
value="{page.siteIdentifier}"
|
||||
title="{f:translate(key:'overview.deleteSiteConfiguration', domain:'backend.siteconfiguration')}"
|
||||
data-severity="error"
|
||||
data-title="{f:translate(key:'overview.deleteSiteConfiguration', domain:'backend.siteconfiguration')}"
|
||||
data-button-close-text="{f:translate(key:'cancel', domain: 'core.common')}"
|
||||
data-button-ok-text="{f:translate(key:'delete', domain: 'core.common')}"
|
||||
>
|
||||
<core:icon identifier="actions-delete" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="none">
|
||||
<div class="d-none d-sm-inline">
|
||||
<core:icon identifier="actions-close" />
|
||||
<span class="visually-hidden">
|
||||
<f:translate key="overview.none" domain="backend.siteconfiguration" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-inline d-sm-none">
|
||||
<f:translate key="overview.none" domain="backend.siteconfiguration" />
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,45 @@
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/settings/editor.js"/>
|
||||
<f:for each="{categories}" as="category">
|
||||
<f:for each="{category.settings}" as="setting">
|
||||
<f:asset.module identifier="{setting.typeImplementation}"/>
|
||||
</f:for>
|
||||
</f:for>
|
||||
|
||||
<h1>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_sitesettings.xlf:edit.headline"
|
||||
arguments="{0: siteTitle}"
|
||||
/>
|
||||
</h1>
|
||||
|
||||
<f:render partial="SiteManagement/InvalidSets" arguments="{site: site, renderMode: 'infobox'}"/>
|
||||
|
||||
<f:if condition="{categories -> f:count()} == 0">
|
||||
<f:then>
|
||||
<f:be.infobox
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_sitesettings.xlf:edit.noSettings.title')}"
|
||||
>
|
||||
<f:translate
|
||||
key="LLL:EXT:backend/Resources/Private/Language/locallang_sitesettings.xlf:edit.noSettings.message"
|
||||
arguments="{0: site.identifier}"
|
||||
/>
|
||||
</f:be.infobox>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<typo3-backend-settings-editor
|
||||
form-name="sitesettings_form"
|
||||
action-url="{actionUrl}"
|
||||
categories="{categories -> f:format.json()}"
|
||||
custom-form-data="{f:format.json(value: {formToken: formToken, returnUrl: returnUrl})}"
|
||||
mode="{mode.value}"
|
||||
{f:if(condition: "{mode.value} === advanced", then: 'dump-url="{dumpUrl}"')}
|
||||
></typo3-backend-settings-editor>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
@@ -0,0 +1,75 @@
|
||||
<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">
|
||||
<f:if condition="{currentModule}">
|
||||
<f:then>
|
||||
<h1>{f:translate(key: currentModule.title, default: currentModule.title)}</h1>
|
||||
<f:if condition="{currentModule.description}">
|
||||
<f:then>
|
||||
<p>{f:translate(key: currentModule.description, default: currentModule.description) -> f:transform.html()}</p>
|
||||
</f:then>
|
||||
<f:else if="{currentModule.shortDescription}">
|
||||
<p>{f:translate(key: currentModule.shortDescription, default: currentModule.shortDescription)}</p>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{submodules}">
|
||||
<f:then>
|
||||
<div class="card-container">
|
||||
<f:for each="{submodules}" as="subModule">
|
||||
<div class="card card-size-small">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">
|
||||
<core:icon identifier="{subModule.iconIdentifier}" size="medium" alternativeMarkupIdentifier="inline"/>
|
||||
</div>
|
||||
<div class="card-header-body">
|
||||
<h2 class="card-title">{f:translate(key: subModule.title, default: subModule.title)}</h2>
|
||||
<f:if condition="{subModule.shortDescription}">
|
||||
<span class="card-subtitle">{f:translate(key: subModule.shortDescription, default: subModule.shortDescription)}</span>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<f:if condition="{subModule.description}">
|
||||
<p class="card-text">{f:translate(key: subModule.description, default: subModule.description)}</p>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<f:variable name="moduleTitle">{f:translate(key: subModule.title, default: subModule.title)}</f:variable>
|
||||
<a
|
||||
href="{f:be.uri(route: subModule.identifier, parameters: additionalParameters)}"
|
||||
class="btn btn-default"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:submoduleOverview.openModuleWithTitle', arguments: {0: moduleTitle})}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:submoduleOverview.openModule" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:submoduleOverview.noAccess.title')}"
|
||||
message="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:submoduleOverview.noAccess.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox
|
||||
title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:module.noAccess.title')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:asset.module identifier="@typo3/backend/security/element/sudo-mode.js"/>
|
||||
<typo3-backend-security-sudo-mode
|
||||
has-fatal-error
|
||||
cancelUri="{cancelUri}"
|
||||
labels="{labels -> f:format.json()}"
|
||||
allow-install-tool-password
|
||||
></typo3-backend-security-sudo-mode>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:asset.module identifier="@typo3/backend/security/element/sudo-mode.js"/>
|
||||
<typo3-backend-security-sudo-mode
|
||||
verifyActionUri="{verifyActionUri}"
|
||||
labels="{labels -> f:format.json()}"
|
||||
{f:if(condition: allowInstallToolPassword, then: 'allow-install-tool-password')}
|
||||
></typo3-backend-security-sudo-mode>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
<typo3-backend-bookmark-menu></typo3-backend-bookmark-menu>
|
||||
@@ -0,0 +1,9 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<f:asset.module identifier="@typo3/backend/bookmark/toolbar/bookmark-menu-element.js"/>
|
||||
<span class="toolbar-item-icon" title="{f:translate(key: 'core.bookmarks:title')}" aria-hidden="true">
|
||||
<core:icon identifier="actions-bookmark" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="toolbar-item-title">
|
||||
<f:translate key="core.bookmarks:title"/>
|
||||
</span>
|
||||
</html>
|
||||
@@ -0,0 +1,7 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<f:asset.module identifier="@typo3/backend/toolbar/clear-cache-menu.js"/>
|
||||
<f:render partial="ToolbarItems/ToolbarItem" arguments="{
|
||||
title: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.clearCache',
|
||||
icon: '{core:icon(identifier: \'actions-bolt\', size: \'small\', alternativeMarkupIdentifier: \'inline\')}'
|
||||
}" />
|
||||
</html>
|
||||
@@ -0,0 +1,21 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<p class="dropdown-headline"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.clearCache" /></p>
|
||||
<ul class="dropdown-list">
|
||||
<f:for each="{cacheActions}" as="cacheAction">
|
||||
<li>
|
||||
<button type="button" data-endpoint="{cacheAction.endpoint}" class="dropdown-item t3js-toolbar-cache-flush-action" aria-describedby="{cacheAction.id}-description">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon {f:if(condition: cacheAction.severity, then: 'text-{cacheAction.severity}')}">
|
||||
<core:icon identifier="{cacheAction.iconIdentifier}" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate key="{cacheAction.title}" /><br>
|
||||
<small class="text-variant" aria-hidden="true">{f:translate(key: '{f:if(condition: cacheAction.description, then: cacheAction.description, else: cacheAction.title)}')}</small>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<span id="{cacheAction.id}-description" class="visually-hidden">{f:translate(key: '{f:if(condition: cacheAction.description, then: cacheAction.description, else: cacheAction.title)}')}</span>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<f:asset.module identifier="@typo3/backend/toolbar/clear-cache-menu.js"/>
|
||||
<button type="button" data-endpoint="{endpoint}" class="toolbar-item-link t3js-toolbar-cache-flush-action">
|
||||
<f:render partial="ToolbarItems/ToolbarItem" arguments="{title: title, icon: '{core:icon(identifier: iconIdentifier, size: \'small\')}'}"/>
|
||||
</button>
|
||||
</html>
|
||||
@@ -0,0 +1,14 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/live-search/toolbar/live-search-toolbar-item.js"/>
|
||||
<button
|
||||
class="toolbar-item-link t3js-topbar-button-search"
|
||||
aria-haspopup="dialog"
|
||||
>
|
||||
<f:render partial="ToolbarItems/ToolbarItem" arguments="{
|
||||
title: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.search',
|
||||
icon: '{core:icon(identifier: \'actions-search\', size: \'small\', alternativeMarkupIdentifier: \'inline\')}'
|
||||
}" />
|
||||
</button>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,82 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<span data-systeminformation-data
|
||||
data-systeminformation-data-count="{count}"
|
||||
data-systeminformation-data-severitybadgeclass="{severityBadgeClass}"
|
||||
></span>
|
||||
|
||||
<p class="dropdown-headline"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.sysinfo"/></p>
|
||||
<p class="dropdown-item-text">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.sysinfo.intro.text"/>
|
||||
<a href="#" data-moduleroute-identifier="system_environment">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.sysinfo.intro.link"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<f:if condition="{systemInformation}">
|
||||
<table class="dropdown-table">
|
||||
<caption class="hidden">System overview</caption>
|
||||
<f:for each="{systemInformation}" as="info">
|
||||
<tr>
|
||||
<th data-type="title" scope="row">
|
||||
<f:if condition="{info.iconIdentifier}">
|
||||
<f:then>
|
||||
<core:icon identifier="{info.iconIdentifier}" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</f:then>
|
||||
<f:else if="{info.icon}" >{info.icon -> f:format.raw()}</f:else>
|
||||
<f:else>
|
||||
<core:icon identifier="empty-empty" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:translate key="{info.title}" default="{info.title}"/>
|
||||
<f:if condition="{info.titleAddition}"> ({info.titleAddition -> f:format.htmlspecialchars()})</f:if>
|
||||
</th>
|
||||
<f:if condition="{info.status}">
|
||||
<td data-type="status">
|
||||
<typo3-backend-status-indicator state="{info.status}"></typo3-backend-status-indicator>
|
||||
</td>
|
||||
</f:if>
|
||||
<td {f:if(condition: info.status, else: 'colspan="2"')} data-type="value">
|
||||
|
||||
{info.value}
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</table>
|
||||
</f:if>
|
||||
|
||||
<hr class="dropdown-divider" aria-hidden="true">
|
||||
|
||||
<f:if condition="{messages -> f:count()} > 0">
|
||||
<f:then>
|
||||
<f:for each="{messages}" as="message">
|
||||
<div class="dropdown-row"
|
||||
data-systeminformation-message-module="{message.module}"
|
||||
data-systeminformation-message-params="{message.params}"
|
||||
data-systeminformation-message-count="{message.count}"
|
||||
data-systeminformation-message-status="{message.status}"
|
||||
>
|
||||
<div>
|
||||
<span class="text-{message.status}">
|
||||
<core:icon identifier="actions-exclamation-circle-alt" />
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<f:format.raw>{message.text}</f:format.raw>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="dropdown-row">
|
||||
<div>
|
||||
<span class="text-success">
|
||||
<core:icon identifier="actions-check-circle-alt" />
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<f:format.nl2br><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.sysinfo.allgood" /></f:format.nl2br>
|
||||
</div>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
<html xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<f:asset.module identifier="@typo3/backend/toolbar/system-information-menu.js"/>
|
||||
<f:render partial="ToolbarItems/ToolbarItem" arguments="{
|
||||
title: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.sysinfo',
|
||||
icon: '{core:icon(identifier: \'actions-info-circle\', size: \'small\', alternativeMarkupIdentifier: \'inline\')}'
|
||||
}" />
|
||||
<span class="toolbar-item-badge badge badge-pill badge-warning hidden" data-systeminformation-badge></span>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<html xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||
<span class="toolbar-item-avatar"><be:avatar backendUser="{currentUser.uid}" size="24"/></span>
|
||||
<f:if condition="{switchUserMode}">
|
||||
<f:then>
|
||||
<span
|
||||
class="toolbar-item-name"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.account.switchToUserMode.tooltip')} {currentUser.username}"
|
||||
>
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.account.switchToUserMode.account.prefix')}
|
||||
{f:if(condition: '{currentUser.realName}', then: '{currentUser.realName} ({currentUser.username})', else: '{currentUser.username}')}
|
||||
</span>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<span class="toolbar-item-name" title="{username}">
|
||||
{f:if(condition: '{currentUser.realName}', then: '{currentUser.realName}', else: '{currentUser.username}')}
|
||||
</span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</html>
|
||||
@@ -0,0 +1,127 @@
|
||||
<html
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:asset.module identifier="@typo3/backend/switch-user.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/color-scheme-switch.js"/>
|
||||
<p class="dropdown-headline">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.user')}</p>
|
||||
<f:if condition="{modules}">
|
||||
<ul class="dropdown-list">
|
||||
<f:for each="{modules}" as="module">
|
||||
<li>
|
||||
<a
|
||||
href="{f:if(condition: module.path, then: '{f:be.uri(route: module.identifier)}', else: '#')}"
|
||||
title="{f:translate(key: module.description, default: module.description)}"
|
||||
class="dropdown-item"
|
||||
role="menuitem"
|
||||
data-moduleroute-identifier="{module.identifier}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="{module.iconIdentifier}" size="small" alternativeMarkupIdentifier="inline"/>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="{module.title}">{module.title}</f:translate>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
<p class="dropdown-headline" id="help-dropdown-headline"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.help" /></p>
|
||||
<f:if condition="{helpModules}">
|
||||
<ul class="dropdown-list">
|
||||
<f:for each="{helpModules}" as="module">
|
||||
<li>
|
||||
<a
|
||||
href="{f:if(condition: module.path, then: '{f:be.uri(route: module.identifier)}', else: '#')}"
|
||||
title="{f:translate(key: module.description, default: module.description)}"
|
||||
class="dropdown-item"
|
||||
role="menuitem"
|
||||
data-moduleroute-identifier="{module.identifier}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="{module.iconIdentifier}" size="small" alternativeMarkupIdentifier="inline"/>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="{module.title}">{module.title}</f:translate>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:for>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
role="menuitem"
|
||||
href="https://docs.typo3.org/" target="_blank" rel="noreferrer">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="module-documentation" size="small" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:onlineDocumentation">TYPO3 Online Documentation</f:translate>
|
||||
<span class="visually-hidden">(<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:opensInANewWindow" />)</span>
|
||||
</span>
|
||||
<core:icon identifier="actions-window-open" />
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</f:if>
|
||||
<f:if condition="{f:count(subject: recentUsers)} > 0">
|
||||
<hr class="dropdown-divider" aria-hidden="true">
|
||||
<p class="dropdown-header"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.recentlySwitchedUsers" /></p>
|
||||
<ul class="modulemenu-group-container">
|
||||
<f:for each="{recentUsers}" as="user">
|
||||
<li>
|
||||
<typo3-backend-switch-user
|
||||
class="dropdown-item"
|
||||
mode="switch"
|
||||
targetUser="{user.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.recentlySwitchedUsers.su.tooltip', arguments: '{0: user.username}')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<be:avatar backendUser="{user.uid}" size="16" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:if(condition: user.realName, then: user.realName, else: user.username)}
|
||||
</span>
|
||||
</span>
|
||||
</typo3-backend-switch-user>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
<f:if condition="{colorSchemeSwitchEnabled}">
|
||||
<hr class="dropdown-divider" aria-hidden="true">
|
||||
<typo3-backend-color-scheme-switch
|
||||
togglelabel="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:toggleColorScheme')}"
|
||||
disabledlabel="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:colorSchemeToggleDisabled')}"
|
||||
colorschemes="{colorSchemes -> f:format.json()}" activeColorScheme="{activeColorScheme}"
|
||||
></typo3-backend-color-scheme-switch>
|
||||
</f:if>
|
||||
<hr class="dropdown-divider" aria-hidden="true">
|
||||
<f:if condition="{switchUserMode}">
|
||||
<f:then>
|
||||
<div class="dropdown-item-text">
|
||||
<typo3-backend-switch-user class="btn btn-sm btn-default" mode="exit">
|
||||
<core:icon identifier="actions-logout" size="small" alternativeMarkupIdentifier="inline"/>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.btn.exitSwitchUser" />
|
||||
</typo3-backend-switch-user>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="dropdown-item-text">
|
||||
<f:be.link route="logout" class="btn btn-sm btn-default" target="_top">
|
||||
<core:icon identifier="actions-logout" size="small" alternativeMarkupIdentifier="inline"/>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.user.btn.logout" />
|
||||
</f:be.link>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</html>
|
||||
Reference in New Issue
Block a user