de9e1606d0b46a8fe15385a928c6cfed086cce12
2 /***************************************************************
5 * (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
8 * This script is part of the TYPO3 project. The TYPO3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 * A copy is found in the textfile GPL.txt and important notices to the license
17 * from the author is found in LICENSE.txt distributed with these scripts.
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
28 * Displays the page/file tree for browsing database records or files.
29 * Used from TCEFORMS an other elements
30 * In other words: This is the ELEMENT BROWSER!
33 * Revised for TYPO3 3.6 November/2003 by Kasper Skaarhoj
36 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
39 * [CLASS/FUNCTION INDEX of SCRIPT]
43 * 155: class TBE_browser_recordList extends localRecordList
44 * 163: function TBE_browser_recordList ()
45 * 175: function listURL($altId='',$table=-1,$exclList='')
46 * 194: function ext_addP()
47 * 211: function linkWrapItems($table,$uid,$code,$row)
48 * 244: function linkWrapTable($table,$code)
51 * 261: class localPageTree extends t3lib_browseTree
52 * 268: function localPageTree()
53 * 284: function wrapTitle($title,$v,$ext_pArrPages='')
54 * 299: function printTree($treeArr='')
55 * 350: function ext_isLinkable($doktype,$uid)
56 * 364: function PM_ATagWrap($icon,$cmd,$bMark='')
57 * 381: function wrapIcon($icon,$row)
60 * 400: class rtePageTree extends localPageTree
63 * 417: class TBE_PageTree extends localPageTree
64 * 426: function ext_isLinkable($doktype,$uid)
65 * 438: function wrapTitle($title,$v,$ext_pArrPages)
68 * 464: class localFolderTree extends t3lib_folderTree
69 * 473: function localFolderTree()
70 * 485: function wrapTitle($title,$v)
71 * 500: function ext_isLinkable($v)
72 * 517: function PM_ATagWrap($icon,$cmd,$bMark='')
73 * 532: function printTree($treeArr='')
76 * 599: class rteFolderTree extends localFolderTree
79 * 615: class TBE_FolderTree extends localFolderTree
80 * 624: function ext_isLinkable($v)
81 * 637: function wrapTitle($title,$v)
84 * 658: class browse_links
85 * 764: function init()
86 * 1034: function processSessionData($data)
88 * SECTION: Main functions
89 * 1077: function main_rte($wiz=0)
90 * 1379: function main_db()
91 * 1424: function main_file()
93 * SECTION: Record listing
94 * 1534: function expandPage()
95 * 1615: function TBE_expandPage($tables)
97 * SECTION: File listing
98 * 1708: function expandFolder($expandFolder=0,$extensionList='')
99 * 1778: function TBE_expandFolder($expandFolder=0,$extensionList='',$noThumbs=0)
100 * 1801: function fileList($files, $folderName='', $noThumbs=0)
101 * 1918: function TBE_dragNDrop($expandFolder=0,$extensionList='')
103 * SECTION: Miscellaneous functions
104 * 2046: function isWebFolder($folder)
105 * 2057: function checkFolder($folder)
106 * 2070: function barheader($str)
107 * 2087: function getMsgBox($in_msg,$icon='icon_note')
108 * 2111: function printCurrentUrl($str)
109 * 2131: function parseCurUrl($href,$siteUrl)
110 * 2193: function uploadForm($path)
111 * 2247: function createFolder($path)
113 * TOTAL FUNCTIONS: 39
114 * (This index is automatically created/updated by the extension "extdeveval")
120 require_once (PATH_typo3
.'/class.db_list.inc');
121 require_once (PATH_typo3
.'/class.db_list_extra.inc');
127 * Local version of the record list.
129 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
133 class TBE_browser_recordList
extends localRecordList
{
134 var $thisScript = 'browse_links.php';
137 * Initializes the script path
141 function TBE_browser_recordList () {
142 parent
::__construct();
143 $this->thisScript
= t3lib_div
::getIndpEnv('SCRIPT_NAME');
147 * Creates the URL for links
149 * @param mixed If not blank string, this is used instead of $this->id as the id value.
150 * @param string If this is "-1" then $this->table is used, otherwise the value of the input variable.
151 * @param string Commalist of fields NOT to pass as parameters (currently "sortField" and "sortRev")
152 * @return string Query-string for URL
154 function listURL($altId='',$table=-1,$exclList='') {
155 return $this->thisScript
.
156 '?id='.(strcmp($altId,'')?
$altId:$this->id
).
157 '&table='.rawurlencode($table==-1?
$this->table
:$table).
158 ($this->thumbs?
'&imagemode='.$this->thumbs
:'').
159 ($this->searchString?
'&search_field='.rawurlencode($this->searchString
):'').
160 ($this->searchLevels?
'&search_levels='.rawurlencode($this->searchLevels
):'').
161 ((!$exclList ||
!t3lib_div
::inList($exclList,'sortField')) && $this->sortField?
'&sortField='.rawurlencode($this->sortField
):'').
162 ((!$exclList ||
!t3lib_div
::inList($exclList,'sortRev')) && $this->sortRev?
'&sortRev='.rawurlencode($this->sortRev
):'').
169 * Returns additional, local GET parameters to include in the links of the record list.
173 function ext_addP() {
174 $str = '&act='.$GLOBALS['SOBE']->browser
->act
.
175 '&mode='.$GLOBALS['SOBE']->browser
->mode
.
176 '&expandPage='.$GLOBALS['SOBE']->browser
->expandPage
.
177 '&bparams='.rawurlencode($GLOBALS['SOBE']->browser
->bparams
);
182 * Returns the title (based on $code) of a record (from table $table) with the proper link around (that is for "pages"-records a link to the level of that record...)
184 * @param string Table name
185 * @param integer UID (not used here)
186 * @param string Title string
187 * @param array Records array (from table name)
190 function linkWrapItems($table,$uid,$code,$row) {
191 global $TCA, $BACK_PATH;
194 $code = '<i>['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title',1).']</i>';
196 $code = t3lib_BEfunc
::getRecordTitlePrep($code, $this->fixedL
);
199 $title = t3lib_BEfunc
::getRecordTitle($table,$row,FALSE,TRUE);
200 $ficon = t3lib_iconWorks
::getIcon($table,$row);
201 $aOnClick = "return insertElement('".$table."', '".$row['uid']."', 'db', ".t3lib_div
::quoteJSvalue($title).", '', '', '".$ficon."');";
202 $ATag = '<a href="#" onclick="'.$aOnClick.'">';
203 $ATag_alt = substr($ATag,0,-4).',\'\',1);">';
207 '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/plusbullet2.gif','width="18" height="16"').' title="'.$GLOBALS['LANG']->getLL('addToList',1).'" alt="" />'.
215 * Local version that sets allFields to true to support userFieldSelect
218 * @see fieldSelectBox
220 function generateList() {
221 $this->allFields
= true;
222 parent
::generateList();
232 * Class which generates the page tree
234 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
238 class localPageTree
extends t3lib_browseTree
{
241 * Constructor. Just calling init()
245 function localPageTree() {
246 $this->thisScript
= t3lib_div
::getIndpEnv('SCRIPT_NAME');
250 $this->clause
= ' AND doktype!=255'.$this->clause
;
254 * Wrapping the title in a link, if applicable.
256 * @param string Title, (must be ready for output, that means it must be htmlspecialchars()'ed).
257 * @param array The record
258 * @param boolean (Ignore)
259 * @return string Wrapping title string.
261 function wrapTitle($title,$v,$ext_pArrPages='') {
262 if ($this->ext_isLinkable($v['doktype'],$v['uid'])) {
263 $aOnClick = "return link_typo3Page('".$v['uid']."');";
264 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>';
266 return '<span style="color: #666666;">'.$title.'</span>';
271 * Create the page navigation tree in HTML
273 * @param array Tree array
274 * @return string HTML output.
276 function printTree($treeArr='') {
278 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
279 if (!is_array($treeArr)) $treeArr=$this->tree
;
284 foreach($treeArr as $k => $v) {
286 $bgColorClass = ($c+
1)%2 ?
'bgColor' : 'bgColor-10';
287 if ($GLOBALS['SOBE']->browser
->curUrlInfo
['act']=='page' && $GLOBALS['SOBE']->browser
->curUrlInfo
['pageid']==$v['row']['uid'] && $GLOBALS['SOBE']->browser
->curUrlInfo
['pageid']) {
288 $arrCol='<td><img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/blinkarrow_right.gif','width="5" height="9"').' class="c-blinkArrowR" alt="" /></td>';
289 $bgColorClass='bgColor4';
294 $aOnClick = 'return jumpToUrl(\''.$this->thisScript
.'?act='.$GLOBALS['SOBE']->browser
->act
.'&mode='.$GLOBALS['SOBE']->browser
->mode
.'&expandPage='.$v['row']['uid'].'\');';
295 $cEbullet = $this->ext_isLinkable($v['row']['doktype'],$v['row']['uid']) ?
296 '<a href="#" onclick="'.htmlspecialchars($aOnClick).'"><img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/arrowbullet.gif','width="18" height="16"').' alt="" /></a>' :
299 <tr class="'.$bgColorClass.'">
300 <td nowrap="nowrap"'.($v['row']['_CSSCLASS'] ?
' class="'.$v['row']['_CSSCLASS'].'"' : '').'>'.
302 $this->wrapTitle($this->getTitleStr($v['row'],$titleLen),$v['row'],$this->ext_pArrPages
).
305 '<td>'.$cEbullet.'</td>
312 Navigation Page Tree:
314 <table border="0" cellpadding="0" cellspacing="0" id="typo3-tree">
321 * Returns true if a doktype can be linked.
323 * @param integer Doktype value to test
324 * @param integer uid to test.
327 function ext_isLinkable($doktype,$uid) {
328 if ($uid && $doktype<199) {
334 * Wrap the plus/minus icon in a link
336 * @param string HTML string to wrap, probably an image tag.
337 * @param string Command for 'PM' get var
338 * @param boolean If set, the link will have a anchor point (=$bMark) and a name attribute (=$bMark)
339 * @return string Link-wrapped input string
341 function PM_ATagWrap($icon,$cmd,$bMark='') {
343 $anchor = '#'.$bMark;
344 $name=' name="'.$bMark.'"';
346 $aOnClick = "return jumpToUrl('".$this->thisScript
.'?PM='.$cmd."','".$anchor."');";
348 return '<a href="#"'.$name.' onclick="'.htmlspecialchars($aOnClick).'">'.$icon.'</a>';
352 * Wrapping the image tag, $icon, for the row, $row
354 * @param string The image tag for the icon
355 * @param array The row for the current element
356 * @return string The processed icon input value.
358 function wrapIcon($icon,$row) {
359 return $this->addTagAttributes($icon,' title="id='.$row['uid'].'"');
371 * Page tree for the RTE - totally the same, no changes needed. (Just for the sake of beauty - or confusion... :-)
373 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
377 class rtePageTree
extends localPageTree
{
388 * For TBE record browser
390 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
394 class TBE_PageTree
extends localPageTree
{
397 * Returns true if a doktype can be linked (which is always the case here).
399 * @param integer Doktype value to test
400 * @param integer uid to test.
403 function ext_isLinkable($doktype,$uid) {
408 * Wrapping the title in a link, if applicable.
410 * @param string Title, ready for output.
411 * @param array The record
412 * @param boolean If set, pages clicked will return immediately, otherwise reload page.
413 * @return string Wrapping title string.
415 function wrapTitle($title,$v,$ext_pArrPages) {
416 if ($ext_pArrPages) {
417 $ficon=t3lib_iconWorks
::getIcon('pages',$v);
418 $onClick = "return insertElement('pages', '".$v['uid']."', 'db', ".t3lib_div
::quoteJSvalue($v['title']).", '', '', '".$ficon."','',1);";
420 $onClick = htmlspecialchars('return jumpToUrl(\''.$this->thisScript
.'?act='.$GLOBALS['SOBE']->browser
->act
.'&mode='.$GLOBALS['SOBE']->browser
->mode
.'&expandPage='.$v['uid'].'\');');
422 return '<a href="#" onclick="'.$onClick.'">'.$title.'</a>';
434 * Base extension class which generates the folder tree.
435 * Used directly by the RTE.
437 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
441 class localFolderTree
extends t3lib_folderTree
{
446 * Initializes the script path
450 function localFolderTree() {
451 $this->thisScript
= t3lib_div
::getIndpEnv('SCRIPT_NAME');
452 $this->t3lib_folderTree();
456 * Wrapping the title in a link, if applicable.
458 * @param string Title, ready for output.
459 * @param array The "record"
460 * @return string Wrapping title string.
462 function wrapTitle($title,$v) {
463 if ($this->ext_isLinkable($v)) {
464 $aOnClick = 'return jumpToUrl(\''.$this->thisScript
.'?act='.$GLOBALS['SOBE']->browser
->act
.'&mode='.$GLOBALS['SOBE']->browser
->mode
.'&expandFolder='.rawurlencode($v['path']).'\');';
465 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>';
467 return '<span class="typo3-dimmed">'.$title.'</span>';
472 * Returns true if the input "record" contains a folder which can be linked.
474 * @param array Array with information about the folder element. Contains keys like title, uid, path, _title
475 * @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
477 function ext_isLinkable($v) {
478 $webpath=t3lib_BEfunc
::getPathType_web_nonweb($v['path']); // Checking, if the input path is a web-path.
479 if (strstr($v['path'],'_recycler_') ||
strstr($v['path'],'_temp_') ||
$webpath!='web') {
486 * Wrap the plus/minus icon in a link
488 * @param string HTML string to wrap, probably an image tag.
489 * @param string Command for 'PM' get var
490 * @param boolean If set, the link will have a anchor point (=$bMark) and a name attribute (=$bMark)
491 * @return string Link-wrapped input string
494 function PM_ATagWrap($icon,$cmd,$bMark='') {
496 $anchor = '#'.$bMark;
497 $name=' name="'.$bMark.'"';
499 $aOnClick = 'return jumpToUrl(\''.$this->thisScript
.'?PM='.$cmd.'\',\''.$anchor.'\');';
500 return '<a href="#"'.$name.' onclick="'.htmlspecialchars($aOnClick).'">'.$icon.'</a>';
504 * Create the folder navigation tree in HTML
506 * @param mixed Input tree array. If not array, then $this->tree is used.
507 * @return string HTML output of the tree.
509 function printTree($treeArr='') {
511 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
513 if (!is_array($treeArr)) $treeArr=$this->tree
;
518 // Preparing the current-path string (if found in the listing we will see a red blinking arrow).
519 if (!$GLOBALS['SOBE']->browser
->curUrlInfo
['value']) {
521 } else if (substr(trim($GLOBALS['SOBE']->browser
->curUrlInfo
['info']),-1)!='/') {
522 $cmpPath=PATH_site
.dirname($GLOBALS['SOBE']->browser
->curUrlInfo
['info']).'/';
524 $cmpPath=PATH_site
.$GLOBALS['SOBE']->browser
->curUrlInfo
['info'];
527 // Traverse rows for the tree and print them into table rows:
528 foreach($treeArr as $k => $v) {
530 $bgColorClass=($c+
1)%2 ?
'bgColor' : 'bgColor-10';
532 // Creating blinking arrow, if applicable:
533 if (($GLOBALS['SOBE']->browser
->curUrlInfo
['act'] == 'file' ||
$GLOBALS['SOBE']->browser
->curUrlInfo
['act'] == 'folder') && $cmpPath == $v['row']['path']) {
534 $arrCol='<td><img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/blinkarrow_right.gif','width="5" height="9"').' class="c-blinkArrowR" alt="" /></td>';
535 $bgColorClass='bgColor4';
539 // Create arrow-bullet for file listing (if folder path is linkable):
540 $aOnClick = 'return jumpToUrl(\''.$this->thisScript
.'?act='.$GLOBALS['SOBE']->browser
->act
.'&mode='.$GLOBALS['SOBE']->browser
->mode
.'&expandFolder='.rawurlencode($v['row']['path']).'\');';
541 $cEbullet = $this->ext_isLinkable($v['row']) ?
'<a href="#" onclick="'.htmlspecialchars($aOnClick).'"><img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/arrowbullet.gif','width="18" height="16"').' alt="" /></a>' : '';
543 // Put table row with folder together:
545 <tr class="'.$bgColorClass.'">
546 <td nowrap="nowrap">'.$v['HTML'].$this->wrapTitle(t3lib_div
::fixed_lgd_cs($v['row']['title'],$titleLen),$v['row']).'</td>
548 <td>'.$cEbullet.'</td>
557 <table border="0" cellpadding="0" cellspacing="0" id="typo3-tree">
570 * Folder tree for the RTE - totally the same, no changes needed. (Just for the sake of beauty - or confusion... :-)
572 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
576 class rteFolderTree
extends localFolderTree
{
586 * For TBE File Browser
588 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
592 class TBE_FolderTree
extends localFolderTree
{
593 var $ext_noTempRecyclerDirs=0; // If file-drag mode is set, temp and recycler folders are filtered out.
596 * Returns true if the input "record" contains a folder which can be linked.
598 * @param array Array with information about the folder element. Contains keys like title, uid, path, _title
599 * @return boolean True is returned if the path is NOT a recycler or temp folder AND if ->ext_noTempRecyclerDirs is not set.
601 function ext_isLinkable($v) {
602 if ($this->ext_noTempRecyclerDirs
&& (substr($v['path'],-7)=='_temp_/' ||
substr($v['path'],-11)=='_recycler_/')) {
608 * Wrapping the title in a link, if applicable.
610 * @param string Title, ready for output.
611 * @param array The 'record'
612 * @return string Wrapping title string.
614 function wrapTitle($title,$v) {
615 if ($this->ext_isLinkable($v)) {
616 $aOnClick = 'return jumpToUrl(\''.$this->thisScript
.'?act='.$GLOBALS['SOBE']->browser
->act
.'&mode='.$GLOBALS['SOBE']->browser
->mode
.'&expandFolder='.rawurlencode($v['path']).'\');';
617 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>';
619 return '<span class="typo3-dimmed">'.$title.'</span>';
629 * class for the Element Browser window.
631 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
638 var $siteURL; // Current site URL (Frontend)
639 var $thisScript; // the script to link to
640 var $thisConfig; // RTE specific TSconfig
641 var $setTarget; // Target (RTE specific)
642 var $setClass; // CSS Class (RTE specific)
643 var $setTitle; // title (RTE specific)
644 var $doc; // Backend template object
645 var $elements = array(); // Holds information about files
647 // GPvars: (Input variables from outside)
649 * The mode determines the main kind of output from the element browser.
650 * There are these options for values: rte, db, file, filedrag, wizard.
651 * "rte" will show the link selector for the Rich Text Editor (see main_rte())
652 * "db" will allow you to browse for pages or records in the page tree (for TCEforms, see main_db())
653 * "file"/"filedrag" will allow you to browse for files or folders in the folder mounts (for TCEforms, main_file())
654 * "wizard" will allow you to browse for links (like "rte") which are passed back to TCEforms (see main_rte(1))
661 * Link selector action.
662 * page,file,url,mail,spec are allowed values.
663 * These are only important with the link selector function and in that case they switch between the various menu options.
668 * When you click a page title/expand icon to see the content of a certain page, this value will contain that value (the ID of the expanded page). If the value is NOT set, then it will be restored from the module session data (see main(), mode="db")
673 * When you click a folder name/expand icon to see the content of a certain file folder, this value will contain that value (the path of the expanded file folder). If the value is NOT set, then it will be restored from the module session data (see main(), mode="file"/"filedrag"). Example value: "/www/htdocs/typo3/32/3dsplm/fileadmin/css/"
680 * TYPO3 Element Browser, wizard mode parameters. There is a heap of parameters there, better debug() them out if you need something... :-)
685 * Active with TYPO3 Element Browser: Contains the name of the form field for which this window opens - thus allows us to make references back to the main window in which the form is.
686 * Example value: "data[pages][39][bodytext]|||tt_content|" or "data[tt_content][NEW3fba56fde763d][image]|||gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai|"
689 * 0: form field name reference, eg. "data[tt_content][123][image]"
690 * 1: htlmArea RTE parameters: editorNo:contentTypo3Language:contentTypo3Charset
691 * 2: RTE config parameters: RTEtsConfigParams
692 * 3: allowed types. Eg. "tt_content" or "gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai"
693 * 4: IRRE uniqueness: target level object-id to perform actions/checks on, eg. "data[79][tt_address][1][<field>][<foreign_table>]"
694 * 5: IRRE uniqueness: name of function in opener window that checks if element is already used, eg. "inline.checkUniqueElement"
695 * 6: IRRE uniqueness: name of function in opener window that performs some additional(!) action, eg. "inline.setUniqueElement"
696 * 7: IRRE uniqueness: name of function in opener window that performs action instead of using addElement/insertElement, eg. "inline.importElement"
698 * $pArr = explode('|',$this->bparams);
699 * $formFieldName = $pArr[0];
700 * $allowedTablesOrFileTypes = $pArr[3];
705 * Used with the Rich Text Editor.
706 * Example value: "tt_content:NEW3fba58c969f5c:bodytext:23:text:23:"
708 var $RTEtsConfigParams;
714 * Plus/Minus icon value. Used by the tree class to open/close notes on the trees.
719 * Pointer, used when browsing a long list of records etc.
727 * Used with the link selector: Contains the GET input information about the CURRENT link in the RTE/TCEform field. This consists of "href", "target" and "title" keys. This information is passed around in links.
732 * Used with the link selector: Contains a processed version of the input values from curUrlInfo. This is splitted into pageid, content element id, label value etc. This is used for the internal processing of that information.
737 * array which holds hook objects (initialised in init() )
739 protected $hookObjects = array();
743 * object for t3lib_basicFileFunctions
745 public $fileProcessor;
750 * Initializes a lot of variables, setting JavaScript functions in header etc.
755 global $BE_USER,$BACK_PATH;
758 $this->pointer
= t3lib_div
::_GP('pointer');
759 $this->bparams
= t3lib_div
::_GP('bparams');
760 $this->P
= t3lib_div
::_GP('P');
761 $this->RTEtsConfigParams
= t3lib_div
::_GP('RTEtsConfigParams');
762 $this->expandPage
= t3lib_div
::_GP('expandPage');
763 $this->expandFolder
= t3lib_div
::_GP('expandFolder');
764 $this->PM
= t3lib_div
::_GP('PM');
767 $this->mode
= t3lib_div
::_GP('mode');
771 // Creating backend template object:
772 $this->doc
= t3lib_div
::makeInstance('template');
773 $this->doc
->backPath
= $GLOBALS['BACK_PATH'];
774 // Load the Prototype library and browse_links.js
775 $this->doc
->getPageRenderer()->loadPrototype();
776 $this->doc
->loadJavascriptLib('js/browse_links.js');
778 // init hook objects:
779 $this->hookObjects
= array();
780 if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.browse_links.php']['browseLinksHook'])) {
781 foreach($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.browse_links.php']['browseLinksHook'] as $classData) {
782 $processObject = t3lib_div
::getUserObj($classData);
784 if(!($processObject instanceof t3lib_browseLinksHook
)) {
785 throw new UnexpectedValueException('$processObject must implement interface t3lib_browseLinksHook', 1195039394);
788 $parameters = array();
789 $processObject->init($this, $parameters);
790 $this->hookObjects
[] = $processObject;
795 $this->siteURL
= t3lib_div
::getIndpEnv('TYPO3_SITE_URL'); // Current site url
797 // the script to link to
798 $this->thisScript
= t3lib_div
::getIndpEnv('SCRIPT_NAME');
800 // init fileProcessor
801 $this->fileProcessor
= t3lib_div
::makeInstance('t3lib_basicFileFunctions');
802 $this->fileProcessor
->init($GLOBALS['FILEMOUNTS'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
805 // CurrentUrl - the current link url must be passed around if it exists
806 if ($this->mode
== 'wizard') {
807 $currentLinkParts = t3lib_div
::unQuoteFilenames($this->P
['currentValue'], TRUE);
808 $initialCurUrlArray = array (
809 'href' => $currentLinkParts[0],
810 'target' => $currentLinkParts[1],
811 'class' => $currentLinkParts[2],
812 'title' => $currentLinkParts[3],
814 $this->curUrlArray
= (is_array(t3lib_div
::_GP('curUrl'))) ?
815 array_merge($initialCurUrlArray, t3lib_div
::_GP('curUrl')) :
817 $this->curUrlInfo
= $this->parseCurUrl($this->siteURL
.'?id='.$this->curUrlArray
['href'], $this->siteURL
);
818 if ($this->curUrlInfo
['pageid'] == 0 && $this->curUrlArray
['href']) { // pageid == 0 means that this is not an internal (page) link
819 if (file_exists(PATH_site
.rawurldecode($this->curUrlArray
['href']))) { // check if this is a link to a file
820 if (t3lib_div
::isFirstPartOfStr($this->curUrlArray
['href'], PATH_site
)) {
821 $currentLinkParts[0] = substr($this->curUrlArray
['href'], strlen(PATH_site
));
823 $this->curUrlInfo
= $this->parseCurUrl($this->siteURL
.$this->curUrlArray
['href'], $this->siteURL
);
824 } elseif (strstr($this->curUrlArray
['href'], '@')) { // check for email link
825 if (t3lib_div
::isFirstPartOfStr($this->curUrlArray
['href'], 'mailto:')) {
826 $currentLinkParts[0] = substr($this->curUrlArray
['href'], 7);
828 $this->curUrlInfo
= $this->parseCurUrl('mailto:'.$this->curUrlArray
['href'], $this->siteURL
);
829 } else { // nothing of the above. this is an external link
830 if(strpos($this->curUrlArray
['href'], '://') === false) {
831 $currentLinkParts[0] = 'http://' . $this->curUrlArray
['href'];
833 $this->curUrlInfo
= $this->parseCurUrl($currentLinkParts[0], $this->siteURL
);
835 } elseif (!$this->curUrlArray
['href']) {
836 $this->curUrlInfo
= array();
839 $this->curUrlInfo
= $this->parseCurUrl($this->siteURL
.'?id='.$this->curUrlArray
['href'], $this->siteURL
);
842 $this->curUrlArray
= t3lib_div
::_GP('curUrl');
843 if ($this->curUrlArray
['all']) {
844 $this->curUrlArray
=t3lib_div
::get_tag_attributes($this->curUrlArray
['all']);
846 $this->curUrlInfo
=$this->parseCurUrl($this->curUrlArray
['href'],$this->siteURL
);
849 // Determine nature of current url:
850 $this->act
=t3lib_div
::_GP('act');
852 $this->act
=$this->curUrlInfo
['act'];
855 // Rich Text Editor specific configuration:
857 if ((string)$this->mode
== 'rte') {
858 $RTEtsConfigParts = explode(':',$this->RTEtsConfigParams
);
859 $addPassOnParams.='&RTEtsConfigParams='.rawurlencode($this->RTEtsConfigParams
);
860 $RTEsetup = $GLOBALS['BE_USER']->getTSConfig('RTE',t3lib_BEfunc
::getPagesTSconfig($RTEtsConfigParts[5]));
861 $this->thisConfig
= t3lib_BEfunc
::RTEsetup($RTEsetup['properties'],$RTEtsConfigParts[0],$RTEtsConfigParts[2],$RTEtsConfigParts[4]);
864 // Initializing the target value (RTE)
865 $this->setTarget
= ($this->curUrlArray
['target'] != '-') ?
$this->curUrlArray
['target'] : '';
866 if ($this->thisConfig
['defaultLinkTarget'] && !isset($this->curUrlArray
['target'])) {
867 $this->setTarget
=$this->thisConfig
['defaultLinkTarget'];
870 // Initializing the class value (RTE)
871 $this->setClass
= ($this->curUrlArray
['class'] != '-') ?
$this->curUrlArray
['class'] : '';
873 // Initializing the title value (RTE)
874 $this->setTitle
= ($this->curUrlArray
['title'] != '-') ?
$this->curUrlArray
['title'] : '';
876 // BEGIN accumulation of header JavaScript:
878 // This JavaScript is primarily for RTE/Link. jumpToUrl is used in the other cases as well...
879 var add_href="'.($this->curUrlArray
['href']?
'&curUrl[href]='.rawurlencode($this->curUrlArray
['href']):'').'";
880 var add_target="'.($this->setTarget?
'&curUrl[target]='.rawurlencode($this->setTarget
):'').'";
881 var add_class="'.($this->setClass ?
'&curUrl[class]='.rawurlencode($this->setClass
) : '').'";
882 var add_title="'.($this->setTitle?
'&curUrl[title]='.rawurlencode($this->setTitle
):'').'";
883 var add_params="'.($this->bparams?
'&bparams='.rawurlencode($this->bparams
):'').'";
885 var cur_href="'.($this->curUrlArray
['href']?
$this->curUrlArray
['href']:'').'";
886 var cur_target="'.($this->setTarget?
$this->setTarget
:'').'";
887 var cur_class = "'.($this->setClass ?
$this->setClass
: '-').'";
888 var cur_title="'.($this->setTitle?
$this->setTitle
:'').'";
890 function browse_links_setTarget(target) { //
892 add_target="&curUrl[target]="+escape(target);
894 function browse_links_setClass(cssClass) { //
895 cur_class = cssClass;
896 add_class = "&curUrl[class]=" + escape(cssClass);
898 function browse_links_setTitle(title) { //
900 add_title="&curUrl[title]="+escape(title);
902 function browse_links_setValue(value) { //
904 add_href="&curUrl[href]="+value;
908 if ($this->mode
== 'wizard') { // Functions used, if the link selector is in wizard mode (= TCEforms fields)
909 unset($this->P
['fieldChangeFunc']['alert']);
910 reset($this->P
['fieldChangeFunc']);
912 while(list($k,$v)=each($this->P
['fieldChangeFunc'])) {
918 $P2['itemName']=$this->P
['itemName'];
919 $P2['formName']=$this->P
['formName'];
920 $P2['fieldChangeFunc']=$this->P
['fieldChangeFunc'];
921 $P2['params']['allowedExtensions']=$this->P
['params']['allowedExtensions'];
922 $P2['params']['blindLinkOptions']=$this->P
['params']['blindLinkOptions'];
923 $addPassOnParams.=t3lib_div
::implodeArrayForUrl('P',$P2);
926 function link_typo3Page(id,anchor) { //
927 updateValueInMainForm(id + (anchor ? anchor : ""));
931 function link_folder(folder) { //
932 updateValueInMainForm(folder);
936 function link_current() { //
937 if (cur_href!="http://" && cur_href!="mailto:") {
938 returnBeforeCleaned = cur_href;
939 if (returnBeforeCleaned.substr(0, 7) == "http://") {
940 returnToMainFormValue = returnBeforeCleaned.substr(7);
941 } else if (returnBeforeCleaned.substr(0, 7) == "mailto:") {
942 if (returnBeforeCleaned.substr(0, 14) == "mailto:mailto:") {
943 returnToMainFormValue = returnBeforeCleaned.substr(14);
945 returnToMainFormValue = returnBeforeCleaned.substr(7);
948 returnToMainFormValue = returnBeforeCleaned;
950 updateValueInMainForm(returnToMainFormValue);
955 function checkReference() { //
956 if (window.opener && window.opener.document && window.opener.document.'.$this->P
['formName'].' && window.opener.document.'.$this->P
['formName'].'["'.$this->P
['itemName'].'"] ) {
957 return window.opener.document.'.$this->P
['formName'].'["'.$this->P
['itemName'].'"];
962 function updateValueInMainForm(input) { //
963 var field = checkReference();
965 if (cur_target == "" && (cur_title != "" || cur_class != "-")) {
968 if (cur_title == "" && cur_class == "-") {
971 cur_class = cur_class.replace(/[\'\"]/g, "");
972 if (cur_class.indexOf(" ") != -1) {
973 cur_class = "\"" + cur_class + "\"";
975 cur_title = cur_title.replace(/(^\")|(\"$)/g, "");
976 if (cur_title.indexOf(" ") != -1) {
977 cur_title = "\"" + cur_title + "\"";
979 input = input + " " + cur_target + " " + cur_class + " " + cur_title;
985 } else { // Functions used, if the link selector is in RTE mode:
987 function link_typo3Page(id,anchor) { //
988 var theLink = \''.$this->siteURL
.'?id=\'+id+(anchor?anchor:"");
989 self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title);
992 function link_folder(folder) { //
993 var theLink = \''.$this->siteURL
.'\'+folder;
994 self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title);
997 function link_spec(theLink) { //
998 self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title);
1001 function link_current() { //
1002 if (cur_href!="http://" && cur_href!="mailto:") {
1003 self.parent.parent.renderPopup_addLink(cur_href, cur_target, cur_class, cur_title);
1010 // General "jumpToUrl" function:
1012 function jumpToUrl(URL,anchor) { //
1013 var add_act = URL.indexOf("act=")==-1 ? "&act='.$this->act
.'" : "";
1014 var add_mode = URL.indexOf("mode=")==-1 ? "&mode='.$this->mode
.'" : "";
1015 var theLocation = URL + add_act + add_mode + add_href + add_target + add_class + add_title + add_params'.($addPassOnParams?
'+"'.$addPassOnParams.'"':'').'+(anchor?anchor:"");
1016 window.location.href = theLocation;
1023 * Splits parts of $this->bparams
1026 $pArr = explode('|',$this->bparams
);
1028 // This is JavaScript especially for the TBE Element Browser!
1029 $formFieldName = 'data['.$pArr[0].']['.$pArr[1].']['.$pArr[2].']';
1031 // insertElement - Call check function (e.g. for uniqueness handling):
1032 if ($pArr[4] && $pArr[5]) {
1034 // Call a check function in the opener window (e.g. for uniqueness handling):
1035 if (parent.window.opener) {
1036 var res = parent.window.opener.'.$pArr[5].'("'.addslashes($pArr[4]).'",table,uid,type);
1038 if (res.message) alert(res.message);
1039 performAction = false;
1042 alert("Error - reference to main window is not set properly!");
1047 // insertElement - Call helper function:
1048 if ($pArr[4] && $pArr[6]) {
1050 // Call helper function to manage data in the opener window:
1051 if (parent.window.opener) {
1052 parent.window.opener.'.$pArr[6].'("'.addslashes($pArr[4]).'",table,uid,type,"'.addslashes($pArr[0]).'");
1054 alert("Error - reference to main window is not set properly!");
1059 // insertElement - perform action commands:
1060 if ($pArr[4] && $pArr[7]) {
1061 // Call user defined action function:
1063 if (parent.window.opener) {
1064 parent.window.opener.'.$pArr[7].'("'.addslashes($pArr[4]).'",table,uid,type);
1065 focusOpenerAndClose(close);
1067 alert("Error - reference to main window is not set properly!");
1071 } else if ($pArr[0] && !$pArr[1] && !$pArr[2]) {
1073 addElement(filename,table+"_"+uid,fp,close);
1077 if (setReferences()) {
1078 parent.window.opener.group_change("add","'.$pArr[0].'","'.$pArr[1].'","'.$pArr[2].'",elRef,targetDoc);
1080 alert("Error - reference to main window is not set properly!");
1082 focusOpenerAndClose(close);
1090 function launchView(url) { //
1091 var thePreviewWindow="";
1092 thePreviewWindow = window.open("'.$BACK_PATH.'show_item.php?table="+url,"ShowItem","height=300,width=410,status=0,menubar=0,resizable=0,location=0,directories=0,scrollbars=1,toolbar=0");
1093 if (thePreviewWindow && thePreviewWindow.focus) {
1094 thePreviewWindow.focus();
1097 function setReferences() { //
1098 if (parent.window.opener && parent.window.opener.content && parent.window.opener.content.document.editform && parent.window.opener.content.document.editform["'.$formFieldName.'"]) {
1099 targetDoc = parent.window.opener.content.document;
1100 elRef = targetDoc.editform["'.$formFieldName.'"];
1106 function insertElement(table, uid, type, filename,fp,filetype,imagefile,action, close) { //
1107 var performAction = true;
1109 // Call performing function and finish this action:
1110 if (performAction) {
1111 '.$JScodeHelper.$JScodeAction.'
1115 function addElement(elName,elValue,altElValue,close) { //
1116 if (parent.window.opener && parent.window.opener.setFormValueFromBrowseWin) {
1117 parent.window.opener.setFormValueFromBrowseWin("'.$pArr[0].'",altElValue?altElValue:elValue,elName);
1118 focusOpenerAndClose(close);
1120 alert("Error - reference to main window is not set properly!");
1124 function focusOpenerAndClose(close) { //
1125 BrowseLinks.focusOpenerAndClose(close);
1129 // Finally, add the accumulated JavaScript to the template object:
1130 $this->doc
->JScode
.= $this->doc
->wrapScriptTags($JScode);
1133 if (FALSE) debug(array(
1134 'pointer' => $this->pointer
,
1135 'act' => $this->act
,
1136 'mode' => $this->mode
,
1137 'curUrlInfo' => $this->curUrlInfo
,
1138 'curUrlArray' => $this->curUrlArray
,
1140 'bparams' => $this->bparams
,
1141 'RTEtsConfigParams' => $this->RTEtsConfigParams
,
1142 'expandPage' => $this->expandPage
,
1143 'expandFolder' => $this->expandFolder
,
1145 ),'Internal variables of Script Class:');
1150 * Session data for this class can be set from outside with this method.
1153 * @param array Session data array
1154 * @return array Session data and boolean which indicates that data needs to be stored in session because it's changed
1156 function processSessionData($data) {
1159 switch((string)$this->mode
) {
1161 if (isset($this->expandPage
)) {
1162 $data['expandPage']=$this->expandPage
;
1165 $this->expandPage
=$data['expandPage'];
1171 if (isset($this->expandFolder
)) {
1172 $data['expandFolder']=$this->expandFolder
;
1175 $this->expandFolder
=$data['expandFolder'];
1180 return array($data, $store);
1186 /******************************************************************
1190 ******************************************************************/
1193 * Rich Text Editor (RTE) link selector (MAIN function)
1194 * Generates the link selector for the Rich Text Editor.
1195 * Can also be used to select links for the TCEforms (see $wiz)
1197 * @param boolean If set, the "remove link" is not shown in the menu: Used for the "Select link" wizard which is used by the TCEforms
1198 * @return string Modified content variable.
1200 function main_rte($wiz=0) {
1201 global $LANG, $BACK_PATH;
1203 // Starting content:
1204 $content=$this->doc
->startPage('RTE link');
1206 // Initializing the action value, possibly removing blinded values etc:
1207 $allowedItems = array_diff(
1208 explode(',','page,file,folder,url,mail,spec'),
1209 t3lib_div
::trimExplode(',',$this->thisConfig
['blindLinkOptions'],1)
1211 $allowedItems = array_diff(
1213 t3lib_div
::trimExplode(',',$this->P
['params']['blindLinkOptions'])
1216 //call hook for extra options
1217 foreach($this->hookObjects
as $hookObject) {
1218 $allowedItems = $hookObject->addAllowedItems($allowedItems);
1221 reset($allowedItems);
1222 if (!in_array($this->act
,$allowedItems)) $this->act
= current($allowedItems);
1224 // Making menu in top:
1227 $menuDef['removeLink']['isActive'] = $this->act
=='removeLink';
1228 $menuDef['removeLink']['label'] = $LANG->getLL('removeLink',1);
1229 $menuDef['removeLink']['url'] = '#';
1230 $menuDef['removeLink']['addParams'] = 'onclick="self.parent.parent.renderPopup_unLink();return false;"';
1232 if (in_array('page',$allowedItems)) {
1233 $menuDef['page']['isActive'] = $this->act
=='page';
1234 $menuDef['page']['label'] = $LANG->getLL('page',1);
1235 $menuDef['page']['url'] = '#';
1236 $menuDef['page']['addParams'] = 'onclick="jumpToUrl(\'?act=page\');return false;"';
1238 if (in_array('file',$allowedItems)){
1239 $menuDef['file']['isActive'] = $this->act
=='file';
1240 $menuDef['file']['label'] = $LANG->getLL('file',1);
1241 $menuDef['file']['url'] = '#';
1242 $menuDef['file']['addParams'] = 'onclick="jumpToUrl(\'?act=file\');return false;"';
1244 if (in_array('folder',$allowedItems)){
1245 $menuDef['folder']['isActive'] = $this->act
== 'folder';
1246 $menuDef['folder']['label'] = $LANG->getLL('folder', 1);
1247 $menuDef['folder']['url'] = '#';
1248 $menuDef['folder']['addParams'] = 'onclick="jumpToUrl(\'?act=folder\');return false;"';
1250 if (in_array('url',$allowedItems)) {
1251 $menuDef['url']['isActive'] = $this->act
=='url';
1252 $menuDef['url']['label'] = $LANG->getLL('extUrl',1);
1253 $menuDef['url']['url'] = '#';
1254 $menuDef['url']['addParams'] = 'onclick="jumpToUrl(\'?act=url\');return false;"';
1256 if (in_array('mail',$allowedItems)) {
1257 $menuDef['mail']['isActive'] = $this->act
=='mail';
1258 $menuDef['mail']['label'] = $LANG->getLL('email',1);
1259 $menuDef['mail']['url'] = '#';
1260 $menuDef['mail']['addParams'] = 'onclick="jumpToUrl(\'?act=mail\');return false;"';
1262 if (is_array($this->thisConfig
['userLinks.']) && in_array('spec',$allowedItems)) {
1263 $menuDef['spec']['isActive'] = $this->act
=='spec';
1264 $menuDef['spec']['label'] = $LANG->getLL('special',1);
1265 $menuDef['spec']['url'] = '#';
1266 $menuDef['spec']['addParams'] = 'onclick="jumpToUrl(\'?act=spec\');return false;"';
1269 // call hook for extra options
1270 foreach($this->hookObjects
as $hookObject) {
1271 $menuDef = $hookObject->modifyMenuDefinition($menuDef);
1274 $content .= $this->doc
->getTabMenuRaw($menuDef);
1276 // Adding the menu and header to the top of page:
1277 $content.=$this->printCurrentUrl($this->curUrlInfo
['info']).'<br />';
1279 // Depending on the current action we will create the actual module content for selecting a link:
1280 switch($this->act
) {
1287 <form action="" name="lurlform" id="lurlform">
1288 <table border="0" cellpadding="2" cellspacing="1" id="typo3-linkMail">
1290 <td style="width: 96px;">' . $GLOBALS['LANG']->getLL('emailAddress', 1) . ':</td>
1291 <td><input type="text" name="lemail"'.$this->doc
->formWidth(20).' value="'.htmlspecialchars($this->curUrlInfo
['act']=='mail'?
$this->curUrlInfo
['info']:'').'" /> '.
1292 '<input type="submit" value="' . $GLOBALS['LANG']->getLL('setLink', 1) . '" onclick="browse_links_setTarget(\'\');browse_links_setValue(\'mailto:\'+document.lurlform.lemail.value); return link_current();" /></td>
1304 <form action="" name="lurlform" id="lurlform">
1305 <table border="0" cellpadding="2" cellspacing="1" id="typo3-linkURL">
1307 <td style="width: 96px;">URL:</td>
1308 <td><input type="text" name="lurl"'.$this->doc
->formWidth(30).' value="'.htmlspecialchars($this->curUrlInfo
['act']=='url'?
$this->curUrlInfo
['info']:'http://').'" /> '.
1309 '<input type="submit" value="' . $GLOBALS['LANG']->getLL('setLink', 1) . '" onclick="browse_links_setValue(document.lurlform.lurl.value); return link_current();" /></td>
1317 $foldertree = t3lib_div
::makeInstance('rteFolderTree');
1318 $foldertree->thisScript
= $this->thisScript
;
1319 $tree = $foldertree->getBrowsableTree();
1321 if (!$this->curUrlInfo
['value'] ||
$this->curUrlInfo
['act'] != $this->act
) {
1323 } elseif (substr(trim($this->curUrlInfo
['info']), -1) != '/') {
1324 $cmpPath = PATH_site
.dirname($this->curUrlInfo
['info']).'/';
1325 if (!isset($this->expandFolder
)) {
1326 $this->expandFolder
= $cmpPath;
1329 $cmpPath = PATH_site
.$this->curUrlInfo
['info'];
1330 if (!isset($this->expandFolder
) && $this->curUrlInfo
['act'] == 'folder') {
1331 $this->expandFolder
= $cmpPath;
1335 list(, , $specUid) = explode('_', $this->PM
);
1336 $files = $this->expandFolder(
1337 $foldertree->specUIDmap
[$specUid],
1338 $this->P
['params']['allowedExtensions']
1343 Wrapper table for folder tree / file/folder list:
1345 <table border="0" cellpadding="0" cellspacing="0" id="typo3-linkFiles">
1347 <td class="c-wCell" valign="top">'.$this->barheader($GLOBALS['LANG']->getLL('folderTree').':').$tree.'</td>
1348 <td class="c-wCell" valign="top">'.$files.'</td>
1354 if (is_array($this->thisConfig
['userLinks.'])) {
1356 $v=$this->thisConfig
['userLinks.'];
1358 while(list($k2)=each($v)) {
1360 if (substr($k2,-1)=='.' && is_array($v[$k2i.'.'])) {
1363 $title = trim($v[$k2i]);
1365 $title=$v[$k2i.'.']['url'];
1367 $title=$LANG->sL($title);
1370 $description=$v[$k2i.'.']['description'] ?
$LANG->sL($v[$k2i.'.']['description'],1).'<br />' : '';
1372 // URL + onclick event:
1374 if (isset($v[$k2i.'.']['target'])) $onClickEvent.="browse_links_setTarget('".$v[$k2i.'.']['target']."');";
1375 $v[$k2i.'.']['url'] = str_replace('###_URL###',$this->siteURL
,$v[$k2i.'.']['url']);
1376 if (substr($v[$k2i.'.']['url'],0,7)=='http://' ||
substr($v[$k2i.'.']['url'],0,7)=='mailto:') {
1377 $onClickEvent.="cur_href=unescape('".rawurlencode($v[$k2i.'.']['url'])."');link_current();";
1379 $onClickEvent.="link_spec(unescape('".$this->siteURL
.rawurlencode($v[$k2i.'.']['url'])."'));";
1383 $A=array('<a href="#" onclick="'.htmlspecialchars($onClickEvent).'return false;">','</a>');
1385 // Adding link to menu of user defined links:
1388 <td class="bgColor4">'.$A[0].'<strong>'.htmlspecialchars($title).($this->curUrlInfo
['info']==$v[$k2i.'.']['url']?
'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/blinkarrow_right.gif','width="5" height="9"').' class="c-blinkArrowR" alt="" />':'').'</strong><br />'.$description.$A[1].'</td>
1396 // Add menu to content:
1400 Special userdefined menu:
1402 <table border="0" cellpadding="1" cellspacing="1" id="typo3-linkSpecial">
1404 <td class="bgColor5" class="c-wCell" valign="top"><strong>'.$LANG->getLL('special',1).'</strong></td>
1406 '.implode('',$subcats).'
1412 $pagetree = t3lib_div
::makeInstance('rtePageTree');
1413 $pagetree->thisScript
= $this->thisScript
;
1414 $tree=$pagetree->getBrowsableTree();
1415 $cElements = $this->expandPage();
1419 Wrapper table for page tree / record list:
1421 <table border="0" cellpadding="0" cellspacing="0" id="typo3-linkPages">
1423 <td class="c-wCell" valign="top">'.$this->barheader($GLOBALS['LANG']->getLL('pageTree').':').$tree.'</td>
1424 <td class="c-wCell" valign="top">'.$cElements.'</td>
1431 foreach($this->hookObjects
as $hookObject) {
1432 $content .= $hookObject->getTab($this->act
);
1440 Selecting class for link:
1442 <form action="" name="lclassform" id="lclassform">
1443 <table border="0" cellpadding="2" cellspacing="1" id="typo3-linkClass">
1445 <td style="width: 96px;">' . $GLOBALS['LANG']->getLL('class', 1) . '</td>
1446 <td><input type="text" name="lclass" onchange="browse_links_setClass(this.value);" value="' . htmlspecialchars($this->setClass
) . '"' . $this->doc
->formWidth(10) . ' /></td>
1452 Selecting title for link:
1454 <form action="" name="ltitleform" id="ltitleform">
1455 <table border="0" cellpadding="2" cellspacing="1" id="typo3-linkTitle">
1457 <td style="width: 96px;">' . $GLOBALS['LANG']->getLL('title', 1) . '</td>
1458 <td><input type="text" name="ltitle" onchange="browse_links_setTitle(this.value);" value="' . htmlspecialchars($this->setTitle
) . '"' . $this->doc
->formWidth(10) . ' /></td>
1465 if ($this->act
!='mail') {
1471 Selecting target for link:
1473 <form action="" name="ltargetform" id="ltargetform">
1474 <table border="0" cellpadding="2" cellspacing="1" id="typo3-linkTarget">
1476 <td>'.$GLOBALS['LANG']->getLL('target',1).':</td>
1477 <td><input type="text" name="ltarget" onchange="browse_links_setTarget(this.value);" value="' . htmlspecialchars($this->setTarget
) . '"' . $this->doc
->formWidth(10) . ' /></td>
1479 <select name="ltarget_type" onchange="browse_links_setTarget(this.options[this.selectedIndex].value);document.ltargetform.ltarget.value=this.options[this.selectedIndex].value;this.selectedIndex=0;">
1481 <option value="_top">'.$GLOBALS['LANG']->getLL('top',1).'</option>
1482 <option value="_blank">'.$GLOBALS['LANG']->getLL('newWindow',1).'</option>
1486 if (($this->curUrlInfo
['act'] == 'page' ||
$this->curUrlInfo
['act'] == 'file' ||
$this->curUrlInfo
['act'] == 'folder') && $this->curUrlArray
['href'] && $this->curUrlInfo
['act'] == $this->act
) {
1488 <input type="submit" value="'.$GLOBALS['LANG']->getLL('update',1).'" onclick="return link_current();" />';
1492 if (document.ltargetform.popup_width.options[document.ltargetform.popup_width.selectedIndex].value>0 && document.ltargetform.popup_height.options[document.ltargetform.popup_height.selectedIndex].value>0) {
1493 document.ltargetform.ltarget.value = document.ltargetform.popup_width.options[document.ltargetform.popup_width.selectedIndex].value+"x"+document.ltargetform.popup_height.options[document.ltargetform.popup_height.selectedIndex].value;
1494 browse_links_setTarget(document.ltargetform.ltarget.value);
1495 browse_links_setClass(document.lclassform.lclass.value);
1496 browse_links_setTitle(document.ltitleform.ltitle.value);
1497 document.ltargetform.popup_width.selectedIndex=0;
1498 document.ltargetform.popup_height.selectedIndex=0;
1505 <td>'.$GLOBALS['LANG']->getLL('target_popUpWindow',1).':</td>
1507 <select name="popup_width" onchange="'.htmlspecialchars($selectJS).'">
1508 <option value="0">'.$GLOBALS['LANG']->getLL('target_popUpWindow_width',1).'</option>
1509 <option value="300">300</option>
1510 <option value="400">400</option>
1511 <option value="500">500</option>
1512 <option value="600">600</option>
1513 <option value="700">700</option>
1514 <option value="800">800</option>
1517 <select name="popup_height" onchange="'.htmlspecialchars($selectJS).'">
1518 <option value="0">'.$GLOBALS['LANG']->getLL('target_popUpWindow_height',1).'</option>
1519 <option value="200">200</option>
1520 <option value="300">300</option>
1521 <option value="400">400</option>
1522 <option value="500">500</option>
1523 <option value="600">600</option>
1530 // Add "target selector" box to content:
1534 $content.='<br /><br />';
1537 // End page, return content:
1538 $content.= $this->doc
->endPage();
1539 $content = $this->doc
->insertStylesAndJS($content);
1544 * TYPO3 Element Browser: Showing a page tree and allows you to browse for records
1546 * @return string HTML content for the module
1548 function main_db() {
1550 // Starting content:
1551 $content=$this->doc
->startPage('TBE record selector');
1554 $pArr = explode('|',$this->bparams
);
1556 // Making the browsable pagetree:
1557 $pagetree = t3lib_div
::makeInstance('TBE_PageTree');
1558 $pagetree->thisScript
=$this->thisScript
;
1559 $pagetree->ext_pArrPages
= !strcmp($pArr[3],'pages')?
1:0;
1560 $pagetree->ext_showNavTitle
= $GLOBALS['BE_USER']->getTSConfigVal('options.pageTree.showNavTitle');
1561 $pagetree->addField('nav_title');
1562 $tree=$pagetree->getBrowsableTree();
1564 // Making the list of elements, if applicable:
1565 $cElements = $this->TBE_expandPage($pArr[3]);
1567 // Putting the things together, side by side:
1571 Wrapper table for page tree / record list:
1573 <table border="0" cellpadding="0" cellspacing="0" id="typo3-EBrecords">
1575 <td class="c-wCell" valign="top">'.$this->barheader($GLOBALS['LANG']->getLL('pageTree').':').$tree.'</td>
1576 <td class="c-wCell" valign="top">'.$cElements.'</td>
1582 $content.='<br /><br />';
1584 // End page, return content:
1585 $content.= $this->doc
->endPage();
1586 $content = $this->doc
->insertStylesAndJS($content);
1591 * TYPO3 Element Browser: Showing a folder tree, allowing you to browse for files.
1593 * @return string HTML content for the module
1595 function main_file() {
1598 // Starting content:
1599 $content.=$this->doc
->startPage('TBE file selector');
1602 $pArr = explode('|',$this->bparams
);
1604 // Create upload/create folder forms, if a path is given:
1605 $path=$this->expandFolder
;
1606 if (!$path ||
!@is_dir
($path)) {
1607 // The closest TEMP-path is found
1608 $path = $this->fileProcessor
->findTempFolder().'/';
1610 if ($path!='/' && @is_dir
($path)) {
1611 $uploadForm=$this->uploadForm($path);
1612 $createFolder=$this->createFolder($path);
1617 if ($BE_USER->getTSConfigVal('options.uploadFieldsInTopOfEB')) $content.=$uploadForm;
1619 // Getting flag for showing/not showing thumbnails:
1620 $noThumbs = $GLOBALS['BE_USER']->getTSConfigVal('options.noThumbsInEB');
1623 // MENU-ITEMS, fetching the setting for thumbnails from File>List module:
1624 $_MOD_MENU = array('displayThumbs' => '');
1625 $_MCONF['name']='file_list';
1626 $_MOD_SETTINGS = t3lib_BEfunc
::getModuleData($_MOD_MENU, t3lib_div
::_GP('SET'), $_MCONF['name']);
1627 $addParams = '&act='.$this->act
.'&mode='.$this->mode
.'&expandFolder='.rawurlencode($path).'&bparams='.rawurlencode($this->bparams
);
1628 $thumbNailCheck = t3lib_BEfunc
::getFuncCheck('','SET[displayThumbs]',$_MOD_SETTINGS['displayThumbs'],$this->thisScript
,$addParams,'id="checkDisplayThumbs"').' <label for="checkDisplayThumbs">'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_mod_file_list.php:displayThumbs',1).'</label>';
1632 $noThumbs = $noThumbs ?
$noThumbs : !$_MOD_SETTINGS['displayThumbs'];
1634 // Create folder tree:
1635 $foldertree = t3lib_div
::makeInstance('TBE_FolderTree');
1636 $foldertree->thisScript
=$this->thisScript
;
1637 $foldertree->ext_noTempRecyclerDirs
= ($this->mode
== 'filedrag');
1638 $tree=$foldertree->getBrowsableTree();
1640 list(,,$specUid) = explode('_',$this->PM
);
1642 if ($this->mode
=='filedrag') {
1643 $files = $this->TBE_dragNDrop($foldertree->specUIDmap
[$specUid],$pArr[3]);
1645 $files = $this->TBE_expandFolder($foldertree->specUIDmap
[$specUid],$pArr[3],$noThumbs);
1648 // Putting the parts together, side by side:
1652 Wrapper table for folder tree / file list:
1654 <table border="0" cellpadding="0" cellspacing="0" id="typo3-EBfiles">
1656 <td class="c-wCell" valign="top">'.$this->barheader($GLOBALS['LANG']->getLL('folderTree').':').$tree.'</td>
1657 <td class="c-wCell" valign="top">'.$files.'</td>
1661 $content.= $thumbNailCheck;
1663 // Adding create folder + upload forms if applicable:
1664 if (!$BE_USER->getTSConfigVal('options.uploadFieldsInTopOfEB')) $content.=$uploadForm;
1665 if ($BE_USER->isAdmin() ||
$BE_USER->getTSConfigVal('options.createFoldersInEB')) $content.=$createFolder;
1668 $content.='<br /><br />';
1670 // Setup indexed elements:
1671 $this->doc
->JScode
.= $this->doc
->wrapScriptTags('BrowseLinks.addElements(' . json_encode($this->elements
) . ');');
1672 // Ending page, returning content:
1673 $content.= $this->doc
->endPage();
1674 $content = $this->doc
->insertStylesAndJS($content);
1680 * TYPO3 Element Browser: Showing a folder tree, allowing you to browse for folders.
1682 * @return string HTML content for the module
1684 function main_folder() {
1687 // Starting content:
1688 $content = $this->doc
->startPage('TBE folder selector');
1691 $parameters = explode('|', $this->bparams
);
1694 $path = $this->expandFolder
;
1695 if (!$path ||
!@is_dir
($path)) {
1696 // The closest TEMP-path is found
1697 $path = $this->fileProcessor
->findTempFolder().'/';
1699 if ($path != '/' && @is_dir
($path)) {
1700 $createFolder = $this->createFolder($path);
1705 // Create folder tree:
1706 $foldertree = t3lib_div
::makeInstance('TBE_FolderTree');
1707 $foldertree->thisScript
= $this->thisScript
;
1708 $foldertree->ext_noTempRecyclerDirs
= ($this->mode
== 'filedrag');
1709 $tree = $foldertree->getBrowsableTree(false);
1711 list(, , $specUid) = explode('_', $this->PM
);
1713 if($this->mode
== 'filedrag') {
1714 $folders = $this->TBE_dragNDrop(
1715 $foldertree->specUIDmap
[$specUid],
1719 $folders = $this->TBE_expandSubFolders($foldertree->specUIDmap
[$specUid]);
1722 // Putting the parts together, side by side:
1726 Wrapper table for folder tree / folder list:
1728 <table border="0" cellpadding="0" cellspacing="0" id="typo3-EBfiles">
1730 <td class="c-wCell" valign="top">'.$this->barheader($GLOBALS['LANG']->getLL('folderTree').':').$tree.'</td>
1731 <td class="c-wCell" valign="top">'.$folders.'</td>
1736 // Adding create folder if applicable:
1737 if($BE_USER->isAdmin() ||
$BE_USER->getTSConfigVal('options.createFoldersInEB')) {
1738 $content .= $createFolder;
1742 $content .= '<br /><br />';
1744 // Ending page, returning content:
1745 $content.= $this->doc
->endPage();
1746 $content = $this->doc
->insertStylesAndJS($content);
1767 /******************************************************************
1771 ******************************************************************/
1773 * For RTE: This displays all content elements on a page and lets you create a link to the element.
1775 * @return string HTML output. Returns content only if the ->expandPage value is set (pointing to a page uid to show tt_content records from ...)
1777 function expandPage() {
1778 global $BE_USER, $BACK_PATH;
1781 $expPageId = $this->expandPage
; // Set page id (if any) to expand
1783 // If there is an anchor value (content element reference) in the element reference, then force an ID to expand:
1784 if (!$this->expandPage
&& $this->curUrlInfo
['cElement']) {
1785 $expPageId = $this->curUrlInfo
['pageid']; // Set to the current link page id.
1788 // Draw the record list IF there is a page id to expand:
1789 if ($expPageId && t3lib_div
::testInt($expPageId) && $BE_USER->isInWebMount($expPageId)) {
1792 $out.=$this->barheader($GLOBALS['LANG']->getLL('contentElements').':');
1794 // Create header for listing, showing the page title/icon:
1795 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
1796 $mainPageRec = t3lib_BEfunc
::getRecordWSOL('pages',$expPageId);
1797 $picon = t3lib_iconWorks
::getIconImage('pages', $mainPageRec, $BACK_PATH, '');
1798 $picon.= htmlspecialchars(t3lib_div
::fixed_lgd_cs($mainPageRec['title'],$titleLen));
1799 $out.=$picon.'<br />';
1801 // Look up tt_content elements from the expanded page:
1802 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
1803 'uid,header,hidden,starttime,endtime,fe_group,CType,colpos,bodytext',
1805 'pid='.intval($expPageId).
1806 t3lib_BEfunc
::deleteClause('tt_content').
1807 t3lib_BEfunc
::versioningPlaceholderClause('tt_content'),
1811 $cc = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
1813 // Traverse list of records:
1815 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
1817 $icon=t3lib_iconWorks
::getIconImage('tt_content',$row,$BACK_PATH,'');
1818 if ($this->curUrlInfo
['act']=='page' && $this->curUrlInfo
['cElement']==$row['uid']) {
1819 $arrCol='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/blinkarrow_left.gif','width="5" height="9"').' class="c-blinkArrowL" alt="" />';
1823 // Putting list element HTML together:
1824 $out.='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/join'.($c==$cc?
'bottom':'').'.gif','width="18" height="16"').' alt="" />'.
1826 '<a href="#" onclick="return link_typo3Page(\''.$expPageId.'\',\'#'.$row['uid'].'\');">'.
1828 htmlspecialchars(t3lib_div
::fixed_lgd_cs($row['header'],$titleLen)).
1831 // Finding internal anchor points:
1832 if (t3lib_div
::inList('text,textpic', $row['CType'])) {
1833 $split = preg_split('/(<a[^>]+name=[\'"]?([^"\'>[:space:]]+)[\'"]?[^>]*>)/i', $row['bodytext'], -1, PREG_SPLIT_DELIM_CAPTURE
);
1835 foreach($split as $skey => $sval) {
1837 // Putting list element HTML together:
1838 $sval = substr($sval,0,100);
1839 $out.='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/line.gif','width="18" height="16"').' alt="" />'.
1840 '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/join'.($skey+
3>count($split)?
'bottom':'').'.gif','width="18" height="16"').' alt="" />'.
1841 '<a href="#" onclick="return link_typo3Page(\''.$expPageId.'\',\'#'.rawurlencode($sval).'\');">'.
1842 htmlspecialchars(' <A> '.$sval).
1853 * For TYPO3 Element Browser: This lists all content elements from the given list of tables
1855 * @param string Commalist of tables. Set to "*" if you want all tables.
1856 * @return string HTML output.
1858 function TBE_expandPage($tables) {
1859 global $TCA,$BE_USER, $BACK_PATH;
1862 if ($this->expandPage
>=0 && t3lib_div
::testInt($this->expandPage
) && $BE_USER->isInWebMount($this->expandPage
)) {
1864 // Set array with table names to list:
1865 if (!strcmp(trim($tables),'*')) {
1866 $tablesArr = array_keys($TCA);
1868 $tablesArr = t3lib_div
::trimExplode(',',$tables,1);
1872 // Headline for selecting records:
1873 $out.=$this->barheader($GLOBALS['LANG']->getLL('selectRecords').':');
1875 // Create the header, showing the current page for which the listing is. Includes link to the page itself, if pages are amount allowed tables.
1876 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
1877 $mainPageRec = t3lib_BEfunc
::getRecordWSOL('pages',$this->expandPage
);
1881 if (in_array('pages',$tablesArr)) {
1882 $ficon=t3lib_iconWorks
::getIcon('pages',$mainPageRec);
1883 $ATag="<a href=\"#\" onclick=\"return insertElement('pages', '".$mainPageRec['uid']."', 'db', ".t3lib_div
::quoteJSvalue($mainPageRec['title']).", '', '', '".$ficon."','',1);\">";
1884 $ATag2="<a href=\"#\" onclick=\"return insertElement('pages', '".$mainPageRec['uid']."', 'db', ".t3lib_div
::quoteJSvalue($mainPageRec['title']).", '', '', '".$ficon."','',0);\">";
1885 $ATag_alt=substr($ATag,0,-4).",'',1);\">";
1888 $picon=t3lib_iconWorks
::getIconImage('pages',$mainPageRec,$BACK_PATH,'');
1889 $pBicon=$ATag2?
'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/plusbullet2.gif','width="18" height="16"').' alt="" />':'';
1890 $pText=htmlspecialchars(t3lib_div
::fixed_lgd_cs($mainPageRec['title'],$titleLen));
1891 $out.=$picon.$ATag2.$pBicon.$ATag_e.$ATag.$pText.$ATag_e.'<br />';
1893 // Initialize the record listing:
1894 $id = $this->expandPage
;
1895 $pointer = t3lib_div
::intInRange($this->pointer
,0,100000);
1896 $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
1897 $pageinfo = t3lib_BEfunc
::readPageAccess($id,$perms_clause);
1900 // Generate the record list:
1901 $dblist = t3lib_div
::makeInstance('TBE_browser_recordList');
1902 $dblist->thisScript
=$this->thisScript
;
1903 $dblist->backPath
= $GLOBALS['BACK_PATH'];
1904 $dblist->thumbs
= 0;
1905 $dblist->calcPerms
= $GLOBALS['BE_USER']->calcPerms($pageinfo);
1906 $dblist->noControlPanels
=1;
1907 $dblist->clickMenuEnabled
=0;
1908 $dblist->tableList
=implode(',',$tablesArr);
1910 $dblist->start($id,t3lib_div
::_GP('table'),$pointer,
1911 t3lib_div
::_GP('search_field'),
1912 t3lib_div
::_GP('search_levels'),
1913 t3lib_div
::_GP('showLimit')
1915 $dblist->setDispFields();
1916 $dblist->generateList();
1917 $dblist->writeBottom();
1919 // Add the HTML for the record list to output variable:
1920 $out.=$dblist->HTMLcode
;
1922 // Add support for fieldselectbox in singleTableMode
1923 if ($dblist->table
) {
1924 $out.= $dblist->fieldSelectBox($dblist->table
);
1927 $out.=$dblist->getSearchBox();
1930 // Return accumulated content:
1936 * Render list of folders inside a folder.
1938 * @param string string of the current folder
1939 * @return string HTML output
1941 function TBE_expandSubFolders($expandFolder=0) {
1944 $expandFolder = $expandFolder ?
1946 $this->expandFolder
;
1948 if($expandFolder && $this->checkFolder($expandFolder)) {
1949 if(t3lib_div
::isFirstPartOfStr($expandFolder, PATH_site
)) {
1950 $rootFolder = substr($expandFolder, strlen(PATH_site
));
1955 // Listing the folders:
1956 $folders = t3lib_div
::get_dirs($expandFolder);
1957 if(count($folders) > 0) {
1958 foreach($folders as $index => $folder) {
1959 $folders[$index] = $rootFolder.$folder.'/';
1962 $content.= $this->folderList($rootFolder, $folders);
1965 // Return accumulated content for folderlisting:
1979 /******************************************************************
1983 ******************************************************************/
1985 * For RTE: This displays all files from folder. No thumbnails shown
1987 * @param string The folder path to expand
1988 * @param string List of fileextensions to show
1989 * @return string HTML output
1991 function expandFolder($expandFolder=0,$extensionList='') {
1994 $expandFolder = $expandFolder ?
$expandFolder : $this->expandFolder
;
1996 if ($expandFolder && $this->checkFolder($expandFolder)) {
1998 // Create header for filelisting:
1999 $out.=$this->barheader($GLOBALS['LANG']->getLL('files').':');
2001 // Prepare current path value for comparison (showing red arrow)
2002 if (!$this->curUrlInfo
['value']) {
2005 $cmpPath=PATH_site
.$this->curUrlInfo
['info'];
2009 // Create header element; The folder from which files are listed.
2010 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
2011 $picon='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/i/_icon_webfolders.gif','width="18" height="16"').' alt="" />';
2012 $picon.=htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($expandFolder),$titleLen));
2013 $picon='<a href="#" onclick="return link_folder(\''.t3lib_div
::rawUrlEncodeFP(substr($expandFolder,strlen(PATH_site
))).'\');">'.$picon.'</a>';
2014 if ($this->curUrlInfo
['act'] == 'folder' && $cmpPath == $expandFolder) {
2015 $out.= '<img'.t3lib_iconWorks
::skinImg($BACK_PATH, 'gfx/blinkarrow_left.gif', 'width="5" height="9"') . ' class="c-blinkArrowL" alt="" />';
2017 $out.=$picon.'<br />';
2019 // Get files from the folder:
2020 if ($this->mode
== 'wizard' && $this->act
== 'folder') {
2021 $files = t3lib_div
::get_dirs($expandFolder);
2023 $files = t3lib_div
::getFilesInDir($expandFolder, $extensionList, 1, 1); // $extensionList='', $prependPath=0, $order='')
2028 if (is_array($files)) {
2029 foreach($files as $filepath) {
2031 $fI=pathinfo($filepath);
2033 if ($this->mode
== 'wizard' && $this->act
== 'folder') {
2034 $filepath = $expandFolder.$filepath.'/';
2035 $icon = '<img' . t3lib_iconWorks
::skinImg($BACK_PATH, 'gfx/i/_icon_webfolders.gif', 'width="18" height="16"') . ' alt="" />';
2038 $icon = t3lib_BEfunc
::getFileIcon(strtolower($fI['extension']));
2040 // Get size and icon:
2041 $size = ' (' . t3lib_div
::formatSize(filesize($filepath)) . 'bytes)';
2042 $icon = '<img' . t3lib_iconWorks
::skinImg($BACK_PATH, 'gfx/fileicons/' . $icon . '', 'width="18" height="16"') . ' title="' . htmlspecialchars($fI['basename'] . $size) . '" alt="" />';
2045 // If the listed file turns out to be the CURRENT file, then show blinking arrow:
2046 if (($this->curUrlInfo
['act'] == 'file' ||
$this->curUrlInfo
['act'] == 'folder') && $cmpPath == $filepath) {
2047 $arrCol='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/blinkarrow_left.gif','width="5" height="9"').' class="c-blinkArrowL" alt="" />';
2052 // Put it all together for the file element:
2053 $out.='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/ol/join'.($c==$cc?
'bottom':'').'.gif','width="18" height="16"').' alt="" />'.
2055 '<a href="#" onclick="return link_folder(\''.t3lib_div
::rawUrlEncodeFP(substr($filepath,strlen(PATH_site
))).'\');">'.
2057 htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($filepath),$titleLen)).
2066 * For TYPO3 Element Browser: Expand folder of files.
2068 * @param string The folder path to expand
2069 * @param string List of fileextensions to show
2070 * @param boolean Whether to show thumbnails or not. If set, no thumbnails are shown.
2071 * @return string HTML output
2073 function TBE_expandFolder($expandFolder=0,$extensionList='',$noThumbs=0) {
2076 $extensionList = ($extensionList == '*') ?
'' : $extensionList;
2077 $expandFolder = $expandFolder ?
$expandFolder : $this->expandFolder
;
2079 if ($expandFolder && $this->checkFolder($expandFolder)) {
2080 // Listing the files:
2081 $files = t3lib_div
::getFilesInDir($expandFolder,$extensionList,1,1); // $extensionList="",$prependPath=0,$order='')
2082 $out.= $this->fileList($files, $expandFolder, $noThumbs);
2085 // Return accumulated content for filelisting:
2090 * Render list of files.
2092 * @param array List of files. See t3lib_div::getFilesInDir
2093 * @param string If set a header with a folder icon and folder name are shown
2094 * @param boolean Whether to show thumbnails or not. If set, no thumbnails are shown.
2095 * @return string HTML output
2097 function fileList($files, $folderName='', $noThumbs=0) {
2098 global $LANG, $BACK_PATH;
2102 // Listing the files:
2103 if (is_array($files)) {
2105 // Create headline (showing number of files):
2106 $filesCount = count($files);
2107 $out.=$this->barheader(sprintf($GLOBALS['LANG']->getLL('files').' (%s):', $filesCount));
2108 $out.=$this->getBulkSelector($filesCount);
2110 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
2112 // Create the header of current folder:
2114 $picon='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/i/_icon_webfolders.gif','width="18" height="16"').' alt="" />';
2115 $picon.=htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($folderName),$titleLen));
2116 $out.=$picon.'<br />';
2119 // Init graphic object for reading file dimensions:
2120 $imgObj = t3lib_div
::makeInstance('t3lib_stdGraphic');
2122 $imgObj->mayScaleUp
=0;
2123 $imgObj->tempPath
=PATH_site
.$imgObj->tempPath
;
2125 // Traverse the file list:
2127 foreach($files as $filepath) {
2128 $fI=pathinfo($filepath);
2130 // Thumbnail/size generation:
2131 if (t3lib_div
::inList(strtolower($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),strtolower($fI['extension'])) && !$noThumbs) {
2132 $imgInfo = $imgObj->getImageDimensions($filepath);
2133 $pDim = $imgInfo[0].'x'.$imgInfo[1].' pixels';
2134 $clickIcon = t3lib_BEfunc
::getThumbNail($BACK_PATH.'thumbs.php',$filepath,'hspace="5" vspace="5" border="1"');
2140 // Create file icon:
2141 $ficon = t3lib_BEfunc
::getFileIcon(strtolower($fI['extension']));
2142 $size=' ('.t3lib_div
::formatSize(filesize($filepath)).'bytes'.($pDim?
', '.$pDim:'').')';
2143 $icon = '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/fileicons/'.$ficon,'width="18" height="16"').' title="'.htmlspecialchars($fI['basename'].$size).'" class="absmiddle" alt="" />';
2145 // Create links for adding the file:
2146 if (strstr($filepath,',') ||
strstr($filepath,'|')) { // In case an invalid character is in the filepath, display error message:
2147 $eMsg = $LANG->JScharCode(sprintf($LANG->getLL('invalidChar'),', |'));
2148 $ATag = $ATag_alt = "<a href=\"#\" onclick=\"alert(".$eMsg.");return false;\">";
2150 } else { // If filename is OK, just add it:
2151 $filesIndex = count($this->elements
);
2152 $this->elements
['file_'.$filesIndex] = array(
2153 'md5' => t3lib_div
::shortMD5($filepath),
2155 'fileName' => $fI['basename'],
2156 'filePath' => $filepath,
2157 'fileExt' => $fI['extension'],
2158 'fileIcon' => $ficon,
2160 $ATag = "<a href=\"#\" onclick=\"return BrowseLinks.File.insertElement('file_$filesIndex');\">";
2161 $ATag_alt = substr($ATag,0,-4).",1);\">";
2162 $bulkCheckBox = '<input type="checkbox" class="typo3-bulk-item" name="file_'.$filesIndex.'" value="0" /> ';
2166 // Create link to showing details about the file in a window:
2167 $Ahref = $BACK_PATH.'show_item.php?table='.rawurlencode($filepath).'&returnUrl='.rawurlencode(t3lib_div
::getIndpEnv('REQUEST_URI'));
2168 $ATag2='<a href="'.htmlspecialchars($Ahref).'">';
2171 // Combine the stuff:
2172 $filenameAndIcon=$bulkCheckBox.$ATag_alt.$icon.htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($filepath),$titleLen)).$ATag_e;
2175 if ($pDim) { // Image...
2177 <tr class="bgColor4">
2178 <td nowrap="nowrap">'.$filenameAndIcon.' </td>
2179 <td>'.$ATag.'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/plusbullet2.gif','width="18" height="16"').' title="'.$LANG->getLL('addToList',1).'" alt="" />'.$ATag_e.'</td>
2180 <td nowrap="nowrap">'.($ATag2.'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/zoom2.gif','width="12" height="12"').' title="'.$LANG->getLL('info',1).'" alt="" /> '.$LANG->getLL('info',1).$ATag2_e).'</td>
2181 <td nowrap="nowrap"> '.$pDim.'</td>
2185 <td colspan="4">'.$ATag_alt.$clickIcon.$ATag_e.'</td>
2189 <tr class="bgColor4">
2190 <td nowrap="nowrap">'.$filenameAndIcon.' </td>
2191 <td>'.$ATag.'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/plusbullet2.gif','width="18" height="16"').' title="'.$LANG->getLL('addToList',1).'" alt="" />'.$ATag_e.'</td>
2192 <td nowrap="nowrap">'.($ATag2.'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/zoom2.gif','width="12" height="12"').' title="'.$LANG->getLL('info',1).'" alt="" /> '.$LANG->getLL('info',1).$ATag2_e).'</td>
2198 <td colspan="3"><img src="clear.gif" width="1" height="3" alt="" /></td>
2202 // Wrap all the rows in table tags:
2210 <table border="0" cellpadding="0" cellspacing="1" id="typo3-fileList">
2211 '.implode('',$lines).'
2214 // Return accumulated content for filelisting:
2219 * Render list of folders.
2221 * @param array List of folders. See t3lib_div::get_dirs
2222 * @param string If set a header with a folder icon and folder name are shown
2223 * @return string HTML output
2225 function folderList($baseFolder, $folders) {
2226 global $LANG, $BACK_PATH;
2230 // Create headline (showing number of folders):
2231 $content.=$this->barheader(
2232 sprintf($GLOBALS['LANG']->getLL('folders').' (%s):',count($folders))
2235 $titleLength = intval($GLOBALS['BE_USER']->uc
['titleLen']);
2237 // Create the header of current folder:
2239 if (strstr($baseFolder, ',') ||
strstr($baseFolder, '|')) {
2240 // In case an invalid character is in the filepath, display error message:
2241 $errorMessage = $LANG->JScharCode(sprintf($LANG->getLL('invalidChar'),', |'));
2242 $aTag = $aTag_alt = "<a href=\"#\" onclick=\"alert(".$errorMessage.");return false;\">";
2244 // If foldername is OK, just add it:
2245 $aTag = "<a href=\"#\" onclick=\"return insertElement('','".rawurlencode($baseFolder)."', 'folder', '".rawurlencode($baseFolder)."', unescape('".rawurlencode($baseFolder)."'), '".$fI['extension']."', '".$ficon."');\">";
2246 $aTag_alt = substr($aTag,0,-4).",'',1);\">";
2250 // add the foder icon
2251 $folderIcon = $aTag_alt;
2252 $folderIcon.= '<img'.t3lib_iconWorks
::skinImg(
2254 'gfx/i/_icon_webfolders.gif','width="18" height="16"'
2256 $folderIcon.= htmlspecialchars(
2257 t3lib_div
::fixed_lgd_cs(basename($baseFolder),$titleLength)
2259 $folderIcon.= $aTag_e;
2261 $content.=$folderIcon.'<br />';
2264 // Listing the folders:
2265 if(is_array($folders)) {
2266 if(count($folders) > 0) {
2267 // Traverse the folder list:
2269 foreach($folders as $folderPath) {
2270 $pathInfo = pathinfo($folderPath);
2272 // Create folder icon:
2273 $icon = '<img src="clear.gif" width="16" height="16" alt="" /><img'.t3lib_iconWorks
::skinImg($BACK_PATH, 'gfx/i/_icon_webfolders.gif','width="16" height="16"').' title="'.htmlspecialchars($pathInfo['basename'].$size).'" class="absmiddle" alt="" />';
2275 // Create links for adding the folder:
2276 if($this->P
['itemName'] != '' && $this->P
['formName'] != '') {
2277 $aTag = "<a href=\"#\" onclick=\"return set_folderpath(unescape('".rawurlencode($folderPath)."'));\">";
2279 $aTag = "<a href=\"#\" onclick=\"return insertElement('','".rawurlencode($folderPath)."', 'folder', '".rawurlencode($folderPath)."', unescape('".rawurlencode($folderPath)."'), '".$pathInfo['extension']."', '".$ficon."');\">";
2282 if (strstr($folderPath,',') ||
strstr($folderPath,'|')) {
2283 // In case an invalid character is in the filepath, display error message:
2284 $errorMessage = $LANG->JScharCode(sprintf($LANG->getLL('invalidChar'),', |'));
2285 $aTag = $aTag_alt = "<a href=\"#\" onclick=\"alert(".$errorMessage.");return false;\">";
2287 // If foldername is OK, just add it:
2288 $aTag_alt = substr($aTag,0,-4).",'',1);\">";
2292 // Combine icon and folderpath:
2293 $foldernameAndIcon = $aTag_alt.$icon.htmlspecialchars(
2294 t3lib_div
::fixed_lgd_cs(basename($folderPath),$titleLength)
2297 if($this->P
['itemName'] != '') {
2299 <tr class="bgColor4">
2300 <td nowrap="nowrap">'.$foldernameAndIcon.' </td>
2305 <tr class="bgColor4">
2306 <td nowrap="nowrap">'.$foldernameAndIcon.' </td>
2307 <td>'.$aTag.'<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/plusbullet2.gif','width="18" height="16"').' title="'.$LANG->getLL('addToList',1).'" alt="" />'.$aTag_e.'</td>
2314 <td colspan="3"><img src="clear.gif" width="1" height="3" alt="" /></td>
2319 // Wrap all the rows in table tags:
2325 <table border="0" cellpadding="0" cellspacing="1" id="typo3-folderList">
2326 '.implode('', $lines).'
2330 // Return accumulated content for folderlisting:
2335 * For RTE: This displays all IMAGES (gif,png,jpg) (from extensionList) from folder. Thumbnails are shown for images.
2336 * This listing is of images located in the web-accessible paths ONLY - the listing is for drag-n-drop use in the RTE
2338 * @param string The folder path to expand
2339 * @param string List of fileextensions to show
2340 * @return string HTML output
2342 function TBE_dragNDrop($expandFolder=0,$extensionList='') {
2345 $extensionList = ($extensionList == '*') ?
'' : $extensionList;
2346 $expandFolder = $expandFolder ?
$expandFolder : $this->expandFolder
;
2348 if ($expandFolder && $this->checkFolder($expandFolder)) {
2349 if ($this->isWebFolder($expandFolder)) {
2351 // Read files from directory:
2352 $files = t3lib_div
::getFilesInDir($expandFolder,$extensionList,1,1); // $extensionList="",$prependPath=0,$order='')
2353 if (is_array($files)) {
2354 $out.=$this->barheader(sprintf($GLOBALS['LANG']->getLL('files').' (%s):',count($files)));
2356 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
2357 $picon='<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/i/_icon_webfolders.gif','width="18" height="16"').' alt="" />';
2358 $picon.=htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($expandFolder),$titleLen));
2359 $out.=$picon.'<br />';
2364 // Add "drag-n-drop" message:
2367 <td colspan="2">'.$this->getMsgBox($GLOBALS['LANG']->getLL('findDragDrop')).'</td>
2371 while(list(,$filepath)=each($files)) {
2372 $fI = pathinfo($filepath);
2375 $iurl = $this->siteURL
.t3lib_div
::rawurlencodeFP(substr($filepath,strlen(PATH_site
)));
2377 // Show only web-images
2378 if (t3lib_div
::inList('gif,jpeg,jpg,png',strtolower($fI['extension']))) {
2379 $imgInfo = @getimagesize
($filepath);
2380 $pDim = $imgInfo[0].'x'.$imgInfo[1].' pixels';
2382 $ficon = t3lib_BEfunc
::getFileIcon(strtolower($fI['extension']));
2383 $size=' ('.t3lib_div
::formatSize(filesize($filepath)).'bytes'.($pDim?
', '.$pDim:'').')';
2384 $icon = '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/fileicons/'.$ficon,'width="18" height="16"').' class="absmiddle" title="'.htmlspecialchars($fI['basename'].$size).'" alt="" />';
2385 $filenameAndIcon=$icon.htmlspecialchars(t3lib_div
::fixed_lgd_cs(basename($filepath),$titleLen));
2387 if (t3lib_div
::_GP('noLimit')) {
2397 $IH=ceil($IH/$IW*$maxW);
2401 $IW=ceil($IW/$IH*$maxH);
2407 <tr class="bgColor4">
2408 <td nowrap="nowrap">'.$filenameAndIcon.' </td>
2409 <td nowrap="nowrap">'.
2410 ($imgInfo[0]!=$IW ?
'<a href="'.htmlspecialchars(t3lib_div
::linkThisScript(array('noLimit'=>'1'))).'">'.
2411 '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/icon_warning2.gif','width="18" height="16"').' title="'.$GLOBALS['LANG']->getLL('clickToRedrawFullSize',1).'" alt="" />'.
2418 <td colspan="2"><img src="'.$iurl.'" width="'.$IW.'" height="'.$IH.'" border="1" alt="" /></td>
2422 <td colspan="2"><img src="clear.gif" width="1" height="3" alt="" /></td>
2427 // Finally, wrap all rows in a table tag:
2432 File listing / Drag-n-drop
2434 <table border="0" cellpadding="0" cellspacing="1" id="typo3-dragBox">
2435 '.implode('',$lines).'
2439 // Print this warning if the folder is NOT a web folder:
2440 $out.=$this->barheader($GLOBALS['LANG']->getLL('files'));
2441 $out.=$this->getMsgBox($GLOBALS['LANG']->getLL('noWebFolder'),'icon_warning2');
2458 /******************************************************************
2460 * Miscellaneous functions
2462 ******************************************************************/
2466 * Verifies that a path is a web-folder:
2468 * @param string Absolute filepath
2469 * @return boolean If the input path is found in PATH_site then it returns true.
2471 function isWebFolder($folder) {
2472 $folder = rtrim($folder, '/').'/';
2473 return t3lib_div
::isFirstPartOfStr($folder,PATH_site
) ?
TRUE : FALSE;
2477 * Checks, if a path is within the mountpoints of the backend user
2479 * @param string Absolute filepath
2480 * @return boolean If the input path is found in the backend users filemounts, then return true.
2482 function checkFolder($folder) {
2483 return $this->fileProcessor
->checkPathAgainstMounts(rtrim($folder, '/') . '/') ?
true : false;
2487 * Checks, if a path is within a read-only mountpoint of the backend user
2489 * @param string Absolute filepath
2490 * @return boolean If the input path is found in the backend users filemounts and if the filemount is of type readonly, then return true.
2492 function isReadOnlyFolder($folder) {
2493 return ($GLOBALS['FILEMOUNTS'][$this->fileProcessor
->checkPathAgainstMounts(rtrim($folder, '/') . '/')]['type'] == 'readonly');
2497 * Prints a 'header' where string is in a tablecell
2499 * @param string The string to print in the header. The value is htmlspecialchars()'ed before output.
2500 * @return string The header HTML (wrapped in a table)
2502 function barheader($str) {
2508 <h3 class="bgColor5">'.htmlspecialchars($str).'</h3>
2513 * Displays a message box with the input message
2515 * @param string Input message to show (will be htmlspecialchars()'ed inside of this function)
2516 * @param string Icon filename body from gfx/ (default is "icon_note") - meant to allow change to warning type icons...
2517 * @return string HTML for the message (wrapped in a table).
2519 function getMsgBox($in_msg,$icon='icon_note') {
2522 $msg = '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/'.$icon.'.gif','width="18" height="16"').' alt="" />'.htmlspecialchars($in_msg);
2528 <table cellspacing="0" class="bgColor4" id="typo3-msgBox">
2538 * For RTE/link: This prints the 'currentUrl'
2540 * @param string URL value. The value is htmlspecialchars()'ed before output.
2541 * @return string HTML content, wrapped in a table.
2543 function printCurrentUrl($str) {
2549 <table border="0" cellpadding="0" cellspacing="0" class="bgColor5" id="typo3-curUrl">
2551 <td>'.$GLOBALS['LANG']->getLL('currentLink',1).': '.htmlspecialchars(rawurldecode($str)).'</td>
2557 * For RTE/link: Parses the incoming URL and determines if it's a page, file, external or mail address.
2559 * @param string HREF value tp analyse
2560 * @param string The URL of the current website (frontend)
2561 * @return array Array with URL information stored in assoc. keys: value, act (page, file, spec, mail), pageid, cElement, info
2563 function parseCurUrl($href,$siteUrl) {
2564 $href = trim($href);
2568 // Default is "url":
2569 $info['value']=$href;
2572 $specialParts = explode('#_SPECIAL',$href);
2573 if (count($specialParts)==2) { // Special kind (Something RTE specific: User configurable links through: "userLinks." from ->thisConfig)
2574 $info['value']='#_SPECIAL'.$specialParts[1];
2575 $info['act']='spec';
2576 } elseif (t3lib_div
::isFirstPartOfStr($href,$siteUrl)) { // If URL is on the current frontend website:
2577 $rel = substr($href,strlen($siteUrl));
2578 if (file_exists(PATH_site
.rawurldecode($rel))) { // URL is a file, which exists:
2579 $info['value']=rawurldecode($rel);
2580 if (@is_dir
(PATH_site
. $info['value'])) {
2581 $info['act'] = 'folder';
2583 $info['act'] = 'file';
2585 } else { // URL is a page (id parameter)
2586 $uP=parse_url($rel);
2587 if (!trim($uP['path'])) {
2588 $pp = preg_split('/^id=/', $uP['query']);
2589 $pp[1] = preg_replace( '/&id=[^&]*/', '', $pp[1]);
2590 $parameters = explode('&', $pp[1]);
2591 $id = array_shift($parameters);
2593 // Checking if the id-parameter is an alias.
2594 if (!t3lib_div
::testInt($id)) {
2595 list($idPartR) = t3lib_BEfunc
::getRecordsByField('pages','alias',$id);
2596 $id=intval($idPartR['uid']);
2599 $pageRow = t3lib_BEfunc
::getRecordWSOL('pages',$id);
2600 $titleLen=intval($GLOBALS['BE_USER']->uc
['titleLen']);
2601 $info['value']=$GLOBALS['LANG']->getLL('page',1)." '".htmlspecialchars(t3lib_div
::fixed_lgd_cs($pageRow['title'],$titleLen))."' (ID:".$id.($uP['fragment']?
', #'.$uP['fragment']:'').')';
2602 $info['pageid']=$id;
2603 $info['cElement']=$uP['fragment'];
2604 $info['act']='page';
2605 $info['query'] = $parameters[0]?
'&'.implode('&', $parameters):'';
2609 } else { // Email link:
2610 if (strtolower(substr($href,0,7))=='mailto:') {
2611 $info['value']=trim(substr($href,7));
2612 $info['act']='mail';
2615 $info['info'] = $info['value'];
2616 } else { // NO value inputted:
2618 $info['info']=$GLOBALS['LANG']->getLL('none');
2620 $info['act']='page';
2623 // let the hook have a look
2624 foreach($this->hookObjects
as $hookObject) {
2625 $info = $hookObject->parseCurrentUrl($href, $siteUrl, $info);
2632 * For TBE: Makes an upload form for uploading files to the filemount the user is browsing.
2633 * The files are uploaded to the tce_file.php script in the core which will handle the upload.
2635 * @param string Absolute filepath on server to which to upload.
2636 * @return string HTML for an upload form.
2638 function uploadForm($path) {
2641 if ($this->isReadOnlyFolder($path)) return '';
2643 // Read configuration of upload field count
2644 $userSetting = $GLOBALS['BE_USER']->getTSConfigVal('options.folderTree.uploadFieldsInLinkBrowser');
2645 $count = isset($userSetting) ?
$userSetting : 3;
2646 if ($count === '0') {
2649 $count = intval($count) == 0 ?
3 : intval($count);
2651 // Create header, showing upload path:
2652 $header = t3lib_div
::isFirstPartOfStr($path,PATH_site
)?
substr($path,strlen(PATH_site
)):$path;
2653 $code=$this->barheader($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.pagetitle',1).':');
2657 Form, for uploading files:
2659 <form action="'.$BACK_PATH.'tce_file.php" method="post" name="editform" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'">
2660 <table border="0" cellpadding="0" cellspacing="3" id="typo3-uplFiles">
2662 <td><strong>'.$GLOBALS['LANG']->getLL('path',1).':</strong> '.htmlspecialchars($header).'</td>
2667 // Traverse the number of upload fields (default is 3):
2668 for ($a=1;$a<=$count;$a++
) {
2669 $code.='<input type="file" name="upload_'.$a.'"'.$this->doc
->formWidth(35).' size="50" />
2670 <input type="hidden" name="file[upload]['.$a.'][target]" value="'.htmlspecialchars($path).'" />
2671 <input type="hidden" name="file[upload]['.$a.'][data]" value="'.$a.'" /><br />';
2674 // Make footer of upload form, including the submit button:
2675 $redirectValue = $this->thisScript
.'?act='.$this->act
.'&mode='.$this->mode
.'&expandFolder='.rawurlencode($path).'&bparams='.rawurlencode($this->bparams
);
2676 $code.='<input type="hidden" name="redirect" value="'.htmlspecialchars($redirectValue).'" />'.
2677 '<input type="submit" name="submit" value="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.submit',1).'" />';
2680 <div id="c-override">
2681 <input type="checkbox" name="overwriteExistingFiles" id="overwriteExistingFiles" value="1" /> <label for="overwriteExistingFiles">'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_misc.xml:overwriteExistingFiles',1).'</label>
2695 * For TBE: Makes a form for creating new folders in the filemount the user is browsing.
2696 * The folder creation request is sent to the tce_file.php script in the core which will handle the creation.
2698 * @param string Absolute filepath on server in which to create the new folder.
2699 * @return string HTML for the create folder form.
2701 function createFolder($path) {
2704 if ($this->isReadOnlyFolder($path)) return '';
2706 // Don't show Folder-create form if it's denied
2707 if ($GLOBALS['BE_USER']->getTSConfigVal('options.folderTree.hideCreateFolder')) {
2710 // Create header, showing upload path:
2711 $header = t3lib_div
::isFirstPartOfStr($path,PATH_site
)?
substr($path,strlen(PATH_site
)):$path;
2712 $code=$this->barheader($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_newfolder.php.pagetitle').':');
2716 Form, for creating new folders:
2718 <form action="'.$BACK_PATH.'tce_file.php" method="post" name="editform2">
2719 <table border="0" cellpadding="0" cellspacing="3" id="typo3-crFolder">
2721 <td><strong>'.$GLOBALS['LANG']->getLL('path',1).':</strong> '.htmlspecialchars($header).'</td>
2726 // Create the new-folder name field:
2728 $code.='<input'.$this->doc
->formWidth(20).' type="text" name="file[newfolder]['.$a.'][data]" />'.
2729 '<input type="hidden" name="file[newfolder]['.$a.'][target]" value="'.htmlspecialchars($path).'" />';
2731 // Make footer of upload form, including the submit button:
2732 $redirectValue = $this->thisScript
.'?act='.$this->act
.'&mode='.$this->mode
.'&expandFolder='.rawurlencode($path).'&bparams='.rawurlencode($this->bparams
);
2733 $code.='<input type="hidden" name="redirect" value="'.htmlspecialchars($redirectValue).'" />'.
2734 '<input type="submit" name="submit" value="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_newfolder.php.submit',1).'" />';
2745 * Get the HTML data required for a bulk selection of files of the TYPO3 Element Browser.
2747 * @param integer $filesCount: Number of files currently displayed
2748 * @return string HTML data required for a bulk selection of files - if $filesCount is 0, nothing is returned
2750 function getBulkSelector($filesCount) {
2752 $labelToggleSelection = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_browse_links.php:toggleSelection',1);
2753 $labelImportSelection = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_browse_links.php:importSelection',1);
2755 $out = $this->doc
->spacer(15).'<div>' .
2756 '<a href="#" onclick="BrowseLinks.Selector.toggle()">' .
2757 '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/clip_select.gif','width="12" height="12"').' title="'.$labelToggleSelection.'" alt="" /> ' .
2758 $labelToggleSelection.'</a>'.$this->doc
->spacer(5) .
2759 '<a href="#" onclick="BrowseLinks.Selector.handle()">' .
2760 '<img'.t3lib_iconWorks
::skinImg($BACK_PATH,'gfx/import.gif','width="12" height="12"').' title="'.$labelImportSelection.'" alt="" /> ' .
2761 $labelImportSelection.'</a>' .
2762 '</div>'.$this->doc
->spacer(15);
2769 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/class.browse_links.php']) {
2770 include_once($TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/class.browse_links.php']);