Index: t3lib/class.t3lib_extmgm.php =================================================================== --- t3lib/class.t3lib_extmgm.php (Revision 8748) +++ t3lib/class.t3lib_extmgm.php (Arbeitskopie) @@ -1243,20 +1243,10 @@ public static function typo3_loadExtensions() { global $TYPO3_CONF_VARS; - // Select mode how to load extensions in order to speed up the FE - if (TYPO3_MODE == 'FE') { - if (!($extLoadInContext = $TYPO3_CONF_VARS['EXT']['extList_FE'])) { - // fall back to standard 'extList' if 'extList_FE' is not (yet) set - $extLoadInContext = $TYPO3_CONF_VARS['EXT']['extList']; - } - $cacheFileSuffix = '_FE'; - } else { - $extLoadInContext = $TYPO3_CONF_VARS['EXT']['extList']; - // Works as before - $cacheFileSuffix = ''; - } + // Caching behaviour of ext_tables.php and ext_localconf.php files: + $extensionCacheBehaviour = self::getExtensionCacheBehaviour(); // Full list of extensions includes both required and extList: - $rawExtList = $TYPO3_CONF_VARS['EXT']['requiredExt'] . ',' . $extLoadInContext; + $rawExtList = self::getEnabledExtensionList(); // Empty array as a start. $extensions = array(); @@ -1264,13 +1254,10 @@ // if ($rawExtList) { // The cached File prefix. - $cacheFilePrefix = 'temp_CACHED' . $cacheFileSuffix; - // Setting the name for the cache files: - if (intval($TYPO3_CONF_VARS['EXT']['extCache'])==1) $cacheFilePrefix.= '_ps'.substr(t3lib_div::shortMD5(PATH_site.'|'.$GLOBALS['TYPO_VERSION']), 0, 4); - if (intval($TYPO3_CONF_VARS['EXT']['extCache'])==2) $cacheFilePrefix.= '_'.t3lib_div::shortMD5($rawExtList); + $cacheFilePrefix = self::getCacheFilePrefix(); // If cache files available, set cache file prefix and return: - if ($TYPO3_CONF_VARS['EXT']['extCache'] && t3lib_extMgm::isCacheFilesAvailable($cacheFilePrefix)) { + if ($extensionCacheBehaviour && t3lib_extMgm::isCacheFilesAvailable($cacheFilePrefix)) { // Return cache file prefix: $extensions['_CACHEFILE'] = $cacheFilePrefix; } else { // ... but if not, configure... @@ -1303,7 +1290,7 @@ unset($extensions['_CACHEFILE']); // write cache? - if ($TYPO3_CONF_VARS['EXT']['extCache'] && + if ($extensionCacheBehaviour && @is_dir(PATH_typo3.'sysext/') && @is_dir(PATH_typo3.'ext/')) { // Must also find global and system extension directories to exist, otherwise caching cannot be allowed (since it is most likely a temporary server problem). This might fix a rare, unrepeatable bug where global/system extensions are not loaded resulting in fatal errors if that is cached! $wrError = t3lib_extMgm::cannotCacheFilesWritable($cacheFilePrefix); @@ -1396,11 +1383,16 @@ * Evaluation relies on $TYPO3_LOADED_EXT['_CACHEFILE'] * Usage: 2 * + * @param string $cacheFilePrefix Cache file prefix to be used (optional) * @return array * @internal */ - public static function currentCacheFiles() { - if (($cacheFilePrefix = $GLOBALS['TYPO3_LOADED_EXT']['_CACHEFILE'])) { + public static function currentCacheFiles($cacheFilePrefix = NULL) { + if (is_null($cacheFilePrefix)) { + $cacheFilePrefix = $GLOBALS['TYPO3_LOADED_EXT']['_CACHEFILE']; + } + + if ($cacheFilePrefix) { $cacheFilePrefixFE = str_replace('temp_CACHED','temp_CACHED_FE',$cacheFilePrefix); $files = array(); if (t3lib_extMgm::isCacheFilesAvailable($cacheFilePrefix)) { @@ -1466,10 +1458,12 @@ /** * Unlink (delete) cache files * + * @param string $cacheFilePrefix Cache file prefix to be used (optional) * @return integer Number of deleted files. */ - public static function removeCacheFiles() { - $cacheFiles = t3lib_extMgm::currentCacheFiles(); + public static function removeCacheFiles($cacheFilePrefix = NULL) { + $cacheFiles = self::currentCacheFiles($cacheFilePrefix); + $out = 0; if (is_array($cacheFiles)) { reset($cacheFiles); @@ -1481,6 +1475,65 @@ } return $out; } + + /** + * Gets the behaviour for caching ext_tables.php and ext_localconf.php files + * (see $TYPO3_CONF_VARS['EXT']['extCache'] setting in the install tool). + * + * @param boolean $usePlainValue Whether to use the value as it is without modifications + * @return integer + */ + public static function getExtensionCacheBehaviour($usePlainValue = FALSE) { + $extensionCacheBehaviour = intval($GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache']); + + // Caching of extensions is disabled when install tool is used: + if (!$usePlainValue && defined('TYPO3_enterInstallScript') && TYPO3_enterInstallScript) { + $extensionCacheBehaviour = 0; + } + + return $extensionCacheBehaviour; + } + + /** + * Gets the prefix used for the ext_tables.php and ext_localconf.php cached files. + * + * @return string + */ + public static function getCacheFilePrefix() { + $extensionCacheBehaviour = self::getExtensionCacheBehaviour(TRUE); + + $cacheFileSuffix = (TYPO3_MODE == 'FE' ? '_FE' : ''); + $cacheFilePrefix = 'temp_CACHED' . $cacheFileSuffix; + + if ($extensionCacheBehaviour == 1) { + $cacheFilePrefix.= '_ps' . substr(t3lib_div::shortMD5(PATH_site . '|' . $GLOBALS['TYPO_VERSION']), 0, 4); + } elseif ($extensionCacheBehaviour == 2) { + $cacheFilePrefix.= '_' . t3lib_div::shortMD5(self::getEnabledExtensionList()); + } + + return $cacheFilePrefix; + } + + /** + * Gets the list of enabled extensions for the accordant context (frontend or backend). + * + * @return string + */ + public static function getEnabledExtensionList() { + // Select mode how to load extensions in order to speed up the FE + if (TYPO3_MODE == 'FE') { + if (!($extLoadInContext = $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList_FE'])) { + // fall back to standard 'extList' if 'extList_FE' is not (yet) set + $extLoadInContext = $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList']; + } + } else { + $extLoadInContext = $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList']; + } + + $extensionList = $GLOBALS['TYPO3_CONF_VARS']['EXT']['requiredExt'] . ',' . $extLoadInContext; + + return $extensionList; + } } ?> \ No newline at end of file Index: typo3/sysext/install/mod/class.tx_install.php =================================================================== --- typo3/sysext/install/mod/class.tx_install.php (Revision 8748) +++ typo3/sysext/install/mod/class.tx_install.php (Arbeitskopie) @@ -4021,18 +4021,9 @@ * @return void */ function updateWizard() { - global $TYPO3_CONF_VARS; - // clear cache files - t3lib_extMgm::removeCacheFiles(); + t3lib_extMgm::removeCacheFiles(t3lib_extMgm::getCacheFilePrefix()); - // generate new cache files and include them - $GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache'] = 1; - $TYPO3_LOADED_EXT = t3lib_extMgm::typo3_loadExtensions(); - if ($TYPO3_LOADED_EXT['_CACHEFILE']) { - require(PATH_typo3conf.$TYPO3_LOADED_EXT['_CACHEFILE'].'_ext_localconf.php'); - } - // call wizard $action = ($this->INSTALL['database_type']?$this->INSTALL['database_type']:'checkForUpdate'); $this->updateWizard_parts($action);