Documentation TYPO3 par Ameos |
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2007 Kasper Skaarhoj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00088 class TSpagegen { 00089 00095 function pagegenInit() { 00096 if ($GLOBALS['TSFE']->page['content_from_pid']>0) { 00097 $temp_copy_TSFE = clone($GLOBALS['TSFE']); // make REAL copy of TSFE object - not reference! 00098 $temp_copy_TSFE->id = $GLOBALS['TSFE']->page['content_from_pid']; // Set ->id to the content_from_pid value - we are going to evaluate this pid as was it a given id for a page-display! 00099 $temp_copy_TSFE->getPageAndRootlineWithDomain($GLOBALS['TSFE']->config['config']['content_from_pid_allowOutsideDomain']?0:$GLOBALS['TSFE']->domainStartPage); 00100 $GLOBALS['TSFE']->contentPid = intval($temp_copy_TSFE->id); 00101 unset($temp_copy_TSFE); 00102 } 00103 if ($GLOBALS['TSFE']->config['config']['MP_defaults']) { 00104 $temp_parts = t3lib_div::trimExplode('|',$GLOBALS['TSFE']->config['config']['MP_defaults'],1); 00105 reset($temp_parts); 00106 while(list(,$temp_p)=each($temp_parts)) { 00107 list($temp_idP,$temp_MPp) = explode(':',$temp_p,2); 00108 $temp_ids=t3lib_div::intExplode(',',$temp_idP); 00109 reset($temp_ids); 00110 while(list(,$temp_id)=each($temp_ids)) { 00111 $GLOBALS['TSFE']->MP_defaults[$temp_id]=$temp_MPp; 00112 } 00113 } 00114 } 00115 if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP']) { 00116 $temp_parts = t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1); 00117 foreach ($temp_parts as $temp_p) { 00118 $GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1; 00119 } 00120 } 00121 00122 00123 // Global vars... 00124 $GLOBALS['TSFE']->indexedDocTitle = $GLOBALS['TSFE']->page['title']; 00125 $GLOBALS['TSFE']->debug = ''.$GLOBALS['TSFE']->config['config']['debug']; 00126 00127 // Base url: 00128 if ($GLOBALS['TSFE']->config['config']['baseURL']) { 00129 if ($GLOBALS['TSFE']->config['config']['baseURL']==='1') { 00130 // Deprecated property, going to be dropped. 00131 $error = 'Unsupported TypoScript property was found in this template: "config.baseURL="1" 00132 00133 This setting has been deprecated in TYPO 3.8.1 due to security concerns. 00134 You need to change this value to the URL of your website root, otherwise TYPO3 will not work! 00135 00136 See <a href="http://wiki.typo3.org/index.php/TYPO3_3.8.1" target="_blank">wiki.typo3.org/index.php/TYPO3_3.8.1</a> for more information.'; 00137 00138 $GLOBALS['TSFE']->printError(nl2br($error)); 00139 exit; 00140 } else { 00141 $GLOBALS['TSFE']->baseUrl = $GLOBALS['TSFE']->config['config']['baseURL']; 00142 } 00143 $GLOBALS['TSFE']->anchorPrefix = substr(t3lib_div::getIndpEnv('TYPO3_REQUEST_URL'),strlen(t3lib_div::getIndpEnv('TYPO3_SITE_URL'))); 00144 } 00145 00146 // Internal and External target defaults 00147 $GLOBALS['TSFE']->intTarget = ''.$GLOBALS['TSFE']->config['config']['intTarget']; 00148 $GLOBALS['TSFE']->extTarget = ''.$GLOBALS['TSFE']->config['config']['extTarget']; 00149 if ($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses'] === 'ascii') { 00150 $GLOBALS['TSFE']->spamProtectEmailAddresses = 'ascii'; 00151 } else { 00152 $GLOBALS['TSFE']->spamProtectEmailAddresses = t3lib_div::intInRange($GLOBALS['TSFE']->config['config']['spamProtectEmailAddresses'],-10,10,0); 00153 } 00154 00155 00156 $GLOBALS['TSFE']->absRefPrefix = trim(''.$GLOBALS['TSFE']->config['config']['absRefPrefix']); 00157 if ((!strcmp($GLOBALS['TSFE']->config['config']['simulateStaticDocuments'],'PATH_INFO') || $GLOBALS['TSFE']->absRefPrefix_force) 00158 && !$GLOBALS['TSFE']->absRefPrefix) { 00159 $GLOBALS['TSFE']->absRefPrefix=t3lib_div::dirname(t3lib_div::getIndpEnv('SCRIPT_NAME')).'/'; 00160 } // Force absRefPrefix to this value is PATH_INFO is used. 00161 00162 if ($GLOBALS['TSFE']->type && $GLOBALS['TSFE']->config['config']['frameReloadIfNotInFrameset']) { 00163 $tdlLD = $GLOBALS['TSFE']->tmpl->linkData($GLOBALS['TSFE']->page,'_top',$GLOBALS['TSFE']->no_cache,''); 00164 $GLOBALS['TSFE']->JSCode = 'if(!parent.'.trim($GLOBALS['TSFE']->sPre).' && !parent.view_frame) top.location.href="'.$GLOBALS['TSFE']->baseUrlWrap($tdlLD['totalURL']).'"'; 00165 } 00166 $GLOBALS['TSFE']->compensateFieldWidth = ''.$GLOBALS['TSFE']->config['config']['compensateFieldWidth']; 00167 $GLOBALS['TSFE']->lockFilePath = ''.$GLOBALS['TSFE']->config['config']['lockFilePath']; 00168 $GLOBALS['TSFE']->lockFilePath = $GLOBALS['TSFE']->lockFilePath ? $GLOBALS['TSFE']->lockFilePath : 'fileadmin/'; 00169 $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_noScaleUp'] = isset($GLOBALS['TSFE']->config['config']['noScaleUp']) ? ''.$GLOBALS['TSFE']->config['config']['noScaleUp'] : $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_noScaleUp']; 00170 $GLOBALS['TSFE']->TYPO3_CONF_VARS['GFX']['im_noScaleUp'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_noScaleUp']; 00171 00172 $GLOBALS['TSFE']->ATagParams = trim($GLOBALS['TSFE']->config['config']['ATagParams']) ? ' '.trim($GLOBALS['TSFE']->config['config']['ATagParams']) : ''; 00173 if ($GLOBALS['TSFE']->config['config']['setJS_mouseOver']) $GLOBALS['TSFE']->setJS('mouseOver'); 00174 if ($GLOBALS['TSFE']->config['config']['setJS_openPic']) $GLOBALS['TSFE']->setJS('openPic'); 00175 00176 $GLOBALS['TSFE']->sWordRegEx=''; 00177 $GLOBALS['TSFE']->sWordList = t3lib_div::_GP('sword_list'); 00178 if (is_array($GLOBALS['TSFE']->sWordList)) { 00179 $standAlone = trim(''.$GLOBALS['TSFE']->config['config']['sword_standAlone']); 00180 $noMixedCase = trim(''.$GLOBALS['TSFE']->config['config']['sword_noMixedCase']); 00181 00182 $space = ($standAlone) ? '[[:space:]]' : ''; 00183 reset($GLOBALS['TSFE']->sWordList); 00184 while (list($key,$val) = each($GLOBALS['TSFE']->sWordList)) { 00185 if (trim($val)) { 00186 if (!$noMixedCase) { 00187 $GLOBALS['TSFE']->sWordRegEx.= $space.sql_regcase(quotemeta($val)).$space.'|'; 00188 } else { 00189 $GLOBALS['TSFE']->sWordRegEx.= $space.quotemeta($val).$space.'|'; 00190 } 00191 } 00192 } 00193 $GLOBALS['TSFE']->sWordRegEx = ereg_replace('\|$','',$GLOBALS['TSFE']->sWordRegEx); 00194 } 00195 00196 // linkVars 00197 $linkVars = (string)$GLOBALS['TSFE']->config['config']['linkVars']; 00198 if ($linkVars) { 00199 $linkVarArr = explode(',',$linkVars); 00200 00201 $GLOBALS['TSFE']->linkVars=''; 00202 $GET = t3lib_div::_GET(); 00203 00204 foreach ($linkVarArr as $val) { 00205 $val = trim($val); 00206 00207 if (preg_match('/^(.*)\((.+)\)$/',$val,$match)) { 00208 $val = trim($match[1]); 00209 $test = trim($match[2]); 00210 } else unset($test); 00211 00212 if ($val && isset($GET[$val])) { 00213 if (!is_array($GET[$val])) { 00214 $tmpVal = rawurlencode($GET[$val]); 00215 00216 if ($test && !TSpagegen::isAllowedLinkVarValue($tmpVal,$test)) { 00217 continue; // Error: This value was not allowed for this key 00218 } 00219 00220 $value = '&'.$val.'='.$tmpVal; 00221 } else { 00222 if ($test && strcmp('array',$test)) { 00223 continue; // Error: This key must not be an array! 00224 } 00225 $value = t3lib_div::implodeArrayForUrl($val,$GET[$val]); 00226 } 00227 } else continue; 00228 00229 $GLOBALS['TSFE']->linkVars.= $value; 00230 } 00231 unset($GET); 00232 } else { 00233 $GLOBALS['TSFE']->linkVars=''; 00234 } 00235 00236 // Setting XHTML-doctype from doctype 00237 if (!$GLOBALS['TSFE']->config['config']['xhtmlDoctype']) { 00238 $GLOBALS['TSFE']->config['config']['xhtmlDoctype'] = $GLOBALS['TSFE']->config['config']['doctype']; 00239 } 00240 00241 if ($GLOBALS['TSFE']->config['config']['xhtmlDoctype']) { 00242 $GLOBALS['TSFE']->xhtmlDoctype = $GLOBALS['TSFE']->config['config']['xhtmlDoctype']; 00243 00244 // Checking XHTML-docytpe 00245 switch((string)$GLOBALS['TSFE']->config['config']['xhtmlDoctype']) { 00246 case 'xhtml_trans': 00247 case 'xhtml_strict': 00248 case 'xhtml_frames': 00249 $GLOBALS['TSFE']->xhtmlVersion = 100; 00250 break; 00251 case 'xhtml_basic': 00252 $GLOBALS['TSFE']->xhtmlVersion = 105; 00253 break; 00254 case 'xhtml_11': 00255 $GLOBALS['TSFE']->xhtmlVersion = 110; 00256 break; 00257 case 'xhtml_2': 00258 $GLOBALS['TSFE']->xhtmlVersion = 200; 00259 break; 00260 default: 00261 $GLOBALS['TSFE']->xhtmlDoctype = ''; 00262 $GLOBALS['TSFE']->xhtmlVersion = 0; 00263 } 00264 } 00265 } 00266 00272 function getIncFiles() { 00273 $incFilesArray = array(); 00274 // Get files from config.includeLibrary 00275 $includeLibrary = trim(''.$GLOBALS['TSFE']->config['config']['includeLibrary']); 00276 if ($includeLibrary) { 00277 $incFile=$GLOBALS['TSFE']->tmpl->getFileName($includeLibrary); 00278 if ($incFile) { 00279 $incFilesArray[] = $incFile; 00280 } 00281 } 00282 00283 if (is_array($GLOBALS['TSFE']->pSetup['includeLibs.'])) {$incLibs=$GLOBALS['TSFE']->pSetup['includeLibs.'];} else {$incLibs=array();} 00284 if (is_array($GLOBALS['TSFE']->tmpl->setup['includeLibs.'])) {$incLibs+=$GLOBALS['TSFE']->tmpl->setup['includeLibs.'];} // toplevel 'includeLibs' is added to the PAGE.includeLibs. In that way, PAGE-libs get first priority, because if the key already exist, it's not altered. (Due to investigation by me) 00285 if (count($incLibs)) { 00286 reset($incLibs); 00287 while(list(,$theLib)=each($incLibs)) { 00288 if (!is_array($theLib) && $incFile=$GLOBALS['TSFE']->tmpl->getFileName($theLib)) { 00289 $incFilesArray[] = $incFile; 00290 } 00291 } 00292 } 00293 // Include HTML mail library? 00294 if ($GLOBALS['TSFE']->config['config']['incT3Lib_htmlmail']) { 00295 $incFilesArray[] = 't3lib/class.t3lib_htmlmail.php'; 00296 } 00297 return $incFilesArray; 00298 } 00299 00305 function JSeventFunctions() { 00306 $functions = array(); 00307 $setEvents = array(); 00308 $setBody = array(); 00309 00310 foreach ($GLOBALS['TSFE']->JSeventFuncCalls as $event => $handlers) { 00311 if (count($handlers)) { 00312 $functions[] = ' function T3_'.$event.'Wrapper(e) { '.implode(' ',$handlers).' }'; 00313 $setEvents[] = ' document.'.$event.'=T3_'.$event.'Wrapper;'; 00314 if ($event == 'onload') { 00315 $setBody[]='onload="T3_onloadWrapper();"'; // dubiuos double setting breaks on some browser - do we need it? 00316 } 00317 } 00318 } 00319 00320 return Array(count($functions)?' 00321 <script type="text/javascript"> 00322 /*<![CDATA[*/ 00323 '.implode(chr(10),$functions).' 00324 '.implode(chr(10),$setEvents).' 00325 /*]]>*/ 00326 </script> 00327 ':'',$setBody); 00328 } 00329 00335 function renderContent() { 00336 // PAGE CONTENT 00337 $GLOBALS['TT']->incStackPointer(); 00338 $GLOBALS['TT']->push($GLOBALS['TSFE']->sPre, 'PAGE'); 00339 $pageContent = $GLOBALS['TSFE']->cObj->cObjGet($GLOBALS['TSFE']->pSetup); 00340 00341 if ($GLOBALS['TSFE']->pSetup['wrap']) {$pageContent = $GLOBALS['TSFE']->cObj->wrap($pageContent, $GLOBALS['TSFE']->pSetup['wrap']);} 00342 if ($GLOBALS['TSFE']->pSetup['stdWrap.']) {$pageContent = $GLOBALS['TSFE']->cObj->stdWrap($pageContent, $GLOBALS['TSFE']->pSetup['stdWrap.']);} 00343 00344 // PAGE HEADER (after content - maybe JS is inserted! 00345 00346 // if 'disableAllHeaderCode' is set, all the header-code is discarded! 00347 if ($GLOBALS['TSFE']->config['config']['disableAllHeaderCode']) { 00348 $GLOBALS['TSFE']->content = $pageContent; 00349 } else { 00350 TSpagegen::renderContentWithHeader($pageContent); 00351 } 00352 $GLOBALS['TT']->pull($GLOBALS['TT']->LR?$GLOBALS['TSFE']->content:''); 00353 $GLOBALS['TT']->decStackPointer(); 00354 } 00355 00362 function renderContentWithHeader($pageContent) { 00363 $customContent = $GLOBALS['TSFE']->config['config']['headerComment']; 00364 if (trim($customContent)) { 00365 $customContent = chr(10).$customContent; 00366 } else $customContent=''; 00367 00368 // Setting charset: 00369 $theCharset = $GLOBALS['TSFE']->metaCharset; 00370 00371 // Reset the content variables: 00372 $GLOBALS['TSFE']->content=''; 00373 $htmlTagAttributes = array(); 00374 $htmlLang = $GLOBALS['TSFE']->config['config']['htmlTag_langKey'] ? $GLOBALS['TSFE']->config['config']['htmlTag_langKey'] : 'en'; 00375 00376 // Set content direction: (More info: http://www.tau.ac.il/~danon/Hebrew/HTML_and_Hebrew.html) 00377 if ($GLOBALS['TSFE']->config['config']['htmlTag_dir']) { 00378 $htmlTagAttributes['dir'] = htmlspecialchars($GLOBALS['TSFE']->config['config']['htmlTag_dir']); 00379 } 00380 00381 // Setting document type: 00382 $docTypeParts = array(); 00383 // Part 1: XML prologue 00384 switch((string)$GLOBALS['TSFE']->config['config']['xmlprologue']) { 00385 case 'none': 00386 break; 00387 case 'xml_10': 00388 $docTypeParts[]='<?xml version="1.0" encoding="'.$theCharset.'"?>'; 00389 break; 00390 case 'xml_11': 00391 $docTypeParts[]='<?xml version="1.1" encoding="'.$theCharset.'"?>'; 00392 break; 00393 case '': 00394 if ($GLOBALS['TSFE']->xhtmlVersion) $docTypeParts[]='<?xml version="1.0" encoding="'.$theCharset.'"?>'; 00395 break; 00396 default: 00397 $docTypeParts[]=$GLOBALS['TSFE']->config['config']['xmlprologue']; 00398 } 00399 // Part 2: DTD 00400 if ($GLOBALS['TSFE']->config['config']['doctype']) { 00401 switch((string)$GLOBALS['TSFE']->config['config']['doctype']) { 00402 case 'xhtml_trans': 00403 $docTypeParts[]='<!DOCTYPE html 00404 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 00405 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 00406 break; 00407 case 'xhtml_strict': 00408 $docTypeParts[]='<!DOCTYPE html 00409 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 00410 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; 00411 break; 00412 case 'xhtml_frames': 00413 $docTypeParts[]='<!DOCTYPE html 00414 PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 00415 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'; 00416 break; 00417 case 'xhtml_basic': 00418 $docTypeParts[]='<!DOCTYPE html 00419 PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" 00420 "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">'; 00421 break; 00422 case 'xhtml_11': 00423 $docTypeParts[]='<!DOCTYPE html 00424 PUBLIC "-//W3C//DTD XHTML 1.1//EN" 00425 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'; 00426 break; 00427 case 'xhtml_2': 00428 $docTypeParts[]='<!DOCTYPE html 00429 PUBLIC "-//W3C//DTD XHTML 2.0//EN" 00430 "http://www.w3.org/TR/xhtml2/DTD/xhtml2.dtd">'; 00431 break; 00432 case 'none': 00433 break; 00434 default: 00435 $docTypeParts[] = $GLOBALS['TSFE']->config['config']['doctype']; 00436 } 00437 } else { 00438 $docTypeParts[]='<!DOCTYPE html 00439 PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; 00440 } 00441 00442 if ($GLOBALS['TSFE']->xhtmlVersion) { 00443 00444 // Setting <html> tag attributes: 00445 $htmlTagAttributes['xmlns'] = 'http://www.w3.org/1999/xhtml'; 00446 $htmlTagAttributes['xml:lang'] = $htmlLang; 00447 if ($GLOBALS['TSFE']->xhtmlVersion < 110) { 00448 $htmlTagAttributes['lang'] = $htmlLang; 00449 } 00450 } 00451 00452 // Swap XML and doctype order around (for MSIE / Opera standards compliance) 00453 if ($GLOBALS['TSFE']->config['config']['doctypeSwitch']) { 00454 $docTypeParts = array_reverse($docTypeParts); 00455 } 00456 00457 // Adding doctype parts: 00458 $GLOBALS['TSFE']->content.= count($docTypeParts) ? implode(chr(10),$docTypeParts).chr(10) : ''; 00459 00460 // Begin header section: 00461 if (strcmp($GLOBALS['TSFE']->config['config']['htmlTag_setParams'],'none')) { 00462 $_attr = $GLOBALS['TSFE']->config['config']['htmlTag_setParams'] ? $GLOBALS['TSFE']->config['config']['htmlTag_setParams'] : t3lib_div::implodeAttributes($htmlTagAttributes); 00463 } else { 00464 $_attr = ''; 00465 } 00466 $GLOBALS['TSFE']->content.='<html'.($_attr ? ' '.$_attr : '').'>'; 00467 00468 // Head tag: 00469 $headTag = $GLOBALS['TSFE']->pSetup['headTag'] ? $GLOBALS['TSFE']->pSetup['headTag'] : '<head>'; 00470 $GLOBALS['TSFE']->content.= chr(10).$headTag; 00471 00472 // Setting charset meta tag: 00473 $GLOBALS['TSFE']->content.=' 00474 <meta http-equiv="Content-Type" content="text/html; charset='.$theCharset.'" />'; 00475 00476 $GLOBALS['TSFE']->content.=' 00477 00478 <!-- '.($customContent?$customContent.chr(10):'').' 00479 This website is powered by TYPO3 - inspiring people to share! 00480 TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL. 00481 TYPO3 is copyright 1998-2006 of Kasper Skaarhoj. Extensions are copyright of their respective owners. 00482 Information and contribution at http://typo3.com/ and http://typo3.org/ 00483 --> 00484 '; 00485 00486 00487 if ($GLOBALS['TSFE']->baseUrl) { 00488 $GLOBALS['TSFE']->content.=' 00489 <base href="'.htmlspecialchars($GLOBALS['TSFE']->baseUrl).'" />'; 00490 } 00491 00492 if ($GLOBALS['TSFE']->pSetup['shortcutIcon']) { 00493 $ss=$path.$GLOBALS['TSFE']->tmpl->getFileName($GLOBALS['TSFE']->pSetup['shortcutIcon']); 00494 $GLOBALS['TSFE']->content.=' 00495 <link rel="SHORTCUT ICON" href="'.htmlspecialchars($ss).'" />'; 00496 } 00497 00498 // Including CSS files 00499 if (is_array($GLOBALS['TSFE']->tmpl->setup['plugin.'])) { 00500 $temp_styleLines=array(); 00501 foreach ($GLOBALS['TSFE']->tmpl->setup['plugin.'] as $key=>$iCSScode) { 00502 if (is_array($iCSScode) && $iCSScode['_CSS_DEFAULT_STYLE']) { 00503 $temp_styleLines[]='/* default styles for extension "'.substr($key,0,-1).'" */'.chr(10).$iCSScode['_CSS_DEFAULT_STYLE']; 00504 } 00505 } 00506 if (count($temp_styleLines)) { 00507 if ($GLOBALS['TSFE']->config['config']['inlineStyle2TempFile']) { 00508 $GLOBALS['TSFE']->content.=TSpagegen::inline2TempFile(implode(chr(10),$temp_styleLines),'css'); 00509 } else { 00510 $GLOBALS['TSFE']->content.=' 00511 <style type="text/css"> 00512 /*<![CDATA[*/ 00513 <!-- 00514 '.implode(chr(10),$temp_styleLines).' 00515 --> 00516 /*]]>*/ 00517 </style>'; 00518 } 00519 } 00520 } 00521 00522 if ($GLOBALS['TSFE']->pSetup['stylesheet']) { 00523 $ss=$GLOBALS['TSFE']->tmpl->getFileName($GLOBALS['TSFE']->pSetup['stylesheet']); 00524 if ($ss) { 00525 $GLOBALS['TSFE']->content.=' 00526 <link rel="stylesheet" type="text/css" href="'.htmlspecialchars($ss).'" />'; 00527 } 00528 } 00529 if (is_array($GLOBALS['TSFE']->pSetup['includeCSS.'])) { 00530 foreach ($GLOBALS['TSFE']->pSetup['includeCSS.'] as $key=>$iCSSfile) { 00531 if (!is_array($iCSSfile)) { 00532 $ss=$GLOBALS['TSFE']->tmpl->getFileName($iCSSfile); 00533 if ($ss) { 00534 if ($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['import']) { 00535 if (substr($ss,0,1)!='/') { // To fix MSIE 6 that cannot handle these as relative paths (according to Ben v Ende) 00536 $ss = t3lib_div::dirname(t3lib_div::getIndpEnv('SCRIPT_NAME')).'/'.$ss; 00537 } 00538 $GLOBALS['TSFE']->content.=' 00539 <style type="text/css"> 00540 <!-- 00541 @import url("'.htmlspecialchars($ss).'") '.htmlspecialchars($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['media']).'; 00542 --> 00543 </style> 00544 '; 00545 } else { 00546 $GLOBALS['TSFE']->content.=' 00547 <link rel="'.($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['alternate'] ? 'alternate stylesheet' : 'stylesheet').'" type="text/css" href="'.htmlspecialchars($ss).'"'. 00548 ($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['title'] ? ' title="'.htmlspecialchars($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['title']).'"' : ''). 00549 ($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['media'] ? ' media="'.htmlspecialchars($GLOBALS['TSFE']->pSetup['includeCSS.'][$key.'.']['media']).'"' : ''). 00550 ' />'; 00551 } 00552 } 00553 } 00554 } 00555 } 00556 00557 // Stylesheets 00558 $style=''; 00559 $style.=trim($GLOBALS['TSFE']->pSetup['CSS_inlineStyle']).chr(10); 00560 00561 if ($GLOBALS['TSFE']->pSetup['insertClassesFromRTE']) { 00562 $pageTSConfig = $GLOBALS['TSFE']->getPagesTSconfig(); 00563 $RTEclasses = $pageTSConfig['RTE.']['classes.']; 00564 if (is_array($RTEclasses)) { 00565 foreach ($RTEclasses as $RTEclassName=>$RTEvalueArray) { 00566 if ($RTEvalueArray['value']) { 00567 $style.=' 00568 .'.substr($RTEclassName,0,-1).' {'.$RTEvalueArray['value'].'}'; 00569 } 00570 } 00571 } 00572 00573 if ($GLOBALS['TSFE']->pSetup['insertClassesFromRTE.']['add_mainStyleOverrideDefs'] && is_array($pageTSConfig['RTE.']['default.']['mainStyleOverride_add.'])) { 00574 $mSOa_tList = t3lib_div::trimExplode(',',strtoupper($GLOBALS['TSFE']->pSetup['insertClassesFromRTE.']['add_mainStyleOverrideDefs']),1); 00575 foreach ($pageTSConfig['RTE.']['default.']['mainStyleOverride_add.'] as $mSOa_key=>$mSOa_value) { 00576 if (!is_array($mSOa_value) && (in_array('*',$mSOa_tList)||in_array($mSOa_key,$mSOa_tList))) { 00577 $style.=' 00578 '.$mSOa_key.' {'.$mSOa_value.'}'; 00579 } 00580 } 00581 } 00582 } 00583 00584 // Setting body tag margins in CSS: 00585 if (isset($GLOBALS['TSFE']->pSetup['bodyTagMargins']) && $GLOBALS['TSFE']->pSetup['bodyTagMargins.']['useCSS']) { 00586 $margins = intval($GLOBALS['TSFE']->pSetup['bodyTagMargins']); 00587 $style.=' 00588 BODY {margin: '.$margins.'px '.$margins.'px '.$margins.'px '.$margins.'px;}'; 00589 } 00590 00591 if ($GLOBALS['TSFE']->pSetup['noLinkUnderline']) { 00592 $style.=' 00593 A:link {text-decoration: none} 00594 A:visited {text-decoration: none} 00595 A:active {text-decoration: none}'; 00596 } 00597 if (trim($GLOBALS['TSFE']->pSetup['hover'])) { 00598 $style.=' 00599 A:hover {color: '.trim($GLOBALS['TSFE']->pSetup['hover']).';}'; 00600 } 00601 if (trim($GLOBALS['TSFE']->pSetup['hoverStyle'])) { 00602 $style.=' 00603 A:hover {'.trim($GLOBALS['TSFE']->pSetup['hoverStyle']).'}'; 00604 } 00605 if ($GLOBALS['TSFE']->pSetup['smallFormFields']) { 00606 $style.=' 00607 SELECT { font-family: Verdana, Arial, Helvetica; font-size: 10px } 00608 TEXTAREA { font-family: Verdana, Arial, Helvetica; font-size: 10px} 00609 INPUT { font-family: Verdana, Arial, Helvetica; font-size: 10px }'; 00610 } 00611 if ($GLOBALS['TSFE']->pSetup['adminPanelStyles']) { 00612 $style.=' 00613 00614 /* Default styles for the Admin Panel */ 00615 TABLE.typo3-adminPanel { border: 1px solid black; background-color: #F6F2E6; } 00616 TABLE.typo3-adminPanel TR.typo3-adminPanel-hRow TD { background-color: #9BA1A8; } 00617 TABLE.typo3-adminPanel TR.typo3-adminPanel-itemHRow TD { background-color: #ABBBB4; } 00618 TABLE.typo3-adminPanel TABLE, TABLE.typo3-adminPanel TD { border: 0px; } 00619 TABLE.typo3-adminPanel TD FONT { font-family: verdana; font-size: 10px; color: black; } 00620 TABLE.typo3-adminPanel TD A FONT { font-family: verdana; font-size: 10px; color: black; } 00621 TABLE.typo3-editPanel { border: 1px solid black; background-color: #F6F2E6; } 00622 TABLE.typo3-editPanel TD { border: 0px; } 00623 '; 00624 } 00625 00626 if (trim($style)) { 00627 if ($GLOBALS['TSFE']->config['config']['inlineStyle2TempFile']) { 00628 $GLOBALS['TSFE']->content.=TSpagegen::inline2TempFile($style, 'css'); 00629 } else { 00630 $GLOBALS['TSFE']->content.=' 00631 <style type="text/css"> 00632 /*<![CDATA[*/ 00633 <!--'.$style.' 00634 --> 00635 /*]]>*/ 00636 </style>'; 00637 } 00638 } 00639 00640 // JavaScript files 00641 if (is_array($GLOBALS['TSFE']->pSetup['includeJS.'])) { 00642 foreach ($GLOBALS['TSFE']->pSetup['includeJS.'] as $key=>$JSfile) { 00643 if (!is_array($JSfile)) { 00644 $ss = $GLOBALS['TSFE']->tmpl->getFileName($JSfile); 00645 if ($ss) { 00646 $type = $GLOBALS['TSFE']->pSetup['includeJS.'][$key.'.']['type']; 00647 if (!$type) $type = 'text/javascript'; 00648 00649 $GLOBALS['TSFE']->content.=' 00650 <script src="'.htmlspecialchars($ss).'" type="'.htmlspecialchars($type).'"></script>'; 00651 } 00652 } 00653 } 00654 } 00655 00656 00657 00658 00659 00660 // Headerdata 00661 if (is_array($GLOBALS['TSFE']->pSetup['headerData.'])) { 00662 $GLOBALS['TSFE']->content.= chr(10).$GLOBALS['TSFE']->cObj->cObjGet($GLOBALS['TSFE']->pSetup['headerData.'],'headerData.'); 00663 } 00664 00665 // Title 00666 $titleTagContent = $GLOBALS['TSFE']->tmpl->printTitle( 00667 $GLOBALS['TSFE']->altPageTitle?$GLOBALS['TSFE']->altPageTitle:$GLOBALS['TSFE']->page['title'], 00668 $GLOBALS['TSFE']->config['config']['noPageTitle'], 00669 $GLOBALS['TSFE']->config['config']['pageTitleFirst'] 00670 ); 00671 if ($GLOBALS['TSFE']->config['config']['titleTagFunction']) { 00672 $titleTagContent = $GLOBALS['TSFE']->cObj->callUserFunction($GLOBALS['TSFE']->config['config']['titleTagFunction'], array(), $titleTagContent); 00673 } 00674 00675 if (strlen($titleTagContent) && intval($GLOBALS['TSFE']->config['config']['noPageTitle'])!==2) { 00676 $GLOBALS['TSFE']->content.=' 00677 <title>'.htmlspecialchars($titleTagContent).'</title>'; 00678 } 00679 $GLOBALS['TSFE']->content.=' 00680 <meta name="generator" content="TYPO3 '.TYPO3_branch.' CMS" />'; 00681 00682 $conf=$GLOBALS['TSFE']->pSetup['meta.']; 00683 if (is_array($conf)) { 00684 reset($conf); 00685 while(list($theKey,$theValue)=each($conf)) { 00686 if (!strstr($theKey,'.') || !isset($conf[substr($theKey,0,-1)])) { // Only if 1) the property is set but not the value itself, 2) the value and/or any property 00687 if (strstr($theKey,'.')) { 00688 $theKey = substr($theKey,0,-1); 00689 } 00690 $val = $GLOBALS['TSFE']->cObj->stdWrap($conf[$theKey],$conf[$theKey.'.']); 00691 $key = $theKey; 00692 if (trim($val)) { 00693 $a='name'; 00694 if (strtolower($key)=='refresh') {$a='http-equiv';} 00695 $GLOBALS['TSFE']->content.= ' 00696 <meta '.$a.'="'.$key.'" content="'.htmlspecialchars(trim($val)).'" />'; 00697 } 00698 } 00699 } 00700 } 00701 00702 unset($GLOBALS['TSFE']->additionalHeaderData['JSCode']); 00703 unset($GLOBALS['TSFE']->additionalHeaderData['JSImgCode']); 00704 00705 if (is_array($GLOBALS['TSFE']->config['INTincScript'])) { 00706 // Storing the JSCode and JSImgCode vars... 00707 $GLOBALS['TSFE']->additionalHeaderData['JSCode'] = $GLOBALS['TSFE']->JSCode; 00708 $GLOBALS['TSFE']->additionalHeaderData['JSImgCode'] = $GLOBALS['TSFE']->JSImgCode; 00709 $GLOBALS['TSFE']->config['INTincScript_ext']['divKey'] = $GLOBALS['TSFE']->uniqueHash(); 00710 $GLOBALS['TSFE']->config['INTincScript_ext']['additionalHeaderData'] = $GLOBALS['TSFE']->additionalHeaderData; // Storing the header-data array 00711 $GLOBALS['TSFE']->config['INTincScript_ext']['additionalJavaScript'] = $GLOBALS['TSFE']->additionalJavaScript; // Storing the JS-data array 00712 $GLOBALS['TSFE']->config['INTincScript_ext']['additionalCSS'] = $GLOBALS['TSFE']->additionalCSS; // Storing the Style-data array 00713 00714 $GLOBALS['TSFE']->additionalHeaderData = array('<!--HD_'.$GLOBALS['TSFE']->config['INTincScript_ext']['divKey'].'-->'); // Clearing the array 00715 $GLOBALS['TSFE']->divSection.= '<!--TDS_'.$GLOBALS['TSFE']->config['INTincScript_ext']['divKey'].'-->'; 00716 } else { 00717 $GLOBALS['TSFE']->INTincScript_loadJSCode(); 00718 } 00719 $JSef = TSpagegen::JSeventFunctions(); 00720 00721 // Adding default Java Script: 00722 $_scriptCode = ' 00723 var browserName = navigator.appName; 00724 var browserVer = parseInt(navigator.appVersion); 00725 var version = ""; 00726 var msie4 = (browserName == "Microsoft Internet Explorer" && browserVer >= 4); 00727 if ((browserName == "Netscape" && browserVer >= 3) || msie4 || browserName=="Konqueror" || browserName=="Opera") {version = "n3";} else {version = "n2";} 00728 // Blurring links: 00729 function blurLink(theObject) { // 00730 if (msie4) {theObject.blur();} 00731 } 00732 '; 00733 00734 if ($GLOBALS['TSFE']->spamProtectEmailAddresses && $GLOBALS['TSFE']->spamProtectEmailAddresses !== 'ascii') { 00735 $_scriptCode.= ' 00736 // decrypt helper function 00737 function decryptCharcode(n,start,end,offset) { 00738 n = n + offset; 00739 if (offset > 0 && n > end) { 00740 n = start + (n - end - 1); 00741 } else if (offset < 0 && n < start) { 00742 n = end - (start - n - 1); 00743 } 00744 return String.fromCharCode(n); 00745 } 00746 // decrypt string 00747 function decryptString(enc,offset) { 00748 var dec = ""; 00749 var len = enc.length; 00750 for(var i=0; i < len; i++) { 00751 var n = enc.charCodeAt(i); 00752 if (n >= 0x2B && n <= 0x3A) { 00753 dec += decryptCharcode(n,0x2B,0x3A,offset); // 0-9 . , - + / : 00754 } else if (n >= 0x40 && n <= 0x5A) { 00755 dec += decryptCharcode(n,0x40,0x5A,offset); // A-Z @ 00756 } else if (n >= 0x61 && n <= 0x7A) { 00757 dec += decryptCharcode(n,0x61,0x7A,offset); // a-z 00758 } else { 00759 dec += enc.charAt(i); 00760 } 00761 } 00762 return dec; 00763 } 00764 // decrypt spam-protected emails 00765 function linkTo_UnCryptMailto(s) { 00766 location.href = decryptString(s,'.($GLOBALS['TSFE']->spamProtectEmailAddresses*-1).'); 00767 } 00768 '; 00769 } 00770 00771 if (!$GLOBALS['TSFE']->config['config']['removeDefaultJS']) { 00772 // NOTICE: The following code must be kept synchronized with "tslib/default.js"!!! 00773 $GLOBALS['TSFE']->content.=' 00774 <script type="text/javascript"> 00775 /*<![CDATA[*/ 00776 <!--'.$_scriptCode.' 00777 // --> 00778 /*]]>*/ 00779 </script>'; 00780 } elseif ($GLOBALS['TSFE']->config['config']['removeDefaultJS']==='external') { 00781 $GLOBALS['TSFE']->content.= TSpagegen::inline2TempFile($_scriptCode, 'js'); 00782 } 00783 00784 $GLOBALS['TSFE']->content.= chr(10).implode($GLOBALS['TSFE']->additionalHeaderData,chr(10)).' 00785 '.$JSef[0].' 00786 </head>'; 00787 if ($GLOBALS['TSFE']->pSetup['frameSet.']) { 00788 $fs = t3lib_div::makeInstance('tslib_frameset'); 00789 $GLOBALS['TSFE']->content.= $fs->make($GLOBALS['TSFE']->pSetup['frameSet.']); 00790 $GLOBALS['TSFE']->content.= chr(10).'<noframes>'.chr(10); 00791 } 00792 00793 // Bodytag: 00794 $defBT = $GLOBALS['TSFE']->pSetup['bodyTagCObject'] ? $GLOBALS['TSFE']->cObj->cObjGetSingle($GLOBALS['TSFE']->pSetup['bodyTagCObject'],$GLOBALS['TSFE']->pSetup['bodyTagCObject.'],'bodyTagCObject') : ''; 00795 if (!$defBT) $defBT = $GLOBALS['TSFE']->defaultBodyTag; 00796 $bodyTag = $GLOBALS['TSFE']->pSetup['bodyTag'] ? $GLOBALS['TSFE']->pSetup['bodyTag'] : $defBT; 00797 if ($bgImg=$GLOBALS['TSFE']->cObj->getImgResource($GLOBALS['TSFE']->pSetup['bgImg'],$GLOBALS['TSFE']->pSetup['bgImg.'])) { 00798 $bodyTag = ereg_replace('>$','',trim($bodyTag)).' background="'.$GLOBALS["TSFE"]->absRefPrefix.$bgImg[3].'">'; 00799 } 00800 00801 if (isset($GLOBALS['TSFE']->pSetup['bodyTagMargins'])) { 00802 $margins = intval($GLOBALS['TSFE']->pSetup['bodyTagMargins']); 00803 if ($GLOBALS['TSFE']->pSetup['bodyTagMargins.']['useCSS']) { 00804 // Setting margins in CSS, see above 00805 } else { 00806 $bodyTag = ereg_replace('>$','',trim($bodyTag)).' leftmargin="'.$margins.'" topmargin="'.$margins.'" marginwidth="'.$margins.'" marginheight="'.$margins.'">'; 00807 } 00808 } 00809 00810 if (trim($GLOBALS['TSFE']->pSetup['bodyTagAdd'])) { 00811 $bodyTag = ereg_replace('>$','',trim($bodyTag)).' '.trim($GLOBALS['TSFE']->pSetup['bodyTagAdd']).'>'; 00812 } 00813 00814 if (count($JSef[1])) { // Event functions: 00815 $bodyTag = ereg_replace('>$','',trim($bodyTag)).' '.trim(implode(' ',$JSef[1])).'>'; 00816 } 00817 $GLOBALS['TSFE']->content.= chr(10).$bodyTag; 00818 00819 00820 // Div-sections 00821 if ($GLOBALS['TSFE']->divSection) { 00822 $GLOBALS['TSFE']->content.= chr(10).$GLOBALS['TSFE']->divSection; 00823 } 00824 00825 // Page content 00826 $GLOBALS['TSFE']->content.= chr(10).$pageContent; 00827 00828 // Ending page 00829 $GLOBALS['TSFE']->content.= chr(10).'</body>'; 00830 if ($GLOBALS['TSFE']->pSetup['frameSet.']) { 00831 $GLOBALS['TSFE']->content.= chr(10).'</noframes>'; 00832 } 00833 $GLOBALS['TSFE']->content.=chr(10).'</html>'; 00834 } 00835 00836 00837 00838 00839 00840 00841 00842 00843 00844 00845 00846 00847 00848 /************************* 00849 * 00850 * Helper functions 00851 * Remember: Calls internally must still be done on the non-instantiated class: TSpagegen::inline2TempFile() 00852 * 00853 *************************/ 00854 00862 function inline2TempFile($str,$ext) { 00863 00864 // Create filename / tags: 00865 $script = ''; 00866 switch($ext) { 00867 case 'js': 00868 $script = 'typo3temp/javascript_'.substr(md5($str),0,10).'.js'; 00869 $output = ' 00870 <script type="text/javascript" src="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$script).'"></script>'; 00871 break; 00872 case 'css': 00873 $script = 'typo3temp/stylesheet_'.substr(md5($str),0,10).'.css'; 00874 $output = ' 00875 <link rel="stylesheet" type="text/css" href="'.htmlspecialchars($GLOBALS['TSFE']->absRefPrefix.$script).'" />'; 00876 break; 00877 } 00878 00879 // Write file: 00880 if ($script) { 00881 if (!@is_file(PATH_site.$script)) { 00882 t3lib_div::writeFile(PATH_site.$script,$str); 00883 } 00884 } 00885 00886 return $output; 00887 } 00888 00896 function isAllowedLinkVarValue($haystack,$needle) { 00897 $OK = false; 00898 00899 if ($needle=='int' || $needle=='integer') { // Integer 00900 00901 if (t3lib_div::testInt($haystack)) { 00902 $OK = true; 00903 } 00904 00905 } elseif (preg_match('/^\/.+\/[imsxeADSUXu]*$/', $needle)) { // Regular expression, only "//" is allowed as delimiter 00906 00907 if (@preg_match($needle, $haystack)) { 00908 $OK = true; 00909 } 00910 00911 } elseif (strstr($needle,'-')) { // Range 00912 00913 if (t3lib_div::testInt($haystack)) { 00914 $range = explode('-',$needle); 00915 if ($range[0] <= $haystack && $range[1] >= $haystack) { 00916 $OK = true; 00917 } 00918 } 00919 00920 } elseif (strstr($needle,'|')) { // List 00921 00922 $haystack = str_replace(' ','',$haystack); // Trim the input 00923 if (strstr('|'.$needle.'|', '|'.$haystack.'|')) { 00924 $OK = true; 00925 } 00926 00927 } elseif (!strcmp($needle,$haystack)) { // String comparison 00928 $OK = true; 00929 } 00930 00931 return $OK; 00932 } 00933 } 00934 00935 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_pagegen.php']) { 00936 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_pagegen.php']); 00937 } 00938 00939 00940 00941 // ******************************************************** 00942 // Includes the search-class if $sword and $scols are set. 00943 // ******************************************************** 00944 if (t3lib_div::_GP('sword') && t3lib_div::_GP('scols')) { 00945 require_once(PATH_tslib.'class.tslib_search.php'); 00946 } 00947 00948 // ************ 00949 // LoadDBGroup 00950 // ************ 00951 require_once (PATH_t3lib.'class.t3lib_loaddbgroup.php'); 00952 00961 class FE_loadDBGroup extends t3lib_loadDBGroup { 00962 var $fromTC = 0; // Means the not only uid and label-field is returned, but everything 00963 } 00964 00965 // ********************************** 00966 // includes stuff for graphical work 00967 // ********************************** 00968 require_once(PATH_t3lib.'class.t3lib_stdgraphic.php'); 00969 require_once(PATH_tslib.'class.tslib_gifbuilder.php'); 00970 00971 // ************************* 00972 // includes menu-management 00973 // ************************* 00974 require_once(PATH_tslib.'class.tslib_menu.php'); 00975 00976 // ************************* 00977 // Global content object... 00978 // ************************* 00979 require_once(PATH_tslib.'class.tslib_content.php'); 00980 00981 ?>