Documentation TYPO3 par Ameos |
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2004 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 ***************************************************************/ 00077 class t3lib_arrayBrowser { 00078 var $depthKeys = array(); // Array defining which keys to expand. Typically set from outside from some session variable - otherwise the array will collapse. 00079 var $searchKeys = array(); // After calling the getSearchKeys function this array is populated with the key-positions in the array which contains values matching the search. 00080 var $fixedLgd=1; // If set, the values are truncated with "..." appended if longer than a certain length. 00081 var $regexMode=0; // If set, search for string with regex, otherwise stristr() 00082 var $varName=''; // Set var name here if you want links to the variable name. 00083 00094 function tree($arr, $depth_in, $depthData) { 00095 $HTML=''; 00096 $a=0; 00097 00098 if ($depth_in) {$depth_in = $depth_in.'.';} 00099 00100 $c=count($arr); 00101 reset($arr); 00102 while (list($key,)=each($arr)) { 00103 $a++; 00104 $depth = $depth_in.$key; 00105 $goto = substr(md5($depth),0,6); 00106 00107 $deeper = (is_array($arr[$key]) && $this->depthKeys[$depth]) ? 1 : 0; 00108 $PM = 'join'; 00109 $LN = ($a==$c)?'blank':'line'; 00110 $BTM = ($a==$c)?'bottom':''; 00111 $PM = is_array($arr[$key]) ? ($deeper ? 'minus':'plus') : 'join'; 00112 00113 00114 $HTML.=$depthData; 00115 $theIcon='<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/ol/'.$PM.$BTM.'.gif','width="18" height="16"').' align="top" border="0" alt="" />'; 00116 if ($PM=='join') { 00117 $HTML.=$theIcon; 00118 } else { 00119 $HTML.='<a name="'.$goto.'" href="'.htmlspecialchars('index.php?node['.$depth.']='.($deeper?0:1).'#'.$goto).'">'.$theIcon.'</a>'; 00120 } 00121 00122 $label = $key; 00123 $HTML.= $this->wrapArrayKey($label,$depth,!is_array($arr[$key]) ? $arr[$key] : ''); 00124 00125 if (!is_array($arr[$key])) { 00126 $theValue = $arr[$key]; 00127 if ($this->fixedLgd) { 00128 $imgBlocks = ceil(1+strlen($depthData)/77); 00129 // debug($imgBlocks); 00130 $lgdChars = 68-ceil(strlen('['.$key.']')*0.8)-$imgBlocks*3; 00131 $theValue = $this->fixed_lgd($theValue,$lgdChars); 00132 } 00133 if ($this->searchKeys[$depth]) { 00134 $HTML.='=<span style="color:red;">'.$this->wrapValue($theValue,$depth).'</font>'; 00135 } else { 00136 $HTML.='='.$this->wrapValue($theValue,$depth); 00137 } 00138 } 00139 $HTML.='<br />'; 00140 00141 if ($deeper) { 00142 $HTML.=$this->tree($arr[$key], $depth, $depthData.'<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/ol/'.$LN.'.gif','width="18" height="16"').' align="top" alt="" />'); 00143 } 00144 } 00145 return $HTML; 00146 } 00147 00155 function wrapValue($theValue,$depth) { 00156 return '<b>'.htmlspecialchars($theValue).'</b>'; 00157 } 00158 00167 function wrapArrayKey($label,$depth,$theValue) { 00168 00169 // Protect label: 00170 $label = htmlspecialchars($label); 00171 00172 // If varname is set: 00173 if ($this->varName) { 00174 $variableName = $this->varName.'[\''.str_replace('.','\'][\'',$depth).'\'] = '.(!t3lib_div::testInt($theValue) ? '\''.addslashes($theValue).'\'' : $theValue).'; '; 00175 $label = '<a href="'.htmlspecialchars('index.php?varname='.$variableName.'#varname').'">'.$label.'</a>'; 00176 } 00177 00178 // Return: 00179 return '['.$label.']'; 00180 } 00181 00191 function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray) { 00192 reset($keyArr); 00193 $c=count($keyArr); 00194 if ($depth_in) {$depth_in = $depth_in.'.';} 00195 while (list($key,)=each($keyArr)) { 00196 $depth=$depth_in.$key; 00197 $deeper = is_array($keyArr[$key]); 00198 00199 if ($this->regexMode) { 00200 if (ereg($searchString,$keyArr[$key])) { $this->searchKeys[$depth]=1; } 00201 } else { 00202 if (stristr($keyArr[$key],$searchString)) { $this->searchKeys[$depth]=1; } 00203 } 00204 00205 if ($deeper) { 00206 $cS = count($this->searchKeys); 00207 $keyArray = $this->getSearchKeys($keyArr[$key], $depth, $searchString, $keyArray); 00208 if ($cS != count($this->searchKeys)) { 00209 $keyArray[$depth]=1; 00210 } 00211 } 00212 } 00213 return $keyArray; 00214 } 00215 00223 function fixed_lgd($string,$chars) { 00224 if ($chars >= 4) { 00225 if(strlen($string)>$chars) { 00226 return substr($string, 0, $chars-3).'...'; 00227 } 00228 } 00229 return $string; 00230 } 00231 00240 function depthKeys($arr,$settings) { 00241 $tsbrArray=array(); 00242 reset($arr); 00243 while(list($theK,$theV)=each($arr)) { 00244 $theKeyParts = explode('.',$theK); 00245 $depth=''; 00246 $c=count($theKeyParts); 00247 $a=0; 00248 while(list(,$p)=each($theKeyParts)) { 00249 $a++; 00250 $depth.=($depth?'.':'').$p; 00251 $tsbrArray[$depth]= ($c==$a) ? $theV : 1; 00252 } 00253 } 00254 // Modify settings 00255 reset($tsbrArray); 00256 while(list($theK,$theV)=each($tsbrArray)) { 00257 if ($theV) { 00258 $settings[$theK] = 1; 00259 } else { 00260 unset($settings[$theK]); 00261 } 00262 } 00263 return $settings; 00264 } 00265 } 00266 00267 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']) { 00268 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']); 00269 } 00270 ?>