[+TASK] Extbase: Merging back changes to trunk accidentally committed to tag/1.0.1.
authorJochen Rau <j.rau@web.de>
Mon, 18 Jan 2010 21:31:59 +0000 (21:31 +0000)
committerJochen Rau <j.rau@web.de>
Mon, 18 Jan 2010 21:31:59 +0000 (21:31 +0000)
[+FEATURE] The Configuration Manager respects settings from plugin.tx_myext_pi1.settings , too.
[+TASK] Extbase: Refactored dependencies between objects in persistence layer.
[+BUGFIX] Extbase (DomainObject): Fixed a problem where internal fields (like _isClone) are returned by _getProperties().
[+BUGFIX] Extbase (Tests): Fixed Entity fixture.
[~FEATURE] Extbase (MVC): Transient objects (uid === NULL) are now recursively converted into an array of properties if they are passed as GET/POST arguments (redirect). TODO: This might disclose protected properties. Related to #5769.
[+BUGFIX] Extbase (MVC): The base URI is not added anymore if it is already in place. Thanks to Steffen Ritter who reported this issue. Resolves #5634.
[+BUGFIX] Extbase: It's now checked at several places if there is an object or if an underscore exist in the type name before class_exists() is invoked. This prevents from flooding the syslog with error messages. A fix in Fluid is still pending. Thanks to Steffen Kamper for the initial patch. Resolves #5605.
[~FEATURE] Extbase (MVC): Restricted conversion of DomainObjects into an array of properties if they are passed as GET/POST arguments (redirect) to ValueObjects. If the conversion fails, an Tx_Extbase_MVC_Exception_InvalidArgumentValue is thrown. Relates #5769.
[+BUGFIX] Extbase (Tests): Fixed and refactored test of UriBuilder. We use an inline fixture now.
[+BUGFIX] Extbase (Tests): Some more refactored tests.

21 files changed:
typo3/sysext/extbase/Classes/Configuration/AbstractConfigurationManager.php
typo3/sysext/extbase/Classes/Configuration/FrontendConfigurationManager.php
typo3/sysext/extbase/Classes/Dispatcher.php
typo3/sysext/extbase/Classes/DomainObject/AbstractDomainObject.php
typo3/sysext/extbase/Classes/MVC/Controller/AbstractController.php
typo3/sysext/extbase/Classes/MVC/Controller/Argument.php
typo3/sysext/extbase/Classes/MVC/Web/Routing/UriBuilder.php
typo3/sysext/extbase/Classes/Persistence/Backend.php
typo3/sysext/extbase/Classes/Persistence/Mapper/DataMap.php
typo3/sysext/extbase/Classes/Persistence/Mapper/DataMapper.php
typo3/sysext/extbase/Classes/Persistence/QOM/QueryObjectModel.php
typo3/sysext/extbase/Classes/Persistence/QOM/QueryObjectModelFactory.php
typo3/sysext/extbase/Classes/Persistence/Query.php
typo3/sysext/extbase/Classes/Persistence/QueryFactory.php
typo3/sysext/extbase/Classes/Reflection/Service.php
typo3/sysext/extbase/Classes/Utility/TypoScript.php
typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php
typo3/sysext/extbase/Tests/Fixtures/Entity.php
typo3/sysext/extbase/Tests/MVC/Controller/AbstractController_testcase.php
typo3/sysext/extbase/Tests/MVC/Web/Routing/UriBuilder_testcase.php
typo3/sysext/extbase/ext_emconf.php

index 6ec5693..2ebf284 100644 (file)
@@ -77,11 +77,11 @@ abstract class Tx_Extbase_Configuration_AbstractConfigurationManager {
                        $extbaseConfiguration = Tx_Extbase_Utility_TypoScript::convertTypoScriptArrayToPlainArray($extbaseConfiguration);
                        $frameworkConfiguration = t3lib_div::array_merge_recursive_overrule($frameworkConfiguration, $extbaseConfiguration);
                }
-
+               
                if (isset($pluginConfiguration['settings'])) {
                        $pluginConfiguration = $this->resolveTyposcriptReference($pluginConfiguration, 'settings');
-                       if (!is_array($pluginConfiguration['settings.'])) $pluginConfiguration['settings.'] = array(); // We expect that the settings are arrays on various places
                }
+               if (!is_array($pluginConfiguration['settings.'])) $pluginConfiguration['settings.'] = array(); // We expect that the settings are arrays on various places
                if (isset($pluginConfiguration['persistence'])) {
                        $pluginConfiguration = $this->resolveTyposcriptReference($pluginConfiguration, 'persistence');
                }
@@ -91,7 +91,6 @@ abstract class Tx_Extbase_Configuration_AbstractConfigurationManager {
                if (isset($pluginConfiguration['_LOCAL_LANG'])) {
                        $pluginConfiguration = $this->resolveTyposcriptReference($pluginConfiguration, '_LOCAL_LANG');
                }
-
                $frameworkConfiguration = t3lib_div::array_merge_recursive_overrule($frameworkConfiguration, Tx_Extbase_Utility_TypoScript::convertTypoScriptArrayToPlainArray($pluginConfiguration));
 
                $frameworkConfiguration = $this->getContextSpecificFrameworkConfiguration($frameworkConfiguration);
index 04d9df2..9fcd600 100644 (file)
@@ -65,6 +65,7 @@ class Tx_Extbase_Configuration_FrontendConfigurationManager extends Tx_Extbase_C
         */
        protected function getContextSpecificFrameworkConfiguration($frameworkConfiguration) {
                $frameworkConfiguration = $this->overrideStoragePidIfStartingPointIsSet($frameworkConfiguration);
+               $frameworkConfiguration = $this->overrideConfigurationFromPlugin($frameworkConfiguration);
                $frameworkConfiguration = $this->overrideConfigurationFromFlexform($frameworkConfiguration);
 
                return $frameworkConfiguration;
@@ -91,6 +92,24 @@ class Tx_Extbase_Configuration_FrontendConfigurationManager extends Tx_Extbase_C
        }
 
        /**
+        * Overrides configuration settings from the plugin typoscript (plugin.tx_myext_pi1.)
+        *
+        * @param array the framework configuration
+        * @return array the framework configuration with overridden data from typoscript
+        */
+       protected function overrideConfigurationFromPlugin(array $frameworkConfiguration) {
+               $setup = $this->loadTypoScriptSetup();
+               $pluginConfiguration =  $setup['plugin.']['tx_' . strtolower($frameworkConfiguration['extensionName'] . '_' . $frameworkConfiguration['pluginName']) . '.'];
+               if (is_array($pluginConfiguration)) {
+                       $pluginConfiguration = Tx_Extbase_Utility_TypoScript::convertTypoScriptArrayToPlainArray($pluginConfiguration);
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'settings');
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'persistence');
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'view');
+               }
+               return $frameworkConfiguration;
+       }
+
+       /**
         * Overrides configuration settings from flexforms.
         * This merges the whole flexform data, and overrides switchable controller actions.
         *
@@ -101,9 +120,9 @@ class Tx_Extbase_Configuration_FrontendConfigurationManager extends Tx_Extbase_C
                if (strlen($this->contentObject->data['pi_flexform']) > 0) {
                        $flexformConfiguration = $this->convertFlexformContentToArray($this->contentObject->data['pi_flexform']);
 
-                       $frameworkConfiguration = $this->mergeConfigurationPartFromFlexformIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'settings');
-                       $frameworkConfiguration = $this->mergeConfigurationPartFromFlexformIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'persistence');
-                       $frameworkConfiguration = $this->mergeConfigurationPartFromFlexformIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'view');
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'settings');
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'persistence');
+                       $frameworkConfiguration = $this->mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, 'view');
 
                        $frameworkConfiguration = $this->overrideSwitchableControllerActionsFromFlexform($frameworkConfiguration, $flexformConfiguration);
                }
@@ -148,16 +167,16 @@ class Tx_Extbase_Configuration_FrontendConfigurationManager extends Tx_Extbase_C
        }
 
        /**
-        * Merge a configuration part from the flexform configuration to the framework configuration.
+        * Merge a configuration into the framework configuration.
         *
         * @param array $frameworkConfiguration the framework configuration to merge the data on
-        * @param array $flexformConfiguration The full flexform configuration
+        * @param array $configuration The configuration
         * @param string $configurationPartName The name of the configuration part which should be merged.
         * @return array the processed framework configuration
         */
