[TASK] Extbase: Revised and cleaned up autoloader. Autoloader is now registered insid...
authorJochen Rau <j.rau@web.de>
Thu, 30 Jul 2009 22:36:40 +0000 (22:36 +0000)
committerJochen Rau <j.rau@web.de>
Thu, 30 Jul 2009 22:36:40 +0000 (22:36 +0000)
[~TASK] Extbase (Utility): Improved the conversion CamelCase to under_scored. Implemented Ulility methods. Small performance improvement.
[BUGFIX] Extbase (Persistence): Fixed issue if MM_match_fields was not set. Checks for array now. Reported by Joerg Schoppet. Resolves #4072.
[TASK] Extbase (Persistence): Cleaned-up the Persistence Backend. Deleted unused methods deleteRelatedObjects() and deleteRelationInRelationTable(). They will be re-implemented later on.
[+FEATURE] Extbase (Utility): Adapted the createAutoloadRegistryForExtension() feature from exdeveval.

typo3/sysext/extbase/Classes/Dispatcher.php
typo3/sysext/extbase/Classes/MVC/Request.php
typo3/sysext/extbase/Classes/Persistence/Backend.php
typo3/sysext/extbase/Classes/Persistence/Mapper/DataMap.php
typo3/sysext/extbase/Classes/Persistence/Query.php
typo3/sysext/extbase/Classes/Utility/Extension.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Utility/Plugin.php
typo3/sysext/extbase/ext_autoload.php [new file with mode: 0644]
typo3/sysext/extbase/ext_localconf.php

