17 use Psr\Http\Message\ResponseInterface;
18 use Psr\Http\Message\ServerRequestInterface;
53 $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
54 $this->
getLanguageService()->includeLLFile(
'EXT:beuser/Resources/Private/Language/locallang_mod_permission.xlf');
63 public function dispatch(ServerRequestInterface $request): ResponseInterface
65 $parsedBody = $request->getParsedBody();
67 'page' => $parsedBody[
'page'] ??
null,
68 'who' => $parsedBody[
'who'] ??
null,
69 'mode' => $parsedBody[
'mode'] ??
null,
70 'bits' => (int)($parsedBody[
'bits'] ?? 0),
71 'permissions' => (int)($parsedBody[
'permissions'] ?? 0),
72 'action' => $parsedBody[
'action'] ??
null,
73 'ownerUid' => (int)($parsedBody[
'ownerUid'] ?? 0),
74 'username' => $parsedBody[
'username'] ??
null,
75 'groupUid' => (int)($parsedBody[
'groupUid'] ?? 0),
76 'groupname' => $parsedBody[
'groupname'] ??
'',
77 'editLockState' => (int)($parsedBody[
'editLockState'] ?? 0),
78 'new_owner_uid' => (int)($parsedBody[
'newOwnerUid'] ?? 0),
79 'new_group_uid' => (int)($parsedBody[
'newGroupUid'] ?? 0),
84 $view = GeneralUtility::makeInstance(StandaloneView::class);
86 $view->assign(
'pageId', $this->conf[
'page']);
91 if ($this->conf[
'page'] <= 0) {
92 $response->getBody()->write(
'This script cannot be called directly');
93 return $response->withStatus(500);
98 $tce = GeneralUtility::makeInstance(DataHandler::class);
100 switch ($this->conf[
'action']) {
101 case 'show_change_owner_selector':
102 $content = $this->
renderUserSelector($this->conf[
'page'], $this->conf[
'ownerUid'], $this->conf[
'username']);
105 $userId = $this->conf[
'new_owner_uid'];
106 if (is_int($userId)) {
109 $data[
'pages'][$this->conf[
'page']][
'perms_userid'] = $userId;
111 $tce->start($data, []);
112 $tce->process_datamap();
114 $view->setTemplatePathAndFilename($extPath .
'Resources/Private/Templates/PermissionAjax/ChangeOwner.html');
115 $view->assign(
'userId', $userId);
117 $view->assign(
'username', $usernameArray[$userId][
'username']);
118 $content = $view->render();
120 $response->getBody()->write(
'An error occurred: No page owner uid specified');
121 $response = $response->withStatus(500);
124 case 'show_change_group_selector':
125 $content = $this->
renderGroupSelector($this->conf[
'page'], $this->conf[
'groupUid'], $this->conf[
'groupname']);
128 $groupId = $this->conf[
'new_group_uid'];
129 if (is_int($groupId)) {
132 $data[
'pages'][$this->conf[
'page']][
'perms_groupid'] = $groupId;
134 $tce->start($data, []);
135 $tce->process_datamap();
137 $view->setTemplatePathAndFilename($extPath .
'Resources/Private/Templates/PermissionAjax/ChangeGroup.html');
138 $view->assign(
'groupId', $groupId);
140 $view->assign(
'groupname', $groupnameArray[$groupId][
'title']);
141 $content = $view->render();
143 $response->getBody()->write(
'An error occurred: No page group uid specified');
144 $response = $response->withStatus(500);
147 case 'toggle_edit_lock':
150 $data[
'pages'][$this->conf[
'page']][
'editlock'] = $this->conf[
'editLockState'] === 1 ? 0 : 1;
152 $tce->start($data, []);
153 $tce->process_datamap();
154 $content = $this->
renderToggleEditLock($this->conf[
'page'], $data[
'pages'][$this->conf[
'page']][
'editlock']);
157 if ($this->conf[
'mode'] ===
'delete') {
158 $this->conf[
'permissions'] = (int)($this->conf[
'permissions'] - $this->conf[
'bits']);
160 $this->conf[
'permissions'] = (int)($this->conf[
'permissions'] + $this->conf[
'bits']);
164 $data[
'pages'][$this->conf[
'page']][
'perms_' . $this->conf[
'who']] = $this->conf[
'permissions'];
166 $tce->start($data, []);
167 $tce->process_datamap();
169 $view->setTemplatePathAndFilename($extPath .
'Resources/Private/Templates/PermissionAjax/ChangePermission.html');
170 $view->assign(
'permission', $this->conf[
'permissions']);
171 $view->assign(
'scope', $this->conf[
'who']);
172 $content = $view->render();
174 $response->getBody()->write($content);
189 $ownerUid = (int)$ownerUid;
195 foreach ($beUsers as $uid => $row) {
197 $selected = $uid === $ownerUid ?
' selected="selected"' :
'';
198 $options .=
'<option value="' . $uid .
'"' . $selected .
'>' . htmlspecialchars($row[
'username']) .
'</option>';
200 $elementId =
'o_' . $page;
201 $options =
'<option value="0"></option>' . $options;
202 $selector =
'<select name="new_page_owner" id="new_page_owner">' . $options .
'</select>';
203 $saveButton =
'<a class="saveowner btn btn-default" data-page="' . $page .
'" data-owner="' . $ownerUid
204 .
'" data-element-id="' . $elementId .
'" title="Change owner">'
205 . $this->iconFactory->getIcon(
'actions-document-save',
Icon::SIZE_SMALL)->render()
207 $cancelButton =
'<a class="restoreowner btn btn-default" data-page="' . $page .
'" data-owner="' . $ownerUid
208 .
'" data-element-id="' . $elementId .
'"'
209 . (!empty($username) ?
' data-username="' . htmlspecialchars($username) .
'"' :
'')
213 return '<span id="' . $elementId .
'">'
215 .
'<span class="btn-group">'
233 $groupUid = (int)$groupUid;
242 foreach ($beGroups as $uid => $row) {
244 if ($uid === $groupUid) {
246 $selected =
' selected="selected"';
250 $options .=
'<option value="' . $uid .
'"' . $selected .
'>' . htmlspecialchars($row[
'title']) .
'</option>';
253 if (!$userset && $groupUid) {
254 $options =
'<option value="' . $groupUid .
'" selected="selected">' .
255 htmlspecialchars($beGroupsO[$groupUid][
'title']) .
'</option>' . $options;
257 $elementId =
'g_' . $page;
258 $options =
'<option value="0"></option>' . $options;
259 $selector =
'<select name="new_page_group" id="new_page_group">' . $options .
'</select>';
260 $saveButton =
'<a class="savegroup btn btn-default" data-page="' . $page .
'" data-group-id="' . $groupUid
261 .
'" data-element-id="' . $elementId .
'" title="Change group">'
262 . $this->iconFactory->getIcon(
'actions-document-save',
Icon::SIZE_SMALL)->render()
264 $cancelButton =
'<a class="restoregroup btn btn-default" data-page="' . $page .
'" data-group-id="' . $groupUid
265 .
'" data-element-id="' . $elementId .
'"'
266 . (!empty($groupname) ?
' data-groupname="' . htmlspecialchars($groupname) .
'"' :
'')
270 return '<span id="' . $elementId .
'">'
272 .
'<span class="btn-group">'
289 if ($editLockState === 1) {
290 $ret =
'<span id="el_' . $page .
'"><a class="editlock btn btn-default" data-page="' . $page
291 .
'" data-lockstate="1" title="The page and all content is locked for editing by all non-Admin users.">'
292 . $this->iconFactory->getIcon(
'actions-lock',
Icon::SIZE_SMALL)->render() .
'</a></span>';
294 $ret =
'<span id="el_' . $page .
'"><a class="editlock btn btn-default" data-page="' . $page .
295 '" data-lockstate="0" title="Enable the »Admin-only« edit lock for this page">'
296 . $this->iconFactory->getIcon(
'actions-unlock',
Icon::SIZE_SMALL)->render() .
'</a></span>';