[ Index ]
 

Code source de Typo3 4.1.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/t3lib/ -> class.t3lib_arraybrowser.php (source)

   1  <?php
   2  /***************************************************************
   3  *  Copyright notice
   4  *
   5  *  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
   6  *  All rights reserved
   7  *
   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.
  13  *
  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.
  18  *
  19  *
  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.
  24  *
  25  *  This copyright notice MUST APPEAR in all copies of the script!
  26  ***************************************************************/
  27  /**
  28   * Class for displaying an array as a tree
  29   *
  30   * $Id: class.t3lib_arraybrowser.php 1421 2006-04-10 09:27:15Z mundaun $
  31   * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
  32   * XHTML compliant
  33   *
  34   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
  35   */
  36  /**
  37   * [CLASS/FUNCTION INDEX of SCRIPT]
  38   *
  39   *
  40   *
  41   *   77: class t3lib_arrayBrowser
  42   *   96:     function tree($arr, $depth_in, $depthData)
  43   *  160:     function wrapValue($theValue,$depth)
  44   *  172:     function wrapArrayKey($label,$depth,$theValue)
  45   *  196:     function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray)
  46   *  228:     function fixed_lgd($string,$chars)
  47   *  245:     function depthKeys($arr,$settings)
  48   *
  49   * TOTAL FUNCTIONS: 6
  50   * (This index is automatically created/updated by the extension "extdeveval")
  51   *
  52   */
  53  
  54  
  55  
  56  
  57  
  58  
  59  
  60  
  61  
  62  
  63  
  64  
  65  
  66  
  67  
  68  /**
  69   * Class for displaying an array as a tree
  70   * See the extension 'lowlevel' /config (Backend module 'Tools > Configuration')
  71   *
  72   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
  73   * @package TYPO3
  74   * @subpackage t3lib
  75   * @see SC_mod_tools_config_index::main()
  76   */
  77  class t3lib_arrayBrowser    {
  78      var $expAll = FALSE;            // If set, will expand all (depthKeys is obsolete then) (and no links are applied)
  79      var $dontLinkVar = FALSE;        // If set, the variable keys are not linked.
  80      var $depthKeys = array();        // Array defining which keys to expand. Typically set from outside from some session variable - otherwise the array will collapse.
  81      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.
  82      var $fixedLgd=1;                // If set, the values are truncated with "..." appended if longer than a certain length.
  83      var $regexMode=0;                // If set, search for string with regex, otherwise stristr()
  84      var $varName='';                // Set var name here if you want links to the variable name.
  85  
  86      /**
  87       * Make browsable tree
  88       * Before calling this function you may want to set some of the internal vars like depthKeys, regexMode and fixedLgd. For examples see SC_mod_tools_config_index::main()
  89       *
  90       * @param    array        The array to display
  91       * @param    string        Key-position id. Build up during recursive calls - [key1].[key2].[key3] - an so on.
  92       * @param    string        Depth-data - basically a prefix for the icons. For calling this function from outside, let it stay blank.
  93       * @return    string        HTML for the tree
  94       * @see SC_mod_tools_config_index::main()
  95       */
  96  	function tree($arr, $depth_in, $depthData)    {
  97          $HTML='';
  98          $a=0;
  99  
 100          if ($depth_in)    {$depth_in = $depth_in.'.';}
 101  
 102          $c=count($arr);
 103          reset($arr);
 104          while (list($key,)=each($arr))    {
 105              $a++;
 106              $depth = $depth_in.$key;
 107              $goto = substr(md5($depth),0,6);
 108  
 109              $deeper = (is_array($arr[$key]) && ($this->depthKeys[$depth] || $this->expAll)) ? 1 : 0;
 110              $PM = 'join';
 111              $LN = ($a==$c)?'blank':'line';
 112              $BTM = ($a==$c)?'bottom':'';
 113              $PM = is_array($arr[$key]) ? ($deeper ? 'minus':'plus') : 'join';
 114  
 115  
 116              $HTML.=$depthData;
 117              $theIcon='<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/ol/'.$PM.$BTM.'.gif','width="18" height="16"').' align="top" border="0" alt="" />';
 118              if ($PM=='join')    {
 119                  $HTML.=$theIcon;
 120              } else {
 121                  $HTML.=
 122                      ($this->expAll ? '' : '<a name="'.$goto.'" href="'.htmlspecialchars('index.php?node['.$depth.']='.($deeper?0:1).'#'.$goto).'">').
 123                      $theIcon.
 124                      ($this->expAll ? '' : '</a>');
 125              }
 126  
 127              $label = $key;
 128              $HTML.= $this->wrapArrayKey($label,$depth,!is_array($arr[$key]) ? $arr[$key] : '');
 129  
 130              if (!is_array($arr[$key]))    {
 131                  $theValue = $arr[$key];
 132                  if ($this->fixedLgd)    {
 133                      $imgBlocks = ceil(1+strlen($depthData)/77);
 134  //                    debug($imgBlocks);
 135                      $lgdChars = 68-ceil(strlen('['.$key.']')*0.8)-$imgBlocks*3;
 136                      $theValue = $this->fixed_lgd($theValue,$lgdChars);
 137                  }
 138                  if ($this->searchKeys[$depth])    {
 139                      $HTML.='=<span style="color:red;">'.$this->wrapValue($theValue,$depth).'</font>';
 140                  } else {
 141                      $HTML.='='.$this->wrapValue($theValue,$depth);
 142                  }
 143              }
 144              $HTML.='<br />';
 145  
 146              if ($deeper)    {
 147                  $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="" />');
 148              }
 149          }
 150          return $HTML;
 151      }
 152  
 153      /**
 154       * Wrapping the value in bold tags etc.
 155       *
 156       * @param    string        The title string
 157       * @param    string        Depth path
 158       * @return    string        Title string, htmlspecialchars()'ed
 159       */
 160  	function wrapValue($theValue,$depth)    {
 161          return '<b>'.htmlspecialchars($theValue).'</b>';
 162      }
 163  
 164      /**
 165       * Wrapping the value in bold tags etc.
 166       *
 167       * @param    string        The title string
 168       * @param    string        Depth path
 169       * @param    string        The value for the array entry.
 170       * @return    string        Title string, htmlspecialchars()'ed
 171       */
 172  	function wrapArrayKey($label,$depth,$theValue)    {
 173  
 174              // Protect label:
 175          $label = htmlspecialchars($label);
 176  
 177              // If varname is set:
 178          if ($this->varName && !$this->dontLinkVar) {
 179              $variableName = $this->varName.'[\''.str_replace('.','\'][\'',$depth).'\'] = '.(!t3lib_div::testInt($theValue) ? '\''.addslashes($theValue).'\'' : $theValue).'; ';
 180              $label = '<a href="'.htmlspecialchars('index.php?varname='.$variableName.'#varname').'">'.$label.'</a>';
 181          }
 182  
 183              // Return:
 184          return '['.$label.']';
 185      }
 186  
 187      /**
 188       * Creates an array with "depthKeys" which will expand the array to show the search results
 189       *
 190       * @param    array        The array to search for the value
 191       * @param    string        Depth string - blank for first call (will build up during recursive calling creating an id of the position: [key1].[key2].[key3]
 192       * @param    string        The string to search for
 193       * @param    array        Key array, for first call pass empty array
 194       * @return    array
 195       */
 196  	function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray)        {
 197          reset($keyArr);
 198          $c=count($keyArr);
 199          if ($depth_in)    {$depth_in = $depth_in.'.';}
 200          while (list($key,)=each($keyArr))    {
 201              $depth=$depth_in.$key;
 202              $deeper = is_array($keyArr[$key]);
 203  
 204              if ($this->regexMode)    {
 205                  if (ereg($searchString,$keyArr[$key]))    {    $this->searchKeys[$depth]=1;    }
 206              } else {
 207                  if (stristr($keyArr[$key],$searchString))    {    $this->searchKeys[$depth]=1;    }
 208              }
 209  
 210              if ($deeper)    {
 211                  $cS = count($this->searchKeys);
 212                  $keyArray = $this->getSearchKeys($keyArr[$key], $depth, $searchString, $keyArray);
 213                  if ($cS != count($this->searchKeys))    {
 214                      $keyArray[$depth]=1;
 215                  }
 216              }
 217          }
 218          return $keyArray;
 219      }
 220  
 221      /**
 222       * Fixed length function
 223       *
 224       * @param    string        String to process
 225       * @param    integer        Max number of chars
 226       * @return    string        Processed string
 227       */
 228  	function fixed_lgd($string,$chars)    {
 229          if ($chars >= 4)    {
 230              if(strlen($string)>$chars)  {
 231                  return substr($string, 0, $chars-3).'...';
 232              }
 233          }
 234          return $string;
 235      }
 236  
 237      /**
 238       * Function modifying the depthKey array
 239       *
 240       * @param    array        Array with instructions to open/close nodes.
 241       * @param    array        Input depth_key array
 242       * @return    array        Output depth_key array with entries added/removed based on $arr
 243       * @see SC_mod_tools_config_index::main()
 244       */
 245  	function depthKeys($arr,$settings)    {
 246          $tsbrArray=array();
 247          reset($arr);
 248          while(list($theK,$theV)=each($arr))    {
 249              $theKeyParts = explode('.',$theK);
 250              $depth='';
 251              $c=count($theKeyParts);
 252              $a=0;
 253              while(list(,$p)=each($theKeyParts))    {
 254                  $a++;
 255                  $depth.=($depth?'.':'').$p;
 256                  $tsbrArray[$depth]= ($c==$a) ? $theV : 1;
 257              }
 258          }
 259              // Modify settings
 260          reset($tsbrArray);
 261          while(list($theK,$theV)=each($tsbrArray))    {
 262              if ($theV)    {
 263                  $settings[$theK] = 1;
 264              } else {
 265                  unset($settings[$theK]);
 266              }
 267          }
 268          return $settings;
 269      }
 270  }
 271  
 272  if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php'])    {
 273      include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']);
 274  }
 275  ?>


Généré le : Sun Nov 25 17:13:16 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics