TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:03 +02:00
commit 61d66df078
65 changed files with 8311 additions and 0 deletions
@@ -0,0 +1,80 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:form action="list" objectName="demand" object="{demand}">
<div class="form-row">
<div class="form-group">
<label for="tx_Beuser_username" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:userName" /></label>
<f:form.textfield
type="search"
autocomplete="off"
id="tx_Beuser_username"
class="form-control"
property="userName"
/>
</div>
<div class="form-group">
<label for="tx_Beuser_usertype" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.list.filter.userType" /></label>
<f:form.select
id="tx_Beuser_usertype"
class="form-select"
property="userType"
options="{
0: '{f:translate(key:\"backendUser.list.filter.userType.all\")}',
1: '{f:translate(key:\"backendUser.list.filter.userType.admin\")}',
2: '{f:translate(key:\"backendUser.list.filter.userType.normalUser\")}'
}"
/>
</div>
<div class="form-group">
<label for="tx_Beuser_status" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.list.filter.status" /></label>
<f:form.select
id="tx_Beuser_status"
class="form-select"
property="status"
options="{
0: '{f:translate(key:\"backendUser.list.filter.status.all\")}',
1: '{f:translate(key:\"backendUser.list.filter.status.enabled\")}',
2: '{f:translate(key:\"backendUser.list.filter.status.disabled\")}'
}"
/>
</div>
<div class="form-group">
<label for="tx_Beuser_logins" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.list.filter.loginState" /></label>
<f:form.select
id="tx_Beuser_logins"
class="form-select"
property="logins"
options="{
0: '{f:translate(key:\"backendUser.list.filter.loginState.all\")}',
1: '{f:translate(key:\"backendUser.list.filter.loginState.loginBefore\")}',
2: '{f:translate(key:\"backendUser.list.filter.loginState.never\")}',
3: '{f:translate(key:\"backendUser.list.filter.loginState.loggedIn\")}'
}"
/>
</div>
<div class="form-group">
<label for="tx_beuser_backendUserGroup" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.list.filter.group" /></label>
<f:form.select
id="tx_beuser_backendUserGroup"
class="form-select"
property="backendUserGroup"
options="{backendUserGroups}"
optionLabelField="title"
optionValueField="uid"
/>
</div>
<div class="form-group align-self-end">
<f:form.button type="submit" name="operation" value="filter" class="btn btn-default">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filter" />
</f:form.button>
<f:form.button type="submit" name="operation" value="reset-filters" class="btn btn-link">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:reset" />
</f:form.button>
</div>
</div>
</f:form>
</html>
@@ -0,0 +1,223 @@
<html
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:beuser="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"
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="table-fit">
<table id="typo3-backend-user-list" class="table table-striped table-hover">
<thead>
<tr>
<th colspan="3"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:userName" /> / <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:realName" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUser.list.table.column.group" /></th>
<th class="col-datetime"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:lastLogin" /></th>
<th class="col-control"><span class="visually-hidden"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_" /></span></th>
</tr>
</thead>
<tbody>
<f:for each="{paginator.paginatedItems}" as="backendUser">
<tr>
<td class="col-indicator">
<f:if condition="{onlineBackendUsers.{backendUser.uid}}">
<typo3-backend-status-indicator state="success" live label="{f:translate(key:'backendUser.list.label.online', domain:'beuser.messages')}"></typo3-backend-status-indicator>
</f:if>
</td>
<td class="col-avatar">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="be_users"
data-contextmenu-uid="{backendUser.uid}"
title="{f:if(condition: '{backendUser.description}', then: '{backendUser.description} (id={backendUser.uid})', else: 'id={backendUser.uid}')}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<backend:avatar backendUser="{backendUser.uid}" showIcon="TRUE" />
</button>
</td>
<td class="col-50">
<backend:link.editRecord table="be_users" uid="{backendUser.uid}" title="{f:translate(key:'btn.edit')}">
<f:if condition="{backendUser.realName}">
<f:then>
{backendUser.realName}
<beuser:mfaStatus userUid="{backendUser.uid}"/><br>
<span class="text-variant">({backendUser.username})</span>
</f:then>
<f:else>
{backendUser.username}
<beuser:mfaStatus userUid="{backendUser.uid}"/>
</f:else>
</f:if>
</backend:link.editRecord>
</td>
<td class="col-50 nowrap-disabled">
<f:for each="{backendUser.backendUserGroups}" as="backendUserGroup" iteration="backendUserGroupIterator">
<backend:link.editRecord table="be_groups" uid="{backendUserGroup.uid}" title="{f:translate(key:'btn.edit')}" class="nowrap">{backendUserGroup.title}</backend:link.editRecord><f:if condition="!{backendUserGroupIterator.isLast}">,</f:if>
</f:for>
</td>
<td class="col-datetime">
<f:if condition="{backendUser.lastLoginDateAndTime}">
<f:then>
<f:format.date format="{dateFormat} {timeFormat}">{backendUser.lastLoginDateAndTime}</f:format.date>
</f:then>
<f:else>
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:never" />
</f:else>
</f:if>
</td>
<td class="col-control">
<div class="btn-group" role="group">
<backend:link.editRecord
class="btn btn-default"
table="be_users"
uid="{backendUser.uid}"
title="{f:translate(key:'btn.edit')}"
role="button"
>
<core:icon identifier="actions-open" />
</backend:link.editRecord>
<f:if condition="{backendUser.currentlyLoggedIn} == 1">
<f:then>
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
</f:then>
<f:else>
<f:if condition="{backendUser.isDisabled} == 1">
<f:then>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[be_users][{backendUser.uid}][disable]=0', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.enable')}"
role="button"
>
<core:icon identifier="actions-edit-unhide" />
</a>
</f:then>
<f:else>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[be_users][{backendUser.uid}][disable]=1', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.disable')}"
role="button"
>
<core:icon identifier="actions-edit-hide" />
</a>
</f:else>
</f:if>
</f:else>
</f:if>
<f:if condition="{currentUserUid} == {backendUser.uid}">
<f:then>
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
</f:then>
<f:else>
<form action="{backend:moduleLink(route:'tce_db', currentUrlParameterName:'redirect')}" name="be_user_remove_{backendUser.uid}" id="be_user_remove_{backendUser.uid}" method="post">
<input name="cmd[be_users][{backendUser.uid}][delete]=1" type="hidden" value="{group.uid}">
</form>
<button
type="submit"
class="btn btn-default t3js-modal-trigger"
data-target-form="be_user_remove_{backendUser.uid}"
title="{f:translate(key:'btn.delete')}"
data-severity="warning"
data-title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
data-content="{f:translate(key:'backendUser.confirmDelete',arguments:'{0:backendUser.userName}')}"
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:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.yes')}"
>
<core:icon identifier="actions-edit-delete" />
</button>
</f:else>
</f:if>
</div>
<div class="btn-group" role="group">
<f:if condition="{backendUser.passwordResetEnabled}">
<f:then>
<f:form.button
name="user"
value="{backendUser.uid}"
form="form-initiate-password-reset"
class="btn btn-default t3js-modal-trigger"
title="{f:translate(key: 'resetPassword.label')}"
type="submit"
data-severity="warning"
data-title="{f:translate(key: 'resetPassword.confirmation.header')}"
data-content="{f:translate(key: 'resetPassword.confirmation.text', arguments: {0: '{backendUser.email}'})}"
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}">
<core:icon identifier="actions-key" />
</f:form.button>
</f:then>
<f:else>
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
</f:else>
</f:if>
<f:link.action
action="show"
arguments="{uid: backendUser.uid}"
class="btn btn-default"
title="{f:translate(key: 'btn.details')}"
role="button"
>
<core:icon identifier="actions-system-options-view" size="small"/>
</f:link.action>
<a
class="btn btn-default"
href="#"
title="{f:translate(key:'btn.info')}"
data-dispatch-action="TYPO3.InfoWindow.showItem"
data-dispatch-args-list="be_users,{backendUser.uid}"
role="button"
>
<core:icon identifier="actions-document-info" />
</a>
</div>
<div class="btn-group" role="group">
<f:if condition="{compareUserUidList.{backendUser.uid}}">
<f:then>
<f:form.button
form="form-remove-from-compare-list"
name="uid"
value="{backendUser.uid}"
type="submit"
class="btn btn-default"
title="{f:translate(key: 'btn.removeFromCompareList')}"
>
<core:icon identifier="actions-minus" size="small"/>
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.compare" />
</f:form.button>
</f:then>
<f:else>
<f:form.button
form="form-add-to-compare-list"
name="uid"
value="{backendUser.uid}"
type="submit"
class="btn btn-default"
title="{f:translate(key: 'btn.addToCompareList')}"
>
<core:icon identifier="actions-plus" size="small"/>
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.compare" />
</f:form.button>
</f:else>
</f:if>
<beuser:SwitchUser class="btn btn-default" backendUser="{backendUser}" />
</div>
</td>
</tr>
</f:for>
</tbody>
<tfoot>
<tr>
<td colspan="6">
<f:if condition="{totalAmountOfBackendUsers} > 1">
<f:then>{totalAmountOfBackendUsers} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:users" /></f:then>
<f:else>{totalAmountOfBackendUsers} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:user" /></f:else>
</f:if>
</td>
</tr>
</tfoot>
</table>
</div>
<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'list'}" />
@@ -0,0 +1,27 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:form action="groups" objectName="userGroupDto" object="{userGroupDto}">
<div class="form-row">
<div class="form-group">
<label for="tx_Beugroups_title" class="form-label"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroup.list.filter.groupTitle" /></label>
<f:form.textfield
id="tx_Beugroups_title"
class="form-control"
property="title"
/>
</div>
<div class="form-group align-self-end">
<f:form.button type="submit" name="operation" value="filter" class="btn btn-default">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filter" />
</f:form.button>
<f:form.button type="submit" name="operation" value="reset-filters" class="btn btn-link">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:reset" />
</f:form.button>
</div>
</div>
</f:form>
</html>
@@ -0,0 +1,162 @@
<html
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:beuser="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"
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="table-fit">
<table id="typo3-backend-user-group-list" class="table table-striped table-hover">
<thead>
<tr>
<th colspan="2"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroup.list.table.column.groupTitle" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:backendUserGroup.list.table.column.subgroup" /></th>
<th class="col-control"><span class="visually-hidden"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_" /></span></th>
</tr>
</thead>
<tbody>
<f:for each="{paginator.paginatedItems}" as="backendUserGroup">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="be_groups"
data-contextmenu-uid="{backendUserGroup.uid}"
title="{f:if(condition: '{backendUserGroup.description}', then: '{backendUserGroup.description} (id={backendUserGroup.uid})', else: 'id={backendUserGroup.uid}')}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<beuser:spriteIconForRecord table="be_groups" object="{backendUserGroup}" />
</button>
</td>
<td class="col-50">
<backend:link.editRecord table="be_groups" uid="{backendUserGroup.uid}" title="{f:translate(key:'btn.edit')}">
{backendUserGroup.title}
</backend:link.editRecord>
</td>
<td class="col-50 nowrap-disabled">
<f:for each="{backendUserGroup.subgroups}" as="subgroup" iteration="subGroupIterator">
<backend:link.editRecord table="be_groups" uid="{subgroup.uid}" title="{f:translate(key:'btn.edit')}">{subgroup.title}</backend:link.editRecord><f:if condition="!{subGroupIterator.isLast}">,</f:if>
</f:for>
</td>
<td class="col-control">
<div class="btn-group" role="group">
<backend:link.editRecord
class="btn btn-default"
table="be_groups"
uid="{backendUserGroup.uid}"
title="{f:translate(key:'btn.edit')}"
>
<core:icon identifier="actions-open" />
</backend:link.editRecord>
<f:if condition="{backendUserGroup.hidden}">
<f:then>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[be_groups][{backendUserGroup.uid}][hidden]=0', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.enable')}"
role="button"
>
<core:icon identifier="actions-edit-unhide" />
</a>
</f:then>
<f:else>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[be_groups][{backendUserGroup.uid}][hidden]=1', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.disable')}"
role="button"
>
<core:icon identifier="actions-edit-hide" />
</a>
</f:else>
</f:if>
<form action="{backend:moduleLink(route:'tce_db', currentUrlParameterName:'redirect')}" name="be_user_group_remove_{backendUserGroup.uid}" id="be_user_group_remove_{backendUserGroup.uid}" method="post">
<input name="cmd[be_groups][{backendUserGroup.uid}][delete]=1" type="hidden" value="{group.uid}">
</form>
<button
type="submit"
class="btn btn-default t3js-modal-trigger"
data-target-form="be_user_group_remove_{backendUserGroup.uid}"
data-severity="warning"
data-title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
data-content="{f:translate(key:'backendUserGroup.confirmDelete',arguments:'{0:backendUserGroup.title}')}"
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:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.yes')}"
title="{f:translate(key:'btn.delete')}"
>
<core:icon identifier="actions-edit-delete"/>
</button>
</div>
<div class="btn-group" role="group">
<f:link.action
action="showGroup"
arguments="{uid: backendUserGroup.uid}"
class="btn btn-default"
title="{f:translate(key: 'btn.details')}"
role="button"
>
<core:icon identifier="actions-system-options-view" size="small"/>
</f:link.action>
<a
class="btn btn-default"
href="#"
title="{f:translate(key:'btn.info')}"
data-dispatch-action="TYPO3.InfoWindow.showItem"
data-dispatch-args-list="be_groups,{backendUserGroup.uid}"
role="button"
>
<core:icon identifier="actions-document-info" />
</a>
</div>
<div class="btn-group" role="group">
<f:if condition="{compareGroupUidList.{backendUserGroup.uid}}">
<f:then>
<f:form.button
form="form-remove-group-from-compare-list"
name="uid"
value="{backendUserGroup.uid}"
type="submit"
class="btn btn-default"
title="{f:translate(key: 'btn.removeFromCompareList')}"
>
<core:icon identifier="actions-minus" size="small"/>
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.compare" />
</f:form.button>
</f:then>
<f:else>
<f:form.button
form="form-add-group-to-compare-list"
name="uid"
value="{backendUserGroup.uid}"
type="submit"
class="btn btn-default"
title="{f:translate(key: 'btn.addToCompareList')}"
>
<core:icon identifier="actions-plus" size="small"/> <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.compare" />
</f:form.button>
</f:else>
</f:if>
</div>
</td>
</tr>
</f:for>
</tbody>
<tfoot>
<tr>
<td colspan="4">
<f:if condition="{totalAmountOfBackendUserGroups} > 1">
<f:then>{totalAmountOfBackendUserGroups} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:groups" /></f:then>
<f:else>{totalAmountOfBackendUserGroups} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:group" /></f:else>
</f:if>
</td>
</tr>
</tfoot>
</table>
</div>
<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'groups'}" />
</html>
@@ -0,0 +1,489 @@
<html
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:beuser="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"
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:section name="languages">
<f:if condition="{languages}">
<div class="table-fit">
<table class="table">
<f:for each="{languages}" key="languageId" as="language">
<tr>
<f:if condition="{languageId} == 0">
<f:then>
<td class="col-icon"></td>
<td class="col-title">
{language.title} (<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:information.defaultLanguage" />)<f:if condition="{showUid}"> <code>[{languageId}]</code></f:if>
</td>
</f:then>
<f:else>
<td class="col-icon">
<span title="id={languageId}"><core:icon identifier="{language.flagIconIdentifier}" /></span>
</td>
<td class="col-title">{language.title}<f:if condition="{showUid}"> <code>[{languageId}]</code></f:if></td>
</f:else>
</f:if>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="groups">
<f:if condition="{groups.all}">
<div class="table-fit">
<table class="table table-bordered">
<thead>
<tr>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:information.groups.table.column.groupTitle" /></th>
<th{f:if(condition: '{hasColumnClasses}', then: ' class="col-min"')}><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compare.direct.direct" /></th>
<th{f:if(condition: '{hasColumnClasses}', then: ' class="col-min"')}><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:compare.direct.inherit" /></th>
</tr>
</thead>
<tbody>
<f:for each="{groups.all}" as="group">
<tr>
<td class="col-title col-responsive">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="be_groups"
data-contextmenu-uid="{group.row.uid}"
title="id={group.row.uid}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<core:iconForRecord table="be_groups" row="{group.row}"/>
</button>
<backend:link.editRecord
table="be_groups"
uid="{group.row.uid}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.edit')}"
>
{group.row.title}<f:if condition="{showUid}"> <code>[{group.row.uid}]</code></f:if>
</backend:link.editRecord>
</td>
<td{f:if(condition: '{hasColumnClasses}', then: ' class="col-min"')}>
<f:if condition="{group.direct}"><span class="text-success"><core:icon identifier="actions-check" size="small" /></span></f:if>
</td>
<td{f:if(condition: '{hasColumnClasses}', then: ' class="col-min"')}>
<f:if condition="{group.diff}"><span class="text-success"><core:icon identifier="actions-check" size="small" /></span></f:if>
</td>
</tr>
</f:for>
</tbody>
</table>
</div>
</f:if>
</f:section>
<f:section name="dbMounts">
<f:if condition="{dbMounts}">
<div class="table-fit">
<table class="table">
<f:for each="{dbMounts}" as="item">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="pages"
data-contextmenu-uid="{item.uid}"
title="id={item.uid}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<core:iconForRecord table="pages" row="{item}"/>
</button>
</td>
<td class="col-title">
<backend:link.editRecord
table="pages"
uid="{item.uid}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.edit')}"
>
{item.title}<f:if condition="{showUid}"> <code>[{item.uid}]</code></f:if>
</backend:link.editRecord>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="fileMounts">
<f:if condition="{fileMounts}">
<div class="table-fit">
<table class="table">
<f:for each="{fileMounts}" as="item">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="sys_filemounts"
data-contextmenu-uid="{item.uid}"
title="id={item.uid}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<core:iconForRecord table="sys_filemounts" row="{item}"/>
</button>
</td>
<td class="col-title">
<backend:link.editRecord
table="sys_filemounts"
uid="{item.uid}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.edit')}"
>
{item.title}<f:if condition="{showUid}"> <code>[{item.uid}]</code></f:if>
</backend:link.editRecord>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="fileFolderPermissions">
<f:if condition="{fileFolderPermissions}">
<div class="table-fit">
<table class="table">
<f:for each="{fileFolderPermissions}" as="item">
<tr>
<td class="col-icon"><core:icon identifier="{item.icon}" /></td>
<td class="col-title">
<f:if condition="{item.label}">
<f:then>{f:translate(key:item.label,default:item.label)}</f:then>
<f:else>{item.value}</f:else>
</f:if>
<f:if condition="{showUid}"> <code>[{item.value}]</code></f:if>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="categories">
<f:if condition="{categories}">
<div class="table-fit">
<table class="table">
<f:for each="{categories}" as="item">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="sys_category"
data-contextmenu-uid="{item.uid}"
title="id={item.uid}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<core:iconForRecord table="sys_category" row="{item}"/>
</button>
</td>
<td class="col-title">
<backend:link.editRecord
table="sys_category"
uid="{item.uid}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.edit')}"
>
{item.title}<f:if condition="{showUid}"> <code>[{item.uid}]</code></f:if>
</backend:link.editRecord>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="workspaces">
<f:if condition="{workspaces}">
<f:if condition="{workspaces.record.uid}">
<div class="table-fit">
<table class="table">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="sys_workspace"
data-contextmenu-uid="{workspaces.record.uid}"
title="id={workspaces.record.uid}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<core:icon identifier="mimetypes-x-sys_workspace" size="small" />
</button>
</td>
<td class="col-title">
<backend:link.editRecord
table="sys_workspace"
uid="{workspaces.record.uid}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:btn.edit')}"
>{workspaces.record.title}</backend:link.editRecord>
(<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:information.defaultWorkspace" />)<f:if condition="{showUid}"> <code>[{workspaces.record.uid}]</code></f:if>
</td>
</tr>
</table>
</div>
</f:if>
</f:if>
</f:section>
<f:section name="pageTypes">
<f:if condition="{pageTypes}">
<div class="table-fit">
<table class="table">
<f:for each="{pageTypes}" as="item">
<tr>
<td class="col-icon"><core:icon identifier="{item.icon}" /></td>
<td class="col-title">
<f:if condition="{item.label}">{f:translate(key:item.label,default:item.label)}</f:if><f:if condition="{showUid}"> <code>[{item.value}]</code></f:if>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
<f:section name="modules">
<f:if condition="{modules}">
<div class="table-fit">
<table class="table">
<f:if condition="{showHeadline}">
<thead>
<tr>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:modules" /></th>
</tr>
</thead>
</f:if>
<tbody>
<f:for each="{modules}" as="module">
<tr>
<td class="col-icon"><core:icon identifier="{module.iconIdentifier}" /></td>
<td class="col-title">{f:translate(key: module.title, default: module.title)}<f:if condition="{showUid}"> <code>[{module.identifier}]</code></f:if></td>
</tr>
</f:for>
</tbody>
</table>
</div>
</f:if>
</f:section>
<f:section name="tables">
<f:if condition="{tables.all}">
<f:for each="{tables.all}" key="table" as="label">
<f:if condition="{tables.tables_select.{table}} && !{tables.tables_modify.{table}}">
<f:variable name="tableReadConfigured" value="1" />
</f:if>
<f:if condition="{tables.tables_modify.{table}}">
<f:variable name="tableReadWriteConfigured" value="1" />
</f:if>
</f:for>
<f:if condition="{tableReadConfigured}">
<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="#permission-group-read-table-{id}-collapse"
aria-controls="permission-group-read-table-{id}-collapse"
aria-expanded="false"
>
<div class="panel-title">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:tableModes.read" />
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div id="permission-group-read-table-{id}-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
<div class="table-fit">
<table class="table">
<f:for each="{tables.all}" key="table" as="label">
<f:if condition="{tables.tables_select.{table}} && !{tables.tables_modify.{table}}">
<tr>
<td class="col-icon">
<core:iconForRecord table="{table}" row="{id: '0'}" />
</td>
<td class="col-title">
<f:if condition="{label}">{f:translate(key:label, default:label)}</f:if><f:if condition="{showUid}"> <code>[{table}]</code></f:if>
</td>
</tr>
</f:if>
</f:for>
</table>
</div>
</div>
</div>
</f:if>
<f:if condition="{tableReadWriteConfigured}">
<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="#permission-group-read-write-table-{id}-collapse"
aria-controls="permission-group-read-write-table-{id}-collapse"
aria-expanded="false"
>
<div class="panel-title">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:tableModes.write" />
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div id="permission-group-read-write-table-{id}-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
<div class="table-fit">
<table class="table">
<f:for each="{tables.all}" key="table" as="label">
<f:if condition="{tables.tables_modify.{table}}">
<tr>
<td class="col-icon">
<core:iconForRecord table="{table}" row="{id: '0'}" />
</td>
<td class="col-title">
<f:if condition="{label}">{f:translate(key:label, default:label)}</f:if><f:if condition="{showUid}"> <code>[{table}]</code></f:if>
</td>
</tr>
</f:if>
</f:for>
</table>
</div>
</div>
</div>
</f:if>
</f:if>
</f:section>
<f:section name="nonExcludeFields">
<f:if condition="{nonExcludeFields}">
<f:for each="{nonExcludeFields}" key="tableName" as="table">
<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="#permission-group-{tableName}-{id}-collapse"
aria-controls="permission-group-{tableName}-{id}-collapse"
aria-expanded="false"
>
<div class="panel-icon">
<core:iconForRecord table="{tableName}" row="{id: '0'}" />
</div>
<div class="panel-title">
<f:if condition="{table.label}">{f:translate(key:table.label,default:table.label)}</f:if><f:if condition="{showUid}"> <code>[{tableName}]</code></f:if>
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div id="permission-group-{tableName}-{id}-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
<div class="panel-body">
<ul class="panel-list">
<f:for each="{table.fields}" as="label" key="field">
<li><f:if condition="{label}">{f:translate(key:label,default:label)} </f:if><code>[{field}]</code></li>
</f:for>
</ul>
</div>
</div>
</div>
</f:for>
</f:if>
</f:section>
<f:section name="tsconfig">
<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="#permission-group-tsconfig-{id}-collapse"
aria-controls="permission-group-tsconfig-{id}-collapse"
aria-expanded="false"
>
<div class="panel-title">
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:TSconfig" />
</div>
<span class="caret"></span>
</button>
</div>
</div>
<div id="permission-group-tsconfig-{id}-collapse" class="panel-collapse collapse" data-persist-collapse-state="true" role="tabpanel">
<div class="panel-body">
<f:render section="userTsConfigTree" arguments="{treeArray: tsconfig}" />
</div>
</div>
</div>
</f:section>
<f:section name="userTsConfigTree">
<ul class="treelist">
<f:for each="{treeArray}" key="key" as="value">
<li>
<span class="treelist-group treelist-group-monospace">
<span class="treelist-label">{key}</span>
<f:if condition="!{beuser:isArray(value: value)}">
<span class="treelist-operator">=</span>
<span class="treelist-value">{value}</span>
</f:if>
</span>
<f:if condition="{beuser:isArray(value: value)}">
<f:render section="userTsConfigTree" arguments="{treeArray: value}" />
</f:if>
</li>
</f:for>
</ul>
</f:section>
<f:section name="pageContentTypes">
<f:if condition="{pageContentTypes}">
<div class="table-fit">
<table class="table">
<f:for each="{pageContentTypes}" as="item">
<tr>
<td class="col-icon">
<core:icon identifier="{f:if(condition: item.icon, then: item.icon, else: 'empty-empty')}" />
</td>
<td class="col-title">
<f:if condition="{item.label}">
<f:then>
{f:translate(key: item.label)}
<f:if condition="{showUid}"><code title="{item.longType}">[{item.shortType}]</code></f:if>
</f:then>
<f:else>
{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:notAvailableAbbreviation')}
<f:if condition="{showUid}"><code>[{item.longType}]</code></f:if>
</f:else>
</f:if>
</td>
</tr>
</f:for>
</table>
</div>
</f:if>
</f:section>
</html>
@@ -0,0 +1,150 @@
<html
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
xmlns:beuser="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"
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="table-fit">
<table id="typo3-filemount-list" class="table table-striped table-hover">
<colgroup>
<col class="col-icon">
<col style="width: 20%;">
</colgroup>
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col class="col-min">
<col class="col-control">
</colgroup>
<thead>
<tr>
<th colspan="2"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.title" /></th>
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.description" /></th>
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_storage" /></th>
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.identifier" /></th>
<th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.read_only" /></th>
<th class="col-control"><span class="visually-hidden"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_" /></span></th>
</tr>
</thead>
<tbody>
<f:for each="{paginator.paginatedItems}" as="fileMount">
<tr>
<td class="col-icon">
<button
type="button"
class="btn btn-link"
data-contextmenu-trigger="click"
data-contextmenu-table="sys_filemounts"
data-contextmenu-uid="{fileMount.uid}"
title="{f:if(condition: '{fileMount.description}', then: '{fileMount.description} (id={fileMount.uid})', else: 'id={fileMount.uid}')}"
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
>
<beuser:spriteIconForRecord table="sys_filemounts" object="{fileMount}" />
</button>
</td>
<td>
<backend:link.editRecord table="sys_filemounts" uid="{fileMount.uid}" title="{f:translate(key:'btn.edit')}">
{fileMount.title}
</backend:link.editRecord>
</td>
<td>{fileMount.description}</td>
<td>
<a
href="{backend:moduleLink(route: 'media_management', query: 'id={fileMount.storage.uid}:/')}'"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.link.openInFilelist')}"
>
{fileMount.storage.name}
</a>
</td>
<td>
<a
href="{backend:moduleLink(route: 'media_management', query: 'id={fileMount.storage.uid}:{fileMount.path}')}'"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.link.openInFilelist')}"
>
{fileMount.storage.configuration.basePath}{fileMount.path}
</a>
</td>
<td>
<f:if condition="{fileMount.readOnly} == true">
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:yes" />
</f:if>
</td>
<td class="col-control">
<div class="btn-group" role="group">
<backend:link.editRecord class="btn btn-default" table="sys_filemounts" uid="{fileMount.uid}" title="{f:translate(key:'btn.edit')}">
<core:icon identifier="actions-open" />
</backend:link.editRecord>
<f:if condition="{fileMount.hidden} == true">
<f:then>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[sys_filemounts][{fileMount.uid}][hidden]=0', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.enable')}"
role="button"
>
<core:icon identifier="actions-toggle-off" />
</a>
</f:then>
<f:else>
<a
class="btn btn-default"
href="{backend:moduleLink(route:'tce_db', query:'data[sys_filemounts][{fileMount.uid}][hidden]=1', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.disable')}"
role="button"
>
<core:icon identifier="actions-toggle-on" />
</a>
</f:else>
</f:if>
<a
class="btn btn-default t3js-modal-trigger"
href="{backend:moduleLink(route:'tce_db', query:'cmd[sys_filemounts][{fileMount.uid}][delete]=1', currentUrlParameterName:'redirect')}"
title="{f:translate(key:'btn.delete')}"
data-severity="warning"
data-title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
data-content="{f:translate(key:'filemount.confirm.deletion',arguments:'{0:fileMount.title}')}"
data-button-close-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
role="button"
>
<core:icon identifier="actions-delete" />
</a>
</div>
<div class="btn-group" role="group">
<a
class="btn btn-default"
href="#"
title="{f:translate(key:'btn.info')}"
data-dispatch-action="TYPO3.InfoWindow.showItem"
data-dispatch-args-list="sys_filemounts,{fileMount.uid}"
role="button"
>
<core:icon identifier="actions-info" />
</a>
</div>
</td>
</tr>
</f:for>
</tbody>
<tfoot>
<tr>
<td colspan="7">
<f:if condition="{totalAmountOfFilemounts} > 1" >
<f:then>
{totalAmountOfFilemounts} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.amount.multiple" />
</f:then>
<f:else>
{totalAmountOfFilemounts} <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.amount.singular" />
</f:else>
</f:if>
</td>
</tr>
</tfoot>
</table>
</div>
<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'filemounts'}" />
</html>
@@ -0,0 +1,42 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<span id="g_{pageId}">
<button
type="button"
class="ug_selector changegroup btn btn-sm btn-link"
data-page="{pageId}"
data-group-id="{groupId}"
data-groupname="{groupname}"
title="{groupname}"
>
<f:if condition="{groupId} == 0">
<f:then>
<f:comment>
No group set -> [not set]
</f:comment>
[<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:notSet" />]
</f:then>
<f:else>
<f:if condition="{groupname}">
<f:then>
<f:comment>
A group name can be resolved
</f:comment>
{groupname}
</f:then>
<f:else>
<f:comment>
Group was deleted -> [deleted]
</f:comment>
[<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:deleted" />]
</f:else>
</f:if>
</f:else>
</f:if>
</button>
</span>
</html>
@@ -0,0 +1,42 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<span id="o_{pageId}">
<button
type="button"
class="ug_selector changeowner btn btn-sm btn-link"
data-page="{pageId}"
data-owner="{userId}"
data-username="{username}"
title="{username}"
>
<f:if condition="{userId} == 0">
<f:then>
<f:comment>
No owner set -> [not set]
</f:comment>
[<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:notSet" />]
</f:then>
<f:else>
<f:if condition="{username}">
<f:then>
<f:comment>
A user name can be resolved
</f:comment>
{username}
</f:then>
<f:else>
<f:comment>
User was deleted -> [deleted]
</f:comment>
[<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:deleted" />]
</f:else>
</f:if>
</f:else>
</f:if>
</button>
</span>
</html>
@@ -0,0 +1,99 @@
<html
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:if condition="{paginator.numberOfPages} > 1">
<nav class="pagination-wrap">
<ul class="pagination">
<f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
<f:then>
<li class="page-item">
<a href="{f:uri.action(action:actionName, arguments:{currentPage: 1})}" title="{f:translate(key:'pagination.first')}" class="page-link">
<core:icon identifier="actions-view-paging-first" />
</a>
</li>
<li class="page-item">
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'pagination.previous')}" class="page-link">
<core:icon identifier="actions-view-paging-previous" />
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<span class="page-link">
<f:translate key="pagination.records" /> {pagination.startRecordNumber} - {pagination.endRecordNumber}
</span>
</li>
<li class="page-item">
<span class="page-link">
<f:translate key="pagination.page" />
<form class="form-inline"
data-global-event="submit"
data-action-navigate="$form=~s/$value/"
data-navigate-value="{f:uri.action(action:actionName, arguments:'{currentPage: \'$[value]\'}')}"
data-value-selector="input[name='paginator-target-page']">
<input
min="{pagination.firstPageNumber}"
max="{pagination.lastPageNumber}"
data-number-of-pages="{paginator.numberOfPages}"
name="paginator-target-page"
class="form-control form-control-sm paginator-input"
size="5"
value="{paginator.currentPageNumber}"
type="number"
/>
</form>
/ {pagination.lastPageNumber}
</span>
</li>
<f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
<f:then>
<li class="page-item">
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'pagination.next')}" class="page-link">
<core:icon identifier="actions-view-paging-next" />
</a>
</li>
<li class="page-item">
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.lastPageNumber})}" title="{f:translate(key:'pagination.last')}" class="page-link">
<core:icon identifier="actions-view-paging-last" />
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="empty-empty"/>
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<a href="{f:uri.action(action:actionName, arguments:{currentPage: paginator.currentPageNumber})}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
<core:icon identifier="actions-refresh" />
</a>
</li>
</ul>
</nav>
</f:if>
</html>