‪TYPO3CMS  10.4
TreeController.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ResponseInterface;
21 use Psr\Http\Message\ServerRequestInterface;
40 
46 {
52  protected ‪$useNavTitle = false;
53 
59  protected ‪$addIdAsPrefix = false;
60 
66  protected ‪$addDomainName = false;
67 
73  protected ‪$showMountPathAboveMounts = false;
74 
80  protected ‪$backgroundColors = [];
81 
87  protected ‪$hiddenRecords = [];
88 
94  protected ‪$expandedState = [];
95 
101  protected ‪$iconFactory;
102 
108  protected ‪$levelsToFetch = 2;
109 
114  protected ‪$expandAllNodes = false;
115 
119  public function ‪__construct()
120  {
121  $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
122  }
123 
124  protected function ‪initializeConfiguration()
125  {
126  $userTsConfig = $this->‪getBackendUser()->‪getTSConfig();
127  $this->hiddenRecords = ‪GeneralUtility::intExplode(
128  ',',
129  $userTsConfig['options.']['hideRecords.']['pages'] ?? '',
130  true
131  );
132  $this->backgroundColors = $userTsConfig['options.']['pageTree.']['backgroundColor.'] ?? [];
133  $this->addIdAsPrefix = (bool)($userTsConfig['options.']['pageTree.']['showPageIdWithTitle'] ?? false);
134  $this->addDomainName = (bool)($userTsConfig['options.']['pageTree.']['showDomainNameWithTitle'] ?? false);
135  $this->useNavTitle = (bool)($userTsConfig['options.']['pageTree.']['showNavTitle'] ?? false);
136  $this->showMountPathAboveMounts = (bool)($userTsConfig['options.']['pageTree.']['showPathAboveMounts'] ?? false);
137  $backendUserConfiguration = GeneralUtility::makeInstance(BackendUserConfiguration::class);
138  $this->expandedState = $backendUserConfiguration->get('BackendComponents.States.Pagetree');
139  if (is_object($this->expandedState) && is_object($this->expandedState->stateHash)) {
140  $this->expandedState = (array)$this->expandedState->stateHash;
141  } else {
142  $this->expandedState = $this->expandedState['stateHash'] ?: [];
143  }
144  }
145 
151  public function ‪fetchConfigurationAction(): ResponseInterface
152  {
153  $configuration = [
154  'allowRecursiveDelete' => !empty($this->‪getBackendUser()->uc['recursiveDelete']),
155  'allowDragMove' => $this->‪isDragMoveAllowed(),
156  'doktypes' => $this->‪getDokTypes(),
157  'displayDeleteConfirmation' => $this->‪getBackendUser()->‪jsConfirmation(‪JsConfirmation::DELETE),
158  'temporaryMountPoint' => $this->‪getMountPointPath((int)($this->‪getBackendUser()->uc['pageTree_temporaryMountPoint'] ?? 0)),
159  ];
160 
161  return new JsonResponse($configuration);
162  }
163 
172  protected function ‪getDokTypes(): array
173  {
174  $backendUser = $this->‪getBackendUser();
175  $doktypeLabelMap = [];
176  foreach (‪$GLOBALS['TCA']['pages']['columns']['doktype']['config']['items'] as $doktypeItemConfig) {
177  if ($doktypeItemConfig[1] === '--div--') {
178  continue;
179  }
180  $doktypeLabelMap[$doktypeItemConfig[1]] = $doktypeItemConfig[0];
181  }
182  $doktypes = ‪GeneralUtility::intExplode(',', $backendUser->getTSConfig()['options.']['pageTree.']['doktypesToShowInNewPageDragArea'] ?? '', true);
183  $doktypes = array_unique($doktypes);
184  ‪$output = [];
185  $allowedDoktypes = ‪GeneralUtility::intExplode(',', $backendUser->groupData['pagetypes_select'], true);
186  $isAdmin = $backendUser->isAdmin();
187  // Early return if backend user may not create any doktype
188  if (!$isAdmin && empty($allowedDoktypes)) {
189  return ‪$output;
190  }
191  foreach ($doktypes as $doktype) {
192  if (!$isAdmin && !in_array($doktype, $allowedDoktypes, true)) {
193  continue;
194  }
195  $label = htmlspecialchars($this->‪getLanguageService()->sL($doktypeLabelMap[$doktype]));
196  ‪$output[] = [
197  'nodeType' => $doktype,
198  'icon' => ‪$GLOBALS['TCA']['pages']['ctrl']['typeicon_classes'][$doktype] ?? '',
199  'title' => $label,
200  'tooltip' => $label
201  ];
202  }
203  return ‪$output;
204  }
205 
212  public function ‪fetchDataAction(ServerRequestInterface $request): ResponseInterface
213  {
215 
216  $items = [];
217  if (!empty($request->getQueryParams()['pid'])) {
218  // Fetching a part of a page tree
219  $entryPoints = $this->‪getAllEntryPointPageTrees((int)$request->getQueryParams()['pid']);
220  $mountPid = (int)($request->getQueryParams()['mount'] ?? 0);
221  $parentDepth = (int)($request->getQueryParams()['pidDepth'] ?? 0);
222  $this->levelsToFetch = $parentDepth + ‪$this->levelsToFetch;
223  foreach ($entryPoints as $page) {
224  $items = array_merge($items, $this->‪pagesToFlatArray($page, $mountPid, $parentDepth));
225  }
226  } else {
227  $entryPoints = $this->‪getAllEntryPointPageTrees();
228  foreach ($entryPoints as $page) {
229  $items = array_merge($items, $this->‪pagesToFlatArray($page, (int)$page['uid']));
230  }
231  }
232 
233  return new ‪JsonResponse($items);
234  }
235 
242  public function ‪filterDataAction(ServerRequestInterface $request): ResponseInterface
243  {
244  $searchQuery = $request->getQueryParams()['q'] ?? '';
245  if (trim($searchQuery) === '') {
246  return new ‪JsonResponse([]);
247  }
248 
250  $this->expandAllNodes = true;
251 
252  $items = [];
253  $entryPoints = $this->‪getAllEntryPointPageTrees(0, $searchQuery);
254 
255  foreach ($entryPoints as $page) {
256  if (!empty($page)) {
257  $items = array_merge($items, $this->‪pagesToFlatArray($page, (int)$page['uid']));
258  }
259  }
260 
261  return new ‪JsonResponse($items);
262  }
263 
271  public function ‪setTemporaryMountPointAction(ServerRequestInterface $request): ResponseInterface
272  {
273  if (empty($request->getParsedBody()['pid'])) {
274  throw new \RuntimeException(
275  'Required "pid" parameter is missing.',
276  1511792197
277  );
278  }
279  $pid = (int)$request->getParsedBody()['pid'];
280 
281  $this->‪getBackendUser()->uc['pageTree_temporaryMountPoint'] = $pid;
282  $this->‪getBackendUser()->‪writeUC();
283  $response = [
284  'mountPointPath' => $this->‪getMountPointPath($pid)
285  ];
286  return new ‪JsonResponse($response);
287  }
288 
299  protected function ‪pagesToFlatArray(array $page, int $entryPoint, int $depth = 0, array $inheritedData = []): array
300  {
301  $backendUser = $this->‪getBackendUser();
302  $pageId = (int)$page['uid'];
303  if (in_array($pageId, $this->hiddenRecords, true)) {
304  return [];
305  }
306 
307  $stopPageTree = !empty($page['php_tree_stop']) && $depth > 0;
308  $identifier = $entryPoint . '_' . $pageId;
309  $expanded = !empty($page['expanded'])
310  || (isset($this->expandedState[$identifier]) && $this->expandedState[$identifier])
311  || $this->expandAllNodes;
312 
313  $backgroundColor = !empty($this->backgroundColors[$pageId]) ? $this->backgroundColors[$pageId] : ($inheritedData['backgroundColor'] ?? '');
314 
315  $suffix = '';
316  $prefix = '';
317  $nameSourceField = 'title';
318  $visibleText = $page['title'];
319  $tooltip = ‪BackendUtility::titleAttribForPages($page, '', false);
320  if ($pageId !== 0) {
321  $icon = $this->iconFactory->getIconForRecord('pages', $page, ‪Icon::SIZE_SMALL);
322  } else {
323  $icon = $this->iconFactory->getIcon('apps-pagetree-root', ‪Icon::SIZE_SMALL);
324  }
325 
326  if ($this->useNavTitle && trim($page['nav_title'] ?? '') !== '') {
327  $nameSourceField = 'nav_title';
328  $visibleText = $page['nav_title'];
329  }
330  if (trim($visibleText) === '') {
331  $visibleText = htmlspecialchars('[' . $this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.no_title') . ']');
332  }
333 
334  if ($this->addDomainName && $page['is_siteroot']) {
335  $domain = $this->‪getDomainNameForPage($pageId);
336  $suffix = $domain !== '' ? ' [' . $domain . ']' : '';
337  }
338 
339  $lockInfo = ‪BackendUtility::isRecordLocked('pages', $pageId);
340  if (is_array($lockInfo)) {
341  $tooltip .= ' - ' . $lockInfo['msg'];
342  }
343  if ($this->addIdAsPrefix) {
344  $prefix = htmlspecialchars('[' . $pageId . '] ');
345  }
346 
347  $items = [];
348  $item = [
349  // Used to track if the tree item is collapsed or not
350  'stateIdentifier' => $identifier,
351  'identifier' => $pageId,
352  'depth' => $depth,
353  'tip' => htmlspecialchars($tooltip),
354  'icon' => $icon->getIdentifier(),
355  'name' => $visibleText,
356  'nameSourceField' => $nameSourceField,
357  'mountPoint' => $entryPoint,
358  'workspaceId' => !empty($page['t3ver_oid']) ? $page['t3ver_oid'] : $pageId,
359  'siblingsCount' => $page['siblingsCount'] ?? 1,
360  'siblingsPosition' => $page['siblingsPosition'] ?? 1,
361  'allowDelete' => $backendUser->doesUserHaveAccess($page, ‪Permission::PAGE_DELETE),
362  'allowEdit' => $backendUser->doesUserHaveAccess($page, ‪Permission::PAGE_EDIT)
363  && $backendUser->check('tables_modify', 'pages')
364  && $backendUser->checkLanguageAccess(0)
365  ];
366 
367  if (!empty($page['_children']) || $this->‪getPageTreeRepository()->hasChildren($pageId)) {
368  $item['hasChildren'] = true;
369  if ($depth >= $this->levelsToFetch) {
370  $page = $this->‪getPageTreeRepository()->getTreeLevels($page, 1);
371  }
372  }
373  if (!empty($prefix)) {
374  $item['prefix'] = htmlspecialchars($prefix);
375  }
376  if (!empty($suffix)) {
377  $item['suffix'] = htmlspecialchars($suffix);
378  }
379  if (is_array($lockInfo)) {
380  $item['locked'] = true;
381  }
382  if ($icon->getOverlayIcon()) {
383  $item['overlayIcon'] = $icon->getOverlayIcon()->getIdentifier();
384  }
385  if ($expanded && is_array($page['_children']) && !empty($page['_children'])) {
386  $item['expanded'] = $expanded;
387  }
388  if ($backgroundColor) {
389  $item['backgroundColor'] = htmlspecialchars($backgroundColor);
390  }
391  if ($stopPageTree) {
392  $item['stopPageTree'] = $stopPageTree;
393  }
394  $class = $this->‪resolvePageCssClassNames($page);
395  if (!empty($class)) {
396  $item['class'] = $class;
397  }
398  if ($depth === 0) {
399  $item['isMountPoint'] = true;
400 
401  if ($this->showMountPathAboveMounts) {
402  $item['readableRootline'] = $this->‪getMountPointPath($pageId);
403  }
404  }
405 
406  $items[] = $item;
407  if (!$stopPageTree && is_array($page['_children']) && !empty($page['_children']) && ($depth < $this->levelsToFetch || $expanded)) {
408  $siblingsCount = count($page['_children']);
409  $siblingsPosition = 0;
410  $items[key($items)]['loaded'] = true;
411  foreach ($page['_children'] as $child) {
412  $child['siblingsCount'] = $siblingsCount;
413  $child['siblingsPosition'] = ++$siblingsPosition;
414  $items = array_merge($items, $this->‪pagesToFlatArray($child, $entryPoint, $depth + 1, ['backgroundColor' => $backgroundColor]));
415  }
416  }
417  return $items;
418  }
419 
420  protected function ‪getPageTreeRepository(): PageTreeRepository
421  {
422  $backendUser = $this->‪getBackendUser();
423  $userTsConfig = $backendUser->getTSConfig();
424  $excludedDocumentTypes = ‪GeneralUtility::intExplode(',', $userTsConfig['options.']['pageTree.']['excludeDoktypes'] ?? '', true);
425 
426  $additionalQueryRestrictions = [];
427  if (!empty($excludedDocumentTypes)) {
428  $additionalQueryRestrictions[] = GeneralUtility::makeInstance(DocumentTypeExclusionRestriction::class, $excludedDocumentTypes);
429  }
430 
431  return GeneralUtility::makeInstance(
432  PageTreeRepository::class,
433  (int)$backendUser->workspace,
434  [],
435  $additionalQueryRestrictions
436  );
437  }
438 
446  protected function ‪getAllEntryPointPageTrees(int $startPid = 0, string $query = ''): array
447  {
448  $backendUser = $this->‪getBackendUser();
449  if ($startPid === 0) {
450  $startPid = (int)($backendUser->uc['pageTree_temporaryMountPoint'] ?? 0);
451  }
452 
453  $entryPointIds = null;
454  if ($startPid > 0) {
455  $entryPointIds = [$startPid];
456  }
457 
458  $repository = $this->‪getPageTreeRepository();
459  $permClause = $backendUser->getPagePermsClause(‪Permission::PAGE_SHOW);
460  if ($query !== '') {
461  $this->levelsToFetch = 999;
462  $repository->fetchFilteredTree(
463  $query,
464  $this->‪getAllowedMountPoints(),
465  $permClause
466  );
467  }
468  $rootRecord = [
469  'uid' => 0,
470  'title' => ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] ?: 'TYPO3',
471  ];
472  $entryPointRecords = [];
473  $mountPoints = [];
474  if ($entryPointIds === null) {
475  //watch out for deleted pages returned as webmount
476  $mountPoints = array_map('intval', $backendUser->returnWebmounts());
477  $mountPoints = array_unique($mountPoints);
478 
479  // Switch to multiple-entryPoint-mode if the rootPage is to be mounted.
480  // (other mounts would appear duplicated in the pid = 0 tree otherwise)
481  if (in_array(0, $mountPoints, true)) {
482  $entryPointIds = $mountPoints;
483  }
484 
486  $mountPoints = array_filter($mountPoints, function ($id) use (‪$hiddenRecords) {
487  return !in_array($id, ‪$hiddenRecords, true);
488  });
489  }
490 
491  if ($entryPointIds === null) {
492  if ($query !== '') {
493  $rootRecord = $repository->getTree(0, null, $mountPoints, true);
494  } else {
495  $rootRecord = $repository->getTreeLevels($rootRecord, $this->levelsToFetch, $mountPoints);
496  }
497 
498  $mountPointOrdering = array_flip($mountPoints);
499  if (isset($rootRecord['_children'])) {
500  usort($rootRecord['_children'], static function ($a, $b) use ($mountPointOrdering) {
501  return ($mountPointOrdering[$a['uid']] ?? 0) <=> ($mountPointOrdering[$b['uid']] ?? 0);
502  });
503  }
504 
505  $entryPointRecords[] = $rootRecord;
506  } else {
508  $entryPointIds = array_filter($entryPointIds, function ($id) use (‪$hiddenRecords) {
509  return !in_array($id, ‪$hiddenRecords, true);
510  });
511  $this->‪calculateBackgroundColors($entryPointIds);
512  foreach ($entryPointIds as $k => $entryPointId) {
513  if ($entryPointId === 0) {
514  $entryPointRecord = $rootRecord;
515  } else {
516  $entryPointRecord = ‪BackendUtility::getRecordWSOL('pages', $entryPointId, '*', $permClause);
517 
518  if ($entryPointRecord !== null && !$backendUser->isInWebMount($entryPointId)) {
519  $entryPointRecord = null;
520  }
521  if ($entryPointRecord === null) {
522  continue;
523  }
524  }
525 
526  $entryPointRecord['uid'] = (int)$entryPointRecord['uid'];
527  if ($query === '') {
528  $entryPointRecord = $repository->getTreeLevels($entryPointRecord, $this->levelsToFetch);
529  } else {
530  $entryPointRecord = $repository->getTree($entryPointRecord['uid'], null, $entryPointIds, true);
531  }
532 
533  if (is_array($entryPointRecord) && !empty($entryPointRecord)) {
534  $entryPointRecords[$k] = $entryPointRecord;
535  }
536  }
537  }
538 
539  return $entryPointRecords;
540  }
541 
542  protected function ‪calculateBackgroundColors(array $pageIds)
543  {
544  foreach ($pageIds as $k => $pageId) {
545  if (!empty($this->backgroundColors) && is_array($this->backgroundColors)) {
546  try {
547  $entryPointRootLine = GeneralUtility::makeInstance(RootlineUtility::class, $pageId)->get();
548  } catch (RootLineException $e) {
549  $entryPointRootLine = [];
550  }
551  foreach ($entryPointRootLine as $rootLineEntry) {
552  $parentUid = $rootLineEntry['uid'];
553  if (!empty($this->backgroundColors[$parentUid]) && empty($this->backgroundColors[$pageId])) {
554  $this->backgroundColors[$pageId] = $this->backgroundColors[$parentUid];
555  }
556  }
557  }
558  }
559  }
560 
567  protected function ‪getDomainNameForPage(int $pageId): string
568  {
569  $domain = '';
570  $siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
571  try {
572  $site = $siteFinder->getSiteByRootPageId($pageId);
573  $domain = (string)$site->getBase();
574  } catch (SiteNotFoundException $e) {
575  // No site found
576  }
577 
578  return $domain;
579  }
580 
587  protected function ‪getMountPointPath(int $uid): string
588  {
589  if ($uid <= 0) {
590  return '';
591  }
592  $rootline = array_reverse(‪BackendUtility::BEgetRootLine($uid));
593  array_shift($rootline);
594  $path = [];
595  foreach ($rootline as $rootlineElement) {
596  $record = ‪BackendUtility::getRecordWSOL('pages', $rootlineElement['uid'], 'title, nav_title', '', true, true);
597  $text = $record['title'];
598  if ($this->useNavTitle && trim($record['nav_title'] ?? '') !== '') {
599  $text = $record['nav_title'];
600  }
601  $path[] = htmlspecialchars($text);
602  }
603  return '/' . implode('/', $path);
604  }
605 
612  protected function ‪resolvePageCssClassNames(array $page): string
613  {
614  $classes = [];
615 
616  if ($page['uid'] === 0) {
617  return '';
618  }
619  $workspaceId = (int)$this->‪getBackendUser()->workspace;
620  if ($workspaceId > 0 && ‪ExtensionManagementUtility::isLoaded('workspaces')) {
621  if ($page['t3ver_oid'] > 0 && (int)$page['t3ver_wsid'] === $workspaceId) {
622  $classes[] = 'ver-element';
623  $classes[] = 'ver-versions';
624  } elseif (
625  $this->‪getWorkspaceService()->hasPageRecordVersions(
626  $workspaceId,
627  $page['t3ver_oid'] ?: $page['uid']
628  )
629  ) {
630  $classes[] = 'ver-versions';
631  }
632  }
633 
634  return implode(' ', $classes);
635  }
636 
642  protected function ‪isDragMoveAllowed(): bool
643  {
644  $backendUser = $this->‪getBackendUser();
645  return $backendUser->isAdmin()
646  || ($backendUser->check('tables_modify', 'pages') && $backendUser->checkLanguageAccess(0));
647  }
648 
654  protected function ‪getAllowedMountPoints(): array
655  {
656  $mountPoints = (int)($this->‪getBackendUser()->uc['pageTree_temporaryMountPoint'] ?? 0);
657  if (!$mountPoints) {
658  $mountPoints = array_map('intval', $this->‪getBackendUser()->returnWebmounts());
659  return array_unique($mountPoints);
660  }
661  return [$mountPoints];
662  }
663 
667  protected function ‪getWorkspaceService(): WorkspaceService
668  {
669  return GeneralUtility::makeInstance(WorkspaceService::class);
670  }
671 
675  protected function ‪getBackendUser(): ‪BackendUserAuthentication
676  {
677  return ‪$GLOBALS['BE_USER'];
678  }
679 
683  protected function ‪getLanguageService(): ?LanguageService
684  {
685  return ‪$GLOBALS['LANG'] ?? null;
686  }
687 }
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$iconFactory
‪IconFactory $iconFactory
Definition: TreeController.php:93
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Core\Database\Query\Restriction\DocumentTypeExclusionRestriction
Definition: DocumentTypeExclusionRestriction.php:27
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getAllowedMountPoints
‪int[] getAllowedMountPoints()
Definition: TreeController.php:644
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getDomainNameForPage
‪string getDomainNameForPage(int $pageId)
Definition: TreeController.php:557
‪TYPO3\CMS\Core\Authentication\AbstractUserAuthentication\writeUC
‪writeUC($variable='')
Definition: AbstractUserAuthentication.php:1120
‪TYPO3\CMS\Backend\Controller\Page\TreeController\pagesToFlatArray
‪array pagesToFlatArray(array $page, int $entryPoint, int $depth=0, array $inheritedData=[])
Definition: TreeController.php:289
‪TYPO3\CMS\Backend\Controller\Page\TreeController\initializeConfiguration
‪initializeConfiguration()
Definition: TreeController.php:114
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$addDomainName
‪bool $addDomainName
Definition: TreeController.php:63
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getWorkspaceService
‪WorkspaceService getWorkspaceService()
Definition: TreeController.php:657
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getMountPointPath
‪string getMountPointPath(int $uid)
Definition: TreeController.php:577
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getTSConfig
‪array getTSConfig()
Definition: BackendUserAuthentication.php:1217
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getPageTreeRepository
‪getPageTreeRepository()
Definition: TreeController.php:410
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getLanguageService
‪LanguageService null getLanguageService()
Definition: TreeController.php:673
‪TYPO3\CMS\Core\Utility\RootlineUtility
Definition: RootlineUtility.php:39
‪TYPO3\CMS\Core\Exception\SiteNotFoundException
Definition: SiteNotFoundException.php:26
‪TYPO3\CMS\Core\Site\SiteFinder
Definition: SiteFinder.php:31
‪TYPO3\CMS\Backend\Controller\Page\TreeController
Definition: TreeController.php:46
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$expandedState
‪array $expandedState
Definition: TreeController.php:87
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:33
‪TYPO3\CMS\Backend\Controller\Page\TreeController\filterDataAction
‪ResponseInterface filterDataAction(ServerRequestInterface $request)
Definition: TreeController.php:232
‪TYPO3\CMS\Backend\Controller\Page\TreeController\resolvePageCssClassNames
‪string resolvePageCssClassNames(array $page)
Definition: TreeController.php:602
‪TYPO3\CMS\Backend\Controller\Page\TreeController\calculateBackgroundColors
‪calculateBackgroundColors(array $pageIds)
Definition: TreeController.php:532
‪TYPO3\CMS\Backend\Utility\BackendUtility\BEgetRootLine
‪static array BEgetRootLine($uid, $clause='', $workspaceOL=false, array $additionalFields=[])
Definition: BackendUtility.php:343
‪TYPO3\CMS\Backend\Controller\Page
Definition: LocalizationController.php:18
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$levelsToFetch
‪int $levelsToFetch
Definition: TreeController.php:99
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:24
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Core\Type\Bitmask\JsConfirmation\DELETE
‪const DELETE
Definition: JsConfirmation.php:39
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$backgroundColors
‪array $backgroundColors
Definition: TreeController.php:75
‪TYPO3\CMS\Backend\Controller\Page\TreeController\isDragMoveAllowed
‪bool isDragMoveAllowed()
Definition: TreeController.php:632
‪TYPO3\CMS\Backend\Configuration\BackendUserConfiguration
Definition: BackendUserConfiguration.php:30
‪TYPO3\CMS\Backend\Controller\Page\TreeController\fetchConfigurationAction
‪ResponseInterface fetchConfigurationAction()
Definition: TreeController.php:141
‪TYPO3\CMS\Backend\Utility\BackendUtility\titleAttribForPages
‪static string titleAttribForPages($row, $perms_clause='', $includeAttrib=true)
Definition: BackendUtility.php:1244
‪TYPO3\CMS\Backend\Controller\Page\TreeController\fetchDataAction
‪ResponseInterface fetchDataAction(ServerRequestInterface $request)
Definition: TreeController.php:202
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: TreeController.php:665
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_SHOW
‪const PAGE_SHOW
Definition: Permission.php:33
‪TYPO3\CMS\Backend\Utility\BackendUtility
Definition: BackendUtility.php:75
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecordWSOL
‪static array getRecordWSOL( $table, $uid, $fields=' *', $where='', $useDeleteClause=true, $unsetMovePointers=false)
Definition: BackendUtility.php:139
‪TYPO3\CMS\Workspaces\Service\WorkspaceService
Definition: WorkspaceService.php:36
‪$output
‪$output
Definition: annotationChecker.php:119
‪TYPO3\CMS\Backend\Controller\Page\TreeController\__construct
‪__construct()
Definition: TreeController.php:109
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getDokTypes
‪array getDokTypes()
Definition: TreeController.php:162
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$expandAllNodes
‪bool $expandAllNodes
Definition: TreeController.php:104
‪TYPO3\CMS\Core\Http\JsonResponse
Definition: JsonResponse.php:26
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Backend\Tree\Repository\PageTreeRepository
Definition: PageTreeRepository.php:41
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_EDIT
‪const PAGE_EDIT
Definition: Permission.php:38
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_DELETE
‪const PAGE_DELETE
Definition: Permission.php:43
‪TYPO3\CMS\Core\Utility\GeneralUtility\intExplode
‪static int[] intExplode($delimiter, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:988
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$addIdAsPrefix
‪bool $addIdAsPrefix
Definition: TreeController.php:57
‪TYPO3\CMS\Core\Exception\Page\RootLineException
Definition: RootLineException.php:25
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$hiddenRecords
‪array $hiddenRecords
Definition: TreeController.php:81
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Backend\Controller\Page\TreeController\getAllEntryPointPageTrees
‪array getAllEntryPointPageTrees(int $startPid=0, string $query='')
Definition: TreeController.php:436
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Backend\Controller\Page\TreeController\setTemporaryMountPointAction
‪ResponseInterface setTemporaryMountPointAction(ServerRequestInterface $request)
Definition: TreeController.php:261
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$showMountPathAboveMounts
‪bool $showMountPathAboveMounts
Definition: TreeController.php:69
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static bool isLoaded($key)
Definition: ExtensionManagementUtility.php:114
‪TYPO3\CMS\Core\Type\Bitmask\JsConfirmation
Definition: JsConfirmation.php:25
‪TYPO3\CMS\Backend\Controller\Page\TreeController\$useNavTitle
‪bool $useNavTitle
Definition: TreeController.php:51
‪TYPO3\CMS\Backend\Utility\BackendUtility\isRecordLocked
‪static array bool isRecordLocked($table, $uid)
Definition: BackendUtility.php:3011
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\jsConfirmation
‪bool jsConfirmation($bitmask)
Definition: BackendUserAuthentication.php:1288