-       protected function mergeConfigurationPartFromFlexformIntoFrameworkConfiguration($frameworkConfiguration, $flexformConfiguration, $configurationPartName) {
-               if (is_array($flexformConfiguration[$configurationPartName])) {
-                       $frameworkConfiguration[$configurationPartName] = t3lib_div::array_merge_recursive_overrule($frameworkConfiguration[$configurationPartName], $flexformConfiguration[$configurationPartName]);
+       protected function mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $configuration, $configurationPartName) {
+               if (is_array($frameworkConfiguration[$configurationPartName]) && is_array($configuration[$configurationPartName])) {
+                       $frameworkConfiguration[$configurationPartName] = t3lib_div::array_merge_recursive_overrule($frameworkConfiguration[$configurationPartName], $configuration[$configurationPartName]);
                }
                return $frameworkConfiguration;
        }
index 9fce7c2..37a18a9 100644 (file)
@@ -231,7 +231,8 @@ class Tx_Extbase_Dispatcher {
                $propertyMapper = t3lib_div::makeInstance('Tx_Extbase_Property_Mapper');
                $propertyMapper->injectReflectionService(self::$reflectionService);
                $controller->injectPropertyMapper($propertyMapper);
-               $controller->injectSettings(self::$extbaseFrameworkConfiguration['settings']);
+               
+               $controller->injectSettings(!empty(self::$extbaseFrameworkConfiguration['settings']) ? self::$extbaseFrameworkConfiguration['settings'] : array());
 
                $flashMessages = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_FlashMessages'); // singleton
                $flashMessages->reset();
@@ -255,24 +256,26 @@ class Tx_Extbase_Dispatcher {
        public static function getPersistenceManager() {
                if (self::$persistenceManager === NULL) {
                        $identityMap = t3lib_div::makeInstance('Tx_Extbase_Persistence_IdentityMap');
+                       $persistenceSession = t3lib_div::makeInstance('Tx_Extbase_Persistence_Session'); // singleton
 
                        $dataMapper = t3lib_div::makeInstance('Tx_Extbase_Persistence_Mapper_DataMapper'); // singleton
                        $dataMapper->injectIdentityMap($identityMap);
+                       $dataMapper->injectSession($persistenceSession);
                        $dataMapper->injectReflectionService(self::$reflectionService);
 
                        $storageBackend = t3lib_div::makeInstance('Tx_Extbase_Persistence_Storage_Typo3DbBackend', $GLOBALS['TYPO3_DB']); // singleton
                        $storageBackend->injectDataMapper($dataMapper);
-
-                       $qomFactory = t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_QueryObjectModelFactory', $storageBackend, $dataMapper);
-
-                       $persistenceSession = t3lib_div::makeInstance('Tx_Extbase_Persistence_Session'); // singleton
+                       
+                       $qomFactory = t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_QueryObjectModelFactory', $storageBackend);
+                       
+                       $dataMapper->setQomFactory($qomFactory);
 
                        $persistenceBackend = t3lib_div::makeInstance('Tx_Extbase_Persistence_Backend', $persistenceSession, $storageBackend); // singleton
                        $persistenceBackend->injectDataMapper($dataMapper);
                        $persistenceBackend->injectIdentityMap($identityMap);
                        $persistenceBackend->injectReflectionService(self::$reflectionService);
                        $persistenceBackend->injectQueryFactory(t3lib_div::makeInstance('Tx_Extbase_Persistence_QueryFactory'));
-                       $persistenceBackend->injectQOMFactory($qomFactory);
+                       $persistenceBackend->injectQomFactory($qomFactory);
                        $persistenceBackend->injectValueFactory(t3lib_div::makeInstance('Tx_Extbase_Persistence_ValueFactory'));
 
                        $objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_Manager'); // singleton
index deee8d3..7ca212e 100644 (file)
@@ -42,7 +42,7 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * TRUE if the object is a clone
         * @var boolean
         */
-       private $isClone = FALSE;
+       private $_isClone = FALSE;
 
        /**
         * The generic constructor. If you want to implement your own __constructor() method in your Domain Object you have to call
@@ -114,7 +114,11 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         */
        public function _getProperties() {
                $properties = get_object_vars($this);
-               unset($properties['_cleanProperties']);
+               foreach ($properties as $propertyName => $propertyValue) {
+                       if ($propertyName{0} === '_') {
+                               unset($properties[$propertyName]);
+                       }
+               }
                return $properties;
        }
        
@@ -161,7 +165,7 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * @return boolean TRUE if the object has been cloned
         */
        public function _isClone() {
-               return $this->isClone;
+               return $this->_isClone;
        }
 
        /**
@@ -173,7 +177,7 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * @param boolean $clone
         */
        public function _setClone($clone) {
-               $this->isClone = (boolean)$clone;
+               $this->_isClone = (boolean)$clone;
        }
 
        /**
@@ -182,7 +186,8 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * @return void
         */
        public function __clone() {
-               $this->isClone = TRUE;
+               $this->_isClone = TRUE;
        }
+       
 }
 ?>
\ No newline at end of file
index 062cb86..5f09869 100644 (file)
@@ -314,15 +314,27 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
        protected function redirectToURI($uri, $delay = 0, $statusCode = 303) {
                if (!$this->request instanceof Tx_Extbase_MVC_Web_Request) throw new Tx_Extbase_MVC_Exception_UnsupportedRequestType('redirect() only supports web requests.', 1220539734);
 
-               $baseUri = $this->request->getBaseURI();
-
-               $uri = $baseUri . (string)$uri;
+               $uri = $this->addBaseUriIfNecessary($uri);
                $escapedUri = htmlentities($uri, ENT_QUOTES, 'utf-8');
                $this->response->setContent('<html><head><meta http-equiv="refresh" content="' . intval($delay) . ';url=' . $escapedUri . '"/></head></html>');
                $this->response->setStatus($statusCode);
                $this->response->setHeader('Location', (string)$uri);
                throw new Tx_Extbase_MVC_Exception_StopAction();
        }
+       
+       /**
+        * Adds the base uri if not already in place.
+        *
+        * @param string $uri The URI
+        * @return void
+        */
+       protected function addBaseUriIfNecessary($uri) {
+               $baseUri = $this->request->getBaseURI();
+               if(stripos($uri, $baseUri) !== 0) {
+                       $uri = $baseUri . (string)$uri;
+               }
+               return $uri;
+       }
 
        /**
         * Sends the specified HTTP status immediately.
index ff4cae2..8cc73d7 100644 (file)
@@ -142,7 +142,7 @@ class Tx_Extbase_MVC_Controller_Argument {
                $this->reflectionService = t3lib_div::makeInstance('Tx_Extbase_Reflection_Service');
                $this->propertyMapper = t3lib_div::makeInstance('Tx_Extbase_Property_Mapper');
                $this->propertyMapper->injectReflectionService($this->reflectionService);
-               $this->dataTypeClassSchema = $this->reflectionService->getClassSchema($this->dataType);
+               $this->dataTypeClassSchema = (strstr($this->dataType, '_') !== FALSE) ? $this->reflectionService->getClassSchema($this->dataType) : NULL;
        }
 
        /**
index 4389d61..2b516b7 100644 (file)
@@ -422,7 +422,7 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder {
 
                return $this->build();
        }
-
+       
        /**
         * Builds the URI
         * Depending on the current context this calls buildBackendUri() or buildFrontendUri()
@@ -546,14 +546,45 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder {
         */
        protected function convertDomainObjectsToIdentityArrays(array $arguments) {
                foreach ($arguments as $argumentKey => $argumentValue) {
-                       if ($argumentValue instanceof Tx_Extbase_DomainObject_AbstractEntity) {
-                               $arguments[$argumentKey] = $argumentValue->getUid();
+                       if ($argumentValue instanceof Tx_Extbase_DomainObject_AbstractDomainObject) {
+                               if ($argumentValue->getUid() !== NULL) {
+                                       $arguments[$argumentKey] = $argumentValue->getUid();
+                               } elseif ($argumentValue instanceof Tx_Extbase_DomainObject_AbstractValueObject) {
+                                       $arguments[$argumentKey] = $this->convertTransientObjectToArray($argumentValue);
+                               } else {
+                                       throw new Tx_Extbase_MVC_Exception_InvalidArgumentValue('Could not serialize Domain Object ' . get_class($argumentValue) . '. It is neither an Entity with identity properties set, nor a Value Object.', 1260881688);
+                               }
                        } elseif (is_array($argumentValue)) {
                                $arguments[$argumentKey] = $this->convertDomainObjectsToIdentityArrays($argumentValue);
                        }
                }
                return $arguments;
        }
+       
+       /**
+        * Converts a given object recursively into an array.
+        *
+        * @param Tx_Extbase_DomainObject_AbstractDomainObject $object 
+        * @return void
+        */
+       // TODO Refactore this into convertDomainObjectsToIdentityArrays()
+       public function convertTransientObjectToArray(Tx_Extbase_DomainObject_AbstractDomainObject $object) {
+               $result = array();
+               foreach ($object->_getProperties() as $propertyName => $propertyValue) {
+                       if ($propertyValue instanceof Tx_Extbase_DomainObject_AbstractDomainObject) {
+                               if ($propertyValue->getUid() !== NULL) {
+                                       $result[$propertyName] = $propertyValue->getUid();
+                               } else {
+                                       $result[$propertyName] = $this->convertTransientObjectToArray($propertyValue);
+                               }
+                       } elseif (is_array($propertyValue)) {
+                               $result[$propertyName] = $this->convertDomainObjectsToIdentityArrays($propertyValue);
+                       } else {
+                               $result[$propertyName] = $propertyValue;
+                       }
+               }
+               return $result;
+       }
 
 }
 ?>
\ No newline at end of file
index a462d98..779ffab 100644 (file)
@@ -63,7 +63,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
        /**
         * @var Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface
         */
-       protected $QOMFactory;
+       protected $qomFactory;
 
        /**
         * @var Tx_Extbase_Persistence_ValueFactoryInterface
@@ -150,11 +150,11 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
        /**
         * Injects the QueryObjectModelFactory
         *
-        * @param Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface $dataMapper
+        * @param Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface $qomFactory
         * @return void
         */
-       public function injectQOMFactory(Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface $QOMFactory) {
-               $this->QOMFactory = $QOMFactory;
+       public function injectQomFactory(Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface $qomFactory) {
+               $this->qomFactory = $qomFactory;
        }
 
        /**
@@ -190,8 +190,8 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
         *
         * @return Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface
         */
-       public function getQOMFactory() {
-               return $this->QOMFactory;
+       public function getQomFactory() {
+               return $this->qomFactory;
        }
 
        /**
@@ -213,6 +213,15 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
        }
 
        /**
+        * Returns the reflection service
+        *
+        * @return Tx_Extbase_Reflection_Service
+        */
+       public function getReflectionService() {
+               return $this->reflectionService;
+       }
+
+       /**
         * Returns the (internal) identifier for the object, if it is known to the
         * backend. Otherwise NULL is returned.
         *
@@ -345,10 +354,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                
                $properties = $object->_getProperties();
                foreach ($properties as $propertyName => $propertyValue) {
-                       if (!$dataMap->isPersistableProperty($propertyName)) continue;
-                       if (($propertyValue instanceof Tx_Extbase_Persistence_LazyLoadingProxy) || ((get_class($propertyValue) === 'Tx_Extbase_Persistence_LazyObjectStorage') && ($propertyValue->isInitialized() === FALSE))) {
-                               continue;
-                       }
+                       if (!$dataMap->isPersistableProperty($propertyName) || $this->propertyValueIsLazyLoaded($propertyValue)) continue;
                        
                        $columnMap = $dataMap->getColumnMap($propertyName);
                        $childClassName = $columnMap->getChildClassName();
@@ -381,7 +387,7 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                                $row[$columnMap->getColumnName()] = $dataMap->convertPropertyValueToFieldValue($propertyValue);
                        }
                }
-               
+
                if (count($row) > 0) {
                        $this->updateObject($object, $row);
                }
@@ -419,6 +425,16 @@ class Tx_Extbase_Persistence_Backend implements Tx_Extbase_Persistence_BackendIn
                }
        }
        
+       public function propertyValueIsLazyLoaded($propertyValue) {
+               if ($propertyValue instanceof Tx_Extbase_Persistence_LazyLoadingProxy) return TRUE;
+               if (is_object($propertyValue) && get_class($propertyValue) === 'Tx_Extbase_Persistence_LazyObjectStorage') {
+                       if ($propertyValue->isInitialized() === FALSE) {
+                               return TRUE;
+                       }
+               }
+               return FALSE;
+       }
+       
        /**
         * Persists the given value object.
         *
index 88b0687..b444127 100644 (file)
@@ -112,22 +112,19 @@ class Tx_Extbase_Persistence_Mapper_DataMap {
         * @return void
         */
        protected function initialize(array $mapping) {
-               foreach ($this->getColumnsDefinition() as $columnName => $columnDefinition) {
-                       $columnConfiguration = $columnDefinition['config'];
-                       if (!empty($mapping[$columnName]['mapOnProperty'])) {
-                               $propertyName = $mapping[$columnName]['mapOnProperty'];
-                       } else {
-                               $propertyName = Tx_Extbase_Utility_Extension::convertUnderscoredToLowerCamelCase($columnName);
-                       }
-                       if (isset($mapping[$columnName]['foreignClass']) && !isset($columnConfiguration['foreign_class'])) {
-                               $columnConfiguration['foreign_class'] = $mapping[$columnName]['foreignClass'];
-                       }
-                       $columnMap = new Tx_Extbase_Persistence_Mapper_ColumnMap($columnName, $propertyName);
+               $this->addCommonColumns();
+               $columnConfigurations = array();
+               foreach ($this->getColumnsDefinitions() as $columnName => $columnDefinition) {
+                       $columnConfigurations[$columnName] = $columnDefinition['config'];
+                       $columnConfigurations[$columnName]['mapOnProperty'] = Tx_Extbase_Utility_Extension::convertUnderscoredToLowerCamelCase($columnName);
+               }
+               $columnConfigurations = t3lib_div::array_merge_recursive_overrule($columnConfigurations, $mapping);
+               foreach ($columnConfigurations as $columnName => $columnConfiguration) {
+                       $columnMap = new Tx_Extbase_Persistence_Mapper_ColumnMap($columnName, $columnConfiguration['mapOnProperty']);
                        $this->setPropertyType($columnMap, $columnConfiguration);
                        $this->setRelations($columnMap, $columnConfiguration);
                        $this->addColumnMap($columnMap);
                }
-               $this->addCommonColumns();
        }
 
        /**
@@ -136,7 +133,7 @@ class Tx_Extbase_Persistence_Mapper_DataMap {
         * @param string $tableName An optional table name to fetch the columns definition from
         * @return array The TCA columns definition
         */
-       public function getColumnsDefinition($tableName = '') {
+       public function getColumnsDefinitions($tableName = '') {
                $tableName = strlen($tableName) > 0 ? $tableName : $this->getTableName();
                if (TYPO3_MODE === 'FE') {
                        $GLOBALS['TSFE']->includeTCA();
index f0b2d86..86eb86c 100644 (file)
@@ -44,7 +44,7 @@ class Tx_Extbase_Persistence_Mapper_DataMapper implements t3lib_Singleton {
        /**
         * @var Tx_Extbase_Persistence_QOM_QueryObjectModelFactory
         */
-       protected $QOMFactory;
+       protected $QomFactory;
 
        /**
         * @var Tx_Extbase_Persistence_Session
@@ -96,14 +96,13 @@ class Tx_Extbase_Persistence_Mapper_DataMapper implements t3lib_Singleton {
        }
 
        /**
-        * Injects the persistence manager
+        * Injects the persistence session
         *
-        * @param Tx_Extbase_Persistence_ManagerInterface $persistenceManager
+        * @param Tx_Extbase_Persistence_Session $persistenceSession
         * @return void
         */
-       public function injectPersistenceManager(Tx_Extbase_Persistence_ManagerInterface $persistenceManager) {
-               $this->QOMFactory = $persistenceManager->getBackend()->getQOMFactory();
-               $this->persistenceSession = $persistenceManager->getSession();
+       public function injectSession(Tx_Extbase_Persistence_Session $persistenceSession) {
+               $this->persistenceSession = $persistenceSession;
        }
 
        /**
@@ -115,6 +114,16 @@ class Tx_Extbase_Persistence_Mapper_DataMapper implements t3lib_Singleton {
        public function injectReflectionService(Tx_Extbase_Reflection_Service $reflectionService) {
                $this->reflectionService = $reflectionService;
        }
+       
+       /**
+        * Sets the query object model factory
+        *
+        * @param Tx_Extbase_Persistence_QOM_QueryObjectModelFactory $qomFactory
+        * @return void
+        */
+       public function setQomFactory(Tx_Extbase_Persistence_QOM_QueryObjectModelFactory $qomFactory) {
+               $this->qomFactory = $qomFactory;
+       }
 
        /**
         * Maps the (aggregate root) rows and registers them as reconstituted
@@ -283,12 +292,12 @@ class Tx_Extbase_Persistence_Mapper_DataMapper implements t3lib_Singleton {
                        // enableFields and storage page settings.
                        $query->getQuerySettings()->setRespectStoragePage(FALSE);
                        $relationTableName = $columnMap->getRelationTableName();
-                       $left = $this->QOMFactory->selector(NULL, $relationTableName);
+                       $left = $this->qomFactory->selector(NULL, $relationTableName);
                        $childClassName = $this->getElementType($parentObject, $propertyName);
                        $childTableName = $columnMap->getChildTableName();
-                       $right = $this->QOMFactory->selector($childClassName, $childTableName);
-                       $joinCondition = $this->QOMFactory->equiJoinCondition($relationTableName, $columnMap->getChildKeyFieldName(), $childTableName, 'uid');
-                       $source = $this->QOMFactory->join(
+                       $right = $this->qomFactory->selector($childClassName, $childTableName);
+                       $joinCondition = $this->qomFactory->equiJoinCondition($relationTableName, $columnMap->getChildKeyFieldName(), $childTableName, 'uid');
+                       $source = $this->qomFactory->join(
                                $left,
                                $right,
                                Tx_Extbase_Persistence_QOM_QueryObjectModelConstantsInterface::JCR_JOIN_TYPE_INNER,
index 27402ab..92d0ca1 100644 (file)
 class Tx_Extbase_Persistence_QOM_QueryObjectModel implements Tx_Extbase_Persistence_QOM_QueryObjectModelInterface {
 
        /**
-        * @var Tx_Extbase_Persistence_DataMapper
-        */
-       protected $dataMapper;
-
-       /**
         * @var Tx_Extbase_Persistence_QOM_SourceInterface
         */
        protected $source;
@@ -142,16 +137,6 @@ class Tx_Extbase_Persistence_QOM_QueryObjectModel implements Tx_Extbase_Persiste
        }
 
        /**
-        * Injects the Data Mapper to map nodes to objects
-        *
-        * @param Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper
-        * @return void
-        */
-       public function injectDataMapper(Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper) {
-               $this->dataMapper = $dataMapper;
-       }
-
-       /**
         * Sets the Query Settings. These Query settings must match the settings expected by 
         * the specific Storage Backend.
         * 
index 668d895..c5abc02 100644 (file)
@@ -46,9 +46,8 @@ class Tx_Extbase_Persistence_QOM_QueryObjectModelFactory implements Tx_Extbase_P
         * @param Tx_Extbase_Persistence_Storage_BackendInterfasce $storageBackend
         * @param Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper
         */
-       public function __construct(Tx_Extbase_Persistence_Storage_BackendInterface $storageBackend, Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper) {
+       public function __construct(Tx_Extbase_Persistence_Storage_BackendInterface $storageBackend) {
                $this->storageBackend = $storageBackend;
-               $this->dataMapper = $dataMapper;
        }
 
        /**
@@ -71,7 +70,6 @@ class Tx_Extbase_Persistence_QOM_QueryObjectModelFactory implements Tx_Extbase_P
        public function createQuery(Tx_Extbase_Persistence_QOM_SourceInterface $selectorOrSource, $constraint, array $orderings, array $columns) {
                $query =  new Tx_Extbase_Persistence_QOM_QueryObjectModel($selectorOrSource, $constraint, $orderings, $columns);
                $query->injectStorageBackend($this->storageBackend);
-               $query->injectDataMapper($this->dataMapper);
                return $query;
        }
 
index e5134aa..5b177be 100644 (file)
@@ -545,4 +545,4 @@ class Tx_Extbase_Persistence_Query implements Tx_Extbase_Persistence_QueryInterf
        }
 
 }
-?>
+?>
\ No newline at end of file
index 846a6d1..6f62dec 100644 (file)
@@ -42,8 +42,9 @@ class Tx_Extbase_Persistence_QueryFactory implements Tx_Extbase_Persistence_Quer
 
                $dataMapper = t3lib_div::makeInstance('Tx_Extbase_Persistence_Mapper_DataMapper');
                $dataMapper->injectIdentityMap($persistenceManager->getBackend()->getIdentityMap());
-               $dataMapper->injectPersistenceManager($persistenceManager);
-
+               $dataMapper->injectSession($persistenceManager->getSession());
+               $dataMapper->injectReflectionService($persistenceManager->getBackend()->getReflectionService());
+               
                $querySettings = t3lib_div::makeInstance('Tx_Extbase_Persistence_Typo3QuerySettings');
 
                $query = t3lib_div::makeInstance('Tx_Extbase_Persistence_Query', $className);
index 9c99cb2..3ebfef4 100644 (file)
@@ -354,8 +354,8 @@ class Tx_Extbase_Reflection_Service implements t3lib_Singleton {
                                }
                        }
 
-                       foreach ($method->getParameters() as $parameter) {
-                               $this->methodParameters[$className][$methodName][$parameter->getName()] = $this->convertParameterReflectionToArray($parameter, $method);
+                       foreach ($method->getParameters() as $parameterPosition => $parameter) {
+                               $this->methodParameters[$className][$methodName][$parameter->getName()] = $this->convertParameterReflectionToArray($parameter, $parameterPosition, $method);
                        }
                }
                ksort($this->reflectedClassNames);
index 1714c75..ca94b2e 100644 (file)
@@ -46,7 +46,6 @@ class Tx_Extbase_Utility_TypoScript {
         */
        public static function convertTypoScriptArrayToPlainArray(array $settings) {
                $processedSettings = array();
-               // TODO Check if the t3lib_div::removeDotsFromTS() fits for this purpose (using rtrim() for removing trailing dots)
                foreach ($settings as $key => $value) {
                        if (substr($key, -1) === '.') {
                                $keyWithoutDot = substr($key, 0, -1);
index 2a3f684..bceacdb 100644 (file)
@@ -199,7 +199,7 @@ class Tx_Extbase_Validation_ValidatorResolver {
                $validatorConjunction = $this->objectManager->getObject('Tx_Extbase_Validation_Validator_ConjunctionValidator');
 
                // Model based validator
-               if (class_exists($dataType)) {
+               if (strstr($dataType, '_') !== FALSE && class_exists($dataType)) {
                        $validatorCount = 0;
                        $objectValidator = $this->createValidator('GenericObject');
 
@@ -307,7 +307,7 @@ class Tx_Extbase_Validation_ValidatorResolver {
         * @return string Name of the validator object or FALSE
         */
        protected function resolveValidatorObjectName($validatorName) {
-               if (class_exists($validatorName)) return $validatorName;
+               if (is_object($validatorName) && class_exists($validatorName)) return $validatorName;
 
                $possibleClassName = 'Tx_Extbase_Validation_Validator_' . $this->unifyDataType($validatorName) . 'Validator';
                if (class_exists($possibleClassName)) return $possibleClassName;
index b5573bb..505c70a 100644 (file)
@@ -33,7 +33,7 @@
  * @version $ID:$
  * @entity
  */
-class Tx_Extbase_Tests_Fixtures_Entity extends Tx_Extbase_DomainObject_Entity {
+class Tx_Extbase_Tests_Fixtures_Entity extends Tx_Extbase_DomainObject_AbstractEntity {
 
        /**
         * The entity's name
@@ -72,13 +72,5 @@ class Tx_Extbase_Tests_Fixtures_Entity extends Tx_Extbase_DomainObject_Entity {
                return $this->name;
        }
        
-       // /**
-       //  * Mock method
-       //  *
-       //  * @return void
-       //  */
-       // public function _memorizeCleanState() {
-       // }
-
 }
 ?>
\ No newline at end of file
index 030507a..84662ea 100644 (file)
@@ -118,6 +118,36 @@ class Tx_Extbase_MVC_Controller_AbstractController_testcase extends Tx_Extbase_B
 
        /**
         * @test
+        */
+       public function theBaseUriIsAddedIfNotAlreadyExists() {
+               $mockRequest = $this->getMock('Tx_Extbase_MVC_Web_Request');
+               $mockRequest->expects($this->any())->method('getBaseURI')->will($this->returnValue('http://www.example.com/foo/'));
+
+               $controller = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Controller_AbstractController'), array('dummy'), array(), '', FALSE);
+               $controller->_set('request', $mockRequest);
+               $actualResult = $controller->_call('addBaseUriIfNecessary', 'bar/baz/boom.html');
+               $expectedResult = 'http://www.example.com/foo/bar/baz/boom.html';
+               
+               $this->assertEquals($expectedResult, $actualResult);
+       }
+
+       /**
+        * @test
+        */
+       public function theBaseUriIsNotAddedIfAlreadyExists() {
+               $mockRequest = $this->getMock('Tx_Extbase_MVC_Web_Request');
+               $mockRequest->expects($this->any())->method('getBaseURI')->will($this->returnValue('http://www.example.com/foo/'));
+
+               $controller = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Controller_AbstractController'), array('dummy'), array(), '', FALSE);
+               $controller->_set('request', $mockRequest);
+               $actualResult = $controller->_call('addBaseUriIfNecessary', 'http://www.example.com/foo/bar/baz/boom.html');
+               $expectedResult = 'http://www.example.com/foo/bar/baz/boom.html';
+               
+               $this->assertEquals($expectedResult, $actualResult);
+       }
+
+       /**
+        * @test
         * @expectedException Tx_Extbase_MVC_Exception_StopAction
         */
        public function throwStatusSetsTheSpecifiedStatusHeaderAndStopsTheCurrentAction() {
index c2d463a..47f6ded 100644 (file)
@@ -25,6 +25,8 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
+require_once (t3lib_extMgm::extPath('extbase') . 'Tests/Fixtures/Entity.php');
+
 class Tx_Extbase_MVC_Web_Routing_UriBuilder_testcase extends Tx_Extbase_BaseTestCase {
 
        /**
@@ -307,7 +309,7 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder_testcase extends Tx_Extbase_BaseTest
                $this->assertSame($expectedResult, $actualResult);
        }
 
-               /**
+       /**
         * @test
         */
        public function resetSetsAllOptionsToTheirDefaultValue() {
@@ -476,6 +478,85 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder_testcase extends Tx_Extbase_BaseTest
 
                $this->assertEquals($expectedResult, $actualResult);
        }
+       
+       /**
+        * @test
+        */
+       public function conversionOfTansientObjectsIsInvoked() {
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }');
+               $mockValueObject = new $className;
+               $mockValueObject->name = 'foo';
+
+               $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('convertTransientObjectToArray'));
+               $mockUriBuilder->expects($this->once())->method('convertTransientObjectToArray')->will($this->returnValue(array('foo' => 'bar')));
+               $actualResult = $mockUriBuilder->_call('convertDomainObjectsToIdentityArrays', array('object' => $mockValueObject));
+
+               $expectedResult = array('object' => array('foo' => 'bar'));
+               $this->assertEquals($expectedResult, $actualResult);
+       }
+       
+       /**
+        * @test
+        * @expectedException Tx_Extbase_MVC_Exception_InvalidArgumentValue
+        */
+       public function conversionOfTansientObjectsThrowsExceptionForOtherThanValueObjects() {
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractEntity { public $name; public $uid; }');
+               $mockEntity = new $className;
+               $mockEntity->name = 'foo';
+
+               $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy'));
+               $actualResult = $mockUriBuilder->_call('convertDomainObjectsToIdentityArrays', array('object' => $mockEntity));
+       }
+               
+       /**
+        * @test
+        */
+       public function tansientObjectsAreConvertedToAnArrayOfProperties() {
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }');
+               $mockValueObject = new $className;
+               $mockValueObject->name = 'foo';
+               
+               $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy'));
+               $actualResult = $mockUriBuilder->_call('convertTransientObjectToArray', $mockValueObject);
+
+               $expectedResult = array('name' => 'foo', 'uid' => NULL);
+               $this->assertEquals($expectedResult, $actualResult);
+       }
+               
+       /**
+        * @test
+        */
+       public function tansientObjectsAreRecursivelyConverted() {
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }');
+               $mockInnerValueObject2 = new $className;
+               $mockInnerValueObject2->name = 'foo';
+               $mockInnerValueObject2->uid = 99;
+
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $object; public $uid; }');
+               $mockInnerValueObject1 = new $className;
+               $mockInnerValueObject1->object = $mockInnerValueObject2;
+
+               $className = uniqid('Tx_Extbase_Tests_Fixtures_Object');
+               eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $object; public $uid; }');
+               $mockValueObject = new $className;
+               $mockValueObject->object = $mockInnerValueObject1;
+
+               $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy'));
+               $actualResult = $mockUriBuilder->_call('convertTransientObjectToArray', $mockValueObject);
+
+               $expectedResult = array(
+                       'object' => array(
+                               'object' => 99,
+                               'uid' => NULL),
+                       'uid' => NULL);
+               $this->assertEquals($expectedResult, $actualResult);
+       }
+               
 
 }
 ?>
index 3135e5d..25e57c3 100644 (file)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "extbase".
 #
-# Auto generated 17-11-2009 22:21
+# Auto generated 25-11-2009 23:21
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
@@ -29,7 +29,7 @@ $EM_CONF[$_EXTKEY] = array(
        'clearCacheOnLoad' => 0,
        'lockType' => '',
        'author_company' => 'TYPO3 core team',
-       'version' => '1.0.0',
+       'version' => '1.0.2',
        'constraints' => array(
                'depends' => array(
                        'php' => '5.2.0-0.0.0',
@@ -42,7 +42,7 @@ $EM_CONF[$_EXTKEY] = array(
        ),
        'suggests' => array(
        ),
-       '_md5_values_when_last_written' => 'a:280:{s:17:"RELEASE_NOTES.txt";s:4:"a3ac";s:16:"ext_autoload.php";s:4:"5b90";s:12:"ext_icon.gif";s:4:"e922";s:17:"ext_localconf.php";s:4:"6130";s:14:"ext_tables.php";s:4:"4601";s:14:"ext_tables.sql";s:4:"c6a7";s:24:"ext_typoscript_setup.txt";s:4:"f395";s:22:"Classes/Dispatcher.php";s:4:"74aa";s:21:"Classes/Exception.php";s:4:"c346";s:54:"Classes/Configuration/AbstractConfigurationManager.php";s:4:"9a4c";s:53:"Classes/Configuration/BackendConfigurationManager.php";s:4:"1741";s:35:"Classes/Configuration/Exception.php";s:4:"31e6";s:54:"Classes/Configuration/FrontendConfigurationManager.php";s:4:"660e";s:53:"Classes/Configuration/Exception/ContainerIsLocked.php";s:4:"a34d";s:60:"Classes/Configuration/Exception/InvalidConfigurationType.php";s:4:"e100";s:46:"Classes/Configuration/Exception/NoSuchFile.php";s:4:"ba93";s:48:"Classes/Configuration/Exception/NoSuchOption.php";s:4:"1369";s:46:"Classes/Configuration/Exception/ParseError.php";s:4:"da56";s:37:"Classes/Domain/Model/FrontendUser.php";s:4:"3744";s:42:"Classes/Domain/Model/FrontendUserGroup.php";s:4:"f356";s:57:"Classes/Domain/Repository/FrontendUserGroupRepository.php";s:4:"398e";s:52:"Classes/Domain/Repository/FrontendUserRepository.php";s:4:"3a9d";s:45:"Classes/DomainObject/AbstractDomainObject.php";s:4:"4df2";s:39:"Classes/DomainObject/AbstractEntity.php";s:4:"de7f";s:44:"Classes/DomainObject/AbstractValueObject.php";s:4:"31b1";s:46:"Classes/DomainObject/DomainObjectInterface.php";s:4:"9977";s:23:"Classes/Error/Error.php";s:4:"e875";s:25:"Classes/MVC/Exception.php";s:4:"606f";s:23:"Classes/MVC/Request.php";s:4:"f11e";s:32:"Classes/MVC/RequestInterface.php";s:4:"deba";s:24:"Classes/MVC/Response.php";s:4:"1f30";s:33:"Classes/MVC/ResponseInterface.php";s:4:"0b68";s:45:"Classes/MVC/Controller/AbstractController.php";s:4:"e6d6";s:43:"Classes/MVC/Controller/ActionController.php";s:4:"b987";s:35:"Classes/MVC/Controller/Argument.php";s:4:"b82f";s:40:"Classes/MVC/Controller/ArgumentError.php";s:4:"3498";s:36:"Classes/MVC/Controller/Arguments.php";s:4:"20ff";s:45:"Classes/MVC/Controller/ArgumentsValidator.php";s:4:"e859";s:44:"Classes/MVC/Controller/ControllerContext.php";s:4:"610f";s:46:"Classes/MVC/Controller/ControllerInterface.php";s:4:"99d2";s:40:"Classes/MVC/Controller/FlashMessages.php";s:4:"7cf4";s:38:"Classes/MVC/Exception/InfiniteLoop.php";s:4:"7f60";s:43:"Classes/MVC/Exception/InvalidActionName.php";s:4:"73e8";s:45:"Classes/MVC/Exception/InvalidArgumentName.php";s:4:"e66f";s:45:"Classes/MVC/Exception/InvalidArgumentType.php";s:4:"766c";s:46:"Classes/MVC/Exception/InvalidArgumentValue.php";s:4:"b8fc";s:43:"Classes/MVC/Exception/InvalidController.php";s:4:"2819";s:47:"Classes/MVC/Exception/InvalidControllerName.php";s:4:"a435";s:46:"Classes/MVC/Exception/InvalidExtensionName.php";s:4:"ed0e";s:39:"Classes/MVC/Exception/InvalidMarker.php";s:4:"848e";s:48:"Classes/MVC/Exception/InvalidOrNoRequestHash.php";s:4:"c72c";s:46:"Classes/MVC/Exception/InvalidRequestMethod.php";s:4:"1a40";s:44:"Classes/MVC/Exception/InvalidRequestType.php";s:4:"2b21";s:49:"Classes/MVC/Exception/InvalidTemplateResource.php";s:4:"4655";s:43:"Classes/MVC/Exception/InvalidUriPattern.php";s:4:"adfa";s:43:"Classes/MVC/Exception/InvalidViewHelper.php";s:4:"fa39";s:38:"Classes/MVC/Exception/NoSuchAction.php";s:4:"c917";s:40:"Classes/MVC/Exception/NoSuchArgument.php";s:4:"6f97";s:42:"Classes/MVC/Exception/NoSuchController.php";s:4:"b3e6";s:36:"Classes/MVC/Exception/StopAction.php";s:4:"e705";s:48:"Classes/MVC/Exception/UnsupportedRequestType.php";s:4:"1c56";s:33:"Classes/MVC/View/AbstractView.php";s:4:"0ac2";s:30:"Classes/MVC/View/EmptyView.php";s:4:"08bf";s:34:"Classes/MVC/View/ViewInterface.php";s:4:"a38b";s:27:"Classes/MVC/Web/Request.php";s:4:"1934";s:34:"Classes/MVC/Web/RequestBuilder.php";s:4:"0954";s:28:"Classes/MVC/Web/Response.php";s:4:"cf34";s:38:"Classes/MVC/Web/Routing/UriBuilder.php";s:4:"1ddb";s:28:"Classes/Object/Exception.php";s:4:"8f00";s:26:"Classes/Object/Manager.php";s:4:"6490";s:35:"Classes/Object/ManagerInterface.php";s:4:"f938";s:36:"Classes/Object/RegistryInterface.php";s:4:"c1c0";s:36:"Classes/Object/TransientRegistry.php";s:4:"dbc0";s:46:"Classes/Object/Exception/CannotBuildObject.php";s:4:"6341";s:53:"Classes/Object/Exception/CannotReconstituteObject.php";s:4:"b9d1";s:41:"Classes/Object/Exception/InvalidClass.php";s:4:"0af2";s:42:"Classes/Object/Exception/InvalidObject.php";s:4:"0a69";s:55:"Classes/Object/Exception/InvalidObjectConfiguration.php";s:4:"b87b";s:52:"Classes/Object/Exception/ObjectAlreadyRegistered.php";s:4:"469f";s:41:"Classes/Object/Exception/UnknownClass.php";s:4:"b067";s:45:"Classes/Object/Exception/UnknownInterface.php";s:4:"3380";s:42:"Classes/Object/Exception/UnknownObject.php";s:4:"e7a1";s:51:"Classes/Object/Exception/UnresolvedDependencies.php";s:4:"5d23";s:39:"Classes/Object/Exception/WrongScope.php";s:4:"1c70";s:31:"Classes/Persistence/Backend.php";s:4:"0d07";s:40:"Classes/Persistence/BackendInterface.php";s:4:"9a44";s:33:"Classes/Persistence/Exception.php";s:4:"1713";s:35:"Classes/Persistence/IdentityMap.php";s:4:"fe01";s:41:"Classes/Persistence/IteratorInterface.php";s:4:"98cf";s:40:"Classes/Persistence/LazyLoadingProxy.php";s:4:"7715";s:41:"Classes/Persistence/LazyObjectStorage.php";s:4:"6a54";s:48:"Classes/Persistence/LoadingStrategyInterface.php";s:4:"6b1b";s:31:"Classes/Persistence/Manager.php";s:4:"0e41";s:40:"Classes/Persistence/ManagerInterface.php";s:4:"8af3";s:37:"Classes/Persistence/ObjectStorage.php";s:4:"46db";s:36:"Classes/Persistence/PropertyType.php";s:4:"d38d";s:29:"Classes/Persistence/Query.php";s:4:"50c1";s:36:"Classes/Persistence/QueryFactory.php";s:4:"e6a2";s:45:"Classes/Persistence/QueryFactoryInterface.php";s:4:"11ad";s:38:"Classes/Persistence/QueryInterface.php";s:4:"15b2";s:35:"Classes/Persistence/QueryResult.php";s:4:"9f30";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"d4cf";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"18ad";s:37:"Classes/Persistence/RangeIterator.php";s:4:"3e46";s:46:"Classes/Persistence/RangeIteratorInterface.php";s:4:"bf1f";s:34:"Classes/Persistence/Repository.php";s:4:"b26e";s:43:"Classes/Persistence/RepositoryInterface.php";s:4:"164f";s:27:"Classes/Persistence/Row.php";s:4:"8807";s:36:"Classes/Persistence/RowInterface.php";s:4:"7cb9";s:35:"Classes/Persistence/RowIterator.php";s:4:"5470";s:44:"Classes/Persistence/RowIteratorInterface.php";s:4:"04a8";s:31:"Classes/Persistence/Session.php";s:4:"43b4";s:42:"Classes/Persistence/Typo3QuerySettings.php";s:4:"2f14";s:51:"Classes/Persistence/Typo3QuerySettingsInterface.php";s:4:"698e";s:29:"Classes/Persistence/Value.php";s:4:"6459";s:36:"Classes/Persistence/ValueFactory.php";s:4:"1639";s:45:"Classes/Persistence/ValueFactoryInterface.php";s:4:"9579";s:38:"Classes/Persistence/ValueInterface.php";s:4:"d718";s:56:"Classes/Persistence/Exception/CleanStateNotMemorized.php";s:4:"7689";s:51:"Classes/Persistence/Exception/IllegalObjectType.php";s:4:"73e7";s:46:"Classes/Persistence/Exception/InvalidClass.php";s:4:"761b";s:53:"Classes/Persistence/Exception/InvalidPropertyType.php";s:4:"cd9a";s:48:"Classes/Persistence/Exception/MissingBackend.php";s:4:"1d0d";s:53:"Classes/Persistence/Exception/RepositoryException.php";s:4:"e94a";s:42:"Classes/Persistence/Exception/TooDirty.php";s:4:"3347";s:57:"Classes/Persistence/Exception/UnexpectedTypeException.php";s:4:"5b57";s:47:"Classes/Persistence/Exception/UnknownObject.php";s:4:"21a6";s:51:"Classes/Persistence/Exception/UnsupportedMethod.php";s:4:"9915";s:50:"Classes/Persistence/Exception/UnsupportedOrder.php";s:4:"f4b9";s:54:"Classes/Persistence/Exception/ValueFormatException.php";s:4:"46b2";s:40:"Classes/Persistence/Mapper/ColumnMap.php";s:4:"801f";s:38:"Classes/Persistence/Mapper/DataMap.php";s:4:"901d";s:41:"Classes/Persistence/Mapper/DataMapper.php";s:4:"0c7b";s:40:"Classes/Persistence/QOM/AndInterface.php";s:4:"7ec4";s:45:"Classes/Persistence/QOM/BindVariableValue.php";s:4:"474c";s:54:"Classes/Persistence/QOM/BindVariableValueInterface.php";s:4:"cd54";s:38:"Classes/Persistence/QOM/Comparison.php";s:4:"1c3f";s:47:"Classes/Persistence/QOM/ComparisonInterface.php";s:4:"2412";s:47:"Classes/Persistence/QOM/ConstraintInterface.php";s:4:"63a3";s:42:"Classes/Persistence/QOM/DynamicOperand.php";s:4:"9687";s:51:"Classes/Persistence/QOM/DynamicOperandInterface.php";s:4:"fe69";s:45:"Classes/Persistence/QOM/EquiJoinCondition.php";s:4:"5ceb";s:54:"Classes/Persistence/QOM/EquiJoinConditionInterface.php";s:4:"6121";s:32:"Classes/Persistence/QOM/Join.php";s:4:"3b6e";s:50:"Classes/Persistence/QOM/JoinConditionInterface.php";s:4:"90a2";s:41:"Classes/Persistence/QOM/JoinInterface.php";s:4:"1807";s:38:"Classes/Persistence/QOM/LogicalAnd.php";s:4:"42e6";s:38:"Classes/Persistence/QOM/LogicalNot.php";s:4:"ae53";s:37:"Classes/Persistence/QOM/LogicalOr.php";s:4:"eb0a";s:37:"Classes/Persistence/QOM/LowerCase.php";s:4:"2f37";s:46:"Classes/Persistence/QOM/LowerCaseInterface.php";s:4:"6e14";s:40:"Classes/Persistence/QOM/NotInterface.php";s:4:"7fd8";s:35:"Classes/Persistence/QOM/Operand.php";s:4:"e399";s:44:"Classes/Persistence/QOM/OperandInterface.php";s:4:"2f95";s:39:"Classes/Persistence/QOM/OrInterface.php";s:4:"7b9e";s:36:"Classes/Persistence/QOM/Ordering.php";s:4:"6bbf";s:45:"Classes/Persistence/QOM/OrderingInterface.php";s:4:"4de2";s:41:"Classes/Persistence/QOM/PropertyValue.php";s:4:"8149";s:50:"Classes/Persistence/QOM/PropertyValueInterface.php";s:4:"bf14";s:44:"Classes/Persistence/QOM/QueryObjectModel.php";s:4:"9258";s:62:"Classes/Persistence/QOM/QueryObjectModelConstantsInterface.php";s:4:"3ca2";s:51:"Classes/Persistence/QOM/QueryObjectModelFactory.php";s:4:"64fd";s:60:"Classes/Persistence/QOM/QueryObjectModelFactoryInterface.php";s:4:"16e8";s:53:"Classes/Persistence/QOM/QueryObjectModelInterface.php";s:4:"ba34";s:36:"Classes/Persistence/QOM/Selector.php";s:4:"6c0b";s:45:"Classes/Persistence/QOM/SelectorInterface.php";s:4:"c568";s:43:"Classes/Persistence/QOM/SourceInterface.php";s:4:"c09a";s:37:"Classes/Persistence/QOM/Statement.php";s:4:"224f";s:46:"Classes/Persistence/QOM/StatementInterface.php";s:4:"f1a0";s:41:"Classes/Persistence/QOM/StaticOperand.php";s:4:"536e";s:50:"Classes/Persistence/QOM/StaticOperandInterface.php";s:4:"157c";s:37:"Classes/Persistence/QOM/UpperCase.php";s:4:"8ba2";s:46:"Classes/Persistence/QOM/UpperCaseInterface.php";s:4:"4392";s:48:"Classes/Persistence/Storage/BackendInterface.php";s:4:"ac06";s:46:"Classes/Persistence/Storage/Typo3DbBackend.php";s:4:"3935";s:55:"Classes/Persistence/Storage/Exception/BadConstraint.php";s:4:"3a87";s:50:"Classes/Persistence/Storage/Exception/SqlError.php";s:4:"850b";s:30:"Classes/Property/Exception.php";s:4:"e64b";s:27:"Classes/Property/Mapper.php";s:4:"7bdb";s:35:"Classes/Property/MappingResults.php";s:4:"abac";s:49:"Classes/Property/Exception/FormatNotSupported.php";s:4:"50b1";s:46:"Classes/Property/Exception/InvalidDataType.php";s:4:"76ad";s:44:"Classes/Property/Exception/InvalidFormat.php";s:4:"432e";s:46:"Classes/Property/Exception/InvalidProperty.php";s:4:"e4c0";s:44:"Classes/Property/Exception/InvalidSource.php";s:4:"4067";s:44:"Classes/Property/Exception/InvalidTarget.php";s:4:"5bc8";s:38:"Classes/Reflection/ClassReflection.php";s:4:"4763";s:34:"Classes/Reflection/ClassSchema.php";s:4:"2e23";s:39:"Classes/Reflection/DocCommentParser.php";s:4:"fd1a";s:32:"Classes/Reflection/Exception.php";s:4:"ec59";s:39:"Classes/Reflection/MethodReflection.php";s:4:"32fd";s:35:"Classes/Reflection/ObjectAccess.php";s:4:"0c55";s:42:"Classes/Reflection/ParameterReflection.php";s:4:"351b";s:41:"Classes/Reflection/PropertyReflection.php";s:4:"d5fd";s:30:"Classes/Reflection/Service.php";s:4:"3a7e";s:52:"Classes/Reflection/Exception/InvalidPropertyType.php";s:4:"9520";s:30:"Classes/Security/Exception.php";s:4:"a46d";s:47:"Classes/Security/Channel/RequestHashService.php";s:4:"ac39";s:45:"Classes/Security/Cryptography/HashService.php";s:4:"2948";s:63:"Classes/Security/Exception/InvalidArgumentForHashGeneration.php";s:4:"5cca";s:70:"Classes/Security/Exception/InvalidArgumentForRequestHashGeneration.php";s:4:"095d";s:60:"Classes/Security/Exception/SyntacticallyWrongRequestHash.php";s:4:"2735";s:26:"Classes/Utility/Arrays.php";s:4:"7a7b";s:25:"Classes/Utility/Cache.php";s:4:"7f6e";s:31:"Classes/Utility/ClassLoader.php";s:4:"4dd5";s:44:"Classes/Utility/ExtbaseRequirementsCheck.php";s:4:"1fb8";s:29:"Classes/Utility/Extension.php";s:4:"5cf5";s:32:"Classes/Utility/Localization.php";s:4:"446f";s:30:"Classes/Utility/TypoScript.php";s:4:"5bdc";s:28:"Classes/Validation/Error.php";s:4:"247a";s:32:"Classes/Validation/Exception.php";s:4:"44f8";s:36:"Classes/Validation/PropertyError.php";s:4:"4950";s:40:"Classes/Validation/ValidatorResolver.php";s:4:"c781";s:47:"Classes/Validation/Exception/InvalidSubject.php";s:4:"5040";s:63:"Classes/Validation/Exception/InvalidValidationConfiguration.php";s:4:"9cfa";s:57:"Classes/Validation/Exception/InvalidValidationOptions.php";s:4:"a3a8";s:48:"Classes/Validation/Exception/NoSuchValidator.php";s:4:"64f4";s:49:"Classes/Validation/Exception/NoValidatorFound.php";s:4:"be96";s:59:"Classes/Validation/Validator/AbstractCompositeValidator.php";s:4:"9f23";s:56:"Classes/Validation/Validator/AbstractObjectValidator.php";s:4:"cd9a";s:50:"Classes/Validation/Validator/AbstractValidator.php";s:4:"8477";s:54:"Classes/Validation/Validator/AlphanumericValidator.php";s:4:"315b";s:53:"Classes/Validation/Validator/ConjunctionValidator.php";s:4:"0e35";s:50:"Classes/Validation/Validator/DateTimeValidator.php";s:4:"2791";s:53:"Classes/Validation/Validator/DisjunctionValidator.php";s:4:"0ee7";s:54:"Classes/Validation/Validator/EmailAddressValidator.php";s:4:"a42e";s:47:"Classes/Validation/Validator/FloatValidator.php";s:4:"8122";s:55:"Classes/Validation/Validator/GenericObjectValidator.php";s:4:"2a06";s:49:"Classes/Validation/Validator/IntegerValidator.php";s:4:"d60c";s:50:"Classes/Validation/Validator/NotEmptyValidator.php";s:4:"3169";s:53:"Classes/Validation/Validator/NumberRangeValidator.php";s:4:"8374";s:48:"Classes/Validation/Validator/NumberValidator.php";s:4:"cd21";s:57:"Classes/Validation/Validator/ObjectValidatorInterface.php";s:4:"e28e";s:45:"Classes/Validation/Validator/RawValidator.php";s:4:"a4e6";s:59:"Classes/Validation/Validator/RegularExpressionValidator.php";s:4:"34cb";s:54:"Classes/Validation/Validator/StringLengthValidator.php";s:4:"246b";s:48:"Classes/Validation/Validator/StringValidator.php";s:4:"8c60";s:46:"Classes/Validation/Validator/TextValidator.php";s:4:"b359";s:51:"Classes/Validation/Validator/ValidatorInterface.php";s:4:"1c82";s:24:"Documentation/README.txt";s:4:"35d4";s:22:"Tests/BaseTestCase.php";s:4:"8548";s:61:"Tests/Configuration/AbstractConfigurationManager_testcase.php";s:4:"c888";s:60:"Tests/Configuration/BackendConfigurationManager_testcase.php";s:4:"8fa5";s:61:"Tests/Configuration/FrontendConfigurationManager_testcase.php";s:4:"d1d2";s:54:"Tests/Configuration/Source/FlexFormSource_testcase.php";s:4:"24c1";s:56:"Tests/Configuration/Source/TypoScriptSource_testcase.php";s:4:"7ec2";s:46:"Tests/DomainObject/AbstractEntity_testcase.php";s:4:"8c6a";s:25:"Tests/Fixtures/Entity.php";s:4:"8af7";s:52:"Tests/MVC/Controller/AbstractController_testcase.php";s:4:"7d2c";s:50:"Tests/MVC/Controller/ActionController_testcase.php";s:4:"107d";s:42:"Tests/MVC/Controller/Argument_testcase.php";s:4:"edaa";s:43:"Tests/MVC/Controller/Arguments_testcase.php";s:4:"5bb9";s:41:"Tests/MVC/Web/RequestBuilder_testcase.php";s:4:"afee";s:45:"Tests/MVC/Web/Routing/UriBuilder_testcase.php";s:4:"70a7";s:44:"Tests/Persistence/ObjectStorage_testcase.php";s:4:"5a12";s:36:"Tests/Persistence/Query_testcase.php";s:4:"249e";s:41:"Tests/Persistence/Repository_testcase.php";s:4:"c0f8";s:38:"Tests/Persistence/Session_testcase.php";s:4:"6f9f";s:45:"Tests/Persistence/Mapper/DataMap_testcase.php";s:4:"98ec";s:53:"Tests/Persistence/Storage/Typo3DbBackend_testcase.php";s:4:"effd";s:37:"Tests/Reflection/Service_testcase.php";s:4:"b1e1";s:54:"Tests/Security/Channel/RequestHashService_testcase.php";s:4:"3e9a";s:52:"Tests/Security/Cryptography/HashService_testcase.php";s:4:"74a3";s:36:"Tests/Utility/Extension_testcase.php";s:4:"cace";s:37:"Tests/Utility/TypoScript_testcase.php";s:4:"7324";s:47:"Tests/Validation/ValidatorResolver_testcase.php";s:4:"b2f6";s:61:"Tests/Validation/Validator/AlphanumericValidator_testcase.php";s:4:"313c";s:60:"Tests/Validation/Validator/ConjunctionValidator_testcase.php";s:4:"db45";s:57:"Tests/Validation/Validator/DateTimeValidator_testcase.php";s:4:"62c8";s:61:"Tests/Validation/Validator/EmailAddressValidator_testcase.php";s:4:"7f92";s:54:"Tests/Validation/Validator/FloatValidator_testcase.php";s:4:"4f3b";s:62:"Tests/Validation/Validator/GenericObjectValidator_testcase.php";s:4:"c0d2";s:56:"Tests/Validation/Validator/IntegerValidator_testcase.php";s:4:"b3b7";s:57:"Tests/Validation/Validator/NotEmptyValidator_testcase.php";s:4:"b714";s:60:"Tests/Validation/Validator/NumberRangeValidator_testcase.php";s:4:"70ec";s:55:"Tests/Validation/Validator/NumberValidator_testcase.php";s:4:"af8b";s:52:"Tests/Validation/Validator/RawValidator_testcase.php";s:4:"2fe1";s:66:"Tests/Validation/Validator/RegularExpressionValidator_testcase.php";s:4:"1aa9";s:61:"Tests/Validation/Validator/StringLengthValidator_testcase.php";s:4:"5afc";s:53:"Tests/Validation/Validator/TextValidator_testcase.php";s:4:"5454";}',
+       '_md5_values_when_last_written' => 'a:278:{s:17:"RELEASE_NOTES.txt";s:4:"a3ac";s:16:"ext_autoload.php";s:4:"5b90";s:12:"ext_icon.gif";s:4:"e922";s:17:"ext_localconf.php";s:4:"6130";s:14:"ext_tables.php";s:4:"6271";s:14:"ext_tables.sql";s:4:"c6a7";s:24:"ext_typoscript_setup.txt";s:4:"f395";s:14:"svn-commit.tmp";s:4:"aa6b";s:22:"Classes/Dispatcher.php";s:4:"05f1";s:21:"Classes/Exception.php";s:4:"c346";s:54:"Classes/Configuration/AbstractConfigurationManager.php";s:4:"9a4c";s:53:"Classes/Configuration/BackendConfigurationManager.php";s:4:"1741";s:35:"Classes/Configuration/Exception.php";s:4:"31e6";s:54:"Classes/Configuration/FrontendConfigurationManager.php";s:4:"660e";s:53:"Classes/Configuration/Exception/ContainerIsLocked.php";s:4:"a34d";s:60:"Classes/Configuration/Exception/InvalidConfigurationType.php";s:4:"e100";s:46:"Classes/Configuration/Exception/NoSuchFile.php";s:4:"ba93";s:48:"Classes/Configuration/Exception/NoSuchOption.php";s:4:"1369";s:46:"Classes/Configuration/Exception/ParseError.php";s:4:"da56";s:37:"Classes/Domain/Model/FrontendUser.php";s:4:"bf08";s:42:"Classes/Domain/Model/FrontendUserGroup.php";s:4:"f606";s:57:"Classes/Domain/Repository/FrontendUserGroupRepository.php";s:4:"0b75";s:52:"Classes/Domain/Repository/FrontendUserRepository.php";s:4:"82e9";s:45:"Classes/DomainObject/AbstractDomainObject.php";s:4:"4df2";s:39:"Classes/DomainObject/AbstractEntity.php";s:4:"de7f";s:44:"Classes/DomainObject/AbstractValueObject.php";s:4:"42f0";s:46:"Classes/DomainObject/DomainObjectInterface.php";s:4:"9977";s:23:"Classes/Error/Error.php";s:4:"d136";s:25:"Classes/MVC/Exception.php";s:4:"606f";s:23:"Classes/MVC/Request.php";s:4:"f11e";s:32:"Classes/MVC/RequestInterface.php";s:4:"09c5";s:24:"Classes/MVC/Response.php";s:4:"1f30";s:33:"Classes/MVC/ResponseInterface.php";s:4:"3c5e";s:45:"Classes/MVC/Controller/AbstractController.php";s:4:"e6d6";s:43:"Classes/MVC/Controller/ActionController.php";s:4:"b987";s:35:"Classes/MVC/Controller/Argument.php";s:4:"b82f";s:40:"Classes/MVC/Controller/ArgumentError.php";s:4:"501b";s:36:"Classes/MVC/Controller/Arguments.php";s:4:"20ff";s:45:"Classes/MVC/Controller/ArgumentsValidator.php";s:4:"e859";s:44:"Classes/MVC/Controller/ControllerContext.php";s:4:"dc69";s:46:"Classes/MVC/Controller/ControllerInterface.php";s:4:"99d2";s:40:"Classes/MVC/Controller/FlashMessages.php";s:4:"ef89";s:38:"Classes/MVC/Exception/InfiniteLoop.php";s:4:"7f60";s:43:"Classes/MVC/Exception/InvalidActionName.php";s:4:"73e8";s:45:"Classes/MVC/Exception/InvalidArgumentName.php";s:4:"e66f";s:45:"Classes/MVC/Exception/InvalidArgumentType.php";s:4:"766c";s:46:"Classes/MVC/Exception/InvalidArgumentValue.php";s:4:"b8fc";s:43:"Classes/MVC/Exception/InvalidController.php";s:4:"2819";s:47:"Classes/MVC/Exception/InvalidControllerName.php";s:4:"a435";s:46:"Classes/MVC/Exception/InvalidExtensionName.php";s:4:"ed0e";s:39:"Classes/MVC/Exception/InvalidMarker.php";s:4:"848e";s:48:"Classes/MVC/Exception/InvalidOrNoRequestHash.php";s:4:"124a";s:46:"Classes/MVC/Exception/InvalidRequestMethod.php";s:4:"1a40";s:44:"Classes/MVC/Exception/InvalidRequestType.php";s:4:"2b21";s:49:"Classes/MVC/Exception/InvalidTemplateResource.php";s:4:"4655";s:43:"Classes/MVC/Exception/InvalidUriPattern.php";s:4:"adfa";s:43:"Classes/MVC/Exception/InvalidViewHelper.php";s:4:"fa39";s:38:"Classes/MVC/Exception/NoSuchAction.php";s:4:"c917";s:40:"Classes/MVC/Exception/NoSuchArgument.php";s:4:"6f97";s:42:"Classes/MVC/Exception/NoSuchController.php";s:4:"b3e6";s:36:"Classes/MVC/Exception/StopAction.php";s:4:"e705";s:48:"Classes/MVC/Exception/UnsupportedRequestType.php";s:4:"1c56";s:33:"Classes/MVC/View/AbstractView.php";s:4:"0ac2";s:30:"Classes/MVC/View/EmptyView.php";s:4:"00cd";s:34:"Classes/MVC/View/ViewInterface.php";s:4:"a38b";s:27:"Classes/MVC/Web/Request.php";s:4:"1934";s:34:"Classes/MVC/Web/RequestBuilder.php";s:4:"0954";s:28:"Classes/MVC/Web/Response.php";s:4:"9564";s:38:"Classes/MVC/Web/Routing/UriBuilder.php";s:4:"1ddb";s:28:"Classes/Object/Exception.php";s:4:"bab4";s:26:"Classes/Object/Manager.php";s:4:"c356";s:35:"Classes/Object/ManagerInterface.php";s:4:"7b3c";s:36:"Classes/Object/RegistryInterface.php";s:4:"2389";s:36:"Classes/Object/TransientRegistry.php";s:4:"6170";s:46:"Classes/Object/Exception/CannotBuildObject.php";s:4:"1147";s:53:"Classes/Object/Exception/CannotReconstituteObject.php";s:4:"b920";s:41:"Classes/Object/Exception/InvalidClass.php";s:4:"21b7";s:42:"Classes/Object/Exception/InvalidObject.php";s:4:"03bb";s:55:"Classes/Object/Exception/InvalidObjectConfiguration.php";s:4:"dff6";s:52:"Classes/Object/Exception/ObjectAlreadyRegistered.php";s:4:"9e39";s:41:"Classes/Object/Exception/UnknownClass.php";s:4:"7db3";s:45:"Classes/Object/Exception/UnknownInterface.php";s:4:"8571";s:42:"Classes/Object/Exception/UnknownObject.php";s:4:"cc13";s:51:"Classes/Object/Exception/UnresolvedDependencies.php";s:4:"174b";s:39:"Classes/Object/Exception/WrongScope.php";s:4:"d2ca";s:31:"Classes/Persistence/Backend.php";s:4:"f781";s:40:"Classes/Persistence/BackendInterface.php";s:4:"36cf";s:33:"Classes/Persistence/Exception.php";s:4:"1713";s:35:"Classes/Persistence/IdentityMap.php";s:4:"fe01";s:41:"Classes/Persistence/IteratorInterface.php";s:4:"d179";s:40:"Classes/Persistence/LazyLoadingProxy.php";s:4:"3bf9";s:41:"Classes/Persistence/LazyObjectStorage.php";s:4:"1101";s:48:"Classes/Persistence/LoadingStrategyInterface.php";s:4:"d4ed";s:31:"Classes/Persistence/Manager.php";s:4:"ef11";s:40:"Classes/Persistence/ManagerInterface.php";s:4:"d304";s:37:"Classes/Persistence/ObjectStorage.php";s:4:"e737";s:36:"Classes/Persistence/PropertyType.php";s:4:"3dbb";s:29:"Classes/Persistence/Query.php";s:4:"ff46";s:36:"Classes/Persistence/QueryFactory.php";s:4:"f4a3";s:45:"Classes/Persistence/QueryFactoryInterface.php";s:4:"a61d";s:38:"Classes/Persistence/QueryInterface.php";s:4:"4685";s:35:"Classes/Persistence/QueryResult.php";s:4:"02b3";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"eb10";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"132b";s:37:"Classes/Persistence/RangeIterator.php";s:4:"04fa";s:46:"Classes/Persistence/RangeIteratorInterface.php";s:4:"28bd";s:34:"Classes/Persistence/Repository.php";s:4:"b26e";s:43:"Classes/Persistence/RepositoryInterface.php";s:4:"164f";s:27:"Classes/Persistence/Row.php";s:4:"c6ce";s:36:"Classes/Persistence/RowInterface.php";s:4:"6b5a";s:35:"Classes/Persistence/RowIterator.php";s:4:"e493";s:44:"Classes/Persistence/RowIteratorInterface.php";s:4:"3997";s:31:"Classes/Persistence/Session.php";s:4:"43b4";s:42:"Classes/Persistence/Typo3QuerySettings.php";s:4:"4629";s:51:"Classes/Persistence/Typo3QuerySettingsInterface.php";s:4:"08f2";s:29:"Classes/Persistence/Value.php";s:4:"0efb";s:36:"Classes/Persistence/ValueFactory.php";s:4:"ea2b";s:45:"Classes/Persistence/ValueFactoryInterface.php";s:4:"0a49";s:38:"Classes/Persistence/ValueInterface.php";s:4:"a11c";s:56:"Classes/Persistence/Exception/CleanStateNotMemorized.php";s:4:"7689";s:51:"Classes/Persistence/Exception/IllegalObjectType.php";s:4:"73e7";s:46:"Classes/Persistence/Exception/InvalidClass.php";s:4:"761b";s:53:"Classes/Persistence/Exception/InvalidPropertyType.php";s:4:"cd9a";s:48:"Classes/Persistence/Exception/MissingBackend.php";s:4:"1d0d";s:53:"Classes/Persistence/Exception/RepositoryException.php";s:4:"d09e";s:42:"Classes/Persistence/Exception/TooDirty.php";s:4:"3347";s:57:"Classes/Persistence/Exception/UnexpectedTypeException.php";s:4:"5b57";s:47:"Classes/Persistence/Exception/UnknownObject.php";s:4:"21a6";s:51:"Classes/Persistence/Exception/UnsupportedMethod.php";s:4:"9915";s:50:"Classes/Persistence/Exception/UnsupportedOrder.php";s:4:"f4b9";s:54:"Classes/Persistence/Exception/ValueFormatException.php";s:4:"0d30";s:40:"Classes/Persistence/Mapper/ColumnMap.php";s:4:"801f";s:38:"Classes/Persistence/Mapper/DataMap.php";s:4:"901d";s:41:"Classes/Persistence/Mapper/DataMapper.php";s:4:"544a";s:40:"Classes/Persistence/QOM/AndInterface.php";s:4:"ae8d";s:45:"Classes/Persistence/QOM/BindVariableValue.php";s:4:"f52e";s:54:"Classes/Persistence/QOM/BindVariableValueInterface.php";s:4:"eb03";s:38:"Classes/Persistence/QOM/Comparison.php";s:4:"afdc";s:47:"Classes/Persistence/QOM/ComparisonInterface.php";s:4:"10ac";s:47:"Classes/Persistence/QOM/ConstraintInterface.php";s:4:"3b4b";s:42:"Classes/Persistence/QOM/DynamicOperand.php";s:4:"5266";s:51:"Classes/Persistence/QOM/DynamicOperandInterface.php";s:4:"91b0";s:45:"Classes/Persistence/QOM/EquiJoinCondition.php";s:4:"35c2";s:54:"Classes/Persistence/QOM/EquiJoinConditionInterface.php";s:4:"b873";s:32:"Classes/Persistence/QOM/Join.php";s:4:"4c13";s:50:"Classes/Persistence/QOM/JoinConditionInterface.php";s:4:"4b8d";s:41:"Classes/Persistence/QOM/JoinInterface.php";s:4:"144a";s:38:"Classes/Persistence/QOM/LogicalAnd.php";s:4:"a250";s:38:"Classes/Persistence/QOM/LogicalNot.php";s:4:"75e9";s:37:"Classes/Persistence/QOM/LogicalOr.php";s:4:"6da2";s:37:"Classes/Persistence/QOM/LowerCase.php";s:4:"93e4";s:46:"Classes/Persistence/QOM/LowerCaseInterface.php";s:4:"e093";s:40:"Classes/Persistence/QOM/NotInterface.php";s:4:"0ec5";s:35:"Classes/Persistence/QOM/Operand.php";s:4:"7efd";s:44:"Classes/Persistence/QOM/OperandInterface.php";s:4:"1928";s:39:"Classes/Persistence/QOM/OrInterface.php";s:4:"9cf8";s:36:"Classes/Persistence/QOM/Ordering.php";s:4:"8427";s:45:"Classes/Persistence/QOM/OrderingInterface.php";s:4:"c949";s:41:"Classes/Persistence/QOM/PropertyValue.php";s:4:"5905";s:50:"Classes/Persistence/QOM/PropertyValueInterface.php";s:4:"80ef";s:44:"Classes/Persistence/QOM/QueryObjectModel.php";s:4:"ac1a";s:62:"Classes/Persistence/QOM/QueryObjectModelConstantsInterface.php";s:4:"5b34";s:51:"Classes/Persistence/QOM/QueryObjectModelFactory.php";s:4:"6c37";s:60:"Classes/Persistence/QOM/QueryObjectModelFactoryInterface.php";s:4:"3c82";s:53:"Classes/Persistence/QOM/QueryObjectModelInterface.php";s:4:"fa26";s:36:"Classes/Persistence/QOM/Selector.php";s:4:"e942";s:45:"Classes/Persistence/QOM/SelectorInterface.php";s:4:"5afa";s:43:"Classes/Persistence/QOM/SourceInterface.php";s:4:"0885";s:37:"Classes/Persistence/QOM/Statement.php";s:4:"d687";s:46:"Classes/Persistence/QOM/StatementInterface.php";s:4:"ec99";s:41:"Classes/Persistence/QOM/StaticOperand.php";s:4:"a244";s:50:"Classes/Persistence/QOM/StaticOperandInterface.php";s:4:"a163";s:37:"Classes/Persistence/QOM/UpperCase.php";s:4:"9d77";s:46:"Classes/Persistence/QOM/UpperCaseInterface.php";s:4:"bfc0";s:48:"Classes/Persistence/Storage/BackendInterface.php";s:4:"2e02";s:46:"Classes/Persistence/Storage/Typo3DbBackend.php";s:4:"82a4";s:55:"Classes/Persistence/Storage/Exception/BadConstraint.php";s:4:"3a87";s:50:"Classes/Persistence/Storage/Exception/SqlError.php";s:4:"850b";s:30:"Classes/Property/Exception.php";s:4:"e64b";s:27:"Classes/Property/Mapper.php";s:4:"1dea";s:35:"Classes/Property/MappingResults.php";s:4:"abac";s:49:"Classes/Property/Exception/FormatNotSupported.php";s:4:"50b1";s:46:"Classes/Property/Exception/InvalidDataType.php";s:4:"76ad";s:44:"Classes/Property/Exception/InvalidFormat.php";s:4:"432e";s:46:"Classes/Property/Exception/InvalidProperty.php";s:4:"e4c0";s:44:"Classes/Property/Exception/InvalidSource.php";s:4:"4067";s:44:"Classes/Property/Exception/InvalidTarget.php";s:4:"5bc8";s:38:"Classes/Reflection/ClassReflection.php";s:4:"4763";s:34:"Classes/Reflection/ClassSchema.php";s:4:"5cb7";s:39:"Classes/Reflection/DocCommentParser.php";s:4:"fd1a";s:32:"Classes/Reflection/Exception.php";s:4:"ec59";s:39:"Classes/Reflection/MethodReflection.php";s:4:"32fd";s:35:"Classes/Reflection/ObjectAccess.php";s:4:"0c55";s:42:"Classes/Reflection/ParameterReflection.php";s:4:"351b";s:41:"Classes/Reflection/PropertyReflection.php";s:4:"d5fd";s:30:"Classes/Reflection/Service.php";s:4:"3a7e";s:52:"Classes/Reflection/Exception/InvalidPropertyType.php";s:4:"82e0";s:30:"Classes/Security/Exception.php";s:4:"3b45";s:47:"Classes/Security/Channel/RequestHashService.php";s:4:"77bb";s:45:"Classes/Security/Cryptography/HashService.php";s:4:"91ca";s:63:"Classes/Security/Exception/InvalidArgumentForHashGeneration.php";s:4:"8d5c";s:70:"Classes/Security/Exception/InvalidArgumentForRequestHashGeneration.php";s:4:"81bd";s:60:"Classes/Security/Exception/SyntacticallyWrongRequestHash.php";s:4:"23d0";s:26:"Classes/Utility/Arrays.php";s:4:"587b";s:25:"Classes/Utility/Cache.php";s:4:"2501";s:31:"Classes/Utility/ClassLoader.php";s:4:"4d60";s:44:"Classes/Utility/ExtbaseRequirementsCheck.php";s:4:"46d3";s:29:"Classes/Utility/Extension.php";s:4:"5cf5";s:32:"Classes/Utility/Localization.php";s:4:"446f";s:30:"Classes/Utility/TypoScript.php";s:4:"5bdc";s:28:"Classes/Validation/Error.php";s:4:"247a";s:32:"Classes/Validation/Exception.php";s:4:"44f8";s:36:"Classes/Validation/PropertyError.php";s:4:"3267";s:40:"Classes/Validation/ValidatorResolver.php";s:4:"86c9";s:47:"Classes/Validation/Exception/InvalidSubject.php";s:4:"5040";s:63:"Classes/Validation/Exception/InvalidValidationConfiguration.php";s:4:"9cfa";s:57:"Classes/Validation/Exception/InvalidValidationOptions.php";s:4:"a3a8";s:48:"Classes/Validation/Exception/NoSuchValidator.php";s:4:"64f4";s:49:"Classes/Validation/Exception/NoValidatorFound.php";s:4:"be96";s:59:"Classes/Validation/Validator/AbstractCompositeValidator.php";s:4:"7eaf";s:56:"Classes/Validation/Validator/AbstractObjectValidator.php";s:4:"cd9a";s:50:"Classes/Validation/Validator/AbstractValidator.php";s:4:"8477";s:54:"Classes/Validation/Validator/AlphanumericValidator.php";s:4:"315b";s:53:"Classes/Validation/Validator/ConjunctionValidator.php";s:4:"d60b";s:50:"Classes/Validation/Validator/DateTimeValidator.php";s:4:"2791";s:53:"Classes/Validation/Validator/DisjunctionValidator.php";s:4:"d964";s:54:"Classes/Validation/Validator/EmailAddressValidator.php";s:4:"a42e";s:47:"Classes/Validation/Validator/FloatValidator.php";s:4:"8122";s:55:"Classes/Validation/Validator/GenericObjectValidator.php";s:4:"2a06";s:49:"Classes/Validation/Validator/IntegerValidator.php";s:4:"d60c";s:50:"Classes/Validation/Validator/NotEmptyValidator.php";s:4:"3169";s:53:"Classes/Validation/Validator/NumberRangeValidator.php";s:4:"8374";s:48:"Classes/Validation/Validator/NumberValidator.php";s:4:"cd21";s:57:"Classes/Validation/Validator/ObjectValidatorInterface.php";s:4:"e28e";s:45:"Classes/Validation/Validator/RawValidator.php";s:4:"a4e6";s:59:"Classes/Validation/Validator/RegularExpressionValidator.php";s:4:"34cb";s:54:"Classes/Validation/Validator/StringLengthValidator.php";s:4:"246b";s:48:"Classes/Validation/Validator/StringValidator.php";s:4:"5aba";s:46:"Classes/Validation/Validator/TextValidator.php";s:4:"b359";s:51:"Classes/Validation/Validator/ValidatorInterface.php";s:4:"1c82";s:24:"Documentation/README.txt";s:4:"35d4";s:22:"Tests/BaseTestCase.php";s:4:"8548";s:60:"Tests/Configuration/BackendConfigurationManager_testcase.php";s:4:"8fa5";s:61:"Tests/Configuration/FrontendConfigurationManager_testcase.php";s:4:"d1d2";s:46:"Tests/DomainObject/AbstractEntity_testcase.php";s:4:"80c4";s:25:"Tests/Fixtures/Entity.php";s:4:"8af7";s:52:"Tests/MVC/Controller/AbstractController_testcase.php";s:4:"7d2c";s:50:"Tests/MVC/Controller/ActionController_testcase.php";s:4:"107d";s:42:"Tests/MVC/Controller/Argument_testcase.php";s:4:"edaa";s:43:"Tests/MVC/Controller/Arguments_testcase.php";s:4:"5bb9";s:41:"Tests/MVC/Web/RequestBuilder_testcase.php";s:4:"c537";s:45:"Tests/MVC/Web/Routing/UriBuilder_testcase.php";s:4:"70a7";s:44:"Tests/Persistence/ObjectStorage_testcase.php";s:4:"5a12";s:36:"Tests/Persistence/Query_testcase.php";s:4:"249e";s:41:"Tests/Persistence/Repository_testcase.php";s:4:"c0f8";s:38:"Tests/Persistence/Session_testcase.php";s:4:"6f9f";s:45:"Tests/Persistence/Mapper/DataMap_testcase.php";s:4:"98ec";s:53:"Tests/Persistence/Storage/Typo3DbBackend_testcase.php";s:4:"effd";s:37:"Tests/Reflection/Service_testcase.php";s:4:"b1e1";s:54:"Tests/Security/Channel/RequestHashService_testcase.php";s:4:"6c8a";s:52:"Tests/Security/Cryptography/HashService_testcase.php";s:4:"3ae2";s:36:"Tests/Utility/Extension_testcase.php";s:4:"ad36";s:37:"Tests/Utility/TypoScript_testcase.php";s:4:"bb97";s:47:"Tests/Validation/ValidatorResolver_testcase.php";s:4:"ecca";s:61:"Tests/Validation/Validator/AlphanumericValidator_testcase.php";s:4:"313c";s:60:"Tests/Validation/Validator/ConjunctionValidator_testcase.php";s:4:"39c2";s:57:"Tests/Validation/Validator/DateTimeValidator_testcase.php";s:4:"62c8";s:61:"Tests/Validation/Validator/EmailAddressValidator_testcase.php";s:4:"7f92";s:54:"Tests/Validation/Validator/FloatValidator_testcase.php";s:4:"4f3b";s:62:"Tests/Validation/Validator/GenericObjectValidator_testcase.php";s:4:"c0d2";s:56:"Tests/Validation/Validator/IntegerValidator_testcase.php";s:4:"b3b7";s:57:"Tests/Validation/Validator/NotEmptyValidator_testcase.php";s:4:"b714";s:60:"Tests/Validation/Validator/NumberRangeValidator_testcase.php";s:4:"70ec";s:55:"Tests/Validation/Validator/NumberValidator_testcase.php";s:4:"af8b";s:52:"Tests/Validation/Validator/RawValidator_testcase.php";s:4:"2fe1";s:66:"Tests/Validation/Validator/RegularExpressionValidator_testcase.php";s:4:"1aa9";s:61:"Tests/Validation/Validator/StringLengthValidator_testcase.php";s:4:"5afc";s:53:"Tests/Validation/Validator/TextValidator_testcase.php";s:4:"5454";}',
 );
 
 ?>
\ No newline at end of file