Fixed bug #12295: Cleaning config_default, exclude values from being listed in instal...
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_tstemplate.php
old mode 100755 (executable)
new mode 100644 (file)
index 42fa05b..e5dc1fc
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -80,8 +80,6 @@
  *
  */
 
  *
  */
 
-require_once (PATH_t3lib.'class.t3lib_tsparser.php');
-require_once (PATH_t3lib.'class.t3lib_matchcondition.php');
 
 
 
 
 
 
@@ -225,10 +223,20 @@ class t3lib_TStemplate    {
                }
 
                        // Sets the paths from where TypoScript resources are allowed to be used:
                }
 
                        // Sets the paths from where TypoScript resources are allowed to be used:
-               $this->allowedPaths = Array ('media/','fileadmin/','uploads/','typo3temp/','t3lib/fonts/',TYPO3_mainDir.'ext/',TYPO3_mainDir.'sysext/','typo3conf/ext/');
+               $this->allowedPaths = Array(
+                       'media/',
+                       'fileadmin/',
+                       'uploads/',
+                       'typo3temp/',
+                       't3lib/fonts/',
+                       TYPO3_mainDir . 'ext/',
+                       TYPO3_mainDir . 'sysext/',
+                       TYPO3_mainDir . 'contrib/',
+                       'typo3conf/ext/'
+               );
                if ($GLOBALS['TYPO3_CONF_VARS']['FE']['addAllowedPaths'])       {
                if ($GLOBALS['TYPO3_CONF_VARS']['FE']['addAllowedPaths'])       {
-                       $pathArr = t3lib_div::trimExplode(',',$GLOBALS['TYPO3_CONF_VARS']['FE']['addAllowedPaths'],1);
-                       while(list(,$p)=each($pathArr)) {
+                       $pathArr = t3lib_div::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['FE']['addAllowedPaths'], true);
+                       foreach ($pathArr as $p) {
                                        // Once checked for path, but as this may run from typo3/mod/web/ts/ dir, that'll not work!! So the paths ar uncritically included here.
                                $this->allowedPaths[] = $p;
                        }
                                        // Once checked for path, but as this may run from typo3/mod/web/ts/ dir, that'll not work!! So the paths ar uncritically included here.
                                $this->allowedPaths[] = $p;
                        }
@@ -254,15 +262,23 @@ class t3lib_TStemplate    {
         */
        function getCurrentPageData() {
                $currentPageData = false;
         */
        function getCurrentPageData() {
                $currentPageData = false;
-               $pageSectionCache = $GLOBALS['typo3CacheManager']->getCache('cache_pagesection');
-               /* @var $pageSectionCache t3lib_cache_AbstractCache */
+               if (TYPO3_UseCachingFramework) {
+                       $pageSectionCache = $GLOBALS['typo3CacheManager']->getCache('cache_pagesection');
+                       /* @var $pageSectionCache t3lib_cache_AbstractCache */
 
 
-               $cacheEntry = $pageSectionCache->load(
-                       intval($GLOBALS['TSFE']->id) . '_' . t3lib_div::md5int($GLOBALS['TSFE']->MP)
-               );
+                       $cacheEntry = $pageSectionCache->get(
+                               intval($GLOBALS['TSFE']->id) . '_' . t3lib_div::md5int($GLOBALS['TSFE']->MP)
+                       );
 
 
-               if ($cacheEntry) {
-                       $currentPageData = unserialize($cacheEntry);
+                       if ($cacheEntry) {
+                               $currentPageData = unserialize($cacheEntry);
+                       }
+               } else {
+                       $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
+                               'content', 'cache_pagesection', 'page_id='.intval($GLOBALS['TSFE']->id).' AND mpvar_hash='.t3lib_div::md5int($GLOBALS['TSFE']->MP));
+                       if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
+                               $currentPageData = unserialize($row['content']);
+                       }
                }
 
                return $currentPageData;        // 2008-02-03 / Stucki: Notice that $this->currentPageData is not used anymore!
                }
 
                return $currentPageData;        // 2008-02-03 / Stucki: Notice that $this->currentPageData is not used anymore!
@@ -277,10 +293,10 @@ class t3lib_TStemplate    {
         */
        function matching($cc)  {
                if (is_array($cc['all']))       {
         */
        function matching($cc)  {
                if (is_array($cc['all']))       {
-                       reset($cc['all']);
-                       $matchObj = t3lib_div::makeInstance('t3lib_matchCondition');
-                       $matchObj->altRootLine=$cc['rootLine'];
-                       while(list($key,$pre)=each($cc['all'])) {
+                       /* @var $matchObj t3lib_matchCondition_frontend */
+                       $matchObj = t3lib_div::makeInstance('t3lib_matchCondition_frontend');
+                       $matchObj->setRootline((array)$cc['rootLine']);
+                       foreach ($cc['all'] as $key => $pre) {
                                if ($matchObj->match($pre))     {
                                        $sectionsMatch[$key]=$pre;
                                }
                                if ($matchObj->match($pre))     {
                                        $sectionsMatch[$key]=$pre;
                                }
@@ -393,20 +409,30 @@ class t3lib_TStemplate    {
                        unset($cc['match']);
 
                        if (!$isCached && !$this->simulationHiddenOrTime && !$GLOBALS['TSFE']->no_cache) {      // Only save the data if we're not simulating by hidden/starttime/endtime
                        unset($cc['match']);
 
                        if (!$isCached && !$this->simulationHiddenOrTime && !$GLOBALS['TSFE']->no_cache) {      // Only save the data if we're not simulating by hidden/starttime/endtime
-                               $pageSectionCache = $GLOBALS['typo3CacheManager']->getCache('cache_pagesection');
-                               /* @var $pageSectionCache t3lib_cache_AbstractCache */
-
                                $mpvarHash = t3lib_div::md5int($GLOBALS['TSFE']->MP);
                                $mpvarHash = t3lib_div::md5int($GLOBALS['TSFE']->MP);
-
-                               $pageSectionCache->save(
-                                       intval($GLOBALS['TSFE']->id) . '_' . $mpvarHash,
-                                       serialize($cc),
-                                       array(
-                                               'pageId_' . intval($GLOBALS['TSFE']->id),
-                                               'mpvarHash_' . $mpvarHash
-                                       )
-                               );
-
+                               if (TYPO3_UseCachingFramework) {
+                                       $pageSectionCache = $GLOBALS['typo3CacheManager']->getCache('cache_pagesection');
+                                       /* @var $pageSectionCache t3lib_cache_AbstractCache */
+                                       $pageSectionCache->set(
+                                               intval($GLOBALS['TSFE']->id) . '_' . $mpvarHash,
+                                               serialize($cc),
+                                               array(
+                                                       'pageId_' . intval($GLOBALS['TSFE']->id),
+                                                       'mpvarHash_' . $mpvarHash
+                                               )
+                                       );
+                               } else {
+                                       $dbFields = array(
+                                               'content' => serialize($cc),
+                                               'tstamp' => $GLOBALS['EXEC_TIME']
+                                       );
+                                       $GLOBALS['TYPO3_DB']->exec_UPDATEquery('cache_pagesection', 'page_id=' . intval($GLOBALS['TSFE']->id) . ' AND mpvar_hash=' . $mpvarHash, $dbFields);
+                                       if ($GLOBALS['TYPO3_DB']->sql_affected_rows() == 0) {
+                                               $dbFields['page_id'] = intval($GLOBALS['TSFE']->id);
+                                               $dbFields['mpvar_hash'] = $mpvarHash;
+                                               $GLOBALS['TYPO3_DB']->exec_INSERTquery('cache_pagesection', $dbFields);
+                                       }
+                               }
                        }
                                // If everything OK.
                        if ($this->rootId && $this->rootLine && $this->setup)   {
                        }
                                // If everything OK.
                        if ($this->rootId && $this->rootLine && $this->setup)   {
@@ -544,8 +570,8 @@ class t3lib_TStemplate      {
                                        $GLOBALS['TYPO3_DB']->sql_free_result($res);
                                }
                        } else {        // NORMAL OPERATION:
                                        $GLOBALS['TYPO3_DB']->sql_free_result($res);
                                }
                        } else {        // NORMAL OPERATION:
-                               $basedOnArr = t3lib_div::intExplode(',',$row['basedOn']);
-                               while(list(,$id)=each($basedOnArr))     {       // traversing list
+                               $basedOnArr = t3lib_div::intExplode(',', $row['basedOn']);
+                               foreach ($basedOnArr as $id) { // traversing list
                                        if (!t3lib_div::inList($idList,'sys_'.$id))     {       // if $id is not allready included ...
                                                $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_template', 'uid='.intval($id).' '.$this->whereClause);
                                                if ($subrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {       // there was a template, then we fetch that
                                        if (!t3lib_div::inList($idList,'sys_'.$id))     {       // if $id is not allready included ...
                                                $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_template', 'uid='.intval($id).' '.$this->whereClause);
                                                if ($subrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {       // there was a template, then we fetch that
@@ -622,9 +648,8 @@ class t3lib_TStemplate      {
        function includeStaticTypoScriptSources($idList,$templateID,$pid,$row)  {
                        // Static Template Records (static_template): include_static is a list of static templates to include
                if (trim($row['include_static']))       {
        function includeStaticTypoScriptSources($idList,$templateID,$pid,$row)  {
                        // Static Template Records (static_template): include_static is a list of static templates to include
                if (trim($row['include_static']))       {
-                       $include_staticArr = t3lib_div::intExplode(',',$row['include_static']);
-                       reset($include_staticArr);
-                       while(list(,$id)=each($include_staticArr))      {       // traversing list
+                       $include_staticArr = t3lib_div::intExplode(',', $row['include_static']);
+                       foreach ($include_staticArr as $id) { // traversing list
                                if (!t3lib_div::inList($idList,'static_'.$id))  {       // if $id is not allready included ...
                                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'static_template', 'uid='.intval($id));
                                        if ($subrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {       // there was a template, then we fetch that
                                if (!t3lib_div::inList($idList,'static_'.$id))  {       // if $id is not allready included ...
                                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'static_template', 'uid='.intval($id));
                                        if ($subrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {       // there was a template, then we fetch that
@@ -638,14 +663,12 @@ class t3lib_TStemplate    {
 
                        // Static Template Files (Text files from extensions): include_static_file is a list of static files to include (from extensions)
                if (trim($row['include_static_file']))  {
 
                        // Static Template Files (Text files from extensions): include_static_file is a list of static files to include (from extensions)
                if (trim($row['include_static_file']))  {
-                       $include_static_fileArr = t3lib_div::trimExplode(',',$row['include_static_file'],1);
-                       reset($include_static_fileArr);
-                       while(list(,$ISF_file)=each($include_static_fileArr))   {       // traversing list
-                               $ISF_file = trim($ISF_file);
+                       $include_static_fileArr = t3lib_div::trimExplode(',', $row['include_static_file'], true);
+                       foreach ($include_static_fileArr as $ISF_file) { // traversing list
                                if (substr($ISF_file,0,4)=='EXT:')      {
                                        list($ISF_extKey,$ISF_localPath) = explode('/',substr($ISF_file,4),2);
                                        if (strcmp($ISF_extKey,'') && t3lib_extMgm::isLoaded($ISF_extKey) && strcmp($ISF_localPath,'')) {
                                if (substr($ISF_file,0,4)=='EXT:')      {
                                        list($ISF_extKey,$ISF_localPath) = explode('/',substr($ISF_file,4),2);
                                        if (strcmp($ISF_extKey,'') && t3lib_extMgm::isLoaded($ISF_extKey) && strcmp($ISF_localPath,'')) {
-                                               $ISF_localPath = ereg_replace('\/$','',$ISF_localPath).'/';
+                                               $ISF_localPath = rtrim($ISF_localPath, '/').'/';
                                                $ISF_filePath = t3lib_extMgm::extPath($ISF_extKey).$ISF_localPath;
                                                if (@is_dir($ISF_filePath))     {
                                                        $mExtKey = str_replace('_','',$ISF_extKey.'/'.$ISF_localPath);
                                                $ISF_filePath = t3lib_extMgm::extPath($ISF_extKey).$ISF_localPath;
                                                if (@is_dir($ISF_filePath))     {
                                                        $mExtKey = str_replace('_','',$ISF_extKey.'/'.$ISF_localPath);
@@ -685,8 +708,7 @@ class t3lib_TStemplate      {
                global $TYPO3_LOADED_EXT;
 
                if ($row['static_file_mode']==1 || ($row['static_file_mode']==0 && substr($templateID,0,4)=='sys_' && $row['root']))    {
                global $TYPO3_LOADED_EXT;
 
                if ($row['static_file_mode']==1 || ($row['static_file_mode']==0 && substr($templateID,0,4)=='sys_' && $row['root']))    {
-                       reset($TYPO3_LOADED_EXT);
-                       while(list($extKey,$files)=each($TYPO3_LOADED_EXT))     {
+                       foreach ($TYPO3_LOADED_EXT as $extKey => $files) {
                                if (is_array($files) && ($files['ext_typoscript_constants.txt'] || $files['ext_typoscript_setup.txt'] || $files['ext_typoscript_editorcfg.txt']))       {
                                        $mExtKey = str_replace('_','',$extKey);
                                        $subrow=array(
                                if (is_array($files) && ($files['ext_typoscript_constants.txt'] || $files['ext_typoscript_setup.txt'] || $files['ext_typoscript_editorcfg.txt']))       {
                                        $mExtKey = str_replace('_','',$extKey);
                                        $subrow=array(
@@ -788,9 +810,11 @@ class t3lib_TStemplate     {
                $constants->breakPointLN=intval($this->ext_constants_BRP);
                $constants->setup = $this->const;
                $constants->setup = $this->mergeConstantsFromPageTSconfig($constants->setup);
                $constants->breakPointLN=intval($this->ext_constants_BRP);
                $constants->setup = $this->const;
                $constants->setup = $this->mergeConstantsFromPageTSconfig($constants->setup);
-               $matchObj = t3lib_div::makeInstance('t3lib_matchCondition');
-               $matchObj->matchAlternative = $this->matchAlternative;
-               $matchObj->matchAll = $this->matchAll;          // Matches ALL conditions in TypoScript
+
+               /* @var $matchObj t3lib_matchCondition_frontend */
+               $matchObj = t3lib_div::makeInstance('t3lib_matchCondition_frontend');
+               $matchObj->setSimulateMatchConditions($this->matchAlternative);
+               $matchObj->setSimulateMatchResult((bool)$this->matchAll);
 
                        // Traverse constants text fields and parse them
                foreach($this->constants as $str)       {
 
                        // Traverse constants text fields and parse them
                foreach($this->constants as $str)       {
@@ -833,10 +857,10 @@ class t3lib_TStemplate    {
 
                        // Searching for possible unsubstituted constants left (only for information)
                if (strstr($all,'{$'))  {
 
                        // Searching for possible unsubstituted constants left (only for information)
                if (strstr($all,'{$'))  {
-                       $findConst = explode('{$',$all);
-                       $theConstList=Array();
-                       next($findConst);
-                       while(list(,$constVal)=each($findConst))        {
+                       $theConstList = array();
+                       $findConst = explode('{$', $all);
+                       array_shift($findConst);
+                       foreach ($findConst as $constVal) {
                                $constLen=t3lib_div::intInRange(strcspn($constVal,'}'),0,50);
                                $theConstList[]='{$'.substr($constVal,0,$constLen+1);
                        }
                                $constLen=t3lib_div::intInRange(strcspn($constVal,'}'),0,50);
                                $theConstList[]='{$'.substr($constVal,0,$constLen+1);
                        }
@@ -903,14 +927,15 @@ class t3lib_TStemplate    {
                unset($this->setup['types.']);
                unset($this->setup['types']);
                if (is_array($this->setup)) {
                unset($this->setup['types.']);
                unset($this->setup['types']);
                if (is_array($this->setup)) {
-                       reset ($this->setup);
-                       while(list($theKey,)=each($this->setup))        {
-                               if ($this->setup[$theKey]=='PAGE')      {
-                                       $tN = $this->setup[$theKey.'.']['typeNum'];
-                                       if (isset($tN)) {
-                                               $this->setup['types.'][$tN] = $theKey;
-                                       } elseif(!$this->setup['types.'][0])    {       // If there is no type 0 yet and typeNum was not set, we use the current object as the default
-                                               $this->setup['types.'][0] = $theKey;
+                       foreach ($this->setup as $key => $value) {
+                               if ($value=='PAGE')     {
+                                               // Set the typeNum of the current page object:
+                                       if (isset($this->setup[$key.'.']['typeNum'])) {
+                                               $typeNum = $this->setup[$key.'.']['typeNum'];
+                                               $this->setup['types.'][$typeNum] = $key;
+                                               // If there is no type 0 yet and typeNum was not set, we use the current object as the default
+                                       } elseif(!isset($this->setup['types.'][0]) || !$this->setup['types.'][0]) {
+                                               $this->setup['types.'][0] = $key;
                                        }
                                }
                        }
                                        }
                                }
                        }
@@ -931,20 +956,30 @@ class t3lib_TStemplate    {
         * @return      void
         * @see t3lib_TSparser, generateConfig()
         */
         * @return      void
         * @see t3lib_TSparser, generateConfig()
         */
-       function procesIncludes()       {
-               reset($this->constants);
-               while(list($k)=each($this->constants))  {
-                       $this->constants[$k]=t3lib_TSparser::checkIncludeLines($this->constants[$k]);
+       function procesIncludes() {
+               $files = array();
+               foreach ($this->constants as &$value) {
+                       $includeData = t3lib_TSparser::checkIncludeLines($value, 1, true);
+                       $files = array_merge($files, $includeData['files']);
+                       $value = $includeData['typoscript'];
                }
 
                }
 
-               reset($this->config);
-               while(list($k)=each($this->config))     {
-                       $this->config[$k]=t3lib_TSparser::checkIncludeLines($this->config[$k]);
+               foreach ($this->config as &$value) {
+                       $includeData = t3lib_TSparser::checkIncludeLines($value, 1, true);
+                       $files = array_merge($files, $includeData['files']);
+                       $value = $includeData['typoscript'];
                }
 
                }
 
-               reset($this->editorcfg);
-               while(list($k)=each($this->editorcfg))  {
-                       $this->editorcfg[$k]=t3lib_TSparser::checkIncludeLines($this->editorcfg[$k]);
+               foreach ($this->editorcfg as &$value) {
+                       $includeData = t3lib_TSparser::checkIncludeLines($value, 1, true);
+                       $files = array_merge($files, $includeData['files']);
+                       $value = $includeData['typoscript'];
+               }
+               if (count($files)) {
+                       $files = array_unique($files);
+                       foreach ($files as $file) {
+                               $this->rowSum[] = Array($file, filemtime($file));
+                       }
                }
        }
 
                }
        }
 
@@ -986,8 +1021,7 @@ class t3lib_TStemplate     {
         */
        function flattenSetup($setupArray, $prefix, $resourceFlag)      {
                if (is_array($setupArray))      {
         */
        function flattenSetup($setupArray, $prefix, $resourceFlag)      {
                if (is_array($setupArray))      {
-                       reset($setupArray);
-                       while(list($key,$val)=each($setupArray))        {
+                       foreach ($setupArray as $key => $val) {
                                if ($prefix || substr($key,0,16)!='TSConstantEditor')   {               // We don't want 'TSConstantEditor' in the flattend setup on the first level (190201)
                                        if (is_array($val))     {
                                                $this->flattenSetup($val,$prefix.$key, ($key=='file.'));
                                if ($prefix || substr($key,0,16)!='TSConstantEditor')   {               // We don't want 'TSConstantEditor' in the flattend setup on the first level (190201)
                                        if (is_array($val))     {
                                                $this->flattenSetup($val,$prefix.$key, ($key=='file.'));
@@ -1082,12 +1116,8 @@ class t3lib_TStemplate   {
                                        foreach($tempConf as $aKey => $val)     {
                                                $conf2[$aKey][$cKey] = $val;
                                        }
                                        foreach($tempConf as $aKey => $val)     {
                                                $conf2[$aKey][$cKey] = $val;
                                        }
-                               }
-                       }
-
-                               // Splitting of all values on this level of the TypoScript object tree:
-                       foreach($conf as $cKey => $val) {
-                               if (!is_array($val))    {
+                               } else {
+                                               // Splitting of all values on this level of the TypoScript object tree:
                                        if (!strstr($val,'|*|') && !strstr($val,'||'))  {
                                                for ($aKey=0;$aKey<$splitCount;$aKey++) {
                                                        $conf2[$aKey][$cKey] = $val;
                                        if (!strstr($val,'|*|') && !strstr($val,'||'))  {
                                                for ($aKey=0;$aKey<$splitCount;$aKey++) {
                                                        $conf2[$aKey][$cKey] = $val;
@@ -1172,10 +1202,12 @@ class t3lib_TStemplate  {
                        if (@is_file($this->getFileName_backPath.$file))        {
                                $outFile = $file;
                                $fileInfo = t3lib_div::split_fileref($outFile);
                        if (@is_file($this->getFileName_backPath.$file))        {
                                $outFile = $file;
                                $fileInfo = t3lib_div::split_fileref($outFile);
-                               reset($this->allowedPaths);
                                $OK=0;
                                $OK=0;
-                               while(list(,$val)=each($this->allowedPaths))    {
-                                       if (substr($fileInfo['path'],0,strlen($val))==$val){$OK=1; break;}
+                               foreach ($this->allowedPaths as $val) {
+                                       if (substr($fileInfo['path'], 0, strlen($val))==$val) {
+                                               $OK=1;
+                                               break;
+                                       }
                                }
                                if ($OK)        {
                                        $this->fileCache[$hash]=$outFile;
                                }
                                if ($OK)        {
                                        $this->fileCache[$hash]=$outFile;
@@ -1208,11 +1240,10 @@ class t3lib_TStemplate  {
                } elseif (strstr($file,'*')) {
                        $fileparts=explode('*',$file);
                        $c=count($fileparts);
                } elseif (strstr($file,'*')) {
                        $fileparts=explode('*',$file);
                        $c=count($fileparts);
-                       $files = explode(',',$res);
-                       while(list(,$val)=each($files)) {
-                               $test = trim($val);
-                               if (ereg('^'.quotemeta($fileparts[0]).'.*'.quotemeta($fileparts[$c-1]).'$', $test))     {
-                                       $outFile = $test;
+                       $files = t3lib_div::trimExplode(',', $res);
+                       foreach ($files as $file) {
+                               if (preg_match('/^'.quotemeta($fileparts[0]).'.*'.quotemeta($fileparts[$c-1]).'$/', $file)) {
+                                       $outFile = $file;
                                        break;
                                }
                        }
                                        break;
                                }
                        }
@@ -1227,10 +1258,12 @@ class t3lib_TStemplate  {
         * @param       string          Property name in the menu array
         * @param       array           Menu array to traverse
         * @return      array           Modified menu array
         * @param       string          Property name in the menu array
         * @param       array           Menu array to traverse
         * @return      array           Modified menu array
-        * @deprecated
+        * @deprecated since TYPO3 3.6, this function will be removed in TYPO3 4.5.
         * @internal
         */
        function checkFile($name,$menuArr)      {
         * @internal
         */
        function checkFile($name,$menuArr)      {
+               t3lib_div::logDeprecatedFunction();
+
                reset ($menuArr);
                while (list($aKey,)=each($menuArr))     {
                        $menuArr[$aKey][$name] = $this->getFileName($menuArr[$aKey][$name]);
                reset ($menuArr);
                while (list($aKey,)=each($menuArr))     {
                        $menuArr[$aKey][$name] = $this->getFileName($menuArr[$aKey][$name]);
@@ -1316,17 +1349,14 @@ class t3lib_TStemplate  {
         * @return      array           An array with all integer properties listed in numeric order.
         * @see tslib_cObj::cObjGet(), tslib_gifBuilder, tslib_imgmenu::makeImageMap()
         */
         * @return      array           An array with all integer properties listed in numeric order.
         * @see tslib_cObj::cObjGet(), tslib_gifBuilder, tslib_imgmenu::makeImageMap()
         */
-       function sortedKeyList($setupArr, $acceptOnlyProperties=FALSE)  {
-               $keyArr = Array();
-
-               reset($setupArr);
-               while(list($key,)=each($setupArr))      {
-                       $ikey = intval($key);
-                       if (!strcmp($ikey,$key) || $acceptOnlyProperties)       {
-                               $keyArr[] = $ikey;
+       function sortedKeyList($setupArr, $acceptOnlyProperties=false) {
+               $keyArr = array();
+               $setupArrKeys = array_keys($setupArr);
+               foreach ($setupArrKeys as $key) {
+                       if ($acceptOnlyProperties || t3lib_div::testInt($key)) {
+                               $keyArr[] = intval($key);
                        }
                }
                        }
                }
-
                $keyArr = array_unique($keyArr);
                sort($keyArr);
                return $keyArr;
                $keyArr = array_unique($keyArr);
                sort($keyArr);
                return $keyArr;
@@ -1376,10 +1406,11 @@ class t3lib_TStemplate  {
         * @param       array           Array with overriding values for the $page array.
         * @param       string          Additional URL parameters to set in the URL. Syntax is "&foo=bar&foo2=bar2" etc. Also used internally to add parameters if needed.
         * @param       string          If you set this value to something else than a blank string, then the typeNumber used in the link will be forced to this value. Normally the typeNum is based on the target set OR on $GLOBALS['TSFE']->config['config']['forceTypeValue'] if found.
         * @param       array           Array with overriding values for the $page array.
         * @param       string          Additional URL parameters to set in the URL. Syntax is "&foo=bar&foo2=bar2" etc. Also used internally to add parameters if needed.
         * @param       string          If you set this value to something else than a blank string, then the typeNumber used in the link will be forced to this value. Normally the typeNum is based on the target set OR on $GLOBALS['TSFE']->config['config']['forceTypeValue'] if found.
+        * @param       string          The target Doamin, if any was detected in typolink
         * @return      array           Contains keys like "totalURL", "url", "sectionIndex", "linkVars", "no_cache", "type", "target" of which "totalURL" is normally the value you would use while the other keys contains various parts that was used to construct "totalURL"
         * @see tslib_frameset::frameParams(), tslib_cObj::typoLink(), tslib_cObj::SEARCHRESULT(), TSpagegen::pagegenInit(), tslib_menu::link()
         */
         * @return      array           Contains keys like "totalURL", "url", "sectionIndex", "linkVars", "no_cache", "type", "target" of which "totalURL" is normally the value you would use while the other keys contains various parts that was used to construct "totalURL"
         * @see tslib_frameset::frameParams(), tslib_cObj::typoLink(), tslib_cObj::SEARCHRESULT(), TSpagegen::pagegenInit(), tslib_menu::link()
         */
-       function linkData($page,$oTarget,$no_cache,$script,$overrideArray='',$addParams='',$typeOverride='')    {
+       function linkData($page, $oTarget, $no_cache, $script, $overrideArray='', $addParams='', $typeOverride='', $targetDomain='') {
                global $TYPO3_CONF_VARS;
 
                $LD = Array();
                global $TYPO3_CONF_VARS;
 
                $LD = Array();
@@ -1454,7 +1485,7 @@ class t3lib_TStemplate    {
                if (is_array($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc']))  {
                        $_params = array(
                                                        'LD' => &$LD,
                if (is_array($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc']))  {
                        $_params = array(
                                                        'LD' => &$LD,
-                                                       'args' => array('page'=>$page, 'oTarget'=>$oTarget, 'no_cache'=>$no_cache, 'script'=>$script, 'overrideArray'=>$overrideArray, 'addParams'=>$addParams, 'typeOverride'=>$typeOverride),
+                                                       'args' => array('page'=>$page, 'oTarget'=>$oTarget, 'no_cache'=>$no_cache, 'script'=>$script, 'overrideArray'=>$overrideArray, 'addParams'=>$addParams, 'typeOverride'=>$typeOverride,'targetDomain'=>$targetDomain),
                                                        'typeNum' => $typeNum
                                                );
                        foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc'] as $_funcRef)  {
                                                        'typeNum' => $typeNum
                                                );
                        foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc'] as $_funcRef)  {
@@ -1590,4 +1621,5 @@ class t3lib_TStemplate    {
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tstemplate.php'])       {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tstemplate.php']);
 }
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tstemplate.php'])       {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tstemplate.php']);
 }
+
 ?>
 ?>