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,8 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:render partial="Permission/Groupname" arguments="{pageId: pageId, groupId: groupId, groupname: groupname}" />
</html>
@@ -0,0 +1,43 @@
<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"
>
<span id="{elementId}">
<div class="input-group">
<select class="form-select form-select-sm" name="new_page_group" id="new_page_group">
<f:if condition="{addCurrentGroup}">
<f:then><option value="{groupUid}" selected>{groupname}</option></f:then>
<f:else><option value="0"></option></f:else>
</f:if>
<f:for each="{groups}" key="uid" as="group">
<option value="{uid}" {f:if(condition: '{uid} == {groupUid}', then: 'selected')}>{group.title}</option>
</f:for>
</select>
<button
type="button"
class="savegroup btn btn-sm btn-default"
title="{f:translate(key:'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:changeGroup')}"
data-page="{pageId}"
data-group-id="{groupUid}"
data-element-id="{elementId}"
>
<core:icon identifier="actions-document-save" size="small"/>
</button>
<button
type="button"
class="restoregroup btn btn-sm btn-default"
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
data-page="{pageId}"
data-group-id="{groupUid}"
data-element-id="{elementId}"
data-if-not-set="[not set]"
{f:if(condition: groupname, then: 'data-groupname="{groupname}"')}
>
<core:icon identifier="actions-close" size="small"/>
</button>
</span>
</span>
</html>
@@ -0,0 +1,8 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:render partial="Permission/Ownername" arguments="{pageId: pageId, userId: userId, username: username}" />
</html>
@@ -0,0 +1,41 @@
<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"
>
<span id="{elementId}">
<div class="input-group">
<select class="form-select form-select-sm" name="new_page_owner" id="new_page_owner">
<f:if condition="{addCurrentUser}">
<f:then><option value="{ownerUid}" selected>{username}</option></f:then>
<f:else><option value="0"></option></f:else>
</f:if>
<f:for each="{users}" key="uid" as="user">
<option value="{uid}" {f:if(condition: '{uid} == {ownerUid}', then: 'selected')}>{user.username}</option>
</f:for>
</select>
<button type="button"
class="saveowner btn btn-sm btn-default"
title="{f:translate(key:'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:changeOwner')}"
data-page="{pageId}"
data-owner="{ownerUid}"
data-element-id="{elementId}"
>
<core:icon identifier="actions-document-save" size="small"/>
</button>
<button type="button"
class="restoreowner btn btn-sm btn-default"
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
data-page="{pageId}"
data-owner="{ownerUid}"
data-element-id="{elementId}"
data-if-not-set="[not set]"
{f:if(condition: username, then: 'data-username="{username}"')}
>
<core:icon identifier="actions-close" size="small"/>
</button>
</div>
</span>
</html>
@@ -0,0 +1,8 @@
<html
xmlns:beuser="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<beuser:permissions permission="{permission}" scope="{scope}" pageId="{pageId}" />
</html>
@@ -0,0 +1,175 @@
<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/beuser/permissions.js"/>
<h1>
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:permissions" />:
<f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Edit" />
</h1>
<f:comment><!-- {base} is defined as it's *required* for mathematical operations in Fluid --></f:comment>
<f:variable name="base" value="2" />
<form action="{formAction}" method="post" name="editform" id="PermissionControllerEdit">
<div class="form-row">
<div class="form-group">
<label class="form-label" for="selectOwner"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Owner" /></label>
<select class="form-select" name="data[pages][{id}][perms_userid]" id="selectOwner">
<f:for each="{beUserData}" key="userId" as="user">
<option value="{userId}" {f:if(condition: '{userId} == {currentBeUser}', then: 'selected')}>{user}</option>
</f:for>
</select>
</div>
<div class="form-group">
<label class="form-label" for="selectGroup"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Group" /></label>
<f:if condition="{f:count(subject:beGroupData)} > 1">
<f:then>
<select class="form-select" name="data[pages][{id}][perms_groupid]" id="selectGroup">
<f:for each="{beGroupData}" key="groupId" as="group">
<option value="{groupId}" {f:if(condition: '{groupId} == {currentBeGroup}', then: 'selected')}>{group}</option>
</f:for>
</select>
</f:then>
<f:else>
<div class="alert alert-notice"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:noGroups" /></div>
</f:else>
</f:if>
</div>
<div class="form-group">
<label class="form-label" for="recursionLevel"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Depth" /></label>
<select class="form-select" name="mirror[pages][{id}]" id="recursionLevel">
<f:for each="{recursiveSelectOptions}" key="depth" as="depthLabel">
<option value="{depth}" {f:if(condition: '{depth} == {currentBeUser}', then: 'selected')}>{depthLabel}</option>
</f:for>
</select>
</div>
</div>
<div class="table-fit">
<table class="table table-striped table-hover" id="typo3-permissionMatrix">
<thead>
<tr>
<th></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:1" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:16" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:2" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:4" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:8" /></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Owner" /></strong></td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_user][]" value="{base ^ 0}" data-check-change-permissions="check[perms_user],data[pages][{id}][perms_user]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_user][]" value="{base ^ 4}" data-check-change-permissions="check[perms_user],data[pages][{id}][perms_user]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_user][]" value="{base ^ 1}" data-check-change-permissions="check[perms_user],data[pages][{id}][perms_user]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_user][]" value="{base ^ 2}" data-check-change-permissions="check[perms_user],data[pages][{id}][perms_user]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_user][]" value="{base ^ 3}" data-check-change-permissions="check[perms_user],data[pages][{id}][perms_user]" />
</div>
</td>
</tr>
<tr>
<td><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Group" /></strong></td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_group][]" value="{base ^ 0}" data-check-change-permissions="check[perms_group],data[pages][{id}][perms_group]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_group][]" value="{base ^ 4}" data-check-change-permissions="check[perms_group],data[pages][{id}][perms_group]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_group][]" value="{base ^ 1}" data-check-change-permissions="check[perms_group],data[pages][{id}][perms_group]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_group][]" value="{base ^ 2}" data-check-change-permissions="check[perms_group],data[pages][{id}][perms_group]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_group][]" value="{base ^ 3}" data-check-change-permissions="check[perms_group],data[pages][{id}][perms_group]" />
</div>
</td>
</tr>
<tr>
<td><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Everybody" /></strong></td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_everybody][]" value="{base ^ 0}" data-check-change-permissions="check[perms_everybody],data[pages][{id}][perms_everybody]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_everybody][]" value="{base ^ 4}" data-check-change-permissions="check[perms_everybody],data[pages][{id}][perms_everybody]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_everybody][]" value="{base ^ 1}" data-check-change-permissions="check[perms_everybody],data[pages][{id}][perms_everybody]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_everybody][]" value="{base ^ 2}" data-check-change-permissions="check[perms_everybody],data[pages][{id}][perms_everybody]" />
</div>
</td>
<td>
<div class="form-check form-check-type-toggle">
<input class="form-check-input" type="checkbox" name="check[perms_everybody][]" value="{base ^ 3}" data-check-change-permissions="check[perms_everybody],data[pages][{id}][perms_everybody]" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
<input type="hidden" name="data[pages][{id}][perms_user]" value="{pageInfo.perms_user}" data-checkbox-group="check[perms_user]" />
<input type="hidden" name="data[pages][{id}][perms_group]" value="{pageInfo.perms_group}" data-checkbox-group="check[perms_group]" />
<input type="hidden" name="data[pages][{id}][perms_everybody]" value="{pageInfo.perms_everybody}" data-checkbox-group="check[perms_everybody]" />
<input type="hidden" name="depth" value="{depth}" />
<input type="hidden" name="returnUrl" value="{returnUrl}" />
</form>
<h3><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Legend" /></h3>
<p>
<strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:1" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:1_t" /> <br>
<strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:16" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:16_t" /> <br>
<strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:2" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:2_t" /> <br>
<strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:4" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:4_t" /> <br>
<strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:8" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:8_t" />
</p>
<p><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:def" /></p>
</f:section>
</html>
@@ -0,0 +1,196 @@
<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:layout name="Module" />
<f:section name="Content">
<f:asset.module identifier="@typo3/beuser/permissions.js"/>
<h1><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:permissions" /></h1>
<div class="table-fit">
<table class="table table-striped table-hover" id="typo3-permissionList">
<thead>
<tr>
<th></th>
<th colspan="2"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Owner" /></th>
<th colspan="2"><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Group" /></th>
<th><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Everybody" /></th>
<th></th>
</tr>
</thead>
<f:for each="{viewTree}" as="data">
<tr>
<f:if condition="{data.row.uid}">
<f:then>
<f:variable name="editUrl"><f:spaceless>
<backend:moduleLink route="permissions_pages" arguments="{id: '{f:if(condition: data.row._ORIG_uid, then: data.row._ORIG_uid, else: data.row.uid)}', action: 'edit', depth: depth, returnUrl: returnUrl}" />
</f:spaceless></f:variable>
<f:comment>
A "normal" page row is rendered, not the root page
</f:comment>
<td class="col-title col-responsive permission-column-name">
<div class="treeline-container">
<f:spaceless>
{data.depthData -> f:format.raw()}{data.HTML -> f:format.raw()}
<f:if condition="{data.icon}">{data.icon -> f:format.raw()}</f:if>
</f:spaceless>
<a class="treeline-label"
href="{editUrl}"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:ch_permissions')}"
>{data.row.title}</a>
</div>
</td>
<td class="permission-column-list">
<beuser:permissions permission="{data.row.perms_user}" scope="user" pageId="{data.row.uid}" />
</td>
<td class="permission-column-group">
<f:render
partial="Permission/Ownername"
arguments="{
pageId: '{data.row.uid}',
userId: '{data.row.perms_userid}',
username: '{beuser:arrayElement(array:beUsers, key:data.row.perms_userid, subKey:\'username\')}'
}"
/>
</td>
<td class="permission-column-list">
<beuser:permissions permission="{data.row.perms_group}" scope="group" pageId="{data.row.uid}" />
</td>
<td class="permission-column-group">
<f:render
partial="Permission/Groupname"
arguments="{
pageId: '{data.row.uid}',
groupId: '{data.row.perms_groupid}',
groupname: '{beuser:arrayElement(array:beGroups, key:data.row.perms_groupid, subKey:\'title\')}'
}"
/>
</td>
<td class="permission-column-list">
<beuser:permissions permission="{data.row.perms_everybody}" scope="everybody" pageId="{data.row.uid}" />
</td>
<td class="col-control">
<span class="btn-group">
<f:if condition="{data.row.editlock}">
<f:then>
<button
type="button"
class="editlock btn btn-sm btn-default"
data-page="{data.row.uid}"
data-lockstate="1"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:EditLock_descr')}"
>
<core:icon identifier="actions-lock" />
</button>
</f:then>
<f:else>
<button
type="button"
class="editlock btn btn-sm btn-default"
data-page="{data.row.uid}"
data-lockstate="0"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:EditLock_descr2')}"
>
<core:icon identifier="actions-unlock" />
</button>
</f:else>
</f:if>
<f:comment>
Edit link is workspace aware: If in ws, link to edit the ws overlay record is rendered
</f:comment>
<a href="{editUrl}"
class="btn btn-sm btn-default"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:ch_permissions')}">
<core:icon identifier="actions-open" />
</a>
</span>
</td>
</f:then>
<f:else>
<f:comment>
Root page row is rendered
</f:comment>
<td class="permission-column-name">
<f:format.raw>{data.HTML}</f:format.raw>
<f:if condition="{data.icon}">{data.icon -> f:format.raw()}</f:if>
{data.row.title -> f:format.crop(maxCharacters:20)}
</td>
<td colspan="6"></td>
</f:else>
</f:if>
</tr>
</f:for>
</table>
</div>
<h3><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:Legend" />:</h3>
<div class="access-legend">
<table>
<tr>
<td class="edge nowrap"><span><span></span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="nowrap"><span class="number">1</span></td>
<td class="nowrap"><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:1" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:1_t" /></td>
</tr>
<tr>
<td class="t3-vr nowrap"><span></span></td>
<td class="edge nowrap"><span><span></span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="nowrap"><span class="number">2</span></td>
<td class="nowrap"><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:16" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:16_t" /></td>
</tr>
<tr>
<td class="t3-vr nowrap"><span></span></td>
<td class="t3-vr nowrap"><span></span></td>
<td class="edge nowrap"><span><span></span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="nowrap"><span class="number">3</span></td>
<td class="nowrap"><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:2" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:2_t" /></td>
</tr>
<tr>
<td class="t3-vr nowrap"><span></span></td>
<td class="t3-vr nowrap"><span></span></td>
<td class="t3-vr nowrap"><span></span></td>
<td class="edge nowrap"><span><span></span></span></td>
<td class="hr nowrap"><span></span></td>
<td class="nowrap"><span class="number">4</span></td>
<td class="nowrap"><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:4" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:4_t" /></td>
</tr>
<tr>
<td class="nowrap"><core:icon identifier="status-status-permission-granted" /></td>
<td class="nowrap"><core:icon identifier="status-status-permission-denied" /></td>
<td class="nowrap"><core:icon identifier="status-status-permission-granted" /></td>
<td class="nowrap"><core:icon identifier="status-status-permission-denied" /></td>
<td class="nowrap"><core:icon identifier="status-status-permission-denied" /></td>
<td class="nowrap"><span class="number">5</span></td>
<td class="nowrap"><strong><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:8" /></strong>: <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:8_t" /></td>
</tr>
</table>
</div>
<p><f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:def" /></p>
<p>
<core:icon identifier="status-status-permission-granted" /> <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:A_Granted" /><br>
<core:icon identifier="status-status-permission-denied" /> <f:translate key="LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:A_Denied" />
</p>
</f:section>
</html>
@@ -0,0 +1,30 @@
<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="{editLockState}">
<f:then>
<button type="button"
class="editlock btn btn-sm btn-default"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:EditLock_descr')}"
data-page="{pageId}"
data-lockstate="1"
>
<core:icon identifier="actions-lock" size="small" />
</button>
</f:then>
<f:else>
<button type="button"
class="editlock btn btn-sm btn-default"
title="{f:translate(key: 'LLL:EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf:EditLock_descr2')}"
data-page="{pageId}"
data-lockstate="0"
>
<core:icon identifier="actions-unlock" size="small" />
</button>
</f:else>
</f:if>
</html>