[BUGFIX] InstallTool: Optimize ALTER TABLE for auto_increment columns
[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 if ($this->ext_showPageId) {
131 $icon .= '[' . $row['uid'] . ']&nbsp;';
132 }
133 return $icon;
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 = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $v['uid']) . ');';
172 }
173 return '<a href="#" onclick="' . htmlspecialchars($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->determineScriptUrl();
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(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . '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 (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 $name = $anchor = '';
246 if ($bMark) {
247 $anchor = '#' . $bMark;
248 $name = ' name="' . $bMark . '"';
249 }
250 $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'PM=' . $cmd) . ',' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($anchor) . ');';
251 return '<a href="#"' . htmlspecialchars($name) . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
252 }
253
254 }
255
256 /**
257 * For TBE File Browser
258 *
259 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
260 */
261 class TBE_FolderTree extends localFolderTree {
262
263 // If file-drag mode is set, temp and recycler folders are filtered out.
264 /**
265 * @todo Define visibility
266 */
267 public $ext_noTempRecyclerDirs = 0;
268
269 /**
270 * Returns TRUE if the input "record" contains a folder which can be linked.
271 *
272 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject object with information about the folder element. Contains keys like title, uid, path, _title
273 * @return boolean TRUE is returned if the path is NOT a recycler or temp folder AND if ->ext_noTempRecyclerDirs is not set.
274 * @todo Define visibility
275 */
276 public function ext_isLinkable($folderObject) {
277 if ($this->ext_noTempRecyclerDirs && (substr($folderObject->getIdentifier(), -7) == '_temp_/' || substr($folderObject->getIdentifier(), -11) == '_recycler_/')) {
278 return FALSE;
279 } else {
280 return TRUE;
281 }
282 }
283
284 /**
285 * Wrapping the title in a link, if applicable.
286 *
287 * @param string $title Title, ready for output.
288 * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The folderObject 'record'
289 * @return string Wrapping title string.
290 * @todo Define visibility
291 */
292 public function wrapTitle($title, $folderObject) {
293 if ($this->ext_isLinkable($folderObject)) {
294 $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())) . ');';
295 return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
296 } else {
297 return '<span class="typo3-dimmed">' . $title . '</span>';
298 }
299 }
300
301 }