82 $this->
debug = (int)
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'debug'] === 1;
85 $this->moduleLoader->load(
$GLOBALS[
'TBE_MODULES']);
87 $this->pageRenderer =
$GLOBALS[
'TBE_TEMPLATE']->getPageRenderer();
88 $this->pageRenderer->loadScriptaculous(
'builder,effects,controls,dragdrop');
89 $this->pageRenderer->loadExtJS();
90 $this->pageRenderer->enableExtJSQuickTips();
91 $this->pageRenderer->addJsInlineCode(
'consoleOverrideWithDebugPanel',
'//already done', FALSE);
92 $this->pageRenderer->addExtDirectCode();
95 $this->jsFiles = array(
96 'common' =>
'sysext/backend/Resources/Public/JavaScript/common.js',
98 'modernizr' =>
'contrib/modernizr/modernizr.min.js',
99 'md5' =>
'sysext/backend/Resources/Public/JavaScript/md5.js',
100 'toolbarmanager' =>
'sysext/backend/Resources/Public/JavaScript/toolbarmanager.js',
101 'modulemenu' =>
'sysext/backend/Resources/Public/JavaScript/modulemenu.js',
102 'iecompatibility' =>
'sysext/backend/Resources/Public/JavaScript/iecompatibility.js',
103 'evalfield' =>
'sysext/backend/Resources/Public/JavaScript/jsfunc.evalfield.js',
104 'flashmessages' =>
'sysext/backend/Resources/Public/JavaScript/flashmessages.js',
105 'tabclosemenu' =>
'js/extjs/ux/ext.ux.tabclosemenu.js',
106 'notifications' =>
'sysext/backend/Resources/Public/JavaScript/notifications.js',
107 'backend' =>
'sysext/backend/Resources/Public/JavaScript/backend.js',
108 'loginrefresh' =>
'sysext/backend/Resources/Public/JavaScript/loginrefresh.js',
109 'debugPanel' =>
'js/extjs/debugPanel.js',
110 'viewport' =>
'js/extjs/viewport.js',
111 'iframepanel' =>
'sysext/backend/Resources/Public/JavaScript/iframepanel.js',
112 'backendcontentiframe' =>
'js/extjs/backendcontentiframe.js',
113 'modulepanel' =>
'js/extjs/modulepanel.js',
114 'viewportConfiguration' =>
'js/extjs/viewportConfiguration.js',
115 'util' =>
'sysext/backend/Resources/Public/JavaScript/util.js' 118 unset($this->jsFiles[
'loginrefresh']);
121 $this->pageRenderer->addCssLibrary(
'contrib/normalize/normalize.css',
'stylesheet',
'all',
'', TRUE, TRUE);
123 $this->cssFiles = array();
124 $this->toolbarItems = array();
127 if (isset(
$GLOBALS[
'TBE_STYLES'][
'dims'][
'leftMenuFrameW']) && (
int)
$GLOBALS[
'TBE_STYLES'][
'dims'][
'leftMenuFrameW'] != (
int)$this->menuWidth) {
128 $this->menuWidth = (int)
$GLOBALS[
'TBE_STYLES'][
'dims'][
'leftMenuFrameW'];
139 $coreToolbarItems = array(
140 'shortcuts' =>
'TYPO3\\CMS\\Backend\\Toolbar\\ShortcutToolbarItem',
141 'clearCacheActions' =>
'TYPO3\\CMS\\Backend\\Toolbar\\ClearCacheToolbarItem',
142 'liveSearch' =>
'TYPO3\\CMS\\Backend\\Toolbar\\LiveSearchToolbarItem' 144 foreach ($coreToolbarItems as $toolbarItemName => $toolbarItemClassName) {
146 if (!$toolbarItem instanceof \
TYPO3\CMS\Backend\Toolbar\ToolbarItemHookInterface) {
147 throw new \UnexpectedValueException(
'$toolbarItem "' . $toolbarItemName .
'" must implement interface TYPO3\\CMS\\Backend\\Toolbar\\ToolbarItemHookInterface', 1195126772);
149 if ($toolbarItem->checkAccess()) {
150 $this->toolbarItems[$toolbarItemName] = $toolbarItem;
169 $backendScaffolding =
' 170 <div id="typo3-top-container" class="x-hide-display"> 171 <div id="typo3-logo">' . $logo->render() .
'</div> 172 <div id="typo3-top" class="typo3-top-toolbar">' . $this->
renderToolbar() .
'</div> 177 foreach ($this->cssFiles as $cssFileName => $cssFile) {
178 $this->pageRenderer->addCssFile($cssFile);
180 if (!empty(
$GLOBALS[
'TBE_STYLES'][
'stylesheets'][$cssFileName])) {
181 $this->pageRenderer->addCssFile(
$GLOBALS[
'TBE_STYLES'][
'stylesheets'][$cssFileName]);
184 if (!empty($this->css)) {
185 $this->pageRenderer->addCssInlineBlock(
'BackendInlineCSS', $this->css);
187 foreach ($this->jsFiles as $jsFile) {
188 $this->pageRenderer->addJsFile($jsFile);
191 $this->pageRenderer->addJsInlineCode(
'BackendInlineJavascript', $this->js, FALSE);
194 $GLOBALS[
'TBE_TEMPLATE']->setExtDirectStateProvider();
195 $states =
$GLOBALS[
'BE_USER']->uc[
'BackendComponents'][
'States'];
198 Ext.state.Manager.setProvider(new TYPO3.state.ExtDirectProvider({ 199 key: "BackendComponents.States", 204 $extOnReadyCode .=
'Ext.state.Manager.getProvider().initState(' . json_encode($states) .
');';
207 TYPO3.Backend = new TYPO3.Viewport(TYPO3.Viewport.configuration); 208 if (typeof console === "undefined") { 209 console = TYPO3.Backend.DebugConsole; 212 $this->pageRenderer->addExtOnReadyCode($extOnReadyCode);
214 $title =
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'sitename'] ?
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'sitename'] .
' [TYPO3 CMS ' . TYPO3_version .
']' :
'TYPO3 CMS ' . TYPO3_version;
215 $this->content = $backendScaffolding;
217 $this->content =
$GLOBALS[
'TBE_TEMPLATE']->render($title, $this->content);
218 $hookConfiguration = array(
'content' => &$this->content);
219 $this->
executeHook(
'renderPostProcess', $hookConfiguration);
229 if (!is_array(
$GLOBALS[
'TBE_MODULES'][
'_navigationComponents'])) {
232 $loadedComponents = array();
233 foreach (
$GLOBALS[
'TBE_MODULES'][
'_navigationComponents'] as
$module => $info) {
234 if (in_array($info[
'componentId'], $loadedComponents)) {
237 $loadedComponents[] = $info[
'componentId'];
238 $component = strtolower(substr($info[
'componentId'], strrpos($info[
'componentId'],
'-') + 1));
239 $componentDirectory =
'components/' . $component .
'/';
240 if ($info[
'isCoreComponent']) {
241 $absoluteComponentPath = PATH_site .
'typo3/js/extjs/' . $componentDirectory;
242 $relativeComponentPath =
'../' . str_replace(PATH_site,
'', $absoluteComponentPath);
248 if (file_exists($absoluteComponentPath .
'css/loadorder.txt')) {
250 $loadOrder = str_replace(
'../',
'',
GeneralUtility::getUrl($absoluteComponentPath .
'css/loadorder.txt'));
255 $this->pageRenderer->addCssFile($relativeComponentPath .
'css/' . $cssFile);
258 if (file_exists($absoluteComponentPath .
'javascript/loadorder.txt')) {
260 $loadOrder = str_replace(
'../',
'',
GeneralUtility::getUrl($absoluteComponentPath .
'javascript/loadorder.txt'));
265 $this->pageRenderer->addJsFile($relativeComponentPath .
'javascript/' . $jsFile);
278 if (array_key_exists(
'liveSearch', $this->toolbarItems)) {
279 $search = $this->toolbarItems[
'liveSearch'];
280 unset($this->toolbarItems[
'liveSearch']);
281 $this->toolbarItems[
'liveSearch'] = $search;
283 $toolbar =
'<ul id="typo3-toolbar">';
285 $toolbar .=
'<li class="separator"><div id="logout-button" class="toolbar-item no-separator">' . $this->moduleMenu->renderLogoutButton() .
'</div></li>';
287 $numberOfToolbarItems = count($this->toolbarItems);
288 foreach ($this->toolbarItems as $key => $toolbarItem) {
290 $menu = $toolbarItem->render();
292 $additionalAttributes = trim($toolbarItem->getAdditionalAttributes());
293 if ($numberOfToolbarItems > 1 && $i == $numberOfToolbarItems - 1) {
294 if (strpos($additionalAttributes,
'class="') !== FALSE) {
295 $additionalAttributes = str_replace(
'class="',
'class="separator ', $additionalAttributes);
297 $additionalAttributes .=
' class="separator"';
300 if ($additionalAttributes !==
'') {
301 $additionalAttributes =
' ' . $additionalAttributes;
303 $toolbar .=
'<li' . $additionalAttributes .
'>' . $menu .
'</li>';
306 return $toolbar .
'</ul>';
315 $css =
'toolbar-item';
317 $realName =
$GLOBALS[
'BE_USER']->user[
'realName'];
318 $username =
$GLOBALS[
'BE_USER']->user[
'username'];
319 $label = $realName ?: $username;
324 $link =
'<a href="#" onclick="top.goToModule(\'user_setup\'); this.blur(); return false;">';
327 if (
$GLOBALS[
'BE_USER']->user[
'ses_backuserid']) {
329 $title =
$GLOBALS[
'LANG']->getLL(
'switchtouser') .
': ' . $username;
330 $label =
$GLOBALS[
'LANG']->getLL(
'switchtousershort') .
' ' . ($realName ? $realName .
' (' . $username .
')' : $username);
332 return '<div id="username" class="' .
$css .
'">' . $link . $icon .
'<span title="' . htmlspecialchars($title) .
'">' . htmlspecialchars($label) .
'</span>' . ($link ?
'</a>' :
'') .
'</div>';
343 $filePath =
'typo3temp/locallang-BE-' . sha1($code) .
'.js';
344 if (!file_exists((PATH_site . $filePath))) {
347 throw new \RuntimeException(
'LocalLangFile could not be written to ' . $filePath, 1295193026);
350 return '../' . $filePath;
361 'waitTitle' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_logging_in'),
362 'refresh_login_failed' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_failed'),
363 'refresh_login_failed_message' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_failed_message'),
364 'refresh_login_title' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_title'),
365 'login_expired' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.login_expired'),
366 'refresh_login_username' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_username'),
367 'refresh_login_password' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_password'),
368 'refresh_login_emptyPassword' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_emptyPassword'),
369 'refresh_login_button' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_button'),
370 'refresh_logout_button' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_logout_button'),
371 'please_wait' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.please_wait'),
372 'loadingIndicator' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:loadingIndicator'),
373 'be_locked' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.be_locked'),
374 'refresh_login_countdown_singular' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_countdown_singular'),
375 'refresh_login_countdown' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_countdown'),
376 'login_about_to_expire' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.login_about_to_expire'),
377 'login_about_to_expire_title' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.login_about_to_expire_title'),
378 'refresh_login_refresh_button' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_login_refresh_button'),
379 'refresh_direct_logout_button' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:mess.refresh_direct_logout_button'),
380 'tabs_closeAll' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:tabs.closeAll'),
381 'tabs_closeOther' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:tabs.closeOther'),
382 'tabs_close' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:tabs.close'),
383 'tabs_openInBrowserWindow' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:tabs.openInBrowserWindow'),
384 'csh_tooltip_loading' =>
$GLOBALS[
'LANG']->sL(
'LLL:EXT:lang/locallang_core.xlf:csh_tooltip_loading')
387 'fileUpload' => array(
391 'infoComponentMaxFileSize',
392 'infoComponentFileUploadLimit',
393 'infoComponentFileTypeLimit',
394 'infoComponentOverrideFiles',
400 'errorQueueLimitExceeded',
401 'errorQueueFileSizeLimit',
402 'errorQueueZeroByteFile',
403 'errorQueueInvalidFiletype',
405 'errorUploadMissingUrl',
407 'errorUploadSecurityError',
410 'errorUploadFileIDNotFound',
411 'errorUploadFileValidation',
412 'errorUploadFileCancelled',
413 'errorUploadStopped',
414 'allErrorMessageTitle',
415 'allErrorMessageText',
419 'liveSearch' => array(
427 'helpDescriptionPages',
428 'helpDescriptionContent' 431 'tooltipModuleMenuSplit',
432 'tooltipNavigationContainerSplitDrag',
433 'tooltipDebugPanelSplitDrag' 436 $generatedLabels = array();
437 $generatedLabels[
'core'] = $coreLabels;
439 foreach ($labels as $categoryName => $categoryLabels) {
441 foreach ($categoryLabels as $label) {
443 $generatedLabels[$categoryName][$label] =
$GLOBALS[
'LANG']->getLL($categoryName .
'_' . $label);
446 return 'TYPO3.LLL = ' . json_encode($generatedLabels) .
';';
457 $newPageModule = trim(
$GLOBALS[
'BE_USER']->getTSConfigVal(
'options.overridePageModule'));
459 if (!
$GLOBALS[
'BE_USER']->check(
'modules', $pageModule)) {
462 $menuFrameName =
'menu';
463 if (
$GLOBALS[
'BE_USER']->uc[
'noMenuMode'] ===
'icons') {
464 $menuFrameName =
'topmenuFrame';
467 if (
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'loginSecurityLevel']) {
468 $this->loginSecurityLevel =
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'loginSecurityLevel'];
470 $this->loginSecurityLevel =
'superchallenged';
472 $t3Configuration = array(
474 'PATH_typo3' => $pathTYPO3,
475 'PATH_typo3_enc' => rawurlencode($pathTYPO3),
476 'username' => htmlspecialchars(
$GLOBALS[
'BE_USER']->user[
'username']),
478 'securityLevel' => $this->loginSecurityLevel,
479 'TYPO3_mainDir' => TYPO3_mainDir,
480 'pageModule' => $pageModule,
481 'inWorkspace' =>
$GLOBALS[
'BE_USER']->workspace !== 0 ? 1 : 0,
482 'workspaceFrontendPreviewEnabled' =>
$GLOBALS[
'BE_USER']->user[
'workspace_preview'] ? 1 : 0,
483 'veriCode' =>
$GLOBALS[
'BE_USER']->veriCode(),
484 'denyFileTypes' => PHP_EXTENSIONS_DEFAULT,
485 'moduleMenuWidth' => $this->menuWidth - 1,
486 'topBarHeight' => isset(
$GLOBALS[
'TBE_STYLES'][
'dims'][
'topFrameH']) ? (
int)
$GLOBALS[
'TBE_STYLES'][
'dims'][
'topFrameH'] : 30,
487 'showRefreshLoginPopup' => isset($GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'showRefreshLoginPopup']) ? (
int)$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'showRefreshLoginPopup'] : FALSE,
489 'debugInWindow' => $GLOBALS[
'BE_USER']->uc[
'debugInWindow'] ? 1 : 0,
490 'ContextHelpWindows' => array(
496 TYPO3.configuration = ' . json_encode($t3Configuration) .
'; 501 function typoSetup() { // 502 this.PATH_typo3 = TYPO3.configuration.PATH_typo3; 503 this.PATH_typo3_enc = TYPO3.configuration.PATH_typo3_enc; 504 this.username = TYPO3.configuration.username; 505 this.uniqueID = TYPO3.configuration.uniqueID; 506 this.navFrameWidth = 0; 507 this.securityLevel = TYPO3.configuration.securityLevel; 508 this.veriCode = TYPO3.configuration.veriCode; 509 this.denyFileTypes = TYPO3.configuration.denyFileTypes; 511 var TS = new typoSetup(); 512 //backwards compatibility 521 function fsModules() { // 522 this.recentIds=new Array(); // used by frameset modules to track the most recent used id for list frame. 523 this.navFrameHighlightedID=new Array(); // used by navigation frames to track which row id was highlighted last time 524 this.currentMainLoaded=""; 525 this.currentBank="0"; 527 var fsMod = new fsModules(); 529 top.goToModule = function(modName, cMR_flag, addGetVars) { 530 TYPO3.ModuleMenu.App.showModule(modName, addGetVars); 548 $where =
' AND (' .
$GLOBALS[
'BE_USER']->getPagePermsClause(2) .
' OR ' .
$GLOBALS[
'BE_USER']->getPagePermsClause(16) .
')';
553 if (is_array($records)) {
554 $editRecord = reset($records);
559 if (is_array($editRecord) &&
$GLOBALS[
'BE_USER']->isInWebMount($editRecord[
'uid'])) {
562 // Load page to edit: 563 window.setTimeout("top.loadEditId(' . (int)$editRecord[
'uid'] .
');", 500); 566 if (!
$GLOBALS[
'BE_USER']->getTSConfigVal(
'options.bookmark_onEditId_dontSetPageTree')) {
567 $bookmarkKeepExpanded =
$GLOBALS[
'BE_USER']->getTSConfigVal(
'options.bookmark_onEditId_keepExistingExpanded');
573 // Warning about page editing: 589 if (isset(
$GLOBALS[
'BE_USER']->uc[
'startModuleOnFirstLogin'])) {
590 $startModule =
$GLOBALS[
'BE_USER']->uc[
'startModuleOnFirstLogin'];
591 unset(
$GLOBALS[
'BE_USER']->uc[
'startModuleOnFirstLogin']);
593 } elseif (
$GLOBALS[
'BE_USER']->uc[
'startModule']) {
594 $startModule =
$GLOBALS[
'BE_USER']->uc[
'startModule'];
595 } elseif (
$GLOBALS[
'BE_USER']->uc[
'startInTaskCenter']) {
596 $startModule =
'user_task';
601 if (strpos($startModule,
'->') !== FALSE) {
602 list($startModule, $startModuleParameters) = explode(
'->', $startModule, 2);
608 if (!$moduleParameters && $startModuleParameters) {
609 $moduleParameters = $startModuleParameters;
615 top.startInModule = [\'' . $startModule .
'\',
' . GeneralUtility::quoteJSvalue($moduleParameters) . '];
629 public function addJavascript($javascript) { 630 // TODO do we need more checks? 631 if (!is_string($javascript)) { 632 throw new \InvalidArgumentException('parameter $javascript must be of type
string', 1195129553); 634 $this->js .= $javascript; 643 public function addJavascriptFile($javascriptFile) { 644 $jsFileAdded = FALSE; 645 //TODO add more checks if necessary 646 if (file_exists(GeneralUtility::resolveBackPath(PATH_typo3 . $javascriptFile))) { 647 $this->jsFiles[] = $javascriptFile; 659 public function addCss($css) { 660 if (!is_string($css)) { 661 throw new \InvalidArgumentException('parameter
$css must be of type
string', 1195129642); 673 public function addCssFile($cssFileName, $cssFile) { 674 $cssFileAdded = FALSE; 675 if (empty($this->cssFiles[$cssFileName])) { 676 $this->cssFiles[$cssFileName] = $cssFile; 677 $cssFileAdded = TRUE; 679 return $cssFileAdded; 690 public function addToolbarItem($toolbarItemName, $toolbarItemClassName) { 691 $toolbarItem = GeneralUtility::makeInstance($toolbarItemClassName, $this); 692 if (!$toolbarItem instanceof \TYPO3\CMS\Backend\Toolbar\ToolbarItemHookInterface) { 693 throw new \UnexpectedValueException('$toolbarItem
"' . $toolbarItemName . '" must implement
interface TYPO3\\CMS\\Backend\\Toolbar\\ToolbarItemHookInterface', 1195125501);
695 if ($toolbarItem->checkAccess()) {
696 $this->toolbarItems[$toolbarItemName] = $toolbarItem;
714 protected function executeHook($identifier, array $hookConfiguration = array()) {
715 $options = &
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'typo3/backend.php'];
716 if (isset($options[$identifier]) && is_array($options[$identifier])) {
717 foreach ($options[$identifier] as $hookFunction) {
executeHook($identifier, array $hookConfiguration=array())
static getRecordWSOL($table, $uid, $fields=' *', $where='', $useDeleteClause=TRUE, $unsetMovePointers=FALSE)
static getRecordsByField($theTable, $theField, $theValue, $whereClause='', $groupBy='', $orderBy='', $limit='', $useDeleteClause=TRUE)
static extPath($key, $script='')
static quoteJSvalue($value)
static openPageTree($pid, $clearExpansion)
static workspaceOL($table, &$row, $wsid=-99, $unsetMovePointers=FALSE)
static writeFileToTypo3tempDir($filepath, $content)
static canBeInterpretedAsInteger($var)
static getIndpEnv($getEnvName)
loadResourcesForRegisteredNavigationComponents()
static makeInstance($className)
static shortMD5($input, $len=10)
static trimExplode($delim, $string, $removeEmptyValues=FALSE, $limit=0)
static callUserFunction($funcName, &$params, &$ref, $checkPrefix='', $errorMode=0)
static getModuleUrl($moduleName, $urlParameters=array(), $backPathOverride=FALSE, $returnAbsoluteUrl=FALSE)
static getUrl($url, $includeHeader=0, $requestHeaders=FALSE, &$report=NULL)
static isLoaded($key, $exitOnError=FALSE)
static getSpriteIcon($iconName, array $options=array(), array $overlays=array())
static isModuleSetInTBE_MODULES($modName)
debug($variable='', $name=' *variable *', $line=' *line *', $file=' *file *', $recursiveDepth=3, $debugLevel=E_DEBUG)
static getFilesInDir($path, $extensionList='', $prependPath=FALSE, $order='', $excludePattern='')
initializeCoreToolbarItems()
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]