[!!!][TASK] Remove empty classes implementing AbstractTreeView
[Packages/TYPO3.CMS.git] / typo3 / class.browse_links.php
1 <?php
2 /**
3 * Class which generates the page tree
4 *
5 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
6 */
7 class localPageTree extends \TYPO3\CMS\Backend\Tree\View\BrowseTreeView {
8
9 /**
10 * whether the page ID should be shown next to the title, activate through
11 * userTSconfig (options.pageTree.showPageIdWithTitle)
12 *
13 * @boolean
14 */
15 public $ext_showPageId = FALSE;
16
17 /**
18 * Constructor. Just calling init()
19 *
20 * @todo Define visibility
21 */
22 public function __construct() {
23 $this->thisScript = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('SCRIPT_NAME');
24 $this->init();
25 $this->clause = ' AND doktype!=' . \TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_RECYCLER . $this->clause;
26 }
27
28 /**
29 * Wrapping the title in a link, if applicable.
30 *
31 * @param string $title Title, (must be ready for output, that means it must be htmlspecialchars()'ed).
32 * @param array $v The record
33 * @param boolean $ext_pArrPages (Ignore)
34 * @return string Wrapping title string.
35 * @todo Define visibility
36 */
37 public function wrapTitle($title, $v, $ext_pArrPages = '') {
38 if ($this->ext_isLinkable($v['doktype'], $v['uid'])) {
39 $aOnClick = 'return link_typo3Page(\'' . $v['uid'] . '\');';
40 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
41 } else {
42 return '<span style="color: #666666;">' . $title . '</span>';
43 }
44 }
45
46 /**
47 * Create the page navigation tree in HTML
48 *
49 * @param array $treeArr Tree array
50 * @return string HTML output.
51 * @todo Define visibility
52 */
53 public function printTree($treeArr = '') {
54 $titleLen = (int)$GLOBALS['BE_USER']->uc['titleLen'];
55 if (!is_array($treeArr)) {
56 $treeArr = $this->tree;
57 }
58 $out = '';
59 $c = 0;
60 foreach ($treeArr as $k => $v) {
61 $c++;
62 $bgColorClass = ($c + 1) % 2 ? 'bgColor' : 'bgColor-10';
63 if ($GLOBALS['SOBE']->browser->curUrlInfo['act'] == 'page' && $GLOBALS['SOBE']->browser->curUrlInfo['pageid'] == $v['row']['uid'] && $GLOBALS['SOBE']->browser->curUrlInfo['pageid']) {
64 $arrCol = '<td><img' . \TYPO3\CMS\Backend\Utility\IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/blinkarrow_right.gif', 'width="5" height="9"') . ' class="c-blinkArrowR" alt="" /></td>';
65 $bgColorClass = 'bgColor4';
66 } else {
67 $arrCol = '<td></td>';
68 }
69 $aOnClick = 'return jumpToUrl(\'' . $this->thisScript . '?act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $v['row']['uid'] . '\');';
70 $cEbullet = $this->ext_isLinkable($v['row']['doktype'], $v['row']['uid']) ? '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '"><img' . \TYPO3\CMS\Backend\Utility\IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/ol/arrowbullet.gif', 'width="18" height="16"') . ' alt="" /></a>' : '';
71 $out .= '
72 <tr class="' . $bgColorClass . '">
73 <td nowrap="nowrap"' . ($v['row']['_CSSCLASS'] ? ' class="' . $v['row']['_CSSCLASS'] . '"' : '') . '>' . $v['HTML'] . $this->wrapTitle($this->getTitleStr($v['row'], $titleLen), $v['row'], $this->ext_pArrPages) . '</td>' . $arrCol . '<td>' . $cEbullet . '</td>
74 </tr>';
75 }
76 $out = '
77
78
79 <!--
80 Navigation Page Tree:
81 -->
82 <table border="0" cellpadding="0" cellspacing="0" id="typo3-tree">
83 ' . $out . '
84 </table>';
85 return $out;
86 }
87
88 /**
89 * Returns TRUE if a doktype can be linked.
90 *
91 * @param integer $doktype Doktype value to test
92 * @param integer $uid uid to test.
93 * @return boolean
94 * @todo Define visibility
95 */
96 public function ext_isLinkable($doktype, $uid) {
97 if ($uid && $doktype < 199) {
98 return TRUE;
99 }
100 }
101
102 /**
103 * Wrap the plus/minus icon in a link
104 *
105 * @param string $icon HTML string to wrap, probably an image tag.
106 * @param string $cmd Command for 'PM' get var
107 * @param boolean $bMark If set, the link will have a anchor point (=$bMark) and a name attribute (=$bMark)
108 * @return string Link-wrapped input string
109 * @todo Define visibility
110 */
111 public function PM_ATagWrap($icon, $cmd, $bMark = '') {
112 if ($bMark) {
113 $anchor = '#' . $bMark;
114 $name = ' name="' . $bMark . '"';
115 }
116 $aOnClick = 'return jumpToUrl(\'' . $this->thisScript . '?PM=' . $cmd . '\',\'' . $anchor . '\');';
117 return '<a href="#"' . $name . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
118 }
119
120 /**
121 * Wrapping the image tag, $icon, for the row, $row
122 *
123 * @param string $icon The image tag for the icon
124 * @param array $row The row for the current element
125 * @return string The processed icon input value.
126 * @todo Define visibility
127 */
128 public function wrapIcon($icon, $row) {
129 $content = $this->addTagAttributes($icon, ' title="id=' . $row['uid'] . '"');
130 if ($this->ext_showPageId) {
131 $content .= '[' . $row['uid'] . ']&nbsp;';
132 }
133 return $content;
134 }
135
136 }
137
138 /**
139 * For TBE record browser
140 *
141 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
142 */
143 class TBE_PageTree extends localPageTree {
144
145 /**
146 * Returns TRUE if a doktype can be linked (which is always the case here).
147 *
148 * @param integer $doktype Doktype value to test
149 * @param integer $uid uid to test.
150 * @return boolean
151 * @todo Define visibility
152 */
153 public function ext_isLinkable($doktype, $uid) {
154 return TRUE;
155 }
156
157 /**
158 * Wrapping the title in a link, if applicable.
159 *
160 * @param string $title Title, ready for output.
161 * @param array $v The record
162 * @param boolean $ext_pArrPages If set, pages clicked will return immediately, otherwise reload page.
163 * @return string Wrapping title string.
164 * @todo Define visibility
165 */
166 public function wrapTitle($title, $v, $ext_pArrPages) {
167 if ($ext_pArrPages) {
168 $ficon = \TYPO3\CMS\Backend\Utility\IconUtility::getIcon('pages', $v);
169 $onClick = 'return insertElement(\'pages\', \'' . $v['uid'] . '\', \'db\', ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($v['title']) . ', \'\', \'\', \'' . $ficon . '\',\'\',1);';
170 } else {
171 $onClick = htmlspecialchars('return jumpToUrl(\'' . $this->thisScript . '?act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $v['uid'] . '\');');
172 }
173 return '<a href="#" onclick="' . $onClick . '">' . $title . '</a>';
174 }
175
176 }
177
178 /**
179 * Base extension class which generates the folder tree.
180 * Used directly by the RTE.
181 * also used for the linkpicker on files
182 *
183 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
184 */
185 class localFolderTree extends \TYPO3\CMS\Backend\Tree\View\FolderTreeView {
186
187 /**
188 * @todo Define visibility
189 */
190 public $ext_IconMode = 1;
191
192 /**
193 * Initializes the script path
194 *
195 * @todo Define visibility
196 */
197 public function __construct() {
198 $this->thisScript = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('SCRIPT_NAME');
199 parent::__construct();
200 }
201
202 /**
203 * Wrapping the title in a link, if applicable.
204 *
205 * @param string $title Title, ready for output.
206 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The "record
207 * @return string Wrapping title string.
208 * @todo Define visibility
209 */
210 public function wrapTitle($title, \TYPO3\CMS\Core\Resource\Folder $folderObject) {
211 if ($this->ext_isLinkable($folderObject)) {
212 $aOnClick = 'return jumpToUrl(\'' . $this->thisScript . '?act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier()) . '\');';
213 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
214 } else {
215 return '<span class="typo3-dimmed">' . $title . '</span>';
216 }
217 }
218
219 /**
220 * Returns TRUE if the input "record" contains a folder which can be linked.
221 *
222 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject Object with information about the folder element. Contains keys like title, uid, path, _title
223 * @return boolean TRUE is returned if the path is found in the web-part of the server and is NOT a recycler or temp folder
224 * @todo Define visibility
225 */
226 public function ext_isLinkable(\TYPO3\CMS\Core\Resource\Folder $folderObject) {
227 if (!$folderObject->getStorage()->isPublic() || strstr($folderObject->getIdentifier(), '_recycler_') || strstr($folderObject->getIdentifier(), '_temp_')) {
228 return FALSE;
229 } else {
230 return TRUE;
231 }
232 }
233
234 /**
235 * Wrap the plus/minus icon in a link
236 *
237 * @param string $icon HTML string to wrap, probably an image tag.
238 * @param string $cmd Command for 'PM' get var
239 * @param boolean $bMark If set, the link will have a anchor point (=$bMark) and a name attribute (=$bMark)
240 * @return string Link-wrapped input string
241 * @access private
242 * @todo Define visibility
243 */
244 public function PM_ATagWrap($icon, $cmd, $bMark = '') {
245 if ($bMark) {
246 $anchor = '#' . $bMark;
247 $name = ' name="' . $bMark . '"';
248 }
249 $aOnClick = 'return jumpToUrl(\'' . $this->thisScript . '?PM=' . $cmd . '\',\'' . $anchor . '\');';
250 return '<a href="#"' . $name . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
251 }
252
253 }
254
255 /**
256 * For TBE File Browser
257 *
258 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
259 */
260 class TBE_FolderTree extends localFolderTree {
261
262 // If file-drag mode is set, temp and recycler folders are filtered out.
263 /**
264 * @todo Define visibility
265 */
266 public $ext_noTempRecyclerDirs = 0;
267
268 /**
269 * Returns TRUE if the input "record" contains a folder which can be linked.
270 *
271 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject object with information about the folder element. Contains keys like title, uid, path, _title
272 * @return boolean TRUE is returned if the path is NOT a recycler or temp folder AND if ->ext_noTempRecyclerDirs is not set.
273 * @todo Define visibility
274 */
275 public function ext_isLinkable($folderObject) {
276 if ($this->ext_noTempRecyclerDirs && (substr($folderObject->getIdentifier(), -7) == '_temp_/' || substr($folderObject->getIdentifier(), -11) == '_recycler_/')) {
277 return FALSE;
278 } else {
279 return TRUE;
280 }
281 }
282
283 /**
284 * Wrapping the title in a link, if applicable.
285 *
286 * @param string $title Title, ready for output.
287 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The folderObject 'record'
288 * @return string Wrapping title string.
289 * @todo Define visibility
290 */
291 public function wrapTitle($title, $folderObject) {
292 if ($this->ext_isLinkable($folderObject)) {
293 $aOnClick = 'return jumpToUrl(\'' . $this->thisScript . '?act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier()) . '\');';
294 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
295 } else {
296 return '<span class="typo3-dimmed">' . $title . '</span>';
297 }
298 }
299
300 }