[TASK] Disable compression for inlineJs in Backend
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_extmgm.php
index dbbb7ae..502e7fc 100644 (file)
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
-/**
- * Contains a class with Extension Management functions
- *
- * Revised for TYPO3 3.6 July/2003 by Kasper Skårhøj
- *
- * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-/**
- * [CLASS/FUNCTION INDEX of SCRIPT]
- *
- *
- *
- *  114: class t3lib_extMgm
- *
- *                       SECTION: PATHS and other evaluation
- *  131:        function isLoaded($key,$exitOnError = 0)
- *  147:        function extPath($key,$script='')
- *  165:        function extRelPath($key)
- *  182:        function siteRelPath($key)
- *  194:        function getCN($key)
- *
- *                       SECTION: Adding BACKEND features
- *  227:        function addTCAcolumns($table,$columnArray,$addTofeInterface=0)
- *  251:        function addToAllTCAtypes($table,$str,$specificTypesList='',$position='')
- *  309:        function allowTableOnStandardPages($table)
- *  326:        function addModule($main,$sub='',$position='',$path='')
- *  389:        function insertModuleFunction($modname,$className,$classPath,$title,$MM_key='function',$WS='')
- *  408:        function addPageTSConfig($content)
- *  422:        function addUserTSConfig($content)
- *  437:        function addLLrefForTCAdescr($tca_descr_key,$file_ref)
- *
- *                       SECTION: Adding SERVICES features
- *  479:        function addService($extKey, $serviceType, $serviceKey, $info)
- *  547:        function findService($serviceType, $serviceSubType='', $excludeServiceKeys=array())
- *  618:        function deactivateService($serviceType, $serviceKey)
- *
- *                       SECTION: Adding FRONTEND features
- *  657:        function addPlugin($itemArray,$type='list_type')
- *  682:        function addPiFlexFormValue($piKeyToMatch,$value)
- *  702:        function addToInsertRecords($table,$content_table='tt_content',$content_field='records')
- *  733:        function addPItoST43($key,$classFile='',$prefix='',$type='list_type',$cached=0)
- *  808:        function addStaticFile($extKey,$path,$title)
- *  827:        function addTypoScriptSetup($content)
- *  841:        function addTypoScriptConstants($content)
- *  858:        function addTypoScript($key,$type,$content,$afterStaticUid=0)
- *
- *                       SECTION: INTERNAL EXTENSION MANAGEMENT:
- *  921:        function typo3_loadExtensions()
- *  998:        function _makeIncludeHeader($key,$file)
- * 1019:        function isCacheFilesAvailable($cacheFilePrefix)
- * 1032:        function isLocalconfWritable()
- * 1045:        function cannotCacheFilesWritable($cacheFilePrefix)
- * 1069:        function currentCacheFiles()
- * 1092:        function writeCacheFiles($extensions,$cacheFilePrefix)
- * 1130:        function removeCacheFiles()
- *
- * TOTAL FUNCTIONS: 32
- * (This index is automatically created/updated by the extension "extdeveval")
- *
- */
-
 
 /**
  * Extension Management functions
  * This class is never instantiated, rather the methods inside is called as functions like
  *              t3lib_extMgm::isLoaded('my_extension');
  *
- * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
+ * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  * @package TYPO3
  * @subpackage t3lib
  */
 final class t3lib_extMgm {
+
        protected static $extensionKeyMap;
 
 
@@ -107,70 +47,92 @@ final class t3lib_extMgm {
         ***************************************/
 
        /**
-        * Returns true if the extension with extension key $key is loaded.
-        * Usage: 109
+        * Returns TRUE if the extension with extension key $key is loaded.
         *
         * @param       string          Extension key to test
-        * @param       boolean         If $exitOnError is true and the extension is not loaded the function will die with an error message
+        * @param       boolean         If $exitOnError is TRUE and the extension is not loaded the function will die with an error message
         * @return      boolean
         */
        public static function isLoaded($key, $exitOnError = 0) {
-               global $TYPO3_LOADED_EXT;
-               if ($exitOnError && !isset($TYPO3_LOADED_EXT[$key])) {
+               if ($exitOnError && !isset($GLOBALS['TYPO3_LOADED_EXT'][$key])) {
                        throw new BadFunctionCallException(
                                'TYPO3 Fatal Error: Extension "' . $key . '" was not loaded!',
                                1270853910
                        );
                }
-               return isset($TYPO3_LOADED_EXT[$key]);
+               return isset($GLOBALS['TYPO3_LOADED_EXT'][$key]);
        }
 
        /**
         * Returns the absolute path to the extension with extension key $key
         * If the extension is not loaded the function will die with an error message
         * Useful for internal fileoperations
-        * Usage: 136
         *
-        * @param       string          Extension key
-        * @param       string          $script is appended to the output if set.
-        * @return      string
+        * @param $key string Extension key
+        * @param $script string $script is appended to the output if set.
+        * @throws BadFunctionCallException
+        * @return string
         */
        public static function extPath($key, $script = '') {
-               global $TYPO3_LOADED_EXT;
-               if (!isset($TYPO3_LOADED_EXT[$key])) {
-                       throw new BadFunctionCallException(
-                               'TYPO3 Fatal Error: Extension key "' . $key . '" was NOT loaded!',
-                               1270853878
-                       );
+               if (isset($GLOBALS['TYPO3_LOADED_EXT'])) {
+                       if (!isset($GLOBALS['TYPO3_LOADED_EXT'][$key])) {
+                               throw new BadFunctionCallException(
+                                       'TYPO3 Fatal Error: Extension key "' . $key . '" was NOT loaded!',
+                                       1270853878
+                               );
+                       }
+
+                       $extensionPath = PATH_site . $GLOBALS['TYPO3_LOADED_EXT'][$key]['siteRelPath'];
+               } else {
+                       $extensionList = self::getRequiredExtensionList() . ',' . $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList'];
+                       $loadedExtensions = array_flip(array_unique(t3lib_div::trimExplode(',', $extensionList, TRUE)));
+
+                       if (!isset($loadedExtensions[$key])) {
+                               throw new BadFunctionCallException(
+                                       'TYPO3 Fatal Error: Extension key "' . $key . '" was NOT loaded!',
+                                       1294430950
+                               );
+                       }
+
+                       if (@is_dir(PATH_typo3conf . 'ext/' . $key . '/')) {
+                               $extensionPath = PATH_typo3conf . 'ext/' . $key . '/';
+                       } elseif (@is_dir(PATH_typo3 . 'ext/' . $key . '/')) {
+                               $extensionPath = PATH_typo3 . 'ext/' . $key . '/';
+                       } elseif (@is_dir(PATH_typo3 . 'sysext/' . $key . '/')) {
+                               $extensionPath = PATH_typo3 . 'sysext/' . $key . '/';
+                       } else {
+                               throw new BadFunctionCallException(
+                                       'TYPO3 Fatal Error: Extension "' . $key . '" was NOT found!',
+                                       1294430951
+                               );
+                       }
                }
-               return PATH_site . $TYPO3_LOADED_EXT[$key]['siteRelPath'] . $script;
+
+               return $extensionPath . $script;
        }
 
        /**
         * Returns the relative path to the extension as measured from from the TYPO3_mainDir
         * If the extension is not loaded the function will die with an error message
         * Useful for images and links from backend
-        * Usage: 54
         *
         * @param       string          Extension key
         * @return      string
         */
        public static function extRelPath($key) {
-               global $TYPO3_LOADED_EXT;
-               if (!isset($TYPO3_LOADED_EXT[$key])) {
+               if (!isset($GLOBALS['TYPO3_LOADED_EXT'][$key])) {
                        throw new BadFunctionCallException(
                                'TYPO3 Fatal Error: Extension key "' . $key . '" was NOT loaded!',
                                1270853879
                        );
                }
-               return $TYPO3_LOADED_EXT[$key]['typo3RelPath'];
+               return $GLOBALS['TYPO3_LOADED_EXT'][$key]['typo3RelPath'];
        }
 
        /**
         * Returns the relative path to the extension as measured from the PATH_site (frontend)
         * If the extension is not loaded the function will die with an error message
         * Useful for images and links from the frontend
-        * Usage: 6
         *
         * @param       string          Extension key
         * @return      string
@@ -181,7 +143,6 @@ final class t3lib_extMgm {
 
        /**
         * Returns the correct class name prefix for the extension key $key
-        * Usage: 3
         *
         * @param       string          Extension key
         * @return      string
@@ -195,7 +156,7 @@ final class t3lib_extMgm {
         * Returns the real extension key like 'tt_news' from an extension prefix like 'tx_ttnews'.
         *
         * @param       string          $prefix: The extension prefix (e.g. 'tx_ttnews')
-        * @return      mixed           Real extension key (string) or false (boolean) if something went wrong
+        * @return      mixed           Real extension key (string) or FALSE (boolean) if something went wrong
         */
        public static function getExtensionKeyByPrefix($prefix) {
                $result = FALSE;
@@ -239,12 +200,18 @@ final class t3lib_extMgm {
                if (!self::isLoaded($key)) {
                        return '';
                }
+               $runtimeCache = $GLOBALS['typo3CacheManager']->getCache('cache_runtime');
+               $cacheIdentifier = 'extMgmExtVersion-' . $key;
 
-               $EM_CONF = array();
-               $_EXTKEY = $key;
-               include(self::extPath($key) . 'ext_emconf.php');
+               if (!($extensionVersion = $runtimeCache->get($cacheIdentifier))) {
 
-               return $EM_CONF[$key]['version'];
+                       $EM_CONF = array();
+                       $_EXTKEY = $key;
+                       include(self::extPath($key) . 'ext_emconf.php');
+                       $extensionVersion = $EM_CONF[$key]['version'];
+                       $runtimeCache->set($cacheIdentifier, $extensionVersion);
+               }
+               return $extensionVersion;
        }
 
 
@@ -261,17 +228,16 @@ final class t3lib_extMgm {
         * This function adds the configuration needed for rendering of the field in TCEFORMS - but it does NOT add the field names to the types lists!
         * So to have the fields displayed you must also call fx. addToAllTCAtypes or manually add the fields to the types list.
         * FOR USE IN ext_tables.php FILES
-        * Usage: 4
         *
         * @param       string          $table is the table name of a table already present in $GLOBALS['TCA'] with a columns section
         * @param       array           $columnArray is the array with the additional columns (typical some fields an extension wants to add)
-        * @param       boolean         If $addTofeInterface is true the list of fields are also added to the fe_admin_fieldList.
+        * @param       boolean         If $addTofeInterface is TRUE the list of fields are also added to the fe_admin_fieldList.
         * @return      void
         */
        public static function addTCAcolumns($table, $columnArray, $addTofeInterface = 0) {
                t3lib_div::loadTCA($table);
                if (is_array($columnArray) && is_array($GLOBALS['TCA'][$table]) && is_array($GLOBALS['TCA'][$table]['columns'])) {
-                                // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
+                               // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
                        $GLOBALS['TCA'][$table]['columns'] = array_merge($GLOBALS['TCA'][$table]['columns'], $columnArray);
                        if ($addTofeInterface) {
                                $GLOBALS['TCA'][$table]['feInterface']['fe_admin_fieldList'] .= ',' . implode(',', array_keys($columnArray));
@@ -286,7 +252,6 @@ final class t3lib_extMgm {
         * This is needed to have new fields shown automatically in the TCEFORMS of a record from $table.
         * Typically this function is called after having added new columns (database fields) with the addTCAcolumns function
         * FOR USE IN ext_tables.php FILES
-        * Usage: 1
         *
         * @param       string          Table name
         * @param       string          Field list to add.
@@ -336,7 +301,7 @@ final class t3lib_extMgm {
                                        } else {
                                                if (strpos($typeDetails['showitem'], $str) !== FALSE) {
                                                        $fieldExists = TRUE;
-                                               } else if(is_array($GLOBALS['TCA'][$table]['palettes'])) {
+                                               } elseif (is_array($GLOBALS['TCA'][$table]['palettes'])) {
                                                        foreach ($GLOBALS['TCA'][$table]['palettes'] as $palette => $paletteDetails) {
                                                                if (preg_match('/\b' . $palette . '\b/', $typeDetails['showitem']) > 0
                                                                && strpos($paletteDetails['showitem'], $str) !== FALSE) {
@@ -354,6 +319,7 @@ final class t3lib_extMgm {
                                        }
                                }
                        }
+                       unset($typeDetails);
                }
        }
 
@@ -749,7 +715,7 @@ final class t3lib_extMgm {
         *
         * @see         explodeItemList
         * @param       array           $items: The array of fields/items with optional additional information
-        * @param       boolean         $useRawData: Use raw data instead of building by using the details (default: false)
+        * @param       boolean         $useRawData: Use raw data instead of building by using the details (default: FALSE)
         * @return      string          The list of fields/items which gets used for $GLOBALS['TCA'][<table>]['types'][<type>]['showitem']
         *                                               or $GLOBALS['TCA'][<table>]['palettes'][<palette>]['showitem'] in most cases
         */
@@ -776,7 +742,6 @@ final class t3lib_extMgm {
         * Add tablename to default list of allowed tables on pages (in $PAGES_TYPES)
         * Will add the $table to the list of tables allowed by default on pages as setup by $PAGES_TYPES['default']['allowedTables']
         * FOR USE IN ext_tables.php FILES
-        * Usage: 11
         *
         * @param       string          Table name
         * @return      void
@@ -788,7 +753,6 @@ final class t3lib_extMgm {
        /**
         * Adds a module (main or sub) to the backend interface
         * FOR USE IN ext_tables.php FILES
-        * Usage: 18
         *
         * @param       string          $main is the main module key, $sub is the submodule key. So $main would be an index in the $TBE_MODULES array and $sub could be an element in the lists there.
         * @param       string          $sub is the submodule key. If $sub is not set a blank $main module is created.
@@ -846,6 +810,62 @@ final class t3lib_extMgm {
                if ($path) {
                        $GLOBALS['TBE_MODULES']['_PATHS'][$main . ($sub ? '_' . $sub : '')] = $path;
                }
+                       //add module JS
+               self::addModuleContentCard('{xtype: "iframePanel"}', $main, $sub);
+       }
+
+       /**
+        * Sets the JS card of an ExtJS module for the card layout
+        * Replaces default JS
+        * Used by Card Layout
+        *
+        * @param       string          $jsCode is plain valid JavaScript, which is added directly, usefull for small modules only!
+        * @param       string          $mainModule is the main module key, $sub is the submodule key. So $main would be an index in the $TBE_MODULES array and $sub could be an element in the lists there.
+        * @param       string          $subModule is the submodule key. If $sub is not set a blank $main module is created.
+        * @return      void
+        */
+       public static function addModuleContentCard($jsCode, $mainModule, $subModule = '') {
+               $moduleName = $mainModule . ($subModule ? '_' . $subModule : '');
+               $GLOBALS['TBE_MODULES']['_JSINIT'][$moduleName] = '
+                       TYPO3.Viewport.ContentCards.addContentCard(
+                               "' . $moduleName . '",
+                               ' . $jsCode . '
+                       );
+               ';
+       }
+
+       /**
+        * Removes the JS card of an ExtJS module directly
+        * Used by Card Layout
+        *
+        * @param       string          $mainModule is the main module key, $sub is the submodule key. So $main would be an index in the $TBE_MODULES array and $sub could be an element in the lists there.
+        * @param       string          $subModule is the submodule key. If $sub is not set a blank $main module is created.
+        * @return void
+        */
+       public static function removeModuleContentCard($mainModule, $subModule = '') {
+               $moduleName = $mainModule . ($subModule ? '_' . $subModule : '');
+               if (array_key_exists($moduleName, $GLOBALS['TBE_MODULES']['_JSINIT'])) {
+                       unset($GLOBALS['TBE_MODULES']['_JSINIT'][$moduleName]);
+               }
+       }
+
+
+
+       /**
+        * Registers an Ext.Direct component with access restrictions.
+        *
+        * @param string $endpointName
+        * @param string $callbackClass
+        * @param string $moduleName optional: must be <mainmodule> or <mainmodule>_<submodule>
+        * @param string $accessLevel optional: can be 'admin' or 'user,group'
+        * @return void
+        */
+       public static function registerExtDirectComponent($endpointName, $callbackClass, $moduleName = NULL, $accessLevel = NULL) {
+               $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect'][$endpointName] = array(
+                       'callbackClass' => $callbackClass,
+                       'moduleName' => $moduleName,
+                       'accessLevel' => $accessLevel,
+               );
        }
 
        /**
@@ -868,7 +888,6 @@ final class t3lib_extMgm {
         * The arguments values are generally determined by which function menu this is supposed to interact with
         * See Inside TYPO3 for information on how to use this function.
         * FOR USE IN ext_tables.php FILES
-        * Usage: 26
         *
         * @param       string          Module name
         * @param       string          Class name
@@ -892,7 +911,6 @@ final class t3lib_extMgm {
         * Adds $content to the default Page TSconfig as set in $GLOBALS['TYPO3_CONF_VARS'][BE]['defaultPageTSconfig']
         * Prefixed with a [GLOBAL] line
         * FOR USE IN ext_tables.php/ext_localconf.php FILES
-        * Usage: 5
         *
         * @param       string          Page TSconfig content
         * @return      void
@@ -905,7 +923,6 @@ final class t3lib_extMgm {
         * Adds $content to the default User TSconfig as set in $GLOBALS['TYPO3_CONF_VARS'][BE]['defaultUserTSconfig']
         * Prefixed with a [GLOBAL] line
         * FOR USE IN ext_tables.php/ext_localconf.php FILES
-        * Usage: 3
         *
         * @param       string          User TSconfig content
         * @return      void
@@ -918,7 +935,6 @@ final class t3lib_extMgm {
         * Adds a reference to a locallang file with $GLOBALS['TCA_DESCR'] labels
         * FOR USE IN ext_tables.php FILES
         * eg. t3lib_extMgm::addLLrefForTCAdescr('pages', 'EXT:lang/locallang_csh_pages.xml'); for the pages table or t3lib_extMgm::addLLrefForTCAdescr('_MOD_web_layout', 'EXT:cms/locallang_csh_weblayout.php'); for the Web > Page module.
-        * Usage: 31
         *
         * @param       string          Description key. Typically a database table (like "pages") but for applications can be other strings, but prefixed with "_MOD_")
         * @param       string          File reference to locallang file, eg. "EXT:lang/locallang_csh_pages.php" (or ".xml")
@@ -976,21 +992,14 @@ final class t3lib_extMgm {
         * Adds a service to the global services array
         *
         * @param       string          Extension key
-        * @param       string          Service type, cannot be prefixed "tx_"
-        * @param       string          Service key, must be prefixed "tx_" or "user_"
+        * @param       string          Service type, must not be prefixed "tx_" or "Tx_"
+        * @param       string          Service key, must be prefixed "tx_", "Tx_" or "user_"
         * @param       array           Service description array
         * @return      void
         * @author      René Fritz <r.fritz@colorcube.de>
         */
        public static function addService($extKey, $serviceType, $serviceKey, $info) {
-                       // even not available services will be included to make it possible to give the admin a feedback of non-available services.
-                       // but maybe it's better to move non-available services to a different array??
-
-               if ($serviceType &&
-                               !t3lib_div::isFirstPartOfStr($serviceType, 'tx_') &&
-                               (t3lib_div::isFirstPartOfStr($serviceKey, 'tx_') || t3lib_div::isFirstPartOfStr($serviceKey, 'user_')) &&
-                               is_array($info)) {
-
+               if ($serviceType && t3lib_div::hasValidClassPrefix($serviceKey) && is_array($info)) {
                        $info['priority'] = max(0, min(100, $info['priority']));
 
                        $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey] = $info;
@@ -999,13 +1008,6 @@ final class t3lib_extMgm {
                        $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey]['serviceKey'] = $serviceKey;
                        $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey]['serviceType'] = $serviceType;
 
-
-                               // mapping a service key to a service type
-                               // all service keys begin with tx_ - service types don't
-                               // this way a selection of a special service key as service type is easy
-                       $GLOBALS['T3_SERVICES'][$serviceKey][$serviceKey] = &$GLOBALS['T3_SERVICES'][$serviceType][$serviceKey];
-
-
                                // change the priority (and other values) from $GLOBALS['TYPO3_CONF_VARS']
                                // $GLOBALS['TYPO3_CONF_VARS']['T3_SERVICES'][$serviceType][$serviceKey]['priority']
                                // even the activation is possible (a unix service might be possible on windows for some reasons)
@@ -1139,7 +1141,6 @@ final class t3lib_extMgm {
         * If the value (array pos. 1) is already found in that items-array, the entry is substituted, otherwise the input array is added to the bottom.
         * Use this function to add a frontend plugin to this list of plugin-types - or more generally use this function to add an entry to any selectorbox/radio-button set in the TCEFORMS
         * FOR USE IN ext_tables.php FILES
-        * Usage: 13
         *
         * @param       array           Item Array
         * @param       string          Type (eg. "list_type") - basically a field from "tt_content" table
@@ -1166,7 +1167,6 @@ final class t3lib_extMgm {
        /**
         * Adds an entry to the "ds" array of the tt_content field "pi_flexform".
         * This is used by plugins to add a flexform XML reference / content for use when they are selected as plugin or content element.
-        * Usage: 0
         *
         * @param       string          Plugin key as used in the list_type field. Use the asterisk * to match all list_type values.
         * @param       string          Either a reference to a flex-form XML file (eg. "FILE:EXT:newloginbox/flexform_ds.xml") or the XML directly.
@@ -1186,7 +1186,6 @@ final class t3lib_extMgm {
         * Adds the $table tablename to the list of tables allowed to be includes by content element type "Insert records"
         * By using $content_table and $content_field you can also use the function for other tables.
         * FOR USE IN ext_tables.php FILES
-        * Usage: 9
         *
         * @param       string          Table name to allow for "insert record"
         * @param       string          Table name TO WHICH the $table name is applied. See $content_field as well.
@@ -1214,7 +1213,6 @@ final class t3lib_extMgm {
         *               "includeLib" - just includes the library for manual use somewhere in TypoScript.
         *       (Remember that your $type definition should correspond to the column/items array in $GLOBALS['TCA'][tt_content] where you added the selector item for the element! See addPlugin() function)
         * FOR USE IN ext_localconf.php FILES
-        * Usage: 2
         *
         * @param       string          $key is the extension key
         * @param       string          $classFile is the PHP-class filename relative to the extension root directory. If set to blank a default value is chosen according to convensions.
@@ -1231,8 +1229,8 @@ final class t3lib_extMgm {
                $pluginContent = trim('
 plugin.' . $cN . $prefix . ' = USER' . ($cached ? '' : '_INT') . '
 plugin.' . $cN . $prefix . ' {
-  includeLibs = ' . $GLOBALS['TYPO3_LOADED_EXT'][$key]['siteRelPath'] . $classFile . '
-  userFunc = ' . $cN . $prefix . '->main
+       includeLibs = ' . $GLOBALS['TYPO3_LOADED_EXT'][$key]['siteRelPath'] . $classFile . '
+       userFunc = ' . $cN . $prefix . '->main
 }');
                self::addTypoScript($key, 'setup', '
 # Setting ' . $key . ' plugin TypoScript
@@ -1280,7 +1278,6 @@ tt_content.' . $key . $prefix . ' {
         * Call this method to add an entry in the static template list found in sys_templates
         * "static template files" are the modern equivalent (provided from extensions) to the traditional records in "static_templates"
         * FOR USE IN ext_localconf.php FILES
-        * Usage: 3
         *
         * @param       string          $extKey is of course the extension key
         * @param       string          $path is the path where the template files (fixed names) include_static.txt (integer list of uids from the table "static_templates"), constants.txt, setup.txt, editorcfg.txt, and include_static_file.txt is found (relative to extPath, eg. 'static/'). The file include_static_file.txt, allows you to include other static templates defined in files, from your static template, and thus corresponds to the field 'include_static_file' in the sys_template table. The syntax for this is a commaseperated list of static templates to include, like:  EXT:css_styled_content/static/,EXT:da_newsletter_subscription/static/,EXT:cc_random_image/pi2/static/
@@ -1301,7 +1298,6 @@ tt_content.' . $key . $prefix . ' {
         * Adds $content to the default TypoScript setup code as set in $GLOBALS['TYPO3_CONF_VARS'][FE]['defaultTypoScript_setup']
         * Prefixed with a [GLOBAL] line
         * FOR USE IN ext_localconf.php FILES
-        * Usage: 6
         *
         * @param       string          TypoScript Setup string
         * @return      void
@@ -1314,7 +1310,6 @@ tt_content.' . $key . $prefix . ' {
         * Adds $content to the default TypoScript constants code as set in $GLOBALS['TYPO3_CONF_VARS'][FE]['defaultTypoScript_constants']
         * Prefixed with a [GLOBAL] line
         * FOR USE IN ext_localconf.php FILES
-        * Usage: 0
         *
         * @param       string          TypoScript Constants string
         * @return      void
@@ -1327,7 +1322,6 @@ tt_content.' . $key . $prefix . ' {
         * Adds $content to the default TypoScript code for either setup, constants or editorcfg as set in $GLOBALS['TYPO3_CONF_VARS'][FE]['defaultTypoScript_*']
         * (Basically this function can do the same as addTypoScriptSetup and addTypoScriptConstants - just with a little more hazzle, but also with some more options!)
         * FOR USE IN ext_localconf.php FILES
-        * Usage: 7
         *
         * @param       string          $key is the extension key (informative only).
         * @param       string          $type is either "setup", "constants" or "editorcfg" and obviously determines which kind of TypoScript code we are adding.
@@ -1367,24 +1361,22 @@ tt_content.' . $key . $prefix . ' {
         ***************************************/
 
        /**
-        * Loading extensions configured in $TYPO3_CONF_VARS['EXT']['extList']
+        * Loading extensions configured in $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList']
         *
-        * CACHING ON: ($TYPO3_CONF_VARS['EXT']['extCache'] = 1 or 2)
+        * CACHING ON: ($GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache'] = 1)
         *               If caching is enabled (and possible), the output will be $extensions['_CACHEFILE'] set to the cacheFilePrefix. Subsequently the cache files must be included then since those will eventually set up the extensions.
         *               If cachefiles are not found they will be generated
-        * CACHING OFF: ($TYPO3_CONF_VARS['EXT']['extCache'] = 0)
+        * CACHING OFF: ($GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache'] = 0)
         *               The returned value will be an array where each key is an extension key and the value is an array with filepaths for the extension.
-        *               This array will later be set in the global var $TYPO3_LOADED_EXT
+        *               This array will later be set in the global var $GLOBALS['TYPO3_LOADED_EXT']
         *
         * Usages of this function can be seen in config_default.php
         * Extensions are always detected in the order local - global - system.
-        * Usage: 1
         *
         * @return      array           Extension Array
         * @internal
         */
        public static function typo3_loadExtensions() {
-               global $TYPO3_CONF_VARS;
 
                        // Caching behaviour of ext_tables.php and ext_localconf.php files:
                $extensionCacheBehaviour = self::getExtensionCacheBehaviour();
@@ -1438,7 +1430,7 @@ tt_content.' . $key . $prefix . ' {
                                                                @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 = self::cannotCacheFilesWritable($cacheFilePrefix);
                                        if ($wrError) {
-                                               $TYPO3_CONF_VARS['EXT']['extCache'] = 0;
+                                               $GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache'] = 0;
                                        } else {
                                                        // Write cache files:
                                                $extensions = self::writeCacheFiles($extensions, $cacheFilePrefix);
@@ -1466,28 +1458,27 @@ tt_content.' . $key . $prefix . ' {
 ###########################
 
 $_EXTKEY = \'' . $key . '\';
-$_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
+$_EXTCONF = $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXT\'][\'extConf\'][$_EXTKEY];
 
 ?>';
        }
 
        /**
-        * Returns true if both the localconf and tables cache file exists (with $cacheFilePrefix)
-        * Usage: 2
+        * Returns TRUE if both the localconf and tables cache file exists (with $cacheFilePrefix) and if they are not empty
         *
-        * @param       string          Prefix of the cache file to check
-        * @return      boolean
-        * @internal
+        * @param $cacheFilePrefix string Prefix of the cache file to check
+        * @return boolean
         */
        public static function isCacheFilesAvailable($cacheFilePrefix) {
                return
-                               @is_file(PATH_typo3conf . $cacheFilePrefix . '_ext_localconf.php') &&
-                                               @is_file(PATH_typo3conf . $cacheFilePrefix . '_ext_tables.php');
+                       @is_file(PATH_typo3conf . $cacheFilePrefix . '_ext_localconf.php') &&
+                               @is_file(PATH_typo3conf . $cacheFilePrefix . '_ext_tables.php') &&
+                               @filesize(PATH_typo3conf . $cacheFilePrefix . '_ext_localconf.php') > 0 &&
+                               @filesize(PATH_typo3conf . $cacheFilePrefix . '_ext_tables.php') > 0;
        }
 
        /**
-        * Returns true if the "localconf.php" file in "typo3conf/" is writable
-        * Usage: 1
+        * Returns TRUE if the "localconf.php" file in "typo3conf/" is writable
         *
         * @return      boolean
         * @internal
@@ -1498,8 +1489,7 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
 
        /**
         * Returns an error string if typo3conf/ or cache-files with $cacheFilePrefix are NOT writable
-        * Returns false if no problem.
-        * Usage: 1
+        * Returns FALSE if no problem.
         *
         * @param       string          Prefix of the cache file to check
         * @return      string
@@ -1522,9 +1512,8 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
        }
 
        /**
-        * Returns an array with the two cache-files (0=>localconf, 1=>tables) from typo3conf/ if they (both) exist. Otherwise false.
-        * Evaluation relies on $TYPO3_LOADED_EXT['_CACHEFILE']
-        * Usage: 2
+        * Returns an array with the two cache-files (0=>localconf, 1=>tables) from typo3conf/ if they (both) exist. Otherwise FALSE.
+        * Evaluation relies on $GLOBALS['TYPO3_LOADED_EXT']['_CACHEFILE']
         *
         * @param string $cacheFilePrefix Cache file prefix to be used (optional)
         * @return      array
@@ -1555,7 +1544,6 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
        /**
         * Compiles/Creates the two cache-files in typo3conf/ based on $cacheFilePrefix
         * Returns a array with the key "_CACHEFILE" set to the $cacheFilePrefix value
-        * Usage: 1
         *
         * @param       array           Extension information array
         * @param       string          Prefix for the cache files
@@ -1568,7 +1556,7 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
                $cFiles = array();
                $cFiles['ext_localconf'] .= '<?php
 
-$TYPO3_LOADED_EXT = unserialize(stripslashes(\'' . addslashes(serialize($extensions)) . '\'));
+$GLOBALS[\'TYPO3_LOADED_EXT\'] = unserialize(stripslashes(\'' . addslashes(serialize($extensions)) . '\'));
 
 ?>';
 
@@ -1608,7 +1596,6 @@ $TYPO3_LOADED_EXT = unserialize(stripslashes(\'' . addslashes(serialize($extensi
 
                $out = 0;
                if (is_array($cacheFiles)) {
-                       reset($cacheFiles);
                        foreach ($cacheFiles as $cfile) {
                                @unlink($cfile);
                                clearstatcache();
@@ -1620,7 +1607,7 @@ $TYPO3_LOADED_EXT = unserialize(stripslashes(\'' . addslashes(serialize($extensi
 
        /**
         * Gets the behaviour for caching ext_tables.php and ext_localconf.php files
-        * (see $TYPO3_CONF_VARS['EXT']['extCache'] setting in the install tool).
+        * (see $GLOBALS['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
@@ -1647,10 +1634,8 @@ $TYPO3_LOADED_EXT = unserialize(stripslashes(\'' . addslashes(serialize($extensi
                $cacheFileSuffix = (TYPO3_MODE == 'FE' ? '_FE' : '');
                $cacheFilePrefix = 'temp_CACHED' . $cacheFileSuffix;
 
-               if ($extensionCacheBehaviour == 1) {
+               if ($extensionCacheBehaviour) {
                        $cacheFilePrefix .= '_ps' . substr(t3lib_div::shortMD5(PATH_site . '|' . $GLOBALS['TYPO_VERSION']), 0, 4);
-               } elseif ($extensionCacheBehaviour == 2) {
-                       $cacheFilePrefix .= '_' . t3lib_div::shortMD5(self::getEnabledExtensionList());
                }
 
                return $cacheFilePrefix;