‪TYPO3CMS  10.4
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 
23 
30 {
37  public ‪$ext_showPageId = false;
38 
42  public ‪$ext_pArrPages = true;
43 
47  protected ‪$linkParameterProvider;
48 
52  public function ‪__construct()
53  {
54  parent::__construct();
55  $this->‪init();
56  $this->clause = ' AND doktype <> ' . ‪PageRepository::DOKTYPE_RECYCLER . ‪$this->clause;
57  }
58 
63  {
64  $this->linkParameterProvider = ‪$linkParameterProvider;
65  $this->thisScript = ‪$linkParameterProvider->‪getScriptUrl();
66  }
67 
76  public function ‪wrapTitle(‪$title, $v, ‪$ext_pArrPages = false)
77  {
78  if ($this->‪ext_isLinkable($v['doktype'], $v['uid'])) {
79  $url = GeneralUtility::makeInstance(LinkService::class)->asString(['type' => ‪LinkService::TYPE_PAGE, 'pageuid' => (int)$v['uid']]);
80  return '<span class="list-tree-title"><a href="' . htmlspecialchars($url) . '" class="t3js-pageLink">' . ‪$title . '</a></span>';
81  }
82  return '<span class="list-tree-title text-muted">' . ‪$title . '</span>';
83  }
84 
91  public function ‪printTree($treeArr = '')
92  {
93  $titleLen = (int)‪$GLOBALS['BE_USER']->uc['titleLen'];
94  if (!is_array($treeArr)) {
95  $treeArr = ‪$this->tree;
96  }
97  $out = '';
98  // We need to count the opened <ul>'s every time we dig into another level,
99  // so we know how many we have to close when all children are done rendering
100  $closeDepth = [];
101  foreach ($treeArr as $treeItem) {
102  if ($treeItem['isMountPointPath']) {
103  $out .= '<li class="list-tree-path">' . $treeItem['title'] . '</li>';
104  continue;
105  }
106 
107  $classAttr = $treeItem['row']['_CSSCLASS'];
108  if ($treeItem['isFirst']) {
109  $out .= '<ul class="list-tree">';
110  }
111 
112  // Add CSS classes to the list item
113  if ($treeItem['hasSub']) {
114  $classAttr .= ' list-tree-control-open';
115  }
116 
117  $selected = '';
118  if ($this->linkParameterProvider->isCurrentlySelectedItem(['pid' => (int)$treeItem['row']['uid']])) {
119  $selected = ' bg-success';
120  $classAttr .= ' active';
121  }
122  $urlParameters = $this->linkParameterProvider->getUrlParameters(['pid' => (int)$treeItem['row']['uid']]);
123  $cEbullet = $this->‪ext_isLinkable($treeItem['row']['doktype'], $treeItem['row']['uid'])
124  ? '<a href="' . htmlspecialchars($this->‪getThisScript() . ‪HttpUtility::buildQueryString($urlParameters)) . '" class="list-tree-show"><i class="fa fa-caret-square-o-right"></i></a>'
125  : '';
126  $out .= '
127  <li' . ($classAttr ? ' class="' . trim($classAttr) . '"' : '') . '>
128  <span class="list-tree-group' . $selected . '">
129  ' . $cEbullet . $treeItem['HTML'] . $this->‪wrapTitle($this->‪getTitleStr($treeItem['row'], $titleLen), $treeItem['row'], ‪$this->ext_pArrPages) . '
130  </span>
131  ';
132  if (!$treeItem['hasSub']) {
133  $out .= '</li>';
134  }
135 
136  // We have to remember if this is the last one
137  // on level X so the last child on level X+1 closes the <ul>-tag
138  if ($treeItem['isLast']) {
139  $closeDepth[$treeItem['invertedDepth']] = 1;
140  }
141  // If this is the last one and does not have subitems, we need to close
142  // the tree as long as the upper levels have last items too
143  if ($treeItem['isLast'] && !$treeItem['hasSub']) {
144  for ($i = $treeItem['invertedDepth']; $closeDepth[$i] == 1; $i++) {
145  $closeDepth[$i] = 0;
146  $out .= '</ul></li>';
147  }
148  }
149  }
150  return '<ul class="list-tree list-tree-root">' . $out . '</ul>';
151  }
152 
160  public function ‪ext_isLinkable($doktype, $uid)
161  {
162  $notLinkableDokTypes = [
166  ];
167  return $uid && !in_array($doktype, $notLinkableDokTypes, true);
168  }
169 
179  public function ‪PM_ATagWrap($icon, $cmd, $bMark = '', $isOpen = false)
180  {
181  $anchor = $bMark ? '#' . $bMark : '';
182  $name = $bMark ? ' name=' . $bMark : '';
183  $urlParameters = $this->linkParameterProvider->getUrlParameters([]);
184  $urlParameters['PM'] = $cmd;
185  return '<a class="list-tree-control ' . ($isOpen ? 'list-tree-control-open' : 'list-tree-control-closed')
186  . '" href="' . htmlspecialchars($this->‪getThisScript() . ‪HttpUtility::buildQueryString($urlParameters)) . '"' . htmlspecialchars($name) . '><i class="fa"></i></a>';
187  }
188 
196  public function ‪wrapIcon($icon, $row)
197  {
198  if ($this->ext_showPageId) {
199  $icon .= '[' . $row['uid'] . ']&nbsp;';
200  }
201  return $icon;
202  }
203 }
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView
Definition: ElementBrowserPageTreeView.php:30
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$clause
‪string $clause
Definition: AbstractTreeView.php:119
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$title
‪string $title
Definition: AbstractTreeView.php:74
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\setLinkParameterProvider
‪setLinkParameterProvider(LinkParameterProviderInterface $linkParameterProvider)
Definition: ElementBrowserPageTreeView.php:59
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\$ext_showPageId
‪bool $ext_showPageId
Definition: ElementBrowserPageTreeView.php:36
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\printTree
‪string printTree($treeArr='')
Definition: ElementBrowserPageTreeView.php:88
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\wrapTitle
‪string wrapTitle($title, $v, $ext_pArrPages=false)
Definition: ElementBrowserPageTreeView.php:73
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\wrapIcon
‪string wrapIcon($icon, $row)
Definition: ElementBrowserPageTreeView.php:193
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\$tree
‪array $tree
Definition: AbstractTreeView.php:209
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\PM_ATagWrap
‪string PM_ATagWrap($icon, $cmd, $bMark='', $isOpen=false)
Definition: ElementBrowserPageTreeView.php:176
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView\getTitleStr
‪string getTitleStr($row, $titleLen=30)
Definition: BrowseTreeView.php:142
‪TYPO3\CMS\Core\Utility\HttpUtility\buildQueryString
‪static string buildQueryString(array $parameters, string $prependCharacter='', bool $skipEmptyParameters=false)
Definition: HttpUtility.php:163
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SPACER
‪const DOKTYPE_SPACER
Definition: PageRepository.php:108
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\$ext_pArrPages
‪bool $ext_pArrPages
Definition: ElementBrowserPageTreeView.php:40
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SYSFOLDER
‪const DOKTYPE_SYSFOLDER
Definition: PageRepository.php:109
‪TYPO3\CMS\Backend\Tree\View
Definition: AbstractTreeView.php:16
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView\init
‪init($clause='', $orderByFields='')
Definition: BrowseTreeView.php:78
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\$linkParameterProvider
‪LinkParameterProviderInterface $linkParameterProvider
Definition: ElementBrowserPageTreeView.php:44
‪TYPO3\CMS\Backend\Tree\View\BrowseTreeView
Definition: BrowseTreeView.php:28
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\ext_isLinkable
‪bool ext_isLinkable($doktype, $uid)
Definition: ElementBrowserPageTreeView.php:157
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\getThisScript
‪string getThisScript()
Definition: AbstractTreeView.php:250
‪TYPO3\CMS\Core\Utility\HttpUtility
Definition: HttpUtility.php:24
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:52
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_RECYCLER
‪const DOKTYPE_RECYCLER
Definition: PageRepository.php:110
‪TYPO3\CMS\Backend\Tree\View\ElementBrowserPageTreeView\__construct
‪__construct()
Definition: ElementBrowserPageTreeView.php:49