"TYPO3 4.0.1: typo3_src-4.0.1/typo3/sysext/cms/tslib/class.tslib_content.php Source File", "datetime" => "Sat Dec 2 19:22:27 2006", "date" => "2 Dec 2006", "doxygenversion" => "1.4.6", "projectname" => "TYPO3 4.0.1", "projectnumber" => "4.0.1" ); get_header($doxygen_vars); ?>

class.tslib_content.php

00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 1999-2005 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 ***************************************************************/
00219   // Includes this class since it is used for parsing HTML
00220 require_once(PATH_t3lib."class.t3lib_parsehtml.php");
00221 
00222         // Object TypoScript library included:
00223 if(t3lib_extMgm::isLoaded('obts')) {
00224         require_once(t3lib_extMgm::extPath('obts').'_tsobject/_tso.php');
00225 }
00226 
00227 
00228 
00229 
00230 
00231 
00232 
00233 
00234 
00235 
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00257 class tslib_cObj {
00258         var $align = Array ('center', 'right', 'left');
00259 
00270         var $image_compression = Array(
00271                 10 => Array('params'=>'', 'ext'=>'gif'),
00272                 11 => Array('params'=>'-colors 128', 'ext'=>'gif'),
00273                 12 => Array('params'=>'-colors 64', 'ext'=>'gif'),
00274                 13 => Array('params'=>'-colors 32', 'ext'=>'gif'),
00275                 14 => Array('params'=>'-colors 16', 'ext'=>'gif'),
00276                 15 => Array('params'=>'-colors 8', 'ext'=>'gif'),
00277 
00278                 30 => Array('params'=>'-colors 256', 'ext'=>'png'),
00279                 31 => Array('params'=>'-colors 128', 'ext'=>'png'),
00280                 32 => Array('params'=>'-colors 64', 'ext'=>'png'),
00281                 33 => Array('params'=>'-colors 32', 'ext'=>'png'),
00282                 34 => Array('params'=>'-colors 16', 'ext'=>'png'),
00283                 35 => Array('params'=>'-colors 8', 'ext'=>'png'),
00284                 39 => Array('params'=>'', 'ext'=>'png'),
00285 
00286                 20 => Array('params'=>'-quality 100', 'ext'=>'jpg'),
00287                 21 => Array('params'=>'-quality 90', 'ext'=>'jpg'),
00288                 22 => Array('params'=>'-quality 80', 'ext'=>'jpg'),
00289                 23 => Array('params'=>'-quality 70', 'ext'=>'jpg'),
00290                 24 => Array('params'=>'-quality 60', 'ext'=>'jpg'),
00291                 25 => Array('params'=>'-quality 50', 'ext'=>'jpg'),
00292                 26 => Array('params'=>'-quality 40', 'ext'=>'jpg'),
00293                 27 => Array('params'=>'-quality 30', 'ext'=>'jpg'),
00294                 28 => Array('params'=>'-quality 20', 'ext'=>'jpg')
00295         );
00296 
00302         var $image_effects = Array(
00303                 1 => '-rotate 90',
00304                 2 => '-rotate 270',
00305                 3 => '-rotate 180',
00306                 10 => '-colorspace GRAY',
00307                 11 => '-sharpen 70',
00308                 20 => '-normalize',
00309                 23 => '-contrast',
00310                 25 => '-gamma 1.3',
00311                 26 => '-gamma 0.8'
00312         );
00313 
00321         var $data = Array();
00322         var $oldData = Array();                         // Used for backup...
00323         var $alternativeData ='';                       // If this is set with an array before stdWrap, it's used instead of $this->data in the data-property in stdWrap
00324         var $parameters = Array();                      // Used by the parseFunc function and is loaded with tag-parameters when parsing tags.
00325         var $currentValKey = 'currentValue_kidjls9dksoje';
00326         var $currentRecord = '';                        // This is set to the [table]:[uid] of the record delivered in the $data-array, if the cObjects CONTENT or RECORD is in operation. Note that $GLOBALS['TSFE']->currentRecord is set to an equal value but always indicating the latest record rendered.
00327         var $currentRecordTotal = 0;            // Set in cObj->RECORDS and cObj->CONTENT to the current number of records selected in a query.
00328         var $currentRecordNumber = 0;           // Incremented in cObj->RECORDS and cObj->CONTENT before each record rendering.
00329         var $parentRecordNumber = 0;            // Incremented in parent cObj->RECORDS and cObj->CONTENT before each record rendering.
00330         var $parentRecord = array();            // If the tslib_cObj was started from CONTENT, RECORD or SEARCHRESULT cObject's this array has two keys, 'data' and 'currentRecord' which indicates the record and data for the parent cObj.
00331         var $regObj;            // This may be set as a reference to the calling object of eg. cObjGetSingle. Anyway, just use it as you like. It's used in productsLib.inc for example.
00332 
00333         // internal
00334         var $INT_include=0;             // Is set to 1 if the instance of this cObj is executed from a PHP_SCRIPT_INT -include script (see pagegen, bottom of document)
00335         var $checkPid_cache = Array();          // This is used by checkPid, that checks if pages are accessible. The $checkPid_cache['page_uid'] is set true or false upon this check featuring a caching function for the next request.
00336         var $checkPid_badDoktypeList = '255';
00337         var $lastTypoLinkUrl='';        // This will be set by typoLink() to the url of the most recent link created.
00338         var $lastTypoLinkTarget='';     // DO. link target.
00339         var $substMarkerCache=array();  // Caching substituteMarkerArrayCached function
00340         var $recordRegister=array();    // Array that registers rendered content elements (or any table) to make sure they are not rendered recursively!
00341 
00351         function start($data,$table='') {
00352                 $this->data = $data;
00353                 $this->currentRecord = $table ? $table.':'.$this->data['uid'] : '';
00354                 $this->parameters = Array();
00355         }
00356 
00366         function setParent($data,$currentRecord)        {
00367                 $this->parentRecord=array('data'=>$data, 'currentRecord'=>$currentRecord);
00368         }
00369 
00370 
00371 
00372 
00373 
00374 
00375 
00376 
00377         /***********************************************
00378          *
00379          * CONTENT_OBJ:
00380          *
00381          ***********************************************/
00382 
00391         function getCurrentVal()        {
00392                 return $this->data[$this->currentValKey];
00393         }
00394 
00402         function setCurrentVal($value)  {
00403                 $this->data[$this->currentValKey] = $value;
00404         }
00405 
00415         function cObjGet($setup,$addKey='')     {
00416                 if (is_array($setup))   {
00417                         $sKeyArray=t3lib_TStemplate::sortedKeyList($setup);
00418                         $content ='';
00419                         foreach($sKeyArray as $theKey)  {
00420                                 $theValue=$setup[$theKey];
00421                                 if (intval($theKey) && !strstr($theKey,'.'))    {
00422                                         $conf=$setup[$theKey.'.'];
00423                                         $content.=$this->cObjGetSingle($theValue,$conf,$addKey.$theKey);        // Get the contentObject
00424                                 }
00425                         }
00426                         return $content;
00427                 }
00428         }
00429 
00439         function cObjGetSingle($name,$conf,$TSkey='__') {
00440                 $content='';
00441                         // Checking that the function is not called eternally. This is done by interrupting at a depth of 100
00442                 $GLOBALS['TSFE']->cObjectDepthCounter--;
00443                 if ($GLOBALS['TSFE']->cObjectDepthCounter>0)    {
00444                         $name = trim($name);
00445                         if ($GLOBALS['TT']->LR) $GLOBALS['TT']->push($TSkey, $name);
00446 
00447                                 // Checking if the COBJ is a reference to another object. (eg. name of 'blabla.blabla = < styles.something')
00448                         if (substr($name,0,1)=='<')     {
00449                                 $key = trim(substr($name,1));
00450                                 $cF = t3lib_div::makeInstance('t3lib_TSparser');
00451                                         // $name and $conf is loaded with the referenced values.
00452                                 $old_conf=$conf;
00453                                 list($name, $conf) = $cF->getVal($key,$GLOBALS['TSFE']->tmpl->setup);
00454                                 if (is_array($old_conf) && count($old_conf))    {
00455                                         $conf = $this->joinTSarrays($conf,$old_conf);
00456 //                                      debug($conf);
00457                                 }
00458                                         // Getting the cObject
00459                                 $GLOBALS['TT']->incStackPointer();
00460                                         $content.=$this->cObjGetSingle($name,$conf,$key);
00461                                 $GLOBALS['TT']->decStackPointer();
00462                         } else {
00463 
00464                                         // Object TypoScript hook:
00465                                 if(t3lib_extMgm::isLoaded('obts') && isset($GLOBALS['OBTS']['tso_list'][$name])) {
00466                                         $content.= obts_dtutil::renderDatatypeContent($name, $GLOBALS['OBTS']['tso_list'][$name], $conf, $this);
00467                                 } else {
00468                                                 // Traditional Content Object branching:
00469                                         switch($name)   {
00470                                                 case 'COBJ_ARRAY':
00471                                                 case 'COA':
00472                                                         $content.=$this->COBJ_ARRAY($conf);
00473                                                 break;
00474                                                 case 'COA_INT':
00475                                                         $content.=$this->COBJ_ARRAY($conf,'INT');
00476                                                 break;
00477                                                 case 'HTML':
00478                                                         $content.=$this->HTML($conf);
00479                                                 break;
00480                                                 case 'TEXT':
00481                                                         $content.=$this->TEXT($conf);
00482                                                 break;
00483                                                 case 'CLEARGIF':
00484                                                         $content.=$this->CLEARGIF($conf);
00485                                                 break;
00486                                                 case 'FILE':
00487                                                         $content.=$this->FILE($conf);
00488                                                 break;
00489                                                 case 'IMAGE':
00490                                                         $content.=$this->IMAGE($conf);
00491                                                 break;
00492                                                 case 'IMG_RESOURCE':
00493                                                         $content.=$this->IMG_RESOURCE($conf);
00494                                                 break;
00495                                                 case 'IMGTEXT':
00496                                                         $content.=$this->IMGTEXT($conf);
00497                                                 break;
00498                                                 case 'CONTENT':
00499                                                         $content.=$this->CONTENT($conf);
00500                                                 break;
00501                                                 case 'RECORDS':
00502                                                         $content.=$this->RECORDS($conf);
00503                                                 break;
00504                                                 case 'HMENU':
00505                                                         $content.=$this->HMENU($conf);
00506                                                 break;
00507                                                 case 'CTABLE':
00508                                                         $content.=$this->CTABLE($conf);
00509                                                 break;
00510                                                 case 'OTABLE':
00511                                                         $content.=$this->OTABLE($conf);
00512                                                 break;
00513                                                 case 'COLUMNS':
00514                                                         $content.=$this->COLUMNS($conf);
00515                                                 break;
00516                                                 case 'HRULER':
00517                                                         $content.=$this->HRULER($conf);
00518                                                 break;
00519                                                 case 'CASE':
00520                                                         $content.=$this->CASEFUNC($conf);
00521                                                 break;
00522                                                 case 'LOAD_REGISTER':
00523                                                 case 'RESTORE_REGISTER':
00524                                                         $this->LOAD_REGISTER($conf,$name);
00525                                                 break;
00526                                                 case 'FORM':
00527                                                         $content.=$this->FORM($conf);
00528                                                 break;
00529                                                 case 'SEARCHRESULT':
00530                                                         $content.=$this->SEARCHRESULT($conf);
00531                                                 break;
00532                                                 case 'PHP_SCRIPT':
00533                                                         $content.=$this->PHP_SCRIPT($conf);
00534                                                 break;
00535                                                 case 'PHP_SCRIPT_EXT':
00536                                                         $content.=$this->PHP_SCRIPT($conf,'EXT');
00537                                                 break;
00538                                                 case 'PHP_SCRIPT_INT':
00539                                                         $content.=$this->PHP_SCRIPT($conf,'INT');
00540                                                 break;
00541                                                 case 'USER':
00542                                                         $content.=$this->USER($conf);
00543                                                 break;
00544                                                 case 'USER_INT':
00545                                                         $content.=$this->USER($conf,'INT');
00546                                                 break;
00547                                                 case 'TEMPLATE':
00548                                                         $content.=$this->TEMPLATE($conf);
00549                                                 break;
00550                                                 case 'EDITPANEL':
00551                                                         if ($GLOBALS['TSFE']->beUserLogin)      {$content.=$this->editPanel($content, $conf);}
00552                                                 break;
00553                                                 case 'MULTIMEDIA':
00554                                                         $content.=$this->MULTIMEDIA($conf);
00555                                                 break;
00556                                         }
00557                                 }
00558                         }
00559                         if ($GLOBALS['TT']->LR) $GLOBALS['TT']->pull($content);
00560                 }
00561                         // Increasing on exit...
00562                 $GLOBALS['TSFE']->cObjectDepthCounter++;
00563                 return $content;
00564         }
00565 
00566 
00567 
00568 
00569 
00570 
00571 
00572         /********************************************
00573          *
00574          * Functions rendering content objects (cObjects)
00575          *
00576          ********************************************/
00577 
00585         function HTML($conf)    {
00586                 return $this->stdWrap($conf['value'],$conf['value.']);
00587         }
00588 
00596         function TEXT($conf)    {
00597                 return $this->stdWrap($conf['value'],$conf);
00598         }
00599 
00607         function CLEARGIF($conf)        {
00608                 $w = $this->stdWrap($conf['width'],$conf['width.']);
00609                 $h = $this->stdWrap($conf['height'],$conf['height.']);
00610                 $w = $w ? $w : 1;
00611                 $h = $h ? $h : 1;
00612                 $wrap = $conf['wrap'] ? $conf['wrap'] : '|<br />';
00613                 $theValue = $this->wrap('<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$w.'" height="'.$h.'"'.$this->getBorderAttr(' border="0"').' alt="" title="" />', $wrap);
00614 
00615                 return $this->stdWrap($theValue,$conf['stdWrap.']);
00616         }
00617 
00626         function COBJ_ARRAY($conf,$ext='')      {
00627                 $content='';
00628                 switch($ext)    {
00629                         case 'INT':
00630                                 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
00631                                 $content.='<!--'.$substKey.'-->';
00632                                 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
00633                                         'file'=>$incFile,
00634                                         'conf'=>$conf,
00635                                         'cObj'=>serialize($this),
00636                                         'type'=>'COA'
00637                                 );
00638                         break;
00639                         default:
00640                                 if ($this->checkIf($conf['if.']))       {
00641                                         $content=$this->cObjGet($conf);
00642                                         if ($conf['wrap']) {
00643                                                 $content=$this->wrap($content, $conf['wrap']);
00644                                         }
00645                                         if ($conf['stdWrap.']) {
00646                                                 $content=$this->stdWrap($content, $conf['stdWrap.']);
00647                                         }
00648                                 }
00649                         break;
00650                 }
00651                 return $content;
00652         }
00653 
00662         function USER($conf,$ext='')    {
00663                 $content='';
00664                 switch($ext)    {
00665                         case 'INT':
00666                                 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
00667                                 $content.='<!--'.$substKey.'-->';
00668                                 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
00669                                         'file' => $incFile,
00670                                         'conf' => $conf,
00671                                         'cObj' => serialize($this),
00672                                         'type' => 'FUNC'
00673                                 );
00674                         break;
00675                         default:
00676                                 $content.=$this->callUserFunction($conf['userFunc'],$conf,'');
00677                         break;
00678                 }
00679                 return $content;
00680         }
00681 
00689         function FILE($conf)    {
00690                 $theValue = $this->fileResource($this->stdWrap($conf['file'],$conf['file.']), trim($this->getAltParam($conf, false)));
00691                 if ($conf['linkWrap'])  {
00692                         $theValue = $this->linkWrap($theValue,$conf['linkWrap']);
00693                 }
00694                 return $this->wrap($theValue,$conf['wrap']);
00695         }
00696 
00705         function IMAGE($conf)   {
00706                 $content='';
00707                 if ($this->checkIf($conf['if.']))       {
00708                         $theValue = $this->cImage($conf['file'],$conf);
00709                         if ($conf['stdWrap.'])  {
00710                                 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
00711                         }
00712                         return $theValue;
00713                 }
00714         }
00715 
00724         function IMG_RESOURCE($conf)    {
00725                 $imgArray = $this->getImgResource($conf['file'],$conf['file.']);
00726                 return $this->stdWrap($imgArray[3],$conf['stdWrap.']);
00727         }
00728 
00736         function IMGTEXT($conf) {
00737                 $content='';
00738                 if (is_array($conf['text.']))   {
00739                         $content.= $this->stdWrap($this->cObjGet($conf['text.'],'text.'),$conf['text.']);       // this gets the surrounding content
00740                 }
00741                 $imgList=trim($this->stdWrap($conf['imgList'],$conf['imgList.']));      // gets images
00742                 if ($imgList)   {
00743                         $imgs = t3lib_div::trimExplode(',',$imgList);
00744                         $imgStart = intval($this->stdWrap($conf['imgStart'],$conf['imgStart.']));
00745 
00746                         $imgCount= count($imgs)-$imgStart;
00747 
00748                         $imgMax = intval($this->stdWrap($conf['imgMax'],$conf['imgMax.']));
00749                         if ($imgMax)    {
00750                                 $imgCount = t3lib_div::intInRange($imgCount,0,$conf['imgMax']); // reduces the number of images.
00751                         }
00752 
00753                         $imgPath = $this->stdWrap($conf['imgPath'],$conf['imgPath.']);
00754 
00755                                 // initialisation
00756                         $caption='';
00757                         $captionArray = array();
00758                         if (!$conf['captionSplit'] && !$conf['imageTextSplit'] && is_array($conf['caption.']))  {
00759                                 $caption = $this->stdWrap($this->cObjGet($conf['caption.'], 'caption.'),$conf['caption.']);     // global caption, no splitting
00760                         }
00761                         if ($conf['captionSplit'] && $conf['captionSplit.']['cObject']) {
00762                                 $legacyCaptionSplit = 1;
00763                                 $capSplit = $this->stdWrap($conf['captionSplit.']['token'], $conf['captionSplit.']['token.']);
00764                                 if (!$capSplit) {$capSplit=chr(10);}
00765                                 $captionArray = explode($capSplit, $this->cObjGetSingle($conf['captionSplit.']['cObject'], $conf['captionSplit.']['cObject.'], 'captionSplit.cObject'));
00766                                 while (list($ca_key, $ca_val) = each($captionArray))    {
00767                                         $captionArray[$ca_key] = $this->stdWrap(trim($captionArray[$ca_key]), $conf['captionSplit.']['stdWrap.']);
00768                                 }
00769                         }
00770 
00771                         $tablecode='';
00772                         $position=$this->stdWrap($conf['textPos'],$conf['textPos.']);
00773 
00774                         $tmppos = $position&7;
00775                         $contentPosition = $position&24;
00776                         $align = $this->align[$tmppos];
00777                         $cap = ($caption)?1:0;
00778                         $txtMarg = intval($this->stdWrap($conf['textMargin'],$conf['textMargin.']));
00779                         if (!$conf['textMargin_outOfText'] && $contentPosition<16)      {
00780                                 $txtMarg=0;
00781                         }
00782 
00783                         $cols = intval($this->stdWrap($conf['cols'],$conf['cols.']));
00784                         $rows = intval($this->stdWrap($conf['rows'],$conf['rows.']));
00785                         $colspacing = intval($this->stdWrap($conf['colSpace'],$conf['colSpace.']));
00786                         $rowspacing = intval($this->stdWrap($conf['rowSpace'],$conf['rowSpace.']));
00787 
00788                         $border = intval($this->stdWrap($conf['border'],$conf['border.'])) ? 1:0;
00789                         $borderColor = $this->stdWrap($conf['borderCol'],$conf['borderCol.']);
00790                         $borderThickness = intval($this->stdWrap($conf['borderThick'],$conf['borderThick.']));
00791 
00792                         $borderColor=$borderColor?$borderColor:'black';
00793                         $borderThickness=$borderThickness?$borderThickness:1;
00794 
00795                         $caption_align = $this->stdWrap($conf['captionAlign'],$conf['captionAlign.']);
00796                         if (!$caption_align) {
00797                                 $caption_align = $align;
00798                         }
00799                                 // generate cols
00800                         $colCount = ($cols > 1) ? $cols : 1;
00801                         if ($colCount > $imgCount)      {$colCount = $imgCount;}
00802                         $rowCount = ($colCount > 1) ? ceil($imgCount / $colCount) : $imgCount;
00803                                 // generate rows
00804                         if ($rows>1)  {
00805                                 $rowCount = $rows;
00806                                 if ($rowCount > $imgCount)      {$rowCount = $imgCount;}
00807                                 $colCount = ($rowCount>1) ? ceil($imgCount / $rowCount) : $imgCount;
00808                         }
00809 
00810                                 // max Width
00811                         $colRelations = trim($this->stdWrap($conf['colRelations'],$conf['colRelations.']));
00812                         $maxW = intval($this->stdWrap($conf['maxW'],$conf['maxW.']));
00813 
00814                         $maxWInText = intval($this->stdWrap($conf['maxWInText'],$conf['maxWInText.']));
00815                         if (!$maxWInText)       {       // If maxWInText is not set, it's calculated to the 50 % of the max...
00816                                 $maxWInText = round($maxW/2);
00817                         }
00818 
00819                         if ($maxWInText && $contentPosition>=16)        {       // inText
00820                                 $maxW = $maxWInText;
00821                         }
00822 
00823                         if ($maxW && $colCount > 0) {   // If there is a max width and if colCount is greater than  column
00824 /*                              debug($border*$borderThickness*2);
00825                                 debug($maxW);
00826                                 debug($colspacing);
00827                                 debug(($maxW-$colspacing*($colCount-1)-$colCount*$border*$borderThickness*2));
00828                                 */
00829                                 $maxW = ceil(($maxW-$colspacing*($colCount-1)-$colCount*$border*$borderThickness*2)/$colCount);
00830                         }
00831                                 // create the relation between rows
00832                         $colMaxW = Array();
00833                         if ($colRelations)      {
00834                                 $rel_parts = explode(':',$colRelations);
00835                                 $rel_total = 0;
00836                                 for ($a=0;$a<$colCount;$a++)    {
00837                                         $rel_parts[$a] = intval($rel_parts[$a]);
00838                                         $rel_total+= $rel_parts[$a];
00839                                 }
00840                                 if ($rel_total) {
00841                                         for ($a=0;$a<$colCount;$a++)    {
00842                                                 $colMaxW[$a] = round(($maxW*$colCount)/$rel_total*$rel_parts[$a]);
00843                                         }
00844                                         if (min($colMaxW)<=0 || max($rel_parts)/min($rel_parts)>10)     {               // The difference in size between the largest and smalles must be within a factor of ten.
00845                                                 $colMaxW = Array();
00846                                         }
00847                                 }
00848                         }
00849                         $image_compression = intval($this->stdWrap($conf['image_compression'],$conf['image_compression.']));
00850                         $image_effects = intval($this->stdWrap($conf['image_effects'],$conf['image_effects.']));
00851                         $image_frames = intval($this->stdWrap($conf['image_frames.']['key'],$conf['image_frames.']['key.']));
00852 
00853                                 // fetches pictures
00854                         $splitArr=array();
00855                         $splitArr['imgObjNum']=$conf['imgObjNum'];
00856                         $splitArr = $GLOBALS['TSFE']->tmpl->splitConfArray($splitArr,$imgCount);
00857 
00858                                 // EqualHeight
00859                         $equalHeight = intval($this->stdWrap($conf['equalH'],$conf['equalH.']));
00860                         if ($equalHeight)       {       // Initiate gifbuilder object in order to get dimensions AND calculate the imageWidth's
00861                                 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
00862                                 $gifCreator->init();
00863                                 $relations = Array();
00864                                 $relations_cols = Array();
00865                                 $totalMaxW = $maxW*$colCount;
00866                                 for($a=0;$a<$imgCount;$a++)     {
00867                                         $imgKey = $a+$imgStart;
00868                                         $imgInfo = $gifCreator->getImageDimensions($imgPath.$imgs[$imgKey]);
00869                                         $relations[$a] = $imgInfo[1] / $equalHeight;    // relationship between the original height and the wished height
00870                                         if ($relations[$a])     {       // if relations is zero, then the addition of this value is omitted as the image is not expected to display because of some error.
00871                                                 $relations_cols[floor($a/$colCount)] += $imgInfo[0]/$relations[$a];     // counts the total width of the row with the new height taken into consideration.
00872                                         }
00873                                 }
00874                         }
00875 
00876                         $imageRowsFinalWidths = Array();        // contains the width of every image row
00877                         $imageRowsMaxHeights = Array();
00878                         $imgsTag=array();
00879                         $origImages=array();
00880                         for($a=0;$a<$imgCount;$a++)     {
00881                                 $GLOBALS['TSFE']->register['IMAGE_NUM'] = $a;
00882                                 $GLOBALS['TSFE']->register['IMAGE_NUM_CURRENT'] = $a;
00883 
00884                                 $imgKey = $a+$imgStart;
00885                                 $totalImagePath = $imgPath.$imgs[$imgKey];
00886                                 $this->data[$this->currentValKey] = $totalImagePath;
00887                                 $imgObjNum = intval($splitArr[$a]['imgObjNum']);
00888                                 $imgConf = $conf[$imgObjNum.'.'];
00889 
00890                                 if ($equalHeight)       {
00891                                         $scale = 1;
00892                                         if ($totalMaxW) {
00893                                                 $rowTotalMaxW = $relations_cols[floor($a/$colCount)];
00894                                                 if ($rowTotalMaxW > $totalMaxW) {
00895                                                         $scale = $rowTotalMaxW / $totalMaxW;
00896                                                 }
00897                                         }
00898                                                 // transfer info to the imageObject. Please note, that
00899                                         $imgConf['file.']['height'] = round($equalHeight/$scale);
00900 
00901                                         unset($imgConf['file.']['width']);
00902                                         unset($imgConf['file.']['maxW']);
00903                                         unset($imgConf['file.']['maxH']);
00904                                         unset($imgConf['file.']['minW']);
00905                                         unset($imgConf['file.']['minH']);
00906                                         unset($imgConf['file.']['width.']);
00907                                         unset($imgConf['file.']['maxW.']);
00908                                         unset($imgConf['file.']['maxH.']);
00909                                         unset($imgConf['file.']['minW.']);
00910                                         unset($imgConf['file.']['minH.']);
00911                                         $maxW = 0;      // setting this to zero, so that it doesn't disturb
00912                                 }
00913 
00914                                 if ($maxW) {
00915                                         if (count($colMaxW))    {
00916                                                 $imgConf['file.']['maxW'] = $colMaxW[($a%$colCount)];
00917                                         } else {
00918                                                 $imgConf['file.']['maxW'] = $maxW;
00919                                         }
00920                                 }
00921 
00922                                         // Image Object supplied:
00923                                 if (is_array($imgConf)) {
00924                                         if ($this->image_effects[$image_effects])       {
00925                                                 $imgConf['file.']['params'].= ' '.$this->image_effects[$image_effects];
00926                                         }
00927                                         if ($image_frames)      {
00928                                                 if (is_array($conf['image_frames.'][$image_frames.'.']))        {
00929                                                         $imgConf['file.']['m.'] = $conf['image_frames.'][$image_frames.'.'];
00930                                                 }
00931                                         }
00932                                         if ($image_compression && $imgConf['file']!='GIFBUILDER')       {
00933                                                 if ($image_compression==1)      {
00934                                                         $tempImport = $imgConf['file.']['import'];
00935                                                         $tempImport_dot = $imgConf['file.']['import.'];
00936                                                         unset($imgConf['file.']);
00937                                                         $imgConf['file.']['import'] = $tempImport;
00938                                                         $imgConf['file.']['import.'] = $tempImport_dot;
00939                                                 } elseif (isset($this->image_compression[$image_compression])) {
00940                                                         $imgConf['file.']['params'].= ' '.$this->image_compression[$image_compression]['params'];
00941                                                         $imgConf['file.']['ext'] = $this->image_compression[$image_compression]['ext'];
00942                                                         unset($imgConf['file.']['ext.']);
00943                                                 }
00944                                         }
00945 
00946                                                 // "alt", "title" and "longdesc" attributes:
00947                                         if (!strlen($imgConf['altText']) && !is_array($imgConf['altText.'])) {
00948                                                 $imgConf['altText'] = $conf['altText'];
00949                                                 $imgConf['altText.'] = $conf['altText.'];
00950                                         }
00951                                         if (!strlen($imgConf['titleText']) && !is_array($imgConf['titleText.'])) {
00952                                                 $imgConf['titleText'] = $conf['titleText'];
00953                                                 $imgConf['titleText.'] = $conf['titleText.'];
00954                                         }
00955                                         if (!strlen($imgConf['longdescURL']) && !is_array($imgConf['longdescURL.'])) {
00956                                                 $imgConf['longdescURL'] = $conf['longdescURL'];
00957                                                 $imgConf['longdescURL.'] = $conf['longdescURL.'];
00958                                         }
00959                                 } else {
00960                                         $imgConf = array(
00961                                                 'altText' => $conf['altText'],
00962                                                 'titleText' => $conf['titleText'],
00963                                                 'longdescURL' => $conf['longdescURL'],
00964                                                 'file' => $totalImagePath
00965                                         );
00966                                 }
00967 
00968                                 $imgsTag[$imgKey] = $this->IMAGE($imgConf);
00969 
00970                                         // Store the original filepath
00971                                 $origImages[$imgKey]=$GLOBALS['TSFE']->lastImageInfo;
00972 
00973                                 $imageRowsFinalWidths[floor($a/$colCount)] += $GLOBALS['TSFE']->lastImageInfo[0];
00974                                 if ($GLOBALS['TSFE']->lastImageInfo[1]>$imageRowsMaxHeights[floor($a/$colCount)])       {
00975                                         $imageRowsMaxHeights[floor($a/$colCount)] = $GLOBALS['TSFE']->lastImageInfo[1];
00976                                 }
00977                         }
00978                                 // calculating the tableWidth:
00979                                 // TableWidth problems: It creates problems if the pictures are NOT as wide as the tableWidth.
00980                         $tableWidth = max($imageRowsFinalWidths)+ $colspacing*($colCount-1) + $colCount*$border*$borderThickness*2;
00981 
00982                                 // make table for pictures
00983                         $index=$imgStart;
00984 
00985                         $noRows = $this->stdWrap($conf['noRows'],$conf['noRows.']);
00986                         $noCols = $this->stdWrap($conf['noCols'],$conf['noCols.']);
00987                         if ($noRows) {$noCols=0;}       // noRows overrides noCols. They cannot exist at the same time.
00988                         if ($equalHeight) {
00989                                 $noCols=1;
00990                                 $noRows=0;
00991                         }
00992 
00993                         $rowCount_temp=1;
00994                         $colCount_temp=$colCount;
00995                         if ($noRows)    {
00996                                 $rowCount_temp = $rowCount;
00997                                 $rowCount=1;
00998                         }
00999                         if ($noCols)    {
01000                                 $colCount=1;
01001                         }
01002                                 // col- and rowspans calculated
01003                         $colspan = (($colspacing) ? $colCount*2-1 : $colCount);
01004                         $rowspan = (($rowspacing) ? $rowCount*2-1 : $rowCount) + $cap;
01005 
01006 
01007                                 // Edit icons:
01008                         $editIconsHTML = $conf['editIcons']&&$GLOBALS['TSFE']->beUserLogin ? $this->editIcons('',$conf['editIcons'],$conf['editIcons.']) : '';
01009 
01010                                 // strech out table:
01011                         $tablecode='';
01012                         $flag=0;
01013                         if ($conf['noStretchAndMarginCells']!=1)        {
01014                                 $tablecode.='<tr>';
01015                                 if ($txtMarg && $align=='right')        {       // If right aligned, the textborder is added on the right side
01016                                         $tablecode.='<td rowspan="'.($rowspan+1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?'<br />'.$editIconsHTML:'').'</td>';
01017                                         $editIconsHTML='';
01018                                         $flag=1;
01019                                 }
01020                                 $tablecode.='<td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$tableWidth.'" height="1" alt="" /></td>';
01021                                 if ($txtMarg && $align=='left') {       // If left aligned, the textborder is added on the left side
01022                                         $tablecode.='<td rowspan="'.($rowspan+1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?'<br />'.$editIconsHTML:'').'</td>';
01023                                         $editIconsHTML='';
01024                                         $flag=1;
01025                                 }
01026                                 if ($flag) $tableWidth+=$txtMarg+1;
01027         //                      $tableWidth=0;
01028                                 $tablecode.='</tr>';
01029                         }
01030 
01031                                 // draw table
01032                         for ($c=0;$c<$rowCount;$c++) {  // Looping through rows. If 'noRows' is set, this is '1 time', but $rowCount_temp will hold the actual number of rows!
01033                                 if ($c && $rowspacing)  {               // If this is NOT the first time in the loop AND if space is required, a row-spacer is added. In case of "noRows" rowspacing is done further down.
01034                                         $tablecode.='<tr><td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$rowspacing.'"'.$this->getBorderAttr(' border="0"').' alt="" title="" /></td></tr>';
01035                                 }
01036                                 $tablecode.='<tr>';     // starting row
01037                                 for ($b=0; $b<$colCount_temp; $b++)     {       // Looping through the columns
01038                                         if ($b && $colspacing)  {               // If this is NOT the first iteration AND if column space is required. In case of "noCols", the space is done without a separate cell.
01039                                                 if (!$noCols)   {
01040                                                         $tablecode.='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$colspacing.'" height="1"'.$this->getBorderAttr(' border="0"').' alt="" title="" /></td>';
01041                                                 } else {
01042                                                         $colSpacer='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.($border?$colspacing-6:$colspacing).'" height="'.($imageRowsMaxHeights[$c]+($border?$borderThickness*2:0)).'"'.$this->getBorderAttr(' border="0"').' align="'.($border?'left':'top').'" alt="" title="" />';
01043                                                         $colSpacer='<td valign="top">'.$colSpacer.'</td>';      // added 160301, needed for the new "noCols"-table...
01044                                                         $tablecode.=$colSpacer;
01045                                                 }
01046                                         }
01047                                         if (!$noCols || ($noCols && !$b))       {
01048                                                 $tablecode.='<td valign="top">';        // starting the cell. If "noCols" this cell will hold all images in the row, otherwise only a single image.
01049                                                 if ($noCols)    {$tablecode.='<table width="'.$imageRowsFinalWidths[$c].'" border="0" cellpadding="0" cellspacing="0"><tr>';}           // In case of "noCols" we must set the table-tag that surrounds the images in the row.
01050                                         }
01051                                         for ($a=0;$a<$rowCount_temp;$a++)       {       // Looping through the rows IF "noRows" is set. "noRows"  means that the rows of images is not rendered by physical table rows but images are all in one column and spaced apart with clear-gifs. This loop is only one time if "noRows" is not set.
01052                                                 $GLOBALS['TSFE']->register['IMAGE_NUM'] = $imgIndex;    // register previous imgIndex
01053                                                 $imgIndex = $index+$a*$colCount_temp;
01054                                                 $GLOBALS['TSFE']->register['IMAGE_NUM_CURRENT'] = $imgIndex;
01055                                                 if ($imgsTag[$imgIndex])        {
01056                                                         if ($rowspacing && $noRows && $a) {             // Puts distance between the images IF "noRows" is set and this is the first iteration of the loop
01057                                                                 $tablecode.= '<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$rowspacing.'" alt="" title="" /><br />';
01058                                                         }
01059                                                         if ($legacyCaptionSplit)        {
01060                                                                 $thisCaption = $captionArray[$imgIndex];
01061                                                         } else if ($conf['captionSplit'] || $conf['imageTextSplit'])    {
01062                                                                 $thisCaption = $this->stdWrap($this->cObjGet($conf['caption.'], 'caption.'), $conf['caption.']);
01063                                                         }
01064                                                         $imageHTML = $imgsTag[$imgIndex].'<br />';
01065                                                         $Talign = (!trim($thisCaption) && !$noRows && !$conf['netprintApplicationLink']) ? ' align="left"' : '';  // this is necessary if the tablerows are supposed to space properly together! "noRows" is excluded because else the images "layer" together.
01066                                                         if ($border)    {$imageHTML='<table border="0" cellpadding="'.$borderThickness.'" cellspacing="0" bgcolor="'.$borderColor.'"'.$Talign.'><tr><td>'.$imageHTML.'</td></tr></table>';}             // break-tag added 160301  , ($noRows?'':' align="left"')  removed 160301, break tag removed 160301 (later...)
01067                                                         $imageHTML.=$editIconsHTML;             $editIconsHTML='';
01068                                                         if ($conf['netprintApplicationLink'])   {$imageHTML = $this->netprintApplication_offsiteLinkWrap($imageHTML,$origImages[$imgIndex],$conf['netprintApplicationLink.']);}
01069                                                         $imageHTML.=$thisCaption;       // Adds caption.
01070                                                         if ($noCols)    {$imageHTML='<td valign="top">'.$imageHTML.'</td>';}            // If noCols, put in table cell.
01071                                                         $tablecode.=$imageHTML;
01072                                                 }
01073                                         }
01074                                         $index++;
01075                                         if (!$noCols || ($noCols && $b+1==$colCount_temp))      {
01076                                                 if ($noCols)    {$tablecode.='</tr></table>';}  // In case of "noCols" we must finish the table that surrounds the images in the row.
01077                                                 $tablecode.='</td>';    // Ending the cell. In case of "noCols" the cell holds all pictures!
01078                                         }
01079                                 }
01080                                 $tablecode.='</tr>';    // ending row
01081                         }
01082                         if ($c) {
01083                                 switch ($contentPosition)       {
01084                                         case '0':       // above
01085                                         case '8':       // below
01086                                                 switch ($align)        {        // These settings are needed for Firefox
01087                                                         case 'center':
01088                                                                 $table_align = 'margin-left: auto; margin-right: auto';
01089                                                         break;
01090                                                         case 'right':
01091                                                                 $table_align = 'margin-left: auto; margin-right: 0px';
01092                                                         break;
01093                                                         default:        // Most of all: left
01094                                                                 $table_align = 'margin-left: 0px; margin-right: auto';
01095                                                 }
01096                                                 $table_align = 'style="'.$table_align.'"';
01097                                         break;
01098                                         case '16':      // in text
01099                                                 $table_align = 'align="'.$align.'"';
01100                                         break;
01101                                         default:
01102                                                 $table_align = '';
01103                                 }
01104 
01105                                         // Table-tag is inserted
01106                                 $tablecode = '<table'.($tableWidth?' width="'.$tableWidth.'"':'').' border="0" cellspacing="0" cellpadding="0" '.$table_align.' class="imgtext-table">'.$tablecode;
01107                                 if ($editIconsHTML)     {       // IF this value is not long since reset.
01108                                         $tablecode.='<tr><td colspan="'.$colspan.'">'.$editIconsHTML.'</td></tr>';
01109                                         $editIconsHTML='';
01110                                 }
01111                                 if ($cap)       {
01112                                         $tablecode.='<tr><td colspan="'.$colspan.'" align="'.$caption_align.'">'.$caption.'</td></tr>';
01113                                 }
01114                                 $tablecode.='</table>';
01115                                 if ($conf['tableStdWrap.'])     {$tablecode=$this->stdWrap($tablecode,$conf['tableStdWrap.']);}
01116                         }
01117 
01118                         $spaceBelowAbove = intval($this->stdWrap($conf['spaceBelowAbove'],$conf['spaceBelowAbove.']));
01119                         switch ($contentPosition)       {
01120                                 case '0':       // above
01121                                         $output= '<div style="text-align:'.$align.';">'.$tablecode.'</div>'.$this->wrapSpace($content, $spaceBelowAbove.'|0');
01122                                 break;
01123                                 case '8':       // below
01124                                         $output= $this->wrapSpace($content, '0|'.$spaceBelowAbove).'<div style="text-align:'.$align.';">'.$tablecode.'</div>';
01125                                 break;
01126                                 case '16':      // in text
01127                                         $output= $tablecode.$content;
01128                                 break;
01129                                 case '24':      // in text, no wrap
01130                                         $theResult = '';
01131                                         $theResult.= '<table border="0" cellspacing="0" cellpadding="0" class="imgtext-nowrap"><tr>';
01132                                         if ($align=='right')    {
01133                                                 $theResult.= '<td valign="top">'.$content.'</td><td valign="top">'.$tablecode.'</td>';
01134                                         } else {
01135                                                 $theResult.= '<td valign="top">'.$tablecode.'</td><td valign="top">'.$content.'</td>';
01136                                         }
01137                                         $theResult.= '</tr></table>';
01138                                         $output= $theResult;
01139                                 break;
01140                         }
01141                 } else {
01142                         $output= $content;
01143                 }
01144 
01145                 if ($conf['stdWrap.']) {
01146                         $output = $this->stdWrap($output, $conf['stdWrap.']);
01147                 }
01148 
01149                 return $output;
01150         }
01151 
01159         function CONTENT($conf) {
01160                 $theValue='';
01161 
01162                 $originalRec = $GLOBALS['TSFE']->currentRecord;
01163                 if ($originalRec)       {               // If the currentRecord is set, we register, that this record has invoked this function. It's should not be allowed to do this again then!!
01164                         $GLOBALS['TSFE']->recordRegister[$originalRec]++;
01165                 }
01166 
01167                 if ($conf['table']=='pages' || substr($conf['table'],0,3)=='tt_' || substr($conf['table'],0,3)=='fe_' || substr($conf['table'],0,3)=='tx_' || substr($conf['table'],0,4)=='ttx_' || substr($conf['table'],0,5)=='user_')        {
01168 
01169                         $renderObjName = $conf['renderObj'] ? $conf['renderObj'] : '<'.$conf['table'];
01170                         $renderObjKey = $conf['renderObj'] ? 'renderObj' : '';
01171                         $renderObjConf = $conf['renderObj.'];
01172 
01173                         $slide = intval($conf['slide'])?intval($conf['slide']):0;
01174                         $slideCollect = intval($conf['slide.']['collect'])?intval($conf['slide.']['collect']):0;
01175                         $slideCollectReverse = intval($conf['slide.']['collectReverse'])?true:false;
01176                         $slideCollectFuzzy = $slideCollect?(intval($conf['slide.']['collectFuzzy'])?true:false):true;
01177                         $again = false;
01178 
01179                         do {
01180                                 $res = $this->exec_getQuery($conf['table'],$conf['select.']);
01181                                 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
01182                                         $GLOBALS['TT']->setTSlogMessage($error,3);
01183                                 } else {
01184                                         $this->currentRecordTotal = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
01185                                         $GLOBALS['TT']->setTSlogMessage('NUMROWS: '.$GLOBALS['TYPO3_DB']->sql_num_rows($res));
01186                                         $cObj =t3lib_div::makeInstance('tslib_cObj');
01187                                         $cObj->setParent($this->data,$this->currentRecord);
01188                                         $this->currentRecordNumber=0;
01189                                         $cobjValue = '';
01190                                         while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01191 
01192                                                         // Versioning preview:
01193                                                 $GLOBALS['TSFE']->sys_page->versionOL($conf['table'],$row);
01194 
01195                                                         // Language Overlay:
01196                                                 if (is_array($row) && $GLOBALS['TSFE']->sys_language_contentOL) {
01197                                                         $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($conf['table'],$row,$GLOBALS['TSFE']->sys_language_content,$GLOBALS['TSFE']->sys_language_contentOL);
01198                                                 }
01199 
01200                                                 if (is_array($row)) { // Might be unset in the sys_language_contentOL
01201                                                         if (!$GLOBALS['TSFE']->recordRegister[$conf['table'].':'.$row['uid']]) {
01202                                                                 $this->currentRecordNumber++;
01203                                                                 $cObj->parentRecordNumber = $this->currentRecordNumber;
01204                                                                 $GLOBALS['TSFE']->currentRecord = $conf['table'].':'.$row['uid'];
01205                                                                 $this->lastChanged($row['tstamp']);
01206                                                                 $cObj->start($row,$conf['table']);
01207                                                                 $tmpValue = $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
01208                                                                 $cobjValue .= $tmpValue;
01209                                                         }# else debug($GLOBALS['TSFE']->recordRegister,'CONTENT');
01210                                                 }
01211                                         }
01212                                 }
01213                                 if ($slideCollectReverse) {
01214                                         $theValue = $cobjValue.$theValue;
01215                                 } else {
01216                                         $theValue .= $cobjValue;
01217                                 }
01218                                 if ($slideCollect>0) {
01219                                         $slideCollect--;
01220                                 }
01221                                 if ($slide) {
01222                                         if ($slide>0) {
01223                                                 $slide--;
01224                                         }
01225                                         $conf['select.']['pidInList'] = $this->getSlidePids($conf['select.']['pidInList'], $conf['select.']['pidInList.']);
01226                                         $again = strlen($conf['select.']['pidInList'])?true:false;
01227                                 }
01228                         } while ($again&&(($slide&&!strlen($tmpValue)&&$slideCollectFuzzy)||($slide&&$slideCollect)));
01229                 }
01230 
01231                 $theValue = $this->wrap($theValue,$conf['wrap']);
01232                 if ($conf['stdWrap.']) $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
01233 
01234                 $GLOBALS['TSFE']->currentRecord = $originalRec; // Restore
01235                 return $theValue;
01236         }
01237 
01245         function RECORDS($conf) {
01246                 $theValue='';
01247 
01248                 $originalRec = $GLOBALS['TSFE']->currentRecord;
01249                 if ($originalRec)       {               // If the currentRecord is set, we register, that this record has invoked this function. It's should not be allowed to do this again then!!
01250                         $GLOBALS['TSFE']->recordRegister[$originalRec]++;
01251                 }
01252 
01253                 $conf['source'] = $this->stdWrap($conf['source'],$conf['source.']);
01254                 if ($conf['tables'] && $conf['source']) {
01255                         $allowedTables = $conf['tables'];
01256                         if (is_array($conf['conf.']))   {
01257                                 reset($conf['conf.']);
01258                                 while(list($k)=each($conf['conf.']))    {
01259                                         if (substr($k,-1)!='.')         $allowedTables.=','.$k;
01260                                 }
01261                         }
01262 
01263                         $loadDB = t3lib_div::makeInstance('FE_loadDBGroup');
01264                         $loadDB->start($conf['source'], $allowedTables);
01265                         reset($loadDB->tableArray);
01266                         while(list($table,)=each($loadDB->tableArray))  {
01267                                 if (is_array($GLOBALS['TCA'][$table]))  {
01268                                         $loadDB->additionalWhere[$table]=$this->enableFields($table);
01269                                 }
01270                         }
01271                         $loadDB->getFromDB();
01272 
01273                         reset($loadDB->itemArray);
01274                         $data = $loadDB->results;
01275 
01276                         $cObj =t3lib_div::makeInstance('tslib_cObj');
01277                         $cObj->setParent($this->data,$this->currentRecord);
01278                         $this->currentRecordNumber=0;
01279                         $this->currentRecordTotal = count($loadDB->itemArray);
01280                         reset($loadDB->itemArray);
01281                         while(list(,$val)=each($loadDB->itemArray))     {
01282                                 $row = $data[$val['table']][$val['id']];
01283 
01284                                         // Versioning preview:
01285                                 $GLOBALS['TSFE']->sys_page->versionOL($val['table'],$row);
01286 
01287                                         // Language Overlay:
01288                                 if (is_array($row) && $GLOBALS['TSFE']->sys_language_contentOL) {
01289                                         $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($val['table'],$row,$GLOBALS['TSFE']->sys_language_content,$GLOBALS['TSFE']->sys_language_contentOL);
01290                                 }
01291 
01292                                 if (is_array($row))     {       // Might be unset in the content overlay things...
01293                                         if (!$conf['dontCheckPid'])     {
01294                                                 $row = $this->checkPid($row['pid']) ? $row : '';
01295                                         }
01296                                         if ($row && !$GLOBALS['TSFE']->recordRegister[$val['table'].':'.$val['id']])    {
01297                                                 $renderObjName = $conf['conf.'][$val['table']] ? $conf['conf.'][$val['table']] : '<'.$val['table'];
01298                                                 $renderObjKey = $conf['conf.'][$val['table']] ? 'conf.'.$val['table'] : '';
01299                                                 $renderObjConf = $conf['conf.'][$val['table'].'.'];
01300                                                 $this->currentRecordNumber++;
01301                                                 $cObj->parentRecordNumber=$this->currentRecordNumber;
01302                                                 $GLOBALS['TSFE']->currentRecord = $val['table'].':'.$val['id'];
01303                                                 $this->lastChanged($row['tstamp']);
01304                                                 $cObj->start($row,$val['table']);
01305                                                 $tmpValue = $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
01306                                                 $theValue .= $tmpValue;
01307                                         }# else debug($GLOBALS['TSFE']->recordRegister,'RECORDS');
01308                                 }
01309                         }
01310                 }
01311                 if ($conf['wrap'])      $theValue = $this->wrap($theValue,$conf['wrap']);
01312                 if ($conf['stdWrap.'])  $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
01313 
01314                 $GLOBALS['TSFE']->currentRecord = $originalRec; // Restore
01315                 return $theValue;
01316         }
01317 
01325         function HMENU($conf)   {
01326                 $content='';
01327                 if ($this->checkIf($conf['if.']))       {
01328                         $cls = strtolower($conf[1]);
01329                         if (t3lib_div::inList($GLOBALS['TSFE']->tmpl->menuclasses,$cls))        {
01330                                 if ($conf['special.']['value.'])        {
01331                                         $conf['special.']['value']  = $this->stdWrap($conf['special.']['value'], $conf['special.']['value.']);
01332                                 }
01333                                 $GLOBALS['TSFE']->register['count_HMENU']++;
01334                                 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']=0;
01335                                 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']=array();
01336                                 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId']=array();
01337 
01338                                 $menu = t3lib_div::makeInstance('tslib_'.$cls);
01339                                 $menu->parent_cObj = $this;
01340                                 $menu->start($GLOBALS['TSFE']->tmpl, $GLOBALS['TSFE']->sys_page, '', $conf, 1);
01341                                 $menu->makeMenu();
01342                                 $content.=$menu->writeMenu();
01343                         }
01344                         if ($conf['wrap'])              $content=$this->wrap($content, $conf['wrap']);
01345                         if ($conf['stdWrap.'])  $content = $this->stdWrap($content, $conf['stdWrap.']);
01346                 }
01347                 return $content;
01348         }
01349 
01357         function CTABLE ($conf) {
01358                 $controlTable = t3lib_div::makeInstance('tslib_controlTable');
01359                         if ($conf['tableParams'])       {
01360                         $controlTable->tableParams = $conf['tableParams'];
01361                 }
01362                         // loads the pagecontent
01363                 $controlTable->contentW = $conf['cWidth'];
01364                         // loads the menues if any
01365                 if (is_array($conf['c.']))      {
01366                         $controlTable->content = $this->cObjGet($conf['c.'],'c.');
01367                         $controlTable->contentTDparams = isset($conf['c.']['TDParams']) ? $conf['c.']['TDParams'] : 'valign="top"';
01368                 }
01369                 if (is_array($conf['lm.']))     {
01370                         $controlTable->lm = $this->cObjGet($conf['lm.'],'lm.');
01371                         $controlTable->lmTDparams = isset($conf['lm.']['TDParams']) ? $conf['lm.']['TDParams'] : 'valign="top"';
01372                 }
01373                 if (is_array($conf['tm.']))     {
01374                         $controlTable->tm = $this->cObjGet($conf['tm.'],'tm.');
01375                         $controlTable->tmTDparams = isset($conf['tm.']['TDParams']) ? $conf['tm.']['TDParams'] : 'valign="top"';
01376                 }
01377                 if (is_array($conf['rm.']))     {
01378                         $controlTable->rm = $this->cObjGet($conf['rm.'],'rm.');
01379                         $controlTable->rmTDparams = isset($conf['rm.']['TDParams']) ? $conf['rm.']['TDParams'] : 'valign="top"';
01380                 }
01381                 if (is_array($conf['bm.']))     {
01382                         $controlTable->bm = $this->cObjGet($conf['bm.'],'bm.');
01383                         $controlTable->bmTDparams = isset($conf['bm.']['TDParams']) ? $conf['bm.']['TDParams'] : 'valign="top"';
01384                 }
01385                 return $controlTable->start($conf['offset'],$conf['cMargins']);
01386         }
01387 
01395         function OTABLE ($conf) {
01396                 $controlTable = t3lib_div::makeInstance('tslib_tableOffset');
01397                 if ($conf['tableParams'])       {
01398                         $controlTable->tableParams = $conf['tableParams'];
01399                 }
01400                 return $controlTable->start($this->cObjGet($conf),$conf['offset']);
01401         }
01402 
01410         function COLUMNS ($conf)        {
01411                 $content='';
01412                 if (is_array($conf) && $this->checkIf($conf['if.']))    {
01413                         $tdRowCount=0;
01414                         $tableParams = $conf['tableParams'] ? ' '.$conf['tableParams'] : ' border="0" cellspacing="0" cellpadding="0"';
01415                         $TDparams = $conf['TDparams'] ? ' '.$conf['TDparams']:' valign="top"';
01416                         $rows = t3lib_div::intInRange($conf['rows'],2,20);
01417                         $totalWidth = intval($conf['totalWidth']);
01418                         $columnWidth=0;
01419 
01420                         $totalGapWidth=0;
01421                         $gapData = Array(
01422                                 'gapWidth' => $this->stdWrap($conf['gapWidth'],$conf['gapWidth.']),
01423                                 'gapBgCol' => $this->stdWrap($conf['gapBgCol'],$conf['gapBgCol.']),
01424                                 'gapLineThickness' => $this->stdWrap($conf['gapLineThickness'],$conf['gapLineThickness.']),
01425                                 'gapLineCol' => $this->stdWrap($conf['gapLineCol'],$conf['gapLineCol.'])
01426                         );
01427                         $gapData = $GLOBALS['TSFE']->tmpl->splitConfArray($gapData,$rows-1);
01428                         reset($gapData);
01429                         while(list(,$val)=each($gapData))       {
01430                                 $totalGapWidth+=intval($val['gapWidth']);
01431                         }
01432 
01433                         if ($totalWidth)        {
01434                                 $columnWidth = ceil(($totalWidth-$totalGapWidth)/$rows);
01435                                 $TDparams.=' width="'.$columnWidth.'"';
01436                                 $tableParams.=' width="'.$totalWidth.'"';
01437                         } else {
01438                                 $TDparams.=' width="'.floor(100/$rows).'%"';
01439                                 $tableParams.=' width="100%"';
01440                         }
01441 
01442                         for ($a=1;$a<=$rows;$a++)       {
01443                                 $tdRowCount++;
01444                                 $content.='<td'.$TDparams.'>';
01445                                 $content.=$this->cObjGetSingle($conf[$a],$conf[$a.'.'], $a);
01446                                 $content.='</td>';
01447                                 if ($a < $rows) {
01448                                         $gapConf = $gapData[($a-1)];
01449                                         $gapWidth = intval($gapConf['gapWidth']);
01450                                         if ($gapWidth)  {
01451                                                 $tdPar = $gapConf['gapBgCol'] ? ' bgcolor="'.$gapConf['gapBgCol'].'"' : '';
01452                                                 $gapLine = intval($gapConf['gapLineThickness']);
01453                                                 if ($gapLine)   {
01454                                                         $gapSurround = t3lib_div::intInRange(($gapWidth-$gapLine)/2, 1, 1000);
01455                                                                 // right gap
01456                                                         $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
01457                                                         $tdRowCount++;
01458                                                                 // line:
01459                                                         $GtdPar = $gapConf['gapLineCol'] ? ' bgcolor="'.$gapConf['gapLineCol'].'"' : ' bgcolor="black"';
01460                                                         $content.='<td'.$GtdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapLine.'" height="1" alt="" title="" /></td>';
01461                                                         $tdRowCount++;
01462                                                                 // left gap
01463                                                         $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
01464                                                         $tdRowCount++;
01465                                                 } else {
01466                                                         $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapWidth.'" height="1" alt="" title="" /></td>';
01467                                                         $tdRowCount++;
01468                                                 }
01469                                         }
01470                                 }
01471                         }
01472                         $content='<tr>'.$content.'</tr>';
01473                         $content='<table'.$tableParams.'>'.$content.'</table>';
01474                         $content.=$this->cObjGetSingle($conf['after'],$conf['after.'], 'after');
01475                         if ($conf['stdWrap.'])  {
01476                                 $content = $this->stdWrap($content,$conf['stdWrap.']);
01477                         }
01478                 }
01479                 return $content;
01480         }
01481 
01489         function HRULER ($conf) {
01490                 $lineThickness = t3lib_div::intInRange($this->stdWrap($conf['lineThickness'],$conf['lineThickness.']),1,50);
01491                 $lineColor = $conf['lineColor'] ? $conf['lineColor'] : 'black';
01492                 $spaceBefore = intval($conf['spaceLeft']);
01493                 $spaceAfter = intval($conf['spaceRight']);
01494                 $tableWidth = $conf['tableWidth'] ? $conf['tableWidth'] : '99%';
01495                 $content='';
01496 
01497                 $content.='<table border="0" cellspacing="0" cellpadding="0" width="'.htmlspecialchars($tableWidth).'"><tr>';
01498                 if ($spaceBefore)       {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$spaceBefore.'" height="1" alt="" title="" /></td>'; }
01499                 $content.='<td bgcolor="'.$lineColor.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$lineThickness.'" alt="" title="" /></td>';
01500                 if ($spaceAfter)        {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$spaceAfter.'" height="1" alt="" title="" /></td>'; }
01501                 $content.='</tr></table>';
01502 
01503                 $content = $this->stdWrap($content, $conf['stdWrap.']);
01504                 return $content;
01505         }
01506 
01514         function CASEFUNC ($conf){
01515                 $content='';
01516                 if ($this->checkIf($conf['if.']))       {
01517                         if ($conf['setCurrent'] || $conf['setCurrent.']){$this->data[$this->currentValKey] = $this->stdWrap($conf['setCurrent'], $conf['setCurrent.']);}
01518                         $key = $this->stdWrap($conf['key'],$conf['key.']);
01519                         $key = strlen($conf[$key]) ? $key : 'default';
01520                         $name = $conf[$key];
01521                         $theValue = $this->cObjGetSingle($name,$conf[$key.'.'], $key);
01522                         if ($conf['stdWrap.'])  {
01523                                 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
01524                         }
01525                         return $theValue;
01526                 }
01527         }
01528 
01539         function LOAD_REGISTER($conf,$name)     {
01540                 if ($name=='RESTORE_REGISTER')  {
01541                         $GLOBALS['TSFE']->register = array_pop($GLOBALS['TSFE']->registerStack);
01542                 } else {
01543                         array_push($GLOBALS['TSFE']->registerStack,$GLOBALS['TSFE']->register);
01544                         if (is_array($conf))    {
01545                                 reset($conf);
01546                                 while(list($theKey,$theValue)=each($conf))      {
01547                                         if (!strstr($theKey,'.') || !isset($conf[substr($theKey,0,-1)]))        {               // Only if 1) the property is set but not the value itself, 2) the value and/or any property
01548                                                 if (strstr($theKey,'.'))        {
01549                                                         $theKey = substr($theKey,0,-1);
01550                                                 }
01551                                                 $GLOBALS['TSFE']->register[$theKey] = $this->stdWrap($conf[$theKey],$conf[$theKey.'.']);
01552                                         }
01553                                 }
01554                         }
01555                 }
01556                 return '';
01557         }
01558 
01579         function FORM($conf,$formData='')    {
01580                 $content='';
01581                 if (is_array($formData))        {
01582                         $dataArr = $formData;
01583                 } else {
01584                         $data=$this->stdWrap($conf['data'],$conf['data.']);
01585                                 // Clearing dataArr
01586                         $dataArr=array();
01587                                 // Getting the original config
01588                         if (trim($data))        {
01589                                 $data = ereg_replace(chr(10),'||',$data);
01590                                 $dataArr = explode('||',$data);
01591                         }
01592                                 // Adding the new dataArray config form:
01593                         if (is_array($conf['dataArray.'])) {    // dataArray is supplied
01594                                 $sKeyArray = t3lib_TStemplate::sortedKeyList($conf['dataArray.'], TRUE);
01595                                 foreach($sKeyArray as $theKey)  {
01596                                         $dAA = $conf['dataArray.'][$theKey.'.'];
01597                                         if (is_array($dAA))     {
01598                                                 $temp=array();
01599                                                 list($temp[0])= explode('|',$dAA['label.'] ? $this->stdWrap($dAA['label'],$dAA['label.']) : $dAA['label']);
01600                                                 list($temp[1])= explode('|',$dAA['type']);
01601                                                 if ($dAA['required'])   {$temp[1]='*'.$temp[1];}
01602                                                 list($temp[2])= explode('|',$dAA['value.'] ? $this->stdWrap($dAA['value'],$dAA['value.']) : $dAA['value']);
01603                                                         // If value Array is set, then implode those values.
01604                                                 if (is_array($dAA['valueArray.']))      {
01605                                                         reset($dAA['valueArray.']);
01606                                                         $temp_accum = array();
01607                                                         while(list($dAKey_vA,$dAA_vA)=each($dAA['valueArray.']))        {
01608                                                                 if (is_array($dAA_vA) && !strcmp(intval($dAKey_vA).'.',$dAKey_vA))      {
01609                                                                         $temp_vA=array();
01610                                                                         list($temp_vA[0])= explode('=',$dAA_vA['label.'] ? $this->stdWrap($dAA_vA['label'],$dAA_vA['label.']) : $dAA_vA['label']);
01611                                                                         if ($dAA_vA['selected'])        {$temp_vA[0]='*'.$temp_vA[0];}
01612                                                                         list($temp_vA[1])= explode(',',$dAA_vA['value']);
01613                                                                 }
01614                                                                 $temp_accum[] = implode('=',$temp_vA);
01615                                                         }
01616                                                         $temp[2] = implode(',',$temp_accum);
01617                                                 }
01618                                                 list($temp[3])= explode('|',$dAA['specialEval.'] ? $this->stdWrap($dAA['specialEval'],$dAA['specialEval.']) : $dAA['specialEval']);
01619 
01620                                                         // adding the form entry to the dataArray
01621                                                 $dataArr[] = implode('|',$temp);
01622                                         }
01623                                 }
01624                         }
01625                 }
01626 
01627                 $attachmentCounter = '';
01628                 $hiddenfields = '';
01629                 $fieldlist = Array();
01630                 $propertyOverride = Array();
01631                 $fieldname_hashArray = Array();
01632                 $cc = 0;
01633 
01634                 $xhtmlStrict = t3lib_div::inList('xhtml_strict,xhtml_11,xhtml_2',$GLOBALS['TSFE']->xhtmlDoctype);
01635                         // Formname
01636                 if ($conf['formName'])  {
01637                         $formname = $this->cleanFormName($conf['formName']);
01638                 } else {
01639                         $formname = $GLOBALS['TSFE']->uniqueHash();
01640                         $formname = 'a'.$formname;      // form name has to start with a letter to reach XHTML compliance
01641                 }
01642 
01643                 if (isset($conf['fieldPrefix']))        {
01644                         if ($conf['fieldPrefix'])       {
01645                                 $prefix = $this->cleanFormName($conf['fieldPrefix']);
01646                         } else {
01647                                 $prefix = '';
01648                         }
01649                 } else {
01650                         $prefix = $formname;
01651                 }
01652 
01653                 foreach($dataArr as $val)       {
01654 
01655                         $cc++;
01656                         $confData=Array();
01657                         if (is_array($formData)) {
01658                                 $parts = $val;
01659                                 $val = 1;    // true...
01660                         } else {
01661                                 $val = trim($val);
01662                                 $parts = explode('|',$val);
01663                         }
01664                         if ($val && strcspn($val,'#/')) {
01665                                         // label:
01666                                 $confData['label'] = trim($parts[0]);
01667                                         // field:
01668                                 $fParts = explode(',',$parts[1]);
01669                                 $fParts[0]=trim($fParts[0]);
01670                                 if (substr($fParts[0],0,1)=='*')        {
01671                                         $confData['required']=1;
01672                                         $fParts[0] = substr($fParts[0],1);
01673                                 }
01674                                 $typeParts = explode('=',$fParts[0]);
01675                                 $confData['type'] = trim(strtolower(end($typeParts)));
01676                                 if (count($typeParts)==1)       {
01677                                         $confData['fieldname'] = $this->cleanFormName($parts[0]);
01678                                         if (strtolower(ereg_replace('[^[:alnum:]]','',$confData['fieldname']))=='email')        {$confData['fieldname']='email';}
01679                                                 // Duplicate fieldnames resolved
01680                                         if (isset($fieldname_hashArray[md5($confData['fieldname'])]))   {
01681                                                 $confData['fieldname'].='_'.$cc;
01682                                         }
01683                                         $fieldname_hashArray[md5($confData['fieldname'])]=$confData['fieldname'];
01684                                                 // Attachment names...
01685                                         if ($confData['type']=='file')  {
01686                                                 $confData['fieldname']='attachment'.$attachmentCounter;
01687                                                 $attachmentCounter=intval($attachmentCounter)+1;
01688                                         }
01689                                 } else {
01690                                         $confData['fieldname'] = str_replace(' ','_',trim($typeParts[0]));
01691                                 }
01692                                 $fieldCode='';
01693 
01694                                 if ($conf['wrapFieldName'])     {
01695                                         $confData['fieldname'] = $this->wrap($confData['fieldname'],$conf['wrapFieldName']);
01696                                 }
01697 
01698                                         // Set field name as current:
01699                                 $this->setCurrentVal($confData['fieldname']);
01700 
01701                                         // Additional parameters
01702                                 if (trim($confData['type']))    {
01703                                         $addParams=trim($conf['params']);
01704                                         if (is_array($conf['params.']) && isset($conf['params.'][$confData['type']]))   {
01705                                                 $addParams=trim($conf['params.'][$confData['type']]);
01706                                         }
01707                                         if (strcmp('',$addParams))      $addParams=' '.$addParams;
01708                                 } else $addParams='';
01709 
01710                                 if ($conf['dontMd5FieldNames']) {
01711                                         $fName = $confData['fieldname'];
01712                                 } else {
01713                                         $fName = md5($confData['fieldname']);
01714                                 }
01715 
01716                                         // Accessibility: Set id = fieldname attribute:
01717                                 if ($conf['accessibility'] || $xhtmlStrict)     {
01718                                         $elementIdAttribute = ' id="'.$prefix.$fName.'"';
01719                                 } else {
01720                                         $elementIdAttribute = '';
01721                                 }
01722 
01723                                         // Create form field based on configuration/type:
01724                                 switch($confData['type'])       {
01725                                         case 'textarea':
01726                                                 $cols=trim($fParts[1]) ? intval($fParts[1]) : 20;
01727                                                 $compWidth = doubleval($conf['compensateFieldWidth'] ? $conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth);
01728                                                 $compWidth = $compWidth ? $compWidth : 1;
01729                                                 $cols = t3lib_div::intInRange($cols*$compWidth, 1, 120);
01730 
01731                                                 $rows=trim($fParts[2]) ? t3lib_div::intInRange($fParts[2],1,30) : 5;
01732                                                 $wrap=trim($fParts[3]);
01733                                                 if ($conf['noWrapAttr'] || $wrap === 'disabled')        {
01734                                                         $wrap='';
01735                                                 } else {
01736                                                         $wrap = $wrap ? ' wrap="'.$wrap.'"' : ' wrap="virtual"';
01737                                                 }
01738                                                 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], str_replace('\n',chr(10),trim($parts[2])));
01739                                                 $fieldCode=sprintf('<textarea name="%s"%s cols="%s" rows="%s"%s%s>%s</textarea>',
01740                                                         $confData['fieldname'], $elementIdAttribute, $cols, $rows, $wrap, $addParams, t3lib_div::formatForTextarea($default));
01741                                         break;
01742                                         case 'input':
01743                                         case 'password':
01744                                                 $size=trim($fParts[1]) ? intval($fParts[1]) : 20;
01745                                                 $compWidth = doubleval($conf['compensateFieldWidth'] ? $conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth);
01746                                                 $compWidth = $compWidth ? $compWidth : 1;
01747                                                 $size = t3lib_div::intInRange($size*$compWidth, 1, 120);
01748                                                 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
01749 
01750                                                 if ($confData['type']=='password')      {
01751                                                         $default='';
01752                                                 }
01753 
01754                                                 $max=trim($fParts[2]) ? ' maxlength="'.t3lib_div::intInRange($fParts[2],1,1000).'"' : "";
01755                                                 $theType = $confData['type']=='input' ? 'text' : 'password';
01756 
01757                                                 $fieldCode=sprintf('<input type="%s" name="%s"%s size="%s"%s value="%s"%s />',
01758                                                         $theType, $confData['fieldname'], $elementIdAttribute, $size, $max, htmlspecialchars($default), $addParams);
01759 
01760                                         break;
01761                                         case 'file':
01762                                                 $size=trim($fParts[1]) ? t3lib_div::intInRange($fParts[1],1,60) : 20;
01763                                                 $fieldCode=sprintf('<input type="file" name="%s"%s size="%s"%s />',
01764                                                         $confData['fieldname'], $elementIdAttribute, $size, $addParams);
01765                                         break;
01766                                         case 'check':
01767                                                         // alternative default value:
01768                                                 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
01769                                                 $checked = $default ? ' checked="checked"' : '';
01770                                                 $fieldCode=sprintf('<input type="checkbox" value="%s" name="%s"%s%s%s />',
01771                                                         1, $confData['fieldname'], $elementIdAttribute, $checked, $addParams);
01772                                         break;
01773                                         case 'select':
01774                                                 $option='';
01775                                                 $valueParts = explode(',',$parts[2]);
01776                                                         // size
01777                                                 if (strtolower(trim($fParts[1]))=='auto')       {$fParts[1]=count($valueParts);}                // Auto size set here. Max 20
01778                                                 $size=trim($fParts[1]) ? t3lib_div::intInRange($fParts[1],1,20) : 1;
01779                                                         // multiple
01780                                                 $multiple = strtolower(trim($fParts[2]))=='m' ? ' multiple="multiple"' : '';
01781 
01782                                                 $items=array();         // Where the items will be
01783                                                 $defaults=array(); //RTF
01784                                                 $pCount = count($valueParts);
01785                                                 for($a=0;$a<$pCount;$a++)       {
01786                                                         $valueParts[$a]=trim($valueParts[$a]);
01787                                                         if (substr($valueParts[$a],0,1)=='*')   {       // Finding default value
01788                                                                 $sel='selected';
01789                                                                 $valueParts[$a] = substr($valueParts[$a],1);
01790                                                         } else $sel='';
01791                                                                 // Get value/label
01792                                                         $subParts=explode('=',$valueParts[$a]);
01793                                                         $subParts[1] = (isset($subParts[1])?trim($subParts[1]):trim($subParts[0]));             // Sets the value
01794                                                         $items[] = $subParts;   // Adds the value/label pair to the items-array
01795                                                         if ($sel) {$defaults[]=$subParts[1];}   // Sets the default value if value/label pair is marked as default.
01796                                                 }
01797                                                         // alternative default value:
01798                                                 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $defaults);
01799                                                 if (!is_array($default)) {
01800                                                         $defaults=array();
01801                                                         $defaults[] = $default;
01802                                                 } else $defaults=$default;
01803                                                         // Create the select-box:
01804                                                 $iCount = count($items);
01805                                                 for($a=0;$a<$iCount;$a++)       {
01806                                                         $option.='<option value="'.$items[$a][1].'"'.(in_array($items[$a][1],$defaults)?' selected="selected"':'').'>'.trim($items[$a][0]).'</option>'; //RTF
01807                                                 }
01808 
01809                                                 if ($multiple)  $confData['fieldname'].='[]';   // The fieldname must be prepended '[]' if multiple select. And the reason why it's prepended is, because the required-field list later must also have [] prepended.
01810                                                 $fieldCode=sprintf('<select name="%s"%s size="%s"%s%s>%s</select>',
01811                                                         $confData['fieldname'], $elementIdAttribute, $size, $multiple, $addParams, $option); //RTF
01812                                         break;
01813                                         case 'radio':
01814                                                 $option='';
01815                                                 if ($conf['accessibility'])     {
01816                                                         $option.='<fieldset'.$elementIdAttribute.'><legend>'.$confData['label'].'</legend>';
01817                                                 }
01818                                                 $valueParts = explode(',',$parts[2]);
01819                                                 $items=array();         // Where the items will be
01820                                                 $default='';
01821                                                 $pCount = count($valueParts);
01822                                                 for($a=0;$a<$pCount;$a++)       {
01823                                                         $valueParts[$a]=trim($valueParts[$a]);
01824                                                         if (substr($valueParts[$a],0,1)=='*')   {
01825                                                                 $sel='checked';
01826                                                                 $valueParts[$a] = substr($valueParts[$a],1);
01827                                                         } else $sel='';
01828                                                                 // Get value/label
01829                                                         $subParts=explode('=',$valueParts[$a]);
01830                                                         $subParts[1] = (isset($subParts[1])?trim($subParts[1]):trim($subParts[0]));             // Sets the value
01831                                                         $items[] = $subParts;   // Adds the value/label pair to the items-array
01832                                                         if ($sel) {$default=$subParts[1];}      // Sets the default value if value/label pair is marked as default.
01833                                                 }
01834                                                         // alternative default value:
01835                                                 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $default);
01836                                                         // Create the select-box:
01837                                                 $iCount = count($items);
01838                                                 for($a=0;$a<$iCount;$a++)       {
01839                                                         $radioId = $prefix.$fName.$this->cleanFormName($items[$a][0]);
01840                                                         if ($conf['accessibility'])     {
01841                                                                 $radioLabelIdAttribute = ' id="'.$radioId.'"';
01842                                                         } else {
01843                                                                 $radioLabelIdAttribute = '';
01844                                                         }
01845                                                         $option .= '<input type="radio" name="'.$confData['fieldname'].'"'.$radioLabelIdAttribute.' value="'.$items[$a][1].'"'.(!strcmp($items[$a][1],$default)?' checked="checked"':'').$addParams.' />';
01846                                                         if ($conf['accessibility'])     {
01847                                                                 $option .= '<label for="'.$radioId.'">' . $this->stdWrap(trim($items[$a][0]), $conf['radioWrap.']) . '</label>';
01848                                                         } else {
01849                                                                 $option .= $this->stdWrap(trim($items[$a][0]), $conf['radioWrap.']);
01850                                                         }
01851                                                 }
01852                                                 if ($conf['accessibility'])     {
01853                                                         $option.='</fieldset>';
01854                                                 }
01855                                                 $fieldCode = $option;
01856                                         break;
01857                                         case 'hidden':
01858                                                 $value = trim($parts[2]);
01859                                                 if(strlen($value) && t3lib_div::inList('recipient_copy,recipient',$confData['fieldname']) && $GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail']) {
01860                                                         break;
01861                                                 }
01862                                                 if (strlen($value) && t3lib_div::inList('recipient_copy,recipient',$confData['fieldname']))     {
01863                                                         $value = $GLOBALS['TSFE']->codeString($value);
01864                                                 }
01865                                                 $hiddenfields.=sprintf('<input type="hidden" name="%s"%s value="%s" />',
01866                                                         $confData['fieldname'], $elementIdAttribute, htmlspecialchars($value));
01867                                         break;
01868                                         case 'property':
01869                                                 if (t3lib_div::inList('type,locationData,goodMess,badMess,emailMess',$confData['fieldname']))   {
01870                                                         $value=trim($parts[2]);
01871                                                         $propertyOverride[$confData['fieldname']] = $value;
01872                                                         $conf[$confData['fieldname']] = $value;
01873                                                 }
01874                                         break;
01875                                         case 'submit':
01876                                                 $value=trim($parts[2]);
01877                                                 if ($conf['image.'])    {
01878                                                         $this->data[$this->currentValKey] = $value;
01879                                                         $image = $this->IMG_RESOURCE($conf['image.']);
01880                                                         $params = $conf['image.']['params'] ? ' '.$conf['image.']['params'] : '';
01881                                                         $params.= $this->getAltParam($conf['image.'], false);
01882                                                         $params.= $addParams;
01883                                                 } else {
01884                                                         $image = '';
01885                                                 }
01886                                                 if ($image)     {
01887                                                         $fieldCode=sprintf('<input type="image" name="%s"%s src="%s"%s />',
01888                                                                 $confData['fieldname'], $elementIdAttribute, $image, $params);
01889                                                 } else  {
01890                                                         $fieldCode=sprintf('<input type="submit" name="%s"%s value="%s"%s />',
01891                                                                 $confData['fieldname'], $elementIdAttribute, t3lib_div::deHSCentities(htmlspecialchars($value)), $addParams);
01892                                                 }
01893                                         break;
01894                                         case 'reset':
01895                                                 $value=trim($parts[2]);
01896                                                 $fieldCode=sprintf('<input type="reset" name="%s"%s value="%s"%s />',
01897                                                         $confData['fieldname'], $elementIdAttribute, t3lib_div::deHSCentities(htmlspecialchars($value)), $addParams);
01898                                         break;
01899                                         case 'label':
01900                                                 $fieldCode = nl2br(htmlspecialchars(trim($parts[2])));
01901                                         break;
01902                                         default:
01903                                                 $confData['type'] = 'comment';
01904                                                 $fieldCode = trim($parts[2]).'&nbsp;';
01905                                         break;
01906                                 }
01907                                 if ($fieldCode) {
01908 
01909                                                 // Checking for special evaluation modes:
01910                                         if (t3lib_div::inList('textarea,input,password',$confData['type']) && strlen(trim($parts[3])))  {
01911                                                 $modeParameters = t3lib_div::trimExplode(':',$parts[3]);
01912                                         } else {
01913                                                 $modeParameters = array();
01914                                         }
01915 
01916                                                 // Adding evaluation based on settings:
01917                                         switch((string)$modeParameters[0])      {
01918                                                 case 'EREG':
01919                                                         $fieldlist[] = '_EREG';
01920                                                         $fieldlist[] = rawurlencode($modeParameters[1]);
01921                                                         $fieldlist[] = rawurlencode($modeParameters[2]);
01922                                                         $fieldlist[] = rawurlencode($confData['fieldname']);
01923                                                         $fieldlist[] = rawurlencode($confData['label']);
01924                                                         $confData['required'] = 1;      // Setting this so "required" layout is used.
01925                                                 break;
01926                                                 case 'EMAIL':
01927                                                         $fieldlist[] = '_EMAIL';
01928                                                         $fieldlist[] = rawurlencode($confData['fieldname']);
01929                                                         $fieldlist[] = rawurlencode($confData['label']);
01930                                                         $confData['required'] = 1;      // Setting this so "required" layout is used.
01931                                                 break;
01932                                                 default:
01933                                                         if ($confData['required'] && $confData['type']!='check')        {
01934                                                                 $fieldlist[] = rawurlencode($confData['fieldname']);
01935                                                                 $fieldlist[] = rawurlencode($confData['label']);
01936                                                         }
01937                                                 break;
01938                                         }
01939 
01940                                                 // Field:
01941                                         $fieldLabel = $confData['label'];
01942                                         if ($conf['accessibility'] && trim($fieldLabel) && !preg_match('/^(label|hidden|comment)$/',$confData['type'])) {
01943                                                 $fieldLabel = '<label for="'.$prefix.$fName.'">'.$fieldLabel.'</label>';
01944                                         }
01945 
01946                                                 // Getting template code:
01947                                         $fieldCode = $this->stdWrap($fieldCode, $conf['fieldWrap.']);
01948                                         $labelCode = $this->stdWrap($fieldLabel, $conf['labelWrap.']);
01949                                         $commentCode = $this->stdWrap($confData['label'], $conf['commentWrap.']); // RTF
01950                                         $result = $conf['layout'];
01951                                         if ($conf['REQ'] && $confData['required'])      {
01952                                                 if (is_array($conf['REQ.']['fieldWrap.']))
01953                                                         $fieldCode = $this->stdWrap($fieldCode, $conf['REQ.']['fieldWrap.']);
01954                                                 if (is_array($conf['REQ.']['labelWrap.']))
01955                                                         $labelCode = $this->stdWrap($fieldLabel, $conf['REQ.']['labelWrap.']);
01956                                                 if ($conf['REQ.']['layout'])    {
01957                                                         $result = $conf['REQ.']['layout'];
01958                                                 }
01959                                         }
01960                                         if ($confData['type']=='comment' && $conf['COMMENT.']['layout'])        {
01961                                                 $result = $conf['COMMENT.']['layout'];
01962                                         }
01963                                         if ($confData['type']=='check' && $conf['CHECK.']['layout'])    {
01964                                                 $result = $conf['CHECK.']['layout'];
01965                                         }
01966                                         if ($confData['type']=='radio' && $conf['RADIO.']['layout'])    {
01967                                                 $result = $conf['RADIO.']['layout'];
01968                                         }
01969                                         if ($confData['type']=='label' && $conf['LABEL.']['layout']) {
01970                                                 $result = $conf['LABEL.']['layout'];
01971                                         }
01972                                         $result = str_replace('###FIELD###',$fieldCode,$result);
01973                                         $result = str_replace('###LABEL###',$labelCode,$result);
01974                                         $result = str_replace('###COMMENT###',$commentCode,$result); //RTF
01975                                         $content.= $result;
01976                                 }
01977                         }
01978                 }
01979                 if ($conf['stdWrap.']) $content=$this->stdWrap($content, $conf['stdWrap.']);
01980 
01981 
01982                         // redirect (external: where to go afterwards. internal: where to submit to)
01983                 $theRedirect = $this->stdWrap($conf['redirect'], $conf['redirect.']);                   // redirect should be set to the page to redirect to after an external script has been used. If internal scripts is used, and if no 'type' is set that dictates otherwise, redirect is used as the url to jump to as long as it's an integer (page)
01984                 $page = $GLOBALS['TSFE']->page;
01985                 if (!$theRedirect)      {               // Internal: Just submit to current page
01986                         $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
01987                 } elseif (t3lib_div::testInt($theRedirect))     {               // Internal: Submit to page with id $theRedirect
01988                         $page = $GLOBALS['TSFE']->sys_page->getPage_noCheck($theRedirect);
01989                         $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
01990                 } else {        // External url, redirect-hidden field is rendered!
01991                         $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'', '', $this->getClosestMPvalueForPage($page['uid']));
01992                         $LD['totalURL'] = $theRedirect;
01993                         $hiddenfields.= '<input type="hidden" name="redirect" value="'.htmlspecialchars($LD['totalURL']).'" />';                // 18-09-00 added
01994                 }
01995 
01996                         // Formtype (where to submit to!):
01997                 $formtype = $propertyOverride['type'] ? $propertyOverride['type'] : $this->stdWrap($conf['type'], $conf['type.']);
01998                 if (t3lib_div::testInt($formtype))      {       // Submit to a specific page
01999                         $page = $GLOBALS['TSFE']->sys_page->getPage_noCheck($formtype);
02000                         $LD_A = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
02001                         $action = $LD_A['totalURL'];
02002                 } elseif ($formtype){           // Submit to external script
02003                         $LD_A = $LD;
02004                         $action = $formtype;
02005                 } elseif (t3lib_div::testInt($theRedirect)) {
02006                         $LD_A = $LD;
02007                         $action = $LD_A['totalURL'];
02008                 } else {                // Submit to 'nothing' - which is current page
02009                         $LD_A = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
02010                         $action = $LD_A['totalURL'];
02011                 }
02012 
02013                         // Recipient:
02014                 $theEmail = $this->stdWrap($conf['recipient'], $conf['recipient.']);
02015                 if ($theEmail && !$GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail'])  {
02016                         $theEmail = $GLOBALS['TSFE']->codeString($theEmail);
02017                         $hiddenfields.='<input type="hidden" name="recipient" value="'.htmlspecialchars($theEmail).'" />';
02018                 }
02019 
02020                         // location data:
02021                 if ($conf['locationData'])      {
02022                         if ($conf['locationData']=='HTTP_POST_VARS' && isset($_POST['locationData']))   {
02023                                 $locationData = t3lib_div::_POST('locationData');
02024                         } else {
02025                                 $locationData = $GLOBALS['TSFE']->id.':'.$this->currentRecord;  // locationData is [hte page id]:[tablename]:[uid of record]. Indicates on which page the record (from tablename with uid) is shown. Used to check access.
02026                         }
02027                         $hiddenfields.='<input type="hidden" name="locationData" value="'.htmlspecialchars($locationData).'" />';
02028                 }
02029 
02030                         // hidden fields:
02031                 if (is_array($conf['hiddenFields.']))   {
02032                         reset($conf['hiddenFields.']);
02033                         while(list($hF_key,$hF_conf) = each($conf['hiddenFields.']))    {
02034                                 if (substr($hF_key,-1)!='.')    {
02035                                         $hF_value = $this->cObjGetSingle($hF_conf,$conf['hiddenFields.'][$hF_key.'.'],'hiddenfields');
02036                                         if (strlen($hF_value) && t3lib_div::inList('recipient_copy,recipient',$hF_key)) {
02037                                                 if($GLOBALS['TYPO3_CONF_VARS']['FE']['secureFormmail']) {
02038                                                         continue;
02039                                                 }
02040                                                 $hF_value = $GLOBALS['TSFE']->codeString($hF_value);
02041                                         }
02042                                         $hiddenfields.='<input type="hidden" name="'.$hF_key.'" value="'.htmlspecialchars($hF_value).'" />';
02043                                 }
02044                         }
02045                 }
02046 
02047                         // Wrap all hidden fields in a div tag (see http://bugs.typo3.org/view.php?id=678)
02048                 $hiddenfields = '<div style="display:none;">'.$hiddenfields.'</div>';
02049 
02050                 if ($conf['REQ'])       {
02051                         $validateForm=' onsubmit="return validateForm(\''.$formname.'\',\''.implode(',',$fieldlist).'\','.t3lib_div::quoteJSvalue($conf['goodMess']).','.t3lib_div::quoteJSvalue($conf['badMess']).','.t3lib_div::quoteJSvalue($conf['emailMess']).')"';
02052                         $GLOBALS['TSFE']->additionalHeaderData['JSFormValidate'] = '<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'t3lib/jsfunc.validateform.js"></script>';
02053                 } else $validateForm='';
02054 
02055                         // Create form tag:
02056                 $theTarget = ($theRedirect?$LD['target']:$LD_A['target']);
02057                 $content = Array(
02058                         '<form'.
02059                                 ' action="'.htmlspecialchars($action).'"'.
02060                                 ' id="'.$formname.'"'.($xhtmlStrict ? '' : ' name="'.$formname.'"').
02061                                 ' enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'"'.
02062                                 ' method="'.($conf['method']?$conf['method']:'post').'"'.
02063                                 ($theTarget ? ' target="'.$theTarget.'"' : '').
02064                                 $validateForm.
02065                                 '>',
02066                         $hiddenfields.$content,
02067                         '</form>'
02068                 );
02069 
02070                 if ($conf['arrayReturnMode'])   {
02071                         $content['validateForm']=$validateForm;
02072                         $content['formname']=$formname;
02073                         return $content;
02074                 } else {
02075                         return implode('',$content);
02076                 }
02077         }
02078 
02086         function SEARCHRESULT($conf)    {
02087                 if (t3lib_div::_GP('sword') && t3lib_div::_GP('scols')) {
02088                         $search = t3lib_div::makeInstance('tslib_search');
02089                         $search->register_and_explode_search_string(t3lib_div::_GP('sword'));
02090                         $search->register_tables_and_columns(t3lib_div::_GP('scols'),$conf['allowedCols']);
02091                                 // depth
02092                         $depth=100;
02093                                 // the startId is found
02094                         $theStartId=0;
02095                         if (t3lib_div::testInt(t3lib_div::_GP('stype')))        {
02096                                 $temp_theStartId=t3lib_div::_GP('stype');
02097                                 $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($temp_theStartId);
02098                                         // The page MUST have a rootline with the Level0-page of the current site inside!!
02099                                 while(list(,$val)=each($rootLine))      {
02100                                         if($val['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid'])     {
02101                                                 $theStartId=$temp_theStartId;
02102                                         }
02103                                 }
02104                         } else if (t3lib_div::_GP('stype'))     {
02105                                 if (substr(t3lib_div::_GP('stype'),0,1)=='L')   {
02106                                         $pointer = intval(substr(t3lib_div::_GP('stype'),1));
02107                                         $theRootLine = $GLOBALS['TSFE']->tmpl->rootLine;
02108                                                 // location Data:
02109                                         $locDat_arr = explode(':',t3lib_div::_POST('locationData'));
02110                                         $pId = intval($locDat_arr[0]);
02111                                         if ($pId)       {
02112                                                 $altRootLine = $GLOBALS['TSFE']->sys_page->getRootLine($pId);
02113                                                 ksort($altRootLine);
02114                                                 if (count($altRootLine))        {
02115                                                                 // check if the rootline has the real Level0 in it!!
02116                                                         reset($altRootLine);
02117                                                         $hitRoot=0;
02118                                                         $theNewRoot=array();
02119                                                         while(list(,$val)=each($altRootLine))   {
02120                                                                 if($hitRoot || $val['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid']) {
02121                                                                         $hitRoot=1;
02122                                                                         $theNewRoot[]=$val;
02123                                                                 }
02124                                                         }
02125                                                         if ($hitRoot)   {
02126                                                                 $theRootLine = $theNewRoot;             // Override the real rootline if any thing
02127                                                         }
02128                                                 }
02129                                         }
02130                                         $key = $this->getKey($pointer,$theRootLine);
02131                                         $theStartId = $theRootLine[$key]['uid'];
02132                                 }
02133                         }
02134                         if (!$theStartId)       {
02135                                         // If not set, we use current page
02136                                 $theStartId = $GLOBALS['TSFE']->id;
02137                         }
02138                                 // generate page-tree
02139                         $search->pageIdList.= $this->getTreeList(-1*$theStartId,$depth);
02140 
02141                         $endClause = 'pages.uid IN ('.$search->pageIdList.')
02142                                 AND pages.doktype in ('.$GLOBALS['TYPO3_CONF_VARS']['FE']['content_doktypes'].($conf['addExtUrlsAndShortCuts']?',3,4':'').')
02143                                 AND pages.no_search=0'.
02144                                 $this->enableFields($search->fTable).
02145                                 $this->enableFields('pages');
02146 
02147                         if ($conf['languageField.'][$search->fTable])   {
02148                                 $endClause.= ' AND '.$search->fTable.'.'.$conf['languageField.'][$search->fTable].' = '.intval($GLOBALS['TSFE']->sys_language_uid);     // (using sys_language_uid which is the ACTUAL language of the page. sys_language_content is only for selecting DISPLAY content!)
02149                         }
02150 
02151                                 // build query
02152                         $search->build_search_query($endClause);
02153 
02154                                 // count...
02155                         if (t3lib_div::testInt(t3lib_div::_GP('scount')))       {
02156                                 $search->res_count = t3lib_div::_GP('scount');
02157                         } else {
02158                                 $search->count_query();
02159                         }
02160 
02161                                 // range
02162                         $spointer = intval(t3lib_div::_GP('spointer'));
02163                         if (isset($conf['range']))      {
02164                                 $theRange = intval($conf['range']);
02165                         } else {
02166                                 $theRange = 20;
02167                         }
02168 
02169                                 // Order By:
02170                         if (!$conf['noOrderBy'])        {
02171                                 $search->queryParts['ORDERBY'] = 'pages.lastUpdated, pages.tstamp';
02172                         }
02173 
02174                         $search->queryParts['LIMIT'] = $spointer.','.$theRange;
02175 
02176                                 // search...
02177                         $search->execute_query();
02178                         if ($GLOBALS['TYPO3_DB']->sql_num_rows($search->result))        {
02179                                 $GLOBALS['TSFE']->register['SWORD_PARAMS'] = $search->get_searchwords();
02180 
02181                                 $total = $search->res_count;
02182                                 $rangeLow = t3lib_div::intInRange($spointer+1,1,$total);
02183                                 $rangeHigh = t3lib_div::intInRange($spointer+$theRange,1,$total);
02184                                         // prev/next url:
02185                                 $LD = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page,$conf['target'],1,'', '', $this->getClosestMPvalueForPage($GLOBALS['TSFE']->page['uid']));
02186                                 $targetPart = $LD['target'] ? ' target="'.htmlspecialchars($LD['target']).'"' : '';
02187                                 $urlParams = $this->URLqMark($LD['totalURL'],
02188                                                 '&sword='.rawurlencode(t3lib_div::_GP('sword')).
02189                                                 '&scols='.rawurlencode(t3lib_div::_GP('scols')).
02190                                                 '&stype='.rawurlencode(t3lib_div::_GP('stype')).
02191                                                 '&scount='.$total);
02192                                         // substitution:
02193                                 $result= $this->cObjGetSingle($conf['layout'],$conf['layout.'], 'layout');
02194                                 $result = str_replace('###RANGELOW###',$rangeLow,$result);
02195                                 $result = str_replace('###RANGEHIGH###',$rangeHigh,$result);
02196                                 $result = str_replace('###TOTAL###',$total,$result);
02197 
02198                                 if ($rangeHigh<$total)  {
02199                                         $next = $this->cObjGetSingle($conf['next'], $conf['next.'], 'next');
02200                                         $next = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer+$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams.'>'.$next.'</a>';
02201                                 } else $next='';
02202                                 $result = str_replace('###NEXT###',$next,$result);
02203 
02204                                 if ($rangeLow>1)        {
02205                                         $prev = $this->cObjGetSingle($conf['prev'], $conf['prev.'], 'prev');
02206                                         $prev = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer-$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams.'>'.$prev.'</a>';
02207                                 } else $prev='';
02208                                 $result = str_replace('###PREV###',$prev,$result);
02209 
02210                                         // searching result
02211                                 $theValue = $this->cObjGetSingle($conf['resultObj'], $conf['resultObj.'],'resultObj');
02212                                 $cObj = t3lib_div::makeInstance('tslib_cObj');
02213                                 $cObj->setParent($this->data,$this->currentRecord);
02214                                 $renderCode='';
02215                                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($search->result))   {
02216                                                 // versionOL() here? This is search result displays, is that possible to preview anyway? Or are records selected here already future versions?
02217                                         $cObj->start($row);
02218                                         $renderCode.=$cObj->cObjGetSingle($conf['renderObj'], $conf['renderObj.'],'renderObj');
02219                                 }
02220                                 $theValue.=$this->wrap($renderCode,$conf['renderWrap']);
02221                                 $theValue = str_replace('###RESULT###',$theValue,$result);
02222                         } else {
02223                                 $theValue = $this->cObjGetSingle($conf['noResultObj'], $conf['noResultObj.'],'noResultObj');
02224                         }
02225 
02226                         $GLOBALS['TT']->setTSlogMessage('Search in fields:   '.$search->listOfSearchFields);
02227 
02228                                 // wrapping
02229                         $content=$theValue;
02230                         if ($conf['wrap']) {
02231                                 $content=$this->wrap($content, $conf['wrap']);
02232                         }
02233                         if ($conf['stdWrap.']) {
02234                                 $content=$this->stdWrap($content, $conf['stdWrap.']);
02235                         }
02236                                 // returning
02237                         $GLOBALS['TSFE']->set_no_cache();
02238                         return $content;
02239                 }
02240         }
02241 
02252         function PHP_SCRIPT($conf,$ext='')      {
02253                 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($conf['file']);
02254                 $content='';
02255                 if ($incFile && $GLOBALS['TSFE']->checkFileInclude($incFile))   {
02256                         switch($ext)    {
02257                                 case 'INT':
02258                                 case 'EXT':
02259                                         $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
02260                                         $content.='<!--'.$substKey.'-->';
02261                                         $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
02262                                                 'file'=>$incFile,
02263                                                 'conf'=>$conf,
02264                                                 'type'=>'SCRIPT'
02265                                         );
02266                                         if ($ext=='INT')        {
02267                                                 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey]['cObj'] = serialize($this);
02268                                         } else {
02269                                                 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey]['data'] = $this->data;
02270                                         }
02271                                 break;
02272                                 default:
02273                                                 // Added 31-12-00: Make backup...
02274                                         $this->oldData = $this->data;
02275                                                 // Include file..
02276                                         include('./'.$incFile);
02277                                                 // Added 31-12-00: restore...
02278                                         if ($RESTORE_OLD_DATA)  {
02279                                                 $this->data = $this->oldData;
02280                                         }
02281                                 break;
02282                         }
02283                 }
02284                 return $content;
02285         }
02286 
02295         function TEMPLATE($conf)        {
02296                 $subparts = Array();
02297                 $marks = Array();
02298                 $wraps = Array();
02299                 $content='';
02300 
02301                 list($PRE,$POST) = explode('|',$conf['markerWrap'] ? $conf['markerWrap'] : '### | ###');
02302                 $POST = trim($POST);
02303                 $PRE  = trim($PRE);
02304 
02305                         // Getting the content
02306                 $content = $this->cObjGetSingle($conf['template'],$conf['template.'],'template');
02307                 if ($conf['workOnSubpart'])     {
02308                         $content = $this->getSubpart($content, $PRE.$conf['workOnSubpart'].$POST);
02309                 }
02310 
02311                         // Fixing all relative paths found:
02312                 if ($conf['relPathPrefix'])     {
02313                         $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
02314                         $content = $htmlParser->prefixResourcePath($conf['relPathPrefix'],$content,$conf['relPathPrefix.']);
02315                 }
02316 
02317                 if ($content)   {
02318                         if ($conf['nonCachedSubst'])    {               // NON-CACHED:
02319                                         // Getting marks
02320                                 if (is_array($conf['marks.']))  {
02321                                         reset($conf['marks.']);
02322                                         while(list($theKey,$theValue)=each($conf['marks.']))    {
02323                                                 if (!strstr($theKey,'.'))       {
02324                                                         $content = str_replace(
02325                                                                 $PRE.$theKey.$POST,
02326                                                                 $this->cObjGetSingle($theValue,$conf['marks.'][$theKey.'.'],'marks.'.$theKey),
02327                                                                 $content);
02328                                                 }
02329                                         }
02330                                 }
02331 
02332                                         // Getting subparts.
02333                                 if (is_array($conf['subparts.']))       {
02334                                         reset($conf['subparts.']);
02335                                         while(list($theKey,$theValue)=each($conf['subparts.'])) {
02336                                                 if (!strstr($theKey,'.'))       {
02337                                                         $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02338                                                         if ($subpart)   {
02339                                                                 $this->setCurrentVal($subpart);
02340                                                                 $content = $this->substituteSubpart(
02341                                                                         $content,
02342                                                                         $PRE.$theKey.$POST,
02343                                                                         $this->cObjGetSingle($theValue,$conf['subparts.'][$theKey.'.'],'subparts.'.$theKey),
02344                                                                         1
02345                                                                 );
02346                                                         }
02347                                                 }
02348                                         }
02349                                 }
02350                                         // Getting subpart wraps
02351                                 if (is_array($conf['wraps.']))  {
02352                                         reset($conf['wraps.']);
02353                                         while(list($theKey,$theValue)=each($conf['wraps.']))    {
02354                                                 if (!strstr($theKey,'.'))       {
02355                                                         $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02356                                                         if ($subpart)   {
02357                                                                 $this->setCurrentVal($subpart);
02358                                                                 $content = $this->substituteSubpart(
02359                                                                         $content,
02360                                                                         $PRE.$theKey.$POST,
02361                                                                         explode('|',$this->cObjGetSingle($theValue,$conf['wraps.'][$theKey.'.'],'wraps.'.$theKey)),
02362                                                                         1
02363                                                                 );
02364                                                         }
02365                                                 }
02366                                         }
02367                                 }
02368                         } else {        // CACHED
02369                                         // Getting subparts.
02370                                 if (is_array($conf['subparts.']))       {
02371                                         reset($conf['subparts.']);
02372                                         while(list($theKey,$theValue)=each($conf['subparts.'])) {
02373                                                 if (!strstr($theKey,'.'))       {
02374                                                         $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02375                                                         if ($subpart)   {
02376                                                                 $GLOBALS['TSFE']->register['SUBPART_'.$theKey] = $subpart;
02377                                                                 $subparts[$theKey]['name'] = $theValue;
02378                                                                 $subparts[$theKey]['conf'] = $conf['subparts.'][$theKey.'.'];
02379                                                         }
02380                                                 }
02381                                         }
02382                                 }
02383                                         // Getting marks
02384                                 if (is_array($conf['marks.']))  {
02385                                         reset($conf['marks.']);
02386                                         while(list($theKey,$theValue)=each($conf['marks.']))    {
02387                                                 if (!strstr($theKey,'.'))       {
02388                                                         $marks[$theKey]['name'] = $theValue;
02389                                                         $marks[$theKey]['conf'] = $conf['marks.'][$theKey.'.'];
02390                                                 }
02391                                         }
02392                                 }
02393                                         // Getting subpart wraps
02394                                 if (is_array($conf['wraps.']))  {
02395                                         reset($conf['wraps.']);
02396                                         while(list($theKey,$theValue)=each($conf['wraps.']))    {
02397                                                 if (!strstr($theKey,'.'))       {
02398                                                         $wraps[$theKey]['name'] = $theValue;
02399                                                         $wraps[$theKey]['conf'] = $conf['wraps.'][$theKey.'.'];
02400                                                 }
02401                                         }
02402                                 }
02403                                         // Getting subparts
02404                                 $subpartArray =array();
02405                                 reset($subparts);
02406                                 while(list($theKey,$theValue)=each($subparts))  {
02407                                                 // Set current with the content of the subpart...
02408                                         $this->data[$this->currentValKey] = $GLOBALS['TSFE']->register['SUBPART_'.$theKey];
02409                                                 // Get subpart cObject and substitute it!
02410                                         $subpartArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'subparts.'.$theKey);
02411                                 }
02412                                 $this->data[$this->currentValKey] = ''; // Reset current to empty
02413 
02414                                         // Getting marks
02415                                 $markerArray =array();
02416                                 reset($marks);
02417                                 while(list($theKey,$theValue)=each($marks))     {
02418                                         $markerArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'marks.'.$theKey);
02419                                 }
02420                                         // Getting wraps
02421                                 $subpartWraps =array();
02422                                 reset($wraps);
02423                                 while(list($theKey,$theValue)=each($wraps))     {
02424                                         $subpartWraps[$PRE.$theKey.$POST] = explode('|',$this->cObjGetSingle($theValue['name'],$theValue['conf'],'wraps.'.$theKey));
02425                                 }
02426 
02427                                         // Substitution
02428                                 if ($conf['substMarksSeparately'])      {
02429                                         $content = $this->substituteMarkerArrayCached($content,array(),$subpartArray,$subpartWraps);
02430                                         $content = $this->substituteMarkerArray($content, $markerArray);
02431                                 } else {
02432                                         $content = $this->substituteMarkerArrayCached($content,$markerArray,$subpartArray,$subpartWraps);
02433                                 }
02434                         }
02435                 }
02436                 return $content;
02437         }
02438 
02446         function MULTIMEDIA($conf)      {
02447                 $content='';
02448                 $filename=$this->stdWrap($conf['file'],$conf['file.']);
02449                 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($filename);
02450                 if ($incFile)   {
02451                         $fileinfo = t3lib_div::split_fileref($incFile);
02452                         if (t3lib_div::inList('txt,html,htm',$fileinfo['fileext']))     {
02453                                 $content = $GLOBALS['TSFE']->tmpl->fileContent($incFile);
02454                         } else {
02455                                         // default params...
02456                                 $parArray=array();
02457                                         // src is added
02458                                 $parArray['src']='src="'.$GLOBALS['TSFE']->absRefPrefix.$incFile.'"';
02459                                 if (t3lib_div::inList('au,wav,mp3',$fileinfo['fileext']))       {
02460                                 }
02461                                 if (t3lib_div::inList('avi,mov,mpg,asf,wmv',$fileinfo['fileext']))      {
02462                                         $parArray['width'] = 'width="200"';
02463                                         $parArray['height'] = 'height="200"';
02464                                 }
02465                                 if (t3lib_div::inList('swf,swa,dcr',$fileinfo['fileext']))      {
02466                                         $parArray['quality'] = 'quality="high"';
02467                                 }
02468                                 if (t3lib_div::inList('class',$fileinfo['fileext']))    {
02469                                         $parArray['width'] = 'width="200"';
02470                                         $parArray['height'] = 'height="200"';
02471                                 }
02472 
02473                                         // fetching params
02474                                 $lines = explode(chr(10), $this->stdWrap($conf['params'],$conf['params.']));
02475                                 while(list(,$l)=each($lines))   {
02476                                         $parts = explode('=', $l);
02477                                         $parameter = strtolower(trim($parts[0]));
02478                                         $value = trim($parts[1]);
02479                                         if ((string)$value!='') {
02480                                                 $parArray[$parameter] = $parameter.'="'.htmlspecialchars($value).'"';
02481                                         } else {
02482                                                 unset($parArray[$parameter]);
02483                                         }
02484                                 }
02485                                 if ($fileinfo['fileext']=='class')      {
02486                                         unset($parArray['src']);
02487                                         $parArray['code'] = 'code="'.htmlspecialchars($fileinfo['file']).'"';
02488                                         $parArray['codebase'] = 'codebase="'.htmlspecialchars($fileinfo['path']).'"';
02489                                         $content='<applet '.implode(' ',$parArray).'></applet>';
02490                                 } else {
02491                                         $content='<embed '.implode(' ',$parArray).'></embed>';
02492                                 }
02493                         }
02494                 }
02495 
02496                 if ($conf['stdWrap.']) {
02497                         $content=$this->stdWrap($content, $conf['stdWrap.']);
02498                 }
02499 
02500                 return $content;
02501         }
02502 
02503 
02504 
02505 
02506 
02507 
02508 
02509 
02510 
02511 
02512 
02513 
02514 
02515 
02516 
02517 
02518 
02519         /************************************
02520          *
02521          * Various helper functions for content objects:
02522          *
02523          ************************************/
02524 
02533         function getSlidePids($pidList, $pidConf)       {
02534                 $pidList = trim($this->stdWrap($pidList,$pidConf));
02535                 if (!strcmp($pidList,''))       {
02536                         $pidList = 'this';
02537                 }
02538                 if (trim($pidList))     {
02539                         $listArr = t3lib_div::intExplode(',',str_replace('this',$GLOBALS['TSFE']->contentPid,$pidList));
02540                         $listArr = $this->checkPidArray($listArr);
02541                 }
02542                 $pidList = array();
02543                 if (is_array($listArr)&&count($listArr))        {
02544                         foreach ($listArr as $uid)      {
02545                                 $page = $GLOBALS['TSFE']->sys_page->getPage($uid);
02546                                 if (!$page['is_siteroot'])      {
02547                                         $pidList[] = $page['pid'];
02548                                 }
02549                         }
02550                 }
02551                 return implode(',', $pidList);
02552         }
02553 
02554 
02565         function netprintApplication_offsiteLinkWrap($str,$imgConf,$conf)       {
02566                 if ($conf['url'] && @is_file($imgConf['origFile']))     {
02567                         $thisUrl = $conf['thisUrl'] ? $conf['thisUrl'] : t3lib_div::getIndpEnv('TYPO3_REQUEST_DIR');
02568                         $origFile=$thisUrl.$imgConf['origFile'];
02569                                 // Original file dimensions:
02570                         $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
02571                         $gifCreator->init();
02572                         $origDim = $gifCreator->getImageDimensions($imgConf['origFile']);
02573                         if (!$conf['linkOnlyPixelsAbove'] || $origDim[0]*$origDim[1]>$conf['linkOnlyPixelsAbove'])      {
02574                                         // Set parameters
02575                                 $thumbFile=$thisUrl.$imgConf['3'].'|'.$imgConf[0].'x'.$imgConf[1].'|'.$origDim[0].'x'.$origDim[1].'|'.filesize($imgConf['origFile']).'|'.filemtime($imgConf['origFile']);
02576                                         // Set url:
02577                                 $url = $conf['url']
02578                                         .'&NP[offsite][1]='.rawurlencode($origFile)
02579                                         .'&NP[offsite_thumb][1]='.rawurlencode($thumbFile);
02580                                 $linkCObject = $this->cObjGetSingle($conf['cObject'],$conf['cObject.']);
02581                                 if ($linkCObject)       {
02582                                         $ATagParams = $this->getATagParams($conf, 0);
02583                                         $linkCObject='<a href="'.htmlspecialchars($url).'"'.$ATagParams.'>'.$linkCObject.'</a>';
02584                                         $linkCObject=$this->stdWrap($linkCObject,$conf['outerStdWrap.']);
02585                                         if ($conf['before'])    {
02586                                                 $str=$linkCObject.$str;
02587                                         } else {
02588                                                 $str=$str.$linkCObject;
02589                                         }
02590                                 }
02591                         }
02592                 }
02593                 return $str;
02594         }
02595 
02606         function getFieldDefaultValue($noValueInsert, $fieldName, $defaultVal) {
02607                 if (!$GLOBALS['TSFE']->no_cache || (!isset($_POST[$fieldName]) && !isset($_GET[$fieldName])) || $noValueInsert) {
02608                         return $defaultVal;
02609                 } else {
02610                         return t3lib_div::_GP($fieldName);
02611                 }
02612         }
02613 
02624         function cImage($file,$conf) {
02625                 $info = $this->getImgResource($file,$conf['file.']);
02626                 $GLOBALS['TSFE']->lastImageInfo=$info;
02627                 if (is_array($info))    {
02628                         $info[3] = t3lib_div::png_to_gif_by_imagemagick($info[3]);
02629                         $GLOBALS['TSFE']->imagesOnPage[]=$info[3];              // This array is used to collect the image-refs on the page...
02630 
02631                         if (!strlen($conf['altText']) && !is_array($conf['altText.']))  {       // Backwards compatible:
02632                                 $conf['altText'] = $conf['alttext'];
02633                                 $conf['altText.'] = $conf['alttext.'];
02634                         }
02635                         $altParam = $this->getAltParam($conf);
02636 
02637                         $theValue = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.t3lib_div::rawUrlEncodeFP($info[3])).'" width="'.$info[0].'" height="'.$info[1].'"'.$this->getBorderAttr(' border="'.intval($conf['border']).'"').($conf['params']?' '.$conf['params']:'').($altParam).' />';
02638                         if ($conf['linkWrap'])  {
02639                                 $theValue = $this->linkWrap($theValue,$conf['linkWrap']);
02640                         } elseif ($conf['imageLinkWrap']) {
02641                                 $theValue = $this->imageLinkWrap($theValue,$info['origFile'],$conf['imageLinkWrap.']);
02642                         }
02643                         return $this->wrap($theValue,$conf['wrap']);
02644                 }
02645         }
02652         function getBorderAttr($borderAttr) {
02653                 if (!t3lib_div::inList('xhtml_strict,xhtml_11,xhtml_2',$GLOBALS['TSFE']->xhtmlDoctype) && !$GLOBALS['TSFE']->config['config']['disableImgBorderAttr']) {
02654                         return $borderAttr;
02655                 }
02656         }
02657 
02668         function imageLinkWrap($string,$imageFile,$conf) {
02669                 $a1='';
02670                 $a2='';
02671                 $content=$string;
02672                 if ($this->stdWrap($conf['enable'],$conf['enable.']))   {
02673                         $content=$this->typolink($string, $conf['typolink.']);
02674                                 // imageFileLink:
02675                         if ($content==$string && @is_file($imageFile)) {
02676                                 $params = '';
02677                                 if ($conf['width']) {$params.='&width='.rawurlencode($conf['width']);}
02678                                 if ($conf['height']) {$params.='&height='.rawurlencode($conf['height']);}
02679                                 if ($conf['effects']) {$params.='&effects='.rawurlencode($conf['effects']);}
02680                                 if ($conf['sample']) {$params.='&sample=1';}
02681                                 if ($conf['alternativeTempPath']) {$params.='&alternativeTempPath='.rawurlencode($conf['alternativeTempPath']);}
02682 
02683                                 if ($conf['bodyTag']) {$params.='&bodyTag='.rawurlencode($conf['bodyTag']);}
02684                                 if ($conf['title']) {$params.='&title='.rawurlencode($conf['title']);}
02685                                 if ($conf['wrap']) {$params.='&wrap='.rawurlencode($conf['wrap']);}
02686 
02687                                 $md5_value = md5(
02688                                                 $imageFile.'|'.
02689                                                 $conf['width'].'|'.
02690                                                 $conf['height'].'|'.
02691                                                 $conf['effects'].'|'.
02692                                                 $conf['bodyTag'].'|'.
02693                                                 $conf['title'].'|'.
02694                                                 $conf['wrap'].'|'.
02695                                                 $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'].'|');
02696 
02697                                 $params.= '&md5='.$md5_value;
02698                                 $url = $GLOBALS['TSFE']->absRefPrefix.'index.php?eID=tx_cms_showpic&file='.rawurlencode($imageFile).$params;
02699                                 if ($conf['JSwindow.']['altUrl'] || $conf['JSwindow.']['altUrl.'])      {
02700                                         $altUrl = $this->stdWrap($conf['JSwindow.']['altUrl'], $conf['JSwindow.']['altUrl.']);
02701                                         if ($altUrl)    {
02702                                                 $url = $altUrl . ($conf['JSwindow.']['altUrl_noDefaultParams'] ? '' : '?file='.rawurlencode($imageFile).$params);
02703                                         }
02704                                 }
02705 
02706                                         // Create TARGET-attribute only if the right doctype is used
02707                                 if (!t3lib_div::inList('xhtml_strict,xhtml_11,xhtml_2', $GLOBALS['TSFE']->xhtmlDoctype))        {
02708                                         if (isset($conf['target']))     {
02709                                                 $target = sprintf(' target="%s"', $conf['target']);
02710                                         } else {
02711                                                 $target = ' target="thePicture"';
02712                                         }
02713                                 } else {
02714                                         $target = '';
02715                                 }
02716 
02717                                 if ($conf['JSwindow'])  {
02718                                         $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
02719                                         $gifCreator->init();
02720                                         $gifCreator->mayScaleUp = 0;
02721                                         $dims = $gifCreator->getImageScale($gifCreator->getImageDimensions($imageFile),$conf['width'],$conf['height'],'');
02722                                         $offset = t3lib_div::intExplode(',',$conf['JSwindow.']['expand'].',');
02723 
02724                                         $a1='<a href="'. htmlspecialchars($url) .'" onclick="'.
02725                                                 htmlspecialchars('openPic(\''.$GLOBALS['TSFE']->baseUrlWrap($url).'\',\''.($conf['JSwindow.']['newWindow']?md5($url):'thePicture').'\',\'width='.($dims[0]+$offset[0]).',height='.($dims[1]+$offset[1]).',status=0,menubar=0\'); return false;').
02726                                                 '"'.$target.$GLOBALS['TSFE']->ATagParams.'>';
02727                                         $a2='</a>';
02728                                         $GLOBALS['TSFE']->setJS('openPic');
02729                                 } else {
02730                                         $a1='<a href="'.htmlspecialchars($url).'"'.$target.$GLOBALS['TSFE']->ATagParams.'>';
02731                                         $a2='</a>';
02732                                 }
02733                                 $content=$a1.$string.$a2;
02734                         }
02735                 }
02736 
02737                 return $content;
02738         }
02739 
02748         function fileResource($fName, $addParams='alt="" title=""')     {
02749                 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($fName);
02750                 if ($incFile)   {
02751                         $fileinfo = t3lib_div::split_fileref($incFile);
02752                         if (t3lib_div::inList('jpg,gif,jpeg,png',$fileinfo['fileext'])) {
02753                                 $imgFile = $incFile;
02754                                 $imgInfo = @getImageSize($imgFile);
02755                                 return '<img src="'.$GLOBALS['TSFE']->absRefPrefix.$imgFile.'" width="'.$imgInfo[0].'" height="'.$imgInfo[1].'"'.$this->getBorderAttr(' border="0"').' '.$addParams.' />';
02756                         } elseif (filesize($incFile)<1024*1024) {
02757                                 return $GLOBALS['TSFE']->tmpl->fileContent($incFile);
02758                         }
02759                 }
02760         }
02761 
02771         function lastChanged($tstamp)   {
02772                 $tstamp = intval($tstamp);
02773                 if ($tstamp>intval($GLOBALS['TSFE']->register['SYS_LASTCHANGED']))      {
02774                         $GLOBALS['TSFE']->register['SYS_LASTCHANGED'] = $tstamp;
02775                 }
02776         }
02777 
02788         function linkWrap($content,$wrap)       {
02789                 $wrapArr = explode('|', $wrap);
02790                 if (ereg("\{([0-9]*)\}",$wrapArr[0],$reg))      {
02791                         if ($uid = $GLOBALS['TSFE']->tmpl->rootLine[$reg[1]]['uid'])    {
02792                                 $wrapArr[0] = str_replace($reg[0],$uid,$wrapArr[0]);
02793                         }
02794                 }
02795                 return trim($wrapArr[0]).$content.trim($wrapArr[1]);
02796         }
02797 
02807         function getAltParam($conf, $longDesc=true)     {
02808                 $altText = trim($this->stdWrap($conf['altText'], $conf['altText.']));
02809                 $titleText = trim($this->stdWrap($conf['titleText'],$conf['titleText.']));
02810                 $longDesc = trim($this->stdWrap($conf['longdescURL'],$conf['longdescURL.']));
02811 
02812                         // "alt":
02813                 $altParam = ' alt="'.htmlspecialchars(strip_tags($altText)).'"';
02814 
02815                         // "title":
02816                 $emptyTitleHandling = 'useAlt';
02817                 if ($conf['emptyTitleHandling'])        {
02818                                 // choices: 'keepEmpty' | 'useAlt' | 'removeAttr'
02819                         $emptyTitleHandling = $conf['emptyTitleHandling'];
02820                 }
02821                 if ($titleText || $emptyTitleHandling == 'keepEmpty')   {
02822                         $altParam.= ' title="'.htmlspecialchars(strip_tags($titleText)).'"';
02823                 } elseif (!$titleText && $emptyTitleHandling == 'useAlt')       {
02824                         $altParam.= ' title="'.htmlspecialchars(strip_tags($altText)).'"';
02825                 }
02826 
02827                         // "longDesc" URL
02828                 if ($longDesc)  {
02829                         $altParam.= ' longdesc="'.htmlspecialchars(strip_tags($longDesc)).'"';
02830                 }
02831 
02832                 return $altParam;
02833         }
02834 
02842         function cleanFormName($name) {
02843                         // turn data[x][y] into data:x:y:
02844                 $name = preg_replace('/\[|\]\[?/',':',trim($name));
02845                         // remove illegal chars like _
02846                 return preg_replace('#[^:a-zA-Z0-9]#','',$name);
02847         }
02848 
02858          function getATagParams($conf, $addGlobal=1)    {
02859                 $aTagParams = '';
02860                 if ($conf['ATagParams.'])       {
02861                         $aTagParams = ' '.$this->stdWrap($conf['ATagParams'], $conf['ATagParams.']);
02862                 } elseif ($conf['ATagParams'])  {
02863                         $aTagParams = ' '.$conf['ATagParams'];
02864                 }
02865                 if ($addGlobal) {
02866                         $aTagParams = ' '.trim($GLOBALS['TSFE']->ATagParams.$aTagParams);
02867                 }
02868                 return $aTagParams;
02869          }
02870 
02871 
02872 
02873 
02874 
02875 
02876 
02877 
02878 
02879 
02880 
02881 
02882 
02883 
02884 
02885 
02886 
02887 
02888         /***********************************************
02889          *
02890          * HTML template processing functions
02891          *
02892          ***********************************************/
02893 
02905         function getSubpart($content, $marker)  {
02906                 return t3lib_parsehtml::getSubpart($content, $marker);
02907         }
02908 
02921         function substituteSubpart($content,$marker,$subpartContent,$recursive=1)       {
02922                 return t3lib_parsehtml::substituteSubpart($content, $marker, $subpartContent, $recursive);
02923         }
02924 
02934         function substituteMarker($content,$marker,$markContent)        {
02935                 return str_replace($marker,$markContent,$content);
02936         }
02937 
02954         function substituteMarkerArrayCached($content,$markContentArray=array(),$subpartContentArray=array(),$wrappedSubpartContentArray=array())       {
02955                 $GLOBALS['TT']->push('/substituteMarkerArray/');
02956 
02957                         // If not arrays then set them
02958                 if (!is_array($markContentArray))       $markContentArray=array();      // Plain markers
02959                 if (!is_array($subpartContentArray))    $subpartContentArray=array();   // Subparts being directly substituted
02960                 if (!is_array($wrappedSubpartContentArray))     $wrappedSubpartContentArray=array();    // Subparts being wrapped
02961                         // Finding keys and check hash:
02962                 $sPkeys = array_keys($subpartContentArray);
02963                 $wPkeys = array_keys($wrappedSubpartContentArray);
02964                 $aKeys = array_merge(array_keys($markContentArray),$sPkeys,$wPkeys);
02965                 if (!count($aKeys))     {
02966                         $GLOBALS['TT']->pull();
02967                         return $content;
02968                 }
02969                 asort($aKeys);
02970                 $storeKey = md5('substituteMarkerArrayCached_storeKey:'.serialize(array($content,$aKeys)));
02971                 if ($this->substMarkerCache[$storeKey]) {
02972                         $storeArr = $this->substMarkerCache[$storeKey];
02973                         $GLOBALS['TT']->setTSlogMessage('Cached',0);
02974                 } else {
02975                         $storeArrDat = $GLOBALS['TSFE']->sys_page->getHash($storeKey,0);
02976                         if (!isset($storeArrDat))       {
02977                                         // Initialize storeArr
02978                                 $storeArr=array();
02979 
02980                                         // Finding subparts and substituting them with the subpart as a marker
02981                                 reset($sPkeys);
02982                                 while(list(,$sPK)=each($sPkeys))        {
02983                                         $content =$this->substituteSubpart($content,$sPK,$sPK);
02984                                 }
02985 
02986                                         // Finding subparts and wrapping them with markers
02987                                 reset($wPkeys);
02988                                 while(list(,$wPK)=each($wPkeys))        {
02989                                         $content =$this->substituteSubpart($content,$wPK,array($wPK,$wPK));
02990                                 }
02991 
02992                                         // traverse keys and quote them for reg ex.
02993                                 reset($aKeys);
02994                                 while(list($tK,$tV)=each($aKeys))       {
02995                                         $aKeys[$tK]=quotemeta($tV);
02996                                 }
02997                                 $regex = implode('|',$aKeys);
02998                                         // Doing regex's
02999                                 $storeArr['c'] = split($regex,$content);
03000                                 preg_match_all('/'.$regex.'/',$content,$keyList);
03001                                 $storeArr['k']=$keyList[0];
03002                                         // Setting cache:
03003                                 $this->substMarkerCache[$storeKey] = $storeArr;
03004 
03005                                         // Storing the cached data:
03006                                 $GLOBALS['TSFE']->sys_page->storeHash($storeKey, serialize($storeArr), 'substMarkArrayCached');
03007 
03008                                 $GLOBALS['TT']->setTSlogMessage('Parsing',0);
03009                         } else {
03010                                         // Unserializing
03011                                 $storeArr = unserialize($storeArrDat);
03012                                         // Setting cache:
03013                                 $this->substMarkerCache[$storeKey] = $storeArr;
03014                                 $GLOBALS['TT']->setTSlogMessage('Cached from DB',0);
03015                         }
03016                 }
03017 
03018                         // Substitution/Merging:
03019                         // Merging content types together, resetting
03020                 $valueArr = array_merge($markContentArray,$subpartContentArray,$wrappedSubpartContentArray);
03021 
03022                 $wSCA_reg=array();
03023                 reset($storeArr['k']);
03024                 $content = '';
03025                         // traversin the keyList array and merging the static and dynamic content
03026                 while(list($n,$keyN)=each($storeArr['k']))      {
03027                         $content.=$storeArr['c'][$n];
03028                         if (!is_array($valueArr[$keyN]))        {
03029                                 $content.=$valueArr[$keyN];
03030                         } else {
03031                                 $content.=$valueArr[$keyN][(intval($wSCA_reg[$keyN])%2)];
03032                                 $wSCA_reg[$keyN]++;
03033                         }
03034                 }
03035                 $content.=$storeArr['c'][count($storeArr['k'])];
03036 
03037                 $GLOBALS['TT']->pull();
03038                 return $content;
03039         }
03040 
03052         function substituteMarkerArray($content,$markContentArray,$wrap='',$uppercase=0)        {
03053                 if (is_array($markContentArray))        {
03054                         reset($markContentArray);
03055                         $wrapArr=t3lib_div::trimExplode('|',$wrap);
03056                         while(list($marker,$markContent)=each($markContentArray))       {
03057                                 if($uppercase)  $marker=strtoupper($marker);
03058                                 if(strcmp($wrap,''))            $marker=$wrapArr[0].$marker.$wrapArr[1];
03059                                 $content=str_replace($marker,$markContent,$content);
03060                         }
03061                 }
03062                 return $content;
03063         }
03064 
03073         function substituteMarkerInObject(&$tree, $markContentArray) {
03074                 if (is_array ($tree))   {
03075                         reset($tree);
03076                         while(list($key,$value)=each($tree))    {
03077                                 $this->substituteMarkerInObject ($tree[$key], $markContentArray);
03078                         }
03079                 } else {
03080                         $tree = $this->substituteMarkerArray($tree,$markContentArray);
03081                 }
03082                 return $tree;
03083         }
03084 
03096         function fillInMarkerArray($markContentArray, $row, $fieldList='', $nl2br=TRUE, $prefix='FIELD_', $HSC=FALSE)   {
03097                 if ($fieldList) {
03098                         $fArr = t3lib_div::trimExplode(',',$fieldList,1);
03099                         foreach($fArr as $field)        {
03100                                 $markContentArray['###'.$prefix.$field.'###'] = $nl2br?nl2br($row[$field]):$row[$field];
03101                         }
03102                 } else {
03103                         if (is_array($row))     {
03104                                 foreach($row as $field => $value)       {
03105                                         if (!t3lib_div::testInt($field))        {
03106                                                 if ($HSC)       $value = htmlspecialchars($value);
03107                                                 $markContentArray['###'.$prefix.$field.'###'] = $nl2br ? nl2br($value) : $value;
03108                                         }
03109                                 }
03110                         }
03111                 }
03112 
03113                 return $markContentArray;
03114         }
03115 
03116 
03117 
03118 
03119 
03120 
03121 
03122 
03123 
03124 
03125 
03126 
03127 
03128 
03129 
03130 
03131 
03132 
03133 
03134 
03135 
03136 
03137 
03138 
03139 
03140         /***********************************************
03141          *
03142          * "stdWrap" + sub functions
03143          *
03144          ***********************************************/
03145 
03146 
03159         function stdWrap($content,$conf)        {
03160                 if (is_array($conf))    {
03161 
03162                                 // Setting current value, if so
03163                         if ($conf['setContentToCurrent']){$this->data[$this->currentValKey]=$content;}
03164                         if ($conf['setCurrent'] || $conf['setCurrent.']){$this->data[$this->currentValKey] = $this->stdWrap($conf['setCurrent'], $conf['setCurrent.']);}
03165 
03166                                 // Getting data:
03167                         if (isset($conf['lang.']) && $GLOBALS['TSFE']->config['config']['language'] && isset($conf['lang.'][$GLOBALS['TSFE']->config['config']['language']]))   {
03168                                 $content = $conf['lang.'][$GLOBALS['TSFE']->config['config']['language']];
03169                         }
03170                         if ($conf['data']){$content=$this->getData($conf['data'], is_array($this->alternativeData)?$this->alternativeData:$this->data);}
03171                                 $this->alternativeData='';              // This must be unset directly after
03172                         if ($conf['field']) {$content=$this->getFieldVal($conf['field']);}
03173                         if ($conf['current']) {$content=$this->data[$this->currentValKey];}
03174                         if ($conf['cObject']) {$content=$this->cObjGetSingle($conf['cObject'],$conf['cObject.'],'/stdWrap/.cObject');}
03175                         if ($conf['numRows.']) {$content=$this->numRows($conf['numRows.']);}
03176                         if ($conf['filelist'] || $conf['filelist.'])    {$content=$this->filelist($this->stdWrap($conf['filelist'], $conf['filelist.']));}
03177                         if ($conf['preUserFunc'])       {$content = $this->callUserFunction($conf['preUserFunc'], $conf['preUserFunc.'], $content);}
03178 
03179                                 // Overriding values, evaluating conditions
03180                         if ($conf['override'] || $conf['override.']){
03181                                 $override = $this->stdWrap($conf['override'], $conf['override.']);
03182                                 if (trim($override)) {$content=$override;}
03183                         }
03184                         if (isset($conf['preIfEmptyListNum']) || isset($conf['preIfEmptyListNum.']['stdWrap.'])) {
03185                                 $preIfEmptyListNumber = isset($conf['preIfEmptyListNum.']['stdWrap.'])  ?  $this->stdWrap($conf['preIfEmptyListNum'], $conf['preIfEmptyListNum.']['stdWrap.'])  :  $conf['preIfEmptyListNum'];
03186                                 $content=$this->listNum($content,$preIfEmptyListNumber,$conf['preIfEmptyListNum.']['splitChar']);
03187                         }
03188                         if (!trim($content) && ($conf['ifEmpty'] || $conf['ifEmpty.'])) {
03189                                 $content = $this->stdWrap($conf['ifEmpty'], $conf['ifEmpty.']);
03190                         }
03191                         if (!strlen(trim($content)) && ($conf['ifBlank'] || $conf['ifBlank.'])) {
03192                                 $content = $this->stdWrap($conf['ifBlank'], $conf['ifBlank.']);
03193                         }
03194 
03195                                 // values...
03196                         if (isset($conf['listNum']) || isset($conf['listNum.']['stdWrap.'])) {
03197                                 $listNumber = isset($conf['listNum.']['stdWrap.'])  ?  $this->stdWrap($conf['listNum'], $conf['listNum.']['stdWrap.'])  :  $conf['listNum'];
03198                                 $content=$this->listNum($content,$listNumber,$conf['listNum.']['splitChar']);
03199                         }
03200 
03201                         if ($conf['trim'])      { $content=trim($content); }
03202 
03203                                 // Call stdWrap recursively
03204                         if ($conf['stdWrap'])   { $content=$this->stdWrap($content,$conf['stdWrap.']); }
03205 
03206                         if (   ($conf['required'] && (string)$content=='') || ($conf['if.'] && !$this->checkIf($conf['if.'])) || ($conf['fieldRequired'] && !trim($this->data[$conf['fieldRequired']]))    ){
03207                                 $content = '';
03208                         } else  {
03209                                         // Perform data processing:
03210                                 if ($conf['csConv'])    { $content=$GLOBALS['TSFE']->csConv($content,$conf['csConv']); }
03211                                 if ($conf['parseFunc.'] || $conf['parseFunc']) {$content=$this->parseFunc($content,$conf['parseFunc.'],$conf['parseFunc']);}
03212                                 if ($conf['HTMLparser'] && is_array($conf['HTMLparser.'])) {$content=$this->HTMLparser_TSbridge($content,$conf['HTMLparser.']);}
03213                                 if ($conf['split.']){$content=$this->splitObj($content,$conf['split.']);}
03214                                 if ($conf['prioriCalc']){$content=t3lib_div::calcParenthesis($content); if ($conf['prioriCalc']=='intval') $content=intval($content);}
03215                                 if ((string)$conf['char']!=''){$content=chr(intval($conf['char']));}
03216                                 if ($conf['intval']){$content=intval($content);}
03217                                 if ($conf['date']){$content=date($conf['date'], $content);}
03218                                 if ($conf['strftime']){
03219                                         $content = strftime($conf['strftime'], $content);
03220                                         $tmp_charset = $conf['strftime.']['charset'] ? $conf['strftime.']['charset'] : $GLOBALS['TSFE']->localeCharset;
03221                                         if ($tmp_charset)       {
03222                                                 $content = $GLOBALS['TSFE']->csConv($content,$tmp_charset);
03223                                         }
03224                                 }
03225                                 if ($conf['age']){$content=$this->calcAge(time()-$content,$conf['age']);}
03226 
03227                                 if ($conf['case']){$content=$this->HTMLcaseshift($content, $conf['case']);}
03228                                 if ($conf['bytes']){$content=$this->bytes($content,$conf['bytes.']['labels']);}
03229                                 if ($conf['substring']){$content=$this->substring($content,$conf['substring']);}
03230                                 if ($conf['removeBadHTML'])     {$content = $this->removeBadHTML($content, $conf['removeBadHTML.']);}
03231                                 if ($conf['stripHtml']){$content = strip_tags($content);}
03232                                 if ($conf['crop']){$content=$this->crop($content, $conf['crop']);}
03233                                 if ($conf['rawUrlEncode']){$content = rawurlencode($content);}
03234                                 if ($conf['htmlSpecialChars']){
03235                                         $content=htmlSpecialChars($content);
03236                                         if ($conf['htmlSpecialChars.']['preserveEntities'])     $content = t3lib_div::deHSCentities($content);
03237                                 }
03238 
03239                                 if ($conf['doubleBrTag']) {
03240                                         $content=ereg_replace("\r?\n[\t ]*\r?\n",$conf['doubleBrTag'],$content);
03241                                 }
03242                                 if ($conf['br']) {$content=nl2br($content);}
03243                                 if ($conf['brTag']) {$content= ereg_replace(chr(10),$conf['brTag'],$content);}
03244                                 if ($conf['encapsLines.']) {$content=$this->encaps_lineSplit($content,$conf['encapsLines.']);}
03245                                 if ($conf['keywords']) {$content= $this->keywords($content);}
03246                                 if ($conf['innerWrap'] || $conf['innerWrap.']){$content=$this->wrap($content, $this->stdWrap($conf['innerWrap'], $conf['innerWrap.']));}
03247                                 if ($conf['innerWrap2'] || $conf['innerWrap2.']){$content=$this->wrap($content, $this->stdWrap($conf['innerWrap2'], $conf['innerWrap2.']));}
03248                                 if ($conf['fontTag']){$content=$this->wrap($content, $conf['fontTag']);}
03249                                 if ($conf['addParams.']) {$content=$this->addParams($content,$conf['addParams.']);}
03250                                 if ($conf['textStyle.']) {$content=$this->textStyle($content,$conf['textStyle.']);}
03251                                 if ($conf['tableStyle.']) {$content=$this->tableStyle($content,$conf['tableStyle.']);}
03252                                 if ($conf['filelink.']) {$content=$this->filelink($content,$conf['filelink.']);}
03253                                 if ($conf['preCObject']) {$content=$this->cObjGetSingle($conf['preCObject'],$conf['preCObject.'],'/stdWrap/.preCObject').$content;}
03254                                 if ($conf['postCObject']) {$content.=$this->cObjGetSingle($conf['postCObject'],$conf['postCObject.'],'/stdWrap/.postCObject');}
03255 
03256                                 if ($conf['wrapAlign'] || $conf['wrapAlign.']){
03257                                         $wrapAlign = trim($this->stdWrap($conf['wrapAlign'], $conf['wrapAlign.']));
03258                                         if ($wrapAlign) {$content=$this->wrap($content, '<div style="text-align:'.$wrapAlign.';">|</div>');}
03259                                 }
03260                                 if ($conf['typolink.']){$content=$this->typolink($content, $conf['typolink.']);}
03261                                 if (is_array($conf['TCAselectItem.'])) {$content=$this->TCAlookup($content,$conf['TCAselectItem.']);}
03262 
03263                                         // Spacing
03264                                 if ($conf['space']){$content=$this->wrapSpace($content, $conf['space']);}
03265                                 $spaceBefore = '';
03266                                 if ($conf['spaceBefore'] || $conf['spaceBefore.'])      {$spaceBefore = trim($this->stdWrap($conf['spaceBefore'], $conf['spaceBefore.']));}
03267                                 $spaceAfter = '';
03268                                 if ($conf['spaceAfter'] || $conf['spaceAfter.'])        {$spaceAfter = trim($this->stdWrap($conf['spaceAfter'], $conf['spaceAfter.']));}
03269                                 if ($spaceBefore || $spaceAfter)        {$content=$this->wrapSpace($content, $spaceBefore.'|'.$spaceAfter);}
03270 
03271                                         // Wraps
03272                                 if ($conf['wrap']){$content=$this->wrap($content, $conf['wrap'], ($conf['wrap.']['splitChar']?$conf['wrap.']['splitChar']:'|'));}
03273                                 if ($conf['noTrimWrap']){$content=$this->noTrimWrap($content, $conf['noTrimWrap']);}
03274                                 if ($conf['wrap2']){$content=$this->wrap($content, $conf['wrap2'], ($conf['wrap2.']['splitChar']?$conf['wrap2.']['splitChar']:'|'));}
03275                                 if ($conf['dataWrap']){$content=$this->dataWrap($content, $conf['dataWrap']);}
03276                                 if ($conf['prepend']){$content=$this->cObjGetSingle($conf['prepend'],$conf['prepend.'],'/stdWrap/.prepend').$content;}
03277                                 if ($conf['append']){$content.=$this->cObjGetSingle($conf['append'],$conf['append.'],'/stdWrap/.append');}
03278                                 if ($conf['wrap3']){$content=$this->wrap($content, $conf['wrap3'], ($conf['wrap3.']['splitChar']?$conf['wrap3.']['splitChar']:'|'));}
03279                                 if ($conf['outerWrap'] || $conf['outerWrap.']){$content=$this->wrap($content, $this->stdWrap($conf['outerWrap'], $conf['outerWrap.']));}
03280                                 if ($conf['insertData'])        {$content = $this->insertData($content);}
03281                                 if ($conf['offsetWrap']){
03282                                         $controlTable = t3lib_div::makeInstance('tslib_tableOffset');
03283                                         if ($conf['offsetWrap.']['tableParams'] || $conf['offsetWrap.']['tableParams.'])        {$controlTable->tableParams = $this->stdWrap($conf['offsetWrap.']['tableParams'], $conf['offsetWrap.']['tableParams.']);}
03284                                         if ($conf['offsetWrap.']['tdParams'] || $conf['offsetWrap.']['tdParams.'])      {$controlTable->tdParams = ' '.$this->stdWrap($conf['offsetWrap.']['tdParams'], $conf['offsetWrap.']['tdParams.']);}
03285                                         $content=$controlTable->start($content,$conf['offsetWrap']);
03286                                         if ($conf['offsetWrap.']['stdWrap.'])   {       $content=$this->stdWrap($content,$conf['offsetWrap.']['stdWrap.']);     }
03287                                 }
03288                                 if ($conf['postUserFunc'])      {$content = $this->callUserFunction($conf['postUserFunc'], $conf['postUserFunc.'], $content);}
03289                                 if ($conf['postUserFuncInt'])   {
03290                                         $substKey = 'INT_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
03291                                         $GLOBALS['TSFE']->config['INTincScript'][$substKey] = array(
03292                                                 'content' => $content,
03293                                                 'postUserFunc' => $conf['postUserFuncInt'],
03294                                                 'conf' => $conf['postUserFuncInt.'],
03295                                                 'type' => 'POSTUSERFUNC',
03296                                                 'cObj' => serialize($this),
03297                                         );
03298                                         $content ='<!--'.$substKey.'-->';
03299                                 }
03300                                         // Various:
03301                                 if ($conf['prefixComment'] && !$GLOBALS['TSFE']->config['config']['disablePrefixComment'])      {$content = $this->prefixComment($conf['prefixComment'], $conf['prefixComment.'], $content);}
03302 
03303                                 if ($conf['editIcons'] && $GLOBALS['TSFE']->beUserLogin){$content=$this->editIcons($content,$conf['editIcons'],$conf['editIcons.']);}
03304                                 if ($conf['editPanel'] && $GLOBALS['TSFE']->beUserLogin){$content=$this->editPanel($content, $conf['editPanel.']);}
03305                         }
03306 
03307                                 //Debug:
03308                         if ($conf['debug'])     {$content = '<pre>'.htmlspecialchars($content).'</pre>';}
03309                         if ($conf['debugFunc']) {debug($conf['debugFunc']==2?array($content):$content);}
03310                         if ($conf['debugData']) {
03311                                 echo '<b>$cObj->data:</b>';
03312                                 debug($this->data,'$cObj->data:');
03313                                 if (is_array($this->alternativeData))   {
03314                                         echo '<b>$cObj->alternativeData:</b>';
03315                                         debug($this->alternativeData,'$this->alternativeData');
03316                                 }
03317                         }
03318                 }
03319                 return $content;
03320         }
03321 
03333         function numRows($conf) {
03334                 $conf['select.']['selectFields'] = 'count(*)';
03335 
03336                 $res = $this->exec_getQuery($conf['table'],$conf['select.']);
03337 
03338                 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
03339                         $GLOBALS['TT']->setTSlogMessage($error,3);
03340                 } else {
03341                         $row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
03342                         return intval($row[0]);
03343                 }
03344         }
03345 
03354         function listNum($content,$listNum,$char) {
03355                 $char = $char ? $char : ',';
03356                 if (t3lib_div::testInt($char))  {
03357                         $char = chr($char);
03358                 }
03359                 $temp = explode($char,$content);
03360                 $last = ''.(count($temp)-1);
03361                 $index=$this->calc(eregi_replace('last',$last,$listNum));
03362                 return $temp[$index];
03363         }
03364 
03374         function checkIf($conf) {
03375                 if (!is_array($conf))   {return true;}
03376                 if (isset($conf['directReturn']))       {return $conf['directReturn'] ? 1 : 0;}
03377                 $flag = true;
03378                         if (isset($conf['isTrue']) || isset($conf['isTrue.']))  {
03379                                 $isTrue = trim($this->stdWrap($conf['isTrue'],$conf['isTrue.']));
03380                                 if (!$isTrue)   {
03381                                         $flag=0;
03382                                 }
03383                         }
03384                         if (isset($conf['isFalse']) || isset($conf['isFalse.']))        {
03385                                 $isFalse = trim($this->stdWrap($conf['isFalse'],$conf['isFalse.']));
03386                                 if ($isFalse)   {
03387                                         $flag=0;
03388                                 }
03389                         }
03390                         if (isset($conf['isPositive']) || isset($conf['isPositive.']))  {
03391                                 $number = $this->calc($this->stdWrap($conf['isPositive'],$conf['isPositive.']));
03392                                 if ($number<1)  {
03393                                         $flag=0;
03394                                 }
03395                         }
03396                         if ($flag)      {
03397                                 $value = trim($this->stdWrap($conf['value'],$conf['value.']));
03398 
03399                                 if (isset($conf['isGreaterThan']) || isset($conf['isGreaterThan.']))    {
03400                                         $number = trim($this->stdWrap($conf['isGreaterThan'],$conf['isGreaterThan.']));
03401                                         if ($number<=$value)    {
03402                                                 $flag=0;
03403                                         }
03404                                 }
03405                                 if (isset($conf['isLessThan']) || isset($conf['isLessThan.']))  {
03406                                         $number = trim($this->stdWrap($conf['isLessThan'],$conf['isLessThan.']));
03407                                         if ($number>=$value)    {
03408                                                 $flag=0;
03409                                         }
03410                                 }
03411                                 if (isset($conf['equals']) || isset($conf['equals.']))  {
03412                                         $number = trim($this->stdWrap($conf['equals'],$conf['equals.']));
03413                                         if ($number!=$value)    {
03414                                                 $flag=0;
03415                                         }
03416                                 }
03417                                 if (isset($conf['isInList']) || isset($conf['isInList.']))      {
03418                                         $number = trim($this->stdWrap($conf['isInList'],$conf['isInList.']));
03419                                         if (!t3lib_div::inList($value,$number)) {
03420                                                 $flag=0;
03421                                         }
03422                                 }
03423                         }
03424                 if ($conf['negate'])    {$flag = $flag ? 0 : 1;}
03425                 return $flag;
03426         }
03427 
03437         function filelist($data)        {
03438                 $data = trim($data);
03439                 if ($data)      {
03440                         $data_arr = explode('|',$data);
03441                                 // read directory:
03442                         if ($GLOBALS['TSFE']->lockFilePath)     {               // MUST exist!
03443                                 $path = $this->clean_directory($data_arr[0]);   // Cleaning name..., only relative paths accepted.
03444                                 $path = substr($path,0,strlen($GLOBALS['TSFE']->lockFilePath))==$GLOBALS['TSFE']->lockFilePath ? $path : '';
03445                         }
03446                         if ($path)      {
03447                                 $items = Array('files'=>array(), 'sorting'=>array());
03448                                 $ext_list = strtolower(t3lib_div::uniqueList($data_arr[1]));
03449                                 $sorting = trim($data_arr[2]);
03450                                         // read dir:
03451                                 $d = @dir($path);
03452                                 $tempArray=Array();
03453                                 if (is_object($d))      {
03454                                         $count=0;
03455                                         while($entry=$d->read()) {
03456                                                 if ($entry!='.' && $entry!='..')        {
03457                                                         $wholePath = $path.'/'.$entry;          // Because of odd PHP-error where  <br />-tag is sometimes placed after a filename!!
03458                                                         if (@file_exists($wholePath) && filetype($wholePath)=='file')   {
03459                                                                 $info = t3lib_div::split_fileref($wholePath);
03460                                                                 if (!$ext_list || t3lib_div::inList($ext_list,$info['fileext']))        {
03461                                                                         $items['files'][] = $info['file'];
03462                                                                         switch($sorting)        {
03463                                                                                 case 'name':
03464                                                                                         $items['sorting'][] = strtolower($info['file']);
03465                                                                                 break;
03466                                                                                 case 'size':
03467                                                                                         $items['sorting'][] = filesize($wholePath);
03468                                                                                 break;
03469                                                                                 case 'ext':
03470                                                                                         $items['sorting'][] = $info['fileext'];
03471                                                                                 break;
03472                                                                                 case 'date':
03473                                                                                         $items['sorting'][] = filectime($wholePath);
03474                                                                                 break;
03475                                                                                 case 'mdate':
03476                                                                                         $items['sorting'][] = filemtime($wholePath);
03477                                                                                 break;
03478                                                                                 default:
03479                                                                                         $items['sorting'][] = $count;
03480                                                                                 break;
03481                                                                         }
03482                                                                         $count++;
03483                                                                 }
03484                                                         }
03485                                                 }
03486                                         }
03487                                         $d->close();
03488                                 }
03489                                         // Sort if required
03490                                 if (count($items['sorting']))   {
03491                                         if (strtolower(trim($data_arr[3]))!='r')        {
03492                                                 asort($items['sorting']);
03493                                         } else {
03494                                                 arsort($items['sorting']);
03495                                         }
03496                                 }
03497                                 if (count($items['files']))     {
03498                                                 // make list
03499                                         reset($items['sorting']);
03500                                         $fullPath = trim($data_arr[4]);
03501                                         $list_arr=Array();
03502                                         while(list($key,)=each($items['sorting']))      {
03503                                                 $list_arr[]=  $fullPath ? $path.'/'.$items['files'][$key] : $items['files'][$key];
03504                                         }
03505                                         return implode(',',$list_arr);
03506                                 }
03507                         }
03508                 }
03509         }
03510 
03519         function clean_directory($theDir)       {
03520                 if (t3lib_div::validPathStr($theDir))   {               // proceeds if no '//', '..' or '\' is in the $theFile
03521                         $theDir = ereg_replace("[\/\. ]*$",'',$theDir);         // Removes all dots, slashes and spaces after a path...
03522                         if (!t3lib_div::isAbsPath($theDir) && @is_dir($theDir)) {
03523                                 return $theDir;
03524                         }
03525                 }
03526         }
03527 
03537         function HTMLparser_TSbridge($theValue, $conf)  {
03538                 $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
03539                 $htmlParserCfg =  $htmlParser->HTMLparserConfig($conf);
03540                 return $htmlParser->HTMLcleaner($theValue,$htmlParserCfg[0],$htmlParserCfg[1],$htmlParserCfg[2],$htmlParserCfg[3]);
03541         }
03542 
03551         function dataWrap($content,$wrap)       {
03552                 return $this->wrap($content,$this->insertData($wrap));
03553         }
03554 
03564         function insertData($str)       {
03565                 $inside=0;
03566                 $newVal='';
03567                 $pointer=0;
03568                 $totalLen = strlen($str);
03569                 do      {
03570                         if (!$inside)   {
03571                                 $len = strcspn(substr($str,$pointer),'{');
03572                                 $newVal.= substr($str,$pointer,$len);
03573                                 $inside = 1;
03574                         } else {
03575                                 $len = strcspn(substr($str,$pointer),'}')+1;
03576                                 $newVal.= $this->getData(substr($str,$pointer+1,$len-2),$this->data);
03577                                 $inside = 0;
03578                         }
03579                         $pointer+=$len;
03580                 } while($pointer<$totalLen);
03581                 return $newVal;
03582         }
03583 
03594         function prefixComment($str,$conf,$content)     {
03595                 $parts = explode('|',$str);
03596 
03597                 $output =
03598                         chr(10).str_pad('',$parts[0],chr(9)).
03599                         '<!-- '.htmlspecialchars($this->insertData($parts[1])).' [begin] -->'.
03600                         chr(10).str_pad('',$parts[0]+1,chr(9)).
03601                                 $content.
03602                         chr(10).str_pad('',$parts[0],chr(9)).
03603                         '<!-- '.htmlspecialchars($this->insertData($parts[1])).' [end] -->'.
03604                         chr(10).str_pad('',$parts[0]+1,chr(9));
03605 
03606                 return $output;
03607         }
03608 
03618         function substring($content,$options)   {
03619                 $options = t3lib_div::intExplode(',',$options.',');
03620                 if ($options[1])        {
03621                         return $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$options[0],$options[1]);
03622                 } else {
03623                         return $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$options[0]);
03624                 }
03625         }
03626 
03636         function crop($content,$options)        {
03637                 $options = explode('|',$options);
03638                 $chars = intval($options[0]);
03639                 $afterstring = trim($options[1]);
03640                 $crop2space = trim($options[2]);
03641                 if ($chars)     {
03642                         if (strlen($content)>abs($chars))       {
03643                                 if ($chars<0)   {
03644                                         $content = $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$chars);
03645                                         $trunc_at = strpos($content, ' ');
03646                                         $content = ($trunc_at&&$crop2space) ? $afterstring.substr($content,$trunc_at) : $afterstring.$content;
03647                                 } else {
03648                                         $content = $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,0,$chars);
03649                                         $trunc_at = strrpos($content, ' ');
03650                                         $content = ($trunc_at&&$crop2space) ? substr($content, 0, $trunc_at).$afterstring : $content.$afterstring;
03651                                 }
03652                         }
03653                 }
03654                 return $content;
03655         }
03656 
03668         function removeBadHTML($text, $conf)    {
03669 
03670                         // Copyright 2002-2003 Thomas Bley
03671                 $text = preg_replace(
03672                         array(
03673                                 "'<script[^>]*?>.*?</script[^>]*?>'si",
03674                                 "'<applet[^>]*?>.*?</applet[^>]*?>'si",
03675                                 "'<object[^>]*?>.*?</object[^>]*?>'si",
03676                                 "'<iframe[^>]*?>.*?</iframe[^>]*?>'si",
03677                                 "'<frameset[^>]*?>.*?</frameset[^>]*?>'si",
03678                                 "'<style[^>]*?>.*?</style[^>]*?>'si",
03679                                 "'<marquee[^>]*?>.*?</marquee[^>]*?>'si",
03680                                 "'<script[^>]*?>'si",
03681                                 "'<meta[^>]*?>'si",
03682                                 "'<base[^>]*?>'si",
03683                                 "'<applet[^>]*?>'si",
03684                                 "'<object[^>]*?>'si",
03685                                 "'<link[^>]*?>'si",
03686                                 "'<iframe[^>]*?>'si",
03687                                 "'<frame[^>]*?>'si",
03688                                 "'<frameset[^>]*?>'si",
03689                                 "'<input[^>]*?>'si",
03690                                 "'<form[^>]*?>'si",
03691                                 "'<embed[^>]*?>'si",
03692                                 "'background-image:url'si",
03693                                 "'<\w+.*?(onabort|onbeforeunload|onblur|onchange|onclick|ondblclick|ondragdrop|onerror|onfilterchange|onfocus|onhelp|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onmove|onreadystatechange|onreset|onresize|onscroll|onselect|onselectstart|onsubmit|onunload).*?>'si",
03694                         ), '', $text);
03695 
03696                         $text = eregi_replace('<a[^>]*href[[:space:]]*=[[:space:]]*["\']?[[:space:]]*javascript[^>]*','',$text);
03697 
03698                         // Return clean content
03699                 return $text;
03700         }
03701 
03712         function textStyle($theValue, $conf) {
03713                 $conf['face.'][1] = 'Times New Roman';
03714                 $conf['face.'][2] = 'Verdana,Arial,Helvetica,Sans serif';
03715                 $conf['face.'][3] = 'Arial,Helvetica,Sans serif';
03716 
03717                 $conf['size.'][1] = 1;
03718                 $conf['size.'][2] = 2;
03719                 $conf['size.'][3] = 3;
03720                 $conf['size.'][4] = 4;
03721                 $conf['size.'][5] = 5;
03722                 $conf['size.'][10] = '+1';
03723                 $conf['size.'][11] = '-1';
03724 
03725                 $conf['color.'][240] = 'black';
03726                 $conf['color.'][241] = 'white';
03727                 $conf['color.'][242] = '#333333';
03728                 $conf['color.'][243] = 'gray';
03729                 $conf['color.'][244] = 'silver';
03730                 $conf['color.'][245] = 'red';
03731                 $conf['color.'][246] = 'navy';
03732                 $conf['color.'][247] = 'yellow';
03733                 $conf['color.'][248] = 'green';
03734                 $conf['color.'][249] = 'olive';
03735                 $conf['color.'][250] = 'maroon';
03736 
03737                 $face = $this->data[$conf['face.']['field']];
03738                 $size = $this->data[$conf['size.']['field']];
03739                 $color = $this->data[$conf['color.']['field']];
03740                 $align = $this->data[$conf['align.']['field']];
03741                 $properties = $this->data[$conf['properties.']['field']];
03742                 if (!$properties)       {
03743                         $properties=$this->stdWrap($conf['properties.']['default'],$conf['properties.']['default.']);
03744                 }
03745 
03746                         // properties
03747                 if (($properties&8))    {$theValue=$this->HTMLcaseshift($theValue, 'upper');}
03748                 if (($properties&1))    {$theValue='<b>'.$theValue.'</b>';}
03749                 if (($properties&2))    {$theValue='<i>'.$theValue.'</i>';}
03750                 if (($properties&4))    {$theValue='<u>'.$theValue.'</u>';}
03751 
03752                         // Fonttag
03753                 $theFace = $conf['face.'][$face] ? $conf['face.'][$face] : $this->stdWrap($conf['face.']['default'],$conf['face.']['default.']);
03754                 $theSize = $conf['size.'][$size] ? $conf['size.'][$size] : $this->stdWrap($conf['size.']['default'],$conf['size.']['default.']);
03755                 $theColor = $conf['color.'][$color] ? $conf['color.'][$color] : $this->stdWrap($conf['color.']['default'],$conf['color.']['default.']);
03756 
03757                 if ($conf['altWrap'])   {
03758                         $theValue=$this->wrap($theValue, $conf['altWrap']);
03759                 } elseif ($theFace || $theSize || $theColor)    {
03760                         $fontWrap = '<font'.($theFace?' face="'.$theFace.'"':'').($theSize?' size="'.$theSize.'"':'').($theColor?' color="'.$theColor.'"':'').'>|</font>';
03761                         $theValue=$this->wrap($theValue, $fontWrap);
03762                 }
03763                         // align
03764                 if ($align)     {$theValue=$this->wrap($theValue, '<div style="text-align:'.$align.';">|</div>');}
03765                         // return
03766                 return $theValue;
03767         }
03768 
03779         function tableStyle($theValue, $conf) {
03780                 $conf['color.'][240] = 'black';
03781                 $conf['color.'][241] = 'white';
03782                 $conf['color.'][242] = '#333333';
03783                 $conf['color.'][243] = 'gray';
03784                 $conf['color.'][244] = 'silver';
03785 
03786                 $align = $this->stdWrap($conf['align'],$conf['align.']);
03787                 $border = intval($this->stdWrap($conf['border'],$conf['border.']));
03788                 $cellspacing = intval($this->stdWrap($conf['cellspacing'],$conf['cellspacing.']));
03789                 $cellpadding = intval($this->stdWrap($conf['cellpadding'],$conf['cellpadding.']));
03790 
03791                 $color = $this->data[$conf['color.']['field']];
03792                 $theColor = $conf['color.'][$color] ? $conf['color.'][$color] : $conf['color.']['default'];
03793                         // Assembling the table tag
03794                 $tableTagArray = Array('<table');
03795                 $tableTagArray[]='border="'.$border.'"';
03796                 $tableTagArray[]='cellspacing="'.$cellspacing.'"';
03797                 $tableTagArray[]='cellpadding="'.$cellpadding.'"';
03798                 if ($align)     {$tableTagArray[]='align="'.$align.'"';}
03799                 if ($theColor)  {$tableTagArray[]='bgcolor="'.$theColor.'"';}
03800 
03801                 if ($conf['params'])    {
03802                         $tableTagArray[] = $conf['params'];
03803                 }
03804 
03805                 $tableWrap = implode(' ',$tableTagArray).'> | </table>';
03806                 $theValue=$this->wrap($theValue, $tableWrap);
03807                         // return
03808                 return $theValue;
03809         }
03810 
03820         function addParams($content,$conf) {
03821                 $lowerCaseAttributes = TRUE;    // For XHTML compliance.
03822 
03823                 if (!is_array($conf))   { return $content; }
03824 
03825                 $key = 1;
03826                 $parts = explode('<',$content);
03827                 if (intval($conf['_offset']))   $key = intval($conf['_offset'])<0 ? count($parts)+intval($conf['_offset']) : intval($conf['_offset']);
03828                 $subparts=explode('>',$parts[$key]);
03829                 if (trim($subparts[0])) {
03830                                 // Get attributes and name
03831                         $attribs = t3lib_div::get_tag_attributes('<'.$subparts[0].'>');
03832                         if (!is_array($attribs))        {$attribs=array();}
03833                         list($tagName) = explode(' ',$subparts[0],2);
03834                                 // adds/overrides attributes
03835                         reset($conf);
03836                         while(list($pkey,$val)=each($conf))     {
03837                                 if (substr($pkey,-1)!='.' && substr($pkey,0,1)!='_')    {
03838                                         $tmpVal=$this->stdWrap($conf[$pkey],$conf[$pkey.'.']);
03839                                         if ($lowerCaseAttributes)       { $pkey = strtolower($pkey); }
03840                                         if (strcmp($tmpVal,'')) {$attribs[$pkey]=$tmpVal;}
03841                                 }
03842                         }
03843 
03844                                 // Re-assembles the tag and content
03845                         $subparts[0]=trim($tagName.' '.t3lib_div::implodeAttributes($attribs));
03846                         $parts[$key] = implode('>',$subparts);
03847                         $content = implode('<',$parts);
03848                 }
03849                 return $content;
03850         }
03851 
03863         function filelink($theValue, $conf)     {
03864                 $output = '';
03865                 $aTagParams = $this->getATagParams($conf);
03866                 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
03867                 $conf['path'] = $this->stdWrap($conf['path'],$conf['path.']);
03868                 $theFile = trim($conf['path']).$theValue;
03869                 if (@is_file($theFile)) {
03870                         $theFileEnc = str_replace('%2F', '/', rawurlencode($theFile));
03871                         $locDataAdd = $conf['jumpurl.']['secure'] ? $this->locDataJU($theFileEnc,$conf['jumpurl.']['secure.']) : '';
03872                         $url = ($conf['jumpurl']) ? $GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($theFileEnc).$locDataAdd.$GLOBALS['TSFE']->getMethodUrlIdToken : $theFileEnc;                // && $GLOBALS['TSFE']->config['config']['jumpurl_enable']
03873                         $theLinkWrap = '<a href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$url).'"'.($conf['target']?' target="'.$conf['target'].'"':'').$aTagParams.'>|</a>';
03874 
03875                         $theSize = filesize($theFile);
03876                         $fI = t3lib_div::split_fileref($theFile);
03877                         if ($conf['icon'])      {
03878 // TODO the path should be configurable (see bug #1378)
03879                                 $iconP = t3lib_extMgm::siteRelPath('cms').'tslib/media/fileicons/';
03880                                 $icon = @is_file($iconP.$fI['fileext'].'.gif') ? $iconP.$fI['fileext'].'.gif' : $iconP.'default.gif';
03881                                         // Checking for images: If image, then return link to thumbnail.
03882                                 $IEList = $this->stdWrap($conf['icon_image_ext_list'],$conf['icon_image_ext_list.']);
03883                                 $image_ext_list = str_replace(' ','',strtolower($IEList));
03884                                 if ($fI['fileext'] && t3lib_div::inList($image_ext_list, $fI['fileext']))       {
03885                                         if ($conf['iconCObject'])       {
03886                                                 $icon = $this->cObjGetSingle($conf['iconCObject'],$conf['iconCObject.'],'iconCObject');
03887                                         } else {
03888                                                 if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'])   {
03889                                                         $thumbSize = '';
03890                                                         if ($conf['icon_thumbSize'] || $conf['icon_thumbSize.'])        { $thumbSize = '&size='.$this->stdWrap($conf['icon_thumbSize'], $conf['icon_thumbSize.']); }
03891                                                         $icon = 't3lib/thumbs.php?dummy='.$GLOBALS['EXEC_TIME'].'&file='.rawurlencode('../'.$theFile).$thumbSize;
03892                                                 } else {
03893                                                         $icon = t3lib_extMgm::siteRelPath('cms').'tslib/media/miscicons/notfound_thumb.gif';
03894                                                 }
03895                                                 $icon = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$icon).'"'.$this->getBorderAttr(' border="0"').''.$this->getAltParam($conf).' />';
03896                                         }
03897                                 } else {
03898                                         $icon = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$icon).'" width="18" height="16"'.$this->getBorderAttr(' border="0"').''.$this->getAltParam($conf).' />';
03899                                 }
03900                                 if ($conf['icon_link']) {$icon = $this->wrap($icon, $theLinkWrap);}
03901                                 $icon = $this->stdWrap($icon,$conf['icon.']);
03902                         }
03903                         if ($conf['size'])      {
03904                                 $size = $this->stdWrap($theSize,$conf['size.']);
03905                         }
03906 
03907                                 // Wrapping file label
03908                         if ($conf['removePrependedNumbers']) $theValue=ereg_replace('_[0-9][0-9](\.[[:alnum:]]*)$','\1',$theValue);
03909                         $theValue = $this->stdWrap($theValue,$conf['labelStdWrap.']);
03910 
03911                                 // Wrapping file
03912                         if ($conf['ATagBeforeWrap'])    {
03913                                 $theValue = $this->wrap($this->wrap($theValue, $conf['wrap']), $theLinkWrap);
03914                         } else {
03915                                 $theValue = $this->wrap($this->wrap($theValue, $theLinkWrap), $conf['wrap']);
03916                         }
03917                         $file = $this->stdWrap($theValue,$conf['file.']);
03918                                 // output
03919                         return $this->stdWrap($icon.$file.$size, $conf['stdWrap.']);
03920                 }
03921         }
03922 
03933         function locDataJU($jumpUrl,$conf)      {
03934                 $fI = pathinfo($jumpUrl);
03935                 $mimetype='';
03936                 if ($fI['extension'])   {
03937                         $mimeTypes = t3lib_div::trimExplode(',',$conf['mimeTypes'],1);
03938                         reset($mimeTypes);
03939                         while(list(,$v)=each($mimeTypes))       {
03940                                 $parts = explode('=',$v,2);
03941                                 if (strtolower($fI['extension']) == strtolower(trim($parts[0])))        {
03942                                         $mimetype = '&mimeType='.rawurlencode(trim($parts[1]));
03943                                 }
03944                         }
03945                 }
03946                 $locationData = $GLOBALS['TSFE']->id.':'.$this->currentRecord;
03947                 $rec='&locationData='.rawurlencode($locationData);
03948                 $hArr = array(
03949                         $jumpUrl,
03950                         $locationData,
03951                         $GLOBALS['TSFE']->TYPO3_CONF_VARS['SYS']['encryptionKey']
03952                 );
03953                 $juHash='&juHash='.t3lib_div::shortMD5(serialize($hArr));
03954                 return '&juSecure=1'.$mimetype.$rec.$juHash;
03955         }
03956 
03964         function calc($val)     {
03965                 $parts= t3lib_div::splitCalc($val,'+-*/');
03966                 $value=0;
03967                 reset($parts);
03968                 while(list(,$part)=each($parts))        {
03969                         $theVal = $part[1];
03970                         $sign =  $part[0];
03971                         if ((string)intval($theVal)==(string)$theVal)   {
03972                                 $theVal = intval($theVal);
03973                         } else {
03974                                 $theVal =0;
03975                         }
03976                         if ($sign=='-') {$value-=$theVal;}
03977                         if ($sign=='+') {$value+=$theVal;}
03978                         if ($sign=='/') {if (intval($theVal)) $value/=intval($theVal);}
03979                         if ($sign=='*') {$value*=$theVal;}
03980                 }
03981                 return $value;
03982         }
03983 
03993         function calcIntExplode($delim, $string)        {
03994                 $temp = explode($delim,$string);
03995                 while(list($key,$val)=each($temp))      {
03996                         $temp[$key]=intval(tslib_cObj::calc($val));
03997                 }
03998                 return $temp;
03999         }
04000 
04013         function splitObj($value, $conf)        {
04014                 $conf['token']=$this->stdWrap($conf['token'],$conf['token.']);
04015                 if (!$conf['token'])    {
04016                         return $value;
04017                 }
04018                 $conf['max']=intval($this->stdWrap($conf['max'],$conf['max.']));
04019                 $conf['min']=intval($this->stdWrap($conf['min'],$conf['min.']));
04020 
04021                 $valArr=explode($conf['token'],$value);
04022 
04023                 if (count($valArr) && ($conf['returnKey'] || $conf['returnKey.']))      {
04024                         $key = intval($this->stdWrap($conf['returnKey'],$conf['returnKey.']));
04025                         $content = isset($valArr[$key]) ? $valArr[$key] : '';
04026                 } else {
04027                                 // calculate splitCount
04028                         $splitCount = count($valArr);
04029                         if ($conf['max'] && $splitCount>$conf['max'])   {
04030                                 $splitCount=$conf['max'];
04031                         }
04032                         if ($conf['min'] && $splitCount<$conf['min'])   {
04033                                 $splitCount=$conf['min'];
04034                         }
04035 
04036                         if ($conf['wrap'] || $conf['cObjNum'])  {
04037                                 $splitArr=array();
04038                                 $splitArr['wrap']=$conf['wrap'];
04039                                 $splitArr['cObjNum']=$conf['cObjNum'];
04040                                 $splitArr = $GLOBALS['TSFE']->tmpl->splitConfArray($splitArr,$splitCount);
04041                         }
04042 
04043                         $content='';
04044                         for($a=0;$a<$splitCount;$a++)   {
04045                                 $GLOBALS['TSFE']->register['SPLIT_COUNT']=$a;
04046                                 $value = ''.$valArr[$a];
04047                                 $this->data[$this->currentValKey] = $value;
04048                                 if ($splitArr[$a]['cObjNum'])   {
04049                                         $objName=intval($splitArr[$a]['cObjNum']);
04050                                         $value = $this->stdWrap($this->cObjGet($conf[$objName.'.'],$objName.'.'),$conf[$objName.'.']);
04051                                 }
04052                                 if ($splitArr[$a]['wrap'])      {
04053                                         $value=$this->wrap($value,$splitArr[$a]['wrap']);
04054                                 }
04055                                 $content.=$value;
04056                         }
04057                 }
04058                 return $content;
04059         }
04060 
04075         function parseFunc($theValue, $conf, $ref='') {
04076 
04077                         // Fetch / merge reference, if any
04078                 if ($ref)       {
04079                         $temp_conf = array(
04080                                                                 'parseFunc' => $ref,
04081                                                                 'parseFunc.' => $conf
04082                                                         );
04083                         $temp_conf = $this->mergeTSRef($temp_conf, 'parseFunc');
04084                         $conf = $temp_conf['parseFunc.'];
04085                 }
04086 
04087                         // Process:
04088                 if (strcmp($conf['externalBlocks'],'')) {
04089                         $tags = strtolower(implode(',',t3lib_div::trimExplode(',',$conf['externalBlocks'])));
04090                         $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
04091                         $parts = $htmlParser->splitIntoBlock($tags,$theValue);
04092 
04093                         reset($parts);
04094                         while(list($k,$v)=each($parts)) {
04095                                 if ($k%2)       {       // font:
04096                                         $tagName=strtolower($htmlParser->getFirstTagName($v));
04097                                         $cfg=$conf['externalBlocks.'][$tagName.'.'];
04098                                         if ($cfg['stripNLprev'] || $cfg['stripNL'])     {
04099                                                 $parts[$k-1]=ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $parts[$k-1]);
04100                                         }
04101                                         if ($cfg['stripNLnext'] || $cfg['stripNL'])     {
04102                                                 $parts[$k+1]=ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $parts[$k+1]);
04103                                         }
04104                                 }
04105                         }
04106 
04107                         reset($parts);
04108                         while(list($k,$v)=each($parts)) {
04109                                 if ($k%2)       {
04110                                         $tag=$htmlParser->getFirstTag($v);
04111                                         $tagName=strtolower($htmlParser->getFirstTagName($v));
04112                                         $cfg=$conf['externalBlocks.'][$tagName.'.'];
04113                                         if ($cfg['callRecursive'])      {
04114                                                 $parts[$k]=$this->parseFunc($htmlParser->removeFirstAndLastTag($v), $conf);
04115                                                 if (!$cfg['callRecursive.']['dontWrapSelf'])    {
04116                                                         if ($cfg['callRecursive.']['alternativeWrap'])  {
04117                                                                 $parts[$k] = $this->wrap($parts[$k], $cfg['callRecursive.']['alternativeWrap']);
04118                                                         } else {
04119                                                                 if (is_array($cfg['callRecursive.']['tagStdWrap.']))    {
04120                                                                         $tag = $this->stdWrap($tag,$cfg['callRecursive.']['tagStdWrap.']);
04121                                                                 }
04122                                                                 $parts[$k]=$tag.$parts[$k].'</'.$tagName.'>';
04123                                                         }
04124                                                 }
04125                                         } elseif($cfg['HTMLtableCells']) {
04126                                                 $rowParts = $htmlParser->splitIntoBlock('tr',$parts[$k]);
04127                                                 reset($rowParts);
04128                                                 while(list($kk,$vv)=each($rowParts))    {
04129                                                         if ($kk%2)      {
04130                                                                 $colParts = $htmlParser->splitIntoBlock('td',$vv);
04131                                                                 reset($colParts);
04132                                                                 $cc=0;
04133                                                                 while(list($kkk,$vvv)=each($colParts))  {
04134                                                                         if ($kkk%2)     {
04135                                                                                 $cc++;
04136                                                                                 $tag=$htmlParser->getFirstTag($vvv);
04137                                                                                 $tagName=strtolower($htmlParser->getFirstTagName($vvv));
04138                                                                                 $colParts[$kkk] = $htmlParser->removeFirstAndLastTag($vvv);
04139 
04140                                                                                 if ($cfg['HTMLtableCells.'][$cc.'.']['callRecursive'] || (!isset($cfg['HTMLtableCells.'][$cc.'.']['callRecursive']) && $cfg['HTMLtableCells.']['default.']['callRecursive']))   {
04141                                                                                         if ($cfg['HTMLtableCells.']['addChr10BetweenParagraphs'])       $colParts[$kkk]=str_replace('</p><p>','</p>'.chr(10).'<p>',$colParts[$kkk]);
04142                                                                                         $colParts[$kkk] = $this->parseFunc($colParts[$kkk], $conf);
04143                                                                                 }
04144 
04145                                                                                 $tagStdWrap = is_array($cfg['HTMLtableCells.'][$cc.'.']['tagStdWrap.'])?$cfg['HTMLtableCells.'][$cc.'.']['tagStdWrap.']:$cfg['HTMLtableCells.']['default.']['tagStdWrap.'];
04146                                                                                 if (is_array($tagStdWrap))      {
04147                                                                                         $tag = $this->stdWrap($tag,$tagStdWrap);
04148                                                                                 }
04149 
04150                                                                                 $stdWrap = is_array($cfg['HTMLtableCells.'][$cc.'.']['stdWrap.'])?$cfg['HTMLtableCells.'][$cc.'.']['stdWrap.']:$cfg['HTMLtableCells.']['default.']['stdWrap.'];
04151                                                                                 if (is_array($stdWrap)) {
04152                                                                                         $colParts[$kkk] = $this->stdWrap($colParts[$kkk],$stdWrap);
04153                                                                                 }
04154 
04155                                                                                 $colParts[$kkk]=$tag.$colParts[$kkk].'</'.$tagName.'>';
04156                                                                         }
04157                                                                 }
04158                                                                 $rowParts[$kk] = implode('',$colParts);
04159                                                         }
04160                                                 }
04161                                                 $parts[$k] = implode('',$rowParts);
04162                                         }
04163 
04164                                         if (is_array($cfg['stdWrap.'])) {
04165                                                 $parts[$k] = $this->stdWrap($parts[$k],$cfg['stdWrap.']);
04166                                         }
04167                                 } else {
04168                                         $parts[$k]=$this->_parseFunc($parts[$k], $conf);
04169                                 }
04170                         }
04171 
04172                         return implode('',$parts);
04173                 } else return $this->_parseFunc($theValue, $conf);
04174         }
04175 
04185         function _parseFunc ($theValue, $conf) {
04186                 if (!$this->checkIf($conf['if.']))      {
04187                         return $theValue;
04188                 }
04189                 $inside=0;      // Indicates that the data is from within a tag.
04190                 $pointer=0;     // Pointer to the total string position
04191                 $currentTag=''; // Loaded with the current typo-tag if any.
04192                 $stripNL=0;
04193                 $contentAccum=array();
04194                 $contentAccumP=0;
04195 
04196                 $allowTags=strtolower(str_replace(' ','',$conf['allowTags']));
04197                 $denyTags=strtolower(str_replace(' ','',$conf['denyTags']));
04198 
04199                 $totalLen = strlen($theValue);
04200                 do      {
04201                         if (!$inside)   {
04202                                 if (!is_array($currentTag))     {                       // These operations should only be performed on code outside the typotags...
04203                                                 // data: this checks that we enter tags ONLY if the first char in the tag is alphanumeric OR '/'
04204                                         $len_p=0;
04205                                         $c=100;
04206                                         do      {
04207                                                 $len = strcspn(substr($theValue,$pointer+$len_p),'<');
04208                                                 $len_p+=$len+1;
04209                                                 $endChar = ord(strtolower(substr($theValue,$pointer+$len_p,1)));
04210                                                 $c--;
04211                                         } while ($c>0 && $endChar && ($endChar<97 || $endChar>122) && $endChar!=47);
04212                                         $len = $len_p-1;
04213                                 } else {
04214                                                 // If we're inside a currentTag, just take it to the end of that tag!
04215                                         $tempContent = strtolower(substr($theValue,$pointer));
04216                                         $len = strpos ($tempContent, '</'.$currentTag[0]);
04217                                         if (is_string ($len) && !$len) {
04218                                                 $len = strlen($tempContent);
04219                                         }
04220                                 }
04221 
04222                                 $data = substr($theValue,$pointer,$len);        // $data is the content until the next <tag-start or end is detected. In case of a currentTag set, this would mean all data between the start- and end-tags
04223                                 if ($data!='')  {
04224                                         if ($stripNL)   {               // If the previous tag was set to strip NewLines in the beginning of the next data-chunk.
04225                                                 $data = ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $data);
04226                                         }
04227 
04228                                         if (!is_array($currentTag))     {                       // These operations should only be performed on code outside the tags...
04229                                                         // Constants
04230                                                 if ($conf['constants'] && is_array($GLOBALS['TSFE']->tmpl->setup['constants.']))        {
04231                                                         reset($GLOBALS['TSFE']->tmpl->setup['constants.']);
04232                                                         while(list($key,$val)=each($GLOBALS['TSFE']->tmpl->setup['constants.']))        {
04233                                                                 if (is_string($val))    {
04234                                                                         $data = str_replace('###'.$key.'###', $val, $data);
04235                                                                 }
04236                                                         }
04237                                                 }
04238                                                         // Short
04239                                                 if (is_array($conf['short.']))  {
04240                                                         $shortWords = $conf['short.'];
04241                                                         krsort($shortWords);
04242                                                         reset($shortWords);
04243                                                         while(list($key,$val)=each($shortWords))        {
04244                                                                 if (is_string($val))    {
04245                                                                         $data = str_replace($key, $val, $data);
04246                                                                 }
04247                                                         }
04248                                                 }
04249 
04250                                                         // stdWrap
04251                                                 if (is_array($conf['plainTextStdWrap.']))       {$data = $this->stdWrap($data,$conf['plainTextStdWrap.']);}
04252                                                         // userFunc
04253                                                 if ($conf['userFunc'])  {$data = $this->callUserFunction($conf['userFunc'], $conf['userFunc.'], $data);}
04254 
04255                                                         // Makelinks: (Before search-words as we need the links to be generated when searchwords go on...!)
04256                                                 if ($conf['makelinks']) {
04257                                                         $data = $this->http_makelinks($data,$conf['makelinks.']['http.']);
04258                                                         $data = $this->mailto_makelinks($data,$conf['makelinks.']['mailto.']);
04259                                                 }
04260 
04261                                                         // Search Words:
04262                                                 if ($GLOBALS['TSFE']->no_cache && $conf['sword'] && is_array($GLOBALS['TSFE']->sWordList) && $GLOBALS['TSFE']->sWordRegEx)      {
04263                                                         $newstring = '';
04264                                                         do {
04265                                                                 $pieces = split($GLOBALS['TSFE']->sWordRegEx,$data,2);
04266                                                                 $newstring.=$pieces[0];
04267                                                                 $match_len = strlen($data)-(strlen($pieces[0])+strlen($pieces[1]));
04268                                                                 if (strstr($pieces[0],'<') || strstr($pieces[0],'>'))   {
04269                                                                         $inTag = strrpos($pieces[0],'<') > strrpos($pieces[0],'>');             // Returns true, if a '<' is closer to the string-end than '>'. This is the case if we're INSIDE a tag (that could have been made by makelinks...) and we must secure, that the inside of a tag is not marked up.
04270                                                                 }
04271                                                                         // The searchword:
04272                                                                 $match = substr($data,strlen($pieces[0]),$match_len);
04273 
04274                                                                 if (trim($match) && strlen($match)>1 && !$inTag)        {
04275                                                                         $match = $this->wrap($match, $conf['sword']);
04276                                                                 }
04277                                                                         // Concatenate the Search Word again.
04278                                                                 $newstring.= $match;
04279                                                                 $data=$pieces[1];
04280                                                         } while ($pieces[1]);
04281                                                         $data = $newstring;
04282                                                 }
04283                                         }
04284                                         $contentAccum[$contentAccumP].=$data;
04285                                 }
04286                                 $inside = 1;
04287                         } else {
04288                                         // tags
04289                                 $len = strcspn(substr($theValue,$pointer),'>')+1;
04290                                 $data = substr($theValue,$pointer,$len);
04291 
04292                                 $tag = explode(' ',trim(substr($data,1,-1)),2);
04293                                 $tag[0]=strtolower($tag[0]);
04294                                 if (substr($tag[0],0,1)=='/')   {
04295                                         $tag[0]=substr($tag[0],1);
04296                                         $tag['out']=1;
04297                                 }
04298                                 if($conf['tags.'][$tag[0]])     {
04299                                         $treated=0;
04300                                         $stripNL = 0;
04301                                                 // in-tag
04302                                         if (!$currentTag && !$tag['out'])       {
04303                                                 $currentTag = $tag;             // $currentTag er lig med det tag (array!), man er igang med!
04304                                                 $contentAccumP++;
04305                                                 $treated=1;
04306                                         }
04307                                                 // out-tag
04308                                         if ($currentTag[0]==$tag[0] && $tag['out'])     {
04309                                                 $theName = $conf['tags.'][$tag[0]];
04310                                                 $theConf = $conf['tags.'][$tag[0].'.'];
04311                                                 $stripNL = ($theConf['stripNL'] ? 1 : 0);       // This flag indicates, that NL- (13-10-chars) should be stripped first and last.
04312                                                 $breakOut = ($theConf['breakoutTypoTagContent'] ? 1 : 0);       // This flag indicates, that this TypoTag section should NOT be included in the nonTypoTag content.
04313 
04314                                                 $this->parameters=Array();
04315                                                 if ($currentTag[1])     {
04316                                                         $params=t3lib_div::get_tag_attributes($currentTag[1]);
04317                                                         if (is_array($params))  {
04318                                                                 reset($params);
04319                                                                 while(list($option,$val)=each($params)) {
04320                                                                         $this->parameters[strtolower($option)]=$val;
04321                                                                 }
04322                                                         }
04323                                                 }
04324                                                 $this->parameters['allParams']=trim($currentTag[1]);
04325                                                 if ($stripNL)   {       // Removes NL in the beginning and end of the tag-content AND at the end of the currentTagBuffer. $stripNL depends on the configuration of the current tag
04326                                                         $contentAccum[$contentAccumP-1] = ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $contentAccum[$contentAccumP-1]);
04327                                                         $contentAccum[$contentAccumP] = ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $contentAccum[$contentAccumP]);
04328                                                         $contentAccum[$contentAccumP] = ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $contentAccum[$contentAccumP]);
04329                                                 }
04330                                                 $this->data[$this->currentValKey] = $contentAccum[$contentAccumP];
04331                                                 $newInput=$this->cObjGetSingle($theName,$theConf,'/parseFunc/.tags.'.$tag[0]);  // fetch the content object
04332 
04333                                                 $contentAccum[$contentAccumP]=$newInput;
04334                                                 $contentAccumP++;
04335 
04336                                                         // If the TypoTag section
04337                                                 if (!$breakOut) {
04338                                                         $contentAccum[$contentAccumP-2].=$contentAccum[$contentAccumP-1].$contentAccum[$contentAccumP];
04339                                                         unset($contentAccum[$contentAccumP]);
04340                                                         unset($contentAccum[$contentAccumP-1]);
04341                                                         $contentAccumP-=2;
04342                                                 }
04343 
04344                                                 unset($currentTag);
04345                                                 $treated=1;
04346                                         }
04347                                                 // other tags...
04348                                         if (!$treated)  {
04349                                                 $contentAccum[$contentAccumP].=$data;
04350                                         }
04351                                 } else {
04352                                                 // If a tag was not a typo tag, then it is just added to the content
04353                                         $stripNL = 0;
04354                                         if (t3lib_div::inList($allowTags,$tag[0]) || ($denyTags!='*' && !t3lib_div::inList($denyTags,$tag[0]))) {
04355                                                 $contentAccum[$contentAccumP].=$data;
04356                                         } else {
04357                                                 $contentAccum[$contentAccumP].=HTMLSpecialChars($data);
04358                                         }
04359                                 }
04360                                 $inside = 0;
04361                         }
04362                         $pointer+=$len;
04363                 } while($pointer<$totalLen);
04364 
04365                         // Parsing nonTypoTag content (all even keys):
04366                 reset($contentAccum);
04367                 for ($a=0;$a<count($contentAccum);$a++) {
04368                         if ($a%2 != 1)  {
04369                                         // stdWrap
04370                                 if (is_array($conf['nonTypoTagStdWrap.']))      {$contentAccum[$a] = $this->stdWrap($contentAccum[$a],$conf['nonTypoTagStdWrap.']);}
04371                                         // userFunc
04372                                 if ($conf['nonTypoTagUserFunc'])        {$contentAccum[$a] = $this->callUserFunction($conf['nonTypoTagUserFunc'], $conf['nonTypoTagUserFunc.'], $contentAccum[$a]);}
04373                         }
04374                 }
04375                 return implode('',$contentAccum);
04376         }
04377 
04387         function encaps_lineSplit($theValue, $conf)     {
04388                 $lParts = explode(chr(10),$theValue);
04389 
04390                 $encapTags = t3lib_div::trimExplode(',',strtolower($conf['encapsTagList']),1);
04391                 $nonWrappedTag = $conf['nonWrappedTag'];
04392                 $defaultAlign=trim($this->stdWrap($conf['defaultAlign'],$conf['defaultAlign.']));
04393 
04394                 if (!strcmp('',$theValue))      return '';
04395 
04396                 while(list($k,$l)=each($lParts))        {
04397                         $sameBeginEnd=0;
04398                         $l=trim($l);
04399                         $attrib=array();
04400                         $nWrapped=0;
04401                         $byPass=0;
04402                         if (substr($l,0,1)=='<' && substr($l,-1)=='>')  {
04403                                 $fwParts = explode('>',substr($l,1),2);
04404                                 $backParts = t3lib_div::revExplode('<', substr($fwParts[1],0,-1), 2);
04405                                 $attrib = t3lib_div::get_tag_attributes('<'.$fwParts[0].'>');
04406                                 list($tagName) = explode(' ',$fwParts[0]);
04407                                 $str_content = $backParts[0];
04408                                 $sameBeginEnd = (substr(strtolower($backParts[1]),1,strlen($tagName))==strtolower($tagName));
04409                         }
04410 
04411                         if ($sameBeginEnd && in_array(strtolower($tagName),$encapTags)) {
04412                                 $uTagName = strtoupper($tagName);
04413                                 $uTagName = strtoupper($conf['remapTag.'][$uTagName]?$conf['remapTag.'][$uTagName]:$uTagName);
04414                         } else {
04415                                 $uTagName = strtoupper($nonWrappedTag);
04416                                 $str_content = $lParts[$k];
04417                                 $nWrapped=1;
04418                                 $attrib=array();
04419                         }
04420 
04421                                 // Wrapping all inner-content:
04422                         if (is_array($conf['innerStdWrap_all.']))       {$str_content = $this->stdWrap($str_content,$conf['innerStdWrap_all.']);}
04423 
04424                         if ($uTagName)  {
04425                                         // Setting common attributes
04426                                 if (is_array($conf['addAttributes.'][$uTagName.'.']))   {
04427                                         reset($conf['addAttributes.'][$uTagName.'.']);
04428                                         while(list($kk,$vv)=each($conf['addAttributes.'][$uTagName.'.']))       {
04429                                                 if (!is_array($vv))     {
04430                                                         if ((string)$conf['addAttributes.'][$uTagName.'.'][$kk.'.']['setOnly']=='blank')        {
04431                                                                 if (!strcmp($attrib[$kk],''))   $attrib[$kk]=$vv;
04432                                                         } elseif ((string)$conf['addAttributes.'][$uTagName.'.'][$kk.'.']['setOnly']=='exists') {
04433                                                                 if (!isset($attrib[$kk]))       $attrib[$kk]=$vv;
04434                                                         } else {
04435                                                                 $attrib[$kk]=$vv;
04436                                                         }
04437                                                 }
04438                                         }
04439                                 }
04440                                         // Wrapping all inner-content:
04441                                 if (is_array($conf['encapsLinesStdWrap.'][$uTagName.'.']))      {$str_content = $this->stdWrap($str_content,$conf['encapsLinesStdWrap.'][$uTagName.'.']);}
04442                                         // Default align
04443                                 if (!$attrib['align'] && $defaultAlign) $attrib['align']=$defaultAlign;
04444 
04445                                 $params = t3lib_div::implodeAttributes($attrib,1);
04446                                 if ($conf['removeWrapping'])    {
04447                                         $str_content=$str_content;
04448                                 } else {
04449                                         $str_content='<'.strtolower($uTagName).(trim($params)?' '.trim($params):'').'>'.$str_content.'</'.strtolower($uTagName).'>';
04450                                 }
04451                         }
04452 
04453                         if ($nWrapped && $conf['wrapNonWrappedLines'])  {$str_content = $this->wrap($str_content,$conf['wrapNonWrappedLines']);}
04454                         $lParts[$k] = $str_content;
04455                 }
04456 
04457                 return implode(chr(10),$lParts);
04458         }
04459 
04470         function http_makelinks($data,$conf)    {
04471                 $aTagParams = $this->getATagParams($conf);
04472                 $textpieces = explode('http://', $data);
04473                 $pieces = count($textpieces);
04474                 $textstr = $textpieces[0];
04475                 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
04476                 for($i=1; $i<$pieces; $i++)     {
04477                         $len=strcspn($textpieces[$i],chr(32).chr(9).chr(13).chr(10));
04478                         if (trim(substr($textstr,-1))=='' && $len)      {
04479 
04480                                 $lastChar=substr($textpieces[$i],$len-1,1);
04481                                 if (!ereg('[A-Za-z0-9\/#_-]',$lastChar)) {$len--;}              // Included '\/' 3/12
04482 
04483                                 $parts[0]=substr($textpieces[$i],0,$len);
04484                                 $parts[1]=substr($textpieces[$i],$len);
04485 
04486                                 $keep=$conf['keep'];
04487                                 $linkParts=parse_url('http://'.$parts[0]);
04488                                 $linktxt='';
04489                                 if (strstr($keep,'scheme'))     {
04490                                         $linktxt='http://';
04491                                 }
04492                                 $linktxt.= $linkParts['host'];
04493                                 if (strstr($keep,'path'))       {
04494                                         $linktxt.= $linkParts['path'];
04495                                         if (strstr($keep,'query') && $linkParts['query'])       {               // added $linkParts['query'] 3/12
04496                                                 $linktxt.= '?'.$linkParts['query'];
04497                                         } elseif ($linkParts['path']=='/')      {  // If query is NOT added and the path is '/' then remove the slash ('/')   (added 3/12)
04498                                                 $linktxt=substr($linktxt,0,-1);
04499                                         }
04500                                 }
04501                                 $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
04502                                 if ($GLOBALS['TSFE']->config['config']['jumpurl_enable'])       {
04503                                         $res = '<a'.
04504                                                         ' href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode('http://'.$parts[0]).$GLOBALS['TSFE']->getMethodUrlIdToken).'"'.
04505                                                         ($target ? ' target="'.$target.'"' : '').
04506                                                         $aTagParams.
04507                                                         '>';
04508                                 } else {
04509                                         $res = '<a'.
04510                                                         ' href="http://'.htmlspecialchars($parts[0]).'"'.
04511                                                         ($target ? ' target="'.$target.'"' : '').
04512                                                         $aTagParams.
04513                                                         '>';
04514                                 }
04515                                 if ($conf['ATagBeforeWrap'])    {
04516                                         $res= $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
04517                                 } else {
04518                                         $res= $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
04519                                 }
04520                                 $textstr.=$res.$parts[1];
04521                         } else {
04522                                 $textstr.='http://'.$textpieces[$i];
04523                         }
04524                 }
04525                 return $textstr;
04526         }
04527 
04537         function mailto_makelinks($data,$conf)  {
04538                 // http-split
04539                 $aTagParams = $this->getATagParams($conf);
04540                 $textpieces = explode('mailto:', $data);
04541                 $pieces = count($textpieces);
04542                 $textstr = $textpieces[0];
04543                 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
04544                 for($i=1; $i<$pieces; $i++)     {
04545                         $len = strcspn($textpieces[$i],chr(32).chr(9).chr(13).chr(10));
04546                         if (trim(substr($textstr,-1))=='' && $len)      {
04547                                 $lastChar = substr($textpieces[$i],$len-1,1);
04548                                 if (!ereg('[A-Za-z0-9]',$lastChar)) {$len--;}
04549 
04550                                 $parts[0] = substr($textpieces[$i],0,$len);
04551                                 $parts[1] = substr($textpieces[$i],$len);
04552                                 $linktxt = ereg_replace('\?.*','',$parts[0]);
04553                                 list($mailToUrl,$linktxt) = $this->getMailTo($parts[0],$linktxt,$initP);
04554                                 $mailToUrl = $GLOBALS['TSFE']->spamProtectEmailAddresses === 'ascii'?$mailToUrl:htmlspecialchars($mailToUrl);
04555                                 $res = '<a href="'.$mailToUrl.'"'.$aTagParams.'>';
04556                                 if ($conf['ATagBeforeWrap'])    {
04557                                         $res= $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
04558                                 } else {
04559                                         $res= $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
04560                                 }
04561                                 $textstr.=$res.$parts[1];
04562                         } else {
04563                                 $textstr.='mailto:'.$textpieces[$i];
04564                         }
04565                 }
04566                 return $textstr;
04567         }
04568 
04580         function getImgResource($file,$fileArray)       {
04581                 if (is_array($fileArray))       {
04582                         switch($file)   {
04583                                 case 'GIFBUILDER':
04584                                         $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04585                                         $gifCreator->init();
04586                                         $theImage='';
04587                                         if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'])        {
04588                                                 $gifCreator->start($fileArray,$this->data);
04589                                                 $theImage = $gifCreator->gifBuild();
04590                                         }
04591                                         return $gifCreator->getImageDimensions($theImage);
04592                                 break;
04593                                 default:
04594                                         if ($fileArray['import.'])      {
04595                                                 $ifile = $this->stdWrap('',$fileArray['import.']);
04596                                                 if ($ifile)     {$file = $fileArray['import'].$ifile;}
04597                                         }
04598                                         $theImage = $GLOBALS['TSFE']->tmpl->getFileName($file);
04599                                         if ($theImage)  {
04600                                                 $fileArray['width']= $this->stdWrap($fileArray['width'],$fileArray['width.']);
04601                                                 $fileArray['height']= $this->stdWrap($fileArray['height'],$fileArray['height.']);
04602                                                 $fileArray['ext']= $this->stdWrap($fileArray['ext'],$fileArray['ext.']);
04603                                                 $fileArray['maxW']= intval($this->stdWrap($fileArray['maxW'],$fileArray['maxW.']));
04604                                                 $fileArray['maxH']= intval($this->stdWrap($fileArray['maxH'],$fileArray['maxH.']));
04605                                                 $fileArray['minW']= intval($fileArray['minW']);
04606                                                 $fileArray['minH']= intval($fileArray['minH']);
04607                                                 $maskArray=     $fileArray['m.'];
04608                                                 $maskImages=array();
04609                                                 if (is_array($fileArray['m.'])) {       // Must render mask images and include in hash-calculating - else we cannot be sure the filename is unique for the setup!
04610                                                         $maskImages['m_mask'] = $this->getImgResource($maskArray['mask'],$maskArray['mask.']);
04611                                                         $maskImages['m_bgImg'] = $this->getImgResource($maskArray['bgImg'],$maskArray['bgImg.']);
04612                                                         $maskImages['m_bottomImg'] = $this->getImgResource($maskArray['bottomImg'],$maskArray['bottomImg.']);
04613                                                         $maskImages['m_bottomImg_mask'] = $this->getImgResource($maskArray['bottomImg_mask'],$maskArray['bottomImg_mask.']);
04614                                                 }
04615                                                 $hash = t3lib_div::shortMD5($theImage.serialize($fileArray).serialize($maskImages));
04616                                                 if (!isset($GLOBALS['TSFE']->tmpl->fileCache[$hash]))   {
04617                                                         $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04618                                                         $gifCreator->init();
04619 
04620                                                         if ($GLOBALS['TSFE']->config['config']['meaningfulTempFilePrefix'])     {
04621                                                                 $gifCreator->filenamePrefix = $GLOBALS['TSFE']->fileNameASCIIPrefix(ereg_replace('\.[[:alnum:]]+$','',basename($theImage)),intval($GLOBALS['TSFE']->config['config']['meaningfulTempFilePrefix']),'_');
04622                                                         }
04623 
04624                                                         if ($fileArray['sample'])       {
04625                                                                 $gifCreator->scalecmd = '-sample';
04626                                                                 $GLOBALS['TT']->setTSlogMessage('Sample option: Images are scaled with -sample.');
04627                                                         }
04628                                                         if ($fileArray['alternativeTempPath'] && t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['FE']['allowedTempPaths'],$fileArray['alternativeTempPath']))    {
04629                                                                 $gifCreator->tempPath = $fileArray['alternativeTempPath'];
04630                                                                 $GLOBALS['TT']->setTSlogMessage('Set alternativeTempPath: '.$fileArray['alternativeTempPath']);
04631                                                         }
04632 
04633                                                         if (!trim($fileArray['ext'])){$fileArray['ext']='web';}
04634                                                         $options = Array();
04635                                                         if ($fileArray['maxW']) {$options['maxW']=$fileArray['maxW'];}
04636                                                         if ($fileArray['maxH']) {$options['maxH']=$fileArray['maxH'];}
04637                                                         if ($fileArray['minW']) {$options['minW']=$fileArray['minW'];}
04638                                                         if ($fileArray['minH']) {$options['minH']=$fileArray['minH'];}
04639 
04640                                                                 // checks to see if m (the mask array) is defined
04641                                                         if (is_array($maskArray) && $GLOBALS['TYPO3_CONF_VARS']['GFX']['im'])   {
04642                                                                         // Filename:
04643                                                                 $fI = t3lib_div::split_fileref($theImage);
04644                                                                 $imgExt = (strtolower($fI['fileext'])==$gifCreator->gifExtension ? $gifCreator->gifExtension : 'jpg');
04645                                                                 $dest = $gifCreator->tempPath.$hash.'.'.$imgExt;
04646                                                                 if (!@file_exists($dest))       {               // Generate!
04647                                                                         $m_mask= $maskImages['m_mask'];
04648                                                                         $m_bgImg = $maskImages['m_bgImg'];
04649                                                                         if ($m_mask && $m_bgImg)        {
04650                                                                                 $negate = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_negate_mask'] ? ' -negate' : '';
04651 
04652                                                                                 $temp_ext='png';
04653                                                                                 if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_mask_temp_ext_gif']) {               // If ImageMagick version 5+
04654                                                                                         $temp_ext=$gifCreator->gifExtension;
04655                                                                                 }
04656 
04657                                                                                 $tempFileInfo = $gifCreator->imageMagickConvert($theImage,$temp_ext,$fileArray['width'],$fileArray['height'],$fileArray['params'],$fileArray['frame'],$options);
04658                                                                                 if (is_array($tempFileInfo))    {
04659                                                                                         $m_bottomImg = $maskImages['m_bottomImg'];
04660                                                                                         if ($m_bottomImg)       {
04661                                                                                                 $m_bottomImg_mask = $maskImages['m_bottomImg_mask'];
04662                                                                                         }
04663                                                                                                 //      Scaling:        ****
04664                                                                                         $tempScale=array();
04665                                                                                         $command = '-geometry '.$tempFileInfo[0].'x'.$tempFileInfo[1].'!';
04666                                                                                         $tmpStr = $gifCreator->randomName();
04667 
04668                                                                                                 //      m_mask
04669                                                                                         $tempScale['m_mask']=$tmpStr.'_mask.'.$temp_ext;
04670                                                                                         $gifCreator->imageMagickExec($m_mask[3],$tempScale['m_mask'],$command.$negate);
04671                                                                                                 //      m_bgImg
04672                                                                                         $tempScale['m_bgImg']=$tmpStr.'_bgImg.'.trim($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_mask_temp_ext_noloss']);
04673                                                                                         $gifCreator->imageMagickExec($m_bgImg[3],$tempScale['m_bgImg'],$command);
04674 
04675                                                                                                 //      m_bottomImg / m_bottomImg_mask
04676                                                                                         if ($m_bottomImg && $m_bottomImg_mask)  {
04677                                                                                                 $tempScale['m_bottomImg']=$tmpStr.'_bottomImg.'.$temp_ext;
04678                                                                                                 $gifCreator->imageMagickExec($m_bottomImg[3],$tempScale['m_bottomImg'],$command);
04679                                                                                                 $tempScale['m_bottomImg_mask']=$tmpStr.'_bottomImg_mask.'.$temp_ext;
04680                                                                                                 $gifCreator->imageMagickExec($m_bottomImg_mask[3],$tempScale['m_bottomImg_mask'],$command.$negate);
04681 
04682                                                                                                         // BEGIN combining:
04683                                                                                                         // The image onto the background
04684                                                                                                 $gifCreator->combineExec($tempScale['m_bgImg'],$tempScale['m_bottomImg'],$tempScale['m_bottomImg_mask'],$tempScale['m_bgImg']);
04685                                                                                         }
04686                                                                                                 // The image onto the background
04687                                                                                         $gifCreator->combineExec($tempScale['m_bgImg'],$tempFileInfo[3],$tempScale['m_mask'],$dest);
04688                                                                                                 // Unlink the temp-images...
04689                                                                                         reset($tempScale);
04690                                                                                         while(list(,$file)=each($tempScale))    {
04691                                                                                                 if (@is_file($file))    {
04692                                                                                                         unlink($file);
04693                                                                                                 }
04694                                                                                         }
04695                                                                                                 //      t3lib_div::print_array($GLOBALS['TSFE']->tmpl->fileCache[$hash]);
04696                                                                                 }
04697                                                                         }
04698                                                                 }
04699                                                                         // Finish off
04700                                                                 if (($fileArray['reduceColors'] || ($imgExt=='png' && !$gifCreateor->png_truecolor)) && is_file($dest)) {
04701                                                                         $reduced = $gifCreator->IMreduceColors($dest, t3lib_div::intInRange($fileArray['reduceColors'], 256, $gifCreator->truecolorColors, 256));
04702                                                                         if (is_file($reduced))  {
04703                                                                                 unlink($dest);
04704                                                                                 rename($reduced, $dest);
04705                                                                         }
04706                                                                 }
04707                                                                 $GLOBALS['TSFE']->tmpl->fileCache[$hash]= $gifCreator->getImageDimensions($dest);
04708                                                         } else {                // Normal situation:
04709                                                                 $GLOBALS['TSFE']->tmpl->fileCache[$hash]= $gifCreator->imageMagickConvert($theImage,$fileArray['ext'],$fileArray['width'],$fileArray['height'],$fileArray['params'],$fileArray['frame'],$options);
04710                                                                 if (($fileArray['reduceColors'] || ($imgExt=='png' && !$gifCreateor->png_truecolor)) && is_file($GLOBALS['TSFE']->tmpl->fileCache[$hash][3]))   {
04711                                                                         $reduced = $gifCreator->IMreduceColors($GLOBALS['TSFE']->tmpl->fileCache[$hash][3], t3lib_div::intInRange($fileArray['reduceColors'], 256, $gifCreator->truecolorColors, 256));
04712                                                                         if (is_file($reduced))  {
04713                                                                                 unlink($GLOBALS['TSFE']->tmpl->fileCache[$hash][3]);
04714                                                                                 rename($reduced, $GLOBALS['TSFE']->tmpl->fileCache[$hash][3]);
04715                                                                         }
04716                                                                 }
04717                                                         }
04718                                                         $GLOBALS['TSFE']->tmpl->fileCache[$hash]['origFile'] = $theImage;
04719                                                         $GLOBALS['TSFE']->tmpl->fileCache[$hash]['origFile_mtime'] = @filemtime($theImage);     // This is needed by tslib_gifbuilder, ln 100ff in order for the setup-array to create a unique filename hash.
04720                                                 }
04721                                                 return $GLOBALS['TSFE']->tmpl->fileCache[$hash];
04722                                         }
04723 
04724                                 break;
04725                         }
04726                 }
04727                 $theImage = $GLOBALS['TSFE']->tmpl->getFileName($file);
04728                 if ($theImage)  {
04729                         $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04730                         $gifCreator->init();
04731                         $info= $gifCreator->imageMagickConvert($theImage,'WEB','','','','','');
04732                         $info['origFile'] = $theImage;
04733                         $info['origFile_mtime'] = @filemtime($theImage);        // This is needed by tslib_gifbuilder, ln 100ff in order for the setup-array to create a unique filename hash.
04734                         return $info;
04735                 }
04736         }
04737 
04738 
04739 
04740 
04741 
04742 
04743 
04744 
04745 
04746 
04747 
04748 
04749 
04750 
04751 
04752 
04753 
04754 
04755 
04756 
04757 
04758 
04759         /***********************************************
04760          *
04761          * Data retrieval etc.
04762          *
04763          ***********************************************/
04764 
04765 
04772         function getFieldVal($field)    {
04773                 if (!strstr($field,'//'))       {
04774                         return $this->data[trim($field)];
04775                 } else {
04776                         $sections = t3lib_div::trimExplode('//',$field,1);
04777                         while (list(,$k)=each($sections)) {
04778                                 if (strcmp($this->data[$k],'')) return $this->data[$k];
04779                         }
04780                 }
04781         }
04782 
04792         function getData($string,$fieldArray)   {
04793                 if (!is_array($fieldArray))     {
04794                         $fieldArray=$GLOBALS['TSFE']->page;
04795                 }
04796                 $retVal = '';
04797                 $sections = explode('//',$string);
04798 
04799                 while (!$retVal AND list($secKey, $secVal)=each($sections)) {
04800                         $parts = explode(':',$secVal,2);
04801                         $key = trim($parts[1]);
04802                         if ((string)$key!='')   {
04803                                 switch(strtolower(trim($parts[0])))     {
04804                                         case 'gpvar':
04805                                                 list($firstKey, $rest) = explode('|', $key, 2);
04806                                                 if (strlen(trim($firstKey)))    {
04807                                                         $retVal = t3lib_div::_GP(trim($firstKey));
04808                                                                 // Look for deeper levels:
04809                                                         if (strlen(trim($rest)))        {
04810                                                                 $retVal = is_array($retVal) ? $this->getGlobal($rest, $retVal) : '';
04811                                                         }
04812                                                                 // Check that output is not an array:
04813                                                         if (is_array($retVal))  $retVal = '';
04814                                                 }
04815                                         break;
04816                                         case 'tsfe':
04817                                                 $retVal = $this->getGlobal ('TSFE|'.$key);
04818                                         break;
04819                                         case 'getenv':
04820                                                 $retVal = getenv($key);
04821                                         break;
04822                                         case 'getindpenv':
04823                                                 $retVal = t3lib_div::getIndpEnv($key);
04824                                         break;
04825                                         case 'field':
04826                                                 $retVal = $fieldArray[$key];
04827                                         break;
04828                                         case 'parameters':
04829                                                 $retVal = $this->parameters[$key];
04830                                         break;
04831                                         case 'register':
04832                                                 $retVal = $GLOBALS['TSFE']->register[$key];
04833                                         break;
04834                                         case 'global':
04835                                                 $retVal = $this->getGlobal($key);
04836                                         break;
04837                                         case 'leveltitle':
04838                                                 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04839                                                 $retVal = $this->rootLineValue($nkey,'title',stristr($key,'slide'));
04840                                         break;
04841                                         case 'levelmedia':
04842                                                 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04843                                                 $retVal = $this->rootLineValue($nkey,'media',stristr($key,'slide'));
04844                                         break;
04845                                         case 'leveluid':
04846                                                 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04847                                                 $retVal = $this->rootLineValue($nkey,'uid',stristr($key,'slide'));
04848                                         break;
04849                                         case 'levelfield':
04850                                                 $keyP = t3lib_div::trimExplode(',',$key);
04851                                                 $nkey = $this->getKey($keyP[0],$GLOBALS['TSFE']->tmpl->rootLine);
04852                                                 $retVal = $this->rootLineValue($nkey,$keyP[1],strtolower($keyP[2])=='slide');
04853                                         break;
04854                                         case 'fullrootline':
04855                                                 $keyP = t3lib_div::trimExplode(',',$key);
04856                                                 $fullKey = intval($keyP[0])-count($GLOBALS['TSFE']->tmpl->rootLine)+count($GLOBALS['TSFE']->rootLine);
04857                                                 if ($fullKey>=0)        {
04858                                                         $retVal = $this->rootLineValue($fullKey,$keyP[1],stristr($keyP[2],'slide'),$GLOBALS['TSFE']->rootLine);
04859                                                 }
04860                                         break;
04861                                         case 'date':
04862                                                 if (!$key) {$key = 'd/m Y';}
04863                                                 $retVal = date($key, time());
04864                                         break;
04865                                         case 'page':
04866                                                 $retVal = $GLOBALS['TSFE']->page[$key];
04867                                         break;
04868                                         case 'current':
04869                                                 $retVal = $this->data[$this->currentValKey];
04870                                         break;
04871                                         case 'level':
04872                                                 $retVal = count($GLOBALS['TSFE']->tmpl->rootLine)-1;
04873                                         break;
04874                                         case 'db':
04875                                                 $selectParts = t3lib_div::trimExplode(':',$key);
04876                                                 $db_rec = $GLOBALS['TSFE']->sys_page->getRawRecord($selectParts[0],$selectParts[1]);
04877                                                 if (is_array($db_rec) && $selectParts[2])       {$retVal = $db_rec[$selectParts[2]];}
04878                                         break;
04879                                         case 'lll':
04880                                                 $retVal = $GLOBALS['TSFE']->sL('LLL:'.$key);
04881                                         break;
04882                                         case 'path':
04883                                                 $retVal = $GLOBALS['TSFE']->tmpl->getFileName($key);
04884                                         break;
04885                                         case 'cobj':
04886                                                 switch((string)$key)    {
04887                                                         case 'parentRecordNumber':
04888                                                                 $retVal = $this->parentRecordNumber;
04889                                                         break;
04890                                                 }
04891                                         break;
04892                                         case 'debug':
04893                                                 switch((string)$key)    {
04894                                                         case 'rootLine':
04895                                                                 $retVal = t3lib_div::view_array($GLOBALS['TSFE']->tmpl->rootLine);
04896                                                         break;
04897                                                         case 'fullRootLine':
04898                                                                 $retVal = t3lib_div::view_array($GLOBALS['TSFE']->rootLine);
04899                                                         break;
04900                                                         case 'data':
04901                                                                 $retVal = t3lib_div::view_array($this->data);
04902                                                         break;
04903                                                 }
04904                                         break;
04905                                 }
04906                         }
04907                 }
04908                 return $retVal;
04909         }
04910 
04922         function rootLineValue($key,$field,$slideBack=0,$altRootLine='')        {
04923                 $rootLine = is_array($altRootLine) ? $altRootLine : $GLOBALS['TSFE']->tmpl->rootLine;
04924                 if (!$slideBack)        {
04925                         return $rootLine[$key][$field];
04926                 } else {
04927                         for ($a=$key;$a>=0;$a--)        {
04928                                 $val = $rootLine[$a][$field];
04929                                 if ($val)       {return $val;}
04930                         }
04931                 }
04932         }
04933 
04944         function getGlobal($var, $source=NULL)  {
04945                 $vars = explode('|', $var);
04946                 $c = count($vars);
04947                 $k = trim($vars[0]);
04948                 $theVar = isset($source) ? $source[$k] : $GLOBALS[$k];
04949 
04950                 for ($a=1;$a<$c;$a++)   {
04951                         if (!isset($theVar))    { break; }
04952 
04953                         $key = trim($vars[$a]);
04954                         if (is_object($theVar)) {
04955                                 $theVar = $theVar->$key;
04956                         } elseif (is_array($theVar))    {
04957                                 $theVar = $theVar[$key];
04958                         } else {
04959                                 return '';
04960                         }
04961                 }
04962 
04963                 if (!is_array($theVar) && !is_object($theVar))  {
04964                         return $theVar;
04965                 } else {
04966                         return '';
04967                 }
04968         }
04969 
04980         function getKey($key,$arr)      {
04981                 $key = intval($key);
04982                 if (is_array($arr))     {
04983                         if ($key < 0)   {
04984                                 $key = count($arr)+$key;
04985                         }
04986                         if ($key < 0)   {
04987                                 $key=0;
04988                         }
04989                 }
04990                 return $key;
04991         }
04992 
04993 
05003         function TCAlookup($inputValue,$conf)   {
05004                 global $TCA;
05005 
05006                 $table = $conf['table'];
05007                 $field = $conf['field'];
05008                 $delimiter = $conf['delimiter']?$conf['delimiter']:' ,';
05009 
05010                 $GLOBALS['TSFE']->includeTCA();
05011 
05012                 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$field]) && is_array($TCA[$table]['columns'][$field]['config']['items'])) {
05013                         $values = t3lib_div::trimExplode(',',$inputValue);
05014                         foreach ($values as $value)     {
05015                                         // Traverse the items-array...
05016                                 reset($TCA[$table]['columns'][$field]['config']['items']);
05017                                 while(list($key,$item)=each($TCA[$table]['columns'][$field]['config']['items']))        {
05018                                                 // ... and return the first found label where the value was equal to $key
05019                                         if (!strcmp($item[1],trim($value)))     $output[] = $GLOBALS['TSFE']->sL($item[0]);
05020                                 }
05021                         }
05022                         $returnValue = implode($delimiter,$output);
05023                 } else {
05024                         $returnValue = $inputValue;
05025                 }
05026                 return $returnValue;
05027         }
05028 
05029 
05030 
05031 
05032 
05033 
05034 
05035 
05036 
05037 
05038 
05039 
05040 
05041 
05042 
05043         /***********************************************
05044          *
05045          * Link functions (typolink)
05046          *
05047          ***********************************************/
05048 
05049 
05063         function typoLink($linktxt, $conf)      {
05064                 $finalTagParts = array();
05065                 $finalTagParts['aTagParams'] = $this->getATagParams($conf);
05066 
05067                 $link_param = trim($this->stdWrap($conf['parameter'],$conf['parameter.']));
05068 
05069                 $sectionMark = trim($this->stdWrap($conf['section'],$conf['section.']));
05070                 $sectionMark = $sectionMark ? (t3lib_div::testInt($sectionMark)?'#c':'#').$sectionMark : '';
05071                 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
05072                 $this->lastTypoLinkUrl = '';
05073                 $this->lastTypoLinkTarget = '';
05074                 if ($link_param)        {
05075                         $link_paramA = t3lib_div::unQuoteFilenames($link_param,true);
05076                         $link_param = trim($link_paramA[0]);    // Link parameter value
05077                         $linkClass = trim($link_paramA[2]);             // Link class
05078                         if ($linkClass=='-')    $linkClass = '';        // The '-' character means 'no class'. Necessary in order to specify a title as fourth parameter without setting the target or class!
05079                         $forceTarget = trim($link_paramA[1]);   // Target value
05080                         $forceTitle = trim($link_paramA[3]);    // Title value
05081                         if ($forceTarget=='-')  $forceTarget = '';      // The '-' character means 'no target'. Necessary in order to specify a class as third parameter without setting the target!
05082                                 // Check, if the target is coded as a JS open window link:
05083                         $JSwindowParts = array();
05084                         $JSwindowParams = '';
05085                         $onClick = '';
05086                         if ($forceTarget && ereg('^([0-9]+)x([0-9]+)(:(.*)|.*)$',$forceTarget,$JSwindowParts))  {
05087                                         // Take all pre-configured and inserted parameters and compile parameter list, including width+height:
05088                                 $JSwindow_tempParamsArr = t3lib_div::trimExplode(',',strtolower($conf['JSwindow_params'].','.$JSwindowParts[4]),1);
05089                                 $JSwindow_paramsArr=array();
05090                                 foreach($JSwindow_tempParamsArr as $JSv)        {
05091                                         list($JSp,$JSv) = explode('=',$JSv);
05092                                         $JSwindow_paramsArr[$JSp]=$JSp.'='.$JSv;
05093                                 }
05094                                         // Add width/height:
05095                                 $JSwindow_paramsArr['width']='width='.$JSwindowParts[1];
05096                                 $JSwindow_paramsArr['height']='height='.$JSwindowParts[2];
05097                                         // Imploding into string:
05098                                 $JSwindowParams = implode(',',$JSwindow_paramsArr);
05099                                 $forceTarget = '';      // Resetting the target since we will use onClick.
05100                         }
05101 
05102                                 // Internal target:
05103                         $target = isset($conf['target']) ? $conf['target'] : $GLOBALS['TSFE']->intTarget;
05104                         if ($conf['target.'])   {$target=$this->stdWrap($target, $conf['target.']);}
05105 
05106                                 // Title tag
05107                         $title = $conf['title'];
05108                         if ($conf['title.'])    {$title=$this->stdWrap($title, $conf['title.']);}
05109 
05110                                 // Parse URL:
05111                         $pU = parse_url($link_param);
05112 
05113                                 // Detecting kind of link:
05114                         if(strstr($link_param,'@') && (!$pU['scheme'] || $pU['scheme']=='mailto'))      {               // If it's a mail address:
05115                                 $link_param = eregi_replace('^mailto:','',$link_param);
05116                                 list($this->lastTypoLinkUrl,$linktxt) = $this->getMailTo($link_param,$linktxt,$initP);
05117                                 $finalTagParts['url']=$this->lastTypoLinkUrl;
05118                                 $finalTagParts['TYPE']='mailto';
05119                         } else {
05120                                 $isLocalFile=0;
05121                                 $fileChar=intval(strpos($link_param, '/'));
05122                                 $urlChar=intval(strpos($link_param, '.'));
05123 
05124                                         // Detects if a file is found in site-root (or is a 'virtual' simulateStaticDocument file!) and if so it will be treated like a normal file.
05125                                 list($rootFileDat) = explode('?',rawurldecode($link_param));
05126                                 $containsSlash = strstr($rootFileDat,'/');
05127                                 $rFD_fI = pathinfo($rootFileDat);
05128                                 if (trim($rootFileDat) && !$containsSlash && (@is_file(PATH_site.$rootFileDat) || t3lib_div::inList('php,html,htm',strtolower($rFD_fI['extension']))))  {
05129                                         $isLocalFile = 1;
05130                                 } elseif ($containsSlash)       {
05131                                         $isLocalFile = 2;               // Adding this so realurl directories are linked right (non-existing).
05132                                 }
05133 
05134                                 if($pU['scheme'] || ($isLocalFile!=1 && $urlChar && (!$containsSlash || $urlChar<$fileChar)))   {       // url (external): If doubleSlash or if a '.' comes before a '/'.
05135                                         $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
05136                                         if ($conf['extTarget.'])        {$target = $this->stdWrap($target, $conf['extTarget.']);}
05137                                         if ($forceTarget)       {$target=$forceTarget;}
05138                                         if ($linktxt=='') $linktxt = $link_param;
05139                                         if (!$pU['scheme'])     {$scheme='http://';} else {$scheme='';}
05140                                         if ($GLOBALS['TSFE']->config['config']['jumpurl_enable'])       {
05141                                                 $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($scheme.$link_param).$GLOBALS['TSFE']->getMethodUrlIdToken;
05142                                         } else {
05143                                                 $this->lastTypoLinkUrl = $scheme.$link_param;
05144                                         }
05145                                         $this->lastTypoLinkTarget = $target;
05146                                         $finalTagParts['url']=$this->lastTypoLinkUrl;
05147                                         $finalTagParts['targetParams'] = $target ? ' target="'.$target.'"' : '';
05148                                         $finalTagParts['TYPE']='url';
05149                                 } elseif ($containsSlash || $isLocalFile)       {       // file (internal)
05150                                         $splitLinkParam = explode('?', $link_param);
05151                                         if (@file_exists(rawurldecode($splitLinkParam[0])) || $isLocalFile)     {
05152                                                 if ($linktxt=='') $linktxt = rawurldecode($link_param);
05153                                                 if ($GLOBALS['TSFE']->config['config']['jumpurl_enable'])       {
05154                                                         $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($link_param).$GLOBALS['TSFE']->getMethodUrlIdToken;
05155                                                 } else {
05156                                                         $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$link_param;
05157                                                 }
05158                                                 if ($forceTarget)       {$target=$forceTarget;}
05159                                                 $this->lastTypoLinkTarget = $target;
05160 
05161                                                 $finalTagParts['url'] = $this->lastTypoLinkUrl;
05162                                                 $finalTagParts['targetParams'] = $target ? ' target="'.$target.'"' : '';
05163                                                 $finalTagParts['TYPE'] = 'file';
05164                                         } else {
05165                                                 $GLOBALS['TT']->setTSlogMessage("typolink(): File '".$splitLinkParam[0]."' did not exist, so '".$linktxt."' was not linked.",1);
05166                                                 return $linktxt;
05167                                         }
05168                                 } else {        // integer or alias (alias is without slashes or periods or commas, that is 'nospace,alphanum_x,lower,unique' according to definition in $TCA!)
05169                                         if ($conf['no_cache.']) $conf['no_cache']=$this->stdWrap($conf['no_cache'], $conf['no_cache.']);
05170                                         $link_params_parts=explode('#',$link_param);
05171                                         $link_param = trim($link_params_parts[0]);              // Link-data del
05172                                         if (!strcmp($link_param,''))    {$link_param=$GLOBALS['TSFE']->id;}     // If no id or alias is given
05173                                         if ($link_params_parts[1] && !$sectionMark)     {
05174                                                 $sectionMark = trim($link_params_parts[1]);
05175                                                 $sectionMark = (t3lib_div::testInt($sectionMark)?'#c':'#').$sectionMark;
05176                                         }
05177                                                 // Splitting the parameter by ',' and if the array counts more than 1 element it's a id/type/? pair
05178                                         unset($theTypeP);
05179                                         $pairParts = t3lib_div::trimExplode(',',$link_param);
05180                                         if (count($pairParts)>1)        {
05181                                                 $link_param = $pairParts[0];
05182                                                 $theTypeP = $pairParts[1];              // Overruling 'type'
05183                                         }
05184                                                 // Checking if the id-parameter is an alias.
05185                                         if (!t3lib_div::testInt($link_param))   {
05186                                                 $link_param = $GLOBALS['TSFE']->sys_page->getPageIdFromAlias($link_param);
05187                                         }
05188 
05189                                                 // Looking up the page record to verify its existence:
05190                                         $disableGroupAccessCheck = $GLOBALS['TSFE']->config['config']['typolinkLinkAccessRestrictedPages'] ? TRUE : FALSE;
05191                                         $page = $GLOBALS['TSFE']->sys_page->getPage($link_param,$disableGroupAccessCheck);
05192 
05193                                         if (count($page))       {
05194                                                         // MointPoints, look for closest MPvar:
05195                                                 $MPvarAcc = array();
05196                                                 if (!$GLOBALS['TSFE']->config['config']['MP_disableTypolinkClosestMPvalue'])    {
05197                                                         $temp_MP = $this->getClosestMPvalueForPage($page['uid'],TRUE);
05198                                                         if ($temp_MP)   $MPvarAcc['closest'] = $temp_MP;
05199                                                 }
05200                                                         // Look for overlay Mount Point:
05201                                                 $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($page['uid'], $page);
05202                                                 if (is_array($mount_info) && $mount_info['overlay'])    {
05203                                                         $page = $GLOBALS['TSFE']->sys_page->getPage($mount_info['mount_pid'],$disableGroupAccessCheck);
05204                                                         if (!count($page))      {
05205                                                                 $GLOBALS['TT']->setTSlogMessage("typolink(): Mount point '".$mount_info['mount_pid']."' was not available, so '".$linktxt."' was not linked.",1);
05206                                                                 return $linktxt;
05207                                                         }
05208                                                         $MPvarAcc['re-map'] = $mount_info['MPvar'];
05209                                                 }
05210 
05211                                                         // Setting title if blank value to link:
05212                                                 if ($linktxt=='') $linktxt = $page['title'];
05213 
05214                                                         // Query Params:
05215                                                 $addQueryParams = $conf['addQueryString'] ? $this->getQueryArguments($conf['addQueryString.']) : '';
05216                                                 $addQueryParams .= trim($this->stdWrap($conf['additionalParams'],$conf['additionalParams.']));
05217                                                 if (substr($addQueryParams,0,1)!='&')           {
05218                                                         $addQueryParams = '';
05219                                                 } elseif ($conf['useCacheHash']) {      // cache hashing:
05220                                                         $pA = t3lib_div::cHashParams($addQueryParams.$GLOBALS['TSFE']->linkVars);       // Added '.$this->linkVars' dec 2003: The need for adding the linkVars is that they will be included in the link, but not the cHash. Thus the linkVars will always be the problem that prevents the cHash from working. I cannot see what negative implications in terms of incompatibilities this could bring, but for now I hope there are none. So here we go... (- kasper)
05221                                                         $addQueryParams.= '&cHash='.t3lib_div::shortMD5(serialize($pA));
05222                                                 }
05223 
05224                                                 $tCR_domain = '';
05225                                                 // Mount pages are always local and never link to another domain
05226                                                 if (count($MPvarAcc))   {
05227                                                         // Add "&MP" var:
05228                                                         $addQueryParams.= '&MP='.rawurlencode(implode(',',$MPvarAcc));
05229                                                 }
05230                                                 elseif ($GLOBALS['TSFE']->config['config']['typolinkCheckRootline'])    {
05231                                                         // This checks if the linked id is in the rootline of this site and if not it will find the domain for that ID and prefix it:
05232                                                         $tCR_rootline = $GLOBALS['TSFE']->sys_page->getRootLine($page['uid']);  // Gets rootline of linked-to page
05233                                                         $tCR_flag = 0;
05234                                                         foreach($tCR_rootline as $tCR_data)     {
05235                                                                 if ($tCR_data['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid'])       {
05236                                                                         $tCR_flag = 1;  // OK, it was in rootline!
05237                                                                         break;
05238                                                                 }
05239                                                         }
05240                                                         if (!$tCR_flag) {
05241                                                                 foreach($tCR_rootline as $tCR_data)     {
05242                                                                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_domain', 'pid='.intval($tCR_data['uid']).' AND redirectTo=\'\''.$this->enableFields('sys_domain'), '', 'sorting');
05243                                                                         if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05244                                                                                 $tCR_domain = preg_replace('/\/$/','',$row['domainName']);
05245                                                                                 break;
05246                                                                         }
05247                                                                 }
05248                                                         }
05249                                                 }
05250                                                         // If other domain, overwrite
05251                                                 if (strlen($tCR_domain))        {
05252                                                         $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
05253                                                         if ($conf['extTarget.'])        {$target = $this->stdWrap($target, $conf['extTarget.']);}
05254                                                         if ($forceTarget)       {$target=$forceTarget;}
05255                                                         $LD['target'] = $target;
05256                                                         $this->lastTypoLinkUrl = $this->URLqMark('http://'.$tCR_domain.'/index.php?id='.$page['uid'],$addQueryParams).$sectionMark;
05257                                                 } else {        // Internal link:
05258                                                         if ($forceTarget)       {$target=$forceTarget;}
05259                                                         $LD = $GLOBALS['TSFE']->tmpl->linkData($page,$target,$conf['no_cache'],'','',$addQueryParams,$theTypeP);
05260                                                         $this->lastTypoLinkUrl = $this->URLqMark($LD['totalURL'],'').$sectionMark;
05261                                                 }
05262 
05263                                                 $this->lastTypoLinkTarget = $LD['target'];
05264                                                 $targetPart = $LD['target'] ? ' target="'.$LD['target'].'"' : '';
05265 
05266                                                         // If sectionMark is set, there is no baseURL AND the current page is the page the link is to, check if there are any additional parameters and is not, drop the url.
05267                                                 if ($sectionMark && !trim($addQueryParams) && $page['uid']==$GLOBALS['TSFE']->id && !$GLOBALS['TSFE']->config['config']['baseURL'])     {
05268                                                         list(,$URLparams) = explode('?',$this->lastTypoLinkUrl);
05269                                                         list($URLparams) = explode('#',$URLparams);
05270                                                         parse_str ($URLparams.$LD['orig_type'], $URLparamsArray);
05271                                                         if (intval($URLparamsArray['type'])==$GLOBALS['TSFE']->type)    {       // type nums must match as well as page ids
05272                                                                 unset($URLparamsArray['id']);
05273                                                                 unset($URLparamsArray['type']);
05274                                                                 if (!count($URLparamsArray))    {       // If there are no parameters left.... set the new url.
05275                                                                         $this->lastTypoLinkUrl = $sectionMark;
05276                                                                 }
05277                                                         }
05278                                                 }
05279 
05280                                                         // If link is to a access restricted page which should be redirected, then find new URL:
05281                                                 if ($GLOBALS['TSFE']->config['config']['typolinkLinkAccessRestrictedPages'] &&
05282                                                                 $GLOBALS['TSFE']->config['config']['typolinkLinkAccessRestrictedPages']!=='NONE' &&
05283                                                                 !$GLOBALS['TSFE']->checkPageGroupAccess($page)) {
05284                                                                         $thePage = $GLOBALS['TSFE']->sys_page->getPage($GLOBALS['TSFE']->config['config']['typolinkLinkAccessRestrictedPages']);
05285 
05286                                                                         $addParams = $GLOBALS['TSFE']->config['config']['typolinkLinkAccessRestrictedPages_addParams'];
05287                                                                         $addParams = str_replace('###RETURN_URL###',rawurlencode($this->lastTypoLinkUrl),$addParams);
05288                                                                         $addParams = str_replace('###PAGE_ID###',$page['uid'],$addParams);
05289                                                                         $LD = $GLOBALS['TSFE']->tmpl->linkData($thePage,$target,'','','',$addParams,$theTypeP);
05290                                                                         $this->lastTypoLinkUrl = $this->URLqMark($LD['totalURL'],'');
05291                                                 }
05292 
05293                                                         // Rendering the tag.
05294                                                 $finalTagParts['url']=$this->lastTypoLinkUrl;
05295                                                 $finalTagParts['targetParams']=$targetPart;
05296                                                 $finalTagParts['TYPE']='page';
05297                                         } else {
05298                                                 $GLOBALS['TT']->setTSlogMessage("typolink(): Page id '".$link_param."' was not found, so '".$linktxt."' was not linked.",1);
05299                                                 return $linktxt;
05300                                         }
05301                                 }
05302                         }
05303 
05304                         if ($forceTitle)        {$title=$forceTitle;}
05305 
05306                         if ($JSwindowParams)    {
05307 
05308                                         // Create TARGET-attribute only if the right doctype is used
05309                                 if (!t3lib_div::inList('xhtml_strict,xhtml_11,xhtml_2', $GLOBALS['TSFE']->xhtmlDoctype))        {
05310                                         $target = ' target="FEopenLink"';
05311                                 } else {
05312                                         $target = '';
05313                                 }
05314 
05315                                 $onClick="vHWin=window.open('".$GLOBALS['TSFE']->baseUrlWrap($finalTagParts['url'])."','FEopenLink','".$JSwindowParams."');vHWin.focus();return false;";
05316                                 $res = '<a href="'.htmlspecialchars($finalTagParts['url']).'"'. $target .' onclick="'.htmlspecialchars($onClick).'"'.($title?' title="'.$title.'"':'').($linkClass?' class="'.$linkClass.'"':'').$finalTagParts['aTagParams'].'>';
05317                         } else {
05318                                 if ($GLOBALS['TSFE']->spamProtectEmailAddresses === 'ascii' && $finalTagParts['TYPE'] === 'mailto') {
05319                                         $res = '<a href="'.$finalTagParts['url'].'"'.($title?' title="'.$title.'"':'').$finalTagParts['targetParams'].($linkClass?' class="'.$linkClass.'"':'').$finalTagParts['aTagParams'].'>';
05320                                 } else {
05321                                         $res = '<a href="'.htmlspecialchars($finalTagParts['url']).'"'.($title?' title="'.$title.'"':'').$finalTagParts['targetParams'].($linkClass?' class="'.$linkClass.'"':'').$finalTagParts['aTagParams'].'>';
05322                                 }
05323                         }
05324 
05325                                 // Call user function:
05326                         if ($conf['userFunc'])  {
05327                                 $finalTagParts['TAG']=$res;
05328                                 $res = $this->callUserFunction($conf['userFunc'],$conf['userFunc.'],$finalTagParts);
05329                         }
05330 
05331                                 // If flag "returnLastTypoLinkUrl" set, then just return the latest URL made:
05332                         if ($conf['returnLast'])        {
05333                                 switch($conf['returnLast'])     {
05334                                         case 'url':
05335                                                 return $this->lastTypoLinkUrl;
05336                                         break;
05337                                         case 'target':
05338                                                 return $this->lastTypoLinkTarget;
05339                                         break;
05340                                 }
05341                         }
05342 
05343                         if ($conf['ATagBeforeWrap'])    {
05344                                 return $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
05345                         } else {
05346                                 return $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
05347                         }
05348                 } else {
05349                         return $linktxt;
05350                 }
05351         }
05352 
05361         function typoLink_URL($conf)    {
05362                 $this->typolink('|',$conf);
05363                 return $this->lastTypoLinkUrl;
05364         }
05365 
05379         function getTypoLink($label,$params,$urlParameters=array(),$target='')  {
05380                 $conf=array();
05381                 $conf['parameter'] = $params;
05382                 if ($target)    {
05383                         $conf['target']=$target;
05384                         $conf['extTarget']=$target;
05385                 }
05386                 if (is_array($urlParameters))   {
05387                         if (count($urlParameters))      {
05388                                 $conf['additionalParams'].= t3lib_div::implodeArrayForUrl('',$urlParameters);
05389                         }
05390                 } else {
05391                         $conf['additionalParams'].=$urlParameters;
05392                 }
05393                 $out = $this->typolink($label,$conf);
05394                 return $out;
05395         }
05396 
05406         function getTypoLink_URL($params,$urlParameters=array(),$target='')     {
05407                 $this->getTypoLink('',$params,$urlParameters,$target);
05408                 return $this->lastTypoLinkUrl;
05409         }
05410 
05418         function typolinkWrap($conf)    {
05419                 $k=md5(microtime());
05420                 return explode($k,$this->typolink($k,$conf));
05421         }
05422 
05431         function currentPageUrl($urlParameters=array(),$id=0)   {
05432                 return $this->getTypoLink_URL($id?$id:$GLOBALS['TSFE']->id,$urlParameters,$GLOBALS['TSFE']->sPre);
05433         }
05434 
05444         function getClosestMPvalueForPage($pageId, $raw=FALSE)  {
05445                         // MointPoints:
05446                 if ($GLOBALS['TYPO3_CONF_VARS']['FE']['enable_mount_pids'] && $GLOBALS['TSFE']->MP)     {
05447 
05448                         if (!strcmp($GLOBALS['TSFE']->id, $pageId))     {       // same page as current.
05449                                 $MP = $GLOBALS['TSFE']->MP;
05450                         } else { // ... otherwise find closest meeting point:
05451                                 $tCR_rootline = $GLOBALS['TSFE']->sys_page->getRootLine($pageId, '', TRUE);     // Gets rootline of linked-to page
05452                                 $inverseTmplRootline = array_reverse($GLOBALS['TSFE']->tmpl->rootLine);
05453 
05454                                 $rl_mpArray = array();
05455                                 $startMPaccu = FALSE;
05456 
05457                                         // Traverse root line of link uid and inside of that the REAL root line of current position.
05458                                 foreach($tCR_rootline as $tCR_data)     {
05459                                         foreach($inverseTmplRootline as $rlKey => $invTmplRLRec)        {
05460 
05461                                                         // Accumulate MP data:
05462                                                 if ($startMPaccu && $invTmplRLRec['_MP_PARAM']) {
05463                                                         $rl_mpArray[] = $invTmplRLRec['_MP_PARAM'];
05464                                                 }
05465 
05466                                                         // If two PIDs matches and this is NOT the site root, start accumulation of MP data (on the next level):
05467                                                         // (The check for site root is done so links to branches outsite the site but sharing the site roots PID is NOT detected as within the branch!)
05468                                                 if ($tCR_data['pid']==$invTmplRLRec['pid'] && count($inverseTmplRootline)!=$rlKey+1)    {
05469                                                         $startMPaccu = TRUE;
05470                                                 }
05471                                         }
05472                                         if ($startMPaccu)       break;  // Good enough...
05473                                 }
05474 
05475                                 if (count($rl_mpArray)) {
05476                                         $MP = implode(',', array_reverse($rl_mpArray));
05477                                 }
05478                         }
05479                 }
05480 
05481                 return !$raw  ? ($MP ? '&MP='.rawurlencode($MP) : '') : $MP;
05482         }
05483 
05494         function getMailTo($mailAddress,$linktxt,$initP='?') {
05495                 if(!strcmp($linktxt,''))        { $linktxt = $mailAddress; }
05496 
05497                 $mailToUrl = 'mailto:'.$mailAddress;
05498 
05499                 if (!$GLOBALS['TSFE']->config['config']['jumpurl_enable'] || $GLOBALS['TSFE']->config['config']['jumpurl_mailto_disable']) {
05500                         if ($GLOBALS['TSFE']->spamProtectEmailAddresses) {
05501                                 if ($GLOBALS['TSFE']->spamProtectEmailAddresses === 'ascii')    {
05502                                         $mailToUrl = $GLOBALS['TSFE']->encryptEmail($mailToUrl);
05503                                 } else {
05504                                         $mailToUrl = "javascript:linkTo_UnCryptMailto('".$GLOBALS['TSFE']->encryptEmail($mailToUrl)."');";
05505                                 }
05506                                 if ($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_atSubst']) {
05507                                         $atLabel = trim($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_atSubst']);
05508                                 }
05509                                 $linktxt = str_replace('@',$atLabel?$atLabel:'(at)',$linktxt);
05510 
05511                                 if ($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_lastDotSubst']) {
05512                                         $lastDotLabel = trim($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_lastDotSubst']);
05513                                         $lastDotLabel = $lastDotLabel ? $lastDotLabel : '(dot)';
05514                                         $linktxt = preg_replace('/\.([^\.]+)$/', $lastDotLabel.'$1', $linktxt);
05515                                 }
05516                         }
05517                 } else {
05518                         $mailToUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($mailToUrl).$GLOBALS['TSFE']->getMethodUrlIdToken;
05519                 }
05520                 return array($mailToUrl,$linktxt);
05521         }
05522 
05532         function getQueryArguments($conf,$overruleQueryArgs=array(),$forceArgs=FALSE) {
05533                 $rawValues = FALSE;
05534                 switch((string)$conf['method']) {
05535                         case 'GET':
05536                                 $q_in = t3lib_div::_GET();
05537                         break;
05538                         case 'POST':
05539                                 $q_in = t3lib_div::_POST();
05540                         break;
05541                         default:
05542                                         // shortcut (no further processing necessary)
05543                                 if (!$conf['exclude'])  return '&'.t3lib_div::getIndpEnv('QUERY_STRING');
05544 
05545                                 $q_in = array();
05546                                 foreach (explode('&',t3lib_div::getIndpEnv('QUERY_STRING')) as $arg)    {
05547                                         list($k,$v) = explode('=',$arg);
05548                                         $q_in[$k] = $v;
05549                                 }
05550                                 $rawValues = TRUE;
05551                 }
05552 
05553                 if ($conf['exclude'])   {
05554                         $q_out = array();
05555                         $exclude = t3lib_div::trimExplode(',', $conf['exclude']);
05556                         $exclude[] = 'id';      // never repeat id
05557                         foreach ($q_in as $k => $v)   {
05558                                 if (!in_array($k, $exclude)) {
05559                                         if (isset($overruleQueryArgs[$k]))      {
05560                                                 $v = $overruleQueryArgs[$k];
05561                                                 unset($overruleQueryArgs[$k]);
05562                                         }
05563                                         $q_out[$k] = $v;
05564                                 }
05565                         }
05566                                 // any remaining overrule arguments?
05567                         if ($forceArgs) {
05568                                 foreach ($overruleQueryArgs as $k => $v)        {
05569                                         $q_out[$k] = $v;
05570                                 }
05571                         }
05572                 } else {
05573                         $q_out = &$q_in;
05574                 }
05575 
05576                 $content = '';
05577                 if ($rawValues) {
05578                         foreach ($q_out as $k => $v)    {
05579                                 $content .= '&'.$k.'='.$v;
05580                         }
05581                 } else {
05582                         $content = t3lib_div::implodeArrayForUrl('',$q_out);
05583                 }
05584 
05585                 return $content;
05586         }
05587 
05588 
05589 
05590 
05591 
05592 
05593 
05594 
05595 
05596 
05597 
05598 
05599 
05600 
05601 
05602 
05603 
05604 
05605         /***********************************************
05606          *
05607          * Miscellaneous functions, stand alone
05608          *
05609          ***********************************************/
05610 
05622         function wrap($content,$wrap,$char='|') {
05623                 if ($wrap)      {
05624                         $wrapArr = explode($char, $wrap);
05625                         return trim($wrapArr[0]).$content.trim($wrapArr[1]);
05626                 } else return $content;
05627         }
05628 
05638         function noTrimWrap($content,$wrap)     {
05639                 if ($wrap)      {
05640                         $wrapArr = explode('|', $wrap);
05641                         return $wrapArr[1].$content.$wrapArr[2];
05642                 } else return $content;
05643         }
05644 
05652         function wrapSpace($content, $wrap)     {
05653                 $result = $content;
05654                 if (trim($wrap))        {
05655                         $wrapArray = explode('|',$wrap);
05656                         $wrapBefore = intval($wrapArray[0]);
05657                         $wrapAfter = intval($wrapArray[1]);
05658                         if ($wrapBefore)        {
05659                                 $result = '<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$wrapBefore.'"'.$this->getBorderAttr(' border="0"').' class="spacer-gif" alt="" title="" /><br />'.$result;
05660                         }
05661                         if ($wrapAfter) {
05662                                 $result.='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$wrapAfter.'"'.$this->getBorderAttr(' border="0"').' class="spacer-gif" alt="" title="" /><br />';
05663                         }
05664                 }
05665                 return $result;
05666         }
05667 
05678         function callUserFunction($funcName,$conf,$content)     {
05679                 $pre = $GLOBALS['TSFE']->TYPO3_CONF_VARS['FE']['userFuncClassPrefix'];
05680                 if ($pre &&
05681                         !t3lib_div::isFirstPartOfStr(trim($funcName),$pre) &&
05682                         !t3lib_div::isFirstPartOfStr(trim($funcName),'tx_')
05683                         )       {
05684                         $GLOBALS['TT']->setTSlogMessage('Function "'.$funcName.'" was not prepended with "'.$pre.'"',3);
05685                         return $content;
05686                 }
05687                         // Split parts
05688                 $parts = explode('->',$funcName);
05689                 if (count($parts)==2)   {       // Class
05690                         $cls = t3lib_div::makeInstanceClassName($parts[0]);
05691                         if (class_exists ($cls))        {
05692                                 $classObj = new $cls;
05693                                 if (method_exists($classObj, $parts[1]))        {
05694                                         $classObj->cObj = &$this;
05695                                         $content = call_user_method($parts[1], $classObj, $content, $conf);
05696                                 } else {
05697                                         $GLOBALS['TT']->setTSlogMessage('Method "'.$parts[1].'" did not exist in class "'.$cls.'"',3);
05698                                 }
05699                         } else {
05700                                 $GLOBALS['TT']->setTSlogMessage('Class "'.$cls.'" did not exist',3);
05701                         }
05702                 } else {        // Function
05703                         if (function_exists($funcName)) {
05704                                 $content = call_user_func($funcName, $content, $conf);
05705                         } else {
05706                                 $GLOBALS['TT']->setTSlogMessage('Function "'.$funcName.'" did not exist',3);
05707                         }
05708                 }
05709                 return $content;
05710         }
05711 
05719         function processParams($params) {
05720                 $paramArr=array();
05721                 $lines=t3lib_div::trimExplode(chr(10),$params,1);
05722                 foreach($lines as $val) {
05723                         $pair = explode('=',$val,2);
05724                         if (!t3lib_div::inList('#,/',substr(trim($pair[0]),0,1)))       {
05725                                 $paramArr[trim($pair[0])] = trim($pair[1]);
05726                         }
05727                 }
05728                 return $paramArr;
05729         }
05730 
05737         function keywords($content)     {
05738                 $listArr = split(',|;|'.chr(10),$content);
05739                 reset($listArr);
05740                 while(list($k,$v)=each($listArr))       {
05741                         $listArr[$k]=trim($v);
05742                 }
05743                 return implode(',',$listArr);
05744         }
05745 
05754         function caseshift($theValue, $case)    {
05755                 $case = strtolower($case);
05756                 switch($case)   {
05757                         case 'upper':
05758                                 $theValue = $GLOBALS['TSFE']->csConvObj->conv_case($GLOBALS['TSFE']->renderCharset,$theValue,'toUpper');
05759                                 #$theValue = strtoupper($theValue);
05760                                 #$theValue = strtr($theValue, $this->caseConvStrings[0], $this->caseConvStrings[1]);
05761                         break;
05762                         case 'lower':
05763                                 $theValue = $GLOBALS['TSFE']->csConvObj->conv_case($GLOBALS['TSFE']->renderCharset,$theValue,'toLower');
05764                                 #$theValue = strtolower($theValue);
05765                                 #$theValue = strtr($theValue, $this->caseConvStrings[1], $this->caseConvStrings[0]);
05766                         break;
05767                 }
05768                 return $theValue;
05769         }
05770 
05779         function HTMLcaseshift($theValue, $case)        {
05780                 $inside = 0;
05781                 $newVal = '';
05782                 $pointer = 0;
05783                 $totalLen = strlen($theValue);
05784                 do      {
05785                         if (!$inside)   {
05786                                 $len = strcspn(substr($theValue,$pointer),'<');
05787                                 $newVal.= $this->caseshift(substr($theValue,$pointer,$len),$case);
05788                                 $inside = 1;
05789                         } else {
05790                                 $len = strcspn(substr($theValue,$pointer),'>')+1;
05791                                 $newVal.= substr($theValue,$pointer,$len);
05792                                 $inside = 0;
05793                         }
05794                         $pointer+=$len;
05795                 } while($pointer<$totalLen);
05796                 return $newVal;
05797         }
05798 
05808         function bytes($sizeInBytes,$labels)    {
05809                 return t3lib_div::formatSize($sizeInBytes,$labels);
05810         }
05811 
05819         function calcAge($seconds,$labels)      {
05820                 if (t3lib_div::testInt($labels)) {
05821                         $labels = ' min| hrs| days| yrs';
05822                 } else {
05823                         $labels=str_replace('"','',$labels);
05824                 }
05825 
05826                 $labelArr = explode('|',$labels);
05827                 $absSeconds = abs($seconds);
05828                 if ($absSeconds<3600)   {
05829                         $seconds = round ($seconds/60).$labelArr[0];
05830                 } elseif ($absSeconds<24*3600)  {
05831                         $seconds = round ($seconds/3600).$labelArr[1];
05832                 } elseif ($absSeconds<365*24*3600)      {
05833                         $seconds = round ($seconds/(24*3600)).$labelArr[2];
05834                 } else {
05835                         $seconds = round ($seconds/(365*24*3600)).$labelArr[3];
05836                 }
05837                 return $seconds;
05838         }
05839 
05851         function sendNotifyEmail($msg, $recipients, $cc, $email_from, $email_fromName='', $replyTo='')  {
05852                         // Sends order emails:
05853                 $headers=array();
05854                 if ($email_from)        {$headers[]='From: '.$email_fromName.' <'.$email_from.'>';}
05855                 if ($replyTo)           {$headers[]='Reply-To: '.$replyTo;}
05856 
05857                 $recipients=implode(',',t3lib_div::trimExplode(',',$recipients,1));
05858 
05859                 $emailContent = trim($msg);
05860                 if ($emailContent)      {
05861                         $parts = split(chr(10),$emailContent,2);                // First line is subject
05862                         $subject=trim($parts[0]);
05863                         $plain_message=trim($parts[1]);
05864 
05865                         if ($recipients)        $GLOBALS['TSFE']->plainMailEncoded($recipients, $subject, $plain_message, implode(chr(10),$headers));
05866                         if ($cc)        $GLOBALS['TSFE']->plainMailEncoded($cc, $subject, $plain_message, implode(chr(10),$headers));
05867                         return true;
05868                 }
05869         }
05870 
05878         function URLqMark($url,$params) {
05879                 if ($params && !strstr($url,'?'))       {
05880                         return $url.'?'.$params;
05881                 } else {
05882                         return $url.$params;
05883                 }
05884         }
05885 
05894         function checkEmail($email)     {
05895                 return t3lib_div::validEmail($email);
05896         }
05897 
05906         function clearTSProperties($TSArr,$propList)    {
05907                 $list = explode(',',$propList);
05908                 while(list(,$prop)=each($list)) {
05909                         $prop = trim($prop);
05910                         unset($TSArr[$prop]);
05911                         unset($TSArr[$prop.'.']);
05912                 }
05913                 return $TSArr;
05914         }
05915 
05925         function mergeTSRef($confArr,$prop)     {
05926                 if (substr($confArr[$prop],0,1)=='<')   {
05927                         $key = trim(substr($confArr[$prop],1));
05928                         $cF = t3lib_div::makeInstance('t3lib_TSparser');
05929                                 // $name and $conf is loaded with the referenced values.
05930                         $old_conf=$confArr[$prop.'.'];
05931                         list($name, $conf) = $cF->getVal($key,$GLOBALS['TSFE']->tmpl->setup);
05932                         if (is_array($old_conf) && count($old_conf))    {
05933                                 $conf = $this->joinTSarrays($conf,$old_conf);
05934                         }
05935                         $confArr[$prop.'.']=$conf;
05936                 }
05937                 return $confArr;
05938         }
05939 
05948         function joinTSarrays($conf,$old_conf)  {
05949                 if (is_array($old_conf))        {
05950                         reset($old_conf);
05951                         while(list($key,$val)=each($old_conf))  {
05952                                 if (is_array($val))     {
05953                                         $conf[$key] = $this->joinTSarrays($conf[$key],$val);
05954                                 } else {
05955                                         $conf[$key] = $val;
05956                                 }
05957                         }
05958                 }
05959                 return $conf;
05960         }
05961 
05971         function gifBuilderTextBox($gifbuilderConf, $conf, $text)       {
05972                 $chars = intval($conf['chars']) ? intval($conf['chars']) : 20;
05973                 $lineDist = intval($conf['lineDist']) ? intval($conf['lineDist']) : 20;
05974                 $Valign = strtolower(trim($conf['Valign']));
05975                 $tmplObjNumber = intval($conf['tmplObjNumber']);
05976                 $maxLines = intval($conf['maxLines']);
05977 
05978                 if ($tmplObjNumber && $gifbuilderConf[$tmplObjNumber]=='TEXT')  {
05979                         $textArr = $this->linebreaks($text,$chars,$maxLines);
05980                         $angle = intval($gifbuilderConf[$tmplObjNumber.'.']['angle']);
05981                         reset($textArr);
05982                         while(list($c,$textChunk)=each($textArr))       {
05983                                 $index = $tmplObjNumber+1+($c*2);
05984                                         // Workarea
05985                                 $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$index);
05986                                 $rad_angle = 2*pi()/360*$angle;
05987                                 $x_d = sin($rad_angle)*$lineDist;
05988                                 $y_d = cos($rad_angle)*$lineDist;
05989 
05990                                 $diff_x_d=0;
05991                                 $diff_y_d=0;
05992                                 if ($Valign=='center')  {
05993                                         $diff_x_d = $x_d*count($textArr);
05994                                         $diff_x_d = $diff_x_d/2;
05995                                         $diff_y_d = $y_d*count($textArr);
05996                                         $diff_y_d = $diff_y_d/2;
05997                                 }
05998 
05999 
06000                                 $x_d = round($x_d*$c - $diff_x_d);
06001                                 $y_d = round($y_d*$c - $diff_y_d);
06002 
06003                                 $gifbuilderConf[$index] = 'WORKAREA';
06004                                 $gifbuilderConf[$index.'.']['set'] = $x_d.','.$y_d;
06005                                         // Text
06006                                 $index++;
06007                                 $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$index);
06008                                 $gifbuilderConf[$index] = 'TEXT';
06009                                 $gifbuilderConf[$index.'.'] = $this->clearTSProperties($gifbuilderConf[$tmplObjNumber.'.'],'text');
06010                                 $gifbuilderConf[$index.'.']['text'] = $textChunk;
06011                         }
06012                         $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$tmplObjNumber);
06013                 }
06014                 return $gifbuilderConf;
06015         }
06016 
06027         function linebreaks($string,$chars,$maxLines=0) {
06028                 $lines = explode(chr(10),$string);
06029                 $lineArr=Array();
06030                 $c=0;
06031                 while(list(,$paragraph)=each($lines))   {
06032                         $words = explode(' ',$paragraph);
06033                         while(list(,$word)=each($words))        {
06034                                 if (strlen($lineArr[$c].$word)>$chars)  {
06035                                         $c++;
06036                                 }
06037                                 if (!$maxLines || $c<$maxLines) {
06038                                         $lineArr[$c].= $word.' ';
06039                                 }
06040                         }
06041                         $c++;
06042                 }
06043                 return $lineArr;
06044         }
06045 
06058         function getUpdateJS($dataArray, $formName, $arrPrefix, $fieldList)     {
06059                 $JSPart='';
06060                 $updateValues=t3lib_div::trimExplode(',',$fieldList);
06061                 while(list(,$fKey)=each($updateValues)) {
06062                         $value = $dataArray[$fKey];
06063                         if (is_array($value))   {
06064                                 reset($value);
06065                                 while(list(,$Nvalue)=each($value))      {
06066                                         $JSPart.="
06067         updateForm('".$formName."','".$arrPrefix."[".$fKey."][]',".t3lib_div::quoteJSvalue($Nvalue, true).")";
06068                                 }
06069 
06070                         } else {
06071                                 $JSPart.="
06072         updateForm('".$formName."','".$arrPrefix."[".$fKey."]',".t3lib_div::quoteJSvalue($value, true).")";
06073                         }
06074                 }
06075                 $JSPart='<script type="text/javascript">
06076         /*<![CDATA[*/ '.$JSPart.'
06077         /*]]>*/
06078 </script>
06079 ';
06080                 $GLOBALS['TSFE']->additionalHeaderData['JSincludeFormupdate']='<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'t3lib/jsfunc.updateform.js"></script>';
06081                 return $JSPart;
06082         }
06083 
06084 
06085 
06086 
06087 
06088 
06089 
06090 
06091 
06092 
06093 
06094 
06095 
06096 
06097 
06098 
06099 
06100 
06101 
06102 
06103 
06104 
06105 
06106 
06107 
06108 
06109 
06110 
06111         /***********************************************
06112          *
06113          * Database functions, making of queries
06114          *
06115          ***********************************************/
06116 
06127         function DBgetDelete($table, $uid, $doExec=FALSE)       {
06128                 if (intval($uid))       {
06129                         if ($GLOBALS['TCA'][$table]['ctrl']['delete'])  {
06130                                 if ($doExec)    {
06131                                         return $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), array($GLOBALS['TCA'][$table]['ctrl']['delete'] => 1));
06132                                 } else {
06133                                         return $GLOBALS['TYPO3_DB']->UPDATEquery($table, 'uid='.intval($uid), array($GLOBALS['TCA'][$table]['ctrl']['delete'] => 1));
06134                                 }
06135                         } else {
06136                                 if ($doExec)    {
06137                                         return $GLOBALS['TYPO3_DB']->exec_DELETEquery($table, 'uid='.intval($uid));
06138                                 } else {
06139                                         return $GLOBALS['TYPO3_DB']->DELETEquery($table, 'uid='.intval($uid));
06140                                 }
06141                         }
06142                 }
06143         }
06144 
06159         function DBgetUpdate($table, $uid, $dataArr, $fieldList, $doExec=FALSE) {
06160                 unset($dataArr['uid']); // uid can never be set
06161                 $uid=intval($uid);
06162 
06163                 if ($uid)       {
06164                         $fieldList = implode(',',t3lib_div::trimExplode(',',$fieldList,1));
06165                         $updateFields=array();
06166 
06167                         foreach($dataArr as $f => $v)   {
06168                                 if (t3lib_div::inList($fieldList,$f))   {
06169                                         $updateFields[$f] = $v;
06170                                 }
06171                         }
06172 
06173                         if ($GLOBALS['TCA'][$table]['ctrl']['tstamp'])  {
06174                                 $updateFields[$GLOBALS['TCA'][$table]['ctrl']['tstamp']] = time();
06175                         }
06176 
06177                         if (count($updateFields))       {
06178                                 if ($doExec)    {
06179                                         return $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), $updateFields);
06180                                 } else {
06181                                         return $GLOBALS['TYPO3_DB']->UPDATEquery($table, 'uid='.intval($uid), $updateFields);
06182                                 }
06183                         }
06184                 }
06185         }
06186 
06201         function DBgetInsert($table, $pid, $dataArr, $fieldList, $doExec=FALSE) {
06202                 $extraList='pid';
06203                 if ($GLOBALS['TCA'][$table]['ctrl']['tstamp'])  {$field=$GLOBALS['TCA'][$table]['ctrl']['tstamp']; $dataArr[$field]=time(); $extraList.=','.$field;}
06204                 if ($GLOBALS['TCA'][$table]['ctrl']['crdate'])  {$field=$GLOBALS['TCA'][$table]['ctrl']['crdate']; $dataArr[$field]=time(); $extraList.=','.$field;}
06205                 if ($GLOBALS['TCA'][$table]['ctrl']['cruser_id'])       {$field=$GLOBALS['TCA'][$table]['ctrl']['cruser_id']; $dataArr[$field]=0; $extraList.=','.$field;}
06206                 if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'])    {$field=$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']; $dataArr[$field]=intval($GLOBALS['TSFE']->fe_user->user['uid']); $extraList.=','.$field;}
06207                 if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'])   {$field=$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']; list($dataArr[$field])=explode(',',$GLOBALS['TSFE']->fe_user->user['usergroup']); $dataArr[$field]=intval($dataArr[$field]); $extraList.=','.$field;}
06208 
06209                 unset($dataArr['uid']); // uid can never be set
06210                 if ($pid>=0)    { $dataArr['pid'] = $pid; }             // Set pid < 0 and the dataarr-pid will be used!
06211                 $fieldList = implode(',',t3lib_div::trimExplode(',',$fieldList.','.$extraList,1));
06212 
06213                 $insertFields = array();
06214                 foreach($dataArr as $f => $v)   {
06215                         if (t3lib_div::inList($fieldList,$f))   {
06216                                 $insertFields[$f] = $v;
06217                         }
06218                 }
06219 
06220                 if ($doExec)    {
06221                         return $GLOBALS['TYPO3_DB']->exec_INSERTquery($table, $insertFields);
06222                 } else {
06223                         return $GLOBALS['TYPO3_DB']->INSERTquery($table, $insertFields);
06224                 }
06225         }
06226 
06238         function DBmayFEUserEdit($table,$row, $feUserRow, $allowedGroups='',$feEditSelf=0)      {
06239                 $groupList = $allowedGroups ? implode(',',array_intersect(t3lib_div::trimExplode(',',$feUserRow['usergroup'],1),t3lib_div::trimExplode(',',$allowedGroups,1))) : $feUserRow['usergroup'];
06240                 $ok=0;
06241                         // points to the field that allows further editing from frontend if not set. If set the record is locked.
06242                 if (!$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'] || !$row[$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock']])       {
06243                                 // points to the field (integer) that holds the fe_users-id of the creator fe_user
06244                         if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'])    {
06245                                 $rowFEUser = intval($row[$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']]);
06246                                 if ($rowFEUser && $rowFEUser==$feUserRow['uid'])        {
06247                                         $ok=1;
06248                                 }
06249                         }
06250                                 // If $feEditSelf is set, fe_users may always edit them selves...
06251                         if ($feEditSelf && $table=='fe_users' && !strcmp($feUserRow['uid'],$row['uid']))        {
06252                                 $ok=1;
06253                         }
06254                                 // points to the field (integer) that holds the fe_group-id of the creator fe_user's first group
06255                         if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'])   {
06256                                 $rowFEUser = intval($row[$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']]);
06257                                 if ($rowFEUser) {
06258                                         if (t3lib_div::inList($groupList, $rowFEUser))  {
06259                                                 $ok=1;
06260                                         }
06261                                 }
06262                         }
06263                 }
06264                 return $ok;
06265         }
06266 
06278         function DBmayFEUserEditSelect($table,$feUserRow,$allowedGroups='',$feEditSelf=0)       {
06279                         // Returns where-definition that selects user-editable records.
06280                 $groupList = $allowedGroups ? implode(',',array_intersect(t3lib_div::trimExplode(',',$feUserRow['usergroup'],1),t3lib_div::trimExplode(',',$allowedGroups,1))) : $feUserRow['usergroup'];
06281                 $OR_arr=array();
06282                         // points to the field (integer) that holds the fe_users-id of the creator fe_user
06283                 if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'])    {
06284                         $OR_arr[]=$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'].'='.$feUserRow['uid'];
06285                 }
06286                         // points to the field (integer) that holds the fe_group-id of the creator fe_user's first group
06287                 if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'])   {
06288                         $values = t3lib_div::intExplode(',',$groupList);
06289                         while(list(,$theGroupUid)=each($values))        {
06290                                 if ($theGroupUid)       {$OR_arr[]=$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'].'='.$theGroupUid;}
06291                         }
06292                 }
06293                         // If $feEditSelf is set, fe_users may always edit them selves...
06294                 if ($feEditSelf && $table=='fe_users')  {
06295                         $OR_arr[]='uid='.intval($feUserRow['uid']);
06296                 }
06297 
06298                 $whereDef=' AND 1=0';
06299                 if (count($OR_arr))     {
06300                         $whereDef=' AND ('.implode(' OR ',$OR_arr).')';
06301                         if ($GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'])   {
06302                                 $whereDef.=' AND '.$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'].'=0';
06303                         }
06304                 }
06305                 return $whereDef;
06306         }
06307 
06318         function enableFields($table,$show_hidden=0)    {
06319                 return $GLOBALS['TSFE']->sys_page->enableFields($table,$show_hidden?$show_hidden:($table=='pages' ? $GLOBALS['TSFE']->showHiddenPage : $GLOBALS['TSFE']->showHiddenRecords));
06320         }
06321 
06342         function getTreeList($id,$depth,$begin=0,$dontCheckEnableFields=FALSE,$addSelectFields='',$moreWhereClauses='', $prevId_array=array(), $recursionLevel=0)       {
06343 
06344                         // Init vars:
06345                 $allFields = 'uid,hidden,starttime,endtime,fe_group,extendToSubpages,doktype,php_tree_stop,mount_pid,mount_pid_ol,t3ver_state'.$addSelectFields;
06346                 $depth = intval($depth);
06347                 $begin = intval($begin);
06348                 $id = intval($id);
06349                 $theList = '';
06350                 $addId = 0;
06351 
06352                 if ($id)        {
06353 
06354                                 // First level, check id (second level, this is done BEFORE the recursive call)
06355                         if (!$recursionLevel)   {
06356                                         // If Id less than zero it means we should add the real id to list:
06357                                 if ($id < 0)    {
06358                                         $addId = $id = abs($id);
06359                                 }
06360                                         // Check start page:
06361                                 if ($GLOBALS['TSFE']->sys_page->getRawRecord('pages',$id,'uid'))        {
06362 
06363                                                 // Find mount point if any:
06364                                         $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($id);
06365                                         if (is_array($mount_info))      {
06366                                                 $id = $mount_info['mount_pid'];
06367                                                         // In Overlay mode, use the mounted page uid as added ID!:
06368                                                 if ($addId && $mount_info['overlay'])   {
06369                                                         $addId = $id;
06370                                                 }
06371                                         }
06372                                 } else return '';       // Return blank if the start page was NOT found at all!
06373                         }
06374 
06375                                 // Add this ID to the array of IDs
06376                         if ($begin<=0)  {
06377                                 $prevId_array[] = $id;
06378                         }
06379 
06380                                 // Select sublevel:
06381                         if ($depth>0)   {
06382                                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($allFields, 'pages', 'pid='.intval($id).' AND deleted=0'.$moreWhereClauses, '' ,'sorting');
06383                                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {
06384                                         $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
06385 
06386                                         if ($row['doktype']==255 || $row['doktype']==6 || $row['t3ver_state']==1)       { unset($row); }        // Doing this after the overlay to make sure changes in the overlay are respected.
06387 
06388                                         if (is_array($row))     {
06389                                                         // Find mount point if any:
06390                                                 $next_id = $row['uid'];
06391                                                 $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($next_id, $row);
06392                                                         // Overlay mode:
06393                                                 if (is_array($mount_info) && $mount_info['overlay'])    {
06394                                                         $next_id = $mount_info['mount_pid'];
06395                                                         $res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($allFields, 'pages', 'uid='.intval($next_id).' AND deleted=0'.$moreWhereClauses, '' ,'sorting');
06396                                                         $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
06397                                                         $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
06398 
06399                                                         if ($row['doktype']==255 || $row['doktype']==6 || $row['t3ver_state']==1)       { unset($row); }        // Doing this after the overlay to make sure changes in the overlay are respected.
06400                                                 }
06401                                                         // Add record:
06402                                                 if (is_array($row) && ($dontCheckEnableFields || $GLOBALS['TSFE']->checkPagerecordForIncludeSection($row)))     {
06403                                                                 // Add ID to list:
06404                                                         if ($begin<=0)  {
06405                                                                 if ($dontCheckEnableFields || $GLOBALS['TSFE']->checkEnableFields($row))        {
06406                                                                         $theList.= $next_id.',';
06407                                                                 }
06408                                                         }
06409                                                                 // Next level:
06410                                                         if ($depth>1 && !$row['php_tree_stop']) {
06411                                                                         // Normal mode:
06412                                                                 if (is_array($mount_info) && !$mount_info['overlay'])   {
06413                                                                         $next_id = $mount_info['mount_pid'];
06414                                                                 }
06415                                                                         // Call recursively, if the id is not in prevID_array:
06416                                                                 if (!in_array($next_id,$prevId_array))  {
06417                                                                         $theList.= tslib_cObj::getTreeList($next_id, $depth-1, $begin-1, $dontCheckEnableFields, $addSelectFields, $moreWhereClauses, $prevId_array, $recursionLevel+1);
06418                                                                 }
06419                                                         }
06420                                                 }
06421                                         }
06422                                 }
06423                         }
06424                 }
06425                         // If first run, check if the ID should be returned:
06426                 if (!$recursionLevel)   {
06427                         if ($addId)     {
06428                                 if ($begin>0)   {
06429                                         $theList.= 0;
06430                                 } else {
06431                                         $theList.= $addId;
06432                                 }
06433                         }
06434                 }
06435                         // Return list:
06436                 return $theList;
06437         }
06438 
06448         function whereSelectFromList($field,$value)     {
06449                 return $GLOBALS['TYPO3_DB']->listQuery($field,$value,'');
06450         }
06451 
06466         function exec_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='') {
06467                 return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
06468                                         $select,
06469                                         $local_table.','.$mm_table.($foreign_table?','.$foreign_table:''),
06470                                         $local_table.'.uid='.$mm_table.'.uid_local'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').
06471                                                 $whereClause,   // whereClauseMightContainGroupOrderBy
06472                                         $groupBy,
06473                                         $orderBy,
06474                                         $limit
06475                                 );
06476         }
06477 
06493         function exec_mm_query_uidList($select,$local_table_uidlist,$mm_table,$foreign_table='',$whereClause='',$groupBy='',$orderBy='',$limit='')      {
06494                 return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
06495                                         $select,
06496                                         $mm_table.($foreign_table?','.$foreign_table:''),
06497                                         $mm_table.'.uid_local IN ('.$local_table_uidlist.')'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').
06498                                                 $whereClause,   // whereClauseMightContainGroupOrderBy
06499                                         $groupBy,
06500                                         $orderBy,
06501                                         $limit
06502                                 );
06503         }
06504 
06514         function searchWhere($sw,$searchFieldList,$searchTable='')      {
06515                 global $TYPO3_DB;
06516 
06517                 $prefixTableName = $searchTable ? $searchTable.'.' : '';
06518                 $where = '';
06519                 if ($sw)        {
06520                         $searchFields = explode(',',$searchFieldList);
06521                         $kw = split('[ ,]',$sw);
06522 
06523                         while(list(,$val)=each($kw))    {
06524                                 $val = trim($val);
06525                                 $where_p = array();
06526                                 if (strlen($val)>=2)    {
06527                                         $val = $TYPO3_DB->escapeStrForLike($TYPO3_DB->quoteStr($val,$searchTable),$searchTable);
06528                                         reset($searchFields);
06529                                         while(list(,$field)=each($searchFields))        {
06530                                                 $where_p[] = $prefixTableName.$field.' LIKE \'%'.$val.'%\'';
06531                                         }
06532                                 }
06533                                 if (count($where_p))    {
06534                                         $where.=' AND ('.implode(' OR ',$where_p).')';
06535                                 }
06536                         }
06537                 }
06538                 return $where;
06539         }
06540 
06550         function exec_getQuery($table, $conf)   {
06551                 $queryParts = $this->getQuery($table, $conf, TRUE);
06552 
06553                 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
06554         }
06555 
06568         function getQuery($table, $conf, $returnQueryArray=FALSE)       {
06569 
06570                         // Construct WHERE clause:
06571                 $conf['pidInList'] = trim($this->stdWrap($conf['pidInList'],$conf['pidInList.']));
06572                 if (!strcmp($conf['pidInList'],''))     {
06573                         $conf['pidInList'] = 'this';
06574                 }
06575                 $queryParts = $this->getWhere($table,$conf,TRUE);
06576 
06577                         // Fields:
06578                 $queryParts['SELECT'] = $conf['selectFields'] ? $conf['selectFields'] : '*';
06579 
06580                         // Setting LIMIT:
06581                 if ($conf['max'] || $conf['begin']) {
06582                         $error=0;
06583 
06584                                 // Finding the total number of records, if used:
06585                         if (strstr(strtolower($conf['begin'].$conf['max']),'total'))    {
06586                                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', $table, $queryParts['WHERE'], $queryParts['GROUPBY']);
06587                                 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
06588                                         $GLOBALS['TT']->setTSlogMessage($error);
06589                                 } else {
06590                                         $total = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
06591                                         $conf['max'] = eregi_replace('total', (string)$total, $conf['max']);
06592                                         $conf['begin'] = eregi_replace('total', (string)$total, $conf['begin']);
06593                                 }
06594                         }
06595                         if (!$error)    {
06596                                 $conf['begin'] = t3lib_div::intInRange(ceil($this->calc($conf['begin'])),0);
06597                                 $conf['max'] = t3lib_div::intInRange(ceil($this->calc($conf['max'])),0);
06598                                 if ($conf['begin'] && !$conf['max'])    {
06599                                         $conf['max'] = 100000;
06600                                 }
06601 
06602                                 if ($conf['begin'] && $conf['max'])     {
06603                                         $queryParts['LIMIT'] = $conf['begin'].','.$conf['max'];
06604                                 } elseif (!$conf['begin'] && $conf['max'])      {
06605                                         $queryParts['LIMIT'] = $conf['max'];
06606                                 }
06607                         }
06608                 }
06609 
06610                 if (!$error)    {
06611 
06612                                 // Setting up tablejoins:
06613                         $joinPart='';
06614                         if ($conf['join'])      {
06615                                 $joinPart = 'JOIN ' .trim($conf['join']);
06616                         } elseif ($conf['leftjoin'])    {
06617                                 $joinPart = 'LEFT OUTER JOIN ' .trim($conf['leftjoin']);
06618                         } elseif ($conf['rightjoin'])   {
06619                                 $joinPart = 'RIGHT OUTER JOIN ' .trim($conf['rightjoin']);
06620                         }
06621 
06622                                 // Compile and return query:
06623                         $queryParts['FROM'] = trim($table.' '.$joinPart);
06624                         $query = $GLOBALS['TYPO3_DB']->SELECTquery(
06625                                                 $queryParts['SELECT'],
06626                                                 $queryParts['FROM'],
06627                                                 $queryParts['WHERE'],
06628                                                 $queryParts['GROUPBY'],
06629                                                 $queryParts['ORDERBY'],
06630                                                 $queryParts['LIMIT']
06631                                         );
06632                         return $returnQueryArray ? $queryParts : $query;
06633                 }
06634         }
06635 
06647         function getWhere($table,$conf, $returnQueryArray=FALSE)        {
06648                 global $TCA;
06649 
06650                         // Init:
06651                 $query = '';
06652                 $pid_uid_flag=0;
06653                 $queryParts = array(
06654                         'SELECT' => '',
06655                         'FROM' => '',
06656                         'WHERE' => '',
06657                         'GROUPBY' => '',
06658                         'ORDERBY' => '',
06659                         'LIMIT' => ''
06660                 );
06661 
06662                 if (trim($conf['uidInList']))   {
06663                         $listArr = t3lib_div::intExplode(',',str_replace('this',$GLOBALS['TSFE']->contentPid,$conf['uidInList']));  // str_replace instead of ereg_replace 020800
06664                         if (count($listArr)==1) {
06665                                 $query.=' AND '.$table.'.uid='.intval($listArr[0]);
06666                         } else {
06667                                 $query.=' AND '.$table.'.uid IN ('.implode(',',$GLOBALS['TYPO3_DB']->cleanIntArray($listArr)).')';
06668                         }
06669                         $pid_uid_flag++;
06670                 }
06671                 if (trim($conf['pidInList']))   {
06672                         $listArr = t3lib_div::intExplode(',',str_replace('this',$GLOBALS['TSFE']->contentPid,$conf['pidInList']));      // str_replace instead of ereg_replace 020800
06673                                 // removes all pages which are not visible for the user!
06674                         $listArr = $this->checkPidArray($listArr);
06675                         if (count($listArr))    {
06676                                 $query.=' AND '.$table.'.pid IN ('.implode(',',$GLOBALS['TYPO3_DB']->cleanIntArray($listArr)).')';
06677                                 $pid_uid_flag++;
06678                         } else {
06679                                 $pid_uid_flag=0;                // If not uid and not pid then uid is set to 0 - which results in nothing!!
06680                         }
06681                 }
06682                 if (!$pid_uid_flag)     {               // If not uid and not pid then uid is set to 0 - which results in nothing!!
06683                         $query.=' AND '.$table.'.uid=0';
06684                 }
06685                 if ($where = trim($conf['where']))      {
06686                         $query.=' AND '.$where;
06687                 }
06688 
06689                 if ($conf['languageField'])     {
06690                         if ($GLOBALS['TSFE']->sys_language_contentOL && $TCA[$table] && $TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField']) {
06691                                         // Sys language content is set to zero/-1 - and it is expected that whatever routine processes the output will OVERLAY the records with localized versions!
06692                                 $sys_language_content = '0,-1';
06693                         } else {
06694                                 $sys_language_content = intval($GLOBALS['TSFE']->sys_language_content);
06695                         }
06696                         $query.=' AND '.$conf['languageField'].' IN ('.$sys_language_content.')';
06697                 }
06698 
06699                 $andWhere = trim($this->stdWrap($conf['andWhere'],$conf['andWhere.']));
06700                 if ($andWhere)  {
06701                         $query.=' AND '.$andWhere;
06702                 }
06703 
06704                         // enablefields
06705                 if ($table=='pages')    {
06706                         $query.=' '.$GLOBALS['TSFE']->sys_page->where_hid_del.
06707                                                 $GLOBALS['TSFE']->sys_page->where_groupAccess;
06708                 } else {
06709                         $query.=$this->enableFields($table);
06710                 }
06711 
06712                         // MAKE WHERE:
06713                 if ($query)     {
06714                         $queryParts['WHERE'] = trim(substr($query,4));  // Stripping of " AND"...
06715                         $query = 'WHERE '.$queryParts['WHERE'];
06716                 }
06717 
06718                         // GROUP BY
06719                 if (trim($conf['groupBy']))     {
06720                         $queryParts['GROUPBY'] = trim($conf['groupBy']);
06721                         $query.=' GROUP BY '.$queryParts['GROUPBY'];
06722                 }
06723 
06724                         // ORDER BY
06725                 if (trim($conf['orderBy']))     {
06726                         $queryParts['ORDERBY'] = trim($conf['orderBy']);
06727                         $query.=' ORDER BY '.$queryParts['ORDERBY'];
06728                 }
06729 
06730                         // Return result:
06731                 return $returnQueryArray ? $queryParts : $query;
06732         }
06733 
06742         function checkPidArray($listArr)        {
06743                 $outArr = Array();
06744                 if (is_array($listArr) && count($listArr))      {
06745                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'pages', 'uid IN ('.implode(',',$listArr).')'.$this->enableFields('pages').' AND doktype NOT IN ('.$this->checkPid_badDoktypeList.')');
06746                         if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
06747                                 $GLOBALS['TT']->setTSlogMessage($error.': '.$query,3);
06748                         } else {
06749                                 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
06750                                         $outArr[] = $row['uid'];
06751                                 }
06752                         }
06753                 }
06754                 return $outArr;
06755         }
06756 
06765         function checkPid($uid) {
06766                 $uid = intval($uid);
06767                 if (!isset($this->checkPid_cache[$uid]))        {
06768                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'pages', 'uid='.intval($uid).$this->enableFields('pages').' AND doktype NOT IN ('.$this->checkPid_badDoktypeList.')');
06769                         if ($GLOBALS['TYPO3_DB']->sql_num_rows($res))   {
06770                                 $this->checkPid_cache[$uid] = 1;
06771                         } else {
06772                                 $this->checkPid_cache[$uid] = 0;
06773                         }
06774                 }
06775                 return $this->checkPid_cache[$uid];
06776         }
06777 
06778 
06779 
06780 
06781 
06782 
06783 
06784 
06785 
06786 
06787 
06788 
06789 
06790 
06791 
06792 
06793 
06794 
06795 
06796 
06797 
06798 
06799 
06800 
06801 
06802 
06803         /***********************************************
06804          *
06805          * Frontend editing functions
06806          *
06807          ***********************************************/
06808 
06821         function editPanel($content, $conf, $currentRecord='', $dataArr=array())        {
06822                 global $TCA,$BE_USER;
06823 
06824                         // If no backend user, return immediately
06825                 if (!$GLOBALS['TSFE']->beUserLogin)     { return $content; }
06826 
06827                         // If a backend user is logged in, then go on...
06828                 if ($conf['newRecordFromTable'])        {
06829                         $currentRecord = $conf['newRecordFromTable'].':NEW';
06830                         $conf['allow']='new';
06831                 }
06832 
06833                 if (!$currentRecord)    $currentRecord=$this->currentRecord;
06834                 if (!count($dataArr))   $dataArr=$this->data;
06835                 list($table,$uid) = explode(':',$currentRecord);
06836                 $mayEdit=0;
06837                 $nPid=intval($conf['newRecordInPid']);  // Page ID for new records, 0 if not specified
06838 
06839                         // If no access right to record languages, return immediately
06840                 if ($table === 'pages') {
06841                         $lang = $GLOBALS['TSFE']->sys_language_uid;
06842                 } elseif ($table === 'tt_content')      {
06843                         $lang = $GLOBALS['TSFE']->sys_language_content;
06844                 } elseif ($TCA[$table]['ctrl']['languageField'])        {
06845                         $lang = $currentRecord[$TCA[$table]['ctrl']['languageField']];
06846                 } else {
06847                         $lang = -1;
06848                 }
06849                 if (!$BE_USER->checkLanguageAccess($lang))      { return $content; }
06850 
06851                 if (!$conf['onlyCurrentPid'] || $dataArr['pid']==$GLOBALS['TSFE']->id)  {
06852                                 // Permissions:
06853                         $types = t3lib_div::trimExplode(',',strtolower($conf['allow']),1);
06854                         $allow = array_flip($types);
06855 
06856                         $perms = $GLOBALS['BE_USER']->calcPerms($GLOBALS['TSFE']->page);
06857                         if ($table=='pages')    {
06858                                 if (count($GLOBALS['TSFE']->config['rootLine'])==1)     {unset($allow['move']); unset($allow['hide']); unset($allow['delete']);}        // rootpage!
06859                                 if (!($perms&2))        {unset($allow['edit']);unset($allow['move']);unset($allow['hide']);}
06860                                 if (!($perms&4))        unset($allow['delete']);
06861                                 if (!($perms&8))        unset($allow['new']);
06862                                 if (count($allow))      $mayEdit=1;             // Can only display editbox if there are options in the menu
06863                                 $newUid = $uid;
06864                         } else {
06865                                 $mayEdit = count($allow)&&($perms&16);
06866                                 if ($conf['newRecordFromTable'])        {
06867                                         $newUid=$GLOBALS['TSFE']->id;
06868                                         if ($nPid) $newUid=$nPid;
06869                                 } else {
06870                                         $newUid = -1*$uid;
06871                                 }
06872                         }
06873                 }
06874 
06875                 if ($GLOBALS['TSFE']->displayEditIcons && $table && $mayEdit)   {
06876                         $GLOBALS['TSFE']->set_no_cache();               // Special content is about to be shown, so the cache must be disabled.
06877                         $formName = 'TSFE_EDIT_FORM_'.substr($GLOBALS['TSFE']->uniqueHash(),0,4);
06878                         $formTag = '<form name="'.$formName.'" action="'.htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI')).'" method="post" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'" onsubmit="return TBE_EDITOR_checkSubmit(1);" style="margin: 0 0 0 0;">';
06879                         $sortField = $TCA[$table]['ctrl']['sortby'];
06880                         $labelField = $TCA[$table]['ctrl']['label'];
06881                         $hideField = $TCA[$table]['ctrl']['enablecolumns']['disabled'];
06882                         $blackLine = $conf['line']?'<img src="clear.gif" width="1" height="'.intval($conf['line']).'" alt="" title="" /><br /><table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="black" style="border: 0px;"><tr style="border: 0px;"><td style="border: 0px;"><img src="clear.gif" width="1" height="1" alt="" title="" /></td></tr></table><br />':'';
06883 
06884                         $theCmd='';
06885                         $TSFE_EDIT = t3lib_div::_POST('TSFE_EDIT');
06886                         if (is_array($TSFE_EDIT) && $TSFE_EDIT['record']==$currentRecord && !$TSFE_EDIT['update_close'])        {
06887                                 $theCmd =$TSFE_EDIT['cmd'];
06888                         }
06889 
06890                         switch($theCmd) {
06891                                 case 'edit':
06892                                 case 'new':
06893                                         $tceforms = t3lib_div::makeInstance('t3lib_TCEforms_FE');
06894                                         $tceforms->prependFormFieldNames = 'TSFE_EDIT[data]';
06895                                         $tceforms->prependFormFieldNames_file = 'TSFE_EDIT_file';
06896                                         $tceforms->doSaveFieldName = 'TSFE_EDIT[doSave]';
06897                                         $tceforms->formName = $formName;
06898                                         $tceforms->backPath = TYPO3_mainDir;
06899                                         $tceforms->setFancyDesign();
06900                                         $tceforms->defStyle = 'font-family:Verdana;font-size:10px;';
06901                                         $tceforms->edit_showFieldHelp = $GLOBALS['BE_USER']->uc['edit_showFieldHelp'];
06902                                         $tceforms->helpTextFontTag='<font face="verdana,sans-serif" color="#333333" size="1">';
06903 
06904                                         $trData = t3lib_div::makeInstance('t3lib_transferData');
06905                                         $trData->addRawData = TRUE;
06906                                         $trData->defVals = t3lib_div::_GP('defVals');           // Added without testing - should provide ability to submit default values in frontend editing, in-page.
06907                                         $trData->fetchRecord($table,    ($theCmd=='new'?$newUid:$dataArr['uid']), ($theCmd=='new'?'new':'') );
06908                                         reset($trData->regTableItems_data);
06909                                         $processedDataArr = current($trData->regTableItems_data);
06910                                         $processedDataArr['uid']=$theCmd=='new'?'NEW':$dataArr['uid'];
06911                                         $processedDataArr['pid']=$theCmd=='new'?$newUid:$dataArr['pid'];
06912 
06913                                         $panel='';
06914                                         $buttons = '<input type="image" border="0" name="TSFE_EDIT[update]" src="'.$tceforms->backPath.'gfx/savedok.gif" hspace="2" width="21" height="16" title="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc',1).'" />';
06915                                         $buttons.= '<input type="image" border="0" name="TSFE_EDIT[update_close]" src="'.$tceforms->backPath.'gfx/saveandclosedok.gif" hspace="2" width="21" height="16" title="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.saveCloseDoc',1).'" />';
06916                                         $buttons.= '<input type="image" border="0" name="TSFE_EDIT[cancel]" onclick="'.
06917                                                 htmlspecialchars('window.location.href=\''.t3lib_div::getIndpEnv('REQUEST_URI').'\';return false;').
06918                                                 '" src="'.$tceforms->backPath.'gfx/closedok.gif" hspace="2" width="21" height="16" title="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.closeDoc',1).'" />';
06919                                         $panel.=$tceforms->intoTemplate(array('ITEM'=>$buttons));               // Buttons top
06920                                         $panel.=$tceforms->getMainFields($table,$processedDataArr);
06921 
06922                                         $hiddenF="";
06923                                         if ($theCmd=='new')     {
06924                                                 $hiddenF.='<input type="hidden" name="TSFE_EDIT[data]['.$table.'][NEW][pid]" value="'.$newUid.'" />';
06925                                                 if ($table=='pages')    $hiddenF.='<input type="hidden" name="TSFE_EDIT[data]['.$table.'][NEW][hidden]" value="0" />';          // If a new page is created in front-end, then show it by default!
06926                                         } else {
06927                                                 $hiddenF.='<input type="hidden" name="TSFE_EDIT[record]" value="'.$currentRecord.'" />';
06928                                                 $hiddenF.='<input type="hidden" name="TSFE_EDIT[cmd]" value="edit" />';
06929                                         }
06930                                         $hiddenF.='<input type="hidden" name="TSFE_EDIT[doSave]" value="0" />';
06931                                         $panel.=$tceforms->intoTemplate(array('ITEM'=>$buttons.$hiddenF));      // Buttons AND hidden fields bottom.
06932 
06933                                         $panel=$formTag.$tceforms->wrapTotal($panel,$dataArr,$table).'</form>'.($theCmd!='new'?$blackLine:'');
06934                                         $finalOut = $tceforms->printNeededJSFunctions_top().($conf['edit.']['displayRecord']?$content:'').$panel.($theCmd=='new'?$blackLine:'').$tceforms->printNeededJSFunctions();
06935                                 break;
06936                                 default:
06937                                         $panel = '';
06938                                         if (isset($allow['toolbar']))           $panel.=$GLOBALS['BE_USER']->ext_makeToolBar().'<img src="clear.gif" width="2" height="1" alt="" title="" />';
06939                                         if (isset($allow['edit']))              $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/edit2.gif" width="11" height="12" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_editRecord').'" align="top" alt="" title="" />',$formName,'edit',$dataArr['_LOCALIZED_UID'] ? $table.':'.$dataArr['_LOCALIZED_UID'] : $currentRecord);
06940                                         if (isset($allow['move']) && $sortField && $BE_USER->workspace===0)     {       // Hiding in workspaces because implementation is incomplete
06941                                                 $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/button_up.gif" width="11" height="10" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_moveUp').'" align="top" alt="" title="" />',$formName,'up');
06942                                                 $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/button_down.gif" width="11" height="10" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_moveDown').'" align="top" alt="" title="" />',$formName,'down');
06943                                         }
06944                                         if (isset($allow['hide']) && $hideField && $BE_USER->workspace===0 && !$dataArr['_LOCALIZED_UID'])      {       // Hiding in workspaces because implementation is incomplete, Hiding for localizations because it is unknown what should be the function in that case
06945                                                 if ($dataArr[$hideField])       {
06946                                                         $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/button_unhide.gif" width="11" height="10" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_unhide').'" align="top" alt="" title="" />',$formName,'unhide');
06947                                                 } else {
06948                                                         $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/button_hide.gif" width="11" height="10" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_hide').'" align="top" alt="" title="" />',$formName,'hide','',$BE_USER->extGetLL('p_hideConfirm'));
06949                                                 }
06950                                         }
06951                                         if (isset($allow['new']))       {
06952                                                 if ($table=='pages')    {
06953                                                         $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/new_page.gif" width="13" height="12" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_newSubpage').'" align="top" alt="" title="" />',$formName,'new',$currentRecord,'',$nPid);
06954                                                 } else {
06955                                                         $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/new_record.gif" width="16" height="12" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_newRecordAfter').'" align="top" alt="" title="" />',$formName,'new',$currentRecord,'',$nPid);
06956                                                 }
06957                                         }
06958                                         if (isset($allow['delete']) && $BE_USER->workspace===0 && !$dataArr['_LOCALIZED_UID'])          {       // Hiding in workspaces because implementation is incomplete, Hiding for localizations because it is unknown what should be the function in that case
06959                                                 $panel.=$this->editPanelLinkWrap('<img src="'.TYPO3_mainDir.'gfx/delete_record.gif" width="12" height="12" vspace="1" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_delete').'" align="top" alt="" title="" />',$formName,'delete','',$BE_USER->extGetLL('p_deleteConfirm'));
06960                                         }
06961 
06962                                                 //      Final
06963                                         $labelTxt = $this->stdWrap($conf['label'],$conf['label.']);
06964                                         $panel='
06965 
06966                                                                 <!-- BE_USER Edit Panel: -->
06967                                                                 '.$formTag.'
06968                                                                         <input type="hidden" name="TSFE_EDIT[cmd]" value="" />
06969                                                                         <input type="hidden" name="TSFE_EDIT[record]" value="'.$currentRecord.'" />
06970                                                                         <table border="0" cellpadding="0" cellspacing="0" border="1" bordercolor="black" class="typo3-editPanel">
06971                                                                                 <tr>
06972                                                                                         <td nowrap="nowrap" bgcolor="#ABBBB4" class="typo3-editPanel-controls">'.$panel.'</td>'.($labelTxt?'
06973                                                                                         <td nowrap="nowrap" bgcolor="#F6F2E6" class="typo3-editPanel-label"><font face="verdana" size="1" color="black">&nbsp;'.sprintf($labelTxt,htmlspecialchars(t3lib_div::fixed_lgd($dataArr[$labelField],50))).'&nbsp;</font></td>':'').'
06974                                                                                 </tr>
06975                                                                         </table>
06976                                                                 </form>';
06977                                                 // wrap the panel
06978                                         if ($conf['innerWrap']) $panel = $this->wrap($panel,$conf['innerWrap']);
06979                                         if ($conf['innerWrap.']) $panel = $this->stdWrap($panel,$conf['innerWrap.']);
06980                                                 // add black line:
06981                                         $panel.=$blackLine;
06982                                                 // wrap the complete panel
06983                                         if ($conf['outerWrap']) $panel = $this->wrap($panel,$conf['outerWrap']);
06984                                         if ($conf['outerWrap.']) $panel = $this->stdWrap($panel,$conf['outerWrap.']);
06985                                         $finalOut = $content.$panel;
06986                                 break;
06987                         }
06988 
06989                         if ($conf['previewBorder']) $finalOut = $this->editPanelPreviewBorder($table,$dataArr,$finalOut,$conf['previewBorder'],$conf['previewBorder.']);
06990                         return $finalOut;
06991                 } else {
06992                         return $content;
06993                 }
06994         }
06995 
07008         function editIcons($content,$params, $conf=array(), $currentRecord='', $dataArr=array(),$addUrlParamStr='')     {
07009                 global $BE_USER;
07010 
07011                         // If no backend user, return immediately
07012                 if (!$GLOBALS['TSFE']->beUserLogin)             {return $content;}
07013 
07014                         // Check incoming params:
07015                 $rParts = explode(':',$currentRecord?$currentRecord:$this->currentRecord);
07016 
07017                 list($table,$fieldList)=t3lib_div::trimExplode(':',$params,1);
07018                 if (!$fieldList)        {
07019                         $fieldList=$table;
07020                         $table=$rParts[0];
07021                 } else {
07022                         if ($table!=$rParts[0]) return $content;        // If the table is set as the first parameter, and does not match the table of the current record, then just return.
07023                 }
07024 
07025                         // Check if allowed to edit content:
07026                 $mayEdit=0;
07027                 $dataArr=count($dataArr)?$dataArr:$this->data;  // If pages-record, should contain correct perms-field, if not, should contain correct pid value.
07028 
07029                 $editUid = $dataArr['_LOCALIZED_UID'] ? $dataArr['_LOCALIZED_UID'] : $rParts[1];
07030 
07031                 if ($table=='pages')    {
07032                         $mayEdit = $BE_USER->isAdmin()||$BE_USER->doesUserHaveAccess($dataArr,2)?1:0;
07033                 } else {
07034                         $mayEdit = $BE_USER->isAdmin()||$BE_USER->doesUserHaveAccess(t3lib_BEfunc::getRecord('pages',$dataArr['pid']),16)?1:0;
07035                 }
07036 
07037                         // Check if allowed to edit language
07038                 if ($mayEdit)   {
07039                         if ($table === 'pages') {
07040                                 $lang = $GLOBALS['TSFE']->sys_language_uid;
07041                         } elseif ($table === 'tt_content')      {
07042                                 $lang = $GLOBALS['TSFE']->sys_language_content;
07043                         } elseif ($TCA[$table]['ctrl']['languageField'])        {
07044                                 $lang = $currentRecord[$TCA[$table]['ctrl']['languageField']];
07045                         } else {
07046                                 $lang = -1;
07047                         }
07048                         if (!$BE_USER->checkLanguageAccess($lang))      { $mayEdit = 0; }
07049                 }
07050 
07051                 if ($GLOBALS['TSFE']->displayFieldEditIcons && $table && $mayEdit && $fieldList)        {
07052                         $GLOBALS['TSFE']->set_no_cache();               // Special content is about to be shown, so the cache must be disabled.
07053                         $style = $conf['styleAttribute'] ? ' style="'.htmlspecialchars($conf['styleAttribute']).'"' : '';
07054                         $iconTitle = $this->stdWrap($conf['iconTitle'],$conf['iconTitle.']);
07055                         $iconImg = $conf['iconImg'] ? $conf['iconImg'] : '<img src="'.TYPO3_mainDir.'gfx/edit_fe.gif" width="11" height="12" border="0" align="top" title="'.t3lib_div::deHSCentities(htmlspecialchars($iconTitle)).'"'.$style.' class="frontEndEditIcons" alt="" />';
07056                         $nV=t3lib_div::_GP('ADMCMD_view')?1:0;
07057                         $adminURL = t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir;
07058                         $icon = $this->editPanelLinkWrap_doWrap($iconImg, $adminURL.'alt_doc.php?edit['.$rParts[0].']['.$editUid.']=edit&columnsOnly='.rawurlencode($fieldList).'&noView='.$nV.$addUrlParamStr,implode(':',$rParts));
07059                         if ($conf['beforeLastTag']<0)   {
07060                                 $content=$icon.$content;
07061                         } elseif ($conf['beforeLastTag']>0)     {
07062                                 $cBuf = rtrim($content);
07063                                 $securCount=30;
07064                                 while($securCount && substr($cBuf,-1)=='>' && substr($cBuf,-4)!='</a>') {
07065                                         $cBuf = rtrim(ereg_replace('<[^<]*>$','',$cBuf));
07066                                         $securCount--;
07067                                 }
07068                                 $content = strlen($cBuf)&&$securCount ? substr($content,0,strlen($cBuf)).$icon.substr($content,strlen($cBuf)) : $content=$icon.$content;
07069                         } else {
07070                                 $content.=$icon;
07071                         }
07072                 }
07073                 return $content;
07074         }
07075 
07090         function editPanelLinkWrap($string,$formName,$cmd,$currentRecord='',$confirm='',$nPid='')       {
07091                 $eFONPage = $GLOBALS['BE_USER']->uc['TSFE_adminConfig']['edit_editFormsOnPage'] && $GLOBALS['BE_USER']->workspace===0;  // Editing forms on page only supported in Live workspace (because of incomplete implementation)
07092                 $nV=t3lib_div::_GP('ADMCMD_view')?1:0;
07093                 $adminURL = t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir;
07094 
07095                 if ($cmd=='edit' && !$eFONPage) {
07096                         $rParts = explode(':',$currentRecord);
07097                         $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'alt_doc.php?edit['.$rParts[0].']['.$rParts[1].']=edit&noView='.$nV,$currentRecord);
07098                 } elseif ($cmd=='new' && !$eFONPage)    {
07099                         $rParts = explode(':',$currentRecord);
07100                         if ($rParts[0]=='pages')        {
07101                                 $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'db_new.php?id='.$rParts[1].'&pagesOnly=1',$currentRecord);
07102                         } else {
07103                                 if (!intval($nPid))     {
07104                                         $nPid = t3lib_div::testInt($rParts[1]) ? -$rParts[1] : $GLOBALS['TSFE']->id;
07105                                 }
07106                                 $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'alt_doc.php?edit['.$rParts[0].']['.$nPid.']=new&noView='.$nV,$currentRecord);
07107                         }
07108                 } else {
07109                         if ($confirm && $GLOBALS['BE_USER']->jsConfirmation(8)) {
07110                                 $cf1="if (confirm(".t3lib_div::quoteJSvalue($confirm, true).")){";                      // Gets htmlspecialchared later
07111                                 $cf2='}';
07112                         } else {
07113                                 $cf1=$cf2='';
07114                         }
07115                         $out='<a href="#" onclick="'.
07116                                 htmlspecialchars($cf1.'document.'.$formName.'[\'TSFE_EDIT[cmd]\'].value=\''.$cmd.'\'; document.'.$formName.'.submit();'.$cf2.' return false;').
07117                                 '">'.$string.'</a>';
07118                 }
07119                 return $out;
07120         }
07121 
07132         function editPanelLinkWrap_doWrap($string,$url,$currentRecord)  {
07133                 if ($GLOBALS['BE_USER']->uc['TSFE_adminConfig']['edit_editNoPopup'] || $GLOBALS['BE_USER']->extAdminConfig['module.']['edit.']['forceNoPopup']) {
07134                         $retUrl = t3lib_div::getIndpEnv('REQUEST_URI');
07135                         $rParts = explode(':',$currentRecord);
07136                         if ($rParts[0]=='tt_content' && $this->parentRecordNumber>2)    {       // This parentRecordNumber is used to make sure that only elements 3- of ordinary content elements makes a 'anchor' jump down the page.
07137                                 $retUrl.='#'.$rParts[1];
07138                         }
07139                         return '<a href="'.htmlspecialchars($url.'&returnUrl='.rawurlencode($retUrl)).'">'.$string.'</a>';
07140                 } else {
07141                         return '<a href="#" onclick="'.
07142                                 htmlspecialchars('vHWin=window.open(\''.$url.'&returnUrl=close.html\',\'FEquickEditWindow\',\''.($GLOBALS['BE_USER']->uc['edit_wideDocument']?'width=690,height=500':'width=540,height=400').',status=0,menubar=0,scrollbars=1,resizable=1\');vHWin.focus();return false;').
07143                                 '">'.$string.'</a>';
07144                 }
07145         }
07146 
07160         function editPanelPreviewBorder($table,$row,$content,$thick,$conf=array())      {
07161                 if ($this->isDisabled($table,$row))     {
07162                         $thick = t3lib_div::intInRange($thick,1,100);
07163                         $color = $conf['color'] ? $conf['color'] : '#cccccc';
07164                         if ($conf['innerWrap']) $content = $this->wrap($content,$conf['innerWrap']);
07165                         if ($conf['innerWrap.'])        $content = $this->stdWrap($content,$conf['innerWrap.']);
07166                         $content='<table class="typo3-editPanel-previewBorder" border="'.$thick.'" cellpadding="0" cellspacing="0" bordercolor="'.$color.'" width="100%"><tr><td>'.$content.'</td></tr></table>';
07167                         if ($conf['outerWrap']) $content = $this->wrap($content,$conf['outerWrap']);
07168                         if ($conf['outerWrap.'])        $content = $this->stdWrap($panel,$conf['outerWrap.']);
07169                 }
07170                 return $content;
07171         }
07172 
07182         function isDisabled($table,$row)        {
07183                 global $TCA;
07184                 if (
07185                         ($TCA[$table]['ctrl']['enablecolumns']['disabled'] && $row[$TCA[$table]['ctrl']['enablecolumns']['disabled']]) ||
07186                         ($TCA[$table]['ctrl']['enablecolumns']['fe_group'] && $GLOBALS['TSFE']->simUserGroup && $row[$TCA[$table]['ctrl']['enablecolumns']['fe_group']]==$GLOBALS['TSFE']->simUserGroup) ||
07187                         ($TCA[$table]['ctrl']['enablecolumns']['starttime'] && $row[$TCA[$table]['ctrl']['enablecolumns']['starttime']]>time() ) ||
07188                         ($TCA[$table]['ctrl']['enablecolumns']['endtime'] && $row[$TCA[$table]['ctrl']['enablecolumns']['endtime']] && $row[$TCA[$table]['ctrl']['enablecolumns']['endtime']]<time())
07189                 )       return true;
07190         }
07191 }
07192 
07193 
07194 
07195 
07196 
07197 
07198 
07199 
07200 
07201 
07202 
07203 
07204 
07205 
07213 class tslib_frameset {
07214 
07223         function make($setup)   {
07224                 $content = '';
07225                 if (is_array($setup))   {
07226                         $sKeyArray=t3lib_TStemplate::sortedKeyList($setup);
07227                         reset($sKeyArray);
07228                         while(list(,$theKey)=each($sKeyArray))  {
07229                                 $theValue=$setup[$theKey];
07230                                 if (intval($theKey) && $conf=$setup[$theKey.'.'])       {
07231                                         switch($theValue)       {
07232                                                 case 'FRAME':
07233                                                         $typeNum = intval($GLOBALS['TSFE']->tmpl->setup[$conf['obj'].'.']['typeNum']);
07234                                                         if (!$conf['src'] && !$typeNum)         {
07235                                                                 $typeNum = -1;
07236                                                         }
07237                                                         $content.='<frame'.$this->frameParams($conf,$typeNum).' />'.chr(10);
07238                                                 break;
07239                                                 case 'FRAMESET':
07240                                                         $frameset = t3lib_div::makeInstance('tslib_frameset');
07241                                                         $content.=$frameset->make($conf).chr(10);
07242                                                 break;
07243                                         }
07244                                 }
07245                         }
07246                         return '<frameset'.$this->framesetParams($setup).'>'.chr(10).$content.'</frameset>';
07247                 }
07248         }
07249 
07260         function frameParams($setup, $typeNum)  {
07261                 $paramStr = '';
07262                 $name = $setup['obj'];
07263 
07264                 /*
07265                 if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments'])      {
07266                         $theCompURL='';
07267                         $theCompURL.=$GLOBALS['TSFE']->makeSimulFileName($GLOBALS['TSFE']->page['title'],
07268                                 ($GLOBALS['TSFE']->page['alias'] ? $GLOBALS['TSFE']->page['alias'] : $GLOBALS['TSFE']->page['uid']),
07269                                 intval($typeNum));
07270                         if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments']=='PATH_INFO') {
07271                                 $theCompURL = str_replace('.','/',$theCompURL);
07272                                 $theCompURL = 'index.php/'.$theCompURL.'/?';
07273                         } else {
07274                                 $theCompURL.='.html?';
07275                         }
07276                 } else {
07277                         $theCompURL = $GLOBALS['TSFE']->config['mainScript'].'?id='.$GLOBALS['TSFE']->page['uid'].'&type='.intval($typeNum);
07278                 }
07279                         // Add absRefPrefix if exists.
07280                 $finalURL = $GLOBALS['TSFE']->absRefPrefix.$theCompURL.($setup['options']?'&'.$setup['options']:'').$GLOBALS['TSFE']->linkVars.$GLOBALS['TSFE']->getMethodUrlIdToken.($GLOBALS['TSFE']->no_cache?'&no_cache=1':'');
07281                 $finalURL = $GLOBALS['TSFE']->tmpl->removeQueryString($finalURL);
07282                 */
07283 
07284                         // From 3.6.0, use "linkData" for ALL links:
07285                 $LD = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page,'',$GLOBALS['TSFE']->no_cache,'','',($setup['options']?'&'.$setup['options']:'').$GLOBALS['TSFE']->cObj->getClosestMPvalueForPage($GLOBALS['TSFE']->page['uid']), intval($typeNum));
07286                 $finalURL = $LD['totalURL'];
07287 
07288 
07289                 if ($setup['src']) {$paramStr.=' src="'.htmlspecialchars($setup['src']).'"';} else {$paramStr.=' src="'.htmlspecialchars($finalURL).'"';}
07290                 if ($setup['name']) {$paramStr.=' name="'.$setup['name'].'"';} else {$paramStr.=' name="'.$name.'"';}
07291                 if ($setup['params']) {$paramStr.=' '.$setup['params'];}
07292                 return $paramStr;
07293         }
07294 
07303         function framesetParams($setup) {
07304                 $paramStr = '';
07305                 if ($setup['cols']) {           $paramStr.=' cols="'.$setup['cols'].'"';        }
07306                 if ($setup['rows']) {           $paramStr.=' rows="'.$setup['rows'].'"';        }
07307                 if ($setup['params']) { $paramStr.=' '.$setup['params'];        }
07308                 return $paramStr;
07309         }
07310 }
07311 
07312 
07313 
07314 
07315 
07316 
07317 
07318 
07319 
07320 
07321 
07322 
07323 
07324 
07325 
07326 
07327 
07336 class tslib_tableOffset {
07337         var $tableParams = 'border="0" cellspacing="0" cellpadding="0"';
07338         var $default_tableParams = 'border="0" cellspacing="0" cellpadding="0"';
07339         var $tdParams = ' width="99%" valign="top"';
07340 
07348         function start($content,$offset)        {
07349                 $valPairs = t3lib_div::intExplode(',',$offset.',,,,,');
07350 
07351                 if ($valPairs[0] || $valPairs[1] || $valPairs[2] || $valPairs[3] || $valPairs[4] || $valPairs[5])       {
07352                                 // If width is defined AND there has been no change to the default table params, then extend them to a tablewidth of 1
07353                         if ($valPairs[4] && $this->default_tableParams==$this->tableParams)     {$this->tableParams.=' width="1"';}
07354                                 // Init:
07355                         $this->begin = chr(10).'<table '.$this->tableParams.'>';
07356                         $this->end = '</table>';
07357                         $rows=array();
07358                         $widthImg = '';
07359                         $heightImg = '';
07360                                 // If width is required, set so bottom column will display for sure
07361                         if ($valPairs[4])       {
07362                                 if (!$valPairs[3])      $valPairs[3]=1;
07363                                 $widthImg='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$valPairs[4].'" height="1" alt="" title="" />';
07364                         }
07365                                 // If height is required, set so right column will display for sure
07366                         if ($valPairs[5])       {
07367                                 if (!$valPairs[2])      $valPairs[2]=1;
07368                                 $valPairs[2]=1; $heightImg='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$valPairs[5].'" alt="" title="" />';
07369                         }
07370 
07371                                 // First row:
07372                         if ($valPairs[1])       {       // top
07373                                 $rows[1].= '<tr>';
07374                                 $rows[1].= '<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.($valPairs[0]?$valPairs[0]:1).'" height="'.$valPairs[1].'" alt="" title="" /></td>';
07375                                 if ($valPairs[0])       $rows[1].= '<td></td>';
07376                                 if ($valPairs[2])       $rows[1].= '<td></td>';
07377                                 $rows[1].= '</tr>';
07378                         }
07379                                 // Middle row:
07380                         $rows[2].= '<tr>';
07381                         if ($valPairs[0])       {$rows[2].= $valPairs[1] ? '<td></td>' : '<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$valPairs[0].'" height="1" alt="" title="" /></td>';}
07382                         $rows[2].= '<td'.$this->tdParams.'>'.$content.'</td>';
07383                         if ($valPairs[2])       {$rows[2].= $valPairs[3] ? '<td>'.$heightImg.'</td>' : '<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$valPairs[2].'" height="'.($valPairs[5]?$valPairs[5]:1).'" alt="" title="" /></td>';}
07384                         $rows[2].= '</tr>';
07385                                 // Bottom row:
07386                         if ($valPairs[3])       {       // bottom
07387                                 $rows[3].= '<tr>';
07388                                 if ($valPairs[0])       $rows[3].= '<td></td>';
07389                                 if ($valPairs[2])       $rows[3].= '<td>'.$widthImg.'</td>';
07390                                 $rows[3].= '<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.($valPairs[2]?$valPairs[2]:($valPairs[4]?$valPairs[4]:1)).'" height="'.$valPairs[3].'" alt="" title="" /></td>';
07391                                 $rows[3].= '</tr>';
07392                         }
07393                         return $this->begin.implode('',$rows).$this->end;
07394                 } else return $content;
07395         }
07396 }
07397 
07398 
07399 
07400 
07401 
07402 
07403 
07404 
07405 
07406 
07407 
07408 
07409 
07410 
07411 
07412 
07413 
07414 
07415 
07416 
07417 
07426 class tslib_controlTable        {
07427         var $offX = 0;          // offset, x
07428         var $offY = 0;          // offset, y
07429 
07430         var $tm = '';           // top menu
07431         var $lm = '';           // left menu
07432         var $rm = '';           // right menu
07433         var $bm = '';           // bottom menu
07434         var $content = '';      // content
07435 
07436         var $tmTDparams = 'valign="top"';               // top menu TDparams
07437         var $lmTDparams = 'valign="top"';               // left menu TDparams
07438         var $rmTDparams = 'valign="top"';               // right menu TDparams
07439         var $bmTDparams = 'valign="top"';               // bottom menu TDparams
07440         var $contentTDparams = 'valign="top"';  // content TDparams
07441 
07442         var $cMl = 1;           // content margin, left
07443         var $cMr = 1;           // content margin, right
07444         var $cMt = 0;           // content margin, top
07445         var $cMb = 1;           // content margin, bottom
07446 
07447         var $contentW = 0;      // Places a little gif-spacer in the bottom of the content frame
07448 
07449         var $tableParams = 'border="0" cellspacing="0" cellpadding="0"';
07450 
07461         function start($offset,$cMargins)       {
07462                 $offArr = t3lib_div::intExplode(',',$offset);
07463                 $cMargArr = t3lib_div::intExplode(',',$cMargins);
07464 
07465                 $cols = 0;
07466                 $rows = 0;
07467 
07468                 if ($this->lm) $cols++;
07469                 if ($this->rm) $cols++;
07470                 if ($cMargArr[0]) $cols++;
07471                 if ($cMargArr[2]) $cols++;
07472                 if ($cMargArr[1]||$cMargArr[3]||$this->tm||$this->bm||$this->content||$this->contentW) $cols++;
07473 
07474                 if ($cMargArr[1]) $rows++;
07475                 if ($cMargArr[3]) $rows++;
07476                 if ($this->tm) $rows++;
07477                 if ($this->bm) $rows++;
07478                 if ($this->content) $rows++;
07479                 if ($this->contentW) $rows++;
07480                 if (!$rows && $cols) $rows=1;           // If there are no rows in the middle but still som columns...
07481 
07482                 if ($rows&&$cols)       {
07483                         $res = chr(10).'<table '.$this->tableParams.'>';
07484                                 // top offset:
07485                         if ($offArr[1]) {
07486                                 $xoff = $offArr[0] ? 1 : 0;
07487                                 if ($cols+$xoff > 1)    {$colspan =' colspan="'.($cols+$xoff).'"';}
07488                                 $res.= '<tr><td'.$colspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$offArr[1].'" alt="" title="" /></td></tr>';
07489                         }
07490                                 // The rows:
07491                         if ($rows>1)    {$rowspan =' rowspan="'.($rows).'"';}
07492                         $res.= '<tr>';
07493                         if ($offArr[0]) {       $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$offArr[0].'" alt="" title="" /></td>';       }
07494                         if ($this->lm)  {       $res.='<td'.$rowspan.' '.$this->lmTDparams.'>'.$this->lm.'</td>';               }
07495                         if ($cMargArr[0])       {       $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$cMargArr[0].'" alt="" title="" /></td>';             }
07496                                 // content...
07497 
07498                         $middle=Array();
07499                         if ($this->tm)  {       $middle[]='<td '.$this->tmTDparams.'>'.$this->tm.'</td>';}
07500                         if ($cMargArr[1])       {       $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$cMargArr[1].'" alt="" title="" /></td>';}
07501                         if ($this->content)     {       $middle[]='<td '.$this->contentTDparams.'>'.$this->content.'</td>';}
07502                         if ($cMargArr[3])       {       $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$cMargArr[3].'" alt="" title="" /></td>';}
07503                         if ($this->bm)  {       $middle[]='<td '.$this->bmTDparams.'>'.$this->bm.'</td>';}
07504                         if ($this->contentW)    {       $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$this->contentW.'" alt="" title="" /></td>';}
07505                         if (isset($middle[0]))  {$res.=$middle[0];}
07506 
07507                                 // Left of content
07508                         if ($cMargArr[2])       {       $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$cMargArr[2].'" alt="" title="" /></td>';             }
07509                         if ($this->rm)  {       $res.='<td'.$rowspan.' '.$this->rmTDparams.'>'.$this->rm.'</td>';               }
07510                         $res.= '</tr>';
07511 
07512                                 // More than the two rows
07513                         $mCount = count($middle);
07514                         for($a=1;$a<$mCount;$a++)       {
07515                                 $res.='<tr>'.$middle[$a].'</tr>';
07516                         }
07517                         $res.='</table>';
07518                         return $res;
07519                 }
07520         }
07521 }
07522 
07523 
07524 
07525 
07526 
07527 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php'])   {
07528         include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php']);
07529 }
07530 ?>