Documentation TYPO3 par Ameos |
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00041 // ******************************* 00042 // Set error reporting 00043 // ******************************* 00044 error_reporting (E_ALL ^ E_NOTICE); 00045 00046 00047 // ****************** 00048 // Constants defined 00049 // ****************** 00050 $TYPO3_MISC['microtime_start'] = microtime(); 00051 define('TYPO3_OS', stristr(PHP_OS,'win')&&!stristr(PHP_OS,'darwin')?'WIN':''); 00052 define('TYPO3_MODE','FE'); 00053 00054 if (!defined('PATH_thisScript')) define('PATH_thisScript',str_replace('//','/', str_replace('\\','/', (php_sapi_name()=='cgi'||php_sapi_name()=='isapi' ||php_sapi_name()=='cgi-fcgi')&&($_SERVER['ORIG_PATH_TRANSLATED']?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED'])? ($_SERVER['ORIG_PATH_TRANSLATED']?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED']):($_SERVER['ORIG_SCRIPT_FILENAME']?$_SERVER['ORIG_SCRIPT_FILENAME']:$_SERVER['SCRIPT_FILENAME'])))); 00055 if (!defined('PATH_site')) define('PATH_site', dirname(PATH_thisScript).'/'); 00056 if (!defined('PATH_t3lib')) define('PATH_t3lib', PATH_site.'t3lib/'); 00057 00058 define('PATH_typo3conf', PATH_site.'typo3conf/'); 00059 define('TYPO3_mainDir', 'typo3/'); // This is the directory of the backend administration for the sites of this TYPO3 installation. 00060 00061 if (!defined('PATH_tslib')) { 00062 if (@is_dir(PATH_site.TYPO3_mainDir.'sysext/cms/tslib/')) { 00063 define('PATH_tslib', PATH_site.TYPO3_mainDir.'sysext/cms/tslib/'); 00064 } elseif (@is_dir(PATH_site.'tslib/')) { 00065 define('PATH_tslib', PATH_site.'tslib/'); 00066 } 00067 } 00068 00069 if (!@is_dir(PATH_typo3conf)) die('Cannot find configuration. This file is probably executed from the wrong location.'); 00070 00071 // ********************* 00072 // Timetracking started 00073 // ********************* 00074 require_once(PATH_t3lib.'class.t3lib_timetrack.php'); 00075 $TT = new t3lib_timeTrack; 00076 $TT->start(); 00077 $TT->push('','Script start'); 00078 00079 00080 // ********************* 00081 // Mandatory libraries included 00082 // ********************* 00083 $TT->push('Include class t3lib_db, t3lib_div, t3lib_extmgm',''); 00084 require_once(PATH_t3lib.'class.t3lib_div.php'); 00085 require_once(PATH_t3lib.'class.t3lib_extmgm.php'); 00086 $TT->pull(); 00087 00088 00089 00090 // ********************** 00091 // Include configuration 00092 // ********************** 00093 $TT->push('Include config files',''); 00094 require(PATH_t3lib.'config_default.php'); 00095 if (!defined ('TYPO3_db')) die ('The configuration file was not included.'); // the name of the TYPO3 database is stored in this constant. Here the inclusion of the config-file is verified by checking if this var is set. 00096 if (!t3lib_extMgm::isLoaded('cms')) die('<strong>Error:</strong> The main frontend extension "cms" was not loaded. Enable it in the extension manager in the backend.'); 00097 00098 if (!defined('PATH_tslib')) { 00099 define('PATH_tslib', t3lib_extMgm::extPath('cms').'tslib/'); 00100 } 00101 00102 require_once(PATH_t3lib.'class.t3lib_db.php'); 00103 $TYPO3_DB = t3lib_div::makeInstance('t3lib_DB'); 00104 $TYPO3_DB->debugOutput = $TYPO3_CONF_VARS['SYS']['sqlDebug']; 00105 00106 $CLIENT = t3lib_div::clientInfo(); // Set to the browser: net / msie if 4+ browsers 00107 $TT->pull(); 00108 00109 00110 // ******************************* 00111 // Checking environment 00112 // ******************************* 00113 if (t3lib_div::int_from_ver(phpversion())<4001000) die ('TYPO3 runs with PHP4.1.0+ only'); 00114 00115 if (isset($_POST['GLOBALS']) || isset($_GET['GLOBALS'])) die('You cannot set the GLOBALS-array from outside the script.'); 00116 if (!get_magic_quotes_gpc()) { 00117 $TT->push('Add slashes to GET/POST arrays',''); 00118 t3lib_div::addSlashesOnArray($_GET); 00119 t3lib_div::addSlashesOnArray($_POST); 00120 $HTTP_GET_VARS = $_GET; 00121 $HTTP_POST_VARS = $_POST; 00122 $TT->pull(); 00123 } 00124 00125 00126 // ********************* 00127 // Look for extension ID which will launch alternative output engine 00128 // ********************* 00129 if ($temp_extId = t3lib_div::_GP('eID')) { 00130 if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS['FE']['eID_include'][$temp_extId])) { 00131 require_once(PATH_tslib.'class.tslib_eidtools.php'); 00132 require($classPath); 00133 } 00134 exit; 00135 } 00136 00137 // ********************* 00138 // Libraries included 00139 // ********************* 00140 $TT->push('Include Frontend libraries',''); 00141 require_once(PATH_tslib.'class.tslib_fe.php'); 00142 require_once(PATH_t3lib.'class.t3lib_page.php'); 00143 require_once(PATH_t3lib.'class.t3lib_userauth.php'); 00144 require_once(PATH_tslib.'class.tslib_feuserauth.php'); 00145 require_once(PATH_t3lib.'class.t3lib_tstemplate.php'); 00146 require_once(PATH_t3lib.'class.t3lib_cs.php'); 00147 $TT->pull(); 00148 00149 00150 // *********************************** 00151 // Create $TSFE object (TSFE = TypoScript Front End) 00152 // Connecting to database 00153 // *********************************** 00154 $temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe'); 00155 $TSFE = new $temp_TSFEclassName( 00156 $TYPO3_CONF_VARS, 00157 t3lib_div::_GP('id'), 00158 t3lib_div::_GP('type'), 00159 t3lib_div::_GP('no_cache'), 00160 t3lib_div::_GP('cHash'), 00161 t3lib_div::_GP('jumpurl'), 00162 t3lib_div::_GP('MP'), 00163 t3lib_div::_GP('RDCT') 00164 ); 00165 $TSFE->connectToDB(); 00166 00167 // In case of a keyword-authenticated preview, re-initialize the TSFE object: 00168 if ($temp_previewConfig = $TSFE->ADMCMD_preview()) { 00169 $TSFE = new $temp_TSFEclassName( 00170 $TYPO3_CONF_VARS, 00171 t3lib_div::_GP('id'), 00172 t3lib_div::_GP('type'), 00173 t3lib_div::_GP('no_cache'), 00174 t3lib_div::_GP('cHash'), 00175 t3lib_div::_GP('jumpurl'), 00176 t3lib_div::_GP('MP'), 00177 t3lib_div::_GP('RDCT') 00178 ); 00179 $TSFE->ADMCMD_preview_postInit($temp_previewConfig); 00180 } 00181 00182 if ($TSFE->RDCT) {$TSFE->sendRedirect();} 00183 00184 00185 // ******************* 00186 // output compression 00187 // ******************* 00188 if ($TYPO3_CONF_VARS['FE']['compressionLevel']) { 00189 ob_start(); 00190 require_once(PATH_t3lib.'class.gzip_encode.php'); 00191 } 00192 00193 // ********* 00194 // FE_USER 00195 // ********* 00196 $TT->push('Front End user initialized',''); 00197 $TSFE->initFEuser(); 00198 $TT->pull(); 00199 00200 // **************** 00201 // PRE BE_USER HOOK 00202 // **************** 00203 if (is_array($TYPO3_CONF_VARS['SC_OPTIONS']['tslib/index_ts.php']['preBeUser'])) { 00204 foreach($TYPO3_CONF_VARS['SC_OPTIONS']['tslib/index_ts.php']['preBeUser'] as $_funcRef) { 00205 $_params = array(); 00206 t3lib_div::callUserFunction($_funcRef, $_params , $_params); 00207 } 00208 } 00209 00210 00211 // ********* 00212 // BE_USER 00213 // ********* 00214 $BE_USER=''; 00215 if ($_COOKIE['be_typo_user']) { // If the backend cookie is set, we proceed and checks if a backend user is logged in. 00216 $TYPO3_MISC['microtime_BE_USER_start'] = microtime(); 00217 $TT->push('Back End user initialized',''); 00218 require_once (PATH_t3lib.'class.t3lib_befunc.php'); 00219 require_once (PATH_t3lib.'class.t3lib_userauthgroup.php'); 00220 require_once (PATH_t3lib.'class.t3lib_beuserauth.php'); 00221 require_once (PATH_t3lib.'class.t3lib_tsfebeuserauth.php'); 00222 00223 // the value this->formfield_status is set to empty in order to disable login-attempts to the backend account through this script 00224 $BE_USER = t3lib_div::makeInstance('t3lib_tsfeBeUserAuth'); // New backend user object 00225 $BE_USER->OS = TYPO3_OS; 00226 $BE_USER->lockIP = $TYPO3_CONF_VARS['BE']['lockIP']; 00227 $BE_USER->start(); // Object is initialized 00228 $BE_USER->unpack_uc(''); 00229 if ($BE_USER->user['uid']) { 00230 $BE_USER->fetchGroupData(); 00231 $TSFE->beUserLogin = 1; 00232 } 00233 if ($BE_USER->checkLockToIP() && $BE_USER->checkBackendAccessSettingsFromInitPhp()) { 00234 $BE_USER->extInitFeAdmin(); 00235 if ($BE_USER->extAdmEnabled) { 00236 require_once(t3lib_extMgm::extPath('lang').'lang.php'); 00237 $LANG = t3lib_div::makeInstance('language'); 00238 $LANG->init($BE_USER->uc['lang']); 00239 00240 $BE_USER->extSaveFeAdminConfig(); 00241 // Setting some values based on the admin panel 00242 $TSFE->forceTemplateParsing = $BE_USER->extGetFeAdminValue('tsdebug', 'forceTemplateParsing'); 00243 $TSFE->displayEditIcons = $BE_USER->extGetFeAdminValue('edit', 'displayIcons'); 00244 $TSFE->displayFieldEditIcons = $BE_USER->extGetFeAdminValue('edit', 'displayFieldIcons'); 00245 00246 if (t3lib_div::_GP('ADMCMD_editIcons')) { 00247 $TSFE->displayFieldEditIcons=1; 00248 $BE_USER->uc['TSFE_adminConfig']['edit_editNoPopup']=1; 00249 } 00250 if (t3lib_div::_GP('ADMCMD_simUser')) { 00251 $BE_USER->uc['TSFE_adminConfig']['preview_simulateUserGroup']=intval(t3lib_div::_GP('ADMCMD_simUser')); 00252 $BE_USER->ext_forcePreview=1; 00253 } 00254 if (t3lib_div::_GP('ADMCMD_simTime')) { 00255 $BE_USER->uc['TSFE_adminConfig']['preview_simulateDate']=intval(t3lib_div::_GP('ADMCMD_simTime')); 00256 $BE_USER->ext_forcePreview=1; 00257 } 00258 00259 // Include classes for editing IF editing module in Admin Panel is open 00260 if (($BE_USER->extAdmModuleEnabled('edit') && $BE_USER->extIsAdmMenuOpen('edit')) || $TSFE->displayEditIcons == 1) { 00261 $TSFE->includeTCA(); 00262 if ($BE_USER->extIsEditAction()) { 00263 require_once (PATH_t3lib.'class.t3lib_tcemain.php'); 00264 $BE_USER->extEditAction(); 00265 } 00266 if ($BE_USER->extIsFormShown()) { 00267 require_once(PATH_t3lib.'class.t3lib_tceforms.php'); 00268 require_once(PATH_t3lib.'class.t3lib_iconworks.php'); 00269 require_once(PATH_t3lib.'class.t3lib_loaddbgroup.php'); 00270 require_once(PATH_t3lib.'class.t3lib_transferdata.php'); 00271 } 00272 } 00273 00274 if ($TSFE->forceTemplateParsing || $TSFE->displayEditIcons || $TSFE->displayFieldEditIcons) { $TSFE->set_no_cache(); } 00275 } 00276 00277 // $WEBMOUNTS = (string)($BE_USER->groupData['webmounts'])!='' ? explode(',',$BE_USER->groupData['webmounts']) : Array(); 00278 // $FILEMOUNTS = $BE_USER->groupData['filemounts']; 00279 } else { // Unset the user initialization. 00280 $BE_USER=''; 00281 $TSFE->beUserLogin=0; 00282 } 00283 $TT->pull(); 00284 $TYPO3_MISC['microtime_BE_USER_end'] = microtime(); 00285 } elseif ($TSFE->ADMCMD_preview_BEUSER_uid) { 00286 require_once (PATH_t3lib.'class.t3lib_befunc.php'); 00287 require_once (PATH_t3lib.'class.t3lib_userauthgroup.php'); 00288 require_once (PATH_t3lib.'class.t3lib_beuserauth.php'); 00289 require_once (PATH_t3lib.'class.t3lib_tsfebeuserauth.php'); 00290 00291 // the value this->formfield_status is set to empty in order to disable login-attempts to the backend account through this script 00292 $BE_USER = t3lib_div::makeInstance('t3lib_tsfeBeUserAuth'); // New backend user object 00293 $BE_USER->userTS_dontGetCached = 1; 00294 $BE_USER->OS = TYPO3_OS; 00295 $BE_USER->setBeUserByUid($TSFE->ADMCMD_preview_BEUSER_uid); 00296 $BE_USER->unpack_uc(''); 00297 if ($BE_USER->user['uid']) { 00298 $BE_USER->fetchGroupData(); 00299 $TSFE->beUserLogin = 1; 00300 } else { 00301 $BE_USER = ''; 00302 $TSFE->beUserLogin = 0; 00303 } 00304 } 00305 00306 // ******************** 00307 // Workspace preview: 00308 // ******************** 00309 $TSFE->workspacePreviewInit(); 00310 00311 00312 // ***************************************** 00313 // Proces the ID, type and other parameters 00314 // After this point we have an array, $page in TSFE, which is the page-record of the current page, $id 00315 // ***************************************** 00316 $TT->push('Process ID',''); 00317 $TSFE->checkAlternativeIdMethods(); 00318 $TSFE->clear_preview(); 00319 $TSFE->determineId(); 00320 00321 // Now, if there is a backend user logged in and he has NO access to this page, then re-evaluate the id shown! 00322 if ($TSFE->beUserLogin && (!$BE_USER->extPageReadAccess($TSFE->page) || t3lib_div::_GP('ADMCMD_noBeUser'))) { // t3lib_div::_GP('ADMCMD_noBeUser') is placed here because workspacePreviewInit() might need to know if a backend user is logged in! 00323 00324 // Remove user 00325 unset($BE_USER); 00326 $TSFE->beUserLogin = 0; 00327 00328 // Re-evaluate the page-id. 00329 $TSFE->checkAlternativeIdMethods(); 00330 $TSFE->clear_preview(); 00331 $TSFE->determineId(); 00332 } 00333 $TSFE->makeCacheHash(); 00334 $TT->pull(); 00335 00336 00337 // ******************************************* 00338 // Get compressed $TCA-Array(); 00339 // After this, we should now have a valid $TCA, though minimized 00340 // ******************************************* 00341 $TSFE->getCompressedTCarray(); 00342 00343 00344 // ******************************** 00345 // Starts the template 00346 // ******************************* 00347 $TT->push('Start Template',''); 00348 $TSFE->initTemplate(); 00349 $TT->pull(); 00350 00351 00352 // ******************************** 00353 // Get from cache 00354 // ******************************* 00355 $TT->push('Get Page from cache',''); 00356 $TSFE->getFromCache(); 00357 $TT->pull(); 00358 00359 00360 // ****************************************************** 00361 // Get config if not already gotten 00362 // After this, we should have a valid config-array ready 00363 // ****************************************************** 00364 $TSFE->getConfigArray(); 00365 00366 00367 // ******************************** 00368 // Convert POST data to internal "renderCharset" if different from the metaCharset: 00369 // ******************************* 00370 $TSFE->convPOSTCharset(); 00371 00372 00373 // ******************************************* 00374 // Setting the internal var, sys_language_uid + locale settings 00375 // ******************************************* 00376 $TSFE->settingLanguage(); 00377 $TSFE->settingLocale(); 00378 00379 00380 // ******************************** 00381 // Check JumpUrl 00382 // ******************************* 00383 $TSFE->setExternalJumpUrl(); 00384 $TSFE->checkJumpUrlReferer(); 00385 00386 00387 // ******************************** 00388 // Check Submission of data. 00389 // This is done at this point, because we need the config values 00390 // ******************************* 00391 switch($TSFE->checkDataSubmission()) { 00392 case 'email': 00393 require_once(PATH_t3lib.'class.t3lib_htmlmail.php'); 00394 require_once(PATH_t3lib.'class.t3lib_formmail.php'); 00395 $TSFE->sendFormmail(); 00396 break; 00397 case 'fe_tce': 00398 require_once(PATH_tslib.'class.tslib_fetce.php'); 00399 $TSFE->includeTCA(); 00400 $TT->push('fe_tce',''); 00401 $TSFE->fe_tce(); 00402 $TT->pull(); 00403 break; 00404 } 00405 00406 00407 // ******************************** 00408 // Generate page 00409 // ******************************* 00410 $TSFE->setUrlIdToken(); 00411 00412 $TT->push('Page generation',''); 00413 if ($TSFE->doXHTML_cleaning()) {require_once(PATH_t3lib.'class.t3lib_parsehtml.php');} 00414 if ($TSFE->isGeneratePage()) { 00415 $TSFE->generatePage_preProcessing(); 00416 $temp_theScript=$TSFE->generatePage_whichScript(); 00417 00418 if ($temp_theScript) { 00419 include($temp_theScript); 00420 } else { 00421 require_once(PATH_tslib.'class.tslib_pagegen.php'); 00422 include(PATH_tslib.'pagegen.php'); 00423 } 00424 $TSFE->generatePage_postProcessing(); 00425 } elseif ($TSFE->isINTincScript()) { 00426 require_once(PATH_tslib.'class.tslib_pagegen.php'); 00427 include(PATH_tslib.'pagegen.php'); 00428 } 00429 $TT->pull(); 00430 00431 00432 // ******************************** 00433 // $GLOBALS['TSFE']->config['INTincScript'] 00434 // ******************************* 00435 if ($TSFE->isINTincScript()) { 00436 $TT->push('Non-cached objects',''); 00437 $INTiS_config = $GLOBALS['TSFE']->config['INTincScript']; 00438 00439 // Special feature: Include libraries 00440 $TT->push('Include libraries'); 00441 foreach($INTiS_config as $INTiS_cPart) { 00442 if ($INTiS_cPart['conf']['includeLibs']) { 00443 $INTiS_resourceList = t3lib_div::trimExplode(',',$INTiS_cPart['conf']['includeLibs'],1); 00444 $GLOBALS['TT']->setTSlogMessage('Files for inclusion: "'.implode(', ',$INTiS_resourceList).'"'); 00445 00446 foreach($INTiS_resourceList as $INTiS_theLib) { 00447 $INTiS_incFile = $GLOBALS['TSFE']->tmpl->getFileName($INTiS_theLib); 00448 if ($INTiS_incFile) { 00449 require_once('./'.$INTiS_incFile); 00450 } else { 00451 $GLOBALS['TT']->setTSlogMessage('Include file "'.$INTiS_theLib.'" did not exist!',2); 00452 } 00453 } 00454 } 00455 } 00456 $TT->pull(); 00457 $TSFE->INTincScript(); 00458 $TT->pull(); 00459 } 00460 00461 // *************** 00462 // Output content 00463 // *************** 00464 if ($TSFE->isOutputting()) { 00465 $TT->push('Print Content',''); 00466 $TSFE->processOutput(); 00467 00468 // *************************************** 00469 // Outputs content / Includes EXT scripts 00470 // *************************************** 00471 if ($TSFE->isEXTincScript()) { 00472 $TT->push('External PHP-script',''); 00473 // Important global variables here are $EXTiS_*, they must not be overridden in include-scripts!!! 00474 $EXTiS_config = $GLOBALS['TSFE']->config['EXTincScript']; 00475 $EXTiS_splitC = explode('<!--EXT_SCRIPT.',$GLOBALS['TSFE']->content); // Splits content with the key. 00476 00477 // Special feature: Include libraries 00478 reset($EXTiS_config); 00479 while(list(,$EXTiS_cPart)=each($EXTiS_config)) { 00480 if ($EXTiS_cPart['conf']['includeLibs']) { 00481 $EXTiS_resourceList = t3lib_div::trimExplode(',',$EXTiS_cPart['conf']['includeLibs'],1); 00482 $GLOBALS['TT']->setTSlogMessage('Files for inclusion: "'.implode(', ',$EXTiS_resourceList).'"'); 00483 reset($EXTiS_resourceList); 00484 while(list(,$EXTiS_theLib)=each($EXTiS_resourceList)) { 00485 $EXTiS_incFile=$GLOBALS['TSFE']->tmpl->getFileName($EXTiS_theLib); 00486 if ($EXTiS_incFile) { 00487 require_once($EXTiS_incFile); 00488 } else { 00489 $GLOBALS['TT']->setTSlogMessage('Include file "'.$EXTiS_theLib.'" did not exist!',2); 00490 } 00491 } 00492 } 00493 } 00494 00495 reset($EXTiS_splitC); 00496 while(list($EXTiS_c,$EXTiS_cPart)=each($EXTiS_splitC)) { 00497 if (substr($EXTiS_cPart,32,3)=='-->') { // If the split had a comment-end after 32 characters it's probably a split-string 00498 $EXTiS_key = 'EXT_SCRIPT.'.substr($EXTiS_cPart,0,32); 00499 if (is_array($EXTiS_config[$EXTiS_key])) { 00500 $REC = $EXTiS_config[$EXTiS_key]['data']; 00501 $CONF = $EXTiS_config[$EXTiS_key]['conf']; 00502 $content=''; 00503 include($EXTiS_config[$EXTiS_key]['file']); 00504 echo $content; // The script MAY return content in $content or the script may just output the result directly! 00505 } 00506 echo substr($EXTiS_cPart,35); 00507 } else { 00508 echo ($c?'<!--EXT_SCRIPT.':'').$EXTiS_cPart; 00509 } 00510 } 00511 00512 $TT->pull(); 00513 } else { 00514 echo $GLOBALS['TSFE']->content; 00515 } 00516 $TT->pull(); 00517 } 00518 00519 00520 // ******************************** 00521 // Store session data for fe_users 00522 // ******************************** 00523 $TSFE->storeSessionData(); 00524 00525 00526 // *********** 00527 // Statistics 00528 // *********** 00529 $TYPO3_MISC['microtime_end'] = microtime(); 00530 $TSFE->setParseTime(); 00531 if ($TSFE->isOutputting() && ($TSFE->TYPO3_CONF_VARS['FE']['debug'] || $TSFE->config['config']['debug'])) { 00532 echo ' 00533 <!-- Parsetime: '.$TSFE->scriptParseTime.' ms-->'; 00534 } 00535 $TSFE->statistics(); 00536 00537 00538 // *************** 00539 // Check JumpUrl 00540 // *************** 00541 $TSFE->jumpurl(); 00542 00543 00544 // ************* 00545 // Preview info 00546 // ************* 00547 $TSFE->previewInfo(); 00548 00549 00550 // ****************** 00551 // Publishing static 00552 // ****************** 00553 if (is_object($BE_USER)) { 00554 if ($BE_USER->extAdmModuleEnabled('publish') && $BE_USER->extPublishList) { 00555 include_once(PATH_tslib.'publish.php'); 00556 } 00557 } 00558 00559 00560 // ****************** 00561 // Hook for end-of-frontend 00562 // ****************** 00563 $TSFE->hook_eofe(); 00564 00565 00566 // ******************** 00567 // Finish timetracking 00568 // ******************** 00569 $TT->pull(); 00570 00571 00572 // ****************** 00573 // beLoginLinkIPList 00574 // ****************** 00575 echo $GLOBALS['TSFE']->beLoginLinkIPList(); 00576 00577 00578 // ************* 00579 // Admin panel 00580 // ************* 00581 if (is_object($BE_USER) 00582 && $GLOBALS['TSFE']->beUserLogin 00583 && $GLOBALS['TSFE']->config['config']['admPanel'] 00584 && $BE_USER->extAdmEnabled 00585 // && $BE_USER->extPageReadAccess($GLOBALS['TSFE']->page) // This is already done, if there is a BE_USER object at this point! 00586 && !$BE_USER->extAdminConfig['hide']) { 00587 echo $BE_USER->extPrintFeAdminDialog(); 00588 } 00589 00590 00591 // ************* 00592 // Debugging Output 00593 // ************* 00594 if(@is_callable(array($error,'debugOutput'))) { 00595 $error->debugOutput(); 00596 } 00597 if (TYPO3_DLOG) t3lib_div::devLog('END of FRONTEND session','',0,array('_FLUSH'=>TRUE)); 00598 00599 00600 // ************* 00601 // Compressions 00602 // ************* 00603 if ($TYPO3_CONF_VARS['FE']['compressionLevel']) { 00604 new gzip_encode($TYPO3_CONF_VARS['FE']['compressionLevel'], false, $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionDebugInfo']); 00605 } 00606 00607 ?>