00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00212
00213 require_once(PATH_t3lib."class.t3lib_parsehtml.php");
00214
00215
00216 if(t3lib_extMgm::isLoaded('obts')) {
00217 require_once(t3lib_extMgm::extPath('obts').'_tsobject/_tso.php');
00218 }
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00250 class tslib_cObj {
00251 var $align = Array ('center', 'right', 'left');
00252 var $caseConvStrings = array(
00253 'áéúíâêûôîæøåäöü',
00254 'ÁÉÚÍÄËÜÖÏÆØÅÄÖÜ'
00255 );
00256
00267 var $image_compression = Array(
00268 10 => Array('params'=>'', 'ext'=>'gif'),
00269 11 => Array('params'=>'-colors 128', 'ext'=>'gif'),
00270 12 => Array('params'=>'-colors 64', 'ext'=>'gif'),
00271 13 => Array('params'=>'-colors 32', 'ext'=>'gif'),
00272 14 => Array('params'=>'-colors 16', 'ext'=>'gif'),
00273 15 => Array('params'=>'-colors 8', 'ext'=>'gif'),
00274
00275 30 => Array('params'=>'-colors 256', 'ext'=>'png'),
00276 31 => Array('params'=>'-colors 128', 'ext'=>'png'),
00277 32 => Array('params'=>'-colors 64', 'ext'=>'png'),
00278 33 => Array('params'=>'-colors 32', 'ext'=>'png'),
00279 34 => Array('params'=>'-colors 16', 'ext'=>'png'),
00280 35 => Array('params'=>'-colors 8', 'ext'=>'png'),
00281 39 => Array('params'=>'', 'ext'=>'png'),
00282
00283 20 => Array('params'=>'-quality 100', 'ext'=>'jpg'),
00284 21 => Array('params'=>'-quality 90', 'ext'=>'jpg'),
00285 22 => Array('params'=>'-quality 80', 'ext'=>'jpg'),
00286 23 => Array('params'=>'-quality 70', 'ext'=>'jpg'),
00287 24 => Array('params'=>'-quality 60', 'ext'=>'jpg'),
00288 25 => Array('params'=>'-quality 50', 'ext'=>'jpg'),
00289 26 => Array('params'=>'-quality 40', 'ext'=>'jpg'),
00290 27 => Array('params'=>'-quality 30', 'ext'=>'jpg'),
00291 28 => Array('params'=>'-quality 20', 'ext'=>'jpg')
00292 );
00293
00299 var $image_effects = Array(
00300 1 => '-rotate 90',
00301 2 => '-rotate 270',
00302 3 => '-rotate 180',
00303 10 => '-colorspace GRAY',
00304 11 => '-sharpen 70',
00305 20 => '-normalize',
00306 23 => '-contrast',
00307 25 => '-gamma 1.3',
00308 26 => '-gamma 0.8'
00309 );
00310
00318 var $data = Array();
00319 var $oldData = Array();
00320 var $alternativeData ='';
00321 var $parameters = Array();
00322 var $currentValKey = 'currentValue_kidjls9dksoje';
00323 var $currentRecord = '';
00324 var $currentRecordTotal = 0;
00325 var $currentRecordNumber = 0;
00326 var $parentRecordNumber = 0;
00327 var $parentRecord = array();
00328 var $regObj;
00329
00330
00331 var $INT_include=0;
00332 var $checkPid_cache = Array();
00333 var $checkPid_badDoktypeList = '255';
00334 var $lastTypoLinkUrl='';
00335 var $lastTypoLinkTarget='';
00336 var $substMarkerCache=array();
00337 var $recordRegister=array();
00338
00348 function start($data,$table='') {
00349 $this->data = $data;
00350 $this->currentRecord = $table ? $table.':'.$this->data['uid'] : '';
00351 $this->parameters = Array();
00352 }
00353
00363 function setParent($data,$currentRecord) {
00364 $this->parentRecord=array('data'=>$data, 'currentRecord'=>$currentRecord);
00365 }
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00388 function getCurrentVal() {
00389 return $this->data[$this->currentValKey];
00390 }
00391
00399 function setCurrentVal($value) {
00400 $this->data[$this->currentValKey] = $value;
00401 }
00402
00412 function cObjGet($setup,$addKey='') {
00413 if (is_array($setup)) {
00414 $sKeyArray=t3lib_TStemplate::sortedKeyList($setup);
00415 $content ='';
00416 foreach($sKeyArray as $theKey) {
00417 $theValue=$setup[$theKey];
00418 if (intval($theKey) && !strstr($theKey,'.')) {
00419 $conf=$setup[$theKey.'.'];
00420 $content.=$this->cObjGetSingle($theValue,$conf,$addKey.$theKey);
00421 }
00422 }
00423 return $content;
00424 }
00425 }
00426
00436 function cObjGetSingle($name,$conf,$TSkey='__') {
00437 $content='';
00438
00439 $GLOBALS['TSFE']->cObjectDepthCounter--;
00440 if ($GLOBALS['TSFE']->cObjectDepthCounter>0) {
00441 $name = trim($name);
00442 if ($GLOBALS['TT']->LR) $GLOBALS['TT']->push($TSkey, $name);
00443
00444
00445 if (substr($name,0,1)=='<') {
00446 $key = trim(substr($name,1));
00447 $cF = t3lib_div::makeInstance('t3lib_TSparser');
00448
00449 $old_conf=$conf;
00450 list($name, $conf) = $cF->getVal($key,$GLOBALS['TSFE']->tmpl->setup);
00451 if (is_array($old_conf) && count($old_conf)) {
00452 $conf = $this->joinTSarrays($conf,$old_conf);
00453
00454 }
00455
00456 $GLOBALS['TT']->incStackPointer();
00457 $content.=$this->cObjGetSingle($name,$conf,$key);
00458 $GLOBALS['TT']->decStackPointer();
00459 } else {
00460
00461
00462 if(t3lib_extMgm::isLoaded('obts') && isset($GLOBALS['OBTS']['tso_list'][$name])) {
00463 $content.= obts_dtutil::renderDatatypeContent($name, $GLOBALS['OBTS']['tso_list'][$name], $conf, $this);
00464 } else {
00465
00466 switch($name) {
00467 case 'COBJ_ARRAY':
00468 case 'COA':
00469 $content.=$this->COBJ_ARRAY($conf);
00470 break;
00471 case 'COA_INT':
00472 $content.=$this->COBJ_ARRAY($conf,'INT');
00473 break;
00474 case 'HTML':
00475 $content.=$this->HTML($conf);
00476 break;
00477 case 'TEXT':
00478 $content.=$this->TEXT($conf);
00479 break;
00480 case 'CLEARGIF':
00481 $content.=$this->CLEARGIF($conf);
00482 break;
00483 case 'FILE':
00484 $content.=$this->FILE($conf);
00485 break;
00486 case 'IMAGE':
00487 $content.=$this->IMAGE($conf);
00488 break;
00489 case 'IMG_RESOURCE':
00490 $content.=$this->IMG_RESOURCE($conf);
00491 break;
00492 case 'IMGTEXT':
00493 $content.=$this->IMGTEXT($conf);
00494 break;
00495 case 'CONTENT':
00496 $content.=$this->CONTENT($conf);
00497 break;
00498 case 'RECORDS':
00499 $content.=$this->RECORDS($conf);
00500 break;
00501 case 'HMENU':
00502 $content.=$this->HMENU($conf);
00503 break;
00504 case 'CTABLE':
00505 $content.=$this->CTABLE($conf);
00506 break;
00507 case 'OTABLE':
00508 $content.=$this->OTABLE($conf);
00509 break;
00510 case 'COLUMNS':
00511 $content.=$this->COLUMNS($conf);
00512 break;
00513 case 'HRULER':
00514 $content.=$this->HRULER($conf);
00515 break;
00516 case 'CASE':
00517 $content.=$this->CASEFUNC($conf);
00518 break;
00519 case 'LOAD_REGISTER':
00520 case 'RESTORE_REGISTER':
00521 $this->LOAD_REGISTER($conf,$name);
00522 break;
00523 case 'FORM':
00524 $content.=$this->FORM($conf);
00525 break;
00526 case 'SEARCHRESULT':
00527 $content.=$this->SEARCHRESULT($conf);
00528 break;
00529 case 'PHP_SCRIPT':
00530 $content.=$this->PHP_SCRIPT($conf);
00531 break;
00532 case 'PHP_SCRIPT_EXT':
00533 $content.=$this->PHP_SCRIPT($conf,'EXT');
00534 break;
00535 case 'PHP_SCRIPT_INT':
00536 $content.=$this->PHP_SCRIPT($conf,'INT');
00537 break;
00538 case 'USER':
00539 $content.=$this->USER($conf);
00540 break;
00541 case 'USER_INT':
00542 $content.=$this->USER($conf,'INT');
00543 break;
00544 case 'TEMPLATE':
00545 $content.=$this->TEMPLATE($conf);
00546 break;
00547 case 'EDITPANEL':
00548 if ($GLOBALS['TSFE']->beUserLogin) {$content.=$this->editPanel($content, $conf);}
00549 break;
00550 case 'MULTIMEDIA':
00551 $content.=$this->MULTIMEDIA($conf);
00552 break;
00553 }
00554 }
00555 }
00556 if ($GLOBALS['TT']->LR) $GLOBALS['TT']->pull($content);
00557 }
00558
00559 $GLOBALS['TSFE']->cObjectDepthCounter++;
00560 return $content;
00561 }
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00582 function HTML($conf) {
00583 return $this->stdWrap($conf['value'],$conf['value.']);
00584 }
00585
00593 function TEXT($conf) {
00594 return $this->stdWrap($conf['value'],$conf);
00595 }
00596
00604 function CLEARGIF($conf) {
00605 $w = $this->stdWrap($conf['width'],$conf['width.']);
00606 $h = $this->stdWrap($conf['height'],$conf['height.']);
00607 $w = $w ? $w : 1;
00608 $h = $h ? $h : 1;
00609 $wrap = $conf['wrap'] ? $conf['wrap'] : '|<br />';
00610 $theValue = $this->wrap('<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$w.'" height="'.$h.'" border="0" alt="" title="" />', $wrap);
00611
00612 return $this->stdWrap($theValue,$conf['stdWrap.']);
00613 }
00614
00623 function COBJ_ARRAY($conf,$ext='') {
00624 $content='';
00625 switch($ext) {
00626 case 'INT':
00627 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
00628 $content.='<!--'.$substKey.'-->';
00629 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
00630 'file'=>$incFile,
00631 'conf'=>$conf,
00632 'cObj'=>serialize($this),
00633 'type'=>'COA'
00634 );
00635 break;
00636 default:
00637 if ($this->checkIf($conf['if.'])) {
00638 $content=$this->cObjGet($conf);
00639 if ($conf['wrap']) {
00640 $content=$this->wrap($content, $conf['wrap']);
00641 }
00642 if ($conf['stdWrap.']) {
00643 $content=$this->stdWrap($content, $conf['stdWrap.']);
00644 }
00645 }
00646 break;
00647 }
00648 return $content;
00649 }
00650
00659 function USER($conf,$ext='') {
00660 $content='';
00661 switch($ext) {
00662 case 'INT':
00663 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
00664 $content.='<!--'.$substKey.'-->';
00665 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
00666 'file' => $incFile,
00667 'conf' => $conf,
00668 'cObj' => serialize($this),
00669 'type' => 'FUNC'
00670 );
00671 break;
00672 default:
00673 $content.=$this->callUserFunction($conf['userFunc'],$conf,'');
00674 break;
00675 }
00676 return $content;
00677 }
00678
00686 function FILE($conf) {
00687 $theValue = $this->fileResource($this->stdWrap($conf['file'],$conf['file.']), trim($this->getAltParam($conf)));
00688 if ($conf['linkWrap']) {
00689 $theValue = $this->linkWrap($theValue,$conf['linkWrap']);
00690 }
00691 return $this->wrap($theValue,$conf['wrap']);
00692 }
00693
00702 function IMAGE($conf) {
00703 $content='';
00704 if ($this->checkIf($conf['if.'])) {
00705 $theValue = $this->cImage($conf['file'],$conf);
00706 if ($conf['stdWrap.']) {
00707 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
00708 }
00709 return $theValue;
00710 }
00711 }
00712
00721 function IMG_RESOURCE($conf) {
00722 $imgArray = $this->getImgResource($conf['file'],$conf['file.']);
00723 return $this->stdWrap($imgArray[3],$conf['stdWrap.']);
00724 }
00725
00733 function IMGTEXT($conf) {
00734 $content='';
00735 if (is_array($conf['text.'])) {
00736 $content.= $this->stdWrap($this->cObjGet($conf['text.'],'text.'),$conf['text.']);
00737 }
00738 $imgList=trim($this->stdWrap($conf['imgList'],$conf['imgList.']));
00739 if ($imgList) {
00740 $imgs = t3lib_div::trimExplode(',',$imgList);
00741 $imgStart = intval($this->stdWrap($conf['imgStart'],$conf['imgStart.']));
00742
00743 $imgCount= count($imgs)-$imgStart;
00744
00745 $imgMax = intval($this->stdWrap($conf['imgMax'],$conf['imgMax.']));
00746 if ($imgMax) {
00747 $imgCount = t3lib_div::intInRange($imgCount,0,$conf['imgMax']);
00748 }
00749
00750 $imgPath = $this->stdWrap($conf['imgPath'],$conf['imgPath.']);
00751
00752
00753 $caption='';
00754 if (is_array($conf['caption.'])) {
00755 $caption= $this->stdWrap($this->cObjGet($conf['caption.'], 'caption.'),$conf['caption.']);
00756 }
00757 $captionArray=array();
00758 if ($conf['captionSplit']) {
00759 $capSplit = $this->stdWrap($conf['captionSplit.']['token'],$conf['captionSplit.']['token.']);
00760 if (!$capSplit) {$capSplit=chr(10);}
00761 $caption2= $this->cObjGetSingle($conf['captionSplit.']['cObject'],$conf['captionSplit.']['cObject.'],'captionSplit.cObject');
00762 $captionArray=explode($capSplit,$caption2);
00763 while(list($ca_key,$ca_val)=each($captionArray)) {
00764 $captionArray[$ca_key] = $this->stdWrap(trim($captionArray[$ca_key]), $conf['captionSplit.']['stdWrap.']);
00765 }
00766 }
00767
00768 $tablecode='';
00769 $position=$this->stdWrap($conf['textPos'],$conf['textPos.']);
00770
00771 $tmppos = $position&7;
00772 $contentPosition = $position&24;
00773 $align = $this->align[$tmppos];
00774 $cap = ($caption)?1:0;
00775 $txtMarg = intval($this->stdWrap($conf['textMargin'],$conf['textMargin.']));
00776 if (!$conf['textMargin_outOfText'] && $contentPosition<16) {
00777 $txtMarg=0;
00778 }
00779
00780 $cols = intval($this->stdWrap($conf['cols'],$conf['cols.']));
00781 $rows = intval($this->stdWrap($conf['rows'],$conf['rows.']));
00782 $colspacing = intval($this->stdWrap($conf['colSpace'],$conf['colSpace.']));
00783 $rowspacing = intval($this->stdWrap($conf['rowSpace'],$conf['rowSpace.']));
00784
00785 $border = intval($this->stdWrap($conf['border'],$conf['border.'])) ? 1:0;
00786 $borderColor = $this->stdWrap($conf['borderCol'],$conf['borderCol.']);
00787 $borderThickness = intval($this->stdWrap($conf['borderThick'],$conf['borderThick.']));
00788
00789 $borderColor=$borderColor?$borderColor:'black';
00790 $borderThickness=$borderThickness?$borderThickness:1;
00791
00792 $caption_align = $this->stdWrap($conf['captionAlign'],$conf['captionAlign.']);
00793 if (!$caption_align) {
00794 $caption_align = $align;
00795 }
00796
00797 $colCount = ($cols > 1) ? $cols : 1;
00798 if ($colCount > $imgCount) {$colCount = $imgCount;}
00799 $rowCount = ($colCount > 1) ? ceil($imgCount / $colCount) : $imgCount;
00800
00801 if ($rows>1) {
00802 $rowCount = $rows;
00803 if ($rowCount > $imgCount) {$rowCount = $imgCount;}
00804 $colCount = ($rowCount>1) ? ceil($imgCount / $rowCount) : $imgCount;
00805 }
00806
00807
00808 $colRelations = trim($this->stdWrap($conf['colRelations'],$conf['colRelations.']));
00809 $maxW = intval($this->stdWrap($conf['maxW'],$conf['maxW.']));
00810
00811 $maxWInText = intval($this->stdWrap($conf['maxWInText'],$conf['maxWInText.']));
00812 if (!$maxWInText) {
00813 $maxWInText = round($maxW/100*50);
00814 }
00815
00816 if ($maxWInText && $contentPosition>=16) {
00817 $maxW = $maxWInText;
00818 }
00819
00820 if ($maxW && $colCount > 0) {
00821
00822
00823
00824
00825
00826 $maxW = ceil(($maxW-$colspacing*($colCount-1)-$colCount*$border*$borderThickness*2)/$colCount);
00827 }
00828
00829 $colMaxW = Array();
00830 if ($colRelations) {
00831 $rel_parts = explode(':',$colRelations);
00832 $rel_total = 0;
00833 for ($a=0;$a<$colCount;$a++) {
00834 $rel_parts[$a] = intval($rel_parts[$a]);
00835 $rel_total+= $rel_parts[$a];
00836 }
00837 if ($rel_total) {
00838 for ($a=0;$a<$colCount;$a++) {
00839 $colMaxW[$a] = round(($maxW*$colCount)/$rel_total*$rel_parts[$a]);
00840 }
00841 if (min($colMaxW)<=0 || max($rel_parts)/min($rel_parts)>10) {
00842 $colMaxW = Array();
00843 }
00844 }
00845 }
00846 $image_compression = intval($this->stdWrap($conf['image_compression'],$conf['image_compression.']));
00847 $image_effects = intval($this->stdWrap($conf['image_effects'],$conf['image_effects.']));
00848 $image_frames = intval($this->stdWrap($conf['image_frames.']['key'],$conf['image_frames.']['key.']));
00849
00850
00851 $splitArr=array();
00852 $splitArr['imgObjNum']=$conf['imgObjNum'];
00853 $splitArr = $GLOBALS['TSFE']->tmpl->splitConfArray($splitArr,$imgCount);
00854
00855
00856 $equalHeight = intval($this->stdWrap($conf['equalH'],$conf['equalH.']));
00857 if ($equalHeight) {
00858 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
00859 $gifCreator->init();
00860 $relations = Array();
00861 $relations_cols = Array();
00862 $totalMaxW = $maxW*$colCount;
00863 for($a=0;$a<$imgCount;$a++) {
00864 $imgKey = $a+$imgStart;
00865 $imgInfo = $gifCreator->getImageDimensions($imgPath.$imgs[$imgKey]);
00866 $relations[$a] = $imgInfo[1] / $equalHeight;
00867 if ($relations[$a]) {
00868 $relations_cols[floor($a/$colCount)] += $imgInfo[0]/$relations[$a];
00869 }
00870 }
00871 }
00872
00873 $imageRowsFinalWidths = Array();
00874 $imageRowsMaxHeights = Array();
00875 $imgsTag=array();
00876 $origImages=array();
00877 for($a=0;$a<$imgCount;$a++) {
00878 $GLOBALS['TSFE']->register['IMAGE_NUM'] = $a;
00879
00880 $imgKey = $a+$imgStart;
00881 $totalImagePath = $imgPath.$imgs[$imgKey];
00882 $this->data[$this->currentValKey] = $totalImagePath;
00883 $imgObjNum = intval($splitArr[$a]['imgObjNum']);
00884 $imgConf = $conf[$imgObjNum.'.'];
00885
00886 if ($equalHeight) {
00887 $scale = 1;
00888 if ($totalMaxW) {
00889 $rowTotalMaxW = $relations_cols[floor($a/$colCount)];
00890 if ($rowTotalMaxW > $totalMaxW) {
00891 $scale = $rowTotalMaxW / $totalMaxW;
00892 }
00893 }
00894
00895 $imgConf['file.']['height'] = round($equalHeight/$scale);
00896
00897 unset($imgConf['file.']['width']);
00898 unset($imgConf['file.']['maxW']);
00899 unset($imgConf['file.']['maxH']);
00900 unset($imgConf['file.']['minW']);
00901 unset($imgConf['file.']['minH']);
00902 unset($imgConf['file.']['width.']);
00903 unset($imgConf['file.']['maxW.']);
00904 unset($imgConf['file.']['maxH.']);
00905 unset($imgConf['file.']['minW.']);
00906 unset($imgConf['file.']['minH.']);
00907 $maxW = 0;
00908 }
00909
00910 if ($maxW) {
00911 if (count($colMaxW)) {
00912 $imgConf['file.']['maxW'] = $colMaxW[($a%$colCount)];
00913 } else {
00914 $imgConf['file.']['maxW'] = $maxW;
00915 }
00916 }
00917
00918
00919 if (is_array($imgConf) || $imgConf['file']) {
00920 if ($this->image_effects[$image_effects]) {
00921 $imgConf['file.']['params'].= ' '.$this->image_effects[$image_effects];
00922 }
00923 if ($image_frames) {
00924 if (is_array($conf['image_frames.'][$image_frames.'.'])) {
00925 $imgConf['file.']['m.'] = $conf['image_frames.'][$image_frames.'.'];
00926 }
00927 }
00928 if ($image_compression && $imgConf['file']!='GIFBUILDER') {
00929 if ($image_compression==1) {
00930 $tempImport = $imgConf['file.']['import'];
00931 $tempImport_dot = $imgConf['file.']['import.'];
00932 unset($imgConf['file.']);
00933 $imgConf['file.']['import'] = $tempImport;
00934 $imgConf['file.']['import.'] = $tempImport_dot;
00935 } elseif (isset($this->image_compression[$image_compression])) {
00936 $imgConf['file.']['params'].= ' '.$this->image_compression[$image_compression]['params'];
00937 $imgConf['file.']['ext'] = $this->image_compression[$image_compression]['ext'];
00938 unset($imgConf['file.']['ext.']);
00939 }
00940 }
00941
00942
00943 if (!strlen($imgConf['altText']) && !is_array($imgConf['altText.'])) {
00944 $imgConf['altText'] = $conf['altText'];
00945 $imgConf['altText.'] = $conf['altText.'];
00946 }
00947 if (!strlen($imgConf['titleText']) && !is_array($imgConf['titleText.'])) {
00948 $imgConf['titleText'] = $conf['titleText'];
00949 $imgConf['titleText.'] = $conf['titleText.'];
00950 }
00951 if (!strlen($imgConf['longdescURL']) && !is_array($imgConf['longdescURL.'])) {
00952 $imgConf['longdescURL'] = $conf['longdescURL'];
00953 $imgConf['longdescURL.'] = $conf['longdescURL.'];
00954 }
00955 } else {
00956 $imgConf = array(
00957 'altText' => $conf['altText'],
00958 'titleText' => $conf['titleText'],
00959 'longdescURL' => $conf['longdescURL'],
00960 'file' => $totalImagePath
00961 );
00962 }
00963
00964 $imgsTag[$imgKey] = $this->IMAGE($imgConf);
00965
00966
00967 $origImages[$imgKey]=$GLOBALS['TSFE']->lastImageInfo;
00968
00969 $imageRowsFinalWidths[floor($a/$colCount)] += $GLOBALS['TSFE']->lastImageInfo[0];
00970 if ($GLOBALS['TSFE']->lastImageInfo[1]>$imageRowsMaxHeights[floor($a/$colCount)]) {
00971 $imageRowsMaxHeights[floor($a/$colCount)] = $GLOBALS['TSFE']->lastImageInfo[1];
00972 }
00973 }
00974
00975
00976 $tableWidth = max($imageRowsFinalWidths)+ $colspacing*($colCount-1) + $colCount*$border*$borderThickness*2;
00977
00978
00979 $index=$imgStart;
00980
00981 $noRows = $this->stdWrap($conf['noRows'],$conf['noRows.']);
00982 $noCols = $this->stdWrap($conf['noCols'],$conf['noCols.']);
00983 if ($noRows) {$noCols=0;}
00984 if ($equalHeight) {
00985 $noCols=1;
00986 $noRows=0;
00987 }
00988
00989 $rowCount_temp=1;
00990 $colCount_temp=$colCount;
00991 if ($noRows) {
00992 $rowCount_temp = $rowCount;
00993 $rowCount=1;
00994 }
00995 if ($noCols) {
00996 $colCount=1;
00997 }
00998
00999 $colspan = (($colspacing) ? $colCount*2-1 : $colCount);
01000 $rowspan = (($rowspacing) ? $rowCount*2-1 : $rowCount) + $cap;
01001
01002
01003
01004 $editIconsHTML = $conf['editIcons']&&$GLOBALS['TSFE']->beUserLogin ? $this->editIcons('',$conf['editIcons'],$conf['editIcons.']) : '';
01005
01006
01007 $tablecode='';
01008 $flag=0;
01009 if ($conf['noStretchAndMarginCells']!=1) {
01010 $tablecode.='<tr>';
01011 if ($txtMarg && $align=='right') {
01012 $tablecode.='<td rowspan="'.($rowspan+1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?'<br />'.$editIconsHTML:'').'</td>';
01013 $editIconsHTML='';
01014 $flag=1;
01015 }
01016 $tablecode.='<td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$tableWidth.'" height="1" alt="" /></td>';
01017 if ($txtMarg && $align=='left') {
01018 $tablecode.='<td rowspan="'.($rowspan+1).'" valign="top"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$txtMarg.'" height="1" alt="" title="" />'.($editIconsHTML?'<br />'.$editIconsHTML:'').'</td>';
01019 $editIconsHTML='';
01020 $flag=1;
01021 }
01022 if ($flag) $tableWidth+=$txtMarg+1;
01023
01024 $tablecode.='</tr>';
01025 }
01026
01027
01028 for ($c=0;$c<$rowCount;$c++) {
01029 if ($c && $rowspacing) {
01030 $tablecode.='<tr><td colspan="'.$colspan.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$rowspacing.'" border="0" alt="" title="" /></td></tr>';
01031 }
01032 $tablecode.='<tr>';
01033 for ($b=0; $b<$colCount_temp; $b++) {
01034 if ($b && $colspacing) {
01035 if (!$noCols) {
01036 $tablecode.='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$colspacing.'" height="1" border="0" alt="" title="" /></td>';
01037 } else {
01038 $colSpacer='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.($border?$colspacing-6:$colspacing).'" height="'.($imageRowsMaxHeights[$c]+($border?$borderThickness*2:0)).'" border="0" align="'.($border?'left':'top').'" alt="" title="" />';
01039 $colSpacer='<td valign="top">'.$colSpacer.'</td>';
01040 $tablecode.=$colSpacer;
01041 }
01042 }
01043 if (!$noCols || ($noCols && !$b)) {
01044 $tablecode.='<td valign="top">';
01045 if ($noCols) {$tablecode.='<table width="'.$imageRowsFinalWidths[$c].'" border="0" cellpadding="0" cellspacing="0"><tr>';}
01046 }
01047 for ($a=0;$a<$rowCount_temp;$a++) {
01048 $imgIndex = $index+$a*$colCount_temp;
01049 if ($imgsTag[$imgIndex]) {
01050 if ($rowspacing && $noRows && $a) {
01051 $tablecode.= '<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$rowspacing.'" alt="" title="" /><br />';
01052 }
01053
01054 $imageHTML = $imgsTag[$imgIndex].'<br />';
01055 $Talign = (!trim($captionArray[$imgIndex]) && !$noRows && !$conf['netprintApplicationLink']) ? ' align="left"' : '';
01056 if ($border) {$imageHTML='<table border="0" cellpadding="'.$borderThickness.'" cellspacing="0" bgcolor="'.$borderColor.'"'.$Talign.'><tr><td>'.$imageHTML.'</td></tr></table>';}
01057 $imageHTML.=$editIconsHTML; $editIconsHTML='';
01058 if ($conf['netprintApplicationLink']) {$imageHTML = $this->netprintApplication_offsiteLinkWrap($imageHTML,$origImages[$imgIndex],$conf['netprintApplicationLink.']);}
01059 $imageHTML.=$captionArray[$imgIndex];
01060 if ($noCols) {$imageHTML='<td valign="top">'.$imageHTML.'</td>';}
01061 $tablecode.=$imageHTML;
01062 }
01063 }
01064 $index++;
01065 if (!$noCols || ($noCols && $b+1==$colCount_temp)) {
01066 if ($noCols) {$tablecode.='</tr></table>';}
01067 $tablecode.='</td>';
01068 }
01069 }
01070 $tablecode.='</tr>';
01071 }
01072 if ($c) {
01073
01074 $i=$contentPosition;
01075 $table_align = (($i==16) ? 'align="'.$align.'"' : '');
01076 $tablecode = '<table'.($tableWidth?' width="'.$tableWidth.'"':'').' border="0" cellspacing="0" cellpadding="0" '.$table_align.' class="imgtext-table">'.$tablecode;
01077 if ($editIconsHTML) {
01078 $tablecode.='<tr><td colspan="'.$colspan.'">'.$editIconsHTML.'</td></tr>';
01079 $editIconsHTML='';
01080 }
01081 if ($cap) {
01082 $tablecode.='<tr><td colspan="'.$colspan.'" align="'.$caption_align.'">'.$caption.'</td></tr>';
01083 }
01084 $tablecode.='</table>';
01085 if ($conf['tableStdWrap.']) {$tablecode=$this->stdWrap($tablecode,$conf['tableStdWrap.']);}
01086 }
01087
01088 $spaceBelowAbove = intval($this->stdWrap($conf['spaceBelowAbove'],$conf['spaceBelowAbove.']));
01089 switch ($contentPosition) {
01090 case '0':
01091 $output= '<div align="'.$align.'">'.$tablecode.'</div>'.$this->wrapSpace($content, $spaceBelowAbove.'|0');
01092 break;
01093 case '8':
01094 $output= $this->wrapSpace($content, '0|'.$spaceBelowAbove).'<div align="'.$align.'">'.$tablecode.'</div>';
01095 break;
01096 case '16':
01097 $output= $tablecode.$content;
01098 break;
01099 case '24':
01100 $theResult = '';
01101 $theResult.= '<table border="0" cellspacing="0" cellpadding="0" class="imgtext-nowrap"><tr>';
01102 if ($align=='right') {
01103 $theResult.= '<td valign="top">'.$content.'</td><td valign="top">'.$tablecode.'</td>';
01104 } else {
01105 $theResult.= '<td valign="top">'.$tablecode.'</td><td valign="top">'.$content.'</td>';
01106 }
01107 $theResult.= '</tr></table>';
01108 $output= $theResult;
01109 break;
01110 }
01111 } else {
01112 $output= $content;
01113 }
01114
01115 if ($conf['stdWrap.']) {
01116 $output = $this->stdWrap($output, $conf['stdWrap.']);
01117 }
01118
01119 return $output;
01120 }
01121
01129 function CONTENT($conf) {
01130 $theValue='';
01131
01132 $originalRec = $GLOBALS['TSFE']->currentRecord;
01133 if ($originalRec) {
01134 $GLOBALS['TSFE']->recordRegister[$originalRec]++;
01135 }
01136
01137 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_') {
01138
01139 $renderObjName = $conf['renderObj'] ? $conf['renderObj'] : '<'.$conf['table'];
01140 $renderObjKey = $conf['renderObj'] ? 'renderObj' : '';
01141 $renderObjConf = $conf['renderObj.'];
01142
01143 $res = $this->exec_getQuery($conf['table'],$conf['select.']);
01144 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
01145 $GLOBALS['TT']->setTSlogMessage($error,3);
01146 } else {
01147 $this->currentRecordTotal = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
01148 $GLOBALS['TT']->setTSlogMessage('NUMROWS: '.$GLOBALS['TYPO3_DB']->sql_num_rows($res));
01149 $cObj =t3lib_div::makeInstance('tslib_cObj');
01150 $cObj->setParent($this->data,$this->currentRecord);
01151 $this->currentRecordNumber=0;
01152 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01153
01154
01155 $GLOBALS['TSFE']->sys_page->versionOL($conf['table'],$row);
01156
01157
01158 if ($GLOBALS['TSFE']->sys_language_contentOL) {
01159 $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($conf['table'],$row,$GLOBALS['TSFE']->sys_language_content,$GLOBALS['TSFE']->sys_language_contentOL);
01160 }
01161
01162 if (is_array($row)) {
01163 if (!$GLOBALS['TSFE']->recordRegister[$conf['table'].':'.$row['uid']]) {
01164 $this->currentRecordNumber++;
01165 $cObj->parentRecordNumber = $this->currentRecordNumber;
01166 $GLOBALS['TSFE']->currentRecord = $conf['table'].':'.$row['uid'];
01167 $this->lastChanged($row['tstamp']);
01168 $cObj->start($row,$conf['table']);
01169 if ($GLOBALS['TSFE']->config['config']['insertDmailerBoundaries']) { $theValue.='<!--DMAILER_SECTION_BOUNDARY_'.intval($row['module_sys_dmail_category']).'-->'; }
01170 $theValue.= $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
01171 }# else debug($GLOBALS['TSFE']->recordRegister,'CONTENT');
01172 }
01173 }
01174 if ($GLOBALS['TSFE']->config['config']['insertDmailerBoundaries']) { $theValue.='<!--DMAILER_SECTION_BOUNDARY_END-->'; }
01175 }
01176 }
01177
01178 $theValue = $this->wrap($theValue,$conf['wrap']);
01179 if ($conf['stdWrap.']) $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
01180
01181 $GLOBALS['TSFE']->currentRecord = $originalRec;
01182 return $theValue;
01183 }
01184
01192 function RECORDS($conf) {
01193 $theValue='';
01194
01195 $originalRec = $GLOBALS['TSFE']->currentRecord;
01196 if ($originalRec) {
01197 $GLOBALS['TSFE']->recordRegister[$originalRec]++;
01198 }
01199
01200 $conf['source'] = $this->stdWrap($conf['source'],$conf['source.']);
01201 if ($conf['tables'] && $conf['source']) {
01202 $allowedTables = $conf['tables'];
01203 if (is_array($conf['conf.'])) {
01204 reset($conf['conf.']);
01205 while(list($k)=each($conf['conf.'])) {
01206 if (substr($k,-1)!='.') $allowedTables.=','.$k;
01207 }
01208 }
01209
01210 $loadDB = t3lib_div::makeInstance('FE_loadDBGroup');
01211 $loadDB->start($conf['source'], $allowedTables);
01212 reset($loadDB->tableArray);
01213 while(list($table,)=each($loadDB->tableArray)) {
01214 if (is_array($GLOBALS['TCA'][$table])) {
01215 $loadDB->additionalWhere[$table]=$this->enableFields($table);
01216 }
01217 }
01218 $loadDB->getFromDB();
01219
01220 reset($loadDB->itemArray);
01221 $data = $loadDB->results;
01222
01223 $cObj =t3lib_div::makeInstance('tslib_cObj');
01224 $cObj->setParent($this->data,$this->currentRecord);
01225 $this->currentRecordNumber=0;
01226 $this->currentRecordTotal = count($loadDB->itemArray);
01227 reset($loadDB->itemArray);
01228 while(list(,$val)=each($loadDB->itemArray)) {
01229 $row = $data[$val['table']][$val['id']];
01230
01231
01232 $GLOBALS['TSFE']->sys_page->versionOL($val['table'],$row);
01233
01234
01235 if ($GLOBALS['TSFE']->sys_language_contentOL) {
01236 $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($val['table'],$row,$GLOBALS['TSFE']->sys_language_content,$GLOBALS['TSFE']->sys_language_contentOL);
01237 }
01238
01239 if (is_array($row)) {
01240 if (!$conf['dontCheckPid']) {
01241 $row = $this->checkPid($row['pid']) ? $row : '';
01242 }
01243 if ($row && !$GLOBALS['TSFE']->recordRegister[$val['table'].':'.$val['id']]) {
01244 $renderObjName = $conf['conf.'][$val['table']] ? $conf['conf.'][$val['table']] : '<'.$val['table'];
01245 $renderObjKey = $conf['conf.'][$val['table']] ? 'conf.'.$val['table'] : '';
01246 $renderObjConf = $conf['conf.'][$val['table'].'.'];
01247 $this->currentRecordNumber++;
01248 $cObj->parentRecordNumber=$this->currentRecordNumber;
01249 $GLOBALS['TSFE']->currentRecord = $val['table'].':'.$val['id'];
01250 $this->lastChanged($row['tstamp']);
01251 $cObj->start($row,$val['table']);
01252 if ($GLOBALS['TSFE']->config['config']['insertDmailerBoundaries']) {$theValue.='<!--DMAILER_SECTION_BOUNDARY_'.intval($row['module_sys_dmail_category']).'-->';}
01253 $theValue.=$cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey);
01254 if ($GLOBALS['TSFE']->config['config']['insertDmailerBoundaries']) {$theValue.='<!--DMAILER_SECTION_BOUNDARY_END-->';}
01255 }# else debug($GLOBALS['TSFE']->recordRegister,'RECORDS');
01256 }
01257 }
01258 }
01259 $GLOBALS['TSFE']->currentRecord = $originalRec;
01260 return $this->wrap($theValue,$conf['wrap']);
01261 }
01262
01270 function HMENU($conf) {
01271 $content='';
01272 if ($this->checkIf($conf['if.'])) {
01273 $cls = strtolower($conf[1]);
01274 if (t3lib_div::inList($GLOBALS['TSFE']->tmpl->menuclasses,$cls)) {
01275 if ($conf['special.']['value.']) {
01276 $conf['special.']['value'] = $this->stdWrap($conf['special.']['value'], $conf['special.']['value.']);
01277 }
01278 $GLOBALS['TSFE']->register['count_HMENU']++;
01279 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']=0;
01280 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']=array();
01281 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId']=array();
01282
01283 $menu = t3lib_div::makeInstance('tslib_'.$cls);
01284 $menu->parent_cObj = $this;
01285 $menu->start($GLOBALS['TSFE']->tmpl, $GLOBALS['TSFE']->sys_page, '', $conf, 1);
01286 $menu->makeMenu();
01287 $content.=$menu->writeMenu();
01288 }
01289 if ($conf['wrap']) $content=$this->wrap($content, $conf['wrap']);
01290 if ($conf['stdWrap.']) $content = $this->stdWrap($content, $conf['stdWrap.']);
01291 }
01292 return $content;
01293 }
01294
01302 function CTABLE ($conf) {
01303 $controlTable = t3lib_div::makeInstance('tslib_controlTable');
01304 if ($conf['tableParams']) {
01305 $controlTable->tableParams = $conf['tableParams'];
01306 }
01307
01308 $controlTable->contentW = $conf['cWidth'];
01309
01310 if (is_array($conf['c.'])) {
01311 $controlTable->content = $this->cObjGet($conf['c.'],'c.');
01312 $controlTable->contentTDparams = isset($conf['c.']['TDParams']) ? $conf['c.']['TDParams'] : 'valign="top"';
01313 }
01314 if (is_array($conf['lm.'])) {
01315 $controlTable->lm = $this->cObjGet($conf['lm.'],'lm.');
01316 $controlTable->lmTDparams = isset($conf['lm.']['TDParams']) ? $conf['lm.']['TDParams'] : 'valign="top"';
01317 }
01318 if (is_array($conf['tm.'])) {
01319 $controlTable->tm = $this->cObjGet($conf['tm.'],'tm.');
01320 $controlTable->tmTDparams = isset($conf['tm.']['TDParams']) ? $conf['tm.']['TDParams'] : 'valign="top"';
01321 }
01322 if (is_array($conf['rm.'])) {
01323 $controlTable->rm = $this->cObjGet($conf['rm.'],'rm.');
01324 $controlTable->rmTDparams = isset($conf['rm.']['TDParams']) ? $conf['rm.']['TDParams'] : 'valign="top"';
01325 }
01326 if (is_array($conf['bm.'])) {
01327 $controlTable->bm = $this->cObjGet($conf['bm.'],'bm.');
01328 $controlTable->bmTDparams = isset($conf['bm.']['TDParams']) ? $conf['bm.']['TDParams'] : 'valign="top"';
01329 }
01330 return $controlTable->start($conf['offset'],$conf['cMargins']);
01331 }
01332
01340 function OTABLE ($conf) {
01341 $controlTable = t3lib_div::makeInstance('tslib_tableOffset');
01342 if ($conf['tableParams']) {
01343 $controlTable->tableParams = $conf['tableParams'];
01344 }
01345 return $controlTable->start($this->cObjGet($conf),$conf['offset']);
01346 }
01347
01355 function COLUMNS ($conf) {
01356 $content='';
01357 if (is_array($conf) && $this->checkIf($conf['if.'])) {
01358 $tdRowCount=0;
01359 $tableParams = $conf['tableParams'] ? ' '.$conf['tableParams'] : ' border="0" cellspacing="0" cellpadding="0"';
01360 $TDparams = $conf['TDparams'] ? ' '.$conf['TDparams']:' valign="top"';
01361 $rows = t3lib_div::intInRange($conf['rows'],2,20);
01362 $totalWidth = intval($conf['totalWidth']);
01363 $columnWidth=0;
01364
01365 $totalGapWidth=0;
01366 $gapData = Array(
01367 'gapWidth' => $this->stdWrap($conf['gapWidth'],$conf['gapWidth.']),
01368 'gapBgCol' => $this->stdWrap($conf['gapBgCol'],$conf['gapBgCol.']),
01369 'gapLineThickness' => $this->stdWrap($conf['gapLineThickness'],$conf['gapLineThickness.']),
01370 'gapLineCol' => $this->stdWrap($conf['gapLineCol'],$conf['gapLineCol.'])
01371 );
01372 $gapData = $GLOBALS['TSFE']->tmpl->splitConfArray($gapData,$rows-1);
01373 reset($gapData);
01374 while(list(,$val)=each($gapData)) {
01375 $totalGapWidth+=intval($val['gapWidth']);
01376 }
01377
01378 if ($totalWidth) {
01379 $columnWidth = ceil(($totalWidth-$totalGapWidth)/$rows);
01380 $TDparams.=' width="'.$columnWidth.'"';
01381 $tableParams.=' width="'.$totalWidth.'"';
01382 } else {
01383 $TDparams.=' width="'.floor(100/$rows).'%"';
01384 $tableParams.=' width="100%"';
01385 }
01386
01387 for ($a=1;$a<=$rows;$a++) {
01388 $tdRowCount++;
01389 $content.='<td'.$TDparams.'>';
01390 $content.=$this->cObjGetSingle($conf[$a],$conf[$a.'.'], $a);
01391 $content.='</td>';
01392 if ($a < $rows) {
01393 $gapConf = $gapData[($a-1)];
01394 $gapWidth = intval($gapConf['gapWidth']);
01395 if ($gapWidth) {
01396 $tdPar = $gapConf['gapBgCol'] ? ' bgcolor="'.$gapConf['gapBgCol'].'"' : '';
01397 $gapLine = intval($gapConf['gapLineThickness']);
01398 if ($gapLine) {
01399 $gapSurround = t3lib_div::intInRange(($gapWidth-$gapLine)/2, 1, 1000);
01400
01401 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
01402 $tdRowCount++;
01403
01404 $GtdPar = $gapConf['gapLineCol'] ? ' bgcolor="'.$gapConf['gapLineCol'].'"' : ' bgcolor="black"';
01405 $content.='<td'.$GtdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapLine.'" height="1" alt="" title="" /></td>';
01406 $tdRowCount++;
01407
01408 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapSurround.'" height="1" alt="" title="" /></td>';
01409 $tdRowCount++;
01410 } else {
01411 $content.='<td'.$tdPar.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$gapWidth.'" height="1" alt="" title="" /></td>';
01412 $tdRowCount++;
01413 }
01414 }
01415 }
01416 }
01417 $content='<tr>'.$content.'</tr>';
01418 $content='<table'.$tableParams.'>'.$content.'</table>';
01419 $content.=$this->cObjGetSingle($conf['after'],$conf['after.'], 'after');
01420 if ($conf['stdWrap.']) {
01421 $content = $this->stdWrap($content,$conf['stdWrap.']);
01422 }
01423 }
01424 return $content;
01425 }
01426
01434 function HRULER ($conf) {
01435 $lineThickness = t3lib_div::intInRange($this->stdWrap($conf['lineThickness'],$conf['lineThickness.']),1,50);
01436 $lineColor = $conf['lineColor'] ? $conf['lineColor'] : 'black';
01437 $spaceBefore = intval($conf['spaceLeft']);
01438 $spaceAfter = intval($conf['spaceRight']);
01439 $tableWidth = $conf['tableWidth'] ? $conf['tableWidth'] : '99%';
01440 $content='';
01441
01442 $content.='<table border="0" cellspacing="0" cellpadding="0" width="'.htmlspecialchars($tableWidth).'"><tr>';
01443 if ($spaceBefore) {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$spaceBefore.'" height="1" alt="" title="" /></td>'; }
01444 $content.='<td bgcolor="'.$lineColor.'"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$lineThickness.'" alt="" title="" /></td>';
01445 if ($spaceAfter) {$content.='<td width="1"><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$spaceAfter.'" height="1" alt="" title="" /></td>'; }
01446 $content.='</tr></table>';
01447
01448 $content = $this->stdWrap($content, $conf['stdWrap.']);
01449 return $content;
01450 }
01451
01459 function CASEFUNC ($conf){
01460 $content='';
01461 if ($this->checkIf($conf['if.'])) {
01462 if ($conf['setCurrent'] || $conf['setCurrent.']){$this->data[$this->currentValKey] = $this->stdWrap($conf['setCurrent'], $conf['setCurrent.']);}
01463 $key = $this->stdWrap($conf['key'],$conf['key.']);
01464 $key = $conf[$key] ? $key : 'default';
01465 $name = $conf[$key];
01466 $theValue = $this->cObjGetSingle($name,$conf[$key.'.'], $key);
01467 if ($conf['stdWrap.']) {
01468 $theValue = $this->stdWrap($theValue,$conf['stdWrap.']);
01469 }
01470 return $theValue;
01471 }
01472 }
01473
01484 function LOAD_REGISTER($conf,$name) {
01485 if ($name=='RESTORE_REGISTER') {
01486 $GLOBALS['TSFE']->register = array_pop($GLOBALS['TSFE']->registerStack);
01487 } else {
01488 array_push($GLOBALS['TSFE']->registerStack,$GLOBALS['TSFE']->register);
01489 if (is_array($conf)) {
01490 reset($conf);
01491 while(list($theKey,$theValue)=each($conf)) {
01492 if (!strstr($theKey,'.') || !isset($conf[substr($theKey,0,-1)])) {
01493 if (strstr($theKey,'.')) {
01494 $theKey = substr($theKey,0,-1);
01495 }
01496 $GLOBALS['TSFE']->register[$theKey] = $this->stdWrap($conf[$theKey],$conf[$theKey.'.']);
01497 }
01498 }
01499 }
01500 }
01501 return '';
01502 }
01503
01524 function FORM($conf,$formData='') {
01525 $content='';
01526 if (is_array($formData)) {
01527 $dataArr = $formData;
01528 } else {
01529 $data=$this->stdWrap($conf['data'],$conf['data.']);
01530
01531 $dataArr=array();
01532
01533 if (trim($data)) {
01534 $data = ereg_replace(chr(10),'||',$data);
01535 $dataArr = explode('||',$data);
01536 }
01537
01538 if (is_array($conf['dataArray.'])) {
01539 $sKeyArray = t3lib_TStemplate::sortedKeyList($conf['dataArray.'], TRUE);
01540 foreach($sKeyArray as $theKey) {
01541 $dAA = $conf['dataArray.'][$theKey.'.'];
01542 if (is_array($dAA)) {
01543 $temp=array();
01544 list($temp[0])= explode('|',$dAA['label.'] ? $this->stdWrap($dAA['label'],$dAA['label.']) : $dAA['label']);
01545 list($temp[1])= explode('|',$dAA['type']);
01546 if ($dAA['required']) {$temp[1]='*'.$temp[1];}
01547 list($temp[2])= explode('|',$dAA['value.'] ? $this->stdWrap($dAA['value'],$dAA['value.']) : $dAA['value']);
01548
01549 if (is_array($dAA['valueArray.'])) {
01550 reset($dAA['valueArray.']);
01551 $temp_accum = array();
01552 while(list($dAKey_vA,$dAA_vA)=each($dAA['valueArray.'])) {
01553 if (is_array($dAA_vA) && !strcmp(intval($dAKey_vA).'.',$dAKey_vA)) {
01554 $temp_vA=array();
01555 list($temp_vA[0])= explode('=',$dAA_vA['label.'] ? $this->stdWrap($dAA_vA['label'],$dAA_vA['label.']) : $dAA_vA['label']);
01556 if ($dAA_vA['selected']) {$temp_vA[0]='*'.$temp_vA[0];}
01557 list($temp_vA[1])= explode(',',$dAA_vA['value']);
01558 }
01559 $temp_accum[] = implode('=',$temp_vA);
01560 }
01561 $temp[2] = implode(',',$temp_accum);
01562 }
01563 list($temp[3])= explode('|',$dAA['specialEval.'] ? $this->stdWrap($dAA['specialEval'],$dAA['specialEval.']) : $dAA['specialEval']);
01564
01565
01566 $dataArr[] = implode('|',$temp);
01567 }
01568 }
01569 }
01570 }
01571
01572 $attachmentCounter = '';
01573 $hiddenfields = '';
01574 $fieldlist = Array();
01575 $propertyOverride = Array();
01576 $fieldname_hashArray = Array();
01577 $cc = 0;
01578
01579 foreach($dataArr as $val) {
01580
01581 $cc++;
01582 $confData=Array();
01583 if (is_array($formData)) {
01584 $parts = $val;
01585 $val = 1;
01586 } else {
01587 $val = trim($val);
01588 $parts = explode('|',$val);
01589 }
01590 if ($val && strcspn($val,'#/')) {
01591
01592 $confData['label'] = trim($parts[0]);
01593
01594 $fParts = explode(',',$parts[1]);
01595 $fParts[0]=trim($fParts[0]);
01596 if (substr($fParts[0],0,1)=='*') {
01597 $confData['required']=1;
01598 $fParts[0] = substr($fParts[0],1);
01599 }
01600 $typeParts = explode('=',$fParts[0]);
01601 $confData['type'] = trim(strtolower(end($typeParts)));
01602 if (count($typeParts)==1) {
01603 $confData['fieldname'] = substr(ereg_replace('[^a-zA-Z0-9_]','',str_replace(' ','_',trim($parts[0]))),0,30);
01604 if (strtolower(ereg_replace('[^[:alnum:]]','',$confData['fieldname']))=='email') {$confData['fieldname']='email';}
01605
01606 if (isset($fieldname_hashArray[md5($confData['fieldname'])])) {
01607 $confData['fieldname'].='_'.$cc;
01608 }
01609 $fieldname_hashArray[md5($confData['fieldname'])]=$confData['fieldname'];
01610
01611 if ($confData['type']=='file') {
01612 $confData['fieldname']='attachment'.$attachmentCounter;
01613 $attachmentCounter=intval($attachmentCounter)+1;
01614 }
01615 } else {
01616 $confData['fieldname'] = str_replace(' ','_',trim($typeParts[0]));
01617 }
01618 $fieldCode='';
01619
01620 if ($conf['wrapFieldName']) {
01621 $confData['fieldname'] = $this->wrap($confData['fieldname'],$conf['wrapFieldName']);
01622 }
01623
01624
01625 $this->setCurrentVal($confData['fieldname']);
01626
01627
01628 if (trim($confData['type'])) {
01629 $addParams=trim($conf['params']);
01630 if (is_array($conf['params.']) && isset($conf['params.'][$confData['type']])) {
01631 $addParams=trim($conf['params.'][$confData['type']]);
01632 }
01633 if (strcmp('',$addParams)) $addParams=' '.$addParams;
01634 } else $addParams='';
01635
01636
01637 if ($conf['accessibility']) {
01638 $elementIdAttribute = ' id="'.$confData['fieldname'].'"';
01639 } else {
01640 $elementIdAttribute = '';
01641 }
01642
01643
01644 switch($confData['type']) {
01645 case 'textarea':
01646 $cols=trim($fParts[1]) ? intval($fParts[1]) : 20;
01647 $compWidth = doubleval($conf['compensateFieldWidth'] ? $conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth);
01648 $compWidth = $compWidth ? $compWidth : 1;
01649 $cols = t3lib_div::intInRange($cols*$compWidth, 1, 120);
01650
01651 $rows=trim($fParts[2]) ? t3lib_div::intInRange($fParts[2],1,30) : 5;
01652 $wrap=trim($fParts[3]) ? ' wrap="'.trim($fParts[3]).'"' : ' wrap="virtual"';
01653 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], str_replace('\n',chr(10),trim($parts[2])));
01654 $fieldCode=sprintf('<textarea name="%s"'.$elementIdAttribute.' cols="%s" rows="%s"%s'.$addParams.'>%s</textarea>',
01655 $confData['fieldname'], $cols, $rows, $wrap, t3lib_div::formatForTextarea($default));
01656 break;
01657 case 'input':
01658 case 'password':
01659 $size=trim($fParts[1]) ? intval($fParts[1]) : 20;
01660 $compWidth = doubleval($conf['compensateFieldWidth'] ? $conf['compensateFieldWidth'] : $GLOBALS['TSFE']->compensateFieldWidth);
01661 $compWidth = $compWidth ? $compWidth : 1;
01662 $size = t3lib_div::intInRange($size*$compWidth, 1, 120);
01663 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
01664
01665 if ($confData['type']=='password') {
01666 $default='';
01667 }
01668
01669 $max=trim($fParts[2]) ? ' maxlength="'.t3lib_div::intInRange($fParts[2],1,1000).'"' : "";
01670 $theType = $confData['type']=='input' ? 'text' : 'password';
01671
01672 $fieldCode=sprintf('<input type="'.$theType.'" name="%s"'.$elementIdAttribute.' size="%s"%s value="%s"'.$addParams.' />',
01673 $confData['fieldname'], $size, $max, htmlspecialchars($default));
01674
01675 break;
01676 case 'file':
01677 $size=trim($fParts[1]) ? t3lib_div::intInRange($fParts[1],1,60) : 20;
01678 $fieldCode=sprintf('<input type="file" name="%s"'.$elementIdAttribute.' size="%s"'.$addParams.' />',
01679 $confData['fieldname'], $size);
01680 break;
01681 case 'check':
01682
01683 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], trim($parts[2]));
01684 $checked = $default ? ' checked="checked"' : '';
01685 $fieldCode=sprintf('<input type="checkbox" value="%s" name="%s"'.$elementIdAttribute.'%s'.$addParams.' />',
01686 1, $confData['fieldname'], $checked);
01687 break;
01688 case 'select':
01689 $option='';
01690 $valueParts = explode(',',$parts[2]);
01691
01692 if (strtolower(trim($fParts[1]))=='auto') {$fParts[1]=count($valueParts);}
01693 $size=trim($fParts[1]) ? t3lib_div::intInRange($fParts[1],1,20) : 1;
01694
01695 $multiple = strtolower(trim($fParts[2]))=='m' ? ' multiple="multiple"' : '';
01696
01697 $items=array();
01698 $defaults=array();
01699 for($a=0;$a<count($valueParts);$a++) {
01700 $valueParts[$a]=trim($valueParts[$a]);
01701 if (substr($valueParts[$a],0,1)=='*') {
01702 $sel='selected';
01703 $valueParts[$a] = substr($valueParts[$a],1);
01704 } else $sel='';
01705
01706 $subParts=explode('=',$valueParts[$a]);
01707 $subParts[1] = (isset($subParts[1])?trim($subParts[1]):trim($subParts[0]));
01708 $items[] = $subParts;
01709 if ($sel) {$defaults[]=$subParts[1];}
01710 }
01711
01712 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $defaults);
01713 if (!is_array($default)) {
01714 $defaults=array();
01715 $defaults[] = $default;
01716 } else $defaults=$default;
01717
01718 for($a=0;$a<count($items);$a++) {
01719 $option.='<option value="'.$items[$a][1].'"'.(in_array($items[$a][1],$defaults)?' selected="selected"':'').'>'.trim($items[$a][0]).'</option>';
01720 }
01721
01722 if ($multiple) $confData['fieldname'].='[]';
01723 $fieldCode=sprintf('<select name="%s"'.$elementIdAttribute.' size="%s"%s'.$addParams.'>%s</select>',
01724 $confData['fieldname'], $size, $multiple, $option);
01725 break;
01726 case 'radio':
01727 $option='';
01728 $valueParts = explode(',',$parts[2]);
01729 $items=array();
01730 $default='';
01731 for($a=0;$a<count($valueParts);$a++) {
01732 $valueParts[$a]=trim($valueParts[$a]);
01733 if (substr($valueParts[$a],0,1)=='*') {
01734 $sel='checked';
01735 $valueParts[$a] = substr($valueParts[$a],1);
01736 } else $sel='';
01737
01738 $subParts=explode('=',$valueParts[$a]);
01739 $subParts[1] = (isset($subParts[1])?trim($subParts[1]):trim($subParts[0]));
01740 $items[] = $subParts;
01741 if ($sel) {$default=$subParts[1];}
01742 }
01743
01744 $default = $this->getFieldDefaultValue($conf['noValueInsert'], $confData['fieldname'], $default);
01745
01746 for($a=0;$a<count($items);$a++) {
01747 $option.= '<input type="radio" name="'.$confData['fieldname'].'"'.$elementIdAttribute.' value="'.$items[$a][1].'"'.(!strcmp($items[$a][1],$default)?' checked="checked"':'').''.$addParams.' />';
01748 $option.= $this->stdWrap(trim($items[$a][0]), $conf['radioWrap.']);
01749 $option.= '<br />';
01750 }
01751 $fieldCode = $option;
01752 break;
01753 case 'hidden':
01754 $value = trim($parts[2]);
01755 if (strlen($value) && t3lib_div::inList('recipient_copy,recipient',$confData['fieldname'])) {
01756 $value = $GLOBALS['TSFE']->codeString($value);
01757 }
01758 $hiddenfields.=sprintf('<input type="hidden" name="%s"'.$elementIdAttribute.' value="%s" />',
01759 $confData['fieldname'], htmlspecialchars($value));
01760 break;
01761 case 'property':
01762 if (t3lib_div::inList('type,locationData,goodMess,badMess,emailMess',$confData['fieldname'])) {
01763 $value=trim($parts[2]);
01764 $propertyOverride[$confData['fieldname']] = $value;
01765 $conf[$confData['fieldname']] = $value;
01766 }
01767 break;
01768 case 'submit':
01769 $value=trim($parts[2]);
01770 if ($conf['image.']) {
01771 $this->data[$this->currentValKey]=$value;
01772 $image=$this->IMAGE($conf['image.']);
01773 } else $image='';
01774 if($image) {
01775 $fieldCode = str_replace('<img','<input type="image"'.$addParams.' name="'.$confData['fieldname'].'"' ,$image);
01776 } else {
01777 $fieldCode=sprintf('<input type="submit" name="%s"'.$elementIdAttribute.' value="%s"'.$addParams.' />',
01778 $confData['fieldname'], t3lib_div::deHSCentities(htmlspecialchars($value)));
01779 }
01780 break;
01781 case 'label':
01782 $fieldCode = nl2br(htmlspecialchars(trim($parts[2])));
01783 break;
01784 default:
01785 $confData['type'] = 'comment';
01786 $fieldCode = trim($parts[2]).' ';
01787 break;
01788 }
01789 if ($fieldCode) {
01790
01791
01792 if (t3lib_div::inList('textarea,input,password',$confData['type']) && strlen(trim($parts[3]))) {
01793 $modeParameters = t3lib_div::trimExplode(':',$parts[3]);
01794 } else {
01795 $modeParameters = array();
01796 }
01797
01798
01799 switch((string)$modeParameters[0]) {
01800 case 'EREG':
01801 $fieldlist[] = '_EREG';
01802 $fieldlist[] = rawurlencode($modeParameters[1]);
01803 $fieldlist[] = rawurlencode($modeParameters[2]);
01804 $fieldlist[] = rawurlencode($confData['fieldname']);
01805 $fieldlist[] = rawurlencode($confData['label']);
01806 $confData['required'] = 1;
01807 break;
01808 case 'EMAIL':
01809 $fieldlist[] = '_EMAIL';
01810 $fieldlist[] = rawurlencode($confData['fieldname']);
01811 $fieldlist[] = rawurlencode($confData['label']);
01812 $confData['required'] = 1;
01813 break;
01814 default:
01815 if ($confData['required'] && $confData['type']!='check') {
01816 $fieldlist[] = rawurlencode($confData['fieldname']);
01817 $fieldlist[] = rawurlencode($confData['label']);
01818 }
01819 break;
01820 }
01821
01822
01823 $fieldLabel = $confData['label'];
01824 if ($conf['accessibility']) {
01825 $fieldLabel = '<label for="'.htmlspecialchars($confData['fieldname']).'">'.$fieldLabel.'</label>';
01826 }
01827
01828
01829 $fieldCode = $this->stdWrap($fieldCode, $conf['fieldWrap.']);
01830 $labelCode = $this->stdWrap($fieldLabel, $conf['labelWrap.']);
01831 $commentCode = $this->stdWrap($confData['label'], $conf['commentWrap.']);
01832 $result = $conf['layout'];
01833 if ($conf['REQ'] && $confData['required']) {
01834 if (is_array($conf['REQ.']['fieldWrap.']))
01835 $fieldCode = $this->stdWrap($fieldCode, $conf['REQ.']['fieldWrap.']);
01836 if (is_array($conf['REQ.']['labelWrap.']))
01837 $labelCode = $this->stdWrap($fieldLabel, $conf['REQ.']['labelWrap.']);
01838 if ($conf['REQ.']['layout']) {
01839 $result = $conf['REQ.']['layout'];
01840 }
01841 }
01842 if ($confData['type']=='comment' && $conf['COMMENT.']['layout']) {
01843 $result = $conf['COMMENT.']['layout'];
01844 }
01845 if ($confData['type']=='check' && $conf['CHECK.']['layout']) {
01846 $result = $conf['CHECK.']['layout'];
01847 }
01848 if ($confData['type']=='radio' && $conf['RADIO.']['layout']) {
01849 $result = $conf['RADIO.']['layout'];
01850 }
01851 if ($confData['type']=='label' && $conf['LABEL.']['layout']) {
01852 $result = $conf['LABEL.']['layout'];
01853 }
01854 $result = str_replace('###FIELD###',$fieldCode,$result);
01855 $result = str_replace('###LABEL###',$labelCode,$result);
01856 $result = str_replace('###COMMENT###',$commentCode,$result);
01857 $content.= $result;
01858 }
01859 }
01860 }
01861 if ($conf['stdWrap.']) $content=$this->stdWrap($content, $conf['stdWrap.']);
01862
01863
01864
01865 $theRedirect = $this->stdWrap($conf['redirect'], $conf['redirect.']);
01866 $page = $GLOBALS['TSFE']->page;
01867 if (!$theRedirect) {
01868 $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
01869 } elseif (t3lib_div::testInt($theRedirect)) {
01870 $page = $GLOBALS['TSFE']->sys_page->getPage_noCheck($theRedirect);
01871 $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'index.php', '', $this->getClosestMPvalueForPage($page['uid']));
01872 } else {
01873 $LD = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'],'', '', $this->getClosestMPvalueForPage($page['uid']));
01874 $LD['totalURL'] = $theRedirect;
01875 $hiddenfields.= '<input type="hidden" name="redirect" value="'.htmlspecialchars($LD['totalURL']).'" />';
01876 }
01877
01878
01879 $formtype = $propertyOverride['type'] ? $propertyOverride['type'] : $this->stdWrap($conf['type'], $conf['type.']);
01880 if (t3lib_div::testInt($formtype)) {
01881 $page = $GLOBALS['TSFE']->sys_page->getPage_noCheck($formtype);
01882 $LD_A = $GLOBALS['TSFE']->tmpl->linkData($page, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
01883 $action = $LD_A['totalURL'];
01884 } elseif ($formtype){
01885 $LD_A = $LD;
01886 $action = $formtype;
01887 } elseif (t3lib_div::testInt($theRedirect)) {
01888 $LD_A = $LD;
01889 $action = $LD_A['totalURL'];
01890 } else {
01891 $LD_A = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page, $conf['target'], $conf['no_cache'], '', '', $this->getClosestMPvalueForPage($page['uid']));
01892 $action = $LD_A['totalURL'];
01893 }
01894
01895
01896 $theEmail = $this->stdWrap($conf['recipient'], $conf['recipient.']);
01897 if ($theEmail) {
01898 $theEmail = $GLOBALS['TSFE']->codeString($theEmail);
01899 $hiddenfields.='<input type="hidden" name="recipient" value="'.htmlspecialchars($theEmail).'" />';
01900 }
01901
01902
01903 if ($conf['locationData']) {
01904 if ($conf['locationData']=='HTTP_POST_VARS' && isset($_POST['locationData'])) {
01905 $locationData = t3lib_div::_POST('locationData');
01906 } else {
01907 $locationData = $GLOBALS['TSFE']->id.':'.$this->currentRecord;
01908 }
01909 $hiddenfields.='<input type="hidden" name="locationData" value="'.htmlspecialchars($locationData).'" />';
01910 }
01911
01912
01913 if (is_array($conf['hiddenFields.'])) {
01914 reset($conf['hiddenFields.']);
01915 while(list($hF_key,$hF_conf) = each($conf['hiddenFields.'])) {
01916 if (substr($hF_key,-1)!='.') {
01917 $hF_value = $this->cObjGetSingle($hF_conf,$conf['hiddenFields.'][$hF_key.'.'],'hiddenfields');
01918 if (strlen($hF_value) && t3lib_div::inList('recipient_copy,recipient',$hF_key)) {
01919 $hF_value = $GLOBALS['TSFE']->codeString($hF_value);
01920 }
01921 $hiddenfields.='<input type="hidden" name="'.$hF_key.'" value="'.htmlspecialchars($hF_value).'" />';
01922 }
01923 }
01924 }
01925
01926
01927 $formname = $GLOBALS['TSFE']->uniqueHash();
01928 if ($conf['REQ']) {
01929 $validateForm=' onsubmit="return validateForm(\''.$formname.'\',\''.implode(',',$fieldlist).'\',\''.rawurlencode($conf['goodMess']).'\',\''.rawurlencode($conf['badMess']).'\',\''.rawurlencode($conf['emailMess']).'\')"';
01930 $GLOBALS['TSFE']->additionalHeaderData['JSFormValidate'] = '<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'t3lib/jsfunc.validateform.js"></script>';
01931 } else $validateForm='';
01932
01933
01934 $theTarget = ($theRedirect?$LD['target']:$LD_A['target']);
01935 $content = Array(
01936 '<form'.
01937 ' action="'.htmlspecialchars($action).'"'.
01938 ' name="'.$formname.'"'.
01939 ' enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'"'.
01940 ' method="'.($conf['method']?$conf['method']:'post').'"'.
01941 ($theTarget ? ' target="'.$theTarget.'"' : '').
01942 $validateForm.
01943 '>',
01944 $hiddenfields.$content,
01945 '</form>'
01946 );
01947 if ($conf['arrayReturnMode']) {
01948 $content['validateForm']=$validateForm;
01949 $content['formname']=$formname;
01950 return $content;
01951 } else {
01952 return implode('',$content);
01953 }
01954 }
01955
01963 function SEARCHRESULT($conf) {
01964 if (t3lib_div::_GP('sword') && t3lib_div::_GP('scols')) {
01965 $search = t3lib_div::makeInstance('tslib_search');
01966 $search->register_and_explode_search_string(t3lib_div::_GP('sword'));
01967 $search->register_tables_and_columns(t3lib_div::_GP('scols'),$conf['allowedCols']);
01968
01969 $depth=100;
01970
01971 $theStartId=0;
01972 if (t3lib_div::testInt(t3lib_div::_GP('stype'))) {
01973 $temp_theStartId=t3lib_div::_GP('stype');
01974 $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($temp_theStartId);
01975
01976 while(list(,$val)=each($rootLine)) {
01977 if($val['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid']) {
01978 $theStartId=$temp_theStartId;
01979 }
01980 }
01981 } else if (t3lib_div::_GP('stype')) {
01982 if (substr(t3lib_div::_GP('stype'),0,1)=='L') {
01983 $pointer = intval(substr(t3lib_div::_GP('stype'),1));
01984 $theRootLine = $GLOBALS['TSFE']->tmpl->rootLine;
01985
01986 $locDat_arr = explode(':',t3lib_div::_POST('locationData'));
01987 $pId = intval($locDat_arr[0]);
01988 if ($pId) {
01989 $altRootLine = $GLOBALS['TSFE']->sys_page->getRootLine($pId);
01990 ksort($altRootLine);
01991 if (count($altRootLine)) {
01992
01993 reset($altRootLine);
01994 $hitRoot=0;
01995 $theNewRoot=array();
01996 while(list(,$val)=each($altRootLine)) {
01997 if($hitRoot || $val['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid']) {
01998 $hitRoot=1;
01999 $theNewRoot[]=$val;
02000 }
02001 }
02002 if ($hitRoot) {
02003 $theRootLine = $theNewRoot;
02004 }
02005 }
02006 }
02007 $key = $this->getKey($pointer,$theRootLine);
02008 $theStartId = $theRootLine[$key]['uid'];
02009 }
02010 }
02011 if (!$theStartId) {
02012
02013 $theStartId = $GLOBALS['TSFE']->id;
02014 }
02015
02016 $search->pageIdList.= $this->getTreeList(-1*$theStartId,$depth);
02017
02018 $endClause = 'pages.uid IN ('.$search->pageIdList.')
02019 AND pages.doktype in ('.$GLOBALS['TYPO3_CONF_VARS']['FE']['content_doktypes'].($conf['addExtUrlsAndShortCuts']?',3,4':'').')
02020 AND pages.no_search=0'.
02021 $this->enableFields($search->fTable).
02022 $this->enableFields('pages');
02023
02024 if ($conf['languageField.'][$search->fTable]) {
02025 $endClause.= ' AND '.$search->fTable.'.'.$conf['languageField.'][$search->fTable].' = '.intval($GLOBALS['TSFE']->sys_language_uid);
02026 }
02027
02028
02029 $search->build_search_query($endClause);
02030
02031
02032 if (t3lib_div::testInt(t3lib_div::_GP('scount'))) {
02033 $search->res_count = t3lib_div::_GP('scount');
02034 } else {
02035 $search->count_query();
02036 }
02037
02038
02039 $spointer = intval(t3lib_div::_GP('spointer'));
02040 if (isset($conf['range'])) {
02041 $theRange = intval($conf['range']);
02042 } else {
02043 $theRange = 20;
02044 }
02045
02046
02047 if (!$conf['noOrderBy']) {
02048 $search->queryParts['ORDERBY'] = 'pages.lastUpdated, pages.tstamp';
02049 }
02050
02051 $search->queryParts['LIMIT'] = $spointer.','.$theRange;
02052
02053
02054 $search->execute_query();
02055 if ($GLOBALS['TYPO3_DB']->sql_num_rows($search->result)) {
02056 $GLOBALS['TSFE']->register['SWORD_PARAMS'] = $search->get_searchwords();
02057
02058 $total = $search->res_count;
02059 $rangeLow = t3lib_div::intInRange($spointer+1,1,$total);
02060 $rangeHigh = t3lib_div::intInRange($spointer+$theRange,1,$total);
02061
02062 $LD = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page,$conf['target'],1,'', '', $this->getClosestMPvalueForPage($GLOBALS['TSFE']->page['uid']));
02063 $targetPart = $LD['target'] ? ' target="'.htmlspecialchars($LD['target']).'"' : '';
02064 $urlParams = $this->URLqMark($LD['totalURL'],
02065 '&sword='.rawurlencode(t3lib_div::_GP('sword')).
02066 '&scols='.rawurlencode(t3lib_div::_GP('scols')).
02067 '&stype='.rawurlencode(t3lib_div::_GP('stype')).
02068 '&scount='.$total);
02069
02070 $result= $this->cObjGetSingle($conf['layout'],$conf['layout.'], 'layout');
02071 $result = str_replace('###RANGELOW###',$rangeLow,$result);
02072 $result = str_replace('###RANGEHIGH###',$rangeHigh,$result);
02073 $result = str_replace('###TOTAL###',$total,$result);
02074
02075 if ($rangeHigh<$total) {
02076 $next = $this->cObjGetSingle($conf['next'], $conf['next.'], 'next');
02077 $next = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer+$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams.'>'.$next.'</a>';
02078 } else $next='';
02079 $result = str_replace('###NEXT###',$next,$result);
02080
02081 if ($rangeLow>1) {
02082 $prev = $this->cObjGetSingle($conf['prev'], $conf['prev.'], 'prev');
02083 $prev = '<a href="'.htmlspecialchars($urlParams.'&spointer='.($spointer-$theRange)).'"'.$targetPart.$GLOBALS['TSFE']->ATagParams.'>'.$prev.'</a>';
02084 } else $prev='';
02085 $result = str_replace('###PREV###',$prev,$result);
02086
02087
02088 $theValue = $this->cObjGetSingle($conf['resultObj'], $conf['resultObj.'],'resultObj');
02089 $cObj = t3lib_div::makeInstance('tslib_cObj');
02090 $cObj->setParent($this->data,$this->currentRecord);
02091 $renderCode='';
02092 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($search->result)) {
02093 $cObj->start($row);
02094 $renderCode.=$cObj->cObjGetSingle($conf['renderObj'], $conf['renderObj.'],'renderObj');
02095 }
02096 $theValue.=$this->wrap($renderCode,$conf['renderWrap']);
02097 $theValue = str_replace('###RESULT###',$theValue,$result);
02098 } else {
02099 $theValue = $this->cObjGetSingle($conf['noResultObj'], $conf['noResultObj.'],'noResultObj');
02100 }
02101
02102 $GLOBALS['TT']->setTSlogMessage('Search in fields: '.$search->listOfSearchFields);
02103
02104
02105 $content=$theValue;
02106 if ($conf['wrap']) {
02107 $content=$this->wrap($content, $conf['wrap']);
02108 }
02109 if ($conf['stdWrap.']) {
02110 $content=$this->stdWrap($content, $conf['stdWrap.']);
02111 }
02112
02113 $GLOBALS['TSFE']->set_no_cache();
02114 return $content;
02115 }
02116 }
02117
02128 function PHP_SCRIPT($conf,$ext='') {
02129 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($conf['file']);
02130 $content='';
02131 if ($incFile && $GLOBALS['TSFE']->checkFileInclude($incFile)) {
02132 switch($ext) {
02133 case 'INT':
02134 case 'EXT':
02135 $substKey = $ext.'_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
02136 $content.='<!--'.$substKey.'-->';
02137 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey] = array(
02138 'file'=>$incFile,
02139 'conf'=>$conf,
02140 'type'=>'SCRIPT'
02141 );
02142 if ($ext=='INT') {
02143 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey]['cObj'] = serialize($this);
02144 } else {
02145 $GLOBALS['TSFE']->config[$ext.'incScript'][$substKey]['data'] = $this->data;
02146 }
02147 break;
02148 default:
02149
02150 $this->oldData = $this->data;
02151
02152 include('./'.$incFile);
02153
02154 if ($RESTORE_OLD_DATA) {
02155 $this->data = $this->oldData;
02156 }
02157 break;
02158 }
02159 }
02160 return $content;
02161 }
02162
02171 function TEMPLATE($conf) {
02172 $subparts = Array();
02173 $marks = Array();
02174 $wraps = Array();
02175 $content='';
02176
02177 list($PRE,$POST) = explode('|',$conf['markerWrap'] ? $conf['markerWrap'] : '### | ###');
02178 $POST = trim($POST);
02179 $PRE = trim($PRE);
02180
02181
02182 $content = $this->cObjGetSingle($conf['template'],$conf['template.'],'template');
02183 if ($conf['workOnSubpart']) {
02184 $content = $this->getSubpart($content, $PRE.$conf['workOnSubpart'].$POST);
02185 }
02186
02187
02188 if ($conf['relPathPrefix']) {
02189 $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
02190 $content = $htmlParser->prefixResourcePath($conf['relPathPrefix'],$content,$conf['relPathPrefix.']);
02191 }
02192
02193 if ($content) {
02194 if ($conf['nonCachedSubst']) {
02195
02196 if (is_array($conf['marks.'])) {
02197 reset($conf['marks.']);
02198 while(list($theKey,$theValue)=each($conf['marks.'])) {
02199 if (!strstr($theKey,'.')) {
02200 $content = str_replace(
02201 $PRE.$theKey.$POST,
02202 $this->cObjGetSingle($theValue,$conf['marks.'][$theKey.'.'],'marks.'.$theKey),
02203 $content);
02204 }
02205 }
02206 }
02207
02208
02209 if (is_array($conf['subparts.'])) {
02210 reset($conf['subparts.']);
02211 while(list($theKey,$theValue)=each($conf['subparts.'])) {
02212 if (!strstr($theKey,'.')) {
02213 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02214 if ($subpart) {
02215 $this->setCurrentVal($subpart);
02216 $content = $this->substituteSubpart(
02217 $content,
02218 $PRE.$theKey.$POST,
02219 $this->cObjGetSingle($theValue,$conf['subparts.'][$theKey.'.'],'subparts.'.$theKey),
02220 1
02221 );
02222 }
02223 }
02224 }
02225 }
02226
02227 if (is_array($conf['wraps.'])) {
02228 reset($conf['wraps.']);
02229 while(list($theKey,$theValue)=each($conf['wraps.'])) {
02230 if (!strstr($theKey,'.')) {
02231 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02232 if ($subpart) {
02233 $this->setCurrentVal($subpart);
02234 $content = $this->substituteSubpart(
02235 $content,
02236 $PRE.$theKey.$POST,
02237 explode('|',$this->cObjGetSingle($theValue,$conf['wraps.'][$theKey.'.'],'wraps.'.$theKey)),
02238 1
02239 );
02240 }
02241 }
02242 }
02243 }
02244 } else {
02245
02246 if (is_array($conf['subparts.'])) {
02247 reset($conf['subparts.']);
02248 while(list($theKey,$theValue)=each($conf['subparts.'])) {
02249 if (!strstr($theKey,'.')) {
02250 $subpart = $this->getSubpart($content, $PRE.$theKey.$POST);
02251 if ($subpart) {
02252 $GLOBALS['TSFE']->register['SUBPART_'.$theKey] = $subpart;
02253 $subparts[$theKey]['name'] = $theValue;
02254 $subparts[$theKey]['conf'] = $conf['subparts.'][$theKey.'.'];
02255 }
02256 }
02257 }
02258 }
02259
02260 if (is_array($conf['marks.'])) {
02261 reset($conf['marks.']);
02262 while(list($theKey,$theValue)=each($conf['marks.'])) {
02263 if (!strstr($theKey,'.')) {
02264 $marks[$theKey]['name'] = $theValue;
02265 $marks[$theKey]['conf'] = $conf['marks.'][$theKey.'.'];
02266 }
02267 }
02268 }
02269
02270 if (is_array($conf['wraps.'])) {
02271 reset($conf['wraps.']);
02272 while(list($theKey,$theValue)=each($conf['wraps.'])) {
02273 if (!strstr($theKey,'.')) {
02274 $wraps[$theKey]['name'] = $theValue;
02275 $wraps[$theKey]['conf'] = $conf['wraps.'][$theKey.'.'];
02276 }
02277 }
02278 }
02279
02280 $subpartArray =array();
02281 reset($subparts);
02282 while(list($theKey,$theValue)=each($subparts)) {
02283
02284 $this->data[$this->currentValKey] = $GLOBALS['TSFE']->register['SUBPART_'.$theKey];
02285
02286 $subpartArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'subparts.'.$theKey);
02287 }
02288 $this->data[$this->currentValKey] = '';
02289
02290
02291 $markerArray =array();
02292 reset($marks);
02293 while(list($theKey,$theValue)=each($marks)) {
02294 $markerArray[$PRE.$theKey.$POST] = $this->cObjGetSingle($theValue['name'],$theValue['conf'],'marks.'.$theKey);
02295 }
02296
02297 $subpartWraps =array();
02298 reset($wraps);
02299 while(list($theKey,$theValue)=each($wraps)) {
02300 $subpartWraps[$PRE.$theKey.$POST] = explode('|',$this->cObjGetSingle($theValue['name'],$theValue['conf'],'wraps.'.$theKey));
02301 }
02302
02303
02304 if ($conf['substMarksSeparately']) {
02305 $content = $this->substituteMarkerArrayCached($content,array(),$subpartArray,$subpartWraps);
02306 $content = $this->substituteMarkerArray($content, $markerArray);
02307 } else {
02308 $content = $this->substituteMarkerArrayCached($content,$markerArray,$subpartArray,$subpartWraps);
02309 }
02310 }
02311 }
02312 return $content;
02313 }
02314
02322 function MULTIMEDIA($conf) {
02323 $content='';
02324 $filename=$this->stdWrap($conf['file'],$conf['file.']);
02325 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($filename);
02326 if ($incFile) {
02327 $fileinfo = t3lib_div::split_fileref($incFile);
02328 if (t3lib_div::inList('txt,html,htm',$fileinfo['fileext'])) {
02329 $content = $GLOBALS['TSFE']->tmpl->fileContent($incFile);
02330 } else {
02331
02332 $parArray=array();
02333
02334 $parArray['src']='src="'.$GLOBALS['TSFE']->absRefPrefix.$incFile.'"';
02335 if (t3lib_div::inList('au,wav,mp3',$fileinfo['fileext'])) {
02336 }
02337 if (t3lib_div::inList('avi,mov,mpg,asf,wmv',$fileinfo['fileext'])) {
02338 $parArray['width'] = 'width="200"';
02339 $parArray['height'] = 'height="200"';
02340 }
02341 if (t3lib_div::inList('swf,swa,dcr',$fileinfo['fileext'])) {
02342 $parArray['quality'] = 'quality="high"';
02343 }
02344 if (t3lib_div::inList('class',$fileinfo['fileext'])) {
02345 $parArray['width'] = 'width="200"';
02346 $parArray['height'] = 'height="200"';
02347 }
02348
02349
02350 $lines = explode(chr(10), $this->stdWrap($conf['params'],$conf['params.']));
02351 while(list(,$l)=each($lines)) {
02352 $parts = explode('=', $l);
02353 $parameter = strtolower(trim($parts[0]));
02354 $value = trim($parts[1]);
02355 if ((string)$value!='') {
02356 $parArray[$parameter] = $parameter.'="'.htmlspecialchars($value).'"';
02357 } else {
02358 unset($parArray[$parameter]);
02359 }
02360 }
02361 if ($fileinfo['fileext']=='class') {
02362 unset($parArray['src']);
02363 $parArray['code'] = 'code="'.htmlspecialchars($fileinfo['file']).'"';
02364 $parArray['codebase'] = 'codebase="'.htmlspecialchars($fileinfo['path']).'"';
02365 $content='<applet '.implode(' ',$parArray).'></applet>';
02366 } else {
02367 $content='<embed '.implode(' ',$parArray).'></embed>';
02368 }
02369 }
02370 }
02371
02372 if ($conf['stdWrap.']) {
02373 $content=$this->stdWrap($content, $conf['stdWrap.']);
02374 }
02375
02376 return $content;
02377 }
02378
02379
02380
02381
02382
02383
02384
02385
02386
02387
02388
02389
02390
02391
02392
02393
02394
02395
02396
02397
02398
02399
02400
02411 function netprintApplication_offsiteLinkWrap($str,$imgConf,$conf) {
02412 if ($conf['url'] && @is_file($imgConf['origFile'])) {
02413 $thisUrl = $conf['thisUrl'] ? $conf['thisUrl'] : t3lib_div::getIndpEnv('TYPO3_REQUEST_DIR');
02414 $origFile=$thisUrl.$imgConf['origFile'];
02415
02416 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
02417 $gifCreator->init();
02418 $origDim = $gifCreator->getImageDimensions($imgConf['origFile']);
02419 if (!$conf['linkOnlyPixelsAbove'] || $origDim[0]*$origDim[1]>$conf['linkOnlyPixelsAbove']) {
02420
02421 $thumbFile=$thisUrl.$imgConf['3'].'|'.$imgConf[0].'x'.$imgConf[1].'|'.$origDim[0].'x'.$origDim[1].'|'.filesize($imgConf['origFile']).'|'.filemtime($imgConf['origFile']);
02422
02423 $url = $conf['url']
02424 .'&NP[offsite][1]='.rawurlencode($origFile)
02425 .'&NP[offsite_thumb][1]='.rawurlencode($thumbFile);
02426 $linkCObject = $this->cObjGetSingle($conf['cObject'],$conf['cObject.']);
02427 if ($linkCObject) {
02428 $ATagParams = trim($conf['ATagParams']) ? ' '.trim($conf['ATagParams']) : '';
02429 $linkCObject='<a href="'.htmlspecialchars($url).'"'.$ATagParams.'>'.$linkCObject.'</a>';
02430 $linkCObject=$this->stdWrap($linkCObject,$conf['outerStdWrap.']);
02431 if ($conf['before']) {
02432 $str=$linkCObject.$str;
02433 } else {
02434 $str=$str.$linkCObject;
02435 }
02436 }
02437 }
02438 }
02439 return $str;
02440 }
02441
02452 function getFieldDefaultValue($noValueInsert, $fieldName, $defaultVal) {
02453 if (!$GLOBALS['TSFE']->no_cache || (!isset($_POST[$fieldName]) && !isset($_GET[$fieldName])) || $noValueInsert) {
02454 return $defaultVal;
02455 } else {
02456 return t3lib_div::_GP($fieldName);
02457 }
02458 }
02459
02470 function cImage($file,$conf) {
02471 $info = $this->getImgResource($file,$conf['file.']);
02472 $GLOBALS['TSFE']->lastImageInfo=$info;
02473 if (is_array($info)) {
02474 $info[3] = t3lib_div::png_to_gif_by_imagemagick($info[3]);
02475 $GLOBALS['TSFE']->imagesOnPage[]=$info[3];
02476
02477 if (!strlen($conf['altText']) && !is_array($conf['altText.'])) {
02478 $conf['altText'] = $conf['alttext'];
02479 $conf['altText.'] = $conf['alttext.'];
02480 }
02481 $altParam = $this->getAltParam($conf);
02482
02483 $theValue = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.t3lib_div::rawUrlEncodeFP($info[3])).'" width="'.$info[0].'" height="'.$info[1].'" border="'.intval($conf['border']).'"'.($conf['params']?' '.$conf['params']:'').($altParam).' />';
02484 if ($conf['linkWrap']) {
02485 $theValue = $this->linkWrap($theValue,$conf['linkWrap']);
02486 } elseif ($conf['imageLinkWrap']) {
02487 $theValue = $this->imageLinkWrap($theValue,$info['origFile'],$conf['imageLinkWrap.']);
02488 }
02489 return $this->wrap($theValue,$conf['wrap']);
02490 }
02491 }
02492
02503 function imageLinkWrap($string,$imageFile,$conf) {
02504 $a1='';
02505 $a2='';
02506 $content=$string;
02507 if ($this->stdWrap($conf['enable'],$conf['enable.'])) {
02508 $content=$this->typolink($string, $conf['typolink.']);
02509
02510 if ($content==$string && @is_file($imageFile)) {
02511 $params = '';
02512 if ($conf['width']) {$params.='&width='.rawurlencode($conf['width']);}
02513 if ($conf['height']) {$params.='&height='.rawurlencode($conf['height']);}
02514 if ($conf['effects']) {$params.='&effects='.rawurlencode($conf['effects']);}
02515 if ($conf['sample']) {$params.='&sample=1';}
02516 if ($conf['alternativeTempPath']) {$params.='&alternativeTempPath='.rawurlencode($conf['alternativeTempPath']);}
02517
02518 if ($conf['bodyTag']) {$params.='&bodyTag='.rawurlencode($conf['bodyTag']);}
02519 if ($conf['title']) {$params.='&title='.rawurlencode($conf['title']);}
02520 if ($conf['wrap']) {$params.='&wrap='.rawurlencode($conf['wrap']);}
02521
02522 $md5_value = md5($imageFile.'|'.$conf['width'].'|'.$conf['height'].'|'.$conf['effects'].'|'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'].'|');
02523
02524 $params.= '&md5='.$md5_value;
02525 $url = $GLOBALS['TSFE']->absRefPrefix.'showpic.php?file='.rawurlencode($imageFile).$params;
02526 if ($conf['JSwindow.']['altUrl'] || $conf['JSwindow.']['altUrl.']) {
02527 $altUrl = $this->stdWrap($conf['JSwindow.']['altUrl'], $conf['JSwindow.']['altUrl.']);
02528 if ($altUrl) {
02529 $url=$altUrl;
02530 }
02531 }
02532
02533 if ($conf['JSwindow']) {
02534 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
02535 $gifCreator->init();
02536 $gifCreator->mayScaleUp = 0;
02537 $dims = $gifCreator->getImageScale($gifCreator->getImageDimensions($imageFile),$conf['width'],$conf['height'],'');
02538 $offset = t3lib_div::intExplode(',',$conf['JSwindow.']['expand'].',');
02539
02540 $a1='<a href="#" onclick="'.
02541 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;').
02542 '"'.$GLOBALS['TSFE']->ATagParams.'>';
02543 $a2='</a>';
02544 $GLOBALS['TSFE']->setJS('openPic');
02545 } else {
02546 $target = ' target="thePicture"';
02547 if (isset($conf['target'])) {
02548 $target= $conf['target'] ? ' target="'.$conf['target'].'"' : '';
02549 }
02550 $a1='<a href="'.htmlspecialchars($url).'"'.$target.$GLOBALS['TSFE']->ATagParams.'>';
02551 $a2='</a>';
02552 }
02553 $content=$a1.$string.$a2;
02554 }
02555 }
02556
02557 return $content;
02558 }
02559
02568 function fileResource($fName, $addParams='alt="" title=""') {
02569 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($fName);
02570 if ($incFile) {
02571 $fileinfo = t3lib_div::split_fileref($incFile);
02572 if (t3lib_div::inList('jpg,gif,jpeg,png',$fileinfo['fileext'])) {
02573 $imgFile = $incFile;
02574 $imgInfo = @getImageSize($imgFile);
02575 return '<img src="'.$GLOBALS['TSFE']->absRefPrefix.$imgFile.'" width="'.$imgInfo[0].'" height="'.$imgInfo[1].'" border="0" '.$addParams.' />';
02576 } elseif (filesize($incFile)<1024*1024) {
02577 return $GLOBALS['TSFE']->tmpl->fileContent($incFile);
02578 }
02579 }
02580 }
02581
02591 function lastChanged($tstamp) {
02592 $tstamp = intval($tstamp);
02593 if ($tstamp>intval($GLOBALS['TSFE']->register['SYS_LASTCHANGED'])) {
02594 $GLOBALS['TSFE']->register['SYS_LASTCHANGED'] = $tstamp;
02595 }
02596 }
02597
02608 function linkWrap($content,$wrap) {
02609 $wrapArr = explode('|', $wrap);
02610 if (ereg("\{([0-9]*)\}",$wrapArr[0],$reg)) {
02611 if ($uid = $GLOBALS['TSFE']->tmpl->rootLine[$reg[1]]['uid']) {
02612 $wrapArr[0] = str_replace($reg[0],$uid,$wrapArr[0]);
02613 }
02614 }
02615 return trim($wrapArr[0]).$content.trim($wrapArr[1]);
02616 }
02617
02626 function getAltParam($conf) {
02627 $altText = trim($this->stdWrap($conf['altText'], $conf['altText.']));
02628 $titleText = trim($this->stdWrap($conf['titleText'],$conf['titleText.']));
02629 $longDesc = trim($this->stdWrap($conf['longdescURL'],$conf['longdescURL.']));
02630
02631
02632 $altParam = ' alt="'.htmlspecialchars(strip_tags($altText)).'"';
02633
02634
02635 if ($titleText) {
02636 $altParam.= ' title="'.htmlspecialchars(strip_tags($titleText)).'"';
02637 } else {
02638 $altParam.= ' title="'.htmlspecialchars(strip_tags($altText)).'"';
02639 }
02640
02641
02642 if ($longDesc) {
02643 $altParam.= ' longdesc="'.htmlspecialchars($longDesc).'"';
02644 }
02645
02646 return $altParam;
02647 }
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669
02670
02671
02672
02683 function getSubpart($content, $marker) {
02684 if ($marker && strstr($content,$marker)) {
02685 $start = strpos($content, $marker)+strlen($marker);
02686 $stop = @strpos($content, $marker, $start+1);
02687 $sub = substr($content, $start, $stop-$start);
02688
02689 $reg=Array();
02690 ereg('^[^<]*-->',$sub,$reg);
02691 $start+=strlen($reg[0]);
02692
02693 $reg=Array();
02694 ereg('<!--[^>]*$',$sub,$reg);
02695 $stop-=strlen($reg[0]);
02696
02697 return substr($content, $start, $stop-$start);
02698 }
02699 }
02700
02712 function substituteSubpart($content,$marker,$subpartContent,$recursive=1) {
02713 $start = strpos($content, $marker);
02714 $stop = @strpos($content, $marker, $start+1)+strlen($marker);
02715 if ($start && $stop>$start) {
02716
02717 $before = substr($content, 0, $start);
02718 $reg=Array();
02719 ereg('<!--[^>]*$',$before,$reg);
02720 $start-=strlen($reg[0]);
02721 $before = substr($content, 0, $start);
02722
02723 $after = substr($content, $stop);
02724 $reg=Array();
02725 ereg('^[^<]*-->',$after,$reg);
02726 $stop+=strlen($reg[0]);
02727 $after = substr($content, $stop);
02728
02729 if (is_array($subpartContent)) {
02730 $substContent=$subpartContent[0].$this->getSubpart($content,$marker).$subpartContent[1];
02731 } else {
02732 $substContent=$subpartContent;
02733 }
02734
02735 if ($recursive && strpos($after, $marker)) {
02736 return $before.$substContent.$this->substituteSubpart($after,$marker,$subpartContent);
02737 } else {
02738 return $before.$substContent.$after;
02739 }
02740 } else {
02741 return $content;
02742 }
02743 }
02744
02754 function substituteMarker($content,$marker,$markContent) {
02755 return str_replace($marker,$markContent,$content);
02756 }
02757
02774 function substituteMarkerArrayCached($content,$markContentArray=array(),$subpartContentArray=array(),$wrappedSubpartContentArray=array()) {
02775 $GLOBALS['TT']->push('/substituteMarkerArray/');
02776
02777
02778 if (!is_array($markContentArray)) $markContentArray=array();
02779 if (!is_array($subpartContentArray)) $subpartContentArray=array();
02780 if (!is_array($wrappedSubpartContentArray)) $wrappedSubpartContentArray=array();
02781
02782 $sPkeys = array_keys($subpartContentArray);
02783 $wPkeys = array_keys($wrappedSubpartContentArray);
02784 $aKeys = array_merge(array_keys($markContentArray),$sPkeys,$wPkeys);
02785 if (!count($aKeys)) {
02786 $GLOBALS['TT']->pull();
02787 return $content;
02788 }
02789 asort($aKeys);
02790 $storeKey = md5('substituteMarkerArrayCached_storeKey:'.serialize(array($content,$aKeys)));
02791 if ($this->substMarkerCache[$storeKey]) {
02792 $storeArr = $this->substMarkerCache[$storeKey];
02793 $GLOBALS['TT']->setTSlogMessage('Cached',0);
02794 } else {
02795 $storeArrDat = $GLOBALS['TSFE']->sys_page->getHash($storeKey,0);
02796 if (!isset($storeArrDat)) {
02797
02798 $storeArr=array();
02799
02800
02801 reset($sPkeys);
02802 while(list(,$sPK)=each($sPkeys)) {
02803 $content =$this->substituteSubpart($content,$sPK,$sPK);
02804 }
02805
02806
02807 reset($wPkeys);
02808 while(list(,$wPK)=each($wPkeys)) {
02809 $content =$this->substituteSubpart($content,$wPK,array($wPK,$wPK));
02810 }
02811
02812
02813 reset($aKeys);
02814 while(list($tK,$tV)=each($aKeys)) {
02815 $aKeys[$tK]=quotemeta($tV);
02816 }
02817 $regex = implode('|',$aKeys);
02818
02819 $storeArr['c'] = split($regex,$content);
02820 preg_match_all('/'.$regex.'/',$content,$keyList);
02821 $storeArr['k']=$keyList[0];
02822
02823 $this->substMarkerCache[$storeKey] = $storeArr;
02824
02825
02826 $GLOBALS['TSFE']->sys_page->storeHash($storeKey, serialize($storeArr), 'substMarkArrayCached');
02827
02828 $GLOBALS['TT']->setTSlogMessage('Parsing',0);
02829 } else {
02830
02831 $storeArr = unserialize($storeArrDat);
02832
02833 $this->substMarkerCache[$storeKey] = $storeArr;
02834 $GLOBALS['TT']->setTSlogMessage('Cached from DB',0);
02835 }
02836 }
02837
02838
02839
02840 $valueArr = array_merge($markContentArray,$subpartContentArray,$wrappedSubpartContentArray);
02841
02842 $wSCA_reg=array();
02843 reset($storeArr['k']);
02844 $content = '';
02845
02846 while(list($n,$keyN)=each($storeArr['k'])) {
02847 $content.=$storeArr['c'][$n];
02848 if (!is_array($valueArr[$keyN])) {
02849 $content.=$valueArr[$keyN];
02850 } else {
02851 $content.=$valueArr[$keyN][(intval($wSCA_reg[$keyN])%2)];
02852 $wSCA_reg[$keyN]++;
02853 }
02854 }
02855 $content.=$storeArr['c'][count($storeArr['k'])];
02856
02857 $GLOBALS['TT']->pull();
02858 return $content;
02859 }
02860
02872 function substituteMarkerArray($content,$markContentArray,$wrap='',$uppercase=0) {
02873 if (is_array($markContentArray)) {
02874 reset($markContentArray);
02875 $wrapArr=t3lib_div::trimExplode('|',$wrap);
02876 while(list($marker,$markContent)=each($markContentArray)) {
02877 if($uppercase) $marker=strtoupper($marker);
02878 if(strcmp($wrap,'')) $marker=$wrapArr[0].$marker.$wrapArr[1];
02879 $content=str_replace($marker,$markContent,$content);
02880 }
02881 }
02882 return $content;
02883 }
02884
02893 function substituteMarkerInObject(&$tree, $markContentArray) {
02894 if (is_array ($tree)) {
02895 reset($tree);
02896 while(list($key,$value)=each($tree)) {
02897 $this->substituteMarkerInObject ($tree[$key], $markContentArray);
02898 }
02899 } else {
02900 $tree = $this->substituteMarkerArray($tree,$markContentArray);
02901 }
02902 return $tree;
02903 }
02904
02916 function fillInMarkerArray($markContentArray, $row, $fieldList='', $nl2br=TRUE, $prefix='FIELD_', $HSC=FALSE) {
02917 if ($fieldList) {
02918 $fArr = t3lib_div::trimExplode(',',$fieldList,1);
02919 foreach($fArr as $field) {
02920 $markContentArray['###'.$prefix.$field.'###'] = $nl2br?nl2br($row[$field]):$row[$field];
02921 }
02922 } else {
02923 if (is_array($row)) {
02924 foreach($row as $field => $value) {
02925 if (!t3lib_div::testInt($field)) {
02926 if ($HSC) $value = htmlspecialchars($value);
02927 $markContentArray['###'.$prefix.$field.'###'] = $nl2br ? nl2br($value) : $value;
02928 }
02929 }
02930 }
02931 }
02932
02933 return $markContentArray;
02934 }
02935
02936
02937
02938
02939
02940
02941
02942
02943
02944
02945
02946
02947
02948
02949
02950
02951
02952
02953
02954
02955
02956
02957
02958
02959
02960
02961
02962
02963
02964
02965
02966
02979 function stdWrap($content,$conf) {
02980 if (is_array($conf)) {
02981
02982
02983 if ($conf['setContentToCurrent']){$this->data[$this->currentValKey]=$content;}
02984 if ($conf['setCurrent'] || $conf['setCurrent.']){$this->data[$this->currentValKey] = $this->stdWrap($conf['setCurrent'], $conf['setCurrent.']);}
02985
02986
02987 if (isset($conf['lang.']) && $GLOBALS['TSFE']->config['config']['language'] && isset($conf['lang.'][$GLOBALS['TSFE']->config['config']['language']])) {
02988 $content = $conf['lang.'][$GLOBALS['TSFE']->config['config']['language']];
02989 }
02990 if ($conf['data']){$content=$this->getData($conf['data'], is_array($this->alternativeData)?$this->alternativeData:$this->data);}
02991 $this->alternativeData='';
02992 if ($conf['field']) {$content=$this->getFieldVal($conf['field']);}
02993 if ($conf['current']) {$content=$this->data[$this->currentValKey];}
02994 if ($conf['cObject']) {$content=$this->cObjGetSingle($conf['cObject'],$conf['cObject.'],'/stdWrap/.cObject');}
02995 if ($conf['numRows.']) {$content=$this->numRows($conf['numRows.']);}
02996 if ($conf['filelist'] || $conf['filelist.']) {$content=$this->filelist($this->stdWrap($conf['filelist'], $conf['filelist.']));}
02997 if ($conf['preUserFunc']) {$content = $this->callUserFunction($conf['preUserFunc'], $conf['preUserFunc.'], $content);}
02998
02999
03000 if ($conf['override'] || $conf['override.']){
03001 $override = $this->stdWrap($conf['override'], $conf['override.']);
03002 if (trim($override)) {$content=$override;}
03003 }
03004 if (isset($conf['preIfEmptyListNum']) || isset($conf['preIfEmptyListNum.']['stdWrap.'])) {
03005 $preIfEmptyListNumber = isset($conf['preIfEmptyListNum.']['stdWrap.']) ? $this->stdWrap($conf['preIfEmptyListNum'], $conf['preIfEmptyListNum.']['stdWrap.']) : $conf['preIfEmptyListNum'];
03006 $content=$this->listNum($content,$preIfEmptyListNumber,$conf['preIfEmptyListNum.']['splitChar']);
03007 }
03008 if (!trim($content) && ($conf['ifEmpty'] || $conf['ifEmpty.'])){ $content = $this->stdWrap($conf['ifEmpty'], $conf['ifEmpty.']);}
03009
03010
03011
03012 if (isset($conf['listNum']) || isset($conf['listNum.']['stdWrap.'])) {
03013 $listNumber = isset($conf['listNum.']['stdWrap.']) ? $this->stdWrap($conf['listNum'], $conf['listNum.']['stdWrap.']) : $conf['listNum'];
03014 $content=$this->listNum($content,$listNumber,$conf['listNum.']['splitChar']);
03015 }
03016
03017 if ($conf['trim']){$content=trim($content);}
03018 if ( ($conf['required'] && (string)$content=='') || ($conf['if.'] && !$this->checkIf($conf['if.'])) || ($conf['fieldRequired'] && !trim($this->data[$conf['fieldRequired']])) ){
03019 $content = '';
03020 } else {
03021
03022 if ($conf['csConv']) { $content=$GLOBALS['TSFE']->csConv($content,$conf['csConv']); }
03023 if ($conf['parseFunc.'] || $conf['parseFunc']) {$content=$this->parseFunc($content,$conf['parseFunc.'],$conf['parseFunc']);}
03024 if ($conf['HTMLparser'] && is_array($conf['HTMLparser.'])) {$content=$this->HTMLparser_TSbridge($content,$conf['HTMLparser.']);}
03025 if ($conf['split.']){$content=$this->splitObj($content,$conf['split.']);}
03026 if ($conf['prioriCalc']){$content=t3lib_div::calcParenthesis($content); if ($conf['prioriCalc']=='intval') $content=intval($content);}
03027 if ((string)$conf['char']!=''){$content=chr(intval($conf['char']));}
03028 if ($conf['intval']){$content=intval($content);}
03029 if ($conf['date']){$content=date($conf['date'], $content);}
03030 if ($conf['strftime']){
03031 $content = strftime($conf['strftime'], $content);
03032 $tmp_charset = $conf['strftime.']['charset'] ? $conf['strftime.']['charset'] : $GLOBALS['TSFE']->localeCharset;
03033 if ($tmp_charset) {
03034 $content = $GLOBALS['TSFE']->csConv($content,$tmp_charset);
03035 }
03036 }
03037 if ($conf['age']){$content=$this->calcAge(time()-$content,$conf['age']);}
03038
03039 if ($conf['case']){$content=$this->HTMLcaseshift($content, $conf['case']);}
03040 if ($conf['bytes']){$content=$this->bytes($content,$conf['bytes.']['labels']);}
03041 if ($conf['substring']){$content=$this->substring($content,$conf['substring']);}
03042 if ($conf['removeBadHTML']) {$content = $this->removeBadHTML($content, $conf['removeBadHTML.']);}
03043 if ($conf['stripHtml']){$content = strip_tags($content);}
03044 if ($conf['crop']){$content=$this->crop($content, $conf['crop']);}
03045 if ($conf['rawUrlEncode']){$content = rawurlencode($content);}
03046 if ($conf['htmlSpecialChars']){
03047 $content=htmlSpecialChars($content);
03048 if ($conf['htmlSpecialChars.']['preserveEntities']) $content = t3lib_div::deHSCentities($content);
03049 }
03050
03051 if ($conf['doubleBrTag']) {
03052 $content=ereg_replace("\r?\n[\t ]*\r?\n",$conf['doubleBrTag'],$content);
03053 }
03054 if ($conf['br']) {$content=nl2br($content);}
03055 if ($conf['brTag']) {$content= ereg_replace(chr(10),$conf['brTag'],$content);}
03056 if ($conf['encapsLines.']) {$content=$this->encaps_lineSplit($content,$conf['encapsLines.']);}
03057 if ($conf['keywords']) {$content= $this->keywords($content);}
03058 if ($conf['innerWrap'] || $conf['innerWrap.']){$content=$this->wrap($content, $this->stdWrap($conf['innerWrap'], $conf['innerWrap.']));}
03059 if ($conf['innerWrap2'] || $conf['innerWrap2.']){$content=$this->wrap($content, $this->stdWrap($conf['innerWrap2'], $conf['innerWrap2.']));}
03060 if ($conf['fontTag']){$content=$this->wrap($content, $conf['fontTag']);}
03061 if ($conf['addParams.']) {$content=$this->addParams($content,$conf['addParams.']);}
03062 if ($conf['textStyle.']) {$content=$this->textStyle($content,$conf['textStyle.']);}
03063 if ($conf['tableStyle.']) {$content=$this->tableStyle($content,$conf['tableStyle.']);}
03064 if ($conf['filelink.']) {$content=$this->filelink($content,$conf['filelink.']);}
03065 if ($conf['preCObject']) {$content=$this->cObjGetSingle($conf['preCObject'],$conf['preCObject.'],'/stdWrap/.preCObject').$content;}
03066 if ($conf['postCObject']) {$content.=$this->cObjGetSingle($conf['postCObject'],$conf['postCObject.'],'/stdWrap/.postCObject');}
03067
03068 if ($conf['wrapAlign'] || $conf['wrapAlign.']){
03069 $wrapAlign = trim($this->stdWrap($conf['wrapAlign'], $conf['wrapAlign.']));
03070 if ($wrapAlign) {$content=$this->wrap($content, '<div align="'.$wrapAlign.'">|</div>');}
03071 }
03072 if ($conf['typolink.']){$content=$this->typolink($content, $conf['typolink.']);}
03073
03074
03075 if ($conf['space']){$content=$this->wrapSpace($content, $conf['space']);}
03076 $spaceBefore = '';
03077 if ($conf['spaceBefore'] || $conf['spaceBefore.']) {$spaceBefore = trim($this->stdWrap($conf['spaceBefore'], $conf['spaceBefore.']));}
03078 $spaceAfter = '';
03079 if ($conf['spaceAfter'] || $conf['spaceAfter.']) {$spaceAfter = trim($this->stdWrap($conf['spaceAfter'], $conf['spaceAfter.']));}
03080 if ($spaceBefore || $spaceAfter) {$content=$this->wrapSpace($content, $spaceBefore.'|'.$spaceAfter);}
03081
03082
03083 if ($conf['wrap']){$content=$this->wrap($content, $conf['wrap'], ($conf['wrap.']['splitChar']?$conf['wrap.']['splitChar']:'|'));}
03084 if ($conf['noTrimWrap']){$content=$this->noTrimWrap($content, $conf['noTrimWrap']);}
03085 if ($conf['wrap2']){$content=$this->wrap($content, $conf['wrap2'], ($conf['wrap.']['splitChar']?$conf['wrap.']['splitChar']:'|'));}
03086 if ($conf['dataWrap']){$content=$this->dataWrap($content, $conf['dataWrap']);}
03087 if ($conf['prepend']){$content=$this->cObjGetSingle($conf['prepend'],$conf['prepend.'],'/stdWrap/.prepend').$content;}
03088 if ($conf['append']){$content.=$this->cObjGetSingle($conf['append'],$conf['append.'],'/stdWrap/.append');}
03089 if ($conf['wrap3']){$content=$this->wrap($content, $conf['wrap3'], ($conf['wrap.']['splitChar']?$conf['wrap.']['splitChar']:'|'));}
03090 if ($conf['outerWrap'] || $conf['outerWrap.']){$content=$this->wrap($content, $this->stdWrap($conf['outerWrap'], $conf['outerWrap.']));}
03091 if ($conf['insertData']) {$content = $this->insertData($content);}
03092 if ($conf['offsetWrap']){
03093 $controlTable = t3lib_div::makeInstance('tslib_tableOffset');
03094 if ($conf['offsetWrap.']['tableParams'] || $conf['offsetWrap.']['tableParams.']) {$controlTable->tableParams = $this->stdWrap($conf['offsetWrap.']['tableParams'], $conf['offsetWrap.']['tableParams.']);}
03095 if ($conf['offsetWrap.']['tdParams'] || $conf['offsetWrap.']['tdParams.']) {$controlTable->tdParams = ' '.$this->stdWrap($conf['offsetWrap.']['tdParams'], $conf['offsetWrap.']['tdParams.']);}
03096 $content=$controlTable->start($content,$conf['offsetWrap']);
03097 if ($conf['offsetWrap.']['stdWrap.']) { $content=$this->stdWrap($content,$conf['offsetWrap.']['stdWrap.']); }
03098 }
03099 if ($conf['postUserFunc']) {$content = $this->callUserFunction($conf['postUserFunc'], $conf['postUserFunc.'], $content);}
03100 if ($conf['postUserFuncInt']) {
03101 $substKey = 'INT_SCRIPT.'.$GLOBALS['TSFE']->uniqueHash();
03102 $GLOBALS['TSFE']->config['INTincScript'][$substKey] = array(
03103 'content' => $content,
03104 'postUserFunc' => $conf['postUserFuncInt'],
03105 'conf' => $conf['postUserFuncInt.'],
03106 'type' => 'POSTUSERFUNC',
03107 'cObj' => serialize($this),
03108 );
03109 $content ='<!--'.$substKey.'-->';
03110 }
03111
03112 if ($conf['prefixComment'] && !$GLOBALS['TSFE']->config['config']['disablePrefixComment']) {$content = $this->prefixComment($conf['prefixComment'], $conf['prefixComment.'], $content);}
03113
03114 if ($conf['editIcons'] && $GLOBALS['TSFE']->beUserLogin){$content=$this->editIcons($content,$conf['editIcons'],$conf['editIcons.']);}
03115 if ($conf['editPanel'] && $GLOBALS['TSFE']->beUserLogin){$content=$this->editPanel($content, $conf['editPanel.']);}
03116 }
03117
03118
03119 if ($conf['debug']) {$content = '<pre>'.htmlspecialchars($content).'</pre>';}
03120 if ($conf['debugFunc']) {debug($conf['debugFunc']==2?array($content):$content);}
03121 if ($conf['debugData']) {
03122 echo '<b>$cObj->data:</b>';
03123 debug($this->data,'$cObj->data:');
03124 if (is_array($this->alternativeData)) {
03125 echo '<b>$cObj->alternativeData:</b>';
03126 debug($this->alternativeData,'$this->alternativeData');
03127 }
03128 }
03129 }
03130 return $content;
03131 }
03132
03144 function numRows($conf) {
03145 $conf['select.']['selectFields'] = 'count(*)';
03146
03147 $res = $this->exec_getQuery($conf['table'],$conf['select.']);
03148
03149 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
03150 $GLOBALS['TT']->setTSlogMessage($error,3);
03151 } else {
03152 $row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
03153 return intval($row[0]);
03154 }
03155 }
03156
03165 function listNum($content,$listNum,$char) {
03166 $char = $char ? $char : ',';
03167 if (t3lib_div::testInt($char)) {
03168 $char = chr($char);
03169 }
03170 $temp = explode($char,$content);
03171 $last = ''.(count($temp)-1);
03172 $index=$this->calc(eregi_replace('last',$last,$listNum));
03173 return $temp[$index];
03174 }
03175
03185 function checkIf($conf) {
03186 if (!is_array($conf)) {return true;}
03187 if (isset($conf['directReturn'])) {return $conf['directReturn'] ? 1 : 0;}
03188 $flag = true;
03189 if (isset($conf['isTrue']) || isset($conf['isTrue.'])) {
03190 $isTrue = trim($this->stdWrap($conf['isTrue'],$conf['isTrue.']));
03191 if (!$isTrue) {
03192 $flag=0;
03193 }
03194 }
03195 if (isset($conf['isFalse']) || isset($conf['isFalse.'])) {
03196 $isFalse = trim($this->stdWrap($conf['isFalse'],$conf['isFalse.']));
03197 if ($isFalse) {
03198 $flag=0;
03199 }
03200 }
03201 if (isset($conf['isPositive']) || isset($conf['isPositive.'])) {
03202 $number = $this->calc($this->stdWrap($conf['isPositive'],$conf['isPositive.']));
03203 if ($number<1) {
03204 $flag=0;
03205 }
03206 }
03207 if ($flag) {
03208 $value = trim($this->stdWrap($conf['value'],$conf['value.']));
03209
03210 if (isset($conf['isGreaterThan']) || isset($conf['isGreaterThan.'])) {
03211 $number = trim($this->stdWrap($conf['isGreaterThan'],$conf['isGreaterThan.']));
03212 if ($number<=$value) {
03213 $flag=0;
03214 }
03215 }
03216 if (isset($conf['isLessThan']) || isset($conf['isLessThan.'])) {
03217 $number = trim($this->stdWrap($conf['isLessThan'],$conf['isLessThan.']));
03218 if ($number>=$value) {
03219 $flag=0;
03220 }
03221 }
03222 if (isset($conf['equals']) || isset($conf['equals.'])) {
03223 $number = trim($this->stdWrap($conf['equals'],$conf['equals.']));
03224 if ($number!=$value) {
03225 $flag=0;
03226 }
03227 }
03228 if (isset($conf['isInList']) || isset($conf['isInList.'])) {
03229 $number = trim($this->stdWrap($conf['isInList'],$conf['isInList.']));
03230 if (!t3lib_div::inList($value,$number)) {
03231 $flag=0;
03232 }
03233 }
03234 }
03235 if ($conf['negate']) {$flag = $flag ? 0 : 1;}
03236 return $flag;
03237 }
03238
03248 function filelist($data) {
03249 $data = trim($data);
03250 if ($data) {
03251 $data_arr = explode('|',$data);
03252
03253 if ($GLOBALS['TSFE']->lockFilePath) {
03254 $path = $this->clean_directory($data_arr[0]);
03255 $path = substr($path,0,strlen($GLOBALS['TSFE']->lockFilePath))==$GLOBALS['TSFE']->lockFilePath ? $path : '';
03256 }
03257 if ($path) {
03258 $items = Array('files'=>array(), 'sorting'=>array());
03259 $ext_list = strtolower(t3lib_div::uniqueList($data_arr[1]));
03260 $sorting = trim($data_arr[2]);
03261
03262 $d = @dir($path);
03263 $tempArray=Array();
03264 if (is_object($d)) {
03265 $count=0;
03266 while($entry=$d->read()) {
03267 if ($entry!='.' && $entry!='..') {
03268 $wholePath = $path.'/'.$entry;
03269 if (@file_exists($wholePath) && filetype($wholePath)=='file') {
03270 $info = t3lib_div::split_fileref($wholePath);
03271 if (!$ext_list || t3lib_div::inList($ext_list,$info['fileext'])) {
03272 $items['files'][] = $info['file'];
03273 switch($sorting) {
03274 case 'name':
03275 $items['sorting'][] = strtolower($info['file']);
03276 break;
03277 case 'size':
03278 $items['sorting'][] = filesize($wholePath);
03279 break;
03280 case 'ext':
03281 $items['sorting'][] = $info['fileext'];
03282 break;
03283 case 'date':
03284 $items['sorting'][] = filectime($wholePath);
03285 break;
03286 default:
03287 $items['sorting'][] = $count;
03288 break;
03289 }
03290 $count++;
03291 }
03292 }
03293 }
03294 }
03295 $d->close();
03296 }
03297
03298 if (count($items['sorting'])) {
03299 if (strtolower(trim($data_arr[3]))!='r') {
03300 asort($items['sorting']);
03301 } else {
03302 arsort($items['sorting']);
03303 }
03304 }
03305 if (count($items['files'])) {
03306
03307 reset($items['sorting']);
03308 $fullPath = trim($data_arr[4]);
03309 $list_arr=Array();
03310 while(list($key,)=each($items['sorting'])) {
03311 $list_arr[]= $fullPath ? $path.'/'.$items['files'][$key] : $items['files'][$key];
03312 }
03313 return implode(',',$list_arr);
03314 }
03315 }
03316 }
03317 }
03318
03327 function clean_directory($theDir) {
03328 if (t3lib_div::validPathStr($theDir)) {
03329 $theDir = ereg_replace("[\/\. ]*$",'',$theDir);
03330 if (!t3lib_div::isAbsPath($theDir) && @is_dir($theDir)) {
03331 return $theDir;
03332 }
03333 }
03334 }
03335
03345 function HTMLparser_TSbridge($theValue, $conf) {
03346 $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
03347 $htmlParserCfg = $htmlParser->HTMLparserConfig($conf);
03348 return $htmlParser->HTMLcleaner($theValue,$htmlParserCfg[0],$htmlParserCfg[1],$htmlParserCfg[2],$htmlParserCfg[3]);
03349 }
03350
03359 function dataWrap($content,$wrap) {
03360 return $this->wrap($content,$this->insertData($wrap));
03361 }
03362
03372 function insertData($str) {
03373 $inside=0;
03374 $newVal='';
03375 $pointer=0;
03376 $totalLen = strlen($str);
03377 do {
03378 if (!$inside) {
03379 $len = strcspn(substr($str,$pointer),'{');
03380 $newVal.= substr($str,$pointer,$len);
03381 $inside = 1;
03382 } else {
03383 $len = strcspn(substr($str,$pointer),'}')+1;
03384 $newVal.= $this->getData(substr($str,$pointer+1,$len-2),$this->data);
03385 $inside = 0;
03386 }
03387 $pointer+=$len;
03388 } while($pointer<$totalLen);
03389 return $newVal;
03390 }
03391
03402 function prefixComment($str,$conf,$content) {
03403 $parts = explode('|',$str);
03404
03405 $output =
03406 chr(10).str_pad('',$parts[0],chr(9)).
03407 '<!-- '.htmlspecialchars($this->insertData($parts[1])).' [begin] -->'.
03408 chr(10).str_pad('',$parts[0]+1,chr(9)).
03409 $content.
03410 chr(10).str_pad('',$parts[0],chr(9)).
03411 '<!-- '.htmlspecialchars($this->insertData($parts[1])).' [end] -->'.
03412 chr(10).str_pad('',$parts[0]+1,chr(9));
03413
03414 return $output;
03415 }
03416
03426 function substring($content,$options) {
03427 $options = t3lib_div::intExplode(',',$options.',');
03428 if ($options[1]) {
03429 return $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$options[0],$options[1]);
03430 } else {
03431 return $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$options[0]);
03432 }
03433 }
03434
03444 function crop($content,$options) {
03445 $options = explode('|',$options);
03446 $chars = intval($options[0]);
03447 $afterstring = trim($options[1]);
03448 $crop2space = trim($options[2]);
03449 if ($chars) {
03450 if (strlen($content)>abs($chars)) {
03451 if ($chars<0) {
03452 $content = $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,$chars);
03453 $trunc_at = strpos($content, ' ');
03454 $content = ($trunc_at&&$crop2space) ? $afterstring.substr($content,$trunc_at) : $afterstring.$content;
03455 } else {
03456 $content = $GLOBALS['TSFE']->csConvObj->substr($GLOBALS['TSFE']->renderCharset,$content,0,$chars);
03457 $trunc_at = strrpos($content, ' ');
03458 $content = ($trunc_at&&$crop2space) ? substr($content, 0, $trunc_at).$afterstring : $content.$afterstring;
03459 }
03460 }
03461 }
03462 return $content;
03463 }
03464
03476 function removeBadHTML($text, $conf) {
03477
03478
03479 $text = preg_replace(
03480 array(
03481 "'<script[^>]*?>.*?</script[^>]*?>'si",
03482 "'<applet[^>]*?>.*?</applet[^>]*?>'si",
03483 "'<object[^>]*?>.*?</object[^>]*?>'si",
03484 "'<iframe[^>]*?>.*?</iframe[^>]*?>'si",
03485 "'<frameset[^>]*?>.*?</frameset[^>]*?>'si",
03486 "'<style[^>]*?>.*?</style[^>]*?>'si",
03487 "'<marquee[^>]*?>.*?</marquee[^>]*?>'si",
03488 "'<script[^>]*?>'si",
03489 "'<meta[^>]*?>'si",
03490 "'<base[^>]*?>'si",
03491 "'<applet[^>]*?>'si",
03492 "'<object[^>]*?>'si",
03493 "'<link[^>]*?>'si",
03494 "'<iframe[^>]*?>'si",
03495 "'<frame[^>]*?>'si",
03496 "'<frameset[^>]*?>'si",
03497 "'<input[^>]*?>'si",
03498 "'<form[^>]*?>'si",
03499 "'<embed[^>]*?>'si",
03500 "'background-image:url'si",
03501 "'<\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",
03502 ), '', $text);
03503
03504 $text = eregi_replace('<a[^>]*href[[:space:]]*=[[:space:]]*["\']?[[:space:]]*javascript[^>]*','',$text);
03505
03506 // Return clean content
03507 return $text;
03508 }
03509
03520 function textStyle($theValue, $conf) {
03521 $conf['face.'][1] = 'Times New Roman';
03522 $conf['face.'][2] = 'Verdana,Arial,Helvetica,Sans serif';
03523 $conf['face.'][3] = 'Arial,Helvetica,Sans serif';
03524
03525 $conf['size.'][1] = 1;
03526 $conf['size.'][2] = 2;
03527 $conf['size.'][3] = 3;
03528 $conf['size.'][4] = 4;
03529 $conf['size.'][5] = 5;
03530 $conf['size.'][10] = '+1';
03531 $conf['size.'][11] = '-1';
03532
03533 $conf['color.'][240] = 'black';
03534 $conf['color.'][241] = 'white';
03535 $conf['color.'][242] = '#333333';
03536 $conf['color.'][243] = 'gray';
03537 $conf['color.'][244] = 'silver';
03538 $conf['color.'][245] = 'red';
03539 $conf['color.'][246] = 'navy';
03540 $conf['color.'][247] = 'yellow';
03541 $conf['color.'][248] = 'green';
03542 $conf['color.'][249] = 'olive';
03543 $conf['color.'][250] = 'maroon';
03544
03545 $face = $this->data[$conf['face.']['field']];
03546 $size = $this->data[$conf['size.']['field']];
03547 $color = $this->data[$conf['color.']['field']];
03548 $align = $this->data[$conf['align.']['field']];
03549 $properties = $this->data[$conf['properties.']['field']];
03550 if (!$properties) {
03551 $properties=$this->stdWrap($conf['properties.']['default'],$conf['properties.']['default.']);
03552 }
03553
03554 // properties
03555 if (($properties&8)) {$theValue=$this->HTMLcaseshift($theValue, 'upper');}
03556 if (($properties&1)) {$theValue='<b>'.$theValue.'</b>';}
03557 if (($properties&2)) {$theValue='<i>'.$theValue.'</i>';}
03558 if (($properties&4)) {$theValue='<u>'.$theValue.'</u>';}
03559
03560 // Fonttag
03561 $theFace = $conf['face.'][$face] ? $conf['face.'][$face] : $this->stdWrap($conf['face.']['default'],$conf['face.']['default.']);
03562 $theSize = $conf['size.'][$size] ? $conf['size.'][$size] : $this->stdWrap($conf['size.']['default'],$conf['size.']['default.']);
03563 $theColor = $conf['color.'][$color] ? $conf['color.'][$color] : $this->stdWrap($conf['color.']['default'],$conf['color.']['default.']);
03564
03565 if ($conf['altWrap']) {
03566 $theValue=$this->wrap($theValue, $conf['altWrap']);
03567 } elseif ($theFace || $theSize || $theColor) {
03568 $fontWrap = '<font'.($theFace?' face="'.$theFace.'"':'').($theSize?' size="'.$theSize.'"':'').($theColor?' color="'.$theColor.'"':'').'>|</font>';
03569 $theValue=$this->wrap($theValue, $fontWrap);
03570 }
03571
03572 if ($align) {$theValue=$this->wrap($theValue, '<div align="'.$align.'">|</div>');}
03573
03574 return $theValue;
03575 }
03576
03587 function tableStyle($theValue, $conf) {
03588 $conf['color.'][240] = 'black';
03589 $conf['color.'][241] = 'white';
03590 $conf['color.'][242] = '#333333';
03591 $conf['color.'][243] = 'gray';
03592 $conf['color.'][244] = 'silver';
03593
03594 $align = $this->stdWrap($conf['align'],$conf['align.']);
03595 $border = intval($this->stdWrap($conf['border'],$conf['border.']));
03596 $cellspacing = intval($this->stdWrap($conf['cellspacing'],$conf['cellspacing.']));
03597 $cellpadding = intval($this->stdWrap($conf['cellpadding'],$conf['cellpadding.']));
03598
03599 $color = $this->data[$conf['color.']['field']];
03600 $theColor = $conf['color.'][$color] ? $conf['color.'][$color] : $conf['color.']['default'];
03601
03602 $tableTagArray = Array('<table');
03603 $tableTagArray[]='border="'.$border.'"';
03604 $tableTagArray[]='cellspacing="'.$cellspacing.'"';
03605 $tableTagArray[]='cellpadding="'.$cellpadding.'"';
03606 if ($align) {$tableTagArray[]='align="'.$align.'"';}
03607 if ($theColor) {$tableTagArray[]='bgcolor="'.$theColor.'"';}
03608
03609 if ($conf['params']) {
03610 $tableTagArray[] = $conf['params'];
03611 }
03612
03613 $tableWrap = implode(' ',$tableTagArray).'> | </table>';
03614 $theValue=$this->wrap($theValue, $tableWrap);
03615
03616 return $theValue;
03617 }
03618
03628 function addParams($content,$conf) {
03629 $lowerCaseAttributes = TRUE;
03630
03631 if (!is_array($conf)) { return $content; }
03632
03633 $key = 1;
03634 $parts = explode('<',$content);
03635 if (intval($conf['_offset'])) $key = intval($conf['_offset'])<0 ? count($parts)+intval($conf['_offset']) : intval($conf['_offset']);
03636 $subparts=explode('>',$parts[$key]);
03637 if (trim($subparts[0])) {
03638
03639 $attribs = t3lib_div::get_tag_attributes('<'.$subparts[0].'>');
03640 if (!is_array($attribs)) {$attribs=array();}
03641 list($tagName) = explode(' ',$subparts[0],2);
03642
03643 reset($conf);
03644 while(list($pkey,$val)=each($conf)) {
03645 if (substr($pkey,-1)!='.' && substr($pkey,0,1)!='_') {
03646 $tmpVal=$this->stdWrap($conf[$pkey],$conf[$pkey.'.']);
03647 if ($lowerCaseAttributes) { $pkey = strtolower($pkey); }
03648 if (strcmp($tmpVal,'')) {$attribs[$pkey]=$tmpVal;}
03649 }
03650 }
03651
03652
03653 $subparts[0]=trim($tagName.' '.t3lib_div::implodeAttributes($attribs));
03654 $parts[$key] = implode('>',$subparts);
03655 $content = implode('<',$parts);
03656 }
03657 return $content;
03658 }
03659
03671 function filelink($theValue, $conf) {
03672 $output = '';
03673 $aTagParams = $GLOBALS['TSFE']->ATagParams.($conf['ATagParams']?' '.$conf['ATagParams']:'');
03674 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
03675 $conf['path'] = $this->stdWrap($conf['path'],$conf['path.']);
03676 $theFile = trim($conf['path']).$theValue;
03677 if (@is_file($theFile)) {
03678 $theFileEnc = str_replace('%2F', '/', rawurlencode($theFile));
03679 $locDataAdd = $conf['jumpurl.']['secure'] ? $this->locDataJU($theFileEnc,$conf['jumpurl.']['secure.']) : '';
03680 $url = ($conf['jumpurl']) ? $GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($theFileEnc).$locDataAdd.$GLOBALS['TSFE']->getMethodUrlIdToken : $theFileEnc;
03681 $theLinkWrap = '<a href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$url).'"'.($conf['target']?' target="'.$conf['target'].'"':'').$aTagParams.'>|</a>';
03682
03683 $theSize = filesize($theFile);
03684 $fI = t3lib_div::split_fileref($theFile);
03685 if ($conf['icon']) {
03686 $iconP = 't3lib/gfx/fileicons/';
03687 $icon = @is_file($iconP.$fI['fileext'].'.gif') ? $iconP.$fI['fileext'].'.gif' : $iconP.'default.gif';
03688
03689 $IEList = $this->stdWrap($conf['icon_image_ext_list'],$conf['icon_image_ext_list.']);
03690 $image_ext_list = str_replace(' ','',strtolower($IEList));
03691 if ($fI['fileext'] && t3lib_div::inList($image_ext_list, $fI['fileext'])) {
03692 if ($conf['iconCObject']) {
03693 $icon = $this->cObjGetSingle($conf['iconCObject'],$conf['iconCObject.'],'iconCObject');
03694 } else {
03695 if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails']) {
03696 $icon = 't3lib/thumbs.php?&dummy='.$GLOBALS['EXEC_TIME'].'&file='.rawurlencode('../'.$theFile);
03697 } else {
03698 $icon = 't3lib/gfx/notfound_thumb.gif';
03699 }
03700 $icon = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$icon).'" border="0"'.$this->getAltParam($conf).' />';
03701 }
03702 } else {
03703 $icon = '<img src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$icon).'" width="18" height="16" border="0"'.$this->getAltParam($conf).' />';
03704 }
03705 if ($conf['icon_link']) {$icon = $this->wrap($icon, $theLinkWrap);}
03706 $icon = $this->stdWrap($icon,$conf['icon.']);
03707 }
03708 if ($conf['size']) {
03709 $size = $this->stdWrap($theSize,$conf['size.']);
03710 }
03711
03712
03713 if ($conf['removePrependedNumbers']) $theValue=ereg_replace('_[0-9][0-9](\.[[:alnum:]]*)$','\1',$theValue);
03714 $theValue = $this->stdWrap($theValue,$conf['labelStdWrap.']);
03715
03716
03717 if ($conf['ATagBeforeWrap']) {
03718 $theValue = $this->wrap($this->wrap($theValue, $conf['wrap']), $theLinkWrap);
03719 } else {
03720 $theValue = $this->wrap($this->wrap($theValue, $theLinkWrap), $conf['wrap']);
03721 }
03722 $file = $this->stdWrap($theValue,$conf['file.']);
03723
03724 return $this->stdWrap($icon.$file.$size, $conf['stdWrap.']);
03725 }
03726 }
03727
03738 function locDataJU($jumpUrl,$conf) {
03739 $fI = pathinfo($jumpUrl);
03740 $mimetype='';
03741 if ($fI['extension']) {
03742 $mimeTypes = t3lib_div::trimExplode(',',$conf['mimeTypes'],1);
03743 reset($mimeTypes);
03744 while(list(,$v)=each($mimeTypes)) {
03745 $parts = explode('=',$v,2);
03746 if (strtolower($fI['extension']) == strtolower(trim($parts[0]))) {
03747 $mimetype = '&mimeType='.rawurlencode(trim($parts[1]));
03748 }
03749 }
03750 }
03751 $locationData = $GLOBALS['TSFE']->id.':'.$this->currentRecord;
03752 $rec='&locationData='.$locationData;
03753 $hArr = array(
03754 $jumpUrl,
03755 $locationData,
03756 $GLOBALS['TSFE']->TYPO3_CONF_VARS['SYS']['encryptionKey']
03757 );
03758 $juHash='&juHash='.t3lib_div::shortMD5(serialize($hArr));
03759 return '&juSecure=1'.$mimetype.$rec.$juHash;
03760 }
03761
03769 function calc($val) {
03770 $parts= t3lib_div::splitCalc($val,'+-*/');
03771 $value=0;
03772 reset($parts);
03773 while(list(,$part)=each($parts)) {
03774 $theVal = $part[1];
03775 $sign = $part[0];
03776 if ((string)intval($theVal)==(string)$theVal) {
03777 $theVal = intval($theVal);
03778 } else {
03779 $theVal =0;
03780 }
03781 if ($sign=='-') {$value-=$theVal;}
03782 if ($sign=='+') {$value+=$theVal;}
03783 if ($sign=='/') {if (intval($theVal)) $value/=intval($theVal);}
03784 if ($sign=='*') {$value*=$theVal;}
03785 }
03786 return $value;
03787 }
03788
03798 function calcIntExplode($delim, $string) {
03799 $temp = explode($delim,$string);
03800 while(list($key,$val)=each($temp)) {
03801 $temp[$key]=intval(tslib_cObj::calc($val));
03802 }
03803 return $temp;
03804 }
03805
03818 function splitObj($value, $conf) {
03819 $conf['token']=$this->stdWrap($conf['token'],$conf['token.']);
03820
03821 if ($conf['token']) {
03822 $conf['max']=intval($this->stdWrap($conf['max'],$conf['max.']));
03823 $conf['min']=intval($this->stdWrap($conf['min'],$conf['min.']));
03824
03825 $valArr=explode($conf['token'],$value);
03826
03827 $splitCount = count($valArr);
03828 if ($conf['max'] && $splitCount>$conf['max']) {
03829 $splitCount=$conf['max'];
03830 }
03831 if ($conf['min'] && $splitCount<$conf['min']) {
03832 $splitCount=$conf['min'];
03833 }
03834
03835 if ($conf['wrap'] || $conf['cObjNum']) {
03836 $splitArr=array();
03837 $splitArr['wrap']=$conf['wrap'];
03838 $splitArr['cObjNum']=$conf['cObjNum'];
03839 $splitArr = $GLOBALS['TSFE']->tmpl->splitConfArray($splitArr,$splitCount);
03840 }
03841
03842 $content='';
03843 for($a=0;$a<$splitCount;$a++) {
03844 $GLOBALS['TSFE']->register['SPLIT_COUNT']=$a;
03845 $value = ''.$valArr[$a];
03846 $this->data[$this->currentValKey] = $value;
03847 if ($splitArr[$a]['cObjNum']) {
03848 $objName=intval($splitArr[$a]['cObjNum']);
03849 $value = $this->stdWrap($this->cObjGet($conf[$objName.'.'],$objName.'.'),$conf[$objName.'.']);
03850 }
03851 if ($splitArr[$a]['wrap']) {
03852 $value=$this->wrap($value,$splitArr[$a]['wrap']);
03853 }
03854 $content.=$value;
03855 }
03856 }
03857 return $content;
03858 }
03859
03874 function parseFunc($theValue, $conf, $ref='') {
03875
03876
03877 if ($ref) {
03878 $temp_conf = array(
03879 'parseFunc' => $ref,
03880 'parseFunc.' => $conf
03881 );
03882 $temp_conf = $this->mergeTSRef($temp_conf, 'parseFunc');
03883 $conf = $temp_conf['parseFunc.'];
03884 }
03885
03886
03887 if (strcmp($conf['externalBlocks'],'')) {
03888 $tags = strtolower(implode(',',t3lib_div::trimExplode(',',$conf['externalBlocks'])));
03889 $htmlParser = t3lib_div::makeInstance('t3lib_parsehtml');
03890 $parts = $htmlParser->splitIntoBlock($tags,$theValue);
03891
03892 reset($parts);
03893 while(list($k,$v)=each($parts)) {
03894 if ($k%2) {
03895 $tagName=strtolower($htmlParser->getFirstTagName($v));
03896 $cfg=$conf['externalBlocks.'][$tagName.'.'];
03897 if ($cfg['stripNLprev'] || $cfg['stripNL']) {
03898 $parts[$k-1]=ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $parts[$k-1]);
03899 }
03900 if ($cfg['stripNLnext'] || $cfg['stripNL']) {
03901 $parts[$k+1]=ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $parts[$k+1]);
03902 }
03903 }
03904 }
03905
03906 reset($parts);
03907 while(list($k,$v)=each($parts)) {
03908 if ($k%2) {
03909 $tag=$htmlParser->getFirstTag($v);
03910 $tagName=strtolower($htmlParser->getFirstTagName($v));
03911 $cfg=$conf['externalBlocks.'][$tagName.'.'];
03912 if ($cfg['callRecursive']) {
03913 $parts[$k]=$this->parseFunc($htmlParser->removeFirstAndLastTag($v), $conf);
03914 if (!$cfg['callRecursive.']['dontWrapSelf']) {
03915 if ($cfg['callRecursive.']['alternativeWrap']) {
03916 $parts[$k] = $this->wrap($parts[$k], $cfg['callRecursive.']['alternativeWrap']);
03917 } else {
03918 if (is_array($cfg['callRecursive.']['tagStdWrap.'])) {
03919 $tag = $this->stdWrap($tag,$cfg['callRecursive.']['tagStdWrap.']);
03920 }
03921 $parts[$k]=$tag.$parts[$k].'</'.$tagName.'>';
03922 }
03923 }
03924 } elseif($cfg['HTMLtableCells']) {
03925 $rowParts = $htmlParser->splitIntoBlock('tr',$parts[$k]);
03926 reset($rowParts);
03927 while(list($kk,$vv)=each($rowParts)) {
03928 if ($kk%2) {
03929 $colParts = $htmlParser->splitIntoBlock('td',$vv);
03930 reset($colParts);
03931 $cc=0;
03932 while(list($kkk,$vvv)=each($colParts)) {
03933 if ($kkk%2) {
03934 $cc++;
03935 $tag=$htmlParser->getFirstTag($vvv);
03936 $tagName=strtolower($htmlParser->getFirstTagName($vvv));
03937 $colParts[$kkk] = $htmlParser->removeFirstAndLastTag($vvv);
03938
03939 if ($cfg['HTMLtableCells.'][$cc.'.']['callRecursive'] || (!isset($cfg['HTMLtableCells.'][$cc.'.']['callRecursive']) && $cfg['HTMLtableCells.']['default.']['callRecursive'])) {
03940 if ($cfg['HTMLtableCells.']['addChr10BetweenParagraphs']) $colParts[$kkk]=str_replace('</p><p>','</p>'.chr(10).'<p>',$colParts[$kkk]);
03941 $colParts[$kkk] = $this->parseFunc($colParts[$kkk], $conf);
03942 }
03943
03944 $tagStdWrap = is_array($cfg['HTMLtableCells.'][$cc.'.']['tagStdWrap.'])?$cfg['HTMLtableCells.'][$cc.'.']['tagStdWrap.']:$cfg['HTMLtableCells.']['default.']['tagStdWrap.'];
03945 if (is_array($tagStdWrap)) {
03946 $tag = $this->stdWrap($tag,$tagStdWrap);
03947 }
03948
03949 $stdWrap = is_array($cfg['HTMLtableCells.'][$cc.'.']['stdWrap.'])?$cfg['HTMLtableCells.'][$cc.'.']['stdWrap.']:$cfg['HTMLtableCells.']['default.']['stdWrap.'];
03950 if (is_array($stdWrap)) {
03951 $colParts[$kkk] = $this->stdWrap($colParts[$kkk],$stdWrap);
03952 }
03953
03954 $colParts[$kkk]=$tag.$colParts[$kkk].'</'.$tagName.'>';
03955 }
03956 }
03957 $rowParts[$kk] = implode('',$colParts);
03958 }
03959 }
03960 $parts[$k] = implode('',$rowParts);
03961 }
03962
03963 if (is_array($cfg['stdWrap.'])) {
03964 $parts[$k] = $this->stdWrap($parts[$k],$cfg['stdWrap.']);
03965 }
03966 } else {
03967 $parts[$k]=$this->_parseFunc($parts[$k], $conf);
03968 }
03969 }
03970
03971 return implode('',$parts);
03972 } else return $this->_parseFunc($theValue, $conf);
03973 }
03974
03984 function _parseFunc ($theValue, $conf) {
03985 if (!$this->checkIf($conf['if.'])) {
03986 return $theValue;
03987 }
03988 $inside=0;
03989 $pointer=0;
03990 $currentTag='';
03991 $stripNL=0;
03992 $contentAccum=array();
03993 $contentAccumP=0;
03994
03995 $allowTags=strtolower(str_replace(' ','',$conf['allowTags']));
03996 $denyTags=strtolower(str_replace(' ','',$conf['denyTags']));
03997
03998 $totalLen = strlen($theValue);
03999 do {
04000 if (!$inside) {
04001 if (!is_array($currentTag)) {
04002
04003 $len_p=0;
04004 $c=100;
04005 do {
04006 $len = strcspn(substr($theValue,$pointer+$len_p),'<');
04007 $len_p+=$len+1;
04008 $endChar = ord(strtolower(substr($theValue,$pointer+$len_p,1)));
04009 $c--;
04010 } while ($c>0 && $endChar && ($endChar<97 || $endChar>122) && $endChar!=47);
04011 $len = $len_p-1;
04012 } else {
04013
04014 $tempContent = strtolower(substr($theValue,$pointer));
04015 $len = strpos ($tempContent, '</'.$currentTag[0]);
04016 if (is_string ($len) && !$len) {
04017 $len = strlen($tempContent);
04018 }
04019 }
04020
04021 $data = substr($theValue,$pointer,$len);
04022 if ($data!='') {
04023 if ($stripNL) {
04024 $data = ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $data);
04025 }
04026
04027 if (!is_array($currentTag)) {
04028
04029 if ($conf['constants'] && is_array($GLOBALS['TSFE']->tmpl->setup['constants.'])) {
04030 reset($GLOBALS['TSFE']->tmpl->setup['constants.']);
04031 while(list($key,$val)=each($GLOBALS['TSFE']->tmpl->setup['constants.'])) {
04032 if (is_string($val)) {
04033 $data = str_replace('###'.$key.'###', $val, $data);
04034 }
04035 }
04036 }
04037
04038 if (is_array($conf['short.'])) {
04039 $shortWords = $conf['short.'];
04040 krsort($shortWords);
04041 reset($shortWords);
04042 while(list($key,$val)=each($shortWords)) {
04043 if (is_string($val)) {
04044 $data = str_replace($key, $val, $data);
04045 }
04046 }
04047 }
04048
04049
04050 if (is_array($conf['plainTextStdWrap.'])) {$data = $this->stdWrap($data,$conf['plainTextStdWrap.']);}
04051
04052 if ($conf['userFunc']) {$data = $this->callUserFunction($conf['userFunc'], $conf['userFunc.'], $data);}
04053
04054
04055 if ($conf['makelinks']) {
04056 $data = $this->http_makelinks($data,$conf['makelinks.']['http.']);
04057 $data = $this->mailto_makelinks($data,$conf['makelinks.']['mailto.']);
04058 }
04059
04060
04061 if ($GLOBALS['TSFE']->no_cache && $conf['sword'] && is_array($GLOBALS['TSFE']->sWordList) && $GLOBALS['TSFE']->sWordRegEx) {
04062 $newstring = '';
04063 do {
04064 $pieces = split($GLOBALS['TSFE']->sWordRegEx,$data,2);
04065 $newstring.=$pieces[0];
04066 $match_len = strlen($data)-(strlen($pieces[0])+strlen($pieces[1]));
04067 if (strstr($pieces[0],'<') || strstr($pieces[0],'>')) {
04068 $inTag = strrpos($pieces[0],'<') > strrpos($pieces[0],'>');
04069 }
04070
04071 $match = substr($data,strlen($pieces[0]),$match_len);
04072
04073 if (trim($match) && strlen($match)>1 && !$inTag) {
04074 $match = $this->wrap($match, $conf['sword']);
04075 }
04076
04077 $newstring.= $match;
04078 $data=$pieces[1];
04079 } while ($pieces[1]);
04080 $data = $newstring;
04081 }
04082 }
04083 $contentAccum[$contentAccumP].=$data;
04084 }
04085 $inside = 1;
04086 } else {
04087
04088 $len = strcspn(substr($theValue,$pointer),'>')+1;
04089 $data = substr($theValue,$pointer,$len);
04090
04091 $tag = explode(' ',trim(substr($data,1,-1)),2);
04092 $tag[0]=strtolower($tag[0]);
04093 if (substr($tag[0],0,1)=='/') {
04094 $tag[0]=substr($tag[0],1);
04095 $tag['out']=1;
04096 }
04097 if($conf['tags.'][$tag[0]]) {
04098 $treated=0;
04099 $stripNL = 0;
04100
04101 if (!$currentTag && !$tag['out']) {
04102 $currentTag = $tag;
04103 $contentAccumP++;
04104 $treated=1;
04105 }
04106
04107 if ($currentTag[0]==$tag[0] && $tag['out']) {
04108 $theName = $conf['tags.'][$tag[0]];
04109 $theConf = $conf['tags.'][$tag[0].'.'];
04110 $stripNL = ($theConf['stripNL'] ? 1 : 0);
04111 $breakOut = ($theConf['breakoutTypoTagContent'] ? 1 : 0);
04112
04113 $this->parameters=Array();
04114 if ($currentTag[1]) {
04115 $params=t3lib_div::get_tag_attributes($currentTag[1]);
04116 if (is_array($params)) {
04117 reset($params);
04118 while(list($option,$val)=each($params)) {
04119 $this->parameters[strtolower($option)]=$val;
04120 }
04121 }
04122 }
04123 $this->parameters['allParams']=trim($currentTag[1]);
04124 if ($stripNL) {
04125 $contentAccum[$contentAccumP-1] = ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $contentAccum[$contentAccumP-1]);
04126 $contentAccum[$contentAccumP] = ereg_replace('^[ ]*'.chr(13).'?'.chr(10), '', $contentAccum[$contentAccumP]);
04127 $contentAccum[$contentAccumP] = ereg_replace(chr(13).'?'.chr(10).'[ ]*$', '', $contentAccum[$contentAccumP]);
04128 }
04129 $this->data[$this->currentValKey] = $contentAccum[$contentAccumP];
04130 $newInput=$this->cObjGetSingle($theName,$theConf,'/parseFunc/.tags.'.$tag[0]);
04131
04132 $contentAccum[$contentAccumP]=$newInput;
04133 $contentAccumP++;
04134
04135
04136 if (!$breakOut) {
04137 $contentAccum[$contentAccumP-2].=$contentAccum[$contentAccumP-1].$contentAccum[$contentAccumP];
04138 unset($contentAccum[$contentAccumP]);
04139 unset($contentAccum[$contentAccumP-1]);
04140 $contentAccumP-=2;
04141 }
04142
04143 unset($currentTag);
04144 $treated=1;
04145 }
04146
04147 if (!$treated) {
04148 $contentAccum[$contentAccumP].=$data;
04149 }
04150 } else {
04151
04152 $stripNL = 0;
04153 if (t3lib_div::inList($allowTags,$tag[0]) || ($denyTags!='*' && !t3lib_div::inList($denyTags,$tag[0]))) {
04154 $contentAccum[$contentAccumP].=$data;
04155 } else {
04156 $contentAccum[$contentAccumP].=HTMLSpecialChars($data);
04157 }
04158 }
04159 $inside = 0;
04160 }
04161 $pointer+=$len;
04162 } while($pointer<$totalLen);
04163
04164
04165 reset($contentAccum);
04166 for ($a=0;$a<count($contentAccum);$a++) {
04167 if ($a%2 != 1) {
04168
04169 if (is_array($conf['nonTypoTagStdWrap.'])) {$contentAccum[$a] = $this->stdWrap($contentAccum[$a],$conf['nonTypoTagStdWrap.']);}
04170
04171 if ($conf['nonTypoTagUserFunc']) {$contentAccum[$a] = $this->callUserFunction($conf['nonTypoTagUserFunc'], $conf['nonTypoTagUserFunc.'], $contentAccum[$a]);}
04172 }
04173 }
04174 return implode('',$contentAccum);
04175 }
04176
04186 function encaps_lineSplit($theValue, $conf) {
04187 $lParts = explode(chr(10),$theValue);
04188
04189 $encapTags = t3lib_div::trimExplode(',',strtolower($conf['encapsTagList']),1);
04190 $nonWrappedTag = $conf['nonWrappedTag'];
04191 $defaultAlign=trim($this->stdWrap($conf['defaultAlign'],$conf['defaultAlign.']));
04192
04193 if (!strcmp('',$theValue)) return '';
04194
04195 while(list($k,$l)=each($lParts)) {
04196 $sameBeginEnd=0;
04197 $l=trim($l);
04198 $attrib=array();
04199 $nWrapped=0;
04200 $byPass=0;
04201 if (substr($l,0,1)=='<' && substr($l,-1)=='>') {
04202 $fwParts = explode('>',substr($l,1),2);
04203 $backParts = t3lib_div::revExplode('<', substr($fwParts[1],0,-1), 2);
04204 $attrib = t3lib_div::get_tag_attributes('<'.$fwParts[0].'>');
04205 list($tagName) = explode(' ',$fwParts[0]);
04206 $str_content = $backParts[0];
04207 $sameBeginEnd = (substr(strtolower($backParts[1]),1,strlen($tagName))==strtolower($tagName));
04208 }
04209
04210 if ($sameBeginEnd && in_array(strtolower($tagName),$encapTags)) {
04211 $uTagName = strtoupper($tagName);
04212 $uTagName = strtoupper($conf['remapTag.'][$uTagName]?$conf['remapTag.'][$uTagName]:$uTagName);
04213 } else {
04214 $uTagName = strtoupper($nonWrappedTag);
04215 $str_content = $lParts[$k];
04216 $nWrapped=1;
04217 $attrib=array();
04218 }
04219
04220
04221 if (is_array($conf['innerStdWrap_all.'])) {$str_content = $this->stdWrap($str_content,$conf['innerStdWrap_all.']);}
04222
04223 if ($uTagName) {
04224
04225 if (is_array($conf['addAttributes.'][$uTagName.'.'])) {
04226 reset($conf['addAttributes.'][$uTagName.'.']);
04227 while(list($kk,$vv)=each($conf['addAttributes.'][$uTagName.'.'])) {
04228 if (!is_array($vv)) {
04229 if ((string)$conf['addAttributes.'][$uTagName.'.'][$kk.'.']['setOnly']=='blank') {
04230 if (!strcmp($attrib[$kk],'')) $attrib[$kk]=$vv;
04231 } elseif ((string)$conf['addAttributes.'][$uTagName.'.'][$kk.'.']['setOnly']=='exists') {
04232 if (!isset($attrib[$kk])) $attrib[$kk]=$vv;
04233 } else {
04234 $attrib[$kk]=$vv;
04235 }
04236 }
04237 }
04238 }
04239
04240 if (is_array($conf['encapsLinesStdWrap.'][$uTagName.'.'])) {$str_content = $this->stdWrap($str_content,$conf['encapsLinesStdWrap.'][$uTagName.'.']);}
04241
04242 if (!$attrib['align'] && $defaultAlign) $attrib['align']=$defaultAlign;
04243
04244 $params = t3lib_div::implodeAttributes($attrib,1);
04245 if ($conf['removeWrapping']) {
04246 $str_content=$str_content;
04247 } else {
04248 $str_content='<'.strtolower($uTagName).(trim($params)?' '.trim($params):'').'>'.$str_content.'</'.strtolower($uTagName).'>';
04249 }
04250 }
04251
04252 if ($nWrapped && $conf['wrapNonWrappedLines']) {$str_content = $this->wrap($str_content,$conf['wrapNonWrappedLines']);}
04253 $lParts[$k] = $str_content;
04254 }
04255
04256 return implode(chr(10),$lParts);
04257 }
04258
04269 function http_makelinks($data,$conf) {
04270 $aTagParams = $GLOBALS['TSFE']->ATagParams.($conf['ATagParams']?' '.$conf['ATagParams']:'');
04271 $textpieces = explode('http:
04272 $pieces = count($textpieces);
04273 $textstr = $textpieces[0];
04274 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
04275 for($i=1; $i<$pieces; $i++) {
04276 $len=strcspn($textpieces[$i],chr(32).chr(9).chr(13).chr(10));
04277 if (trim(substr($textstr,-1))=='' && $len) {
04278
04279 $lastChar=substr($textpieces[$i],$len-1,1);
04280 if (!ereg('[A-Za-z0-9\/#_-]',$lastChar)) {$len--;}
04281
04282 $parts[0]=substr($textpieces[$i],0,$len);
04283 $parts[1]=substr($textpieces[$i],$len);
04284
04285 $keep=$conf['keep'];
04286 $linkParts=parse_url('http:
04287 $linktxt='';
04288 if (strstr($keep,'scheme')) {
04289 $linktxt='http:
04290 }
04291 $linktxt.= $linkParts['host'];
04292 if (strstr($keep,'path')) {
04293 $linktxt.= $linkParts['path'];
04294 if (strstr($keep,'query') && $linkParts['query']) {
04295 $linktxt.= '?'.$linkParts['query'];
04296 } elseif ($linkParts['path']=='/') {
04297 $linktxt=substr($linktxt,0,-1);
04298 }
04299 }
04300 $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
04301 if ($GLOBALS['TSFE']->config['config']['jumpurl_enable']) {
04302 $res = '<a'.
04303 ' href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode('http://'.$parts[0]).$GLOBALS['TSFE']->getMethodUrlIdToken).'"'.
04304 ($target ? ' target="'.$target.'"' : '').
04305 $aTagParams.
04306 '>';
04307 } else {
04308 $res = '<a'.
04309 ' href="http://'.htmlspecialchars($parts[0]).'"'.
04310 ($target ? ' target="'.$target.'"' : '').
04311 $aTagParams.
04312 '>';
04313 }
04314 if ($conf['ATagBeforeWrap']) {
04315 $res= $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
04316 } else {
04317 $res= $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
04318 }
04319 $textstr.=$res.$parts[1];
04320 } else {
04321 $textstr.='http:
04322 }
04323 }
04324 return $textstr;
04325 }
04326
04336 function mailto_makelinks($data,$conf) {
04337
04338 $aTagParams = $GLOBALS['TSFE']->ATagParams.($conf['ATagParams']?' '.$conf['ATagParams']:'');
04339 $textpieces = explode('mailto:', $data);
04340 $pieces = count($textpieces);
04341 $textstr = $textpieces[0];
04342 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
04343 for($i=1; $i<$pieces; $i++) {
04344 $len = strcspn($textpieces[$i],chr(32).chr(9).chr(13).chr(10));
04345 if (trim(substr($textstr,-1))=='' && $len) {
04346 $lastChar = substr($textpieces[$i],$len-1,1);
04347 if (!ereg('[A-Za-z0-9]',$lastChar)) {$len--;}
04348
04349 $parts[0] = substr($textpieces[$i],0,$len);
04350 $parts[1] = substr($textpieces[$i],$len);
04351 $linktxt = ereg_replace('\?.*','',$parts[0]);
04352 if (!$GLOBALS['TSFE']->config['config']['jumpurl_enable'] || $GLOBALS['TSFE']->config['config']['jumpurl_mailto_disable']) {
04353 if ($GLOBALS['TSFE']->spamProtectEmailAddresses) {
04354 $mailToUrl = "javascript:linkTo_UnCryptMailto('".$GLOBALS['TSFE']->encryptEmail('mailto:'.$parts[0])."');";
04355 $atLabel = trim($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_atSubst']);
04356 $linktxt = str_replace('@',$atLabel ? $atLabel : '(at)', $linktxt);
04357 } else {
04358 $mailToUrl = 'mailto:'.$parts[0];
04359 }
04360 $res = '<a href="'.htmlspecialchars($mailToUrl).'"'.$aTagParams.'>';
04361 } else {
04362 $res = '<a href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode('mailto:'.$parts[0]).$GLOBALS['TSFE']->getMethodUrlIdToken).'"'.$aTagParams.'>';
04363 }
04364 if ($conf['ATagBeforeWrap']) {
04365 $res= $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
04366 } else {
04367 $res= $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
04368 }
04369 $textstr.=$res.$parts[1];
04370 } else {
04371 $textstr.='mailto:'.$textpieces[$i];
04372 }
04373 }
04374 return $textstr;
04375 }
04376
04388 function getImgResource($file,$fileArray) {
04389 if (is_array($fileArray)) {
04390 switch($file) {
04391 case 'GIFBUILDER':
04392 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04393 $gifCreator->init();
04394 $theImage='';
04395 if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
04396 $gifCreator->start($fileArray,$this->data);
04397 $theImage = $gifCreator->gifBuild();
04398 }
04399 return $gifCreator->getImageDimensions($theImage);
04400 break;
04401 default:
04402 if ($fileArray['import.']) {
04403 $ifile = $this->stdWrap('',$fileArray['import.']);
04404 if ($ifile) {$file = $fileArray['import'].$ifile;}
04405 }
04406 $theImage = $GLOBALS['TSFE']->tmpl->getFileName($file);
04407 if ($theImage) {
04408 $fileArray['width']= $this->stdWrap($fileArray['width'],$fileArray['width.']);
04409 $fileArray['height']= $this->stdWrap($fileArray['height'],$fileArray['height.']);
04410 $fileArray['ext']= $this->stdWrap($fileArray['ext'],$fileArray['ext.']);
04411 $fileArray['maxW']= intval($this->stdWrap($fileArray['maxW'],$fileArray['maxW.']));
04412 $fileArray['maxH']= intval($this->stdWrap($fileArray['maxH'],$fileArray['maxH.']));
04413 $fileArray['minW']= intval($fileArray['minW']);
04414 $fileArray['minH']= intval($fileArray['minH']);
04415 $maskArray= $fileArray['m.'];
04416 $maskImages=array();
04417 if (is_array($fileArray['m.'])) {
04418 $maskImages['m_mask'] = $this->getImgResource($maskArray['mask'],$maskArray['mask.']);
04419 $maskImages['m_bgImg'] = $this->getImgResource($maskArray['bgImg'],$maskArray['bgImg.']);
04420 $maskImages['m_bottomImg'] = $this->getImgResource($maskArray['bottomImg'],$maskArray['bottomImg.']);
04421 $maskImages['m_bottomImg_mask'] = $this->getImgResource($maskArray['bottomImg_mask'],$maskArray['bottomImg_mask.']);
04422 }
04423 $hash = t3lib_div::shortMD5($theImage.serialize($fileArray).serialize($maskImages));
04424 if (!isset($GLOBALS['TSFE']->tmpl->fileCache[$hash])) {
04425 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04426 $gifCreator->init();
04427 if ($fileArray['sample']) {
04428 $gifCreator->scalecmd = '-sample';
04429 $GLOBALS['TT']->setTSlogMessage('Sample option: Images are scaled with -sample.');
04430 }
04431 if ($fileArray['alternativeTempPath'] && t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['FE']['allowedTempPaths'],$fileArray['alternativeTempPath'])) {
04432 $gifCreator->tempPath = $fileArray['alternativeTempPath'];
04433 $GLOBALS['TT']->setTSlogMessage('Set alternativeTempPath: '.$fileArray['alternativeTempPath']);
04434 }
04435
04436 if (!trim($fileArray['ext'])){$fileArray['ext']='web';}
04437 $options = Array();
04438 if ($fileArray['maxW']) {$options['maxW']=$fileArray['maxW'];}
04439 if ($fileArray['maxH']) {$options['maxH']=$fileArray['maxH'];}
04440 if ($fileArray['minW']) {$options['minW']=$fileArray['minW'];}
04441 if ($fileArray['minH']) {$options['minH']=$fileArray['minH'];}
04442
04443
04444 if (is_array($maskArray) && $GLOBALS['TYPO3_CONF_VARS']['GFX']['im']) {
04445
04446 $fI = t3lib_div::split_fileref($theImage);
04447 $dest = $gifCreator->tempPath.$hash.'.'.($fI['fileext']==$gifCreator->gifExtension ? $gifCreator->gifExtension : 'jpg');
04448 if (!@file_exists($dest)) {
04449 $m_mask= $maskImages['m_mask'];
04450 $m_bgImg = $maskImages['m_bgImg'];
04451 if ($m_mask && $m_bgImg) {
04452 $negate = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_negate_mask'] ? ' -negate' : '';
04453
04454 $temp_ext='png';
04455 if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_mask_temp_ext_gif']) {
04456 $temp_ext=$gifCreator->gifExtension;
04457 }
04458
04459 $tempFileInfo = $gifCreator->imageMagickConvert($theImage,$temp_ext,$fileArray['width'],$fileArray['height'],$fileArray['params'],$fileArray['frame'],$options);
04460 if (is_array($tempFileInfo)) {
04461 $m_bottomImg = $maskImages['m_bottomImg'];
04462 if ($m_bottomImg) {
04463 $m_bottomImg_mask = $maskImages['m_bottomImg_mask'];
04464 }
04465
04466 $tempScale=array();
04467 $command = '-geometry '.$tempFileInfo[0].'x'.$tempFileInfo[1].'!';
04468 $tmpStr = $gifCreator->randomName();
04469
04470
04471 $tempScale['m_mask']=$tmpStr.'_mask.'.$temp_ext;
04472 $gifCreator->imageMagickExec($m_mask[3],$tempScale['m_mask'],$command.$negate);
04473
04474 $tempScale['m_bgImg']=$tmpStr.'_bgImg.'.trim($GLOBALS['TYPO3_CONF_VARS']['GFX']['im_mask_temp_ext_noloss']);
04475 $gifCreator->imageMagickExec($m_bgImg[3],$tempScale['m_bgImg'],$command);
04476
04477
04478 if ($m_bottomImg && $m_bottomImg_mask) {
04479 $tempScale['m_bottomImg']=$tmpStr.'_bottomImg.'.$temp_ext;
04480 $gifCreator->imageMagickExec($m_bottomImg[3],$tempScale['m_bottomImg'],$command);
04481 $tempScale['m_bottomImg_mask']=$tmpStr.'_bottomImg_mask.'.$temp_ext;
04482 $gifCreator->imageMagickExec($m_bottomImg_mask[3],$tempScale['m_bottomImg_mask'],$command.$negate);
04483
04484
04485
04486 $gifCreator->combineExec($tempScale['m_bgImg'],$tempScale['m_bottomImg'],$tempScale['m_bottomImg_mask'],$tempScale['m_bgImg']);
04487 }
04488
04489 $gifCreator->combineExec($tempScale['m_bgImg'],$tempFileInfo[3],$tempScale['m_mask'],$dest);
04490
04491 reset($tempScale);
04492 while(list(,$file)=each($tempScale)) {
04493 if (@is_file($file)) {
04494 unlink($file);
04495 }
04496 }
04497
04498 }
04499 }
04500 }
04501
04502 $GLOBALS['TSFE']->tmpl->fileCache[$hash]= $gifCreator->getImageDimensions($dest);
04503 } else {
04504 $GLOBALS['TSFE']->tmpl->fileCache[$hash]= $gifCreator->imageMagickConvert($theImage,$fileArray['ext'],$fileArray['width'],$fileArray['height'],$fileArray['params'],$fileArray['frame'],$options);
04505 }
04506 $GLOBALS['TSFE']->tmpl->fileCache[$hash]['origFile'] = $theImage;
04507 $GLOBALS['TSFE']->tmpl->fileCache[$hash]['origFile_mtime'] = @filemtime($theImage);
04508 }
04509 return $GLOBALS['TSFE']->tmpl->fileCache[$hash];
04510 }
04511
04512 break;
04513 }
04514 }
04515 $theImage = $GLOBALS['TSFE']->tmpl->getFileName($file);
04516 if ($theImage) {
04517 $gifCreator = t3lib_div::makeInstance('tslib_gifbuilder');
04518 $gifCreator->init();
04519 $info= $gifCreator->imageMagickConvert($theImage,'WEB','','','','','');
04520 $info['origFile'] = $theImage;
04521 $info['origFile_mtime'] = @filemtime($theImage);
04522 return $info;
04523 }
04524 }
04525
04526
04527
04528
04529
04530
04531
04532
04533
04534
04535
04536
04537
04538
04539
04540
04541
04542
04543
04544
04545
04546
04547
04548
04549
04550
04551
04552
04553
04560 function getFieldVal($field) {
04561 if (!strstr($field,'
04562 return $this->data[trim($field)];
04563 } else {
04564 $sections = t3lib_div::trimExplode('
04565 while (list(,$k)=each($sections)) {
04566 if (strcmp($this->data[$k],'')) return $this->data[$k];
04567 }
04568 }
04569 }
04570
04580 function getData($string,$fieldArray) {
04581 if (!is_array($fieldArray)) {
04582 $fieldArray=$GLOBALS['TSFE']->page;
04583 }
04584 $retVal = '';
04585 $sections = explode('
04586
04587 while (!$retVal AND list($secKey, $secVal)=each($sections)) {
04588 $parts = explode(':',$secVal,2);
04589 $key = trim($parts[1]);
04590 if ((string)$key!='') {
04591 switch(strtolower(trim($parts[0]))) {
04592 case 'gpvar':
04593 list($firstKey, $rest) = explode('|', $key, 2);
04594 if (strlen(trim($firstKey))) {
04595 $retVal = t3lib_div::_GP(trim($firstKey));
04596
04597 if (strlen(trim($rest))) {
04598 $retVal = is_array($retVal) ? $this->getGlobal($rest, $retVal) : '';
04599 }
04600
04601 if (is_array($retVal)) $retVal = '';
04602 }
04603 break;
04604 case 'tsfe':
04605 $retVal = $GLOBALS['TSFE']->$key;
04606 break;
04607 case 'getenv':
04608 $retVal = getenv($key);
04609 break;
04610 case 'getindpenv':
04611 $retVal = t3lib_div::getIndpEnv($key);
04612 break;
04613 case 'field':
04614 $retVal = $fieldArray[$key];
04615 break;
04616 case 'parameters':
04617 $retVal = $this->parameters[$key];
04618 break;
04619 case 'register':
04620 $retVal = $GLOBALS['TSFE']->register[$key];
04621 break;
04622 case 'global':
04623 $retVal = $this->getGlobal($key);
04624 break;
04625 case 'leveltitle':
04626 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04627 $retVal = $this->rootLineValue($nkey,'title',stristr($key,'slide'));
04628 break;
04629 case 'levelmedia':
04630 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04631 $retVal = $this->rootLineValue($nkey,'media',stristr($key,'slide'));
04632 break;
04633 case 'leveluid':
04634 $nkey = $this->getKey($key,$GLOBALS['TSFE']->tmpl->rootLine);
04635 $retVal = $this->rootLineValue($nkey,'uid',stristr($key,'slide'));
04636 break;
04637 case 'levelfield':
04638 $keyP = t3lib_div::trimExplode(',',$key);
04639 $nkey = $this->getKey($keyP[0],$GLOBALS['TSFE']->tmpl->rootLine);
04640 $retVal = $this->rootLineValue($nkey,$keyP[1],strtolower($keyP[2])=='slide');
04641 break;
04642 case 'fullrootline':
04643 $keyP = t3lib_div::trimExplode(',',$key);
04644 $fullKey = intval($keyP[0])-count($GLOBALS['TSFE']->tmpl->rootLine)+count($GLOBALS['TSFE']->rootLine);
04645 if ($fullKey>=0) {
04646 $retVal = $this->rootLineValue($fullKey,$keyP[1],stristr($keyP[2],'slide'),$GLOBALS['TSFE']->rootLine);
04647 }
04648 break;
04649 case 'date':
04650 if (!$key) {$key = 'd/m Y';}
04651 $retVal = date($key, time());
04652 break;
04653 case 'page':
04654 $retVal = $GLOBALS['TSFE']->page[$key];
04655 break;
04656 case 'current':
04657 $retVal = $this->data[$this->currentValKey];
04658 break;
04659 case 'level':
04660 $retVal = count($GLOBALS['TSFE']->tmpl->rootLine)-1;
04661 break;
04662 case 'db':
04663 $selectParts = t3lib_div::trimExplode(':',$key);
04664 $db_rec = $GLOBALS['TSFE']->sys_page->getRawRecord($selectParts[0],$selectParts[1]);
04665 if (is_array($db_rec) && $selectParts[2]) {$retVal = $db_rec[$selectParts[2]];}
04666 break;
04667 case 'lll':
04668 $retVal = $GLOBALS['TSFE']->sL('LLL:'.$key);
04669 break;
04670 case 'cobj':
04671 switch((string)$key) {
04672 case 'parentRecordNumber':
04673 $retVal = $this->parentRecordNumber;
04674 break;
04675 }
04676 break;
04677 case 'debug':
04678 switch((string)$key) {
04679 case 'rootLine':
04680 $retVal = t3lib_div::view_array($GLOBALS['TSFE']->tmpl->rootLine);
04681 break;
04682 case 'fullRootLine':
04683 $retVal = t3lib_div::view_array($GLOBALS['TSFE']->rootLine);
04684 break;
04685 case 'data':
04686 $retVal = t3lib_div::view_array($this->data);
04687 break;
04688 }
04689 break;
04690 }
04691 }
04692 }
04693 return $retVal;
04694 }
04695
04707 function rootLineValue($key,$field,$slideBack=0,$altRootLine='') {
04708 $rootLine = is_array($altRootLine) ? $altRootLine : $GLOBALS['TSFE']->tmpl->rootLine;
04709 if (!$slideBack) {
04710 return $rootLine[$key][$field];
04711 } else {
04712 for ($a=$key;$a>=0;$a--) {
04713 $val = $rootLine[$a][$field];
04714 if ($val) {return $val;}
04715 }
04716 }
04717 }
04718
04729 function getGlobal($var, $source=NULL) {
04730 $vars = explode('|', $var);
04731 $c = count($vars);
04732 $theVar = isset($source) ? $source[trim($vars[0])] : $GLOBALS[trim($vars[0])];
04733 for ($a=1;$a<$c;$a++) {
04734 if (!isset($theVar)) {break;}
04735 $theVar = $theVar[trim($vars[$a])];
04736 }
04737 if (!is_array($theVar)) {
04738 return $theVar;
04739 } else {
04740 return '';
04741 }
04742 }
04743
04754 function getKey($key,$arr) {
04755 $key = intval($key);
04756 if (is_array($arr)) {
04757 if ($key < 0) {
04758 $key = count($arr)+$key;
04759 }
04760 if ($key < 0) {
04761 $key=0;
04762 }
04763 }
04764 return $key;
04765 }
04766
04767
04768
04769
04770
04771
04772
04773
04774
04775
04776
04777
04778
04779
04780
04781
04782
04783
04784
04785
04786
04787
04788
04789
04790
04791
04792
04806 function typoLink($linktxt, $conf) {
04807 $finalTagParts = array();
04808 $finalTagParts['aTagParams'] = $GLOBALS['TSFE']->ATagParams.($conf['ATagParams']?' '.$conf['ATagParams']:'');
04809
04810 $link_param = trim($this->stdWrap($conf['parameter'],$conf['parameter.']));
04811 $sectionMark = trim($this->stdWrap($conf['section'],$conf['section.']));
04812 $sectionMark = $sectionMark ? '#'.$sectionMark : '';
04813 $initP = '?id='.$GLOBALS['TSFE']->id.'&type='.$GLOBALS['TSFE']->type;
04814 $this->lastTypoLinkUrl = '';
04815 $this->lastTypoLinkTarget = '';
04816 if ($link_param) {
04817 $link_paramA = t3lib_div::trimExplode(' ',$link_param,1);
04818 $link_param = trim($link_paramA[0]);
04819 $linkClass = trim($link_paramA[2]);
04820 $forceTarget = trim($link_paramA[1]);
04821 if ($forceTarget=='-') $forceTarget = '';
04822
04823 $JSwindowParts = array();
04824 $JSwindowParams = '';
04825 $onClick = '';
04826 if ($forceTarget && ereg('^([0-9]+)x([0-9]+)(:(.*)|.*)$',$forceTarget,$JSwindowParts)) {
04827
04828 $JSwindow_tempParamsArr = t3lib_div::trimExplode(',',strtolower($conf['JSwindow_params'].','.$JSwindowParts[4]),1);
04829 $JSwindow_paramsArr=array();
04830 foreach($JSwindow_tempParamsArr as $JSv) {
04831 list($JSp,$JSv) = explode('=',$JSv);
04832 $JSwindow_paramsArr[$JSp]=$JSp.'='.$JSv;
04833 }
04834
04835 $JSwindow_paramsArr['width']='width='.$JSwindowParts[1];
04836 $JSwindow_paramsArr['height']='height='.$JSwindowParts[2];
04837
04838 $JSwindowParams = implode(',',$JSwindow_paramsArr);
04839 $forceTarget = '';
04840 }
04841
04842
04843 $target = isset($conf['target']) ? $conf['target'] : $GLOBALS['TSFE']->intTarget;
04844 if ($conf['target.']) {$target=$this->stdWrap($target, $conf['target.']);}
04845
04846
04847 $pU = parse_url($link_param);
04848
04849
04850 if(strstr($link_param,'@') && !$pU['scheme']) {
04851 $link_param = eregi_replace('^mailto:','',$link_param);
04852 if ($linktxt=='') $linktxt = $link_param;
04853 if (!$GLOBALS['TSFE']->config['config']['jumpurl_enable'] || $GLOBALS['TSFE']->config['config']['jumpurl_mailto_disable']) {
04854 $this->lastTypoLinkUrl = 'mailto:'.$link_param;
04855 if ($GLOBALS['TSFE']->spamProtectEmailAddresses) {
04856 $this->lastTypoLinkUrl = "javascript:linkTo_UnCryptMailto('".$GLOBALS['TSFE']->encryptEmail($this->lastTypoLinkUrl)."');";
04857 $atLabel = trim($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses_atSubst']);
04858 $linktxt=str_replace('@',$atLabel?$atLabel:'(at)',$linktxt);
04859 }
04860 } else {
04861 $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode('mailto:'.$link_param).$GLOBALS['TSFE']->getMethodUrlIdToken;
04862 }
04863 $finalTagParts['url']=$this->lastTypoLinkUrl;
04864 $finalTagParts['TYPE']='mailto';
04865 } else {
04866 $isLocalFile=0;
04867 $fileChar=intval(strpos($link_param, '/'));
04868 $urlChar=intval(strpos($link_param, '.'));
04869
04870
04871 list($rootFileDat) = explode('?',rawurldecode($link_param));
04872 $containsSlash = strstr($rootFileDat,'/');
04873 $rFD_fI = pathinfo($rootFileDat);
04874 if (trim($rootFileDat) && !$containsSlash && (@is_file(PATH_site.$rootFileDat) || t3lib_div::inList('php,html,htm',strtolower($rFD_fI['extension'])))) {
04875 $isLocalFile = 1;
04876 } elseif ($containsSlash) {
04877 $isLocalFile = 2;
04878 }
04879
04880 if($pU['scheme'] || ($isLocalFile!=1 && $urlChar && (!$containsSlash || $urlChar<$fileChar))) {
04881 $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
04882 if ($conf['extTarget.']) {$target = $this->stdWrap($target, $conf['extTarget.']);}
04883 if ($forceTarget) {$target=$forceTarget;}
04884 if ($linktxt=='') $linktxt = $link_param;
04885 if (!$pU['scheme']) {$scheme='http:
04886 if ($GLOBALS['TSFE']->config['config']['jumpurl_enable']) {
04887 $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($scheme.$link_param).$GLOBALS['TSFE']->getMethodUrlIdToken;
04888 } else {
04889 $this->lastTypoLinkUrl = $scheme.$link_param;
04890 }
04891 $this->lastTypoLinkTarget = $target;
04892 $finalTagParts['url']=$this->lastTypoLinkUrl;
04893 $finalTagParts['targetParams'] = $target ? ' target="'.$target.'"' : '';
04894 $finalTagParts['TYPE']='url';
04895 } elseif ($containsSlash || $isLocalFile) {
04896 $splitLinkParam = explode('?', $link_param);
04897 if (@file_exists(rawurldecode($splitLinkParam[0])) || $isLocalFile) {
04898 if ($linktxt=='') $linktxt = rawurldecode($link_param);
04899 if ($GLOBALS['TSFE']->config['config']['jumpurl_enable']) {
04900 $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$GLOBALS['TSFE']->config['mainScript'].$initP.'&jumpurl='.rawurlencode($link_param).$GLOBALS['TSFE']->getMethodUrlIdToken;
04901 } else {
04902 $this->lastTypoLinkUrl = $GLOBALS['TSFE']->absRefPrefix.$link_param;
04903 }
04904 if ($forceTarget) {$target=$forceTarget;}
04905 $this->lastTypoLinkTarget = $target;
04906
04907 $finalTagParts['url'] = $this->lastTypoLinkUrl;
04908 $finalTagParts['targetParams'] = $target ? ' target="'.$target.'"' : '';
04909 $finalTagParts['TYPE'] = 'file';
04910 } else {
04911 $GLOBALS['TT']->setTSlogMessage("typolink(): File '".$splitLinkParam[0]."' did not exist, so '".$linktxt."' was not linked.",1);
04912 return $linktxt;
04913 }
04914 } else {
04915 if ($conf['no_cache.']) $conf['no_cache']=$this->stdWrap($conf['no_cache'], $conf['no_cache.']);
04916 $link_params_parts=explode('#',$link_param);
04917 $link_param = trim($link_params_parts[0]);
04918 if (!strcmp($link_param,'')) {$link_param=$GLOBALS['TSFE']->id;}
04919 if ($link_params_parts[1] && !$sectionMark) {
04920 $sectionMark='#'.trim($link_params_parts[1]);
04921 }
04922
04923 unset($theTypeP);
04924 $pairParts = t3lib_div::trimExplode(',',$link_param);
04925 if (count($pairParts)>1) {
04926 $link_param = $pairParts[0];
04927 $theTypeP = $pairParts[1];
04928 }
04929
04930 if (!t3lib_div::testInt($link_param)) {
04931 $link_param = $GLOBALS['TSFE']->sys_page->getPageIdFromAlias($link_param);
04932 }
04933
04934
04935 $page = $GLOBALS['TSFE']->sys_page->getPage($link_param);
04936 if (count($page)) {
04937
04938 $tCR_domain='';
04939 if ($GLOBALS['TSFE']->config['config']['typolinkCheckRootline']) {
04940 $tCR_rootline = $GLOBALS['TSFE']->sys_page->getRootLine($page['uid']);
04941 $tCR_flag = 0;
04942 foreach($tCR_rootline as $tCR_data) {
04943 if ($tCR_data['uid']==$GLOBALS['TSFE']->tmpl->rootLine[0]['uid']) {
04944 $tCR_flag = 1;
04945 break;
04946 }
04947 }
04948 if (!$tCR_flag) {
04949 foreach($tCR_rootline as $tCR_data) {
04950 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_domain', 'pid='.intval($tCR_data['uid']).' AND redirectTo=""'.$this->enableFields('sys_domain'), '', 'sorting');
04951 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
04952 $tCR_domain = ereg_replace('\/$','',$row['domainName']);
04953 break;
04954 }
04955 }
04956 }
04957 }
04958
04959 $MPvarAcc = array();
04960 if (!$GLOBALS['TSFE']->config['config']['MP_disableTypolinkClosestMPvalue']) {
04961 $temp_MP = $this->getClosestMPvalueForPage($page['uid'],TRUE);
04962 if ($temp_MP) $MPvarAcc['closest'] = $temp_MP;
04963 }
04964
04965 $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($page['uid'], $page);
04966 if (is_array($mount_info) && $mount_info['overlay']) {
04967 $page = $GLOBALS['TSFE']->sys_page->getPage($mount_info['mount_pid']);
04968 if (!count($page)) {
04969 $GLOBALS['TT']->setTSlogMessage("typolink(): Mount point '".$mount_info['mount_pid']."' was not available, so '".$linktxt."' was not linked.",1);
04970 return $linktxt;
04971 }
04972 $MPvarAcc['re-map'] = $mount_info['MPvar'];
04973 }
04974
04975
04976 if ($linktxt=='') $linktxt = $page['title'];
04977
04978
04979 $addQueryParams = trim($this->stdWrap($conf['additionalParams'],$conf['additionalParams.']));
04980 if (substr($addQueryParams,0,1)!='&') {
04981 $addQueryParams = '';
04982 } elseif ($conf['useCacheHash']) {
04983 $pA = $GLOBALS['TSFE']->cHashParams($addQueryParams.$GLOBALS['TSFE']->linkVars);
04984 $addQueryParams.= '&cHash='.t3lib_div::shortMD5(serialize($pA));
04985 }
04986
04987 if (count($MPvarAcc)) {
04988 $addQueryParams.= '&MP='.rawurlencode(implode(',',$MPvarAcc));
04989 }
04990
04991 if ($tCR_domain) {
04992 $target = isset($conf['extTarget']) ? $conf['extTarget'] : $GLOBALS['TSFE']->extTarget;
04993 if ($conf['extTarget.']) {$target = $this->stdWrap($target, $conf['extTarget.']);}
04994 if ($forceTarget) {$target=$forceTarget;}
04995 $LD['target'] = $target;
04996 $this->lastTypoLinkUrl = $this->URLqMark('http:
04997 } else {
04998 if ($forceTarget) {$target=$forceTarget;}
04999 $LD = $GLOBALS['TSFE']->tmpl->linkData($page,$target,$conf['no_cache'],'','',$addQueryParams,$theTypeP);
05000 $this->lastTypoLinkUrl = $this->URLqMark($LD['totalURL'],'').$sectionMark;
05001 }
05002
05003 $this->lastTypoLinkTarget = $LD['target'];
05004 $targetPart = $LD['target'] ? ' target="'.$LD['target'].'"' : '';
05005
05006
05007 if ($sectionMark && !trim($addQueryParams) && $page['uid']==$GLOBALS['TSFE']->id) {
05008 list(,$URLparams) = explode('?',$this->lastTypoLinkUrl);
05009 list($URLparams) = explode('#',$URLparams);
05010 parse_str ($URLparams.$LD['orig_type'], $URLparamsArray);
05011 if (intval($URLparamsArray['type'])==$GLOBALS['TSFE']->type) {
05012 unset($URLparamsArray['id']);
05013 unset($URLparamsArray['type']);
05014 if (!count($URLparamsArray)) {
05015 $this->lastTypoLinkUrl = $sectionMark;
05016 }
05017 }
05018 }
05019
05020 $finalTagParts['url']=$this->lastTypoLinkUrl;
05021 $finalTagParts['targetParams']=$targetPart;
05022 $finalTagParts['TYPE']='page';
05023 } else {
05024 $GLOBALS['TT']->setTSlogMessage("typolink(): Page id '".$link_param."' was not found, so '".$linktxt."' was not linked.",1);
05025 return $linktxt;
05026 }
05027 }
05028 }
05029
05030 if ($JSwindowParams) {
05031 $onClick="vHWin=window.open('".$GLOBALS['TSFE']->baseUrlWrap($finalTagParts['url'])."','FEopenLink','".$JSwindowParams."');vHWin.focus();return false;";
05032 $res = '<a href="#" onclick="'.htmlspecialchars($onClick).'"'.($linkClass?' class="'.$linkClass.'"':'').$finalTagParts['aTagParams'].'>';
05033 } else {
05034 $res = '<a href="'.htmlspecialchars($finalTagParts['url']).'"'.$finalTagParts['targetParams'].($linkClass?' class="'.$linkClass.'"':'').$finalTagParts['aTagParams'].'>';
05035 }
05036
05037
05038 if ($conf['userFunc']) {
05039 $finalTagParts['TAG']=$res;
05040 $res = $this->callUserFunction($conf['userFunc'],$conf['userFunc.'],$finalTagParts);
05041 }
05042
05043
05044 if ($conf['returnLast']) {
05045 switch($conf['returnLast']) {
05046 case 'url':
05047 return $this->lastTypoLinkUrl;
05048 break;
05049 case 'target':
05050 return $this->lastTypoLinkTarget;
05051 break;
05052 }
05053 }
05054
05055 if ($conf['ATagBeforeWrap']) {
05056 return $res.$this->wrap($linktxt, $conf['wrap']).'</a>';
05057 } else {
05058 return $this->wrap($res.$linktxt.'</a>', $conf['wrap']);
05059 }
05060 } else {
05061 return $linktxt;
05062 }
05063 }
05064
05073 function typoLink_URL($conf) {
05074 $this->typolink('|',$conf);
05075 return $this->lastTypoLinkUrl;
05076 }
05077
05091 function getTypoLink($label,$params,$urlParameters=array(),$target='') {
05092 $conf=array();
05093 $conf['parameter'] = $params;
05094 if ($target) {
05095 $conf['target']=$target;
05096 $conf['extTarget']=$target;
05097 }
05098 if (is_array($urlParameters)) {
05099 if (count($urlParameters)) {
05100 reset($urlParameters);
05101 while(list($k,$v)=each($urlParameters)) {
05102 $conf['additionalParams'].='&'.$k.'='.rawurlencode($v);
05103 }
05104 }
05105 } else {
05106 $conf['additionalParams'].=$urlParameters;
05107 }
05108 $out = $this->typolink($label,$conf);
05109 return $out;
05110 }
05111
05121 function getTypoLink_URL($params,$urlParameters=array(),$target='') {
05122 $this->getTypoLink('',$params,$urlParameters,$target);
05123 return $this->lastTypoLinkUrl;
05124 }
05125
05133 function typolinkWrap($conf) {
05134 $k=md5(microtime());
05135 return explode($k,$this->typolink($k,$conf));
05136 }
05137
05146 function currentPageUrl($urlParameters=array(),$id=0) {
05147 return $this->getTypoLink_URL($id?$id:$GLOBALS['TSFE']->id,$urlParameters,$GLOBALS['TSFE']->sPre);
05148 }
05149
05159 function getClosestMPvalueForPage($pageId, $raw=FALSE) {
05160
05161 if ($GLOBALS['TYPO3_CONF_VARS']['FE']['enable_mount_pids'] && $GLOBALS['TSFE']->MP) {
05162
05163 if (!strcmp($GLOBALS['TSFE']->id, $pageId)) {
05164 $MP = $GLOBALS['TSFE']->MP;
05165 } else {
05166 $tCR_rootline = $GLOBALS['TSFE']->sys_page->getRootLine($pageId, '', TRUE);
05167 $inverseTmplRootline = array_reverse($GLOBALS['TSFE']->tmpl->rootLine);
05168
05169 $rl_mpArray = array();
05170 $startMPaccu = FALSE;
05171
05172
05173 foreach($tCR_rootline as $tCR_data) {
05174 foreach($inverseTmplRootline as $rlKey => $invTmplRLRec) {
05175
05176
05177 if ($startMPaccu && $invTmplRLRec['_MP_PARAM']) {
05178 $rl_mpArray[] = $invTmplRLRec['_MP_PARAM'];
05179 }
05180
05181
05182
05183 if ($tCR_data['pid']==$invTmplRLRec['pid'] && count($inverseTmplRootline)!=$rlKey+1) {
05184 $startMPaccu = TRUE;
05185 }
05186 }
05187 if ($startMPaccu) break;
05188 }
05189
05190 if (count($rl_mpArray)) {
05191 $MP = implode(',', array_reverse($rl_mpArray));
05192 }
05193 }
05194 }
05195
05196 return !$raw ? ($MP ? '&MP='.rawurlencode($MP) : '') : $MP;
05197 }
05198
05199
05200
05201
05202
05203
05204
05205
05206
05207
05208
05209
05210
05211
05212
05213
05214
05215
05216
05217
05218
05219
05220
05221
05222
05223
05235 function wrap($content,$wrap,$char='|') {
05236 if ($wrap) {
05237 $wrapArr = explode($char, $wrap);
05238 return trim($wrapArr[0]).$content.trim($wrapArr[1]);
05239 } else return $content;
05240 }
05241
05251 function noTrimWrap($content,$wrap) {
05252 if ($wrap) {
05253 $wrapArr = explode('|', $wrap);
05254 return $wrapArr[1].$content.$wrapArr[2];
05255 } else return $content;
05256 }
05257
05265 function wrapSpace($content, $wrap) {
05266 $result = $content;
05267 if (trim($wrap)) {
05268 $wrapArray = explode('|',$wrap);
05269 $wrapBefore = intval($wrapArray[0]);
05270 $wrapAfter = intval($wrapArray[1]);
05271 if ($wrapBefore) {
05272 $result = '<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$wrapBefore.'" border="0" class="spacer-gif" alt="" title="" /><br />'.$result;
05273 }
05274 if ($wrapAfter) {
05275 $result.='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$wrapAfter.'" border="0" class="spacer-gif" alt="" title="" /><br />';
05276 }
05277 }
05278 return $result;
05279 }
05280
05291 function callUserFunction($funcName,$conf,$content) {
05292 $pre = $GLOBALS['TSFE']->TYPO3_CONF_VARS['FE']['userFuncClassPrefix'];
05293 if ($pre &&
05294 !t3lib_div::isFirstPartOfStr(trim($funcName),$pre) &&
05295 !t3lib_div::isFirstPartOfStr(trim($funcName),'tx_')
05296 ) {
05297 $GLOBALS['TT']->setTSlogMessage('Function "'.$funcName.'" was not prepended with "'.$pre.'"',3);
05298 return $content;
05299 }
05300
05301 $parts = explode('->',$funcName);
05302 if (count($parts)==2) {
05303 $cls = t3lib_div::makeInstanceClassName($parts[0]);
05304 if (class_exists ($cls)) {
05305 $classObj = new $cls;
05306 if (method_exists($classObj, $parts[1])) {
05307 $classObj->cObj = &$this;
05308 $content = call_user_method($parts[1], $classObj, $content, $conf);
05309 } else {
05310 $GLOBALS['TT']->setTSlogMessage('Method "'.$parts[1].'" did not exist in class "'.$cls.'"',3);
05311 }
05312 } else {
05313 $GLOBALS['TT']->setTSlogMessage('Class "'.$cls.'" did not exist',3);
05314 }
05315 } else {
05316 if (function_exists($funcName)) {
05317 $content = call_user_func($funcName, $content, $conf);
05318 } else {
05319 $GLOBALS['TT']->setTSlogMessage('Function "'.$funcName.'" did not exist',3);
05320 }
05321 }
05322 return $content;
05323 }
05324
05332 function processParams($params) {
05333 $paramArr=array();
05334 $lines=t3lib_div::trimExplode(chr(10),$params,1);
05335 foreach($lines as $val) {
05336 $pair = explode('=',$val,2);
05337 if (!t3lib_div::inList('#,/',substr(trim($pair[0]),0,1))) {
05338 $paramArr[trim($pair[0])] = trim($pair[1]);
05339 }
05340 }
05341 return $paramArr;
05342 }
05343
05350 function keywords($content) {
05351 $listArr = split(',|;|'.chr(10),$content);
05352 reset($listArr);
05353 while(list($k,$v)=each($listArr)) {
05354 $listArr[$k]=trim($v);
05355 }
05356 return implode(',',$listArr);
05357 }
05358
05367 function caseshift($theValue, $case) {
05368 $case = strtolower($case);
05369 switch($case) {
05370 case 'upper':
05371 $theValue = $GLOBALS['TSFE']->csConvObj->conv_case($GLOBALS['TSFE']->renderCharset,$theValue,'toUpper');
05372 #$theValue = strtoupper($theValue);
05373 #$theValue = strtr($theValue, $this->caseConvStrings[0], $this->caseConvStrings[1]);
05374 break;
05375 case 'lower':
05376 $theValue = $GLOBALS['TSFE']->csConvObj->conv_case($GLOBALS['TSFE']->renderCharset,$theValue,'toLower');
05377 #$theValue = strtolower($theValue);
05378 #$theValue = strtr($theValue, $this->caseConvStrings[1], $this->caseConvStrings[0]);
05379 break;
05380 }
05381 return $theValue;
05382 }
05383
05392 function HTMLcaseshift($theValue, $case) {
05393 $inside = 0;
05394 $newVal = '';
05395 $pointer = 0;
05396 $totalLen = strlen($theValue);
05397 do {
05398 if (!$inside) {
05399 $len = strcspn(substr($theValue,$pointer),'<');
05400 $newVal.= $this->caseshift(substr($theValue,$pointer,$len),$case);
05401 $inside = 1;
05402 } else {
05403 $len = strcspn(substr($theValue,$pointer),'>')+1;
05404 $newVal.= substr($theValue,$pointer,$len);
05405 $inside = 0;
05406 }
05407 $pointer+=$len;
05408 } while($pointer<$totalLen);
05409 return $newVal;
05410 }
05411
05421 function bytes($sizeInBytes,$labels) {
05422 return t3lib_div::formatSize($sizeInBytes,$labels);
05423 }
05424
05432 function calcAge($seconds,$labels) {
05433 if (t3lib_div::testInt($labels)) {
05434 $labels = ' min| hrs| days| yrs';
05435 } else {
05436 $labels=str_replace('"','',$labels);
05437 }
05438
05439 $labelArr = explode('|',$labels);
05440 if ($seconds<3600) {
05441 $seconds = round ($seconds/60).$labelArr[0];
05442 } elseif ($seconds<24*3600) {
05443 $seconds = round ($seconds/3600).$labelArr[1];
05444 } elseif ($seconds<365*24*3600) {
05445 $seconds = round ($seconds/(24*3600)).$labelArr[2];
05446 } else {
05447 $seconds = round ($seconds/(365*24*3600)).$labelArr[3];
05448 }
05449 return $seconds;
05450 }
05451
05463 function sendNotifyEmail($msg, $recipients, $cc, $email_from, $email_fromName='', $replyTo='') {
05464
05465 $headers=array();
05466 if ($email_from) {$headers[]='From: '.$email_fromName.' <'.$email_from.'>';}
05467 if ($replyTo) {$headers[]='Reply-To: '.$replyTo;}
05468
05469 $recipients=implode(',',t3lib_div::trimExplode(',',$recipients,1));
05470
05471 $emailContent = trim($msg);
05472 if ($emailContent) {
05473 $parts = split(chr(10),$emailContent,2);
05474 $subject=trim($parts[0]);
05475 $plain_message=trim($parts[1]);
05476
05477 if ($recipients) $GLOBALS['TSFE']->plainMailEncoded($recipients, $subject, $plain_message, implode(chr(10),$headers));
05478 if ($cc) $GLOBALS['TSFE']->plainMailEncoded($cc, $subject, $plain_message, implode(chr(10),$headers));
05479 return true;
05480 }
05481 }
05482
05490 function URLqMark($url,$params) {
05491 if ($params && !strstr($url,'?')) {
05492 return $url.'?'.$params;
05493 } else {
05494 return $url.$params;
05495 }
05496 }
05497
05506 function checkEmail($email) {
05507 return t3lib_div::validEmail($email);
05508 }
05509
05518 function clearTSProperties($TSArr,$propList) {
05519 $list = explode(',',$propList);
05520 while(list(,$prop)=each($list)) {
05521 $prop = trim($prop);
05522 unset($TSArr[$prop]);
05523 unset($TSArr[$prop.'.']);
05524 }
05525 return $TSArr;
05526 }
05527
05537 function mergeTSRef($confArr,$prop) {
05538 if (substr($confArr[$prop],0,1)=='<') {
05539 $key = trim(substr($confArr[$prop],1));
05540 $cF = t3lib_div::makeInstance('t3lib_TSparser');
05541
05542 $old_conf=$confArr[$prop.'.'];
05543 list($name, $conf) = $cF->getVal($key,$GLOBALS['TSFE']->tmpl->setup);
05544 if (is_array($old_conf) && count($old_conf)) {
05545 $conf = $this->joinTSarrays($conf,$old_conf);
05546 }
05547 $confArr[$prop.'.']=$conf;
05548 }
05549 return $confArr;
05550 }
05551
05560 function joinTSarrays($conf,$old_conf) {
05561 if (is_array($old_conf)) {
05562 reset($old_conf);
05563 while(list($key,$val)=each($old_conf)) {
05564 if (is_array($val)) {
05565 $conf[$key] = $this->joinTSarrays($conf[$key],$val);
05566 } else {
05567 $conf[$key] = $val;
05568 }
05569 }
05570 }
05571 return $conf;
05572 }
05573
05583 function gifBuilderTextBox($gifbuilderConf, $conf, $text) {
05584 $chars = intval($conf['chars']) ? intval($conf['chars']) : 20;
05585 $lineDist = intval($conf['lineDist']) ? intval($conf['lineDist']) : 20;
05586 $Valign = strtolower(trim($conf['Valign']));
05587 $tmplObjNumber = intval($conf['tmplObjNumber']);
05588 $maxLines = intval($conf['maxLines']);
05589
05590 if ($tmplObjNumber && $gifbuilderConf[$tmplObjNumber]=='TEXT') {
05591 $textArr = $this->linebreaks($text,$chars,$maxLines);
05592 $angle = intval($gifbuilderConf[$tmplObjNumber.'.']['angle']);
05593 reset($textArr);
05594 while(list($c,$textChunk)=each($textArr)) {
05595 $index = $tmplObjNumber+1+($c*2);
05596
05597 $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$index);
05598 $rad_angle = 2*pi()/360*$angle;
05599 $x_d = sin($rad_angle)*$lineDist;
05600 $y_d = cos($rad_angle)*$lineDist;
05601
05602 $diff_x_d=0;
05603 $diff_y_d=0;
05604 if ($Valign=='center') {
05605 $diff_x_d = $x_d*count($textArr);
05606 $diff_x_d = $diff_x_d/2;
05607 $diff_y_d = $y_d*count($textArr);
05608 $diff_y_d = $diff_y_d/2;
05609 }
05610
05611
05612 $x_d = round($x_d*$c - $diff_x_d);
05613 $y_d = round($y_d*$c - $diff_y_d);
05614
05615 $gifbuilderConf[$index] = 'WORKAREA';
05616 $gifbuilderConf[$index.'.']['set'] = $x_d.','.$y_d;
05617
05618 $index++;
05619 $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$index);
05620 $gifbuilderConf[$index] = 'TEXT';
05621 $gifbuilderConf[$index.'.'] = $this->clearTSProperties($gifbuilderConf[$tmplObjNumber.'.'],'text');
05622 $gifbuilderConf[$index.'.']['text'] = $textChunk;
05623 }
05624 $gifbuilderConf = $this->clearTSProperties($gifbuilderConf,$tmplObjNumber);
05625 }
05626 return $gifbuilderConf;
05627 }
05628
05639 function linebreaks($string,$chars,$maxLines=0) {
05640 $lines = explode(chr(10),$string);
05641 $lineArr=Array();
05642 $c=0;
05643 while(list(,$paragraph)=each($lines)) {
05644 $words = explode(' ',$paragraph);
05645 while(list(,$word)=each($words)) {
05646 if (strlen($lineArr[$c].$word)>$chars) {
05647 $c++;
05648 }
05649 if (!$maxLines || $c<$maxLines) {
05650 $lineArr[$c].= $word.' ';
05651 }
05652 }
05653 $c++;
05654 }
05655 return $lineArr;
05656 }
05657
05670 function getUpdateJS($dataArray, $formName, $arrPrefix, $fieldList) {
05671 $JSPart='';
05672 $updateValues=t3lib_div::trimExplode(',',$fieldList);
05673 while(list(,$fKey)=each($updateValues)) {
05674 $value = $dataArray[$fKey];
05675 if (is_array($value)) {
05676 reset($value);
05677 while(list(,$Nvalue)=each($value)) {
05678 $JSPart.="
05679 updateForm('".$formName."','".$arrPrefix."[".$fKey."][]',unescape('".rawurlencode($Nvalue)."'))";
05680 }
05681
05682 } else {
05683 $JSPart.="
05684 updateForm('".$formName."','".$arrPrefix."[".$fKey."]',unescape('".rawurlencode($value)."'))";
05685 }
05686 }
05687 $JSPart='<script type="text/javascript">
05688 '.$JSPart.'
05689
05690 </script>
05691 ';
05692 $GLOBALS['TSFE']->additionalHeaderData['JSincludeFormupdate']='<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'t3lib/jsfunc.updateform.js"></script>';
05693 return $JSPart;
05694 }
05695
05696
05697
05698
05699
05700
05701
05702
05703
05704
05705
05706
05707
05708
05709
05710
05711
05712
05713
05714
05715
05716
05717
05718
05719
05720
05721
05722
05723
05724
05725
05726
05727
05728
05739 function DBgetDelete($table, $uid, $doExec=FALSE) {
05740 if (intval($uid)) {
05741 if ($GLOBALS['TCA'][$table]['ctrl']['delete']) {
05742 if ($doExec) {
05743 return $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), array($GLOBALS['TCA'][$table]['ctrl']['delete'] => 1));
05744 } else {
05745 return $GLOBALS['TYPO3_DB']->UPDATEquery($table, 'uid='.intval($uid), array($GLOBALS['TCA'][$table]['ctrl']['delete'] => 1));
05746 }
05747 } else {
05748 if ($doExec) {
05749 return $GLOBALS['TYPO3_DB']->exec_DELETEquery($table, 'uid='.intval($uid));
05750 } else {
05751 return $GLOBALS['TYPO3_DB']->DELETEquery($table, 'uid='.intval($uid));
05752 }
05753 }
05754 }
05755 }
05756
05771 function DBgetUpdate($table, $uid, $dataArr, $fieldList, $doExec=FALSE) {
05772 unset($dataArr['uid']);
05773 $uid=intval($uid);
05774
05775 if ($uid) {
05776 $fieldList = implode(',',t3lib_div::trimExplode(',',$fieldList,1));
05777 $updateFields=array();
05778
05779 foreach($dataArr as $f => $v) {
05780 if (t3lib_div::inList($fieldList,$f)) {
05781 $updateFields[$f] = $v;
05782 }
05783 }
05784
05785 if ($GLOBALS['TCA'][$table]['ctrl']['tstamp']) {
05786 $updateFields[$GLOBALS['TCA'][$table]['ctrl']['tstamp']] = time();
05787 }
05788
05789 if (count($updateFields)) {
05790 if ($doExec) {
05791 return $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), $updateFields);
05792 } else {
05793 return $GLOBALS['TYPO3_DB']->UPDATEquery($table, 'uid='.intval($uid), $updateFields);
05794 }
05795 }
05796 }
05797 }
05798
05813 function DBgetInsert($table, $pid, $dataArr, $fieldList, $doExec=FALSE) {
05814 $extraList='pid';
05815 if ($GLOBALS['TCA'][$table]['ctrl']['tstamp']) {$field=$GLOBALS['TCA'][$table]['ctrl']['tstamp']; $dataArr[$field]=time(); $extraList.=','.$field;}
05816 if ($GLOBALS['TCA'][$table]['ctrl']['crdate']) {$field=$GLOBALS['TCA'][$table]['ctrl']['crdate']; $dataArr[$field]=time(); $extraList.=','.$field;}
05817 if ($GLOBALS['TCA'][$table]['ctrl']['cruser_id']) {$field=$GLOBALS['TCA'][$table]['ctrl']['cruser_id']; $dataArr[$field]=0; $extraList.=','.$field;}
05818 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;}
05819 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;}
05820
05821 unset($dataArr['uid']);
05822 if ($pid>=0) { $dataArr['pid'] = $pid; }
05823 $fieldList = implode(',',t3lib_div::trimExplode(',',$fieldList.','.$extraList,1));
05824
05825 $insertFields = array();
05826 foreach($dataArr as $f => $v) {
05827 if (t3lib_div::inList($fieldList,$f)) {
05828 $insertFields[$f] = $v;
05829 }
05830 }
05831
05832 if ($doExec) {
05833 return $GLOBALS['TYPO3_DB']->exec_INSERTquery($table, $insertFields);
05834 } else {
05835 return $GLOBALS['TYPO3_DB']->INSERTquery($table, $insertFields);
05836 }
05837 }
05838
05850 function DBmayFEUserEdit($table,$row, $feUserRow, $allowedGroups='',$feEditSelf=0) {
05851 $groupList = $allowedGroups ? implode(',',array_intersect(t3lib_div::trimExplode(',',$feUserRow['usergroup'],1),t3lib_div::trimExplode(',',$allowedGroups,1))) : $feUserRow['usergroup'];
05852 $ok=0;
05853
05854 if (!$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'] || !$row[$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock']]) {
05855
05856 if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']) {
05857 $rowFEUser = intval($row[$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']]);
05858 if ($rowFEUser && $rowFEUser==$feUserRow['uid']) {
05859 $ok=1;
05860 }
05861 }
05862
05863 if ($feEditSelf && $table=='fe_users' && !strcmp($feUserRow['uid'],$row['uid'])) {
05864 $ok=1;
05865 }
05866
05867 if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']) {
05868 $rowFEUser = intval($row[$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']]);
05869 if ($rowFEUser) {
05870 if (t3lib_div::inList($groupList, $rowFEUser)) {
05871 $ok=1;
05872 }
05873 }
05874 }
05875 }
05876 return $ok;
05877 }
05878
05890 function DBmayFEUserEditSelect($table,$feUserRow,$allowedGroups='',$feEditSelf=0) {
05891
05892 $groupList = $allowedGroups ? implode(',',array_intersect(t3lib_div::trimExplode(',',$feUserRow['usergroup'],1),t3lib_div::trimExplode(',',$allowedGroups,1))) : $feUserRow['usergroup'];
05893 $OR_arr=array();
05894
05895 if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']) {
05896 $OR_arr[]=$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'].'='.$feUserRow['uid'];
05897 }
05898
05899 if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']) {
05900 $values = t3lib_div::intExplode(',',$groupList);
05901 while(list(,$theGroupUid)=each($values)) {
05902 if ($theGroupUid) {$OR_arr[]=$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'].'='.$theGroupUid;}
05903 }
05904 }
05905
05906 if ($feEditSelf && $table=='fe_users') {
05907 $OR_arr[]='uid='.intval($feUserRow['uid']);
05908 }
05909
05910 $whereDef=' AND 1=0';
05911 if (count($OR_arr)) {
05912 $whereDef=' AND ('.implode(' OR ',$OR_arr).')';
05913 if ($GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock']) {
05914 $whereDef.=' AND NOT '.$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'];
05915 }
05916 }
05917 return $whereDef;
05918 }
05919
05930 function enableFields($table,$show_hidden=0) {
05931 return $GLOBALS['TSFE']->sys_page->enableFields($table,$show_hidden?$show_hidden:($table=='pages' ? $GLOBALS['TSFE']->showHiddenPage : $GLOBALS['TSFE']->showHiddenRecords));
05932 }
05933
05954 function getTreeList($id,$depth,$begin=0,$dontCheckEnableFields=FALSE,$addSelectFields='',$moreWhereClauses='', $prevId_array=array(), $recursionLevel=0) {
05955
05956
05957 $allFields = 'uid,hidden,starttime,endtime,fe_group,extendToSubpages,doktype,php_tree_stop,mount_pid,mount_pid_ol'.$addSelectFields;
05958 $depth = intval($depth);
05959 $begin = intval($begin);
05960 $id = intval($id);
05961 $theList = '';
05962 $addId = 0;
05963
05964 if ($id) {
05965
05966
05967 if (!$recursionLevel) {
05968
05969 if ($id < 0) {
05970 $addId = $id = abs($id);
05971 }
05972
05973 if ($GLOBALS['TSFE']->sys_page->getRawRecord('pages',$id,'uid')) {
05974
05975
05976 $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($id);
05977 if (is_array($mount_info)) {
05978 $id = $mount_info['mount_pid'];
05979
05980 if ($addId && $mount_info['overlay']) {
05981 $addId = $id;
05982 }
05983 }
05984 } else return '';
05985 }
05986
05987
05988 if ($begin<=0) {
05989 $prevId_array[] = $id;
05990 }
05991
05992
05993 if ($depth>0) {
05994 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($allFields, 'pages', 'pid='.intval($id).' AND NOT deleted AND doktype!=255 AND doktype!=6'.$moreWhereClauses, '' ,'sorting');
05995 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05996 #?? $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
05997
05998
05999 $next_id = $row['uid'];
06000 $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($next_id, $row);
06001
06002 if (is_array($mount_info) && $mount_info['overlay']) {
06003 $next_id = $mount_info['mount_pid'];
06004 $res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($allFields, 'pages', 'uid='.intval($next_id).' AND NOT deleted AND doktype!=255 AND doktype!=6'.$moreWhereClauses, '' ,'sorting');
06005 $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
06006 #?? $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
06007 }
06008
06009 if (is_array($row) && $dontCheckEnableFields || $GLOBALS['TSFE']->checkPagerecordForIncludeSection($row)) {
06010
06011 if ($begin<=0) {
06012 if ($dontCheckEnableFields || $GLOBALS['TSFE']->checkEnableFields($row)) {
06013 $theList.= $next_id.',';
06014 }
06015 }
06016
06017 if ($depth>1 && !$row['php_tree_stop']) {
06018
06019 if (is_array($mount_info) && !$mount_info['overlay']) {
06020 $next_id = $mount_info['mount_pid'];
06021 }
06022
06023 if (!in_array($next_id,$prevId_array)) {
06024 $theList.= tslib_cObj::getTreeList($next_id, $depth-1, $begin-1, $dontCheckEnableFields, $addSelectFields, $moreWhereClauses, $prevId_array, $recursionLevel+1);
06025 }
06026 }
06027 }
06028 }
06029 }
06030 }
06031
06032 if (!$recursionLevel) {
06033 if ($addId) {
06034 if ($begin>0) {
06035 $theList.= 0;
06036 } else {
06037 $theList.= $addId;
06038 }
06039 }
06040 }
06041
06042 return $theList;
06043 }
06044
06054 function whereSelectFromList($field,$value) {
06055 return $GLOBALS['TYPO3_DB']->listQuery($field,$value,'');
06056 }
06057
06072 function exec_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='') {
06073 return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
06074 $select,
06075 $local_table.','.$mm_table.($foreign_table?','.$foreign_table:''),
06076 $local_table.'.uid='.$mm_table.'.uid_local'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').
06077 $whereClause,
06078 $groupBy,
06079 $orderBy,
06080 $limit
06081 );
06082 }
06083
06099 function exec_mm_query_uidList($select,$local_table_uidlist,$mm_table,$foreign_table='',$whereClause='',$groupBy='',$orderBy='',$limit='') {
06100 return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
06101 $select,
06102 $mm_table.($foreign_table?','.$foreign_table:''),
06103 $mm_table.'.uid_local IN ('.$local_table_uidlist.')'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').
06104 $whereClause,
06105 $groupBy,
06106 $orderBy,
06107 $limit
06108 );
06109 }
06110
06120 function searchWhere($sw,$searchFieldList,$searchTable='') {
06121 $prefixTableName = $searchTable ? $searchTable.'.' : '';
06122 $where = '';
06123 if ($sw) {
06124 $searchFields = explode(',',$searchFieldList);
06125 $kw = split('[ ,]',$sw);
06126
06127 while(list(,$val)=each($kw)) {
06128 $val = trim($val);
06129 $where_p = array();
06130 if (strlen($val)>=2) {
06131 reset($searchFields);
06132 while(list(,$field)=each($searchFields)) {
06133 $where_p[]=$prefixTableName.$field.' LIKE "%'.$GLOBALS['TYPO3_DB']->quoteStr($val, $searchTable).'%"';
06134 }
06135 }
06136 if (count($where_p)) {
06137 $where.=' AND ('.implode(' OR ',$where_p).')';
06138 }
06139 }
06140 }
06141 return $where;
06142 }
06143
06153 function exec_getQuery($table, $conf) {
06154 $queryParts = $this->getQuery($table, $conf, TRUE);
06155
06156 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
06157 }
06158
06171 function getQuery($table, $conf, $returnQueryArray=FALSE) {
06172
06173
06174 $conf['pidInList'] = trim($this->stdWrap($conf['pidInList'],$conf['pidInList.']));
06175 if (!strcmp($conf['pidInList'],'')) {
06176 $conf['pidInList'] = 'this';
06177 }
06178 $queryParts = $this->getWhere($table,$conf,TRUE);
06179
06180
06181 $queryParts['SELECT'] = $conf['selectFields'] ? $conf['selectFields'] : '*';
06182
06183
06184 if ($conf['max'] || $conf['begin']) {
06185 $error=0;
06186
06187
06188 if (strstr(strtolower($conf['begin'].$conf['max']),'total')) {
06189 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', $table, $queryParts['WHERE'], $queryParts['GROUPBY']);
06190 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
06191 $GLOBALS['TT']->setTSlogMessage($error);
06192 } else {
06193 $total = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
06194 $conf['max'] = eregi_replace('total', (string)$total, $conf['max']);
06195 $conf['begin'] = eregi_replace('total', (string)$total, $conf['begin']);
06196 }
06197 }
06198 if (!$error) {
06199 $conf['begin'] = t3lib_div::intInRange(ceil($this->calc($conf['begin'])),0);
06200 $conf['max'] = t3lib_div::intInRange(ceil($this->calc($conf['max'])),0);
06201 if ($conf['begin'] && !$conf['max']) {
06202 $conf['max'] = 100000;
06203 }
06204
06205 if ($conf['begin'] && $conf['max']) {
06206 $queryParts['LIMIT'] = $conf['begin'].','.$conf['max'];
06207 } elseif (!$conf['begin'] && $conf['max']) {
06208 $queryParts['LIMIT'] = $conf['max'];
06209 }
06210 }
06211 }
06212
06213 if (!$error) {
06214
06215
06216 $joinPart='';
06217 if ($conf['join']) {
06218 $joinPart = 'JOIN ' .trim($conf['join']);
06219 } elseif ($conf['leftjoin']) {
06220 $joinPart = 'LEFT OUTER JOIN ' .trim($conf['leftjoin']);
06221 } elseif ($conf['rightjoin']) {
06222 $joinPart = 'RIGHT OUTER JOIN ' .trim($conf['rightjoin']);
06223 }
06224
06225
06226 $queryParts['FROM'] = trim($table.' '.$joinPart);
06227 $query = $GLOBALS['TYPO3_DB']->SELECTquery(
06228 $queryParts['SELECT'],
06229 $queryParts['FROM'],
06230 $queryParts['WHERE'],
06231 $queryParts['GROUPBY'],
06232 $queryParts['ORDERBY'],
06233 $queryParts['LIMIT']
06234 );
06235 return $returnQueryArray ? $queryParts : $query;
06236 }
06237 }
06238
06250 function getWhere($table,$conf, $returnQueryArray=FALSE) {
06251 global $TCA;
06252
06253
06254 $query = '';
06255 $pid_uid_flag=0;
06256 $queryParts = array(
06257 'SELECT' => '',
06258 'FROM' => '',
06259 'WHERE' => '',
06260 'GROUPBY' => '',
06261 'ORDERBY' => '',
06262 'LIMIT' => ''
06263 );
06264
06265 if (trim($conf['uidInList'])) {
06266 $listArr = t3lib_div::intExplode(',',str_replace('this',$GLOBALS['TSFE']->contentPid,$conf['uidInList']));
06267 if (count($listArr)==1) {
06268 $query.=' AND '.$table.'.uid='.intval($listArr[0]);
06269 } else {
06270 $query.=' AND '.$table.'.uid IN ('.implode(',',$GLOBALS['TYPO3_DB']->cleanIntArray($listArr)).')';
06271 }
06272 $pid_uid_flag++;
06273 }
06274 if (trim($conf['pidInList'])) {
06275 $listArr = t3lib_div::intExplode(',',str_replace('this',$GLOBALS['TSFE']->contentPid,$conf['pidInList']));
06276
06277 $listArr = $this->checkPidArray($listArr);
06278 if (count($listArr)) {
06279 $query.=' AND '.$table.'.pid IN ('.implode(',',$GLOBALS['TYPO3_DB']->cleanIntArray($listArr)).')';
06280 $pid_uid_flag++;
06281 } else {
06282 $pid_uid_flag=0;
06283 }
06284 }
06285 if (!$pid_uid_flag) {
06286 $query.=' AND '.$table.'.uid=0';
06287 }
06288 if ($where = trim($conf['where'])) {
06289 $query.=' AND '.$where;
06290 }
06291
06292 if ($conf['languageField']) {
06293 if ($GLOBALS['TSFE']->sys_language_contentOL && $TCA[$table] && $TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField']) {
06294
06295 $sys_language_content = '0,-1';
06296 } else {
06297 $sys_language_content = intval($GLOBALS['TSFE']->sys_language_content);
06298 }
06299 $query.=' AND '.$conf['languageField'].' IN ('.$sys_language_content.')';
06300 }
06301
06302 $andWhere = trim($this->stdWrap($conf['andWhere'],$conf['andWhere.']));
06303 if ($andWhere) {
06304 $query.=' AND '.$andWhere;
06305 }
06306
06307
06308 if ($table=='pages') {
06309 $query.=' '.$GLOBALS['TSFE']->sys_page->where_hid_del;
06310 } else {
06311 $query.=$this->enableFields($table);
06312 }
06313
06314
06315 if ($query) {
06316 $queryParts['WHERE'] = trim(substr($query,4));
06317 $query = 'WHERE '.$queryParts['WHERE'];
06318 }
06319
06320
06321 if (trim($conf['groupBy'])) {
06322 $queryParts['GROUPBY'] = trim($conf['groupBy']);
06323 $query.=' GROUP BY '.$queryParts['GROUPBY'];
06324 }
06325
06326
06327 if (trim($conf['orderBy'])) {
06328 $queryParts['ORDERBY'] = trim($conf['orderBy']);
06329 $query.=' ORDER BY '.$queryParts['ORDERBY'];
06330 }
06331
06332
06333 return $returnQueryArray ? $queryParts : $query;
06334 }
06335
06344 function checkPidArray($listArr) {
06345 $outArr = Array();
06346 if (is_array($listArr) && count($listArr)) {
06347 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'pages', 'uid IN ('.implode(',',$listArr).')'.$this->enableFields('pages').' AND doktype NOT IN ('.$this->checkPid_badDoktypeList.')');
06348 if ($error = $GLOBALS['TYPO3_DB']->sql_error()) {
06349 $GLOBALS['TT']->setTSlogMessage($error.': '.$query,3);
06350 } else {
06351 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
06352 $outArr[] = $row['uid'];
06353 }
06354 }
06355 }
06356 return $outArr;
06357 }
06358
06367 function checkPid($uid) {
06368 $uid = intval($uid);
06369 if (!isset($this->checkPid_cache[$uid])) {
06370 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'pages', 'uid='.intval($uid).$this->enableFields('pages').' AND doktype NOT IN ('.$this->checkPid_badDoktypeList.')');
06371 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
06372 $this->checkPid_cache[$uid] = 1;
06373 } else {
06374 $this->checkPid_cache[$uid] = 0;
06375 }
06376 }
06377 return $this->checkPid_cache[$uid];
06378 }
06379
06380
06381
06382
06383
06384
06385
06386
06387
06388
06389
06390
06391
06392
06393
06394
06395
06396
06397
06398
06399
06400
06401
06402
06403
06404
06405
06406
06407
06408
06409
06410
06423 function editPanel($content, $conf, $currentRecord='', $dataArr=array()) {
06424 global $TCA,$BE_USER;
06425
06426
06427 if (!$GLOBALS['TSFE']->beUserLogin) {return $content;}
06428
06429
06430 if ($conf['newRecordFromTable']) {
06431 $currentRecord = $conf['newRecordFromTable'].':NEW';
06432 $conf['allow']='new';
06433 }
06434
06435 if (!$currentRecord) $currentRecord=$this->currentRecord;
06436 if (!count($dataArr)) $dataArr=$this->data;
06437 list($table,$uid) = explode(':',$currentRecord);
06438 $mayEdit=0;
06439
06440 if (!$conf['onlyCurrentPid'] || $dataArr['pid']==$GLOBALS['TSFE']->id) {
06441
06442 $types = t3lib_div::trimExplode(',',strtolower($conf['allow']),1);
06443 $allow = array_flip($types);
06444
06445 $perms = $GLOBALS['BE_USER']->calcPerms($GLOBALS['TSFE']->page);
06446 if ($table=='pages') {
06447 if (count($GLOBALS['TSFE']->config['rootLine'])==1) {unset($allow['move']); unset($allow['hide']); unset($allow['delete']);}
06448 if (!($perms&2)) {unset($allow['edit']);unset($allow['move']);unset($allow['hide']);}
06449 if (!($perms&4)) unset($allow['delete']);
06450 if (!($perms&8)) unset($allow['new']);
06451 if (count($allow)) $mayEdit=1;
06452 $newUid = $uid;
06453 } else {
06454 $mayEdit = count($allow)&&($perms&16);
06455 if ($conf['newRecordFromTable']) {
06456 $newUid=$GLOBALS['TSFE']->id;
06457 } else {
06458 $newUid = -1*$uid;
06459 }
06460 }
06461 }
06462
06463 if ($GLOBALS['TSFE']->displayEditIcons && $table && $mayEdit) {
06464 $GLOBALS['TSFE']->set_no_cache();
06465 $formName = 'TSFE_EDIT_FORM_'.substr($GLOBALS['TSFE']->uniqueHash(),0,4);
06466 $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;">';
06467 $sortField = $TCA[$table]['ctrl']['sortby'];
06468 $labelField = $TCA[$table]['ctrl']['label'];
06469 $hideField = $TCA[$table]['ctrl']['enablecolumns']['disabled'];
06470 $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 />':'';
06471
06472 $theCmd='';
06473 $TSFE_EDIT = t3lib_div::_POST('TSFE_EDIT');
06474 if (is_array($TSFE_EDIT) && $TSFE_EDIT['record']==$currentRecord && !$TSFE_EDIT['update_close']) {
06475 $theCmd =$TSFE_EDIT['cmd'];
06476 }
06477
06478 switch($theCmd) {
06479 case 'edit':
06480 case 'new':
06481 $tceforms = t3lib_div::makeInstance('t3lib_TCEforms_FE');
06482 $tceforms->prependFormFieldNames = 'TSFE_EDIT[data]';
06483 $tceforms->prependFormFieldNames_file = 'TSFE_EDIT_file';
06484 $tceforms->doSaveFieldName = 'TSFE_EDIT[doSave]';
06485 $tceforms->formName = $formName;
06486 $tceforms->backPath = TYPO3_mainDir;
06487 $tceforms->setFancyDesign();
06488 $tceforms->defStyle = 'font-family:Verdana;font-size:10px;';
06489 $tceforms->edit_showFieldHelp = $GLOBALS['BE_USER']->uc['edit_showFieldHelp'];
06490 $tceforms->helpTextFontTag='<font face="verdana,sans-serif" color="#333333" size="1">';
06491
06492 $trData = t3lib_div::makeInstance('t3lib_transferData');
06493 $trData->addRawData = TRUE;
06494 $trData->defVals = t3lib_div::_GP('defVals');
06495 $trData->fetchRecord($table, ($theCmd=='new'?$newUid:$dataArr['uid']), ($theCmd=='new'?'new':'') );
06496 reset($trData->regTableItems_data);
06497 $processedDataArr = current($trData->regTableItems_data);
06498 $processedDataArr['uid']=$theCmd=='new'?'NEW':$dataArr['uid'];
06499 $processedDataArr['pid']=$theCmd=='new'?$newUid:$dataArr['pid'];
06500
06501 $panel='';
06502 $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).'" />';
06503 $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).'" />';
06504 $buttons.= '<input type="image" border="0" name="TSFE_EDIT[cancel]" onclick="'.
06505 htmlspecialchars('document.location=\''.t3lib_div::getIndpEnv('REQUEST_URI').'\';return false;').
06506 '" 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).'" />';
06507 $panel.=$tceforms->intoTemplate(array('ITEM'=>$buttons));
06508 $panel.=$tceforms->getMainFields($table,$processedDataArr);
06509
06510 $hiddenF="";
06511 if ($theCmd=='new') {
06512 $hiddenF.='<input type="hidden" name="TSFE_EDIT[data]['.$table.'][NEW][pid]" value="'.$newUid.'" />';
06513 if ($table=='pages') $hiddenF.='<input type="hidden" name="TSFE_EDIT[data]['.$table.'][NEW][hidden]" value="0" />';
06514 } else {
06515 $hiddenF.='<input type="hidden" name="TSFE_EDIT[record]" value="'.$currentRecord.'" />';
06516 $hiddenF.='<input type="hidden" name="TSFE_EDIT[cmd]" value="edit" />';
06517 }
06518 $hiddenF.='<input type="hidden" name="TSFE_EDIT[doSave]" value="0" />';
06519 $panel.=$tceforms->intoTemplate(array('ITEM'=>$buttons.$hiddenF));
06520
06521 $panel=$formTag.$tceforms->wrapTotal($panel,$dataArr,$table).'</form>'.($theCmd!='new'?$blackLine:'');
06522 $finalOut = $tceforms->printNeededJSFunctions_top().($conf['edit.']['displayRecord']?$content:'').$panel.($theCmd=='new'?$blackLine:'').$tceforms->printNeededJSFunctions();
06523 break;
06524 default:
06525 $panel = '';
06526 if (isset($allow['toolbar'])) $panel.=$GLOBALS['BE_USER']->ext_makeToolBar().'<img src="clear.gif" width="2" height="1" alt="" title="" />';
06527 if (isset($allow['edit'])) $panel.=$this->editPanelLinkWrap('<img src="t3lib/gfx/edit2.gif" width="11" height="12" hspace="2" border="0" title="'.$BE_USER->extGetLL('p_editRecord').'" align="top" alt="" title="" />',$formName,'edit',$currentRecord);
06528 if (isset($allow['move']) && $sortField) {
06529 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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');
06530 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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');
06531 }
06532 if (isset($allow['hide']) && $hideField) {
06533 if ($dataArr[$hideField]) {
06534 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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');
06535 } else {
06536 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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'));
06537 }
06538 }
06539 if (isset($allow['new'])) {
06540 if ($table=='pages') {
06541 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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);
06542 } else {
06543 $panel.=$this->editPanelLinkWrap('<img src="t3lib/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);
06544 }
06545 }
06546 if (isset($allow['delete'])) {$panel.=$this->editPanelLinkWrap('<img src="t3lib/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')); }
06547
06548
06549 $labelTxt = $this->stdWrap($conf['label'],$conf['label.']);
06550 $panel='
06551
06552 <!-- BE_USER Edit Panel: -->
06553 '.$formTag.'
06554 <input type="hidden" name="TSFE_EDIT[cmd]" value="" />
06555 <input type="hidden" name="TSFE_EDIT[record]" value="'.$currentRecord.'" />
06556 <table border="0" cellpadding="0" cellspacing="0" border="1" bordercolor="black" class="typo3-editPanel">
06557 <tr>
06558 <td nowrap="nowrap" bgcolor="#ABBBB4" class="typo3-editPanel-controls">'.$panel.'</td>'.($labelTxt?'
06559 <td nowrap="nowrap" bgcolor="#F6F2E6" class="typo3-editPanel-label"><font face="verdana" size="1" color="black"> '.sprintf($labelTxt,htmlspecialchars(t3lib_div::fixed_lgd($dataArr[$labelField],50))).' </font></td>':'').'
06560 </tr>
06561 </table>
06562 </form>';
06563
06564 $panel.=$blackLine;
06565 $finalOut = $content.$panel;
06566 break;
06567 }
06568
06569 if ($conf['previewBorder']) $finalOut = $this->editPanelPreviewBorder($table,$dataArr,$finalOut,$conf['previewBorder']);
06570 return $finalOut;
06571 } else {
06572 return $content;
06573 }
06574 }
06575
06588 function editIcons($content,$params, $conf=array(), $currentRecord='', $dataArr=array(),$addUrlParamStr='') {
06589 global $BE_USER;
06590
06591
06592 if (!$GLOBALS['TSFE']->beUserLogin) {return $content;}
06593
06594
06595 $rParts = explode(':',$currentRecord?$currentRecord:$this->currentRecord);
06596
06597 list($table,$fieldList)=t3lib_div::trimExplode(':',$params,1);
06598 if (!$fieldList) {
06599 $fieldList=$table;
06600 $table=$rParts[0];
06601 } else {
06602 if ($table!=$rParts[0]) return $content;
06603 }
06604
06605
06606 $mayEdit=0;
06607 $dataArr=count($dataArr)?$dataArr:$this->data;
06608
06609 if ($table=='pages') {
06610 $mayEdit = $BE_USER->isAdmin()||$BE_USER->doesUserHaveAccess($dataArr,2)?1:0;
06611 } else {
06612 $mayEdit = $BE_USER->isAdmin()||$BE_USER->doesUserHaveAccess(t3lib_BEfunc::getRecord('pages',$dataArr['pid']),16)?1:0;
06613 }
06614
06615 if ($GLOBALS['TSFE']->displayFieldEditIcons && $table && $mayEdit && $fieldList) {
06616 $GLOBALS['TSFE']->set_no_cache();
06617 $style = $conf['styleAttribute'] ? ' style="'.htmlspecialchars($conf['styleAttribute']).'"' : '';
06618 $iconTitle = $this->stdWrap($conf['iconTitle'],$conf['iconTitle.']);
06619 $iconImg = $conf['iconImg'] ? $conf['iconImg'] : '<img src="t3lib/gfx/edit_fe.gif" width="11" height="12" border="0" align="top" title="'.t3lib_div::deHSCentities(htmlspecialchars($iconTitle)).'"'.$style.' class="frontEndEditIcons" alt="" title="" />';
06620 $nV=t3lib_div::_GP('ADMCMD_view')?1:0;
06621 $adminURL = t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir;
06622 $icon = $this->editPanelLinkWrap_doWrap($iconImg, $adminURL.'alt_doc.php?edit['.$rParts[0].']['.$rParts[1].']=edit&columnsOnly='.rawurlencode($fieldList).'&noView='.$nV.$addUrlParamStr,implode(':',$rParts));
06623 if ($conf['beforeLastTag']<0) {
06624 $content=$icon.$content;
06625 } elseif ($conf['beforeLastTag']>0) {
06626 $cBuf = rtrim($content);
06627 $securCount=30;
06628 while($securCount && substr($cBuf,-1)=='>' && substr($cBuf,-4)!='</a>') {
06629 $cBuf = rtrim(ereg_replace('<[^<]*>$','',$cBuf));
06630 $securCount--;
06631 }
06632 $content = strlen($cBuf)&&$securCount ? substr($content,0,strlen($cBuf)).$icon.substr($content,strlen($cBuf)) : $content=$icon.$content;
06633 } else {
06634 $content.=$icon;
06635 }
06636 }
06637 return $content;
06638 }
06639
06653 function editPanelLinkWrap($string,$formName,$cmd,$currentRecord='',$confirm='') {
06654 $eFONPage = $GLOBALS['BE_USER']->uc['TSFE_adminConfig']['edit_editFormsOnPage'];
06655 $nV=t3lib_div::_GP('ADMCMD_view')?1:0;
06656 $adminURL = t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir;
06657
06658 if ($cmd=='edit' && !$eFONPage) {
06659 $rParts = explode(':',$currentRecord);
06660 $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'alt_doc.php?edit['.$rParts[0].']['.$rParts[1].']=edit&noView='.$nV,$currentRecord);
06661 } elseif ($cmd=='new' && !$eFONPage) {
06662 $rParts = explode(':',$currentRecord);
06663 if ($rParts[0]=='pages') {
06664 $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'db_new.php?id='.$rParts[1].'&pagesOnly=1',$currentRecord);
06665 } else {
06666 $nPid = t3lib_div::testInt($rParts[1]) ? -$rParts[1] : $GLOBALS['TSFE']->id;
06667 $out=$this->editPanelLinkWrap_doWrap($string,$adminURL.'alt_doc.php?edit['.$rParts[0].']['.$nPid.']=new&noView='.$nV,$currentRecord);
06668 }
06669 } else {
06670 if ($confirm) {
06671 $cf1="if (confirm(unescape('".t3lib_div::rawurlencodeJS($confirm)."'))){";
06672 $cf2='}';
06673 } else {
06674 $cf1=$cf2='';
06675 }
06676 $out='<a href="#" onclick="'.
06677 htmlspecialchars($cf1.'document.'.$formName.'[\'TSFE_EDIT[cmd]\'].value=\''.$cmd.'\'; document.'.$formName.'.submit();'.$cf2.' return false;').
06678 '">'.$string.'</a>';
06679 }
06680 return $out;
06681 }
06682
06693 function editPanelLinkWrap_doWrap($string,$url,$currentRecord) {
06694 if ($GLOBALS['BE_USER']->uc['TSFE_adminConfig']['edit_editNoPopup'] || $GLOBALS['BE_USER']->extAdminConfig['module.']['edit.']['forceNoPopup']) {
06695 $retUrl = t3lib_div::getIndpEnv('REQUEST_URI');
06696 $rParts = explode(':',$currentRecord);
06697 if ($rParts[0]=='tt_content' && $this->parentRecordNumber>2) {
06698 $retUrl.='#'.$rParts[1];
06699 }
06700 return '<a href="'.htmlspecialchars($url.'&returnUrl='.rawurlencode($retUrl)).'">'.$string.'</a>';
06701 } else {
06702 return '<a href="#" onclick="'.
06703 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;').
06704 '">'.$string.'</a>';
06705 }
06706 }
06707
06720 function editPanelPreviewBorder($table,$row,$content,$thick) {
06721 $thick = t3lib_div::intInRange($thick,1,100);
06722 if ($this->isDisabled($table,$row)) {
06723 $content='<table border="'.$thick.'" cellpadding="0" cellspacing="0" bordercolor="#cccccc" width="100%"><tr><td>'.$content.'</td></tr></table>';
06724 }
06725 return $content;
06726 }
06727
06737 function isDisabled($table,$row) {
06738 global $TCA;
06739 if (
06740 ($TCA[$table]['ctrl']['enablecolumns']['disabled'] && $row[$TCA[$table]['ctrl']['enablecolumns']['disabled']]) ||
06741 ($TCA[$table]['ctrl']['enablecolumns']['fe_group'] && $GLOBALS['TSFE']->simUserGroup && $row[$TCA[$table]['ctrl']['enablecolumns']['fe_group']]==$GLOBALS['TSFE']->simUserGroup) ||
06742 ($TCA[$table]['ctrl']['enablecolumns']['starttime'] && $row[$TCA[$table]['ctrl']['enablecolumns']['starttime']]>time() ) ||
06743 ($TCA[$table]['ctrl']['enablecolumns']['endtime'] && $row[$TCA[$table]['ctrl']['enablecolumns']['endtime']] && $row[$TCA[$table]['ctrl']['enablecolumns']['endtime']]<time())
06744 ) return true;
06745 }
06746 }
06747
06748
06749
06750
06751
06752
06753
06754
06755
06756
06757
06758
06759
06760
06768 class tslib_frameset {
06769
06778 function make($setup) {
06779 $content = '';
06780 if (is_array($setup)) {
06781 $sKeyArray=t3lib_TStemplate::sortedKeyList($setup);
06782 reset($sKeyArray);
06783 while(list(,$theKey)=each($sKeyArray)) {
06784 $theValue=$setup[$theKey];
06785 if (intval($theKey) && $conf=$setup[$theKey.'.']) {
06786 switch($theValue) {
06787 case 'FRAME':
06788 $typeNum = intval($GLOBALS['TSFE']->tmpl->setup[$conf['obj'].'.']['typeNum']);
06789 if (!$conf['src'] && !$typeNum) {
06790 $typeNum = -1;
06791 }
06792 $content.='<frame'.$this->frameParams($conf,$typeNum).' />'.chr(10);
06793 break;
06794 case 'FRAMESET':
06795 $frameset = t3lib_div::makeInstance('tslib_frameset');
06796 $content.=$frameset->make($conf).chr(10);
06797 break;
06798 }
06799 }
06800 }
06801 return '<frameset'.$this->framesetParams($setup).'>'.chr(10).$content.'</frameset>';
06802 }
06803 }
06804
06815 function frameParams($setup, $typeNum) {
06816 $paramStr = '';
06817 $name = $setup['obj'];
06818
06819
06820
06821
06822
06823
06824
06825
06826
06827
06828
06829
06830
06831
06832
06833
06834
06835
06836
06837
06838
06839
06840 $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));
06841 $finalURL = $LD['totalURL'];
06842
06843
06844 if ($setup['src']) {$paramStr.=' src="'.htmlspecialchars($setup['src']).'"';} else {$paramStr.=' src="'.htmlspecialchars($finalURL).'"';}
06845 if ($setup['name']) {$paramStr.=' name="'.$setup['name'].'"';} else {$paramStr.=' name="'.$name.'"';}
06846 if ($setup['params']) {$paramStr.=' '.$setup['params'];}
06847 return $paramStr;
06848 }
06849
06858 function framesetParams($setup) {
06859 $paramStr = '';
06860 if ($setup['cols']) { $paramStr.=' cols="'.$setup['cols'].'"'; }
06861 if ($setup['rows']) { $paramStr.=' rows="'.$setup['rows'].'"'; }
06862 if ($setup['params']) { $paramStr.=' '.$setup['params']; }
06863 return $paramStr;
06864 }
06865 }
06866
06867
06868
06869
06870
06871
06872
06873
06874
06875
06876
06877
06878
06879
06880
06881
06882
06891 class tslib_tableOffset {
06892 var $tableParams = 'border="0" cellspacing="0" cellpadding="0"';
06893 var $default_tableParams = 'border="0" cellspacing="0" cellpadding="0"';
06894 var $tdParams = ' width="99%" valign="top"';
06895
06903 function start($content,$offset) {
06904 $valPairs = t3lib_div::intExplode(',',$offset.',,,,,');
06905
06906 if ($valPairs[0] || $valPairs[1] || $valPairs[2] || $valPairs[3] || $valPairs[4] || $valPairs[5]) {
06907
06908 if ($valPairs[4] && $this->default_tableParams==$this->tableParams) {$this->tableParams.=' width="1"';}
06909
06910 $this->begin = chr(10).'<table '.$this->tableParams.'>';
06911 $this->end = '</table>';
06912 $rows=array();
06913 $widthImg = '';
06914 $heightImg = '';
06915
06916 if ($valPairs[4]) {
06917 if (!$valPairs[3]) $valPairs[3]=1;
06918 $widthImg='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.$valPairs[4].'" height="1" alt="" title="" />';
06919 }
06920
06921 if ($valPairs[5]) {
06922 if (!$valPairs[2]) $valPairs[2]=1;
06923 $valPairs[2]=1; $heightImg='<img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$valPairs[5].'" alt="" title="" />';
06924 }
06925
06926
06927 if ($valPairs[1]) {
06928 $rows[1].= '<tr>';
06929 $rows[1].= '<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="'.($valPairs[0]?$valPairs[0]:1).'" height="'.$valPairs[1].'" alt="" title="" /></td>';
06930 if ($valPairs[0]) $rows[1].= '<td></td>';
06931 if ($valPairs[2]) $rows[1].= '<td></td>';
06932 $rows[1].= '</tr>';
06933 }
06934
06935 $rows[2].= '<tr>';
06936 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>';}
06937 $rows[2].= '<td'.$this->tdParams.'>'.$content.'</td>';
06938 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>';}
06939 $rows[2].= '</tr>';
06940
06941 if ($valPairs[3]) {
06942 $rows[3].= '<tr>';
06943 if ($valPairs[0]) $rows[3].= '<td></td>';
06944 if ($valPairs[2]) $rows[3].= '<td>'.$widthImg.'</td>';
06945 $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>';
06946 $rows[3].= '</tr>';
06947 }
06948 return $this->begin.implode('',$rows).$this->end;
06949 } else return $content;
06950 }
06951 }
06952
06953
06954
06955
06956
06957
06958
06959
06960
06961
06962
06963
06964
06965
06966
06967
06968
06969
06970
06971
06972
06981 class tslib_controlTable {
06982 var $offX = 0;
06983 var $offY = 0;
06984
06985 var $tm = '';
06986 var $lm = '';
06987 var $rm = '';
06988 var $bm = '';
06989 var $content = '';
06990
06991 var $tmTDparams = 'valign="top"';
06992 var $lmTDparams = 'valign="top"';
06993 var $rmTDparams = 'valign="top"';
06994 var $bmTDparams = 'valign="top"';
06995 var $contentTDparams = 'valign="top"';
06996
06997 var $cMl = 1;
06998 var $cMr = 1;
06999 var $cMt = 0;
07000 var $cMb = 1;
07001
07002 var $contentW = 0;
07003
07004 var $tableParams = 'border="0" cellspacing="0" cellpadding="0"';
07005
07016 function start($offset,$cMargins) {
07017 $offArr = t3lib_div::intExplode(',',$offset);
07018 $cMargArr = t3lib_div::intExplode(',',$cMargins);
07019
07020 $cols = 0;
07021 $rows = 0;
07022
07023 if ($this->lm) $cols++;
07024 if ($this->rm) $cols++;
07025 if ($cMargArr[0]) $cols++;
07026 if ($cMargArr[2]) $cols++;
07027 if ($cMargArr[1]||$cMargArr[3]||$this->tm||$this->bm||$this->content||$this->contentW) $cols++;
07028
07029 if ($cMargArr[1]) $rows++;
07030 if ($cMargArr[3]) $rows++;
07031 if ($this->tm) $rows++;
07032 if ($this->bm) $rows++;
07033 if ($this->content) $rows++;
07034 if ($this->contentW) $rows++;
07035 if (!$rows && $cols) $rows=1;
07036
07037 if ($rows&&$cols) {
07038 $res = chr(10).'<table '.$this->tableParams.'>';
07039
07040 if ($offArr[1]) {
07041 $xoff = $offArr[0] ? 1 : 0;
07042 if ($cols+$xoff > 1) {$colspan =' colspan="'.($cols+$xoff).'"';}
07043 $res.= '<tr><td'.$colspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$offArr[1].'" alt="" title="" /></td></tr>';
07044 }
07045
07046 if ($rows>1) {$rowspan =' rowspan="'.($rows).'"';}
07047 $res.= '<tr>';
07048 if ($offArr[0]) { $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$offArr[0].'" alt="" title="" /></td>'; }
07049 if ($this->lm) { $res.='<td'.$rowspan.' '.$this->lmTDparams.'>'.$this->lm.'</td>'; }
07050 if ($cMargArr[0]) { $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$cMargArr[0].'" alt="" title="" /></td>'; }
07051
07052
07053 $middle=Array();
07054 if ($this->tm) { $middle[]='<td '.$this->tmTDparams.'>'.$this->tm.'</td>';}
07055 if ($cMargArr[1]) { $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$cMargArr[1].'" alt="" title="" /></td>';}
07056 if ($this->content) { $middle[]='<td '.$this->contentTDparams.'>'.$this->content.'</td>';}
07057 if ($cMargArr[3]) { $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" width="1" height="'.$cMargArr[3].'" alt="" title="" /></td>';}
07058 if ($this->bm) { $middle[]='<td '.$this->bmTDparams.'>'.$this->bm.'</td>';}
07059 if ($this->contentW) { $middle[]='<td><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$this->contentW.'" alt="" title="" /></td>';}
07060 if (isset($middle[0])) {$res.=$middle[0];}
07061
07062
07063 if ($cMargArr[2]) { $res.='<td'.$rowspan.'><img src="'.$GLOBALS['TSFE']->absRefPrefix.'clear.gif" height="1" width="'.$cMargArr[2].'" alt="" title="" /></td>'; }
07064 if ($this->rm) { $res.='<td'.$rowspan.' '.$this->rmTDparams.'>'.$this->rm.'</td>'; }
07065 $res.= '</tr>';
07066
07067
07068 $mCount = count($middle);
07069 for($a=1;$a<$mCount;$a++) {
07070 $res.='<tr>'.$middle[$a].'</tr>';
07071 }
07072 $res.='</table>';
07073 return $res;
07074 }
07075 }
07076 }
07077
07078
07079
07080
07081
07082 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php']) {
07083 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php']);
07084 }
07085 ?>