"TYPO3 4.0.1: typo3_src-4.0.1/t3lib/class.t3lib_foldertree.php Source File", "datetime" => "Sat Dec 2 19:22:18 2006", "date" => "2 Dec 2006", "doxygenversion" => "1.4.6", "projectname" => "TYPO3 4.0.1", "projectnumber" => "4.0.1" ); get_header($doxygen_vars); ?>
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00058 require_once (PATH_t3lib.'class.t3lib_treeview.php'); 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00082 class t3lib_folderTree extends t3lib_treeView { 00083 00089 function t3lib_folderTree() { 00090 parent::init(); 00091 00092 $this->MOUNTS = $GLOBALS['FILEMOUNTS']; 00093 00094 $this->treeName='folder'; 00095 $this->titleAttrib=''; //don't apply any title 00096 $this->domIdPrefix = 'folder'; 00097 } 00098 00107 function wrapIcon($icon,$row) { 00108 // Add title attribute to input icon tag 00109 $theFolderIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.$this->getTitleAttrib($row).'"' : '')); 00110 00111 // Wrap icon in click-menu link. 00112 if (!$this->ext_IconMode) { 00113 $theFolderIcon = $GLOBALS['TBE_TEMPLATE']->wrapClickMenuOnIcon($theFolderIcon,$row['path'],'',0); 00114 } elseif (!strcmp($this->ext_IconMode,'titlelink')) { 00115 $aOnClick = 'return jumpTo(\''.$this->getJumpToParam($row).'\',this,\''.$this->domIdPrefix.$this->getId($row).'\','.$this->bank.');'; 00116 $theFolderIcon='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$theFolderIcon.'</a>'; 00117 } 00118 return $theFolderIcon; 00119 } 00120 00130 function wrapTitle($title,$row,$bank=0) { 00131 $aOnClick = 'return jumpTo(\''.$this->getJumpToParam($row).'\',this,\''.$this->domIdPrefix.$this->getId($row).'\','.$bank.');'; 00132 $CSM = ''; 00133 if ($GLOBALS['TYPO3_CONF_VARS']['BE']['useOnContextMenuHandler']) { 00134 $CSM = ' oncontextmenu="'.htmlspecialchars($GLOBALS['TBE_TEMPLATE']->wrapClickMenuOnIcon('',$row['path'],'',0,'','',TRUE)).'"'; 00135 } 00136 return '<a href="#" title="'.htmlspecialchars($row['title']).'" onclick="'.htmlspecialchars($aOnClick).'"'.$CSM.'>'.$title.'</a>'; 00137 } 00138 00145 function getId($v) { 00146 return t3lib_div::md5Int($v['path']); 00147 } 00148 00155 function getJumpToParam($v) { 00156 return rawurlencode($v['path']); 00157 } 00158 00167 function getTitleStr($row,$titleLen=30) { 00168 return $row['_title'] ? $row['_title'] : parent::getTitleStr($row,$titleLen); 00169 } 00170 00177 function getBrowsableTree() { 00178 00179 // Get stored tree structure AND updating it if needed according to incoming PM GET var. 00180 $this->initializePositionSaving(); 00181 00182 // Init done: 00183 $titleLen=intval($this->BE_USER->uc['titleLen']); 00184 $treeArr=array(); 00185 00186 // Traverse mounts: 00187 foreach($this->MOUNTS as $key => $val) { 00188 $md5_uid = md5($val['path']); 00189 $specUID=hexdec(substr($md5_uid,0,6)); 00190 $this->specUIDmap[$specUID]=$val['path']; 00191 00192 // Set first: 00193 $this->bank=$val['nkey']; 00194 $isOpen = $this->stored[$val['nkey']][$specUID] || $this->expandFirst; 00195 $this->reset(); 00196 00197 // Set PM icon: 00198 $cmd=$this->bank.'_'.($isOpen?'0_':'1_').$specUID.'_'.$this->treeName; 00199 $icon='<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.($isOpen?'minus':'plus').'only.gif','width="18" height="16"').' alt="" />'; 00200 $firstHtml= $this->PM_ATagWrap($icon,$cmd); 00201 00202 switch($val['type']) { 00203 case 'user': $icon = 'gfx/i/_icon_ftp_user.gif'; break; 00204 case 'group': $icon = 'gfx/i/_icon_ftp_group.gif'; break; 00205 default: $icon = 'gfx/i/_icon_ftp.gif'; break; 00206 } 00207 00208 // Preparing rootRec for the mount 00209 $firstHtml.=$this->wrapIcon('<img'.t3lib_iconWorks::skinImg($this->backPath,$icon,'width="18" height="16"').' alt="" />',$val); 00210 $row=array(); 00211 $row['path']=$val['path']; 00212 $row['uid']=$specUID; 00213 $row['title']=$val['name']; 00214 00215 // Add the root of the mount to ->tree 00216 $this->tree[]=array('HTML'=>$firstHtml,'row'=>$row,'bank'=>$this->bank); 00217 00218 // If the mount is expanded, go down: 00219 if ($isOpen) { 00220 // Set depth: 00221 $depthD='<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/blank.gif','width="18" height="16"').' alt="" />'; 00222 $this->getFolderTree($val['path'],999,$depthD); 00223 } 00224 00225 // Add tree: 00226 $treeArr=array_merge($treeArr,$this->tree); 00227 } 00228 return $this->printTree($treeArr); 00229 } 00230 00240 function getFolderTree($files_path, $depth=999, $depthData='') { 00241 00242 // This generates the directory tree 00243 $dirs = t3lib_div::get_dirs($files_path); 00244 00245 $c=0; 00246 if (is_array($dirs)) { 00247 $depth=intval($depth); 00248 $HTML=''; 00249 $a=0; 00250 $c=count($dirs); 00251 sort($dirs); 00252 00253 foreach($dirs as $key => $val) { 00254 $a++; 00255 $this->tree[]=array(); // Reserve space. 00256 end($this->tree); 00257 $treeKey = key($this->tree); // Get the key for this space 00258 $LN = ($a==$c)?'blank':'line'; 00259 00260 $val = ereg_replace('^\./','',$val); 00261 $title = $val; 00262 $path = $files_path.$val.'/'; 00263 $webpath=t3lib_BEfunc::getPathType_web_nonweb($path); 00264 00265 $md5_uid = md5($path); 00266 $specUID=hexdec(substr($md5_uid,0,6)); 00267 $this->specUIDmap[$specUID]=$path; 00268 $row=array(); 00269 $row['path']=$path; 00270 $row['uid']=$specUID; 00271 $row['title']=$title; 00272 00273 if ($depth>1 && $this->expandNext($specUID)) { 00274 $nextCount=$this->getFolderTree( 00275 $path, 00276 $depth-1, 00277 $this->makeHTML ? $depthData.'<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.$LN.'.gif','width="18" height="16"').' alt="" />' : '' 00278 ); 00279 $exp=1; // Set "did expand" flag 00280 } else { 00281 $nextCount=$this->getCount($path); 00282 $exp=0; // Clear "did expand" flag 00283 } 00284 00285 // Set HTML-icons, if any: 00286 if ($this->makeHTML) { 00287 $HTML=$depthData.$this->PMicon($row,$a,$c,$nextCount,$exp); 00288 00289 $icon = 'gfx/i/_icon_'.$webpath.'folders.gif'; 00290 if ($val=='_temp_') { 00291 $icon = 'gfx/i/sysf.gif'; 00292 $row['title']='TEMP'; 00293 $row['_title']='<b>TEMP</b>'; 00294 } 00295 if ($val=='_recycler_') { 00296 $icon = 'gfx/i/recycler.gif'; 00297 $row['title']='RECYCLER'; 00298 $row['_title']='<b>RECYCLER</b>'; 00299 } 00300 $HTML.=$this->wrapIcon('<img'.t3lib_iconWorks::skinImg($this->backPath,$icon,'width="18" height="16"').' alt="" />',$row); 00301 } 00302 00303 // Finally, add the row/HTML content to the ->tree array in the reserved key. 00304 $this->tree[$treeKey] = Array( 00305 'row'=>$row, 00306 'HTML'=>$HTML, 00307 'bank'=>$this->bank 00308 ); 00309 } 00310 } 00311 return $c; 00312 } 00313 00320 function getCount($files_path) { 00321 // This generates the directory tree 00322 $dirs = t3lib_div::get_dirs($files_path); 00323 $c=0; 00324 if (is_array($dirs)) { 00325 $c=count($dirs); 00326 } 00327 return $c; 00328 } 00329 00336 function initializePositionSaving() { 00337 // Get stored tree structure: 00338 $this->stored=unserialize($this->BE_USER->uc['browseTrees'][$this->treeName]); 00339 00340 // Mapping md5-hash to shorter number: 00341 $hashMap=array(); 00342 foreach($this->MOUNTS as $key => $val) { 00343 $nkey = hexdec(substr($key,0,4)); 00344 $hashMap[$nkey]=$key; 00345 $this->MOUNTS[$key]['nkey']=$nkey; 00346 } 00347 00348 // PM action: 00349 // (If an plus/minus icon has been clicked, the PM GET var is sent and we must update the stored positions in the tree): 00350 $PM = explode('_',t3lib_div::_GP('PM')); // 0: mount key, 1: set/clear boolean, 2: item ID (cannot contain "_"), 3: treeName 00351 if (count($PM)==4 && $PM[3]==$this->treeName) { 00352 if (isset($this->MOUNTS[$hashMap[$PM[0]]])) { 00353 if ($PM[1]) { // set 00354 $this->stored[$PM[0]][$PM[2]]=1; 00355 $this->savePosition($this->treeName); 00356 } else { // clear 00357 unset($this->stored[$PM[0]][$PM[2]]); 00358 $this->savePosition($this->treeName); 00359 } 00360 } 00361 } 00362 } 00363 } 00364 00365 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_foldertree.php']) { 00366 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_foldertree.php']); 00367 } 00368 ?>