Main Page | Directories | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages | Examples

class.t3lib_arraybrowser.php

Go to the documentation of this file.
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 ?>

Generated on Sun Oct 3 01:05:45 2004 for TYPO3core 3.7.0 dev by  doxygen 1.3.8-20040913