Fixed bug #16107: listNum = 0 not working anymore due to stdWrap changes (Thanks...
authorSusanne Moog <typo3@susannemoog.de>
Wed, 17 Nov 2010 09:03:43 +0000 (09:03 +0000)
committerSusanne Moog <typo3@susannemoog.de>
Wed, 17 Nov 2010 09:03:43 +0000 (09:03 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9430 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/cms/tslib/class.tslib_content.php

index bb2ae44..2b0fd99 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,7 @@
        * Added feature #16284: Optimize stdWrap usage for TypoScript content element LOAD_REGISTER (Thanks to Jo Hasenau)
        * Added feature #16285: Optimize stdWrap usage for TypoScript content element RECORDS (Thanks to Jo Hasenau)
        * Added feature #15916: Display a link to list module on sysfolders when in page module (Thanks to Georg Ringer)
+       * Fixed bug #16107: listNum = 0 not working anymore due to stdWrap changes (Thanks to Jo Hasenau)
 
 2010-11-17  Oliver Hader  <oliver@typo3.org>
 
index 9dad2a1..6a6667b 100644 (file)
@@ -249,166 +249,151 @@ class tslib_cObj {
         * @see stdWrap()
         */
        var $stdWrapOrder = array(
-               'stdWrapPreProcess' => 1, // this is a placeholder for the first Hook
-               'setContentToCurrent' => 1,
-               'setContentToCurrent.' => 1,
-               'setCurrent' => 1,
-               'setCurrent.' => 1,
-               'lang' => 1,
-               'lang.' => 1,
-               'data' => 1,
-               'data.' => 1,
-               'field' => 1,
-               'field.' => 1,
-               'current' => 1,
-               'current.' => 1,
-               'cObject' => 1,
-               'cObject.' => 1,
-               'numRows' => 1,
-               'numRows.' => 1,
-               'filelist' => 1,
-               'filelist.' => 1,
-               'preUserFunc' => 1,
-               'preUserFunc.' => 1,
-               'stdWrapOverride' => 1, // this is a placeholder for the second Hook
-               'override' => 1,
-               'override.' => 1,
-               'preIfEmptyListNum' => 1,
-               'preIfEmptyListNum.' => 1,
-               'ifEmpty' => 1,
-               'ifEmpty.' => 1,
-               'ifBlank' => 1,
-               'ifBlank.' => 1,
-               'listNum' => 1,
-               'listNum.' => 1,
-               'trim' => 1,
-               'trim.' => 1,
-               'stdWrap' => 1,
-               'stdWrap.' => 1,
-               'stdWrapProcess' => 1, // this is a placeholder for the third Hook
-               'required' => 1,
-               'required.' => 1,
-               'if' => 1,
-               'if.' => 1,
-               'fieldRequired' => 1,
-               'fieldRequired.' => 1,
-               'csConv' => 1,
-               'csConv.' => 1,
-               'parseFunc' => 1,
-               'parseFunc.' => 1,
-               'HTMLparser' => 1,
-               'HTMLparser.' => 1,
-               'split' => 1,
-               'split.' => 1,
-               'prioriCalc' => 1,
-               'prioriCalc.' => 1,
-               'char' => 1,
-               'char.' => 1,
-               'intval' => 1,
-               'intval.' => 1,
-               'numberFormat' => 1,
-               'numberFormat.' => 1,
-               'date' => 1,
-               'date.' => 1,
-               'strftime' => 1,
-               'strftime.' => 1,
-               'age' => 1,
-               'age.' => 1,
-               'case' => 1,
-               'case.' => 1,
-               'bytes' => 1,
-               'bytes.' => 1,
-               'substring' => 1,
-               'substring.' => 1,
-               'removeBadHTML' => 1,
-               'removeBadHTML.' => 1,
-               'cropHTML' => 1,
-               'cropHTML.' => 1,
-               'stripHtml' => 1,
-               'stripHtml.' => 1,
-               'crop' => 1,
-               'crop.' => 1,
-               'rawUrlEncode' => 1,
-               'rawUrlEncode.' => 1,
-               'htmlSpecialChars' => 1,
-               'htmlSpecialChars.' => 1,
-               'doubleBrTag' => 1,
-               'doubleBrTag.' => 1,
-               'br' => 1,
-               'br.' => 1,
-               'brTag' => 1,
-               'brTag.' => 1,
-               'encapsLines' => 1,
-               'encapsLines.' => 1,
-               'keywords' => 1,
-               'keywords.' => 1,
-               'innerWrap' => 1,
-               'innerWrap.' => 1,
-               'innerWrap2' => 1,
-               'innerWrap2.' => 1,
-               'fontTag' => 1,
-               'fontTag.' => 1,
-               'addParams' => 1,
-               'addParams.' => 1,
-               'textStyle' => 1,
-               'textStyle.' => 1,
-               'tableStyle' => 1,
-               'tableStyle.' => 1,
-               'filelink' => 1,
-               'filelink.' => 1,
-               'preCObject' => 1,
-               'preCObject.' => 1,
-               'postCObject' => 1,
-               'postCObject.' => 1,
-               'wrapAlign' => 1,
-               'wrapAlign.' => 1,
-               'typolink' => 1,
-               'typolink.' => 1,
-               'TCAselectItem' => 1,
-               'TCAselectItem.' => 1,
-               'space' => 1,
-               'space.' => 1,
-               'spaceBefore' => 1,
-               'spaceBefore.' => 1,
-               'spaceAfter' => 1,
-               'spaceAfter.' => 1,
-               'wrap' => 1,
-               'wrap.' => 1,
-               'noTrimWrap' => 1,
-               'noTrimWrap.' => 1,
-               'wrap2' => 1,
-               'wrap2.' => 1,
-               'dataWrap' => 1,
-               'dataWrap.' => 1,
-               'prepend' => 1,
-               'prepend.' => 1,
-               'append' => 1,
-               'append.' => 1,
-               'wrap3' => 1,
-               'wrap3.' => 1,
-               'outerWrap' => 1,
-               'outerWrap.' => 1,
-               'insertData' => 1,
-               'insertData.' => 1,
-               'offsetWrap' => 1,
-               'offsetWrap.' => 1,
-               'postUserFunc' => 1,
-               'postUserFunc.' => 1,
-               'postUserFuncInt' => 1,
-               'postUserFuncInt.' => 1,
-               'prefixComment' => 1,
-               'prefixComment.' => 1,
-               'editIcons' => 1,
-               'editIcons.' => 1,
-               'editPanel' => 1,
-               'editPanel.' => 1,
-               'stdWrapPostProcess' => 1, // this is a placeholder for the last Hook
-               'debug' => 1,
-               'debug.' => 1,
-               'debugFunc' => 1,
-               'debugFunc.' => 1,
-               'debugData' => 1,
-               'debugData.' => 1
+               'stdWrapPreProcess' => 'hook', // this is a placeholder for the first Hook
+               'setContentToCurrent' => 'boolean',
+               'setContentToCurrent.' => 'array',
+               'setCurrent' => 'string',
+               'setCurrent.' => 'array',
+               'lang.' => 'array',
+               'data' => 'getText',
+               'data.' => 'array',
+               'field' => 'fieldName',
+               'field.' => 'array',
+               'current' => 'boolean',
+               'current.' => 'array',
+               'cObject' => 'cObject',
+               'cObject.' => 'array',
+               'numRows.' => 'array',
+               'filelist' => 'dir',
+               'filelist.' => 'array',
+               'preUserFunc' => 'functionName',
+               'stdWrapOverride' => 'hook', // this is a placeholder for the second Hook
+               'override' => 'string',
+               'override.' => 'array',
+               'preIfEmptyListNum' => 'listNum',
+               'preIfEmptyListNum.' => 'array',
+               'ifEmpty' => 'string',
+               'ifEmpty.' => 'array',
+               'ifBlank' => 'string',
+               'ifBlank.' => 'array',
+               'listNum' => 'listNum',
+               'listNum.' => 'array',
+               'trim' => 'boolean',
+               'trim.' => 'array',
+               'stdWrap' => 'stdWrap',
+               'stdWrap.' => 'array',
+               'stdWrapProcess' => 'hook', // this is a placeholder for the third Hook
+               'required' => 'boolean',
+               'required.' => 'array',
+               'if.' => 'array',
+               'fieldRequired' => 'fieldName',
+               'fieldRequired.' => 'array',
+               'csConv' => 'string',
+               'csConv.' => 'array',
+               'parseFunc' => 'objectpath',
+               'parseFunc.' => 'array',
+               'HTMLparser' => 'boolean',
+               'HTMLparser.' => 'array',
+               'split.' => 'array',
+               'prioriCalc' => 'boolean',
+               'prioriCalc.' => 'array',
+               'char' => 'integer',
+               'char.' => 'array',
+               'intval' => 'boolean',
+               'intval.' => 'array',
+               'numberFormat.' => 'array',
+               'date' => 'dateconf',
+               'date.' => 'array',
+               'strftime' => 'strftimeconf',
+               'strftime.' => 'array',
+               'age' => 'boolean',
+               'age.' => 'array',
+               'case' => 'case',
+               'case.' => 'array',
+               'bytes' => 'boolean',
+               'bytes.' => 'array',
+               'substring' => 'parameters',
+               'substring.' => 'array',
+               'removeBadHTML' => 'boolean',
+               'removeBadHTML.' => 'array',
+               'cropHTML' => 'crop',
+               'cropHTML.' => 'array',
+               'stripHtml' => 'boolean',
+               'stripHtml.' => 'array',
+               'crop' => 'crop',
+               'crop.' => 'array',
+               'rawUrlEncode' => 'boolean',
+               'rawUrlEncode.' => 'array',
+               'htmlSpecialChars' => 'boolean',
+               'htmlSpecialChars.' => 'array',
+               'doubleBrTag' => 'string',
+               'doubleBrTag.' => 'array',
+               'br' => 'boolean',
+               'br.' => 'array',
+               'brTag' => 'string',
+               'brTag.' => 'array',
+               'encapsLines.' => 'array',
+               'keywords' => 'boolean',
+               'keywords.' => 'array',
+               'innerWrap' => 'wrap',
+               'innerWrap.' => 'array',
+               'innerWrap2' => 'wrap',
+               'innerWrap2.' => 'array',
+               'fontTag' => 'wrap',
+               'fontTag.' => 'array',
+               'addParams.' => 'array',
+               'textStyle.' => 'array',
+               'tableStyle.' => 'array',
+               'filelink.' => 'array',
+               'preCObject' => 'cObject',
+               'preCObject.' => 'array',
+               'postCObject' => 'cObject',
+               'postCObject.' => 'array',
+               'wrapAlign' => 'align',
+               'wrapAlign.' => 'array',
+               'typolink.' => 'array',
+               'TCAselectItem.' => 'array',
+               'space' => 'space',
+               'space.' => 'array',
+               'spaceBefore' => 'int',
+               'spaceBefore.' => 'array',
+               'spaceAfter' => 'int',
+               'spaceAfter.' => 'array',
+               'wrap' => 'wrap',
+               'wrap.' => 'array',
+               'noTrimWrap' => 'wrap',
+               'noTrimWrap.' => 'array',
+               'wrap2' => 'wrap',
+               'wrap2.' => 'array',
+               'dataWrap' => 'dataWrap',
+               'dataWrap.' => 'array',
+               'prepend' => 'cObject',
+               'prepend.' => 'array',
+               'append' => 'cObject',
+               'append.' => 'array',
+               'wrap3' => 'wrap',
+               'wrap3.' => 'array',
+               'outerWrap' => 'wrap',
+               'outerWrap.' => 'array',
+               'insertData' => 'boolean',
+               'insertData.' => 'array',
+               'offsetWrap' => 'space',
+               'offsetWrap.' => 'array',
+               'postUserFunc' => 'functionName',
+               'postUserFuncInt' => 'functionName',
+               'prefixComment' => 'string',
+               'prefixComment.' => 'array',
+               'editIcons' => 'string',
+               'editIcons.' => 'array',
+               'editPanel' => 'boolean',
+               'editPanel.' => 'array',
+               'stdWrapPostProcess' => 'hook', // this is a placeholder for the last Hook
+               'debug' => 'boolean',
+               'debug.' => 'array',
+               'debugFunc' => 'boolean',
+               'debugFunc.' => 'array',
+               'debugData' => 'boolean',
+               'debugData.' => 'array'
        );
 
        /**
@@ -1958,8 +1943,8 @@ class tslib_cObj {
                        // check, which of the available stdWrap functions is needed for the current conf Array
                        // and keep only those but still in the same order
                        $sortedConf = array_intersect_key($this->stdWrapOrder, $conf);
-                       // functions that should not make use of nested stdWrap function calls to avoid conflicts with internal TypoScript used by these functions
-                       $stdWrapDisabledFunctions = 'cObject,preUserFunc,stdWrap,preCObject,postCObject,prepend,append,postUserFunc,postUserFuncInt';
+                       // functions types that should not make use of nested stdWrap function calls to avoid conflicts with internal TypoScript used by these functions
+                       $stdWrapDisabledFunctionTypes = 'cObject,functionName,stdWrap';
                        // additional Array to check whether a function has already been executed
                        $isExecuted = array();
                        // additional switch to make sure 'required', 'if' and 'fieldRequired'
@@ -1969,9 +1954,10 @@ class tslib_cObj {
                        $this->stopRendering[$this->stdWrapRecursionLevel] = false;
 
                        // execute each funtion in the predefined order
-                       foreach ($sortedConf as $stdWrapName => $enabled) {
+                       foreach ($sortedConf as $stdWrapName => $functionType) {
                                // eliminate the second key of a pair 'key'|'key.' to make sure functions get called only once and check if rendering has been stopped
-                               if (!$isExecuted[$stdWrapName] && !$this->stopRendering[$this->stdWrapRecursionLevel]) {
+                               if (!$isExecuted[$stdWrapName] && 
+                                               !$this->stopRendering[$this->stdWrapRecursionLevel]) {
                                        $functionName = rtrim($stdWrapName, '.');
                                        $functionProperties = $functionName . '.';
                                        // if there is any code one the next level, check if it contains "official" stdWrap functions
@@ -1979,7 +1965,7 @@ class tslib_cObj {
                                        // so additional stdWrap calls within the functions can be removed, since the result will be the same
                                        // exception: the recursive stdWrap function and cObject will still be using their own stdWrap call, since it modifies the content and not a property
                                        if (count($conf[$functionProperties]) &&
-                                                       !t3lib_div::inList($stdWrapDisabledFunctions, $functionName)) {
+                                                       !t3lib_div::inList($stdWrapDisabledFunctionTypes, $functionType)) {
                                                if (array_intersect_key($this->stdWrapOrder, $conf[$functionProperties])) {
                                                        $conf[$functionName] = $this->stdWrap($conf[$functionName], $conf[$functionProperties]);
                                                }
@@ -1999,9 +1985,9 @@ class tslib_cObj {
                                        if ($conf[$functionName] == 'stdWrapHookObject') {
                                                $singleConf = $conf;
                                        }
-
                                        // check if key is still containing something, since it might have been changed by next level stdWrap before
-                                       if ($conf[$functionName] || $conf[$functionProperties]) {
+                                       if ((isset($conf[$functionName]) || $conf[$functionProperties]) &&
+                                                       !($functionType == 'boolean' && $conf[$functionName] === '0')) {
                                                //add both keys - with and without the dot - to the set of executed functions
                                                $isExecuted[$functionName] = true;
                                                $isExecuted[$functionProperties] = true;
@@ -7990,4 +7976,4 @@ if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class
        include_once ($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php']);
 }
 
-?>
+?>
\ No newline at end of file