‪TYPO3CMS  ‪main
ElementBrowserPageTreeView.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
25 
33 {
37  protected ‪$linkParameterProvider;
38 
40 
44  public function ‪__construct()
45  {
46  trigger_error(__CLASS__ . ' will be removed in TYPO3 v13, as Tree implementations should be built with Web Components', E_USER_DEPRECATED);
47  parent::__construct();
48  $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
49 
50  $this->‪init();
51  $this->clause = ' AND doktype <> ' . ‪PageRepository::DOKTYPE_RECYCLER . ‪$this->clause;
52  }
53 
55  {
56  $this->linkParameterProvider = ‪$linkParameterProvider;
57  $this->thisScript = ‪$linkParameterProvider->‪getScriptUrl();
58  }
59 
67  public function ‪wrapTitle(‪$title, $v)
68  {
69  if ($this->‪ext_isLinkable($v['doktype'], $v['uid'])) {
70  ‪$url = GeneralUtility::makeInstance(LinkService::class)->asString(['type' => ‪LinkService::TYPE_PAGE, 'pageuid' => (int)$v['uid']]);
71  return '<span class="treelist-title"><a href="' . htmlspecialchars(‪$url) . '" class="t3js-pageLink">' . ‪$title . '</a></span>';
72  }
73  return '<span class="treelist-title text-muted">' . ‪$title . '</span>';
74  }
75 
82  public function ‪printTree($treeArr = '')
83  {
84  $titleLen = (int)$this->‪getBackendUser()->uc['titleLen'];
85  if (!is_array($treeArr)) {
86  $treeArr = ‪$this->tree;
87  }
88  $out = '';
89  // We need to count the opened <ul>'s every time we dig into another level,
90  // so we know how many we have to close when all children are done rendering
91  $closeDepth = [];
92  foreach ($treeArr as $treeItem) {
93  $classAttr = $treeItem['row']['_CSSCLASS'];
94  if ($treeItem['isFirst']) {
95  $out .= '<ul class="treelist">';
96  }
97 
98  // Add CSS classes to the list item
99  if ($treeItem['hasSub']) {
100  $classAttr .= ' treelist-control-open';
101  }
102 
103  $selected = '';
104  if ($this->linkParameterProvider->isCurrentlySelectedItem(['pid' => (int)$treeItem['row']['uid']])) {
105  $selected = ' bg-success';
106  $classAttr .= ' active';
107  }
108  $urlParameters = $this->linkParameterProvider->getUrlParameters(['pid' => (int)$treeItem['row']['uid']]);
109  $cEbullet = $this->‪ext_isLinkable($treeItem['row']['doktype'], $treeItem['row']['uid'])
110  ? '<a href="' . htmlspecialchars($this->‪getThisScript() . ‪HttpUtility::buildQueryString($urlParameters)) . '" class="treelist-show">' . $this->iconFactory->getIcon('actions-caret-right', ‪Icon::SIZE_SMALL)->render() . '</a>'
111  : '';
112  $out .= '
113  <li' . ($classAttr ? ' class="' . trim($classAttr) . '"' : '') . '>
114  ' . $cEbullet . '
115  <span class="treelist-group' . $selected . '">
116  ' . $treeItem['HTML'] . $this->‪wrapTitle($this->‪getTitleStr($treeItem['row'], $titleLen), $treeItem['row']) . '
117  </span>
118  ';
119  if (!$treeItem['hasSub']) {
120  $out .= '</li>';
121  }
122 
123  // We have to remember if this is the last one
124  // on level X so the last child on level X+1 closes the <ul>-tag
125  if ($treeItem['isLast']) {
126  $closeDepth[$treeItem['invertedDepth']] = 1;
127  }
128  // If this is the last one and does not have subitems, we need to close
129  // the tree as long as the upper levels have last items too
130  if ($treeItem['isLast'] && !$treeItem['hasSub']) {
131  for ($i = $treeItem['invertedDepth']; $closeDepth[$i] == 1; $i++) {
132  $closeDepth[$i] = 0;
133  $out .= '</ul></li>';
134  }
135  }
136  }
137  return '<ul class="treelist treelist-root">' . $out . '</ul>';
138  }
139 
147  public function ‪ext_isLinkable($doktype, ‪$uid)
148  {
149  $notLinkableDokTypes = [
153  ];
154  return ‪$uid && !in_array($doktype, $notLinkableDokTypes, true);
155  }
156 
164  public function ‪PM_ATagWrap($bMark = '', $isOpen = false)
165  {
166  $bMark = htmlspecialchars((string)$bMark);
167  $anchor = $bMark ? '#' . $bMark : '';
168  $name = $bMark ? ' name=' . $bMark : '';
169  $urlParameters = $this->linkParameterProvider->getUrlParameters([]);
170  if ($isOpen) {
171  $class = 'treelist-control-open';
172  $icon = $this->iconFactory->getIcon('actions-chevron-down', ‪Icon::SIZE_SMALL);
173  } else {
174  $class = 'treelist-control-collapsed';
175  $icon = $this->iconFactory->getIcon('actions-chevron-right', ‪Icon::SIZE_SMALL);
176  }
177  return '<a class="treelist-control ' . $class
178  . '" href="' . htmlspecialchars($this->‪getThisScript() . ‪HttpUtility::buildQueryString($urlParameters)) . $anchor . '"' . $name . '>' . $icon->render(‪AbstractSvgIconProvider::MARKUP_IDENTIFIER_INLINE) . '</a>';
179  }
180 }
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:37
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView
Definition: ElementBrowserPageTreeView.php:33
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\PM_ATagWrap
‪string PM_ATagWrap($bMark='', $isOpen=false)
Definition: ElementBrowserPageTreeView.php:163
‪TYPO3\CMS\Core\Imaging\IconProvider\AbstractSvgIconProvider\MARKUP_IDENTIFIER_INLINE
‪const MARKUP_IDENTIFIER_INLINE
Definition: AbstractSvgIconProvider.php:32
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$clause
‪string $clause
Definition: AbstractTreeView.php:84
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:28
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$title
‪string $title
Definition: AbstractTreeView.php:53
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\setLinkParameterProvider
‪setLinkParameterProvider(LinkParameterProviderInterface $linkParameterProvider)
Definition: ElementBrowserPageTreeView.php:53
‪TYPO3\CMS\Core\Imaging\IconProvider\AbstractSvgIconProvider
Definition: AbstractSvgIconProvider.php:31
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\printTree
‪string printTree($treeArr='')
Definition: ElementBrowserPageTreeView.php:81
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$tree
‪array $tree
Definition: AbstractTreeView.php:163
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView\getTitleStr
‪string getTitleStr($row, $titleLen=30)
Definition: BrowseTreeView.php:78
‪TYPO3\CMS\Core\Utility\HttpUtility\buildQueryString
‪static string buildQueryString(array $parameters, string $prependCharacter='', bool $skipEmptyParameters=false)
Definition: HttpUtility.php:124
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SPACER
‪const DOKTYPE_SPACER
Definition: PageRepository.php:131
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\$iconFactory
‪IconFactory $iconFactory
Definition: ElementBrowserPageTreeView.php:38
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SYSFOLDER
‪const DOKTYPE_SYSFOLDER
Definition: PageRepository.php:132
‪TYPO3\CMS\Backend\Tree\View
Definition: AbstractContentPagePositionMap.php:18
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView\init
‪init($clause='', $orderByFields='')
Definition: BrowseTreeView.php:43
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\wrapTitle
‪string wrapTitle($title, $v)
Definition: ElementBrowserPageTreeView.php:66
‪TYPO3\CMS\Webhooks\Message\$uid
‪identifier readonly int $uid
Definition: PageModificationMessage.php:35
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\$linkParameterProvider
‪LinkParameterProviderInterface $linkParameterProvider
Definition: ElementBrowserPageTreeView.php:36
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView
Definition: BrowseTreeView.php:29
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\ext_isLinkable
‪bool ext_isLinkable($doktype, $uid)
Definition: ElementBrowserPageTreeView.php:146
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\getThisScript
‪string getThisScript()
Definition: AbstractTreeView.php:203
‪TYPO3\CMS\Core\Utility\HttpUtility
Definition: HttpUtility.php:24
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\getBackendUser
‪getBackendUser()
Definition: AbstractTreeView.php:615
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:63
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_RECYCLER
‪const DOKTYPE_RECYCLER
Definition: PageRepository.php:133
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\__construct
‪__construct()
Definition: ElementBrowserPageTreeView.php:43