protected function initialize()
 {
     if (!is_object($this->typoScriptFrontendController->cObj)) {
         $this->typoScriptFrontendController->initTemplate();
         $this->typoScriptFrontendController->getConfigArray();
         $this->typoScriptFrontendController->settingLanguage();
         $this->typoScriptFrontendController->newCObj();
     }
 }
예제 #2
0
파일: Bootstrap.php 프로젝트: tritumRz/rest
 /**
  * Initialize the TSFE.
  *
  * @param    integer $pageUid The page UID
  * @param    boolean $overrule
  * @return    void
  */
 public function initTSFE($pageUid = -1, $overrule = FALSE)
 {
     $rootLine = NULL;
     $typo3confVariables = $GLOBALS['TYPO3_CONF_VARS'];
     if ($pageUid == -1 && GeneralUtility::_GP('pid') !== NULL) {
         $pageUid = intval(GeneralUtility::_GP('pid'));
     }
     if ($pageUid === -1) {
         $pageUid = 0;
     }
     // begin
     if (!is_object($GLOBALS['TT']) || $overrule === TRUE) {
         $GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\TimeTracker();
         $GLOBALS['TT']->start();
     }
     if ((!is_object($GLOBALS['TSFE']) || $GLOBALS['TSFE'] instanceof \stdClass || $overrule === TRUE) && is_int($pageUid)) {
         // builds TSFE object
         $GLOBALS['TSFE'] = $typoScriptFrontendController = new \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController($typo3confVariables, $pageUid, 0, 0, '', '', '', '');
         $typoScriptFrontendController->initTemplate();
         // builds a cObj
         if (is_array($typoScriptFrontendController->page) === FALSE) {
             $typoScriptFrontendController->page = array();
         }
         $typoScriptFrontendController->newCObj();
         // Add the FE user
         $typoScriptFrontendController->fe_user = EidUtility::initFeUser();
         $typoScriptFrontendController->determineId();
         $typoScriptFrontendController->getConfigArray();
         $this->setRequestedLanguage($typoScriptFrontendController);
         $typoScriptFrontendController->settingLanguage();
         $typoScriptFrontendController->settingLocale();
     }
 }
 /**
  * Create a fake frontend
  *
  * @param integer $pageUid
  * @return \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
  * @throws InvalidArgumentException
  */
 public function createFakeFrontEnd($pageUid = 0)
 {
     if ($this->fakeFrontend && $this->fakeFrontend === $GLOBALS['TSFE']) {
         return $this->fakeFrontend;
     }
     if ($pageUid < 0) {
         throw new InvalidArgumentException('$pageUid must be >= 0.');
     }
     $GLOBALS['TT'] = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\TimeTracker\\NullTimeTracker');
     /** @var $this->fakeFrontend \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController */
     $this->fakeFrontend = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController', $GLOBALS['TYPO3_CONF_VARS'], $pageUid, 0);
     // simulates a normal FE without any logged-in FE or BE user
     $this->fakeFrontend->beUserLogin = false;
     $this->fakeFrontend->workspacePreview = '';
     $this->fakeFrontend->initFEuser();
     $this->fakeFrontend->sys_page = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Page\\PageRepository');
     $this->fakeFrontend->page = $pageUid;
     $this->fakeFrontend->initTemplate();
     $this->fakeFrontend->config = array();
     $this->fakeFrontend->tmpl->getFileName_backPath = PATH_site;
     $this->fakeFrontend->newCObj();
     $GLOBALS['TSFE'] = $this->fakeFrontend;
     return $this->fakeFrontend;
 }
 /**
  * Substitutes all occurrences of <a href="#"... in $this->content with <a href="[path-to-url]#"...
  *
  * @return void Works directly on $this->content
  */
 protected function prefixLocalAnchorsWithScript()
 {
     if (!$this->pObj->beUserLogin) {
         if (!is_object($this->pObj->cObj)) {
             $this->pObj->newCObj();
         }
         $scriptPath = $this->pObj->cObj->getUrlToCurrentLocation();
     } else {
         // To break less existing sites, we allow the REQUEST_URI to be used for the prefix
         $scriptPath = GeneralUtility::getIndpEnv('REQUEST_URI');
         // Disable the cache so that these URI will not be the ones to be cached
         $this->pObj->no_cache = true;
     }
     $originalContent = $this->pObj->content;
     $this->pObj->content = preg_replace('/(<(?:a|area).*?href=")(#[^"]*")/i', '${1}' . htmlspecialchars($scriptPath) . '${2}', $originalContent);
     // There was an error in the call to preg_replace, so keep the original content (behavior prior to PHP 5.2)
     if (preg_last_error() > 0) {
         GeneralUtility::sysLog('preg_replace returned error-code: ' . preg_last_error() . ' in function prefixLocalAnchorsWithScript. Replacement not done!', 'cms', GeneralUtility::SYSLOG_SEVERITY_FATAL);
         $this->pObj->content = $originalContent;
     }
 }
