[BUGFIX] ExtJS / normalize table > th
[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->determineScriptUrl();
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(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . '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 $name = '';
113 if ($bMark) {
114 $anchor = '#' . $bMark;
115 $name = ' name="' . $bMark . '"';
116 }
117 $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'PM=' . $cmd) . ',' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($anchor) . ');';
118 return '<a href="#"' . htmlspecialchars($name) . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
119 }
120
121 /**
122 * Wrapping the image tag, $icon, for the row, $row
123 *
124 * @param string $icon The image tag for the icon
125 * @param array $row The row for the current element
126 * @return string The processed icon input value.
127 * @todo Define visibility
128 */
129 public function wrapIcon($icon, $row) {
130 $content = $this->addTagAttributes($icon, ' title="id=' . $row['uid'] . '"');
131 if ($this->ext_showPageId) {
132 $content .= '[' . $row['uid'] . ']&nbsp;';
133 }
134 return $content;
135 }
136
137 }
138
139 /**
140 * For TBE record browser
141 *
142 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
143 */
144 class TBE_PageTree extends localPageTree {
145
146 /**
147 * Returns TRUE if a doktype can be linked (which is always the case here).
148 *
149 * @param integer $doktype Doktype value to test
150 * @param integer $uid uid to test.
151 * @return boolean
152 * @todo Define visibility
153 */
154 public function ext_isLinkable($doktype, $uid) {
155 return TRUE;
156 }
157
158 /**
159 * Wrapping the title in a link, if applicable.
160 *
161 * @param string $title Title, ready for output.
162 * @param array $v The record
163 * @param boolean $ext_pArrPages If set, pages clicked will return immediately, otherwise reload page.
164 * @return string Wrapping title string.
165 * @todo Define visibility
166 */
167 public function wrapTitle($title, $v, $ext_pArrPages) {
168 if ($ext_pArrPages) {
169 $ficon = \TYPO3\CMS\Backend\Utility\IconUtility::getIcon('pages', $v);
170 $onClick = 'return insertElement(\'pages\', \'' . $v['uid'] . '\', \'db\', ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($v['title']) . ', \'\', \'\', \'' . $ficon . '\',\'\',1);';
171 } else {
172 $onClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $v['uid']) . ');';
173 }
174 return '<a href="#" onclick="' . htmlspecialchars($onClick) . '">' . $title . '</a>';
175 }
176
177 }
178
179 /**
180 * Base extension class which generates the folder tree.
181 * Used directly by the RTE.
182 * also used for the linkpicker on files
183 *
184 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
185 */
186 class localFolderTree extends \TYPO3\CMS\Backend\Tree\View\FolderTreeView {
187
188 /**
189 * @todo Define visibility
190 */
191 public $ext_IconMode = 1;
192
193 /**
194 * Initializes the script path
195 *
196 * @todo Define visibility
197 */
198 public function __construct() {
199 $this->determineScriptUrl();
200 parent::__construct();
201 }
202
203 /**
204 * Wrapping the title in a link, if applicable.
205 *
206 * @param string $title Title, ready for output.
207 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The "record
208 * @return string Wrapping title string.
209 * @todo Define visibility
210 */
211 public function wrapTitle($title, \TYPO3\CMS\Core\Resource\Folder $folderObject) {
212 if ($this->ext_isLinkable($folderObject)) {
213 $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier())) . ');';
214 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
215 } else {
216 return '<span class="typo3-dimmed">' . $title . '</span>';
217 }
218 }
219
220 /**
221 * Returns TRUE if the input "record" contains a folder which can be linked.
222 *
223 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject Object with information about the folder element. Contains keys like title, uid, path, _title
224 * @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
225 * @todo Define visibility
226 */
227 public function ext_isLinkable(\TYPO3\CMS\Core\Resource\Folder $folderObject) {
228 if (strstr($folderObject->getIdentifier(), '_recycler_') || strstr($folderObject->getIdentifier(), '_temp_')) {
229 return FALSE;
230 } else {
231 return TRUE;
232 }
233 }
234
235 /**
236 * Wrap the plus/minus icon in a link
237 *
238 * @param string $icon HTML string to wrap, probably an image tag.
239 * @param string $cmd Command for 'PM' get var
240 * @param boolean $bMark If set, the link will have a anchor point (=$bMark) and a name attribute (=$bMark)
241 * @return string Link-wrapped input string
242 * @access private
243 * @todo Define visibility
244 */
245 public function PM_ATagWrap($icon, $cmd, $bMark = '') {
246 $name = $anchor = '';
247 if ($bMark) {
248 $anchor = '#' . $bMark;
249 $name = ' name="' . $bMark . '"';
250 }
251 $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'PM=' . $cmd) . ',' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($anchor) . ');';
252 return '<a href="#"' . htmlspecialchars($name) . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
253 }
254
255 }
256
257 /**
258 * For TBE File Browser
259 *
260 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
261 */
262 class TBE_FolderTree extends localFolderTree {
263
264 // If file-drag mode is set, temp and recycler folders are filtered out.
265 /**
266 * @todo Define visibility
267 */
268 public $ext_noTempRecyclerDirs = 0;
269
270 /**
271 * Returns TRUE if the input "record" contains a folder which can be linked.
272 *
273 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject object with information about the folder element. Contains keys like title, uid, path, _title
274 * @return boolean TRUE is returned if the path is NOT a recycler or temp folder AND if ->ext_noTempRecyclerDirs is not set.
275 * @todo Define visibility
276 */
277 public function ext_isLinkable($folderObject) {
278 if ($this->ext_noTempRecyclerDirs && (substr($folderObject->getIdentifier(), -7) == '_temp_/' || substr($folderObject->getIdentifier(), -11) == '_recycler_/')) {
279 return FALSE;
280 } else {
281 return TRUE;
282 }
283 }
284
285 /**
286 * Wrapping the title in a link, if applicable.
287 *
288 * @param string $title Title, ready for output.
289 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The folderObject 'record'
290 * @return string Wrapping title string.
291 * @todo Define visibility
292 */
293 public function wrapTitle($title, $folderObject) {
294 if ($this->ext_isLinkable($folderObject)) {
295 $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier())) . ');';
296 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
297 } else {
298 return '<span class="typo3-dimmed">' . $title . '</span>';
299 }
300 }
301
302 }