Project

General

Profile

Bug #22410 » 14050_cleaning_t3lib_arraybrowser.patch

Administrator Admin, 2010-11-23 23:45

View differences:

t3lib/class.t3lib_arraybrowser.php (revision )
<?php
/***************************************************************
* Copyright notice
*
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
* Copyright notice
*
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Class for displaying an array as a tree
*
......
*
*
* 77: class t3lib_arrayBrowser
* 96: function tree($arr, $depth_in, $depthData)
* 96: function tree($arr, $depth_in, $depthData)
* 160: function wrapValue($theValue,$depth)
* 160: function wrapValue($theValue,$depth)
* 172: function wrapArrayKey($label,$depth,$theValue)
* 172: function wrapArrayKey($label,$depth,$theValue)
* 196: function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray)
* 196: function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray)
* 228: function fixed_lgd($string,$chars)
* 228: function fixed_lgd($string,$chars)
* 245: function depthKeys($arr,$settings)
* 245: function depthKeys($arr,$settings)
*
* TOTAL FUNCTIONS: 6
* (This index is automatically created/updated by the extension "extdeveval")
......
*/
/**
* Class for displaying an array as a tree
* See the extension 'lowlevel' /config (Backend module 'Tools > Configuration')
......
* @subpackage t3lib
* @see SC_mod_tools_config_index::main()
*/
class t3lib_arrayBrowser {
class t3lib_arrayBrowser {
var $expAll = FALSE; // If set, will expand all (depthKeys is obsolete then) (and no links are applied)
var $expAll = FALSE; // If set, will expand all (depthKeys is obsolete then) (and no links are applied)
var $dontLinkVar = FALSE; // If set, the variable keys are not linked.
var $dontLinkVar = FALSE; // If set, the variable keys are not linked.
var $depthKeys = array(); // Array defining which keys to expand. Typically set from outside from some session variable - otherwise the array will collapse.
var $depthKeys = array(); // Array defining which keys to expand. Typically set from outside from some session variable - otherwise the array will collapse.
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.
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.
var $fixedLgd=1; // If set, the values are truncated with "..." appended if longer than a certain length.
var $fixedLgd = 1; // If set, the values are truncated with "..." appended if longer than a certain length.
var $regexMode=0; // If set, search for string with regex, otherwise stristr()
var $regexMode = 0; // If set, search for string with regex, otherwise stristr()
var $searchKeysToo=FALSE; // If set, array keys are subject to the search too.
var $searchKeysToo = FALSE; // If set, array keys are subject to the search too.
var $varName=''; // Set var name here if you want links to the variable name.
var $varName = ''; // Set var name here if you want links to the variable name.
/**
* Make browsable tree
......
* @return string HTML for the tree
* @see SC_mod_tools_config_index::main()
*/
function tree($arr, $depth_in, $depthData) {
function tree($arr, $depth_in, $depthData) {
$HTML='';
$HTML = '';
$a=0;
$a = 0;
if ($depth_in) {$depth_in = $depth_in.'.';}
if ($depth_in) {
$depth_in = $depth_in . '.';
}
$c=count($arr);
$c = count($arr);
foreach ($arr as $key => $value) {
$a++;
$depth = $depth_in.$key;
$depth = $depth_in . $key;
$goto = 'a' . substr(md5($depth), 0, 6);
$deeper = (is_array($arr[$key]) && ($this->depthKeys[$depth] || $this->expAll)) ? 1 : 0;
$PM = 'join';
$LN = ($a==$c)?'blank':'line';
$LN = ($a == $c) ? 'blank' : 'line';
$BTM = ($a==$c)?'bottom':'';
$BTM = ($a == $c) ? 'bottom' : '';
$PM = is_array($arr[$key]) ? ($deeper ? 'minus':'plus') : 'join';
$PM = is_array($arr[$key]) ? ($deeper ? 'minus' : 'plus') : 'join';
$HTML.=$depthData;
$HTML .= $depthData;
$theIcon='<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/ol/'.$PM.$BTM.'.gif','width="18" height="16"').' align="top" border="0" alt="" />';
$theIcon = '<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/ol/' . $PM . $BTM . '.gif', 'width="18" height="16"') .
' align="top" border="0" alt="" />';
if ($PM=='join') {
if ($PM == 'join') {
$HTML.=$theIcon;
$HTML .= $theIcon;
} else {
$HTML.=
$HTML .=
($this->expAll ? '' : '<a id="' . $goto . '" href="' . htmlspecialchars('index.php?node[' . $depth . ']=' . ($deeper ? 0 : 1) . '#' . $goto) . '">') .
($this->expAll ? '' : '<a id="' . $goto . '" href="' . htmlspecialchars('index.php?node[' .
$depth . ']=' . ($deeper ? 0 : 1) . '#' . $goto) . '">') .
$theIcon.
$theIcon .
($this->expAll ? '' : '</a>');
($this->expAll ? '' : '</a>');
}
$label = $key;
$HTML.= $this->wrapArrayKey($label,$depth,!is_array($arr[$key]) ? $arr[$key] : '');
$HTML .= $this->wrapArrayKey($label, $depth, !is_array($arr[$key]) ? $arr[$key] : '');
if (!is_array($arr[$key])) {
if (!is_array($arr[$key])) {
$theValue = $arr[$key];
if ($this->fixedLgd) {
if ($this->fixedLgd) {
$imgBlocks = ceil(1+strlen($depthData)/77);
$imgBlocks = ceil(1 + strlen($depthData) / 77);
// debug($imgBlocks);
// debug($imgBlocks);
$lgdChars = 68-ceil(strlen('['.$key.']')*0.8)-$imgBlocks*3;
$lgdChars = 68 - ceil(strlen('[' . $key . ']') * 0.8) - $imgBlocks * 3;
$theValue = $this->fixed_lgd($theValue,$lgdChars);
$theValue = $this->fixed_lgd($theValue, $lgdChars);
}
if ($this->searchKeys[$depth]) {
if ($this->searchKeys[$depth]) {
$HTML.='=<span style="color:red;">'.$this->wrapValue($theValue,$depth).'</span>';
$HTML .= '=<span style="color:red;">' . $this->wrapValue($theValue, $depth) . '</span>';
} else {
$HTML.='='.$this->wrapValue($theValue,$depth);
$HTML .= '=' . $this->wrapValue($theValue, $depth);
}
}
$HTML.='<br />';
$HTML .= '<br />';
if ($deeper) {
if ($deeper) {
$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="" />');
$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="" />');
}
}
return $HTML;
......
* @param string Depth path
* @return string Title string, htmlspecialchars()'ed
*/
function wrapValue($theValue,$depth) {
function wrapValue($theValue, $depth) {
$wrappedValue = '';
if (strlen($theValue) > 0) {
$wrappedValue = '<strong>' . htmlspecialchars($theValue) . '</strong>';
......
* @param string The value for the array entry.
* @return string Title string, htmlspecialchars()'ed
*/
function wrapArrayKey($label,$depth,$theValue) {
function wrapArrayKey($label, $depth, $theValue) {
// Protect label:
$label = htmlspecialchars($label);
// If varname is set:
if ($this->varName && !$this->dontLinkVar) {
$variableName = $this->varName.'[\''.str_replace('.','\'][\'',$depth).'\'] = '.(!t3lib_div::testInt($theValue) ? '\''.addslashes($theValue).'\'' : $theValue).'; ';
$variableName = $this->varName . '[\'' . str_replace('.', '\'][\'', $depth) . '\'] = ' .
(!t3lib_div::testInt($theValue) ? '\'' . addslashes($theValue) . '\'' : $theValue) . '; ';
$label = '<a href="index.php?varname=' . urlencode($variableName) . '#varname">' . $label . '</a>';
}
// Return:
return '['.$label.']';
return '[' . $label . ']';
}
/**
......
* @param array Key array, for first call pass empty array
* @return array
*/
function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray) {
function getSearchKeys($keyArr, $depth_in, $searchString, $keyArray) {
$c=count($keyArr);
$c = count($keyArr);
if ($depth_in) {$depth_in = $depth_in.'.';}
if ($depth_in) {
$depth_in = $depth_in . '.';
}
foreach ($keyArr as $key => $value) {
$depth=$depth_in.$key;
$depth = $depth_in . $key;
$deeper = is_array($keyArr[$key]);
if ($this->regexMode) {
if ($this->regexMode) {
if (preg_match('/'.$searchString.'/',$keyArr[$key]) || ($this->searchKeysToo && preg_match('/'.$searchString.'/',$key))) { $this->searchKeys[$depth]=1; }
if (preg_match('/' . $searchString . '/', $keyArr[$key]) || ($this->searchKeysToo && preg_match('/' . $searchString . '/', $key))) {
$this->searchKeys[$depth] = 1;
}
} else {
if ((!$deeper && stristr($keyArr[$key], $searchString)) || ($this->searchKeysToo && stristr($key, $searchString))) {
$this->searchKeys[$depth] = 1;
}
}
if ($deeper) {
if ($deeper) {
$cS = count($this->searchKeys);
$keyArray = $this->getSearchKeys($keyArr[$key], $depth, $searchString, $keyArray);
if ($cS != count($this->searchKeys)) {
if ($cS != count($this->searchKeys)) {
$keyArray[$depth]=1;
$keyArray[$depth] = 1;
}
}
}
......
* @param integer Max number of chars
* @return string Processed string
*/
function fixed_lgd($string,$chars) {
function fixed_lgd($string, $chars) {
if ($chars >= 4) {
if ($chars >= 4) {
if(strlen($string)>$chars) {
if (strlen($string) > $chars) {
return substr($string, 0, $chars-3).'...';
return substr($string, 0, $chars - 3) . '...';
}
}
return $string;
......
* @return array Output depth_key array with entries added/removed based on $arr
* @see SC_mod_tools_config_index::main()
*/
function depthKeys($arr,$settings) {
function depthKeys($arr, $settings) {
$tsbrArray=array();
$tsbrArray = array();
foreach ($arr as $theK => $theV) {
$theKeyParts = explode('.',$theK);
$theKeyParts = explode('.', $theK);
$depth='';
$depth = '';
$c=count($theKeyParts);
$c = count($theKeyParts);
$a=0;
$a = 0;
foreach ($theKeyParts as $p) {
$a++;
$depth.=($depth?'.':'').$p;
$depth .= ($depth ? '.' : '') . $p;
$tsbrArray[$depth]= ($c==$a) ? $theV : 1;
$tsbrArray[$depth] = ($c == $a) ? $theV : 1;
}
}
// Modify settings
foreach ($tsbrArray as $theK => $theV) {
if ($theV) {
if ($theV) {
$settings[$theK] = 1;
} else {
unset($settings[$theK]);
......
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']) {
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_arraybrowser.php']);
}
?>
(5-5/93)