예제 #5
0
 /**
  * Handles a frontend request
  *
  * @param \Psr\Http\Message\ServerRequestInterface $request
  * @return NULL|\Psr\Http\Message\ResponseInterface
  */
 public function handleRequest(\Psr\Http\Message\ServerRequestInterface $request)
 {
     $response = null;
     $this->request = $request;
     $this->initializeTimeTracker();
     // Hook to preprocess the current request:
     if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/index_ts.php']['preprocessRequest'])) {
         foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/index_ts.php']['preprocessRequest'] as $hookFunction) {
             $hookParameters = array();
             GeneralUtility::callUserFunction($hookFunction, $hookParameters, $hookParameters);
         }
         unset($hookFunction);
         unset($hookParameters);
     }
     $this->initializeController();
     if ($GLOBALS['TYPO3_CONF_VARS']['FE']['pageUnavailable_force'] && !GeneralUtility::cmpIP(GeneralUtility::getIndpEnv('REMOTE_ADDR'), $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'])) {
         $this->controller->pageUnavailableAndExit('This page is temporarily unavailable.');
     }
     $this->controller->connectToDB();
     $this->controller->sendRedirect();
     // Output compression
     // Remove any output produced until now
     $this->bootstrap->endOutputBufferingAndCleanPreviousOutput();
     $this->initializeOutputCompression();
     // Initializing the Frontend User
     $this->timeTracker->push('Front End user initialized', '');
     $this->controller->initFEuser();
     $this->timeTracker->pull();
     // Initializing a possible logged-in Backend User
     /** @var $GLOBALS['BE_USER'] \TYPO3\CMS\Backend\FrontendBackendUserAuthentication */
     $GLOBALS['BE_USER'] = $this->controller->initializeBackendUser();
     // Process the ID, type and other parameters.
     // After this point we have an array, $page in TSFE, which is the page-record
     // of the current page, $id.
     $this->timeTracker->push('Process ID', '');
     // Initialize admin panel since simulation settings are required here:
     if ($this->controller->isBackendUserLoggedIn()) {
         $GLOBALS['BE_USER']->initializeAdminPanel();
         $this->bootstrap->initializeBackendRouter()->loadExtensionTables();
     } else {
         $this->bootstrap->loadCachedTca();
     }
     $this->controller->checkAlternativeIdMethods();
     $this->controller->clear_preview();
     $this->controller->determineId();
     // Now, if there is a backend user logged in and he has NO access to this page,
     // then re-evaluate the id shown! _GP('ADMCMD_noBeUser') is placed here because
     // \TYPO3\CMS\Version\Hook\PreviewHook might need to know if a backend user is logged in.
     if ($this->controller->isBackendUserLoggedIn() && (!$GLOBALS['BE_USER']->extPageReadAccess($this->controller->page) || GeneralUtility::_GP('ADMCMD_noBeUser'))) {
         // Remove user
         unset($GLOBALS['BE_USER']);
         $this->controller->beUserLogin = false;
         // Re-evaluate the page-id.
         $this->controller->checkAlternativeIdMethods();
         $this->controller->clear_preview();
         $this->controller->determineId();
     }
     $this->controller->makeCacheHash();
     $this->timeTracker->pull();
     // Admin Panel & Frontend editing
     if ($this->controller->isBackendUserLoggedIn()) {
         $GLOBALS['BE_USER']->initializeFrontendEdit();
         if ($GLOBALS['BE_USER']->adminPanel instanceof AdminPanelView) {
             $this->bootstrap->initializeLanguageObject();
         }
         if ($GLOBALS['BE_USER']->frontendEdit instanceof FrontendEditingController) {
             $GLOBALS['BE_USER']->frontendEdit->initConfigOptions();
         }
     }
     // Starts the template
     $this->timeTracker->push('Start Template', '');
     $this->controller->initTemplate();
     $this->timeTracker->pull();
     // Get from cache
     $this->timeTracker->push('Get Page from cache', '');
     $this->controller->getFromCache();
     $this->timeTracker->pull();
     // Get config if not already gotten
     // After this, we should have a valid config-array ready
     $this->controller->getConfigArray();
     // Setting language and locale
     $this->timeTracker->push('Setting language and locale', '');
     $this->controller->settingLanguage();
     $this->controller->settingLocale();
     $this->timeTracker->pull();
     // Convert POST data to utf-8 for internal processing if metaCharset is different
     $this->controller->convPOSTCharset();
     $this->controller->initializeRedirectUrlHandlers();
     $this->controller->handleDataSubmission();
     // Check for shortcut page and redirect
     $this->controller->checkPageForShortcutRedirect();
     $this->controller->checkPageForMountpointRedirect();
     // Generate page
     $this->controller->setUrlIdToken();
     $this->timeTracker->push('Page generation', '');
     if ($this->controller->isGeneratePage()) {
         $this->controller->generatePage_preProcessing();
         $temp_theScript = $this->controller->generatePage_whichScript();
         if ($temp_theScript) {
             include $temp_theScript;
         } else {
             PageGenerator::pagegenInit();
             // Global content object
             $this->controller->newCObj();
             // Content generation
             if (!$this->controller->isINTincScript()) {
                 PageGenerator::renderContent();
                 $this->controller->setAbsRefPrefix();
             }
         }
         $this->controller->generatePage_postProcessing();
     } elseif ($this->controller->isINTincScript()) {
         PageGenerator::pagegenInit();
         // Global content object
         $this->controller->newCObj();
     }
     $this->controller->releaseLocks();
     $this->timeTracker->pull();
     // Render non-cached parts
     if ($this->controller->isINTincScript()) {
         $this->timeTracker->push('Non-cached objects', '');
         $this->controller->INTincScript();
         $this->timeTracker->pull();
     }
     // Output content
     $sendTSFEContent = false;
     if ($this->controller->isOutputting()) {
         $this->timeTracker->push('Print Content', '');
         $this->controller->processOutput();
         $sendTSFEContent = true;
         $this->timeTracker->pull();
     }
     // Store session data for fe_users
     $this->controller->storeSessionData();
     // Statistics
     $GLOBALS['TYPO3_MISC']['microtime_end'] = microtime(true);
     $this->controller->setParseTime();
     if (isset($this->controller->config['config']['debug'])) {
         $debugParseTime = (bool) $this->controller->config['config']['debug'];
     } else {
         $debugParseTime = !empty($this->controller->TYPO3_CONF_VARS['FE']['debug']);
     }
     if ($this->controller->isOutputting() && $debugParseTime) {
         $this->controller->content .= LF . '<!-- Parsetime: ' . $this->controller->scriptParseTime . 'ms -->';
     }
     $this->controller->redirectToExternalUrl();
     // Preview info
     $this->controller->previewInfo();
     // Hook for end-of-frontend
     $this->controller->hook_eofe();
     // Finish timetracking
     $this->timeTracker->pull();
     // Check memory usage
     MonitorUtility::peakMemoryUsage();
     // beLoginLinkIPList
     echo $this->controller->beLoginLinkIPList();
     // Admin panel
     if ($this->controller->isBackendUserLoggedIn() && $GLOBALS['BE_USER'] instanceof FrontendBackendUserAuthentication) {
         if ($GLOBALS['BE_USER']->extAdmEnabled) {
             // Style sheet is also used for frontend editing.
             $this->controller->content = str_ireplace('</head>', $GLOBALS['BE_USER']->adminPanel->getAdminPanelHeaderData() . '</head>', $this->controller->content);
         }
         if ($GLOBALS['BE_USER']->isAdminPanelVisible()) {
             $this->controller->content = str_ireplace('</body>', $GLOBALS['BE_USER']->displayAdminPanel() . '</body>', $this->controller->content);
         }
     }
     if ($sendTSFEContent) {
         /** @var \TYPO3\CMS\Core\Http\Response $response */
         $response = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Http\Response::class);
         $response->getBody()->write($this->controller->content);
     }
     // Debugging Output
     if (isset($GLOBALS['error']) && is_object($GLOBALS['error']) && @is_callable(array($GLOBALS['error'], 'debugOutput'))) {
         $GLOBALS['error']->debugOutput();
     }
     if (TYPO3_DLOG) {
         GeneralUtility::devLog('END of FRONTEND session', 'cms', 0, array('_FLUSH' => true));
     }
     return $response;
 }