index ffdf889..ae28da1 100644 (file)
@@ -53,6 +53,14 @@ class Tx_Extbase_Dispatcher {
         */
        private static $settings;
 
+       
+       /**
+        * Constructs this Dispatcher and registers the autoloader
+        */
+       public function __construct() {
+               spl_autoload_register(array($this, 'autoloadClass'));
+       }
+       
        /**
         * Creates a request an dispatches it to a controller.
         *
@@ -61,6 +69,12 @@ class Tx_Extbase_Dispatcher {
         * @return string $content The processed content
         */
        public function dispatch($content, $configuration) {
+
+               // FIXME Remove the next lines. These are only there to generate the ext_autoload.php file
+               //$extutil = new Tx_Extbase_Utility_Extension;
+               //$extutil->createAutoloadRegistryForExtension('extbase', t3lib_extMgm::extPath('extbase'));
+               //$extutil->createAutoloadRegistryForExtension('fluid', t3lib_extMgm::extPath('fluid'));
+               
                if (!is_array($configuration)) {
                        t3lib_div::sysLog('Extbase was not able to dispatch the request. No configuration.', 'extbase', t3lib_div::SYSLOG_SEVERITY_ERROR);
                        return $content;
@@ -211,23 +225,19 @@ class Tx_Extbase_Dispatcher {
         * @return void
         */
        public static function autoloadClass($className) {
-               $classNameParts = explode('_', $className);
-               $extensionKey = t3lib_div::camelCaseToLowerCaseUnderscored($classNameParts[1]);
+               // TODO Remove debug code
+               // TODO Make a registry for Extbase classes
+               //$starttime = microtime(true);
+               $classNameParts = explode('_', $className, 3);
+               $extensionKey = Tx_Extbase_Utility_Plugin::convertCamelCaseToLowerCaseUnderscored($classNameParts[1]);
                if (t3lib_extMgm::isLoaded($extensionKey)) {
-                       if ($classNameParts[0] === 'ux') {
-                               array_shift($classNameParts);
-                       }
-                       $className = implode('_', $classNameParts);
-                       if (count($classNameParts) > 2 && $classNameParts[0] === 'Tx') {
-                               $classFilePathAndName = t3lib_extMgm::extPath(t3lib_div::camelCaseToLowerCaseUnderscored($classNameParts[1])) . 'Classes/';
-                               $classFilePathAndName .= implode(array_slice($classNameParts, 2, -1), '/') . '/';
-                               $classFilePathAndName .= array_pop($classNameParts) . '.php';
-                       }
-                       if (isset($classFilePathAndName) && file_exists($classFilePathAndName)) {
-                               require_once($classFilePathAndName);
+                       $classFilePathAndName = t3lib_extMgm::extPath($extensionKey) . 'Classes/' . strtr($classNameParts[2], '_', '/') . '.php';
+                       if (file_exists($classFilePathAndName)) {
+                               require($classFilePathAndName);
                        }
                }
+               //$endtime = microtime(true);
+               //debug(($endtime - $starttime) * 10000, $className);
        }
-
 }
 ?>
\ No newline at end of file
index d4ce2bd..d508201 100644 (file)
@@ -238,7 +238,7 @@ class Tx_Extbase_MVC_Request {
         * @return string The extension name
         */
        public function getControllerExtensionKey() {
-               return t3lib_div::camelCaseToLowerCaseUnderscored($this->controllerExtensionName);
+               return Tx_Extbase_Utility_Plugin::convertCamelCaseToLowerCaseUnderscored($this->controllerExtensionName);
        }
 
        /**
index e839e06..38d737f 100644 (file)
@@ -269,8 +269,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
        }
 
        /**
-        * Inserts an objects corresponding row into the database. If the object is a value object an
-        * existing instance will be looked up.
+        * Persists an object (instert, update) and its related objects (instert, update, delete).
         *
         * @param Tx_Extbase_DomainObject_DomainObjectInterface $object The object to be inserted
         * @param Tx_Extbase_DomainObject_DomainObjectInterface $parentObject The parent object
@@ -326,7 +325,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                        $parentDataMap = $this->dataMapper->getDataMap(get_class($parentObject));
                        $parentColumnMap = $parentDataMap->getColumnMap($parentPropertyName);
                        if (($parentColumnMap->getTypeOfRelation()  === Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_HAS_AND_BELONGS_TO_MANY)) {
-                               $this->insertRelation($object, $parentObject, $parentPropertyName);
+                               $this->insertRelationInRelationtable($object, $parentObject, $parentPropertyName);
                        }
                }
                
@@ -334,6 +333,15 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                $object->_memorizeCleanState();
        }
        
+       /**
+        * Persists a relation. Objects of a 1:n or m:n relation are queued and processed with the parent object. A 1:1 relation
+        * gets persisted immediately. Objects which were removed from the property were deleted immediately, too.
+        * 
+        * @param Tx_Extbase_DomainObject_DomainObjectInterface $object The object to be inserted
+        * @param string $propertyName The name of the property the related objects are stored in
+        * @param mixed $propertyValue The property value (an array of Domain Objects, ObjectStorage holding Domain Objects or a Domain Object itself)
+        * @return void
+        */
        protected function persistRelations(Tx_Extbase_DomainObject_DomainObjectInterface $object, $propertyName, $propertyValue, Tx_Extbase_Persistence_Mapper_ColumnMap $columnMap, &$queuedObjects, &$row) {
                        $columnName = $columnMap->getColumnName();
                        if (($columnMap->getTypeOfRelation() === Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_HAS_MANY) || ($columnMap->getTypeOfRelation() === Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_HAS_AND_BELONGS_TO_MANY)) {
@@ -348,9 +356,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                                }
                        } elseif ($propertyValue instanceof Tx_Extbase_DomainObject_DomainObjectInterface) {
                                // TODO Handle Value Objects different
-                               // SK: this is the case RELATION_HAS_ONE, correct? JR: Yes ;-)
                                if ($propertyValue->_isNew() || $propertyValue->_isDirty()) {
-                                       // SK: What happens if the value is not new, but changed?
                                        $this->persistObject($propertyValue);
                                }
                                $row[$columnName] = $propertyValue->getUid();
@@ -362,8 +368,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
         * with the actual property value.
         * 
         * @param Tx_Extbase_DomainObject_AbstractEntity $object The object to be insterted in the storage
-        * @param Tx_Extbase_DomainObject_AbstractEntity|NULL $parentObject The parent object (if any)
-        * @param string|NULL $parentPropertyName The name of the property
+        * @param string $parentPropertyName The name of the property
         * @return array An array of deleted objects
         */
        protected function getDeletedChildObjects(Tx_Extbase_DomainObject_AbstractEntity $object, $propertyName) {
@@ -458,7 +463,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
         * @param string $parentPropertyName The name of the parent object's property where the related objects are stored in
         * @return void
         */
-       protected function insertRelation(Tx_Extbase_DomainObject_DomainObjectInterface $relatedObject, Tx_Extbase_DomainObject_DomainObjectInterface $parentObject, $parentPropertyName) {
+       protected function insertRelationInRelationtable(Tx_Extbase_DomainObject_DomainObjectInterface $relatedObject, Tx_Extbase_DomainObject_DomainObjectInterface $parentObject, $parentPropertyName) {
                $dataMap = $this->dataMapper->getDataMap(get_class($parentObject));
                $columnMap = $dataMap->getColumnMap($parentPropertyName);
                $row = array(
@@ -580,70 +585,6 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                $this->referenceIndex->updateRefIndexTable($tableName, $uid);
        }
 
-       /**
-        * Deletes all relations of an object.
-        *
-        * @param Tx_Extbase_DomainObject_DomainObjectInterface $object The object for which the relations should be updated
-        * @param string $propertyName The name of the property holding the related child objects
-        * @param array $relations The queued relations
-        * @return void
-        */
-       // SK: I am not yet sure where deleted relations ae handled. Need to check more thoroughly!
-       protected function deleteRelatedObjects(Tx_Extbase_DomainObject_DomainObjectInterface $object) {
-               $dataMap = $this->dataMapper->getDataMap(get_class($object));
-               foreach ($relations as $propertyName => $relatedObjects) {
-                       if (is_array($relatedObjects)) {
-                               foreach ($relatedObjects as $relatedObject) {
-                                       $this->deleteObject($relatedObject, $object, $propertyName);
-                                       if ($dataMap->getColumnMap($propertyName)->getTypeOfRelation() === Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_HAS_AND_BELONGS_TO_MANY) {
-                                               // SK: This method does IMHO not exist.
-                                               $this->deleteRelationInRelationTable($relatedObject, $object, $propertyName);
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Update relations in a relation table
-        * FIXME Check this method
-        *
-        * @param array $relatedObjects An array of related objects
-        * @param Tx_Extbase_DomainObject_DomainObjectInterface $parentObject The parent object
-        * @param string $parentPropertyName The name of the parent object's property where the related objects are stored in
-        * @return void
-        */
-       protected function deleteRelationInRelationTable($relatedObject, Tx_Extbase_DomainObject_DomainObjectInterface $parentObject, $parentPropertyName) {
-               $dataMap = $this->dataMapper->getDataMap(get_class($parentObject));
-               $columnMap = $dataMap->getColumnMap($parentPropertyName);
-               // TODO Remove dependency to the t3lib_db instance
-               $res = $this->persistenceBackend->exec_SELECTquery(
-                       $columnMap->getChildKeyFieldName(),
-                       $tableName,
-                       $columnMap->getParentKeyFieldName() . $parentObject->getUid()
-                       );
-               $existingRelations = array();
-               while($row = $this->persistenceBackend->sql_fetch_assoc($res)) {
-                       $existingRelations[current($row)] = current($row);
-               }
-               $relationsToDelete = $existingRelations;
-               if (is_array($relatedObject)) {
-                       foreach ($relatedObject as $relatedObject) {
-                               $relatedObjectUid = $relatedObject->getUid();
-                               if (array_key_exists($relatedObjectUid, $relationsToDelete)) {
-                                       unset($relationsToDelete[$relatedObjectUid]);
-                               }
-                       }
-               }
-               if (count($relationsToDelete) > 0) {
-                       $relationsToDeleteList = implode(',', $relationsToDelete);
-                       $res = $this->persistenceBackend->exec_DELETEquery(
-                               $columnMap->getRelationTableName(),
-                               $columnMap->getParentKeyFieldName() . '=' . $parentObject->getUid() . ' AND ' . $columnMap->getChildKeyFieldName() . ' IN (' . $relationsToDeleteList . ')'
-                               );
-               }
-       }
-
        /**
         * Delegates the call to the Data Map.
         * Returns TRUE if the property is persistable (configured in $TCA)
index 71335dd..0b234bd 100644 (file)
@@ -119,7 +119,7 @@ class Tx_Extbase_Persistence_Mapper_DataMap {
                                if (!empty($mapping[$columnName]['mapOnProperty'])) {
                                        $propertyName = $mapping[$columnName]['mapOnProperty'];
                                } else {
-                                       $propertyName = t3lib_div::underscoredToLowerCamelCase($columnName);
+                                       $propertyName = Tx_Extbase_Utility_Plugin::convertUnderscoredToLowerCamelCase($columnName);
                                }
                                if (isset($mapping[$columnName]['foreignClass']) && !isset($columnConfiguration['config']['foreign_class'])) {
                                        $columnConfiguration['config']['foreign_class'] = $mapping[$columnName]['foreignClass'];
@@ -222,7 +222,9 @@ class Tx_Extbase_Persistence_Mapper_DataMap {
                        $columnMap->setChildClassName($columnConfiguration['config']['foreign_class']);
                        $columnMap->setChildTableName($columnConfiguration['config']['foreign_table']);
                        $columnMap->setRelationTableName($columnConfiguration['config']['MM']);
-                       $columnMap->setRelationTableMatchFields($columnConfiguration['config']['MM_match_fields']);
+                       if (is_array($columnConfiguration['config']['MM_match_fields'])) {
+                       $columnMap->setRelationTableMatchFields($columnConfiguration['config']['MM_match_fields']);
+                       }
                        $columnMap->setRelationTableWhereStatement($columnConfiguration['config']['MM_table_where']);
                        // TODO We currently do not support multi table relationships
                        if ($columnConfiguration['config']['MM_opposite_field']) {
@@ -271,7 +273,7 @@ class Tx_Extbase_Persistence_Mapper_DataMap {
         */
        public function addColumn($columnName, $propertyName = '', $propertyType = Tx_Extbase_Persistence_PropertyType::STRING, $typeOfRelation = Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_NONE) {
                if (empty($propertyName)) {
-                       $propertyName = t3lib_div::underscoredToLowerCamelCase($columnName);
+                       $propertyName = Tx_Extbase_Utility_Plugin::convertUnderscoredToLowerCamelCase($columnName);
                }
 
                $columnMap = new Tx_Extbase_Persistence_Mapper_ColumnMap($columnName, $propertyName);
index 88de563..804f480 100644 (file)
@@ -181,7 +181,7 @@ class Tx_Extbase_Persistence_Query implements Tx_Extbase_Persistence_QueryInterf
                if ($this->source === NULL) {
                        $this->source = $this->QOMFactory->selector($this->dataMapper->convertClassNameToSelectorName($this->className));
                }
-               if (!empty($statement)) {
+               if ($this->constraint instanceof Tx_Extbase_Persistence_QOM_StatementInterface) {
                        $query = $this->QOMFactory->createQuery(
                                $this->source,
                                $this->constraint,
@@ -276,7 +276,8 @@ class Tx_Extbase_Persistence_Query implements Tx_Extbase_Persistence_QueryInterf
        }
 
        /**
-        * Sets the statement of this query programmatically.
+        * Sets the statement of this query programmatically. If you use this, you will lose the abstraction from a concrete storage
+        * backend (database).
         *
         * @param string $statement The statement
         * @param object $language The language of the statement. Must be a supported languanguage defined as Tx_Extbase_Persistence_QOM_QueryObjectModelInterface::JCR_* or Tx_Extbase_Persistence_QOM_QueryObjectModelInterface::TYPO3_* or 
diff --git a/typo3/sysext/extbase/Classes/Utility/Extension.php b/typo3/sysext/extbase/Classes/Utility/Extension.php
new file mode 100644 (file)
index 0000000..911f5f3
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Utilities to manage plugins and  modules of an extension. Also useful to auto-generate the autoloader registry 
+ * file ext_autoload.php.
+ *
+ * @package Extbase
+ * @subpackage Utility
+ * @version $ID:$
+ * @author Dmitry Dulepov <dmitry@typo3.org>
+ * @author Sebastian Kurf\9frst <sebastian@typo3.org>
+ * @author Jochen Rau <jochen.rau@typoplanet.de>
+ */
+class Tx_Extbase_Utility_Extension {
+
+       /**
+        * Build the autoload registry for a given extension and place it ext_autoload.php.
+        *
+        * @param       string  $extensionKey   Key of the extension
+        * @param       string  $extensionPath  full path of the extension
+        * @return      string  HTML string which should be outputted
+        */
+       public function createAutoloadRegistryForExtension($extensionKey, $extensionPath) {
+               $classNameToFileMapping = array();
+               $extensionName = str_replace(' ', '', ucwords(str_replace('_', ' ', $extensionKey)));
+               $errors = $this->buildAutoloadRegistryForSinglePath($classNameToFileMapping, $extensionPath . 'Classes/', '.*tslib.*', '$extensionClassesPath . \'|\'');
+               if ($errors) {
+                       return $errors;
+               }
+               $globalPrefix = '$extensionClassesPath = t3lib_extMgm::extPath(\'' . $extensionKey . '\') . \'Classes/\';';
+
+               $errors = array();
+               foreach ($classNameToFileMapping as $className => $fileName) {
+                       if (!(strpos($className, 'tx_' . strtolower($extensionName)) === 0)) {
+                               $errors[] = $className . ' does not start with Tx_' . $extensionName . ' and was not added to the autoloader registry.';
+                               unset($classNameToFileMapping[$className]);
+                       }
+               }
+               $autoloadFileString = $this->generateAutoloadPHPFileData($classNameToFileMapping, $globalPrefix);
+               if (!@file_put_contents($extensionPath . 'ext_autoload.php', $autoloadFileString)) {
+                       $errors[] = '<b>' . $extensionPath . 'ext_autoload.php could not be written!</b>';
+               }
+               $errors[] = 'Wrote the following data: <pre>' . htmlspecialchars($autoloadFileString) . '</pre>';
+               return implode('<br />', $errors);
+       }
+
+       /**
+        * Generate autoload PHP file data. Takes an associative array with class name to file mapping, and outputs it as PHP.
+        * Does NOT escape the values in the associative array. Includes the <?php ... ?> syntax and an optional global prefix.
+        *
+        * @param       array   $classNameToFileMapping class name to file mapping
+        * @param       string  $globalPrefix   Global prefix which is prepended to all code.
+        * @return      string  The full PHP string
+        */
+       protected function generateAutoloadPHPFileData($classNameToFileMapping, $globalPrefix = '') {
+               $output = '<?php' . PHP_EOL;
+               $output .= '// DO NOT CHANGE THIS FILE! It is automatically generated by Tx_Extbase_Utility_Extension::createAutoloadRegistryForExtension.' . PHP_EOL;
+               $output .= '// This file was generated on ' . date('Y-m-d H:i') . PHP_EOL;
+               $output .= PHP_EOL;
+               $output .= $globalPrefix . PHP_EOL;
+               $output .= 'return array(' . PHP_EOL;
+               foreach ($classNameToFileMapping as $className => $quotedFileName) {
+                       $output .= '    \'' . $className . '\' => ' . $quotedFileName . ',' . PHP_EOL;
+               }
+               $output .= ');' . PHP_EOL;
+               $output .= '?>';
+               return $output;
+       }
+
+       /**
+        * Generate the $classNameToFileMapping for a given filePath.
+        *
+        * @param       array   $classNameToFileMapping (Reference to array) All values are appended to this array.
+        * @param       string  $path   Path which should be crawled
+        * @param       string  $excludeRegularExpression       Exclude regular expression, to exclude certain files from being processed
+        * @param       string  $valueWrap      Wrap for the file name
+        * @return void
+        */
+       protected function buildAutoloadRegistryForSinglePath(&$classNameToFileMapping, $path, $excludeRegularExpression = '', $valueWrap = '\'|\'') {
+//             if (file_exists($path . 'Classes/')) {
+//                     return "<b>This appears to be a new-style extension which has its PHP classes inside the Classes/ subdirectory. It is not needed to generate the autoload registry for these extensions.</b>";
+//             }
+               $extensionFileNames = t3lib_div::removePrefixPathFromList(t3lib_div::getAllFilesAndFoldersInPath(array(), $path, 'php', FALSE, 99, $excludeRegularExpression), $path);
+
+               foreach ($extensionFileNames as $extensionFileName) {
+                       $classNamesInFile = $this->extractClassNames($path . $extensionFileName);
+                       if (!count($classNamesInFile)) continue;
+                       foreach ($classNamesInFile as $className) {
+                               $classNameToFileMapping[strtolower($className)] = str_replace('|', $extensionFileName, $valueWrap);
+                       }
+               }
+       }
+
+       /**
+        * Extracts class names from the given file.
+        *
+        * @param       string  $filePath       File path (absolute)
+        * @return      array   Class names
+        */
+       protected function extractClassNames($filePath) {
+               $fileContent = php_strip_whitespace($filePath);
+               $classNames = array();
+               if (function_exists('token_get_all')) {
+                       $tokens = token_get_all($fileContent);
+                       while(1) {
+                               // look for "class" or "interface"
+                               $token = $this->findToken($tokens, array(T_ABSTRACT, T_CLASS, T_INTERFACE));
+                               // fetch "class" token if "abstract" was found
+                               if ($token === 'abstract') {
+                                       $token = $this->findToken($tokens, array(T_CLASS));
+                               }
+                               if ($token === false) {
+                                       // end of file
+                                       break;
+                               }
+                               // look for the name (a string) skipping only whitespace and comments
+                               $token = $this->findToken($tokens, array(T_STRING), array(T_WHITESPACE, T_COMMENT, T_DOC_COMMENT));
+                               if ($token === false) {
+                                       // unexpected end of file or token: remove found names because of parse error
+                                       t3lib_div::sysLog('Parse error in "' . $file. '".', 'Core', 2);
+                                       $classNames = array();
+                                       break;
+                               }
+                               $token = t3lib_div::strtolower($token);
+                               // exclude XLASS classes
+                               if (strncmp($token, 'ux_', 3)) {
+                                       $classNames[] = $token;
+                               }
+                       }
+               } else {
+                       // TODO: parse PHP - skip coments and strings, apply regexp only on the remaining PHP code
+                       $matches = array();
+                       preg_match_all('/^[ \t]*(?:(?:abstract|final)?[ \t]*(?:class|interface))[ \t\n\r]+([a-zA-Z][a-zA-Z_0-9]*)/mS', $fileContent, $matches);
+                       $classNames = array_map('t3lib_div::strtolower', $matches[1]);
+               }
+               return $classNames;
+       }
+
+       /**
+        * Find tokens in the tokenList
+        *
+        * @param       array   $tokenList      list of tokens as returned by token_get_all()
+        * @param       array   $wantedToken    the tokens to be found
+        * @param       array   $intermediateTokens     optional: list of tokens that are allowed to skip when looking for the wanted token
+        * @return      mixed
+        */
+       protected function findToken(array &$tokenList, array $wantedTokens, array $intermediateTokens = array()) {
+               $skipAllTokens = count($intermediateTokens) ? false : true;
+
+               $returnValue = false;
+               // Iterate with while since we need the current array position:
+               while (list(,$token) = each($tokenList)) {
+                       // parse token (see http://www.php.net/manual/en/function.token-get-all.php for format of token list)
+                       if (is_array($token)) {
+                               list($id, $text) = $token;
+                       } else {
+                               $id = $text = $token;
+                       }
+                       if (in_array($id, $wantedTokens)) {
+                               $returnValue = $text;
+                               break;
+                       }
+                       // look for another token
+                       if ($skipAllTokens || in_array($id, $intermediateTokens)) {
+                               continue;
+                       }
+                       break;
+               }
+               return $returnValue;
+       }
+
+}
+?>
\ No newline at end of file
index 4d71d05..cf1948d 100644 (file)
@@ -158,12 +158,18 @@ tt_content.list.20.' . $pluginSignature . ' {
 
        // TODO Remove the next 3 functions; only for compatibility resons
 
-       public static function convertCamelCaseToLowerUnderscore($camelCasedString) {
-               return t3lib_div::camelCaseToLowerCaseUnderscored($camelCasedString);
+       public static function convertCamelCaseToLowerCaseUnderscored($string) {
+               static $conversionMap = array();
+               if (!isset($conversionMap[$string])) {
+                       $conversionMap[$string] = strtolower(preg_replace('/(?<=\w)([A-Z])/', '_\\1', $string));
+               }
+               return $conversionMap[$string];
        }
 
-       public static function convertLowerUnderscoreToLowerCamelCase($lowerUndercoredString) {
-               return t3lib_div::underscoredToLowerCamelCase($lowerUndercoredString);
+       public static function convertUnderscoredToLowerCamelCase($string) {
+               $string = str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower($string))));
+               $string[0] = strtolower($string[0]);
+               return $string;
        }
 
        public static function convertLowerUnderscoreToUpperCamelCase($camelCasedString) {
diff --git a/typo3/sysext/extbase/ext_autoload.php b/typo3/sysext/extbase/ext_autoload.php
new file mode 100644 (file)
index 0000000..65f00e7
--- /dev/null
@@ -0,0 +1,243 @@
+<?php
+// DO NOT CHANGE THIS FILE! It is automatically generated by Tx_Extbase_Utility_Extension::createAutoloadRegistryForExtension.
+// This file was generated on 2009-07-31 00:17
+
+$extensionClassesPath = t3lib_extMgm::extPath('extbase') . 'Classes/';
+return array(
+       'tx_extbase_dispatcher' => $extensionClassesPath . 'Dispatcher.php',
+       'tx_extbase_exception' => $extensionClassesPath . 'Exception.php',
+       'tx_extbase_configuration_exception' => $extensionClassesPath . 'Configuration/Exception.php',
+       'tx_extbase_configuration_manager' => $extensionClassesPath . 'Configuration/Manager.php',
+       'tx_extbase_configuration_sourceinterface' => $extensionClassesPath . 'Configuration/SourceInterface.php',
+       'tx_extbase_configuration_exception_containerislocked' => $extensionClassesPath . 'Configuration/Exception/ContainerIsLocked.php',
+       'tx_extbase_configuration_exception_invalidconfigurationtype' => $extensionClassesPath . 'Configuration/Exception/InvalidConfigurationType.php',
+       'tx_extbase_configuration_exception_nosuchfile' => $extensionClassesPath . 'Configuration/Exception/NoSuchFile.php',
+       'tx_extbase_configuration_exception_nosuchoption' => $extensionClassesPath . 'Configuration/Exception/NoSuchOption.php',
+       'tx_extbase_configuration_exception_parseerror' => $extensionClassesPath . 'Configuration/Exception/ParseError.php',
+       'tx_extbase_configuration_source_flexformsource' => $extensionClassesPath . 'Configuration/Source/FlexFormSource.php',
+       'tx_extbase_configuration_source_typoscriptsource' => $extensionClassesPath . 'Configuration/Source/TypoScriptSource.php',
+       'tx_extbase_controller_standardcontroller' => $extensionClassesPath . 'Controller/StandardController.php',
+       'tx_extbase_domain_model_frontenduser' => $extensionClassesPath . 'Domain/Model/FrontendUser.php',
+       'tx_extbase_domain_model_frontendusergroup' => $extensionClassesPath . 'Domain/Model/FrontendUserGroup.php',
+       'tx_extbase_domain_repository_frontendusergrouprepository' => $extensionClassesPath . 'Domain/Repository/FrontendUserGroupRepository.php',
+       'tx_extbase_domain_repository_frontenduserrepository' => $extensionClassesPath . 'Domain/Repository/FrontendUserRepository.php',
+       'tx_extbase_domainobject_abstractdomainobject' => $extensionClassesPath . 'DomainObject/AbstractDomainObject.php',
+       'tx_extbase_domainobject_abstractentity' => $extensionClassesPath . 'DomainObject/AbstractEntity.php',
+       'tx_extbase_domainobject_abstractvalueobject' => $extensionClassesPath . 'DomainObject/AbstractValueObject.php',
+       'tx_extbase_domainobject_domainobjectinterface' => $extensionClassesPath . 'DomainObject/DomainObjectInterface.php',
+       'tx_extbase_error_error' => $extensionClassesPath . 'Error/Error.php',
+       'tx_extbase_exception_infiniteloop' => $extensionClassesPath . 'Exception/InfiniteLoop.php',
+       'tx_extbase_exception_invalidactionname' => $extensionClassesPath . 'Exception/InvalidActionName.php',
+       'tx_extbase_exception_invalidargumentname' => $extensionClassesPath . 'Exception/InvalidArgumentName.php',
+       'tx_extbase_exception_invalidargumenttype' => $extensionClassesPath . 'Exception/InvalidArgumentType.php',
+       'tx_extbase_exception_invalidargumentvalue' => $extensionClassesPath . 'Exception/InvalidArgumentValue.php',
+       'tx_extbase_exception_invalidcontroller' => $extensionClassesPath . 'Exception/InvalidController.php',
+       'tx_extbase_exception_invalidcontrollername' => $extensionClassesPath . 'Exception/InvalidControllerName.php',
+       'tx_extbase_exception_invalidextensionkey' => $extensionClassesPath . 'Exception/InvalidExtensionName.php',
+       'tx_extbase_exception_invalidformat' => $extensionClassesPath . 'Exception/InvalidFormat.php',
+       'tx_extbase_exception_invalidmarker' => $extensionClassesPath . 'Exception/InvalidMarker.php',
+       'tx_extbase_exception_invalidpart' => $extensionClassesPath . 'Exception/InvalidPart.php',
+       'tx_extbase_exception_invalidrequestmethod' => $extensionClassesPath . 'Exception/InvalidRequestMethod.php',
+       'tx_extbase_exception_invalidrequesttype' => $extensionClassesPath . 'Exception/InvalidRequestType.php',
+       'tx_extbase_exception_invalidrouteparthandler' => $extensionClassesPath . 'Exception/InvalidRoutePartHandler.php',
+       'tx_extbase_exception_invalidtemplatesource' => $extensionClassesPath . 'Exception/InvalidTemplateSource.php',
+       'tx_extbase_exception_invalidviewhelper' => $extensionClassesPath . 'Exception/InvalidViewHelper.php',
+       'tx_extbase_exception_nosuchaction' => $extensionClassesPath . 'Exception/NoSuchAction.php',
+       'tx_extbase_exception_nosuchargument' => $extensionClassesPath . 'Exception/NoSuchArgument.php',
+       'tx_extbase_exception_nosuchcontroller' => $extensionClassesPath . 'Exception/NoSuchController.php',
+       'tx_extbase_exception_stopaction' => $extensionClassesPath . 'Exception/StopAction.php',
+       'tx_extbase_exception_stopuncachedaction' => $extensionClassesPath . 'Exception/StopUncachedAction.php',
+       'tx_extbase_exception_successivedynamicrouteparts' => $extensionClassesPath . 'Exception/SuccessiveDynamicRouteParts.php',
+       'tx_extbase_exception_unsupportedrequesttype' => $extensionClassesPath . 'Exception/UnsupportedRequestType.php',
+       'tx_extbase_mvc_exception' => $extensionClassesPath . 'MVC/Exception.php',
+       'tx_extbase_mvc_request' => $extensionClassesPath . 'MVC/Request.php',
+       'tx_extbase_mvc_response' => $extensionClassesPath . 'MVC/Response.php',
+       'tx_extbase_mvc_controller_abstractcontroller' => $extensionClassesPath . 'MVC/Controller/AbstractController.php',
+       'tx_extbase_mvc_controller_actioncontroller' => $extensionClassesPath . 'MVC/Controller/ActionController.php',
+       'tx_extbase_mvc_controller_argument' => $extensionClassesPath . 'MVC/Controller/Argument.php',
+       'tx_extbase_mvc_controller_argumenterror' => $extensionClassesPath . 'MVC/Controller/ArgumentError.php',
+       'tx_extbase_mvc_controller_arguments' => $extensionClassesPath . 'MVC/Controller/Arguments.php',
+       'tx_extbase_mvc_controller_argumentsvalidator' => $extensionClassesPath . 'MVC/Controller/ArgumentsValidator.php',
+       'tx_extbase_mvc_controller_controllercontext' => $extensionClassesPath . 'MVC/Controller/ControllerContext.php',
+       'tx_extbase_mvc_controller_controllerinterface' => $extensionClassesPath . 'MVC/Controller/ControllerInterface.php',
+       'tx_extbase_mvc_exception_infiniteloop' => $extensionClassesPath . 'MVC/Exception/InfiniteLoop.php',
+       'tx_extbase_mvc_exception_invalidactionname' => $extensionClassesPath . 'MVC/Exception/InvalidActionName.php',
+       'tx_extbase_mvc_exception_invalidargumentname' => $extensionClassesPath . 'MVC/Exception/InvalidArgumentName.php',
+       'tx_extbase_mvc_exception_invalidargumenttype' => $extensionClassesPath . 'MVC/Exception/InvalidArgumentType.php',
+       'tx_extbase_mvc_exception_invalidargumentvalue' => $extensionClassesPath . 'MVC/Exception/InvalidArgumentValue.php',
+       'tx_extbase_mvc_exception_invalidcontroller' => $extensionClassesPath . 'MVC/Exception/InvalidController.php',
+       'tx_extbase_mvc_exception_invalidcontrollername' => $extensionClassesPath . 'MVC/Exception/InvalidControllerName.php',
+       'tx_extbase_mvc_exception_invalidextensionname' => $extensionClassesPath . 'MVC/Exception/InvalidExtensionName.php',
+       'tx_extbase_mvc_exception_invalidmarker' => $extensionClassesPath . 'MVC/Exception/InvalidMarker.php',
+       'tx_extbase_mvc_exception_invalidrequestmethod' => $extensionClassesPath . 'MVC/Exception/InvalidRequestMethod.php',
+       'tx_extbase_mvc_exception_invalidrequesttype' => $extensionClassesPath . 'MVC/Exception/InvalidRequestType.php',
+       'tx_extbase_mvc_exception_invalidtemplateresource' => $extensionClassesPath . 'MVC/Exception/InvalidTemplateResource.php',
+       'tx_extbase_mvc_exception_invaliduripattern' => $extensionClassesPath . 'MVC/Exception/InvalidUriPattern.php',
+       'tx_extbase_mvc_exception_invalidviewhelper' => $extensionClassesPath . 'MVC/Exception/InvalidViewHelper.php',
+       'tx_extbase_mvc_exception_nosuchaction' => $extensionClassesPath . 'MVC/Exception/NoSuchAction.php',
+       'tx_extbase_mvc_exception_nosuchargument' => $extensionClassesPath . 'MVC/Exception/NoSuchArgument.php',
+       'tx_extbase_mvc_exception_nosuchcontroller' => $extensionClassesPath . 'MVC/Exception/NoSuchController.php',
+       'tx_extbase_mvc_exception_stopaction' => $extensionClassesPath . 'MVC/Exception/StopAction.php',
+       'tx_extbase_mvc_exception_unsupportedrequesttype' => $extensionClassesPath . 'MVC/Exception/UnsupportedRequestType.php',
+       'tx_extbase_mvc_view_abstractview' => $extensionClassesPath . 'MVC/View/AbstractView.php',
+       'tx_extbase_mvc_view_emptyview' => $extensionClassesPath . 'MVC/View/EmptyView.php',
+       'tx_extbase_mvc_view_viewinterface' => $extensionClassesPath . 'MVC/View/ViewInterface.php',
+       'tx_extbase_mvc_web_request' => $extensionClassesPath . 'MVC/Web/Request.php',
+       'tx_extbase_mvc_web_requestbuilder' => $extensionClassesPath . 'MVC/Web/RequestBuilder.php',
+       'tx_extbase_mvc_web_response' => $extensionClassesPath . 'MVC/Web/Response.php',
+       'tx_extbase_mvc_web_routing_uribuilder' => $extensionClassesPath . 'MVC/Web/Routing/URIBuilder.php',
+       'tx_extbase_object_exception' => $extensionClassesPath . 'Object/Exception.php',
+       'tx_extbase_object_manager' => $extensionClassesPath . 'Object/Manager.php',
+       'tx_extbase_object_managerinterface' => $extensionClassesPath . 'Object/ManagerInterface.php',
+       'tx_extbase_object_registryinterface' => $extensionClassesPath . 'Object/RegistryInterface.php',
+       'tx_extbase_object_transientregistry' => $extensionClassesPath . 'Object/TransientRegistry.php',
+       'tx_extbase_object_cannotbuildobject' => $extensionClassesPath . 'Object/Exception/CannotBuildObject.php',
+       'tx_extbase_object_exception_cannotreconstituteobject' => $extensionClassesPath . 'Object/Exception/CannotReconstituteObject.php',
+       'tx_extbase_object_invalidclass' => $extensionClassesPath . 'Object/Exception/InvalidClass.php',
+       'tx_extbase_object_invalidobject' => $extensionClassesPath . 'Object/Exception/InvalidObject.php',
+       'tx_extbase_object_invalidobjectconfiguration' => $extensionClassesPath . 'Object/Exception/InvalidObjectConfiguration.php',
+       'tx_extbase_object_objectalreadyregistered' => $extensionClassesPath . 'Object/Exception/ObjectAlreadyRegistered.php',
+       'tx_extbase_object_unknownclass' => $extensionClassesPath . 'Object/Exception/UnknownClass.php',
+       'tx_extbase_object_unknowninterface' => $extensionClassesPath . 'Object/Exception/UnknownInterface.php',
+       'tx_extbase_object_unknownobject' => $extensionClassesPath . 'Object/Exception/UnknownObject.php',
+       'tx_extbase_object_unresolveddependencies' => $extensionClassesPath . 'Object/Exception/UnresolvedDependencies.php',
+       'tx_extbase_object_wrongscope' => $extensionClassesPath . 'Object/Exception/WrongScope.php',
+       'tx_extbase_persistence_backend' => $extensionClassesPath . 'Persistence/Backend.php',
+       'tx_extbase_persistence_backendinterface' => $extensionClassesPath . 'Persistence/BackendInterface.php',
+       'tx_extbase_persistence_exception' => $extensionClassesPath . 'Persistence/Exception.php',
+       'tx_extbase_persistence_identitymap' => $extensionClassesPath . 'Persistence/IdentityMap.php',
+       'tx_extbase_persistence_iteratorinterface' => $extensionClassesPath . 'Persistence/IteratorInterface.php',
+       'tx_extbase_persistence_lazyloadingproxy' => $extensionClassesPath . 'Persistence/LazyLoadingProxy.php',
+       'tx_extbase_persistence_manager' => $extensionClassesPath . 'Persistence/Manager.php',
+       'tx_extbase_persistence_managerinterface' => $extensionClassesPath . 'Persistence/ManagerInterface.php',
+       'tx_extbase_persistence_objectstorage' => $extensionClassesPath . 'Persistence/ObjectStorage.php',
+       'tx_extbase_persistence_preparedquery' => $extensionClassesPath . 'Persistence/PreparedQuery.php',
+       'tx_extbase_persistence_preparedqueryinterface' => $extensionClassesPath . 'Persistence/PreparedQueryInterface.php',
+       'tx_extbase_persistence_propertytype' => $extensionClassesPath . 'Persistence/PropertyType.php',
+       'tx_extbase_persistence_query' => $extensionClassesPath . 'Persistence/Query.php',
+       'tx_extbase_persistence_queryfactory' => $extensionClassesPath . 'Persistence/QueryFactory.php',
+       'tx_extbase_persistence_queryfactoryinterface' => $extensionClassesPath . 'Persistence/QueryFactoryInterface.php',
+       'tx_extbase_persistence_queryinterface' => $extensionClassesPath . 'Persistence/QueryInterface.php',
+       'tx_extbase_persistence_queryresult' => $extensionClassesPath . 'Persistence/QueryResult.php',
+       'tx_extbase_persistence_queryresultinterface' => $extensionClassesPath . 'Persistence/QueryResultInterface.php',
+       'tx_extbase_persistence_querysettingsinterface' => $extensionClassesPath . 'Persistence/QuerySettingsInterface.php',
+       'tx_extbase_persistence_rangeiterator' => $extensionClassesPath . 'Persistence/RangeIterator.php',
+       'tx_extbase_persistence_rangeiteratorinterface' => $extensionClassesPath . 'Persistence/RangeIteratorInterface.php',
+       'tx_extbase_persistence_repository' => $extensionClassesPath . 'Persistence/Repository.php',
+       'tx_extbase_persistence_repositoryinterface' => $extensionClassesPath . 'Persistence/RepositoryInterface.php',
+       'tx_extbase_persistence_row' => $extensionClassesPath . 'Persistence/Row.php',
+       'tx_extbase_persistence_rowinterface' => $extensionClassesPath . 'Persistence/RowInterface.php',
+       'tx_extbase_persistence_rowiterator' => $extensionClassesPath . 'Persistence/RowIterator.php',
+       'tx_extbase_persistence_rowiteratorinterface' => $extensionClassesPath . 'Persistence/RowIteratorInterface.php',
+       'tx_extbase_persistence_session' => $extensionClassesPath . 'Persistence/Session.php',
+       'tx_extbase_persistence_typo3querysettings' => $extensionClassesPath . 'Persistence/Typo3QuerySettings.php',
+       'tx_extbase_persistence_typo3querysettingsinterface' => $extensionClassesPath . 'Persistence/Typo3QuerySettingsInterface.php',
+       'tx_extbase_persistence_value' => $extensionClassesPath . 'Persistence/Value.php',
+       'tx_extbase_persistence_valuefactory' => $extensionClassesPath . 'Persistence/ValueFactory.php',
+       'tx_extbase_persistence_valuefactoryinterface' => $extensionClassesPath . 'Persistence/ValueFactoryInterface.php',
+       'tx_extbase_persistence_valueinterface' => $extensionClassesPath . 'Persistence/ValueInterface.php',
+       'tx_extbase_persistence_exception_cleanstatenotmemorized' => $extensionClassesPath . 'Persistence/Exception/CleanStateNotMemorized.php',
+       'tx_extbase_persistence_exception_invalidclass' => $extensionClassesPath . 'Persistence/Exception/InvalidClass.php',
+       'tx_extbase_persistence_exception_invalidpropertytype' => $extensionClassesPath . 'Persistence/Exception/InvalidPropertyType.php',
+       'tx_extbase_persistence_exception_missingbackend' => $extensionClassesPath . 'Persistence/Exception/MissingBackend.php',
+       'tx_extbase_persistence_extbase_repositoryexception' => $extensionClassesPath . 'Persistence/Exception/RepositoryException.php',
+       'tx_extbase_persistence_exception_toodirty' => $extensionClassesPath . 'Persistence/Exception/TooDirty.php',
+       'tx_extbase_persistence_exception_unknownobject' => $extensionClassesPath . 'Persistence/Exception/UnknownObject.php',
+       'tx_extbase_persistence_exception_unsupportedmethod' => $extensionClassesPath . 'Persistence/Exception/UnsupportedMethod.php',
+       'tx_extbase_persistence_exception_valueformatexception' => $extensionClassesPath . 'Persistence/Exception/ValueFormatException.php',
+       'tx_extbase_persistence_hook_tcemainvalueobjectupdater' => $extensionClassesPath . 'Persistence/Hook/TCEMainValueObjectUpdater.php',
+       'tx_extbase_persistence_mapper_columnmap' => $extensionClassesPath . 'Persistence/Mapper/ColumnMap.php',
+       'tx_extbase_persistence_mapper_datamap' => $extensionClassesPath . 'Persistence/Mapper/DataMap.php',
+       'tx_extbase_persistence_mapper_datamapper' => $extensionClassesPath . 'Persistence/Mapper/DataMapper.php',
+       'tx_extbase_persistence_qom_andinterface' => $extensionClassesPath . 'Persistence/QOM/AndInterface.php',
+       'tx_extbase_persistence_qom_bindvariablevalue' => $extensionClassesPath . 'Persistence/QOM/BindVariableValue.php',
+       'tx_extbase_persistence_qom_bindvariablevalueinterface' => $extensionClassesPath . 'Persistence/QOM/BindVariableValueInterface.php',
+       'tx_extbase_persistence_qom_childnodejoincondition' => $extensionClassesPath . 'Persistence/QOM/ChildNodeJoinCondition.php',
+       'tx_extbase_persistence_qom_childnodejoinconditioninterface' => $extensionClassesPath . 'Persistence/QOM/EquiJoinConditionInterface.php',
+       'tx_extbase_persistence_qom_comparison' => $extensionClassesPath . 'Persistence/QOM/Comparison.php',
+       'tx_extbase_persistence_qom_comparisoninterface' => $extensionClassesPath . 'Persistence/QOM/ComparisonInterface.php',
+       'tx_extbase_persistence_qom_constraintinterface' => $extensionClassesPath . 'Persistence/QOM/ConstraintInterface.php',
+       'tx_extbase_persistence_qom_dynamicoperand' => $extensionClassesPath . 'Persistence/QOM/DynamicOperand.php',
+       'tx_extbase_persistence_qom_dynamicoperandinterface' => $extensionClassesPath . 'Persistence/QOM/DynamicOperandInterface.php',
+       'tx_extbase_persistence_qom_equijoincondition' => $extensionClassesPath . 'Persistence/QOM/EquiJoinCondition.php',
+       'tx_extbase_persistence_qom_join' => $extensionClassesPath . 'Persistence/QOM/Join.php',
+       'tx_extbase_persistence_qom_joinconditioninterface' => $extensionClassesPath . 'Persistence/QOM/JoinConditionInterface.php',
+       'tx_extbase_persistence_qom_joininterface' => $extensionClassesPath . 'Persistence/QOM/JoinInterface.php',
+       'tx_extbase_persistence_qom_logicaland' => $extensionClassesPath . 'Persistence/QOM/LogicalAnd.php',
+       'tx_extbase_persistence_qom_logicalnot' => $extensionClassesPath . 'Persistence/QOM/LogicalNot.php',
+       'tx_extbase_persistence_qom_logicalor' => $extensionClassesPath . 'Persistence/QOM/LogicalOr.php',
+       'tx_extbase_persistence_qom_lowercase' => $extensionClassesPath . 'Persistence/QOM/LowerCase.php',
+       'tx_extbase_persistence_qom_lowercaseinterface' => $extensionClassesPath . 'Persistence/QOM/LowerCaseInterface.php',
+       'tx_extbase_persistence_qom_notinterface' => $extensionClassesPath . 'Persistence/QOM/NotInterface.php',
+       'tx_extbase_persistence_qom_operand' => $extensionClassesPath . 'Persistence/QOM/Operand.php',
+       'tx_extbase_persistence_qom_operandinterface' => $extensionClassesPath . 'Persistence/QOM/OperandInterface.php',
+       'tx_extbase_persistence_qom_orinterface' => $extensionClassesPath . 'Persistence/QOM/OrInterface.php',
+       'tx_extbase_persistence_qom_ordering' => $extensionClassesPath . 'Persistence/QOM/Ordering.php',
+       'tx_extbase_persistence_qom_orderinginterface' => $extensionClassesPath . 'Persistence/QOM/OrderingInterface.php',
+       'tx_extbase_persistence_qom_propertyvalue' => $extensionClassesPath . 'Persistence/QOM/PropertyValue.php',
+       'tx_extbase_persistence_qom_propertyvalueinterface' => $extensionClassesPath . 'Persistence/QOM/PropertyValueInterface.php',
+       'tx_extbase_persistence_qom_queryobjectmodel' => $extensionClassesPath . 'Persistence/QOM/QueryObjectModel.php',
+       'tx_extbase_persistence_qom_queryobjectmodelconstantsinterface' => $extensionClassesPath . 'Persistence/QOM/QueryObjectModelConstantsInterface.php',
+       'tx_extbase_persistence_qom_queryobjectmodelfactory' => $extensionClassesPath . 'Persistence/QOM/QueryObjectModelFactory.php',
+       'tx_extbase_persistence_qom_queryobjectmodelfactoryinterface' => $extensionClassesPath . 'Persistence/QOM/QueryObjectModelFactoryInterface.php',
+       'tx_extbase_persistence_qom_queryobjectmodelinterface' => $extensionClassesPath . 'Persistence/QOM/QueryObjectModelInterface.php',
+       'tx_extbase_persistence_qom_selector' => $extensionClassesPath . 'Persistence/QOM/Selector.php',
+       'tx_extbase_persistence_qom_selectorinterface' => $extensionClassesPath . 'Persistence/QOM/SelectorInterface.php',
+       'tx_extbase_persistence_qom_sourceinterface' => $extensionClassesPath . 'Persistence/QOM/SourceInterface.php',
+       'tx_extbase_persistence_qom_statement' => $extensionClassesPath . 'Persistence/QOM/Statement.php',
+       'tx_extbase_persistence_qom_statementinterface' => $extensionClassesPath . 'Persistence/QOM/StatementInterface.php',
+       'tx_extbase_persistence_qom_staticoperand' => $extensionClassesPath . 'Persistence/QOM/StaticOperand.php',
+       'tx_extbase_persistence_qom_staticoperandinterface' => $extensionClassesPath . 'Persistence/QOM/StaticOperandInterface.php',
+       'tx_extbase_persistence_qom_uppercase' => $extensionClassesPath . 'Persistence/QOM/UpperCase.php',
+       'tx_extbase_persistence_qom_uppercaseinterface' => $extensionClassesPath . 'Persistence/QOM/UpperCaseInterface.php',
+       'tx_extbase_persistence_storage_backendinterface' => $extensionClassesPath . 'Persistence/Storage/BackendInterface.php',
+       'tx_extbase_persistence_storage_typo3dbbackend' => $extensionClassesPath . 'Persistence/Storage/Typo3DbBackend.php',
+       'tx_extbase_persistence_storage_exception_sqlerror' => $extensionClassesPath . 'Persistence/Storage/Exception/SqlError.php',
+       'tx_extbase_property_exception' => $extensionClassesPath . 'Property/Exception.php',
+       'tx_extbase_property_mapper' => $extensionClassesPath . 'Property/Mapper.php',
+       'tx_extbase_property_mappingresults' => $extensionClassesPath . 'Property/MappingResults.php',
+       'tx_extbase_property_exception_invalidsource' => $extensionClassesPath . 'Property/Exception/InvalidSource.php',
+       'tx_extbase_property_exception_invalidtarget' => $extensionClassesPath . 'Property/Exception/InvalidTarget.php',
+       'tx_extbase_reflection_classreflection' => $extensionClassesPath . 'Reflection/ClassReflection.php',
+       'tx_extbase_reflection_doccommentparser' => $extensionClassesPath . 'Reflection/DocCommentParser.php',
+       'tx_extbase_reflection_exception' => $extensionClassesPath . 'Reflection/Exception.php',
+       'tx_extbase_reflection_methodreflection' => $extensionClassesPath . 'Reflection/MethodReflection.php',
+       'tx_extbase_reflection_objectaccess' => $extensionClassesPath . 'Reflection/ObjectAccess.php',
+       'tx_extbase_reflection_parameterreflection' => $extensionClassesPath . 'Reflection/ParameterReflection.php',
+       'tx_extbase_reflection_propertyreflection' => $extensionClassesPath . 'Reflection/PropertyReflection.php',
+       'tx_extbase_reflection_service' => $extensionClassesPath . 'Reflection/Service.php',
+       'tx_extbase_utility_arrays' => $extensionClassesPath . 'Utility/Arrays.php',
+       'tx_extbase_utility_extension' => $extensionClassesPath . 'Utility/Extension.php',
+       'tx_extbase_utility_plugin' => $extensionClassesPath . 'Utility/Plugin.php',
+       'tx_extbase_utility_typoscript' => $extensionClassesPath . 'Utility/TypoScript.php',
+       'tx_extbase_validation_error' => $extensionClassesPath . 'Validation/Error.php',
+       'tx_extbase_validation_exception' => $extensionClassesPath . 'Validation/Exception.php',
+       'tx_extbase_validation_propertyerror' => $extensionClassesPath . 'Validation/PropertyError.php',
+       'tx_extbase_validation_validatorresolver' => $extensionClassesPath . 'Validation/ValidatorResolver.php',
+       'tx_extbase_validation_exception_invalidsubject' => $extensionClassesPath . 'Validation/Exception/InvalidSubject.php',
+       'tx_extbase_validation_exception_invalidvalidationoptions' => $extensionClassesPath . 'Validation/Exception/InvalidValidationOptions.php',
+       'tx_extbase_validation_exception_nosuchvalidator' => $extensionClassesPath . 'Validation/Exception/NoSuchValidator.php',
+       'tx_extbase_validation_exception_novalidatorfound' => $extensionClassesPath . 'Validation/Exception/NoValidatorFound.php',
+       'tx_extbase_validation_validator_abstractcompositevalidator' => $extensionClassesPath . 'Validation/Validator/AbstractCompositeValidator.php',
+       'tx_extbase_validation_validator_abstractobjectvalidator' => $extensionClassesPath . 'Validation/Validator/AbstractObjectValidator.php',
+       'tx_extbase_validation_validator_abstractvalidator' => $extensionClassesPath . 'Validation/Validator/AbstractValidator.php',
+       'tx_extbase_validation_validator_alphanumericvalidator' => $extensionClassesPath . 'Validation/Validator/AlphanumericValidator.php',
+       'tx_extbase_validation_validator_conjunctionvalidator' => $extensionClassesPath . 'Validation/Validator/ConjunctionValidator.php',
+       'tx_extbase_validation_validator_datetimevalidator' => $extensionClassesPath . 'Validation/Validator/DateTimeValidator.php',
+       'tx_extbase_validation_validator_disjunctionvalidator' => $extensionClassesPath . 'Validation/Validator/DisjunctionValidator.php',
+       'tx_extbase_validation_validator_emailaddressvalidator' => $extensionClassesPath . 'Validation/Validator/EmailAddressValidator.php',
+       'tx_extbase_validation_validator_floatvalidator' => $extensionClassesPath . 'Validation/Validator/FloatValidator.php',
+       'tx_extbase_validation_validator_genericobjectvalidator' => $extensionClassesPath . 'Validation/Validator/GenericObjectValidator.php',
+       'tx_extbase_validation_validator_integervalidator' => $extensionClassesPath . 'Validation/Validator/IntegerValidator.php',
+       'tx_extbase_validation_validator_notemptyvalidator' => $extensionClassesPath . 'Validation/Validator/NotEmptyValidator.php',
+       'tx_extbase_validation_validator_numberrangevalidator' => $extensionClassesPath . 'Validation/Validator/NumberRangeValidator.php',
+       'tx_extbase_validation_validator_numbervalidator' => $extensionClassesPath . 'Validation/Validator/NumberValidator.php',
+       'tx_extbase_validation_validator_objectvalidatorinterface' => $extensionClassesPath . 'Validation/Validator/ObjectValidatorInterface.php',
+       'tx_extbase_validation_validator_rawvalidator' => $extensionClassesPath . 'Validation/Validator/RawValidator.php',
+       'tx_extbase_validation_validator_regularexpressionvalidator' => $extensionClassesPath . 'Validation/Validator/RegularExpressionValidator.php',
+       'tx_extbase_validation_validator_stringlengthvalidator' => $extensionClassesPath . 'Validation/Validator/StringLengthValidator.php',
+       'tx_extbase_validation_validator_textvalidator' => $extensionClassesPath . 'Validation/Validator/TextValidator.php',
+       'tx_extbase_validation_validator_validatorinterface' => $extensionClassesPath . 'Validation/Validator/ValidatorInterface.php',
+       'tx_extbase_view_emptyview' => $extensionClassesPath . 'View/EmptyView.php',
+);
+?>
\ No newline at end of file
index b009a46..e047156 100644 (file)
@@ -2,7 +2,7 @@
 if (!defined ('TYPO3_MODE'))   die ('Access denied.');
 
 require_once(t3lib_extMgm::extPath('extbase') . 'Classes/Dispatcher.php');
-spl_autoload_register(array('Tx_Extbase_Dispatcher', 'autoloadClass'));
+require_once(t3lib_extMgm::extPath('extbase') . 'Classes/Utility/Plugin.php');
 
 $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['Tx_Extbase_Reflection'] = array(
        'backend' => 't3lib_cache_backend_FileBackend',