Raised version numbers of Extbase and Fluid to 1.3.0RC1
authorSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Fri, 21 Jan 2011 13:49:28 +0000 (13:49 +0000)
committerSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Fri, 21 Jan 2011 13:49:28 +0000 (13:49 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@10208 709f56b5-9817-0410-a4d7-c38de5d9e867

42 files changed:
ChangeLog
typo3/sysext/extbase/ChangeLog.txt
typo3/sysext/extbase/Classes/Configuration/AbstractConfigurationManager.php
typo3/sysext/extbase/Classes/Core/Bootstrap.php
typo3/sysext/extbase/Classes/DomainObject/AbstractDomainObject.php
typo3/sysext/extbase/Classes/MVC/Web/RequestBuilder.php
typo3/sysext/extbase/Classes/MVC/Web/Routing/UriBuilder.php
typo3/sysext/extbase/Classes/Object/Container/ClassInfoFactory.php
typo3/sysext/extbase/Classes/Object/Container/Container.php
typo3/sysext/extbase/Classes/Object/Exception/CannotBuildObject.php
typo3/sysext/extbase/Classes/Persistence/IdentityMap.php
typo3/sysext/extbase/Classes/Persistence/Mapper/DataMapper.php
typo3/sysext/extbase/Classes/Persistence/QueryResult.php
typo3/sysext/extbase/Classes/Persistence/Repository.php
typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.php
typo3/sysext/extbase/Classes/Reflection/ObjectAccess.php
typo3/sysext/extbase/Classes/Utility/Cache.php
typo3/sysext/extbase/Classes/Utility/FrontendSimulator.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Utility/Localization.php
typo3/sysext/extbase/Tests/SeleniumBaseTestCase.php
typo3/sysext/extbase/Tests/Unit/BaseTestCase.php
typo3/sysext/extbase/Tests/Unit/Configuration/AbstractConfigurationManagerTest.php
typo3/sysext/extbase/Tests/Unit/MVC/Web/RequestBuilderTest.php
typo3/sysext/extbase/Tests/Unit/MVC/Web/Routing/UriBuilderTest.php
typo3/sysext/extbase/Tests/Unit/Object/Container/ClassInfoFactoryTest.php
typo3/sysext/extbase/Tests/Unit/Object/Container/ContainerTest.php
typo3/sysext/extbase/Tests/Unit/Object/Container/Fixtures/Testclasses.php
typo3/sysext/extbase/Tests/Unit/Persistence/Mapper/DataMapFactoryTest.php
typo3/sysext/extbase/Tests/Unit/Persistence/RepositoryTest.php
typo3/sysext/extbase/Tests/Unit/Persistence/SessionTest.php
typo3/sysext/extbase/Tests/Unit/Reflection/ObjectAccessTest.php
typo3/sysext/extbase/Tests/Unit/Utility/LocalizationTest.php [new file with mode: 0644]
typo3/sysext/extbase/ext_autoload.php
typo3/sysext/extbase/ext_emconf.php
typo3/sysext/extbase/last_synched_target
typo3/sysext/fluid/ChangeLog.txt
typo3/sysext/fluid/Classes/Core/Parser/TemplateParser.php
typo3/sysext/fluid/Classes/Core/Widget/Bootstrap.php
typo3/sysext/fluid/Classes/View/StandaloneView.php
typo3/sysext/fluid/Tests/Unit/View/StandaloneViewTest.php
typo3/sysext/fluid/ext_emconf.php
typo3/sysext/fluid/last_synched_target

index f078f2e..68eb5c1 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-01-21  Sebastian Kurfuerst  <sebastian@typo3.org>
+
+       * Raised version numbers of Extbase and Fluid to 1.3.0RC1.
+
 2011-01-21  Steffen Kamper  <steffen@typo3.org>
 
        * Follow-up to #17162: Missing localization in t3lib_tsstyleconfig - add HSC
index b1d2614..37b6f66 100644 (file)
@@ -1,6 +1,72 @@
 ChangeLog for Extbase
 =====================
 
+Changes for 1.3.0 RC1:
+======================
+included in TYPO3 4.5.0 RC1.
+
+This release features many bugfixes, in the following areas:
+* Persistence - invalid SQL has been fixed at various places
+* MVC - the URI Builder can now handle cached / uncached actions correctly
+* Improved error handling to catch some configuration errors
+* Localization - TypoScript overrides for locallang keys with dot inside now works (_LOCAL_LANG.foo.bar)
+* Persistence - added "pid" property and getter and setter to AbstractDomainModel; thus you can now move
+  domain objects to different pages. However, this feature has *no support for workspaces* yet.
+* Dependency Injection - now allows the injection of prototypes (see below)
+* Configuration - for defining the Storage PID, one can use arbitary TypoScript objects (see below)
+
+Dependency Injection Improvements
+---------------------------------
+
+Now, Prototype objects are allowed to be injected into other objects. This means the following cases
+are supported:
+
+* Singletons which need Singletons (most common)
+* Singletons which need Prototypes (very uncommon,
+  as it usually hints at the fact that the injected
+  prototype should be a singleton). In this case,
+  WE WRITE A DEVLOG MESSAGE
+* Prototypes which need Singletons
+* Prototypes which need Prototypes
+
+TypoScript Storage PID Improvements
+-----------------------------------
+
+The persistence.storagePid now has stdWrap properties so the storagePid can be set dynamically.
+Now follows an example for use in the Frontend:
+       plugin.tx_extkey.persistence.storagePid.cObject = TEXT
+       plugin.tx_extkey.persistence.storagePid.cObject.value = 8,3
+... and this is how you can use it in the backend:
+       module.tx_extkey.persistence.storagePid.cObject = TEXT
+       module.tx_extkey.persistence.storagePid.cObject.value = 8,3
+
+Full Changes for 1.3.0 RC1:
+===========================
+[+BUGFIX] Extbase (Object): constructor injection now works if default value for a dependency is NULL. Thanks to Lienhart Woitok! Resolves #11623
+[+BUGFIX] Extbase (Object): Allow injection of prototypes via dependency injection. Resolves #12013
+[+BUGFIX] Extbase (Persistence): Use sql_free_result() in Typo3DbBackend to free result memory. Resolves #10957
+[~BUGFIX] Extbase (Persistence): fixed an wrong referenced exception (resolves #12403)
+[~BUGFIX] Extbase (Persistence): make Tx_Extbase_Persistence_Repository::remove() handle freshly created objects right. (resolves #11128)
+[+BUGFIX] Extbase (MVC): UriBuilder automatically added a cHash even on links to nonCacheable actions where this is not needed/recommended (resolves #8565)
+[~BUGFIX] Extbase (Persistence): made union statement on comma seperated list use find_in_set (Thanks to Marc Bastian Heinrichs) (resolves #9772)
+[~FOLLOWUP] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches. (resolves 11978)
+[+TASK] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches.
+[+BUGFIX] Extbase (MVC): Improve Error Handling in Request Builder. Resolves #11302
+[+BUGFIX] Extbase (Persistence): remove superfluous require_once statements. Thanks to Oliver Klee. Resolves #12324
+[+BUGFIX] Extbase (Tests): Remove require_once of phpunit testclasses. Thanks to Oliver Klee. Resolves #12323
+[+BUGFIX] Extbase (Utility): Make _LOCAL_LANG override work with dots. Thanks to Thomas Maroschik. Resolves #12121
+[+BUGFIX] Extbase (Persistence): Fixed using the correct columnname for contains comparison with RELATION_HAS_MANY and empty parentKeyFieldName. Resolves #11048
+[+BUGFIX] Extbase (Persistence): Added the missing pid property to the AbstractDomainModel. Related to #11361
+[+BUGFIX] Extbase (Persistence): Language Oberlay now works with page table as well. Thanks to Andre Stoesel. Resolves #11319
+[+BUGFIX] Extbase (Persistence): The QueryObject gets cloned now in the getFirst() method of the QueryResult (as it was intended). Thanks to Sebastian Fischer. Resolves #11855.
+[+BUGFIX] Extbase (Bootstrap): Bootstrap calls initialize on reflectionService if it's already initialized. Resolves #12346, resolves #12156
+[+BUGFIX] Extbase (Persistence): Fix equals constraint with $caseSensitive FALSE (closing bracket missing). Thanks to Alexander Berl. Resolves #10781
+[+BUGFIX] Extbase (Reflection): ObjectAccess::isPropertyGettable works for ArrayAccess objects. Resolves #10148
+[+BUGFIX] Extbase (Configuration): Allow StoragePid to be manually defined by TS. Thanks to Rens Admiraal! Resolves #8397
+[+BUGFIX] Extbase (Configuration): Fix warning in AbstractConfigurationManager. Resolves #11631
+[+BUGFIX] Extbase (Object): Disabling Dependency Injection for injectSettings method. Resolves #11011
+
+
 Changes for 1.3.0 Beta 4:
 =========================
 included in TYPO3 4.5.0 Beta 4.
index d880808..fcf257d 100644 (file)
@@ -158,6 +158,19 @@ abstract class Tx_Extbase_Configuration_AbstractConfigurationManager implements
                        $frameworkConfiguration = $this->getContextSpecificFrameworkConfiguration($frameworkConfiguration);
                }
 
+               if (!empty($frameworkConfiguration['persistence']['storagePid']) &&
+                       is_array($frameworkConfiguration['persistence']['storagePid'])) {
+                               /**
+                                * We simulate the frontend to enable the use of cObjects in
+                                * stdWrap. Than we convert the configuration to normal TypoScript
+                                * and apply the stdWrap to the storagePid
+                                */
+                       Tx_Extbase_Utility_FrontendSimulator::simulateFrontendEnvironment($this->getContentObject());
+                       $conf = Tx_Extbase_Utility_TypoScript::convertPlainArrayToTypoScriptArray($frameworkConfiguration['persistence']);
+                       $frameworkConfiguration['persistence']['storagePid'] = $GLOBALS['TSFE']->cObj->stdWrap($conf['storagePid'], $conf['storagePid.']);
+                       Tx_Extbase_Utility_FrontendSimulator::resetFrontendEnvironment();
+               }
+
                // 1st level cache
                $this->configurationCache[$configurationCacheKey] = $frameworkConfiguration;
                return $frameworkConfiguration;
@@ -190,6 +203,13 @@ abstract class Tx_Extbase_Configuration_AbstractConfigurationManager implements
                        }
                        $overriddenSwitchableControllerActions[$controllerName] = array('actions' => $actions);
                        $nonCacheableActions = $frameworkConfiguration['controllerConfiguration'][$controllerName]['nonCacheableActions'];
+
+                       if (!is_array($nonCacheableActions)) {
+                               // There are no non-cacheable actions, thus we can directly continue
+                               // with the next controller name.
+                               continue;
+                       }
+
                        $overriddenNonCacheableActions = array_intersect($nonCacheableActions, $actions);
                        if (!empty($overriddenNonCacheableActions)) {
                                $overriddenSwitchableControllerActions[$controllerName]['nonCacheableActions'] = $overriddenNonCacheableActions;
index 38896a5..a1572cf 100644 (file)
@@ -195,7 +195,9 @@ class Tx_Extbase_Core_Bootstrap {
        protected function initializeReflection() {
                $this->reflectionService = $this->objectManager->get('Tx_Extbase_Reflection_Service');
                $this->reflectionService->setDataCache($this->cacheManager->getCache('cache_extbase_reflection'));
-               $this->reflectionService->initialize();
+               if (!$this->reflectionService->isInitialized()) {
+                       $this->reflectionService->initialize();
+               }
        }
 
        /**
@@ -232,7 +234,8 @@ class Tx_Extbase_Core_Bootstrap {
         */
        public function run($content, $configuration) {
                //var_dump(Tx_Extbase_Utility_Extension::createAutoloadRegistryForExtension('extbase', t3lib_extMgm::extPath('extbase'), array(
-               //      'tx_extbase_basetestcase' => '$extensionClassesPath . \'../Tests/BaseTestCase.php\''
+               //      'tx_extbase_basetestcase' => '$extensionClassesPath . \'../Tests/BaseTestCase.php\'',
+               //      'tx_extbase_tests_unit_basetestcase' => '$extensionClassesPath . \'../Tests/Unit/BaseTestCase.php\'',
                //)));
                //die("autoload registry");
 
index 09601f8..abf4a72 100644 (file)
@@ -34,7 +34,7 @@
 abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbase_DomainObject_DomainObjectInterface, Tx_Extbase_Persistence_ObjectMonitoringInterface {
 
        /**
-        * @var int The uid
+        * @var int The uid of the record. The uid is only unique in the context of the database table.
         */
        protected $uid;
 
@@ -49,6 +49,11 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
        protected $_languageUid;
 
        /**
+        * @var int The id of the page the record is "stored".
+        */
+       protected $pid;
+
+       /**
         * TRUE if the object is a clone
         * @var boolean
         */
@@ -80,6 +85,32 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
                        return NULL;
                }
        }
+
+       /**
+        * Setter for the pid.
+        *
+        * @return void
+        */
+       final public function setPid($pid) {
+               if ($pid === NULL) {
+                       $this->pid = NULL;
+               } else {
+                       $this->pid = (int)$pid;
+               }
+       }
+
+       /**
+        * Getter for the pid.
+        *
+        * @return int The pid or NULL if none set yet.
+        */
+       final public function getPid() {
+               if ($this->pid === NULL) {
+                       return NULL;
+               } else {
+                       return (int)$this->pid;
+               }
+       }
        
        /**
         * Reconstitutes a property. Only for internal use.
index d54ebce..de63f20 100644 (file)
@@ -136,14 +136,27 @@ class Tx_Extbase_MVC_Web_RequestBuilder implements t3lib_Singleton {
 
                if (is_string($parameters['controller']) && array_key_exists($parameters['controller'], $this->allowedControllerActions)) {
                        $controllerName = filter_var($parameters['controller'], FILTER_SANITIZE_STRING);
-               } else {
+               } elseif (!empty($this->defaultControllerName)) {
                        $controllerName = $this->defaultControllerName;
+               } else {
+                       throw new Tx_Extbase_MVC_Exception(
+                               'The default controller can not be determined.<br />'
+                               . 'Please check for Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php.',
+                               1295479650
+                       );
                }
+
                $allowedActions = $this->allowedControllerActions[$controllerName];
                if (is_string($parameters['action']) && is_array($allowedActions) && in_array($parameters['action'], $allowedActions)) {
                        $actionName = filter_var($parameters['action'], FILTER_SANITIZE_STRING);
-               } else {
+               } elseif (!empty($this->defaultActionName)) {
                        $actionName = $this->defaultActionName;
+               } else {
+                       throw new Tx_Extbase_MVC_Exception(
+                               'The default action can not be determined for controller "' . $controllerName . '".<br />'
+                               . 'Please check Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php.',
+                               1295479651
+                       );
                }
 
                $request = $this->objectManager->create('Tx_Extbase_MVC_Web_Request');
index e36a43a..afa6427 100644 (file)
@@ -467,6 +467,12 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder {
                }
                $this->arguments = t3lib_div::array_merge_recursive_overrule($this->arguments, $prefixedControllerArguments);
 
+               if ($actionName !== NULL
+                       && $this->getUseCacheHash() === TRUE
+                       && !$this->isActionCacheable($actionName, $controllerArguments['controller'], $extensionName, $pluginName)) {
+                               $this->setUseCacheHash(FALSE);
+               }
+
                return $this->build();
        }
 
@@ -641,5 +647,31 @@ class Tx_Extbase_MVC_Web_Routing_UriBuilder {
                return $result;
        }
 
+       /**
+        * Checks if the given action is cacheable or not.
+        *
+        * @param string $actionName Name of the action to be called
+        * @param string $controllerName Name of the target controller.
+        * @param string $extensionName Name of the target extension, without underscores.
+        * @param string $pluginName Name of the target plugin.
+        * @return boolean
+        */
+       protected function isActionCacheable($actionName, $controllerName, $extensionName, $pluginName) {
+               $frameworkConfiguration = $this->configurationManager->getConfiguration(
+                       Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK,
+                       $extensionName,
+                       $pluginName
+               );
+
+               if (isset($frameworkConfiguration['controllerConfiguration'][$controllerName])
+                       && is_array($frameworkConfiguration['controllerConfiguration'][$controllerName])
+                       && is_array($frameworkConfiguration['controllerConfiguration'][$controllerName]['nonCacheableActions'])
+                       && in_array($actionName, $frameworkConfiguration['controllerConfiguration'][$controllerName]['nonCacheableActions'])) {
+                               return FALSE;
+               }
+
+               return TRUE;
+       }
+
 }
 ?>
\ No newline at end of file
index 3985f54..7a06f3f 100644 (file)
@@ -80,10 +80,10 @@ class Tx_Extbase_Object_Container_ClassInfoFactory {
        }
 
        /**
-        * Build a list of inject methods
+        * Build a list of inject methods for the given class.
 
         * @param ReflectionClass $reflectedClass
-        * @retrn array of inject methods
+        * @return array (nameOfInjectMethod => nameOfClassToBeInjected)
         */
        private function getInjectMethods(ReflectionClass $reflectedClass) {
                $result = array();
@@ -91,11 +91,14 @@ class Tx_Extbase_Object_Container_ClassInfoFactory {
 
                if (is_array($reflectionMethods)) {
                        foreach ($reflectionMethods as $reflectionMethod) {
-                               if ($reflectionMethod->isPublic() && substr($reflectionMethod->getName(), 0, 6) === 'inject') {
+                               if ($reflectionMethod->isPublic()
+                                       && substr($reflectionMethod->getName(), 0, 6) === 'inject'
+                                       && $reflectionMethod->getName() !== 'injectSettings') {
+
                                        $reflectionParameter = $reflectionMethod->getParameters();
                                        if (isset($reflectionParameter[0])) {
                                                if (!$reflectionParameter[0]->getClass()) {
-                                                       throw new Exception('Method is marked as setter for Dependency Injection, but doesnt have a type annotation');
+                                                       throw new Exception('Method "' . $reflectionMethod->getName(). '" of class "' . $reflectedClass->getName() . '" is marked as setter for Dependency Injection, but does not have a type annotation');
                                                }
                                                $result[$reflectionMethod->getName()] = $reflectionParameter[0]->getClass()->getName();
                                        }
index 7dead80..fe1ffe3 100644 (file)
@@ -63,6 +63,13 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
        private $singletonInstances = array();
 
        /**
+        * Array of prototype objects currently being built, to prevent recursion.
+        *
+        * @var array
+        */
+       private $prototypeObjectsWhichAreCurrentlyInstanciated;
+
+       /**
         * Constructor is protected since container should
         * be a singleton.
         *
@@ -84,6 +91,18 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
         * @return object the built object
         */
        public function getInstance($className, $givenConstructorArguments = array()) {
+               $this->prototypeObjectsWhichAreCurrentlyInstanciated = array();
+               return $this->getInstanceInternal($className, $givenConstructorArguments);
+       }
+
+       /**
+        * Internal implementation for getting a class.
+        *
+        * @param string $className
+        * @param array $givenConstructorArguments the list of constructor arguments as array
+        * @return object the built object
+        */
+       protected function getInstanceInternal($className, $givenConstructorArguments = array()) {
                $className = $this->getImplementationClassName($className);
 
                if ($className === 'Tx_Extbase_Object_Container_Container') {
@@ -96,6 +115,15 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
                        }
                        return $this->singletonInstances[$className];
                }
+
+               $classIsSingleton = $this->isSingleton($className);
+               if (!$classIsSingleton) {
+                       if (array_search($className, $this->prototypeObjectsWhichAreCurrentlyInstanciated) !== FALSE) {
+                               throw new Tx_Extbase_Object_Exception_CannotBuildObject('Cyclic dependency in prototype object, for class "' . $className . '".', 1295611406);
+                       }
+                       $this->prototypeObjectsWhichAreCurrentlyInstanciated[] = $className;
+               }
+
                $classInfo = $this->getClassInfo($className);
 
                $instance = $this->instanciateObject($className, $classInfo, $givenConstructorArguments);
@@ -105,6 +133,10 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
                        $instance->initializeObject();
                }
 
+               if (!$classIsSingleton) {
+                       array_pop($this->prototypeObjectsWhichAreCurrentlyInstanciated);
+               }
+
                return $instance;
        }
 
@@ -125,7 +157,7 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
                        throw new Tx_Extbase_Object_Exception('Object "' . $className . '" has explicit constructor arguments but is a singleton; this is not allowed.', 1292858051);
                }
 
-               $constructorArguments = $this->getConstructorArguments($classInfo->getConstructorArguments(), $givenConstructorArguments, $level);
+               $constructorArguments = $this->getConstructorArguments($className, $classInfo->getConstructorArguments(), $givenConstructorArguments);
                array_unshift($constructorArguments, $className);
                $instance = call_user_func_array(array('t3lib_div', 'makeInstance'), $constructorArguments);
 
@@ -147,15 +179,27 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
 
                foreach ($classInfo->getInjectMethods() as $injectMethodName => $classNameToInject) {
 
-                       $instanceToInject = $this->getInstance($classNameToInject);
-                       if (!$instanceToInject instanceof t3lib_Singleton) {
-                               throw new Tx_Extbase_Object_Exception_WrongScope('Setter dependencies can only be singletons', 1292860859);
+                       $instanceToInject = $this->getInstanceInternal($classNameToInject);
+                       if ($this->isSingleton($instance) && !($instanceToInject instanceof t3lib_Singleton)) {
+                               $this->log('The singleton "' . $classInfo->getClassName() . '" needs a prototype in "' . $injectMethodName . '". This is often a bad code smell; often you rather want to inject a singleton.', 1);
                        }
+
                        $instance->$injectMethodName($instanceToInject);
                }
        }
 
        /**
+        * Wrapper for dev log, in order to ease testing
+        *
+        * @param       string          Message (in english).
+        * @param       integer         Severity: 0 is info, 1 is notice, 2 is warning, 3 is fatal error, -1 is "OK" message
+        * @return      void
+        */
+       protected function log($message, $severity) {
+               t3lib_div::devLog($message, 'extbase', $severity);
+       }
+
+       /**
         * register a classname that should be used if a dependency is required.
         * e.g. used to define default class for a interface
         *
@@ -169,11 +213,12 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
        /**
         * gets array of parameter that can be used to call a constructor
         *
+        * @param string $className
         * @param array $constructorArgumentInformation
         * @param array $givenConstructorArguments
         * @return array
         */
-       private function getConstructorArguments(array $constructorArgumentInformation, array $givenConstructorArguments, $level) {
+       private function getConstructorArguments($className, array $constructorArgumentInformation, array $givenConstructorArguments) {
                $parameters=array();
                foreach ($constructorArgumentInformation as $argumentInformation) {
                        $argumentName = $argumentInformation['name'];
@@ -182,10 +227,10 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
                        // AND the class has NOT been explicitely passed in
                        if (isset($argumentInformation['dependency']) && !(count($givenConstructorArguments) && is_a($givenConstructorArguments[0], $argumentInformation['dependency']))) {
                                // Inject parameter
-                               if (!$this->isSingleton($argumentInformation['dependency'])) {
-                                       throw new Tx_Extbase_Object_Exception_WrongScope('Constructor dependencies can only be singletons', 1292860858);
+                               $parameter = $this->getInstanceInternal($argumentInformation['dependency']);
+                               if ($this->isSingleton($className) && !($parameter instanceof t3lib_Singleton)) {
+                                       $this->log('The singleton "' . $className . '" needs a prototype in the constructor. This is often a bad code smell; often you rather want to inject a singleton.', 1);
                                }
-                               $parameter = $this->getInstance($argumentInformation['dependency']);
                        } elseif (count($givenConstructorArguments)) {
                                // EITHER:
                                // No dependency injectable anymore, but we still have
@@ -195,7 +240,7 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
                                // injection, and thus the passed constructor takes precendence over
                                // autowiring.
                                $parameter = array_shift($givenConstructorArguments);
-                       } elseif (isset($argumentInformation['defaultValue'])) {
+                       } elseif (array_key_exists('defaultValue', $argumentInformation)) {
                                // no value to set anymore, we take default value
                                $parameter = $argumentInformation['defaultValue'];
                        } else {
@@ -240,7 +285,7 @@ class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
         */
        private function getClassInfo($className) {
                        // we also need to make sure that the cache is returning a vaild object
-                       // in case something went wrong with unserialization etc.. 
+                       // in case something went wrong with unserialization etc..
                if (!$this->cache->has($className) || !is_object($this->cache->get($className))) {
                        $this->cache->set($className, $this->classInfoFactory->buildClassInfoFromClassName($className));
                }
index 30639df..161969b 100644 (file)
@@ -32,7 +32,7 @@
  * @subpackage Object\Exception
  * @version $Id: CannotBuildObject.php 1729 2009-11-25 21:37:20Z stucki $
  */
-class Tx_Extbase_Object_CannotBuildObject extends Tx_Extbase_Object_Exception {
+class Tx_Extbase_Object_Exception_CannotBuildObject extends Tx_Extbase_Object_Exception {
 
 }
 
index 7ff55b5..1d64c58 100644 (file)
@@ -100,7 +100,7 @@ class Tx_Extbase_Persistence_IdentityMap implements t3lib_Singleton {
        public function getIdentifierByObject($object) {
                if (!is_object($object)) throw new InvalidArgumentException('Object expected, ' . gettype($object) . ' given.', 1246892972);
                if (!isset($this->objectMap[$object])) {
-                       throw new Tx_Extbase_Persistence_Exception_UnknownObjectException('The given object (class: ' . get_class($object) . ') is not registered in this Identity Map.', 1246892970);
+                       throw new Tx_Extbase_Persistence_Exception_UnknownObject('The given object (class: ' . get_class($object) . ') is not registered in this Identity Map.', 1246892970);
                }
                return $this->objectMap[$object];
        }
index a481784..24ebc91 100644 (file)
@@ -236,6 +236,7 @@ class Tx_Extbase_Persistence_Mapper_DataMapper implements t3lib_Singleton {
                $className = get_class($object);
                $dataMap = $this->getDataMap($className);
                $object->_setProperty('uid', intval($row['uid']));
+               $object->_setProperty('pid', intval($row['pid']));
                $object->_setProperty('_localizedUid', intval($row['uid']));
                if ($dataMap->getLanguageIdColumnName() !== NULL) {
                        $object->_setProperty('_languageUid', intval($row[$dataMap->getLanguageIdColumnName()]));
index 20f7c7e..8802754 100644 (file)
@@ -128,9 +128,9 @@ class Tx_Extbase_Persistence_QueryResult implements Tx_Extbase_Persistence_Query
                        $queryResult = $this->queryResult;
                        reset($queryResult);
                } else {
-                       $query = clone $this->query;
+                       $query = $this->getQuery();
                        $query->setLimit(1);
-                       $queryResult = $this->dataMapper->map($this->query->getType(), $this->persistenceManager->getObjectDataByQuery($this->query));
+                       $queryResult = $this->dataMapper->map($query->getType(), $this->persistenceManager->getObjectDataByQuery($query));
                }
                $firstResult = current($queryResult);
                if ($firstResult === FALSE) {
index a4a9203..586f574 100644 (file)
@@ -144,7 +144,10 @@ class Tx_Extbase_Persistence_Repository implements Tx_Extbase_Persistence_Reposi
                }
 
                $this->addedObjects->attach($object);
-               $this->removedObjects->detach($object);
+
+               if ($this->removedObjects->contains($object)) {
+                       $this->removedObjects->detach($object);
+               }
        }
 
        /**
@@ -161,7 +164,9 @@ class Tx_Extbase_Persistence_Repository implements Tx_Extbase_Persistence_Reposi
 
                if ($this->addedObjects->contains($object)) {
                        $this->addedObjects->detach($object);
-               } else {
+               }
+
+               if (!$object->_isNew()) {
                        $this->removedObjects->attach($object);
                }
        }
index 6339caa..0770a67 100644 (file)
@@ -238,6 +238,7 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                $result = $this->databaseHandle->sql_query($sql);
                $this->checkSqlErrors($sql);
                $rows = $this->getRowsFromResult($query->getSource(), $result);
+               $this->databaseHandle->sql_free_result($result);
                $rows = $this->doLanguageAndWorkspaceOverlay($query->getSource(), $rows);
                // TODO: implement $objectData = $this->processObjectRecords($statementHandle);
                return $rows;
@@ -262,7 +263,7 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                        $this->replacePlaceholders($statement, $parameters);
                        $result = $this->databaseHandle->sql_query($statement);
                        $this->checkSqlErrors($statement);
-                       return $this->databaseHandle->sql_num_rows($result);
+                       $count = $this->databaseHandle->sql_num_rows($result);
                } else {
                        $statementParts['fields'] = array('COUNT(*)');
                        $statement = $this->buildQuery($statementParts, $parameters);
@@ -270,8 +271,10 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                        $result = $this->databaseHandle->sql_query($statement);
                        $this->checkSqlErrors($statement);
                        $rows = $this->getRowsFromResult($query->getSource(), $result);
-                       return current(current($rows));
+                       $count = current(current($rows));
                }
+               $this->databaseHandle->sql_free_result($result);
+               return $count;
        }
 
        /**
@@ -558,7 +561,6 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                                                $childTableName = $columnMap->getChildTableName();
                                                $sql['where'][] = $tableName . '.uid=(SELECT ' . $childTableName . '.' . $parentKeyFieldName . ' FROM ' . $childTableName . ' WHERE ' . $childTableName . '.uid=' . $this->getPlainValue($operand2) . ')';
                                        } else {
-                                               $columnName = $this->dataMapper->convertPropertyNameToColumnName($operand1->getPropertyName(), $source->getNodeTypeName());
                                                $statement = 'FIND_IN_SET(' . $this->getPlainValue($operand2) . ',' . $tableName . '.' . $columnName . ')';
                                                $sql['where'][] = $statement;
                                        }
@@ -636,7 +638,7 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                        if ($valueFunction === NULL) {
                                $constraintSQL .= (!empty($tableName) ? $tableName . '.' : '') . $columnName .  ' ' . $operator . ' ?';
                        } else {
-                               $constraintSQL .= $valueFunction . '(' . (!empty($tableName) ? $tableName . '.' : '') . $columnName .  ' ' . $operator . ' ?';
+                               $constraintSQL .= $valueFunction . '(' . (!empty($tableName) ? $tableName . '.' : '') . $columnName .  ') ' . $operator . ' ?';
                        }
 
                        $sql['where'][] = $constraintSQL;
@@ -662,9 +664,7 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                        if (isset($parentKeyFieldName)) {
                                $sql['unions'][$childTableName] = 'LEFT JOIN ' . $childTableName . ' ON ' . $tableName . '.uid=' . $childTableName . '.' . $parentKeyFieldName;
                        } else {
-                               $onStatement = '(' . $tableName . '.' . $columnName . ' LIKE CONCAT(\'%,\',' . $childTableName . '.uid,\',%\')';
-                               $onStatement .= ' OR ' . $tableName . '.' . $columnName . ' LIKE CONCAT(\'%,\',' . $childTableName . '.uid)';
-                               $onStatement .= ' OR ' . $tableName . '.' . $columnName . ' LIKE CONCAT(' . $childTableName . '.uid,\',%\'))';
+                               $onStatement = '(FIND_IN_SET(' . $childTableName . '.uid, ' . $tableName . '.' . $columnName . '))';
                                $sql['unions'][$childTableName] = 'LEFT JOIN ' . $childTableName . ' ON ' . $onStatement;
                        }
                        $className = $this->dataMapper->getType($className, $propertyName);
@@ -929,11 +929,9 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                                        if (is_object($GLOBALS['TSFE'])) {
                                                $this->pageSelectObject = $GLOBALS['TSFE']->sys_page;
                                        } else {
-                                               require_once(PATH_t3lib . 'class.t3lib_page.php');
                                                $this->pageSelectObject = t3lib_div::makeInstance('t3lib_pageSelect');
                                        }
                                } else {
-                                       require_once(PATH_t3lib . 'class.t3lib_page.php');
                                        $this->pageSelectObject = t3lib_div::makeInstance( 't3lib_pageSelect' );
                                }
                        }
@@ -960,7 +958,9 @@ class Tx_Extbase_Persistence_Storage_Typo3DbBackend implements Tx_Extbase_Persis
                                $tableName = $source->getRight()->getSelectorName();
                        }
                        $this->pageSelectObject->versionOL($tableName, $row, TRUE);
-                       if(isset($GLOBALS['TCA'][$tableName]['ctrl']['languageField']) && $GLOBALS['TCA'][$tableName]['ctrl']['languageField'] !== '') {
+                       if($tableName == 'pages') {
+                               $row = $this->pageSelectObject->getPageOverlay($row, $languageUid);
+                       } elseif(isset($GLOBALS['TCA'][$tableName]['ctrl']['languageField']) && $GLOBALS['TCA'][$tableName]['ctrl']['languageField'] !== '') {
                                if (in_array($row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']], array(-1,0))) {
                                        $overlayMode = ($languageMode === 'strict') ? 'hideNonTranslated' : '';
                                        $row = $this->pageSelectObject->getRecordOverlay($tableName, $row, $languageUid, $overlayMode);
index 84a3ebf..2686ad1 100644 (file)
@@ -282,6 +282,8 @@ class Tx_Extbase_Reflection_ObjectAccess {
                        return TRUE;
                } elseif (array_search($propertyName, array_keys(get_class_vars(get_class($object)))) !== FALSE) {
                        return TRUE;
+               } elseif ($object instanceof ArrayAccess && isset($object[$propertyName]) === TRUE) {
+                       return TRUE;
                }
                if (is_callable(array($object, 'get' . ucfirst($propertyName)))) return TRUE;
                return is_callable(array($object, 'is' . ucfirst($propertyName)));
index 9f5bfb9..e9e535f 100644 (file)
  * @version $Id: Cache.php 1729 2009-11-25 21:37:20Z stucki $
  */
 class Tx_Extbase_Utility_Cache {
+
        /**
-        * Clears certain page IDs given as array
+        * Clears the page cache
         *
-        * @param array<integer> $pageIdsToClear Page ID array to clear
+        * @param mixed $pageIdsToClear (int) single or (array) multiple pageIds to clear the cache for
         * @return void
         */
-       static public function clearPageCache(array $pageIdsToClear) {
+       static public function clearPageCache($pageIdsToClear = NULL) {
+               if ($pageIdsToClear !== NULL && !is_array($pageIdsToClear)) {
+                       $pageIdsToClear = array(intval($pageIdsToClear));
+               }
+
                self::flushPageCache($pageIdsToClear);
                self::flushPageSectionCache($pageIdsToClear);
        }
@@ -47,48 +52,48 @@ class Tx_Extbase_Utility_Cache {
        /**
         * Flushes cache_pages or cachinframework_cache_pages.
         *
-        * @param       array           $pageIds: (optional) Ids of pages to be deleted
-        * @return      void
+        * @param array $pageIdsToClear pageIds to clear the cache for
+        * @return void
         */
-       static protected function flushPageCache(array $pageIds = NULL) {
+       static protected function flushPageCache($pageIds = NULL) {
                if (TYPO3_UseCachingFramework) {
                        $pageCache = $GLOBALS['typo3CacheManager']->getCache('cache_pages');
 
-                       if (!is_null($pageIds)) {
+                       if ($pageIds !== NULL) {
                                foreach ($pageIds as $pageId) {
                                        $pageCache->flushByTag('pageId_' . $pageId);
                                }
                        } else {
                                $pageCache->flush();
                        }
-               } elseif (!is_null($pageIds)) {
+               } elseif ($pageIds !== NULL) {
                        $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pages', 'page_id IN (' . implode(',', $pageIds) . ')');
                } else {
-                       $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pages', '');
+                       $GLOBALS['TYPO3_DB']->exec_TRUNCATEquery('cache_pages');
                }
        }
 
        /**
         * Flushes cache_pagesection or cachingframework_cache_pagesection.
         *
-        * @param       array   $pageIds: (optional) Ids of pages to be deleted
-        * @return      void
+        * @param array $pageIdsToClear pageIds to clear the cache for
+        * @return void
         */
-       static protected function flushPageSectionCache(array $pageIds = NULL) {
+       static protected function flushPageSectionCache($pageIds = NULL) {
                if (TYPO3_UseCachingFramework) {
                        $pageSectionCache = $GLOBALS['typo3CacheManager']->getCache('cache_pagesection');
 
-                       if (!is_null($pageIds)) {
+                       if ($pageIds !== NULL) {
                                foreach ($pageIds as $pageId) {
                                        $pageSectionCache->flushByTag('pageId_' . $pageId);
                                }
                        } else {
                                $pageSectionCache->flush();
                        }
-               } elseif (!is_null($pageIds)) {
-                       $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pagesection', 'page_id IN (' . implode(',',$pageIds) . ')');
+               } elseif ($pageIds !== NULL) {
+                       $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pagesection', 'page_id IN (' . implode(',', $pageIds) . ')');
                } else {
-                       $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pagesection', '');
+                       $GLOBALS['TYPO3_DB']->exec_TRUNCATEquery('cache_pagesection');
                }
        }
 }
diff --git a/typo3/sysext/extbase/Classes/Utility/FrontendSimulator.php b/typo3/sysext/extbase/Classes/Utility/FrontendSimulator.php
new file mode 100644 (file)
index 0000000..77b1f1e
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Rens Admiraal <rens@rensnel.nl>
+*  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 simulate a frontend in backend context.
+ *
+ * ONLY USED INTERNALLY, MIGHT CHANGE WITHOUT NOTICE!
+ *
+ * @package Extbase
+ * @subpackage Utility
+ * @version $ID:$
+ */
+class Tx_Extbase_Utility_FrontendSimulator {
+
+       /**
+        * @var mixed
+        */
+       protected static $tsfeBackup;
+
+       /**
+        * Sets the $TSFE->cObjectDepthCounter in Backend mode
+        * This somewhat hacky work around is currently needed because the cObjGetSingle() function of tslib_cObj relies on this setting
+        *
+        * @param tslib_cObj $addCObj
+        * @return void
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public static function simulateFrontendEnvironment(tslib_cObj $cObj = NULL) {
+               self::$tsfeBackup = isset($GLOBALS['TSFE']) ? $GLOBALS['TSFE'] : NULL;
+               $GLOBALS['TSFE'] = new stdClass();
+               $GLOBALS['TSFE']->cObjectDepthCounter = 100;
+
+               $GLOBALS['TSFE']->cObj = $cObj !== NULL ? $cObj : t3lib_div::makeInstance('tslib_cObj');
+       }
+
+       /**
+        * Resets $GLOBALS['TSFE'] if it was previously changed by simulateFrontendEnvironment()
+        *
+        * @return void
+        * @author Bastian Waidelich <bastian@typo3.org>(
+        * @see simulateFrontendEnvironment()
+        */
+       public static function resetFrontendEnvironment() {
+               if (!empty(self::$tsfeBackup)) {
+                       $GLOBALS['TSFE'] = self::$tsfeBackup;
+               }
+       }
+}
+?>
\ No newline at end of file
index cf9e0d5..277b4fa 100644 (file)
@@ -83,7 +83,6 @@ class Tx_Extbase_Utility_Localization {
                        $value = self::translateFileReference($key);
                } else {
                        self::initializeLocalization($extensionName);
-
                        // The "from" charset of csConv() is only set for strings from TypoScript via _LOCAL_LANG
                        if (isset(self::$LOCAL_LANG[$extensionName][self::$languageKey][$key])) {
                                $value = self::$LOCAL_LANG[$extensionName][self::$languageKey][$key];
@@ -205,12 +204,43 @@ class Tx_Extbase_Utility_Localization {
                                        } else {
                                                self::$LOCAL_LANG_charset[$extensionName][$languageKey][$labelKey] = $GLOBALS['TSFE']->csConvObj->charSetArray[$languageKey];
                                        }
+                               } elseif (is_array($labelValue)) {
+                                       $labelValue = self::flattenTypoScriptLabelArray($labelValue, $labelKey);
+                                       self::$LOCAL_LANG[$extensionName][$languageKey] = array_merge(self::$LOCAL_LANG[$extensionName][$languageKey], $labelValue);
                                }
                        }
                }
        }
 
        /**
+        * Flatten TypoScript label array; converting a hierarchical array into a flat
+        * array with the keys separated by dots.
+        *
+        * Example Input:  array('k1' => array('subkey1' => 'val1'))
+        * Example Output: array('k1.subkey1' => 'val1')
+        *
+        * @param array $labelValues Hierarchical array of labels
+        * @param string $parentKey the name of the parent key in the recursion; is only needed for recursion.
+        * @return array flattened array of labels.
+        */
+       protected function flattenTypoScriptLabelArray(array $labelValues, $parentKey = '') {
+               $result = array();
+               foreach ($labelValues as $key => $labelValue) {
+                       if (!empty($parentKey)) {
+                               $key = $parentKey . '.' . $key;
+                       }
+
+                       if (is_array($labelValue)) {
+                               $labelValue = self::flattenTypoScriptLabelArray($labelValue, $key);
+                               $result = array_merge($result, $labelValue);
+                       } else {
+                               $result[$key] = $labelValue;
+                       }
+               }
+               return $result;
+       }
+
+       /**
         * Converts a string from the specified character set to the current.
         * The current charset is defined by the TYPO3 mode.
         *
index d5e620b..a2c53ca 100644 (file)
@@ -22,8 +22,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-require_once(t3lib_extMgm::extPath('phpunit') . 'class.tx_phpunit_selenium_testcase.php');
-
 /**
  * Base Selenium testcase for the Extbase extension.
  */
index fd1c9a6..461fe67 100644 (file)
@@ -25,8 +25,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-require_once(t3lib_extMgm::extPath('phpunit') . 'class.tx_phpunit_testcase.php');
-
 /**
  * Base testcase for the Extbase extension.
  */
index 46e2226..3a06f95 100644 (file)
@@ -416,5 +416,48 @@ class Tx_Extbase_Tests_Unit_Configuration_AbstractConfigurationManagerTest exten
                $actualResult = $mergedConfiguration['controllerConfiguration'];
                $this->assertEquals($expectedResult, $actualResult);
        }
+
+       /**
+        * @test
+        */
+       public function setStoragePidWithStdWrap() {
+
+               unset($this->abstractConfigurationManager);
+               $this->abstractConfigurationManager = $this->getMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('getSwitchableControllerActions', 'getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration'));
+
+               $pluginConfiguration = $this->testPluginConfiguration;
+               $pluginConfiguration['persistence']['storagePid'] = array(
+                       'cObject' => array(
+                               'value' => '8,3',
+                               '_typoScriptNodeValue' => 'TEXT'
+                       )
+               );
+
+               $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup));
+               $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($pluginConfiguration));
+               $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue(NULL));
+
+               $expectedResult = array(
+                       'settings' => array(
+                               'setting1' => 'overriddenValue1',
+                               'setting2' => 'value2',
+                               'setting3' => 'additionalValue',
+                       ),
+                       'view' => array(
+                               'viewSub' => array(
+                                       'key1' => 'overridden',
+                                       'key2' => 'value2',
+                                       'key3' => 'new key',
+                               )
+                       ),
+                       'persistence' => array(
+                               'storagePid' => '8,3',
+                       ),
+                       'controllerConfiguration' => NULL
+               );
+
+               $actualResult = $this->abstractConfigurationManager->getConfiguration('CurrentExtensionName', 'CurrentPluginName');
+               $this->assertEquals($expectedResult, $actualResult);
+       }
 }
 ?>
\ No newline at end of file
index d7c4e25..6527883 100644 (file)
@@ -216,6 +216,28 @@ class Tx_Extbase_Tests_Unit_MVC_Web_RequestBuilderTest extends Tx_Extbase_Tests_
 
        /**
         * @test
+        * @expectedException Tx_Extbase_MVC_Exception
+        */
+       public function buildThrowsExceptionIfControllerConfigurationIsEmptyOrNotSet() {
+               unset($this->configuration['controllerConfiguration']);
+               $this->mockConfigurationManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($this->configuration));
+               $this->requestBuilder->injectConfigurationManager($this->mockConfigurationManager);
+               $this->requestBuilder->build();
+       }
+
+       /**
+        * @test
+        * @expectedException Tx_Extbase_MVC_Exception
+        */
+       public function buildThrowsExceptionIfControllerConfigurationHasNoDefaultActionDefined() {
+               $this->configuration['controllerConfiguration']['TheFirstController'] = array();
+               $this->mockConfigurationManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($this->configuration));
+               $this->requestBuilder->injectConfigurationManager($this->mockConfigurationManager);
+               $this->requestBuilder->build();
+       }
+
+       /**
+        * @test
         */
        public function buildSetsParametersFromGetAndPostVariables() {
                $this->configuration['extensionName'] = 'SomeExtensionName';
index 50de815..c65ce5a 100644 (file)
@@ -543,7 +543,7 @@ class Tx_Extbase_Tests_Unit_MVC_Web_Routing_UriBuilderTest extends Tx_Extbase_Te
                $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy'));
                $actualResult = $mockUriBuilder->_call('convertTransientObjectToArray', $mockValueObject);
 
-               $expectedResult = array('name' => 'foo', 'uid' => NULL);
+               $expectedResult = array('name' => 'foo', 'uid' => NULL, 'pid' => NULL);
                $this->assertEquals($expectedResult, $actualResult);
        }
 
@@ -573,8 +573,12 @@ class Tx_Extbase_Tests_Unit_MVC_Web_Routing_UriBuilderTest extends Tx_Extbase_Te
                $expectedResult = array(
                        'object' => array(
                                'object' => 99,
-                               'uid' => NULL),
-                       'uid' => NULL);
+                               'uid' => NULL,
+                               'pid' => NULL
+                               ),
+                       'uid' => NULL,
+                       'pid' => NULL
+                       );
                $this->assertEquals($expectedResult, $actualResult);
        }
 
index c377798..f82428a 100644 (file)
@@ -35,7 +35,7 @@ require_once(t3lib_extMgm::extPath('extbase') . 'Tests/Unit/Object/Container/Fix
 class Tx_Extbase_Tests_Unit_Object_Container_ClassInfoFactoryTest extends Tx_Extbase_Tests_Unit_BaseTestCase {
 
        /**
-        * @var t3lib_object_ClassInfoFactory
+        * @var Tx_Extbase_Object_Container_ClassInfoFactory
         */
        private $classInfoFactory;
 
@@ -57,6 +57,14 @@ class Tx_Extbase_Tests_Unit_Object_Container_ClassInfoFactoryTest extends Tx_Ext
        /**
         * @test
         */
+       public function buildClassInfoDoesNotIncludeInjectSettingsMethodInListOfInjectMethods() {
+               $classInfo = $this->classInfoFactory->buildClassInfoFromClassName('t3lib_object_tests_class_with_injectsettings');
+               $this->assertEquals(array('injectFoo' => 't3lib_object_tests_resolveablecyclic1'), $classInfo->getInjectMethods());
+       }
+
+       /**
+        * @test
+        */
        public function moreTestsNeedToBeWritten() {
                $this->markTestIncomplete('More tests need to be written!');
        }
index 90663db..6716ea7 100644 (file)
@@ -37,8 +37,7 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
        private $container;
 
        public function setUp() {
-               $this->container = new Tx_Extbase_Object_Container_Container();
-
+               $this->container = $this->getMock('Tx_Extbase_Object_Container_Container', array('log'));
        }
 
        /**
@@ -78,6 +77,15 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
 
        /**
         * @test
+        */
+       public function getInstanceReturnsInstanceOfAClassWithMixedSimpleTypeAndConstructorInjectionWithNullDefaultValue() {
+               $object = $this->container->getInstance('t3lib_object_tests_amixed_null');
+               $this->assertType('t3lib_object_tests_amixed_null', $object);
+               $this->assertNull($object->myvalue);
+       }
+
+       /**
+        * @test
         * @expectedException Tx_Extbase_Object_Exception
         */
        public function getInstanceThrowsExceptionWhenTryingToInstanciateASingletonWithConstructorParameters() {
@@ -127,18 +135,17 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
 
        /**
         * @test
-        * @expectedException Tx_Extbase_Object_Exception
+        * @expectedException Tx_Extbase_Object_Exception_CannotBuildObject
         */
-       public function getInstanceThrowsExceptionIfObjectContainsCyclicDependencyAndIsNoSingleton() {
-               $this->container->getInstance('t3lib_object_tests_cyclic1');
+       public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaConstructorInjectionContainCyclicDependencies() {
+               $this->container->getInstance('t3lib_object_tests_cyclic1WithSetterDependency');
        }
 
-
        /**
         * @test
-        * @expectedException Tx_Extbase_Object_Exception
+        * @expectedException Tx_Extbase_Object_Exception_CannotBuildObject
         */
-       public function getInstanceThrowsExceptionIfObjectContainsCyclicDependency() {
+       public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaSetterInjectionContainCyclicDependencies() {
                $this->container->getInstance('t3lib_object_tests_cyclic1');
        }
 
@@ -148,7 +155,6 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
         */
        public function getInstanceThrowsExceptionIfClassWasNotFound() {
                $this->container->getInstance('nonextistingclass_bla');
-
        }
 
        /**
@@ -166,6 +172,9 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
                $this->container->registerImplementation('t3lib_object_tests_someinterface', 't3lib_object_tests_someimplementation');
                $object = $this->container->getInstance('t3lib_object_tests_needsinterface');
                $this->assertType('t3lib_object_tests_needsinterface', $object);
+
+               $this->assertType('t3lib_object_tests_someinterface', $object->dependency);
+               $this->assertType('t3lib_object_tests_someimplementation', $object->dependency);
        }
 
        /**
@@ -177,9 +186,84 @@ class Tx_Extbase_Tests_Unit_Object_Container_ContainerTest extends Tx_Extbase_Te
                $this->assertType('t3lib_object_tests_resolveablecyclic1', $object->o2->o3->o1);
        }
 
+       /**
+        * @test
+        */
+       public function singletonWhichRequiresPrototypeViaSetterInjectionWorksAndAddsDebugMessage() {
+               $this->container->expects($this->once())->method('log')->with('The singleton "t3lib_object_singletonNeedsPrototype" needs a prototype in "injectDependency". This is often a bad code smell; often you rather want to inject a singleton.', 1);
 
+               $object = $this->container->getInstance('t3lib_object_singletonNeedsPrototype');
+               $this->assertType('t3lib_object_prototype', $object->dependency);
+       }
 
-}
+       /**
+        * @test
+        */
+       public function singletonWhichRequiresSingletonViaSetterInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
+
+               $object = $this->container->getInstance('t3lib_object_singletonNeedsSingleton');
+               $this->assertType('t3lib_object_singleton', $object->dependency);
+       }
 
+       /**
+        * @test
+        */
+       public function prototypeWhichRequiresPrototypeViaSetterInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
 
-?>
+               $object = $this->container->getInstance('t3lib_object_prototypeNeedsPrototype');
+               $this->assertType('t3lib_object_prototype', $object->dependency);
+       }
+
+       /**
+        * @test
+        */
+       public function prototypeWhichRequiresSingletonViaSetterInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
+
+               $object = $this->container->getInstance('t3lib_object_prototypeNeedsSingleton');
+               $this->assertType('t3lib_object_singleton', $object->dependency);
+       }
+
+       /**
+        * @test
+        */
+       public function singletonWhichRequiresPrototypeViaConstructorInjectionWorksAndAddsDebugMessage() {
+               $this->container->expects($this->once())->method('log')->with('The singleton "t3lib_object_singletonNeedsPrototypeInConstructor" needs a prototype in the constructor. This is often a bad code smell; often you rather want to inject a singleton.', 1);
+
+               $object = $this->container->getInstance('t3lib_object_singletonNeedsPrototypeInConstructor');
+               $this->assertType('t3lib_object_prototype', $object->dependency);
+       }
+
+       /**
+        * @test
+        */
+       public function singletonWhichRequiresSingletonViaConstructorInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
+
+               $object = $this->container->getInstance('t3lib_object_singletonNeedsSingletonInConstructor');
+               $this->assertType('t3lib_object_singleton', $object->dependency);
+       }
+
+       /**
+        * @test
+        */
+       public function prototypeWhichRequiresPrototypeViaConstructorInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
+
+               $object = $this->container->getInstance('t3lib_object_prototypeNeedsPrototypeInConstructor');
+               $this->assertType('t3lib_object_prototype', $object->dependency);
+       }
+
+       /**
+        * @test
+        */
+       public function prototypeWhichRequiresSingletonViaConstructorInjectionWorks() {
+               $this->container->expects($this->never())->method('log');
+
+               $object = $this->container->getInstance('t3lib_object_prototypeNeedsSingletonInConstructor');
+               $this->assertType('t3lib_object_singleton', $object->dependency);
+       }
+}
+?>
\ No newline at end of file
index 8a05096..2d2c7a0 100644 (file)
@@ -37,6 +37,21 @@ class t3lib_object_tests_amixed_array {
 }
 
 /**
+ * test class A that depends on B and C and has a third default parameter in constructor that defaults to NULL
+ *
+ */
+class t3lib_object_tests_amixed_null {
+       public $b;
+       public $c;
+       public $myvalue;
+       public function __construct(t3lib_object_tests_b $b, t3lib_object_tests_c $c, $myvalue = NULL) {
+               $this->b = $b;
+               $this->c = $c;
+               $this->myvalue = $myvalue;
+       }
+}
+
+/**
  * test class A that depends on B and C and has a third default parameter in constructor
  *
  */
@@ -102,12 +117,12 @@ class t3lib_object_tests_b_child_someimplementation extends t3lib_object_tests_b
  */
 class t3lib_object_tests_needsinterface {
        public function __construct(t3lib_object_tests_someinterface $i) {
-
+               $this->dependency = $i;
        }
 }
 
 /**
- * classes that depends on each other (death look)
+ * Prototype classes that depend on each other
  *
  */
 class t3lib_object_tests_cyclic1 {
@@ -122,6 +137,18 @@ class t3lib_object_tests_cyclic2 {
        }
 }
 
+class t3lib_object_tests_cyclic1WithSetterDependency {
+       public function injectFoo(t3lib_object_tests_cyclic2WithSetterDependency $c) {
+
+       }
+}
+
+class t3lib_object_tests_cyclic2WithSetterDependency {
+       public function injectFoo(t3lib_object_tests_cyclic1WithSetterDependency $c) {
+
+       }
+}
+
 /**
  * class which has setter injections defined
  *
@@ -191,4 +218,66 @@ class t3lib_object_tests_resolveablecyclic3 implements t3lib_Singleton {
        }
 }
 
+class t3lib_object_tests_class_with_injectsettings {
+       public function injectFoo(t3lib_object_tests_resolveablecyclic1 $c1) {
+       }
+
+       public function injectSettings(array $settings) {
+       }
+}
 
+/*
+ *  a Singleton requires a Prototype for Injection -> allowed, autowiring active, but in development context we write a log message, as it is bad practice and most likely points to some logic error.
+If a Singleton requires a Singleton for Injection -> allowed, autowiring active
+If a Prototype requires a Prototype for Injection -> allowed, autowiring active
+If a Prototype requires a Singleton for Injection -> allowed, autowiring active
+ */
+class t3lib_object_singleton implements t3lib_Singleton {
+}
+
+class t3lib_object_prototype {
+}
+
+class t3lib_object_singletonNeedsPrototype implements t3lib_Singleton {
+       public function injectDependency(t3lib_object_prototype $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+
+class t3lib_object_singletonNeedsSingleton implements t3lib_Singleton {
+       public function injectDependency(t3lib_object_singleton $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+class t3lib_object_prototypeNeedsPrototype {
+       public function injectDependency(t3lib_object_prototype $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+class t3lib_object_prototypeNeedsSingleton {
+       public function injectDependency(t3lib_object_singleton $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+
+class t3lib_object_singletonNeedsPrototypeInConstructor implements t3lib_Singleton {
+       public function __construct(t3lib_object_prototype $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+
+class t3lib_object_singletonNeedsSingletonInConstructor implements t3lib_Singleton {
+       public function __construct(t3lib_object_singleton $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+class t3lib_object_prototypeNeedsPrototypeInConstructor {
+       public function __construct(t3lib_object_prototype $dependency) {
+               $this->dependency = $dependency;
+       }
+}
+class t3lib_object_prototypeNeedsSingletonInConstructor {
+       public function __construct(t3lib_object_singleton $dependency) {
+               $this->dependency = $dependency;
+       }
+}
index 1fd2979..142f856 100644 (file)
@@ -25,8 +25,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-require_once(PATH_tslib . 'class.tslib_content.php');
-
 class Tx_Extbase_Tests_Unit_Persistence_Mapper_DataMapFactoryTest extends Tx_Extbase_Tests_Unit_BaseTestCase {
 
        /**
index 8221baf..d26f509 100644 (file)
@@ -86,6 +86,7 @@ class Tx_Extbase_Tests_Unit_Persistence_RepositoryTest extends Tx_Extbase_Tests_
         */
        public function addActuallyAddsAnObjectToTheInternalObjectsArray() {
                $someObject = new stdClass();
+
                $this->repository->_set('objectType', get_class($someObject));
                $this->repository->add($someObject);
 
@@ -96,9 +97,9 @@ class Tx_Extbase_Tests_Unit_Persistence_RepositoryTest extends Tx_Extbase_Tests_
         * @test
         */
        public function removeActuallyRemovesAnObjectFromTheInternalObjectsArray() {
-               $object1 = new stdClass();
-               $object2 = new stdClass();
-               $object3 = new stdClass();
+               $object1 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
+               $object2 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
+               $object3 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
 
                $this->repository->_set('objectType', get_class($object1));
                $this->repository->add($object1);
@@ -116,17 +117,17 @@ class Tx_Extbase_Tests_Unit_Persistence_RepositoryTest extends Tx_Extbase_Tests_
         * @test
         */
        public function removeRemovesTheRightObjectEvenIfItHasBeenModifiedSinceItsAddition() {
-               $object1 = new ArrayObject(array('val' => '1'));
-               $object2 = new ArrayObject(array('val' => '2'));
-               $object3 = new ArrayObject(array('val' => '3'));
+               $object1 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
+               $object2 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
+               $object3 = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
 
                $this->repository->_set('objectType', get_class($object1));
                $this->repository->add($object1);
                $this->repository->add($object2);
                $this->repository->add($object3);
 
-               $object2['foo'] = 'bar';
-               $object3['val'] = '2';
+               $object2->setPid(1);
+               $object3->setPid(2);
 
                $this->repository->remove($object2);
 
@@ -142,7 +143,10 @@ class Tx_Extbase_Tests_Unit_Persistence_RepositoryTest extends Tx_Extbase_Tests_
         * @test
         */
        public function removeRetainsObjectForObjectsNotInCurrentSession() {
-               $object = new ArrayObject(array('val' => '1'));
+               $object = $this->getMock('Tx_Extbase_DomainObject_AbstractDomainObject');
+                       // if the object is not currently add()ed, it is not new
+               $object->expects($this->once())->method('_isNew')->will($this->returnValue(FALSE));
+
                $this->repository->_set('objectType', get_class($object));
                $this->repository->remove($object);
 
index 7f1f423..8c5f217 100644 (file)
@@ -25,8 +25,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-require_once(PATH_tslib . 'class.tslib_content.php');
-
 class Tx_Extbase_Tests_Unit_Persistence_SessionTest extends tx_phpunit_testcase {
 
        /**
index ab3a40e..334d72f 100644 (file)
@@ -278,6 +278,17 @@ class Tx_Extbase_Tests_Unit_Reflection_ObjectAccessTest extends Tx_Extbase_Tests
        /**
         * @test
         */
+       public function isPropertyGettableWorksOnArrayAccessObjects() {
+               $arrayObject = new ArrayObject();
+               $arrayObject['key'] = 'v';
+
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($arrayObject, 'key'));
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($arrayObject, 'undefinedKey'));
+       }
+
+       /**
+        * @test
+        */
        public function isPropertyGettableWorksOnStdClass() {
                $stdClassObject = new stdClass();
                $stdClassObject->property = 'foo';
diff --git a/typo3/sysext/extbase/Tests/Unit/Utility/LocalizationTest.php b/typo3/sysext/extbase/Tests/Unit/Utility/LocalizationTest.php
new file mode 100644 (file)
index 0000000..a2984c2
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2011 Extbase Team
+*  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!
+***************************************************************/
+
+/**
+ * Testcase for class Tx_Extbase_Utility_Localization
+ *
+ * @package Extbase
+ * @subpackage Utility
+ */
+class Tx_Extbase_Tests_Unit_Utility_LocalizationTest extends Tx_Extbase_BaseTestCase {
+
+       /**
+        * @var Tx_Extbase_Utility_Localization
+        */
+       protected $localization;
+
+       public function setUp() {
+               $this->localization = $this->getAccessibleMock('Tx_Extbase_Utility_Localization', array('dummy'));
+       }
+
+       public function tearDown() {
+               $this->localization = NULL;
+       }
+
+       /**
+        * @test
+        * @author Sebastian Kurfürst <sebastian@typo3.org>
+        */
+       public function implodeTypoScriptLabelArrayWorks() {
+               $expected = array(
+                       'key1' => 'value1',
+                       'key2' => 'value2',
+                       'key3.subkey1' => 'subvalue1',
+                       'key3.subkey2.subsubkey' => 'val'
+               );
+               $actual = $this->localization->_call('flattenTypoScriptLabelArray', array(
+                       'key1' => 'value1',
+                       'key2' => 'value2',
+                       'key3' => array(
+                               'subkey1' => 'subvalue1',
+                               'subkey2' => array(
+                                       'subsubkey' => 'val'
+                               )
+                       )
+               ));
+               $this->assertEquals($expected, $actual);
+       }
+}
+?>
\ No newline at end of file
index 55dc445..0afb494 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 // DO NOT CHANGE THIS FILE! It is automatically generated by Tx_Extbase_Utility_Extension::createAutoloadRegistryForExtension.
-// This file was generated on 2010-11-10 12:37
+// This file was generated on 2011-01-21 14:39
 
 $extensionClassesPath = t3lib_extMgm::extPath('extbase') . 'Classes/';
 return array(
@@ -76,6 +76,7 @@ return array(
        '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_objectmanager' => $extensionClassesPath . 'Object/ObjectManager.php',
        'tx_extbase_object_objectmanagerinterface' => $extensionClassesPath . 'Object/ObjectManagerInterface.php',
        'tx_extbase_object_container_classinfo' => $extensionClassesPath . 'Object/Container/ClassInfo.php',
@@ -85,7 +86,7 @@ return array(
        'tx_extbase_object_container_exception_cannotinitializecacheexception' => $extensionClassesPath . 'Object/Container/Exception/CannotInitializeCacheException.php',
        'tx_extbase_object_container_exception_toomanyrecursionlevelsexception' => $extensionClassesPath . 'Object/Container/Exception/TooManyRecursionLevelsException.php',
        'tx_extbase_object_container_exception_unknownobjectexception' => $extensionClassesPath . 'Object/Container/Exception/UnknownObjectException.php',
-       'tx_extbase_object_cannotbuildobject' => $extensionClassesPath . 'Object/Exception/CannotBuildObject.php',
+       'tx_extbase_object_exception_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',
@@ -192,6 +193,7 @@ return array(
        'tx_extbase_reflection_propertyreflection' => $extensionClassesPath . 'Reflection/PropertyReflection.php',
        'tx_extbase_reflection_service' => $extensionClassesPath . 'Reflection/Service.php',
        'tx_extbase_reflection_exception_invalidpropertytype' => $extensionClassesPath . 'Reflection/Exception/InvalidPropertyType.php',
+       'tx_extbase_reflection_exception_propertynotaccessibleexception' => $extensionClassesPath . 'Reflection/Exception/PropertyNotAccessibleException.php',
        'tx_extbase_security_exception' => $extensionClassesPath . 'Security/Exception.php',
        'tx_extbase_security_channel_requesthashservice' => $extensionClassesPath . 'Security/Channel/RequestHashService.php',
        'tx_extbase_security_cryptography_hashservice' => $extensionClassesPath . 'Security/Cryptography/HashService.php',
@@ -203,6 +205,7 @@ return array(
        'tx_extbase_utility_classloader' => $extensionClassesPath . 'Utility/ClassLoader.php',
        'tx_extbase_utility_extbaserequirementscheck' => $extensionClassesPath . 'Utility/ExtbaseRequirementsCheck.php',
        'tx_extbase_utility_extension' => $extensionClassesPath . 'Utility/Extension.php',
+       'tx_extbase_utility_frontendsimulator' => $extensionClassesPath . 'Utility/FrontendSimulator.php',
        'tx_extbase_utility_localization' => $extensionClassesPath . 'Utility/Localization.php',
        'tx_extbase_utility_typehandling' => $extensionClassesPath . 'Utility/TypeHandling.php',
        'tx_extbase_utility_typoscript' => $extensionClassesPath . 'Utility/TypoScript.php',
index 1e3a91e..2259bc6 100644 (file)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "extbase".
 #
-# Auto generated 12-01-2011 16:45
+# Auto generated 21-01-2011 14:41
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
 ########################################################################
 
 $EM_CONF[$_EXTKEY] = array(
-       'title' => 'A Framework for Extensions',
+       'title' => 'Extbase Framework for Extensions',
        'description' => 'A framework to build extensions in the style of FLOW3 by now.',
        'category' => 'misc',
-       'author' => 'TYPO3 core team',
+       'author' => 'Extbase Team',
        'author_email' => '',
        'shy' => '',
        'dependencies' => '',
@@ -29,7 +29,7 @@ $EM_CONF[$_EXTKEY] = array(
        'clearCacheOnLoad' => 1,
        'lockType' => '',
        'author_company' => '',
-       'version' => '1.3.0beta4',
+       'version' => '1.3.0RC1',
        '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:301:{s:13:"ChangeLog.txt";s:4:"0e70";s:16:"ext_autoload.php";s:4:"6ba7";s:12:"ext_icon.gif";s:4:"e922";s:17:"ext_localconf.php";s:4:"50dd";s:14:"ext_tables.php";s:4:"491e";s:14:"ext_tables.sql";s:4:"0c2f";s:24:"ext_typoscript_setup.txt";s:4:"2bf7";s:22:"Classes/Dispatcher.php";s:4:"c031";s:21:"Classes/Exception.php";s:4:"c346";s:54:"Classes/Configuration/AbstractConfigurationManager.php";s:4:"733b";s:53:"Classes/Configuration/BackendConfigurationManager.php";s:4:"ba7c";s:46:"Classes/Configuration/ConfigurationManager.php";s:4:"31cb";s:55:"Classes/Configuration/ConfigurationManagerInterface.php";s:4:"7a2b";s:35:"Classes/Configuration/Exception.php";s:4:"31e6";s:54:"Classes/Configuration/FrontendConfigurationManager.php";s:4:"7a7b";s:53:"Classes/Configuration/Exception/ContainerIsLocked.php";s:4:"113a";s:60:"Classes/Configuration/Exception/InvalidConfigurationType.php";s:4:"9379";s:46:"Classes/Configuration/Exception/NoSuchFile.php";s:4:"75ce";s:48:"Classes/Configuration/Exception/NoSuchOption.php";s:4:"f616";s:46:"Classes/Configuration/Exception/ParseError.php";s:4:"b75a";s:26:"Classes/Core/Bootstrap.php";s:4:"4cce";s:37:"Classes/Domain/Model/FrontendUser.php";s:4:"7bb3";s:42:"Classes/Domain/Model/FrontendUserGroup.php";s:4:"794d";s:57:"Classes/Domain/Repository/FrontendUserGroupRepository.php";s:4:"0197";s:52:"Classes/Domain/Repository/FrontendUserRepository.php";s:4:"ce1e";s:45:"Classes/DomainObject/AbstractDomainObject.php";s:4:"4fae";s:39:"Classes/DomainObject/AbstractEntity.php";s:4:"81ea";s:44:"Classes/DomainObject/AbstractValueObject.php";s:4:"42f0";s:46:"Classes/DomainObject/DomainObjectInterface.php";s:4:"2d94";s:23:"Classes/Error/Error.php";s:4:"4fa2";s:26:"Classes/MVC/Dispatcher.php";s:4:"fd5f";s:25:"Classes/MVC/Exception.php";s:4:"606f";s:23:"Classes/MVC/Request.php";s:4:"d652";s:39:"Classes/MVC/RequestHandlerInterface.php";s:4:"620c";s:38:"Classes/MVC/RequestHandlerResolver.php";s:4:"860e";s:32:"Classes/MVC/RequestInterface.php";s:4:"e830";s:24:"Classes/MVC/Response.php";s:4:"0069";s:33:"Classes/MVC/ResponseInterface.php";s:4:"0ab1";s:45:"Classes/MVC/Controller/AbstractController.php";s:4:"2130";s:43:"Classes/MVC/Controller/ActionController.php";s:4:"dcf2";s:35:"Classes/MVC/Controller/Argument.php";s:4:"56f6";s:40:"Classes/MVC/Controller/ArgumentError.php";s:4:"6c22";s:36:"Classes/MVC/Controller/Arguments.php";s:4:"cff5";s:45:"Classes/MVC/Controller/ArgumentsValidator.php";s:4:"ca84";s:44:"Classes/MVC/Controller/ControllerContext.php";s:4:"b24c";s:46:"Classes/MVC/Controller/ControllerInterface.php";s:4:"c450";s:40:"Classes/MVC/Controller/FlashMessages.php";s:4:"f28e";s:38:"Classes/MVC/Exception/InfiniteLoop.php";s:4:"5984";s:43:"Classes/MVC/Exception/InvalidActionName.php";s:4:"baec";s:45:"Classes/MVC/Exception/InvalidArgumentName.php";s:4:"55a6";s:45:"Classes/MVC/Exception/InvalidArgumentType.php";s:4:"0b9c";s:46:"Classes/MVC/Exception/InvalidArgumentValue.php";s:4:"a836";s:43:"Classes/MVC/Exception/InvalidController.php";s:4:"f0b0";s:47:"Classes/MVC/Exception/InvalidControllerName.php";s:4:"7b4c";s:46:"Classes/MVC/Exception/InvalidExtensionName.php";s:4:"865a";s:39:"Classes/MVC/Exception/InvalidMarker.php";s:4:"4a5e";s:48:"Classes/MVC/Exception/InvalidOrNoRequestHash.php";s:4:"beff";s:46:"Classes/MVC/Exception/InvalidRequestMethod.php";s:4:"508f";s:44:"Classes/MVC/Exception/InvalidRequestType.php";s:4:"def7";s:49:"Classes/MVC/Exception/InvalidTemplateResource.php";s:4:"bbb7";s:43:"Classes/MVC/Exception/InvalidUriPattern.php";s:4:"cee0";s:43:"Classes/MVC/Exception/InvalidViewHelper.php";s:4:"686d";s:38:"Classes/MVC/Exception/NoSuchAction.php";s:4:"1889";s:40:"Classes/MVC/Exception/NoSuchArgument.php";s:4:"1bec";s:42:"Classes/MVC/Exception/NoSuchController.php";s:4:"baa6";s:36:"Classes/MVC/Exception/StopAction.php";s:4:"7290";s:48:"Classes/MVC/Exception/UnsupportedRequestType.php";s:4:"27ce";s:33:"Classes/MVC/View/AbstractView.php";s:4:"3960";s:30:"Classes/MVC/View/EmptyView.php";s:4:"52f5";s:33:"Classes/MVC/View/NotFoundView.php";s:4:"5fe7";s:34:"Classes/MVC/View/ViewInterface.php";s:4:"dc07";s:42:"Classes/MVC/Web/AbstractRequestHandler.php";s:4:"a510";s:41:"Classes/MVC/Web/BackendRequestHandler.php";s:4:"31f7";s:42:"Classes/MVC/Web/FrontendRequestHandler.php";s:4:"33bd";s:27:"Classes/MVC/Web/Request.php";s:4:"93cc";s:34:"Classes/MVC/Web/RequestBuilder.php";s:4:"26d7";s:28:"Classes/MVC/Web/Response.php";s:4:"7156";s:38:"Classes/MVC/Web/Routing/UriBuilder.php";s:4:"a952";s:28:"Classes/Object/Exception.php";s:4:"2f66";s:26:"Classes/Object/Manager.php";s:4:"4026";s:32:"Classes/Object/ObjectManager.php";s:4:"c78d";s:41:"Classes/Object/ObjectManagerInterface.php";s:4:"9dd9";s:38:"Classes/Object/Container/ClassInfo.php";s:4:"3ddc";s:43:"Classes/Object/Container/ClassInfoCache.php";s:4:"f745";s:45:"Classes/Object/Container/ClassInfoFactory.php";s:4:"a95c";s:38:"Classes/Object/Container/Container.php";s:4:"e65a";s:69:"Classes/Object/Container/Exception/CannotInitializeCacheException.php";s:4:"4258";s:70:"Classes/Object/Container/Exception/TooManyRecursionLevelsException.php";s:4:"cd39";s:61:"Classes/Object/Container/Exception/UnknownObjectException.php";s:4:"d18e";s:46:"Classes/Object/Exception/CannotBuildObject.php";s:4:"315b";s:53:"Classes/Object/Exception/CannotReconstituteObject.php";s:4:"e8cc";s:41:"Classes/Object/Exception/InvalidClass.php";s:4:"d226";s:42:"Classes/Object/Exception/InvalidObject.php";s:4:"cc16";s:55:"Classes/Object/Exception/InvalidObjectConfiguration.php";s:4:"e82a";s:52:"Classes/Object/Exception/ObjectAlreadyRegistered.php";s:4:"eecb";s:41:"Classes/Object/Exception/UnknownClass.php";s:4:"d10a";s:45:"Classes/Object/Exception/UnknownInterface.php";s:4:"22a4";s:51:"Classes/Object/Exception/UnresolvedDependencies.php";s:4:"7d47";s:39:"Classes/Object/Exception/WrongScope.php";s:4:"cc92";s:31:"Classes/Persistence/Backend.php";s:4:"d2cf";s:40:"Classes/Persistence/BackendInterface.php";s:4:"88db";s:33:"Classes/Persistence/Exception.php";s:4:"1713";s:35:"Classes/Persistence/IdentityMap.php";s:4:"b49d";s:40:"Classes/Persistence/LazyLoadingProxy.php";s:4:"1928";s:41:"Classes/Persistence/LazyObjectStorage.php";s:4:"faa1";s:48:"Classes/Persistence/LoadingStrategyInterface.php";s:4:"fa0d";s:31:"Classes/Persistence/Manager.php";s:4:"6e42";s:40:"Classes/Persistence/ManagerInterface.php";s:4:"17d8";s:49:"Classes/Persistence/ObjectMonitoringInterface.php";s:4:"6054";s:37:"Classes/Persistence/ObjectStorage.php";s:4:"a883";s:36:"Classes/Persistence/PropertyType.php";s:4:"f62a";s:29:"Classes/Persistence/Query.php";s:4:"203d";s:36:"Classes/Persistence/QueryFactory.php";s:4:"4ab8";s:45:"Classes/Persistence/QueryFactoryInterface.php";s:4:"900e";s:38:"Classes/Persistence/QueryInterface.php";s:4:"ebdb";s:35:"Classes/Persistence/QueryResult.php";s:4:"ace3";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"843d";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"1e52";s:34:"Classes/Persistence/Repository.php";s:4:"4074";s:43:"Classes/Persistence/RepositoryInterface.php";s:4:"55e7";s:31:"Classes/Persistence/Session.php";s:4:"43b4";s:42:"Classes/Persistence/Typo3QuerySettings.php";s:4:"cd0d";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:60:"Classes/Persistence/Exception/InvalidNumberOfConstraints.php";s:4:"3a38";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:"1aba";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:53:"Classes/Persistence/Exception/UnsupportedRelation.php";s:4:"6bc0";s:40:"Classes/Persistence/Mapper/ColumnMap.php";s:4:"fee9";s:38:"Classes/Persistence/Mapper/DataMap.php";s:4:"2b19";s:45:"Classes/Persistence/Mapper/DataMapFactory.php";s:4:"ab68";s:41:"Classes/Persistence/Mapper/DataMapper.php";s:4:"419d";s:40:"Classes/Persistence/QOM/AndInterface.php";s:4:"f72d";s:45:"Classes/Persistence/QOM/BindVariableValue.php";s:4:"454e";s:54:"Classes/Persistence/QOM/BindVariableValueInterface.php";s:4:"822e";s:38:"Classes/Persistence/QOM/Comparison.php";s:4:"74e7";s:47:"Classes/Persistence/QOM/ComparisonInterface.php";s:4:"f50a";s:38:"Classes/Persistence/QOM/Constraint.php";s:4:"6e7b";s:47:"Classes/Persistence/QOM/ConstraintInterface.php";s:4:"c106";s:42:"Classes/Persistence/QOM/DynamicOperand.php";s:4:"29d3";s:51:"Classes/Persistence/QOM/DynamicOperandInterface.php";s:4:"981b";s:45:"Classes/Persistence/QOM/EquiJoinCondition.php";s:4:"29b1";s:54:"Classes/Persistence/QOM/EquiJoinConditionInterface.php";s:4:"b9f5";s:32:"Classes/Persistence/QOM/Join.php";s:4:"d270";s:50:"Classes/Persistence/QOM/JoinConditionInterface.php";s:4:"63c8";s:41:"Classes/Persistence/QOM/JoinInterface.php";s:4:"c3a5";s:38:"Classes/Persistence/QOM/LogicalAnd.php";s:4:"4b22";s:38:"Classes/Persistence/QOM/LogicalNot.php";s:4:"aba3";s:37:"Classes/Persistence/QOM/LogicalOr.php";s:4:"3476";s:37:"Classes/Persistence/QOM/LowerCase.php";s:4:"15a8";s:46:"Classes/Persistence/QOM/LowerCaseInterface.php";s:4:"215c";s:40:"Classes/Persistence/QOM/NotInterface.php";s:4:"8d10";s:35:"Classes/Persistence/QOM/Operand.php";s:4:"a635";s:44:"Classes/Persistence/QOM/OperandInterface.php";s:4:"39ff";s:39:"Classes/Persistence/QOM/OrInterface.php";s:4:"b109";s:36:"Classes/Persistence/QOM/Ordering.php";s:4:"e7f4";s:45:"Classes/Persistence/QOM/OrderingInterface.php";s:4:"b9f9";s:41:"Classes/Persistence/QOM/PropertyValue.php";s:4:"96fb";s:50:"Classes/Persistence/QOM/PropertyValueInterface.php";s:4:"6526";s:62:"Classes/Persistence/QOM/QueryObjectModelConstantsInterface.php";s:4:"33bb";s:51:"Classes/Persistence/QOM/QueryObjectModelFactory.php";s:4:"e6fc";s:60:"Classes/Persistence/QOM/QueryObjectModelFactoryInterface.php";s:4:"3b53";s:36:"Classes/Persistence/QOM/Selector.php";s:4:"59cb";s:45:"Classes/Persistence/QOM/SelectorInterface.php";s:4:"e75c";s:43:"Classes/Persistence/QOM/SourceInterface.php";s:4:"a397";s:37:"Classes/Persistence/QOM/Statement.php";s:4:"c978";s:41:"Classes/Persistence/QOM/StaticOperand.php";s:4:"69f4";s:50:"Classes/Persistence/QOM/StaticOperandInterface.php";s:4:"4e9b";s:37:"Classes/Persistence/QOM/UpperCase.php";s:4:"6646";s:46:"Classes/Persistence/QOM/UpperCaseInterface.php";s:4:"ea6b";s:48:"Classes/Persistence/Storage/BackendInterface.php";s:4:"ad7b";s:46:"Classes/Persistence/Storage/Typo3DbBackend.php";s:4:"9b96";s:51:"Classes/Persistence/Storage/Typo3DbBackend.php.orig";s:4:"8048";s:55:"Classes/Persistence/Storage/Exception/BadConstraint.php";s:4:"3a87";s:50:"Classes/Persistence/Storage/Exception/SqlError.php";s:4:"850b";s:44:"Classes/Property/DateTimeObjectConverter.php";s:4:"8bec";s:30:"Classes/Property/Exception.php";s:4:"8465";s:27:"Classes/Property/Mapper.php";s:4:"d709";s:35:"Classes/Property/MappingResults.php";s:4:"64c8";s:45:"Classes/Property/ObjectConverterInterface.php";s:4:"adb0";s:38:"Classes/Property/DataType/DateTime.php";s:4:"8418";s:49:"Classes/Property/Exception/FormatNotSupported.php";s:4:"338e";s:46:"Classes/Property/Exception/InvalidDataType.php";s:4:"f280";s:44:"Classes/Property/Exception/InvalidFormat.php";s:4:"0bfa";s:46:"Classes/Property/Exception/InvalidProperty.php";s:4:"e6fb";s:44:"Classes/Property/Exception/InvalidSource.php";s:4:"ba13";s:44:"Classes/Property/Exception/InvalidTarget.php";s:4:"6cd9";s:38:"Classes/Reflection/ClassReflection.php";s:4:"913c";s:34:"Classes/Reflection/ClassSchema.php";s:4:"7ebc";s:39:"Classes/Reflection/DocCommentParser.php";s:4:"6357";s:32:"Classes/Reflection/Exception.php";s:4:"8625";s:39:"Classes/Reflection/MethodReflection.php";s:4:"26fc";s:35:"Classes/Reflection/ObjectAccess.php";s:4:"a6dc";s:42:"Classes/Reflection/ParameterReflection.php";s:4:"284d";s:41:"Classes/Reflection/PropertyReflection.php";s:4:"95b8";s:30:"Classes/Reflection/Service.php";s:4:"54c8";s:52:"Classes/Reflection/Exception/InvalidPropertyType.php";s:4:"02d6";s:63:"Classes/Reflection/Exception/PropertyNotAccessibleException.php";s:4:"0ddf";s:30:"Classes/Security/Exception.php";s:4:"2d15";s:47:"Classes/Security/Channel/RequestHashService.php";s:4:"afac";s:45:"Classes/Security/Cryptography/HashService.php";s:4:"e0aa";s:63:"Classes/Security/Exception/InvalidArgumentForHashGeneration.php";s:4:"856e";s:70:"Classes/Security/Exception/InvalidArgumentForRequestHashGeneration.php";s:4:"9f05";s:60:"Classes/Security/Exception/SyntacticallyWrongRequestHash.php";s:4:"89bd";s:26:"Classes/Utility/Arrays.php";s:4:"5dfd";s:25:"Classes/Utility/Cache.php";s:4:"28a8";s:31:"Classes/Utility/ClassLoader.php";s:4:"16a4";s:44:"Classes/Utility/ExtbaseRequirementsCheck.php";s:4:"a352";s:29:"Classes/Utility/Extension.php";s:4:"3c8d";s:32:"Classes/Utility/Localization.php";s:4:"ccaa";s:32:"Classes/Utility/TypeHandling.php";s:4:"d63e";s:30:"Classes/Utility/TypoScript.php";s:4:"c335";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:"f0a7";s:40:"Classes/Validation/ValidatorResolver.php";s:4:"07a6";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:"93b2";s:56:"Classes/Validation/Validator/AbstractObjectValidator.php";s:4:"fb77";s:50:"Classes/Validation/Validator/AbstractValidator.php";s:4:"c4ad";s:54:"Classes/Validation/Validator/AlphanumericValidator.php";s:4:"ae25";s:53:"Classes/Validation/Validator/ConjunctionValidator.php";s:4:"e2bc";s:50:"Classes/Validation/Validator/DateTimeValidator.php";s:4:"3716";s:53:"Classes/Validation/Validator/DisjunctionValidator.php";s:4:"95f8";s:54:"Classes/Validation/Validator/EmailAddressValidator.php";s:4:"e9de";s:47:"Classes/Validation/Validator/FloatValidator.php";s:4:"6e44";s:55:"Classes/Validation/Validator/GenericObjectValidator.php";s:4:"210d";s:49:"Classes/Validation/Validator/IntegerValidator.php";s:4:"f70f";s:50:"Classes/Validation/Validator/NotEmptyValidator.php";s:4:"92fa";s:53:"Classes/Validation/Validator/NumberRangeValidator.php";s:4:"33cb";s:48:"Classes/Validation/Validator/NumberValidator.php";s:4:"ab3d";s:57:"Classes/Validation/Validator/ObjectValidatorInterface.php";s:4:"aeea";s:45:"Classes/Validation/Validator/RawValidator.php";s:4:"2b76";s:59:"Classes/Validation/Validator/RegularExpressionValidator.php";s:4:"95aa";s:54:"Classes/Validation/Validator/StringLengthValidator.php";s:4:"6885";s:48:"Classes/Validation/Validator/StringValidator.php";s:4:"2231";s:46:"Classes/Validation/Validator/TextValidator.php";s:4:"d641";s:51:"Classes/Validation/Validator/ValidatorInterface.php";s:4:"1c82";s:24:"Documentation/README.txt";s:4:"35d4";s:43:"Resources/Private/Language/locallang_db.xml";s:4:"d03e";s:48:"Resources/Private/MVC/NotFoundView_Template.html";s:4:"d5a3";s:22:"Tests/BaseTestCase.php";s:4:"c7e5";s:30:"Tests/SeleniumBaseTestCase.php";s:4:"e3b0";s:27:"Tests/Unit/BaseTestCase.php";s:4:"bcb9";s:61:"Tests/Unit/Configuration/AbstractConfigurationManagerTest.php";s:4:"92e8";s:60:"Tests/Unit/Configuration/BackendConfigurationManagerTest.php";s:4:"5d6c";s:61:"Tests/Unit/Configuration/FrontendConfigurationManagerTest.php";s:4:"6cdb";s:46:"Tests/Unit/DomainObject/AbstractEntityTest.php";s:4:"4539";s:30:"Tests/Unit/Fixtures/Entity.php";s:4:"09e9";s:33:"Tests/Unit/MVC/DispatcherTest.php";s:4:"17b7";s:52:"Tests/Unit/MVC/Controller/AbstractControllerTest.php";s:4:"5a51";s:50:"Tests/Unit/MVC/Controller/ActionControllerTest.php";s:4:"110f";s:42:"Tests/Unit/MVC/Controller/ArgumentTest.php";s:4:"4805";s:43:"Tests/Unit/MVC/Controller/ArgumentsTest.php";s:4:"f493";s:41:"Tests/Unit/MVC/Web/RequestBuilderTest.php";s:4:"5bc5";s:34:"Tests/Unit/MVC/Web/RequestTest.php";s:4:"70cf";s:45:"Tests/Unit/MVC/Web/Routing/UriBuilderTest.php";s:4:"d684";s:52:"Tests/Unit/Object/Container/ClassInfoFactoryTest.php";s:4:"42eb";s:45:"Tests/Unit/Object/Container/ContainerTest.php";s:4:"5981";s:52:"Tests/Unit/Object/Container/Fixtures/Testclasses.php";s:4:"feae";s:44:"Tests/Unit/Persistence/ObjectStorageTest.php";s:4:"f76b";s:42:"Tests/Unit/Persistence/QueryResultTest.php";s:4:"4681";s:36:"Tests/Unit/Persistence/QueryTest.php";s:4:"9df8";s:41:"Tests/Unit/Persistence/RepositoryTest.php";s:4:"f2c7";s:38:"Tests/Unit/Persistence/SessionTest.php";s:4:"b50c";s:52:"Tests/Unit/Persistence/Mapper/DataMapFactoryTest.php";s:4:"a165";s:53:"Tests/Unit/Persistence/Storage/Typo3DbBackendTest.php";s:4:"610a";s:42:"Tests/Unit/Reflection/ObjectAccessTest.php";s:4:"829b";s:37:"Tests/Unit/Reflection/ServiceTest.php";s:4:"135c";s:50:"Tests/Unit/Reflection/Fixture/ArrayAccessClass.php";s:4:"9afd";s:65:"Tests/Unit/Reflection/Fixture/DummyClassWithGettersAndSetters.php";s:4:"258b";s:54:"Tests/Unit/Security/Channel/RequestHashServiceTest.php";s:4:"a9be";s:52:"Tests/Unit/Security/Cryptography/HashServiceTest.php";s:4:"f27a";s:36:"Tests/Unit/Utility/ExtensionTest.php";s:4:"b3b1";s:37:"Tests/Unit/Utility/TypoScriptTest.php";s:4:"4237";s:47:"Tests/Unit/Validation/ValidatorResolverTest.php";s:4:"4548";s:61:"Tests/Unit/Validation/Validator/AlphanumericValidatorTest.php";s:4:"0223";s:60:"Tests/Unit/Validation/Validator/ConjunctionValidatorTest.php";s:4:"4e82";s:57:"Tests/Unit/Validation/Validator/DateTimeValidatorTest.php";s:4:"1fd6";s:61:"Tests/Unit/Validation/Validator/EmailAddressValidatorTest.php";s:4:"7961";s:54:"Tests/Unit/Validation/Validator/FloatValidatorTest.php";s:4:"4b61";s:62:"Tests/Unit/Validation/Validator/GenericObjectValidatorTest.php";s:4:"5743";s:56:"Tests/Unit/Validation/Validator/IntegerValidatorTest.php";s:4:"f9e9";s:57:"Tests/Unit/Validation/Validator/NotEmptyValidatorTest.php";s:4:"29d8";s:60:"Tests/Unit/Validation/Validator/NumberRangeValidatorTest.php";s:4:"0351";s:55:"Tests/Unit/Validation/Validator/NumberValidatorTest.php";s:4:"82bf";s:52:"Tests/Unit/Validation/Validator/RawValidatorTest.php";s:4:"03b1";s:66:"Tests/Unit/Validation/Validator/RegularExpressionValidatorTest.php";s:4:"18d0";s:61:"Tests/Unit/Validation/Validator/StringLengthValidatorTest.php";s:4:"4cf3";s:53:"Tests/Unit/Validation/Validator/TextValidatorTest.php";s:4:"eb32";}',
+       '_md5_values_when_last_written' => 'a:303:{s:13:"ChangeLog.txt";s:4:"3389";s:16:"ext_autoload.php";s:4:"a485";s:12:"ext_icon.gif";s:4:"e922";s:17:"ext_localconf.php";s:4:"50dd";s:14:"ext_tables.php";s:4:"491e";s:14:"ext_tables.sql";s:4:"0c2f";s:24:"ext_typoscript_setup.txt";s:4:"2bf7";s:22:"Classes/Dispatcher.php";s:4:"c031";s:21:"Classes/Exception.php";s:4:"c346";s:54:"Classes/Configuration/AbstractConfigurationManager.php";s:4:"c4ea";s:53:"Classes/Configuration/BackendConfigurationManager.php";s:4:"ba7c";s:46:"Classes/Configuration/ConfigurationManager.php";s:4:"31cb";s:55:"Classes/Configuration/ConfigurationManagerInterface.php";s:4:"7a2b";s:35:"Classes/Configuration/Exception.php";s:4:"31e6";s:54:"Classes/Configuration/FrontendConfigurationManager.php";s:4:"7a7b";s:53:"Classes/Configuration/Exception/ContainerIsLocked.php";s:4:"113a";s:60:"Classes/Configuration/Exception/InvalidConfigurationType.php";s:4:"9379";s:46:"Classes/Configuration/Exception/NoSuchFile.php";s:4:"75ce";s:48:"Classes/Configuration/Exception/NoSuchOption.php";s:4:"f616";s:46:"Classes/Configuration/Exception/ParseError.php";s:4:"b75a";s:26:"Classes/Core/Bootstrap.php";s:4:"5e7e";s:37:"Classes/Domain/Model/FrontendUser.php";s:4:"7bb3";s:42:"Classes/Domain/Model/FrontendUserGroup.php";s:4:"794d";s:57:"Classes/Domain/Repository/FrontendUserGroupRepository.php";s:4:"0197";s:52:"Classes/Domain/Repository/FrontendUserRepository.php";s:4:"ce1e";s:45:"Classes/DomainObject/AbstractDomainObject.php";s:4:"4cdb";s:39:"Classes/DomainObject/AbstractEntity.php";s:4:"81ea";s:44:"Classes/DomainObject/AbstractValueObject.php";s:4:"42f0";s:46:"Classes/DomainObject/DomainObjectInterface.php";s:4:"2d94";s:23:"Classes/Error/Error.php";s:4:"4fa2";s:26:"Classes/MVC/Dispatcher.php";s:4:"fd5f";s:25:"Classes/MVC/Exception.php";s:4:"606f";s:23:"Classes/MVC/Request.php";s:4:"d652";s:39:"Classes/MVC/RequestHandlerInterface.php";s:4:"620c";s:38:"Classes/MVC/RequestHandlerResolver.php";s:4:"860e";s:32:"Classes/MVC/RequestInterface.php";s:4:"e830";s:24:"Classes/MVC/Response.php";s:4:"0069";s:33:"Classes/MVC/ResponseInterface.php";s:4:"0ab1";s:45:"Classes/MVC/Controller/AbstractController.php";s:4:"2130";s:43:"Classes/MVC/Controller/ActionController.php";s:4:"dcf2";s:35:"Classes/MVC/Controller/Argument.php";s:4:"56f6";s:40:"Classes/MVC/Controller/ArgumentError.php";s:4:"6c22";s:36:"Classes/MVC/Controller/Arguments.php";s:4:"cff5";s:45:"Classes/MVC/Controller/ArgumentsValidator.php";s:4:"ca84";s:44:"Classes/MVC/Controller/ControllerContext.php";s:4:"b24c";s:46:"Classes/MVC/Controller/ControllerInterface.php";s:4:"c450";s:40:"Classes/MVC/Controller/FlashMessages.php";s:4:"f28e";s:38:"Classes/MVC/Exception/InfiniteLoop.php";s:4:"5984";s:43:"Classes/MVC/Exception/InvalidActionName.php";s:4:"baec";s:45:"Classes/MVC/Exception/InvalidArgumentName.php";s:4:"55a6";s:45:"Classes/MVC/Exception/InvalidArgumentType.php";s:4:"0b9c";s:46:"Classes/MVC/Exception/InvalidArgumentValue.php";s:4:"a836";s:43:"Classes/MVC/Exception/InvalidController.php";s:4:"f0b0";s:47:"Classes/MVC/Exception/InvalidControllerName.php";s:4:"7b4c";s:46:"Classes/MVC/Exception/InvalidExtensionName.php";s:4:"865a";s:39:"Classes/MVC/Exception/InvalidMarker.php";s:4:"4a5e";s:48:"Classes/MVC/Exception/InvalidOrNoRequestHash.php";s:4:"beff";s:46:"Classes/MVC/Exception/InvalidRequestMethod.php";s:4:"508f";s:44:"Classes/MVC/Exception/InvalidRequestType.php";s:4:"def7";s:49:"Classes/MVC/Exception/InvalidTemplateResource.php";s:4:"bbb7";s:43:"Classes/MVC/Exception/InvalidUriPattern.php";s:4:"cee0";s:43:"Classes/MVC/Exception/InvalidViewHelper.php";s:4:"686d";s:38:"Classes/MVC/Exception/NoSuchAction.php";s:4:"1889";s:40:"Classes/MVC/Exception/NoSuchArgument.php";s:4:"1bec";s:42:"Classes/MVC/Exception/NoSuchController.php";s:4:"baa6";s:36:"Classes/MVC/Exception/StopAction.php";s:4:"7290";s:48:"Classes/MVC/Exception/UnsupportedRequestType.php";s:4:"27ce";s:33:"Classes/MVC/View/AbstractView.php";s:4:"3960";s:30:"Classes/MVC/View/EmptyView.php";s:4:"52f5";s:33:"Classes/MVC/View/NotFoundView.php";s:4:"5fe7";s:34:"Classes/MVC/View/ViewInterface.php";s:4:"dc07";s:42:"Classes/MVC/Web/AbstractRequestHandler.php";s:4:"a510";s:41:"Classes/MVC/Web/BackendRequestHandler.php";s:4:"31f7";s:42:"Classes/MVC/Web/FrontendRequestHandler.php";s:4:"33bd";s:27:"Classes/MVC/Web/Request.php";s:4:"93cc";s:34:"Classes/MVC/Web/RequestBuilder.php";s:4:"1d01";s:39:"Classes/MVC/Web/RequestBuilder.php.orig";s:4:"1d01";s:28:"Classes/MVC/Web/Response.php";s:4:"7156";s:38:"Classes/MVC/Web/Routing/UriBuilder.php";s:4:"6457";s:28:"Classes/Object/Exception.php";s:4:"2f66";s:26:"Classes/Object/Manager.php";s:4:"4026";s:32:"Classes/Object/ObjectManager.php";s:4:"c78d";s:41:"Classes/Object/ObjectManagerInterface.php";s:4:"9dd9";s:38:"Classes/Object/Container/ClassInfo.php";s:4:"3ddc";s:43:"Classes/Object/Container/ClassInfoCache.php";s:4:"f745";s:45:"Classes/Object/Container/ClassInfoFactory.php";s:4:"1355";s:38:"Classes/Object/Container/Container.php";s:4:"6fb5";s:43:"Classes/Object/Container/Container.php.orig";s:4:"3261";s:69:"Classes/Object/Container/Exception/CannotInitializeCacheException.php";s:4:"4258";s:70:"Classes/Object/Container/Exception/TooManyRecursionLevelsException.php";s:4:"cd39";s:61:"Classes/Object/Container/Exception/UnknownObjectException.php";s:4:"d18e";s:46:"Classes/Object/Exception/CannotBuildObject.php";s:4:"8070";s:53:"Classes/Object/Exception/CannotReconstituteObject.php";s:4:"e8cc";s:41:"Classes/Object/Exception/InvalidClass.php";s:4:"d226";s:42:"Classes/Object/Exception/InvalidObject.php";s:4:"cc16";s:55:"Classes/Object/Exception/InvalidObjectConfiguration.php";s:4:"e82a";s:52:"Classes/Object/Exception/ObjectAlreadyRegistered.php";s:4:"eecb";s:41:"Classes/Object/Exception/UnknownClass.php";s:4:"d10a";s:45:"Classes/Object/Exception/UnknownInterface.php";s:4:"22a4";s:51:"Classes/Object/Exception/UnresolvedDependencies.php";s:4:"7d47";s:39:"Classes/Object/Exception/WrongScope.php";s:4:"cc92";s:31:"Classes/Persistence/Backend.php";s:4:"d2cf";s:40:"Classes/Persistence/BackendInterface.php";s:4:"88db";s:33:"Classes/Persistence/Exception.php";s:4:"1713";s:35:"Classes/Persistence/IdentityMap.php";s:4:"6b90";s:40:"Classes/Persistence/LazyLoadingProxy.php";s:4:"1928";s:41:"Classes/Persistence/LazyObjectStorage.php";s:4:"faa1";s:48:"Classes/Persistence/LoadingStrategyInterface.php";s:4:"fa0d";s:31:"Classes/Persistence/Manager.php";s:4:"6e42";s:40:"Classes/Persistence/ManagerInterface.php";s:4:"17d8";s:49:"Classes/Persistence/ObjectMonitoringInterface.php";s:4:"6054";s:37:"Classes/Persistence/ObjectStorage.php";s:4:"a883";s:36:"Classes/Persistence/PropertyType.php";s:4:"f62a";s:29:"Classes/Persistence/Query.php";s:4:"203d";s:36:"Classes/Persistence/QueryFactory.php";s:4:"4ab8";s:45:"Classes/Persistence/QueryFactoryInterface.php";s:4:"900e";s:38:"Classes/Persistence/QueryInterface.php";s:4:"ebdb";s:35:"Classes/Persistence/QueryResult.php";s:4:"af68";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"843d";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"1e52";s:34:"Classes/Persistence/Repository.php";s:4:"8ee2";s:43:"Classes/Persistence/RepositoryInterface.php";s:4:"55e7";s:31:"Classes/Persistence/Session.php";s:4:"43b4";s:42:"Classes/Persistence/Typo3QuerySettings.php";s:4:"cd0d";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:60:"Classes/Persistence/Exception/InvalidNumberOfConstraints.php";s:4:"3a38";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:"1aba";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:53:"Classes/Persistence/Exception/UnsupportedRelation.php";s:4:"6bc0";s:40:"Classes/Persistence/Mapper/ColumnMap.php";s:4:"fee9";s:38:"Classes/Persistence/Mapper/DataMap.php";s:4:"2b19";s:45:"Classes/Persistence/Mapper/DataMapFactory.php";s:4:"ab68";s:41:"Classes/Persistence/Mapper/DataMapper.php";s:4:"5358";s:40:"Classes/Persistence/QOM/AndInterface.php";s:4:"f72d";s:45:"Classes/Persistence/QOM/BindVariableValue.php";s:4:"454e";s:54:"Classes/Persistence/QOM/BindVariableValueInterface.php";s:4:"822e";s:38:"Classes/Persistence/QOM/Comparison.php";s:4:"74e7";s:47:"Classes/Persistence/QOM/ComparisonInterface.php";s:4:"f50a";s:38:"Classes/Persistence/QOM/Constraint.php";s:4:"6e7b";s:47:"Classes/Persistence/QOM/ConstraintInterface.php";s:4:"c106";s:42:"Classes/Persistence/QOM/DynamicOperand.php";s:4:"29d3";s:51:"Classes/Persistence/QOM/DynamicOperandInterface.php";s:4:"981b";s:45:"Classes/Persistence/QOM/EquiJoinCondition.php";s:4:"29b1";s:54:"Classes/Persistence/QOM/EquiJoinConditionInterface.php";s:4:"b9f5";s:32:"Classes/Persistence/QOM/Join.php";s:4:"d270";s:50:"Classes/Persistence/QOM/JoinConditionInterface.php";s:4:"63c8";s:41:"Classes/Persistence/QOM/JoinInterface.php";s:4:"c3a5";s:38:"Classes/Persistence/QOM/LogicalAnd.php";s:4:"4b22";s:38:"Classes/Persistence/QOM/LogicalNot.php";s:4:"aba3";s:37:"Classes/Persistence/QOM/LogicalOr.php";s:4:"3476";s:37:"Classes/Persistence/QOM/LowerCase.php";s:4:"15a8";s:46:"Classes/Persistence/QOM/LowerCaseInterface.php";s:4:"215c";s:40:"Classes/Persistence/QOM/NotInterface.php";s:4:"8d10";s:35:"Classes/Persistence/QOM/Operand.php";s:4:"a635";s:44:"Classes/Persistence/QOM/OperandInterface.php";s:4:"39ff";s:39:"Classes/Persistence/QOM/OrInterface.php";s:4:"b109";s:36:"Classes/Persistence/QOM/Ordering.php";s:4:"e7f4";s:45:"Classes/Persistence/QOM/OrderingInterface.php";s:4:"b9f9";s:41:"Classes/Persistence/QOM/PropertyValue.php";s:4:"96fb";s:50:"Classes/Persistence/QOM/PropertyValueInterface.php";s:4:"6526";s:62:"Classes/Persistence/QOM/QueryObjectModelConstantsInterface.php";s:4:"33bb";s:51:"Classes/Persistence/QOM/QueryObjectModelFactory.php";s:4:"e6fc";s:60:"Classes/Persistence/QOM/QueryObjectModelFactoryInterface.php";s:4:"3b53";s:36:"Classes/Persistence/QOM/Selector.php";s:4:"59cb";s:45:"Classes/Persistence/QOM/SelectorInterface.php";s:4:"e75c";s:43:"Classes/Persistence/QOM/SourceInterface.php";s:4:"a397";s:37:"Classes/Persistence/QOM/Statement.php";s:4:"c978";s:41:"Classes/Persistence/QOM/StaticOperand.php";s:4:"69f4";s:50:"Classes/Persistence/QOM/StaticOperandInterface.php";s:4:"4e9b";s:37:"Classes/Persistence/QOM/UpperCase.php";s:4:"6646";s:46:"Classes/Persistence/QOM/UpperCaseInterface.php";s:4:"ea6b";s:48:"Classes/Persistence/Storage/BackendInterface.php";s:4:"ad7b";s:46:"Classes/Persistence/Storage/Typo3DbBackend.php";s:4:"8e5f";s:51:"Classes/Persistence/Storage/Typo3DbBackend.php.orig";s:4:"b71f";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:"8465";s:27:"Classes/Property/Mapper.php";s:4:"d709";s:35:"Classes/Property/MappingResults.php";s:4:"64c8";s:49:"Classes/Property/Exception/FormatNotSupported.php";s:4:"338e";s:46:"Classes/Property/Exception/InvalidDataType.php";s:4:"f280";s:44:"Classes/Property/Exception/InvalidFormat.php";s:4:"0bfa";s:46:"Classes/Property/Exception/InvalidProperty.php";s:4:"e6fb";s:44:"Classes/Property/Exception/InvalidSource.php";s:4:"ba13";s:44:"Classes/Property/Exception/InvalidTarget.php";s:4:"6cd9";s:38:"Classes/Reflection/ClassReflection.php";s:4:"913c";s:34:"Classes/Reflection/ClassSchema.php";s:4:"7ebc";s:39:"Classes/Reflection/DocCommentParser.php";s:4:"6357";s:32:"Classes/Reflection/Exception.php";s:4:"8625";s:39:"Classes/Reflection/MethodReflection.php";s:4:"26fc";s:35:"Classes/Reflection/ObjectAccess.php";s:4:"445e";s:42:"Classes/Reflection/ParameterReflection.php";s:4:"284d";s:41:"Classes/Reflection/PropertyReflection.php";s:4:"95b8";s:30:"Classes/Reflection/Service.php";s:4:"54c8";s:52:"Classes/Reflection/Exception/InvalidPropertyType.php";s:4:"02d6";s:63:"Classes/Reflection/Exception/PropertyNotAccessibleException.php";s:4:"0ddf";s:30:"Classes/Security/Exception.php";s:4:"2d15";s:47:"Classes/Security/Channel/RequestHashService.php";s:4:"afac";s:45:"Classes/Security/Cryptography/HashService.php";s:4:"e0aa";s:63:"Classes/Security/Exception/InvalidArgumentForHashGeneration.php";s:4:"856e";s:70:"Classes/Security/Exception/InvalidArgumentForRequestHashGeneration.php";s:4:"9f05";s:60:"Classes/Security/Exception/SyntacticallyWrongRequestHash.php";s:4:"89bd";s:26:"Classes/Utility/Arrays.php";s:4:"5dfd";s:25:"Classes/Utility/Cache.php";s:4:"9c29";s:31:"Classes/Utility/ClassLoader.php";s:4:"16a4";s:44:"Classes/Utility/ExtbaseRequirementsCheck.php";s:4:"a352";s:29:"Classes/Utility/Extension.php";s:4:"3c8d";s:37:"Classes/Utility/FrontendSimulator.php";s:4:"bd64";s:32:"Classes/Utility/Localization.php";s:4:"5c10";s:32:"Classes/Utility/TypeHandling.php";s:4:"d63e";s:30:"Classes/Utility/TypoScript.php";s:4:"c335";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:"f0a7";s:40:"Classes/Validation/ValidatorResolver.php";s:4:"07a6";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:"93b2";s:56:"Classes/Validation/Validator/AbstractObjectValidator.php";s:4:"fb77";s:50:"Classes/Validation/Validator/AbstractValidator.php";s:4:"c4ad";s:54:"Classes/Validation/Validator/AlphanumericValidator.php";s:4:"ae25";s:53:"Classes/Validation/Validator/ConjunctionValidator.php";s:4:"e2bc";s:50:"Classes/Validation/Validator/DateTimeValidator.php";s:4:"3716";s:53:"Classes/Validation/Validator/DisjunctionValidator.php";s:4:"95f8";s:54:"Classes/Validation/Validator/EmailAddressValidator.php";s:4:"e9de";s:47:"Classes/Validation/Validator/FloatValidator.php";s:4:"6e44";s:55:"Classes/Validation/Validator/GenericObjectValidator.php";s:4:"210d";s:49:"Classes/Validation/Validator/IntegerValidator.php";s:4:"f70f";s:50:"Classes/Validation/Validator/NotEmptyValidator.php";s:4:"92fa";s:53:"Classes/Validation/Validator/NumberRangeValidator.php";s:4:"33cb";s:48:"Classes/Validation/Validator/NumberValidator.php";s:4:"ab3d";s:57:"Classes/Validation/Validator/ObjectValidatorInterface.php";s:4:"aeea";s:45:"Classes/Validation/Validator/RawValidator.php";s:4:"2b76";s:59:"Classes/Validation/Validator/RegularExpressionValidator.php";s:4:"95aa";s:54:"Classes/Validation/Validator/StringLengthValidator.php";s:4:"6885";s:48:"Classes/Validation/Validator/StringValidator.php";s:4:"2231";s:46:"Classes/Validation/Validator/TextValidator.php";s:4:"d641";s:51:"Classes/Validation/Validator/ValidatorInterface.php";s:4:"1c82";s:24:"Documentation/README.txt";s:4:"35d4";s:43:"Resources/Private/Language/locallang_db.xml";s:4:"d03e";s:48:"Resources/Private/MVC/NotFoundView_Template.html";s:4:"d5a3";s:22:"Tests/BaseTestCase.php";s:4:"c7e5";s:30:"Tests/SeleniumBaseTestCase.php";s:4:"6769";s:27:"Tests/Unit/BaseTestCase.php";s:4:"c0ba";s:61:"Tests/Unit/Configuration/AbstractConfigurationManagerTest.php";s:4:"d475";s:60:"Tests/Unit/Configuration/BackendConfigurationManagerTest.php";s:4:"5d6c";s:61:"Tests/Unit/Configuration/FrontendConfigurationManagerTest.php";s:4:"6cdb";s:46:"Tests/Unit/DomainObject/AbstractEntityTest.php";s:4:"4539";s:30:"Tests/Unit/Fixtures/Entity.php";s:4:"09e9";s:33:"Tests/Unit/MVC/DispatcherTest.php";s:4:"17b7";s:52:"Tests/Unit/MVC/Controller/AbstractControllerTest.php";s:4:"5a51";s:50:"Tests/Unit/MVC/Controller/ActionControllerTest.php";s:4:"110f";s:42:"Tests/Unit/MVC/Controller/ArgumentTest.php";s:4:"4805";s:43:"Tests/Unit/MVC/Controller/ArgumentsTest.php";s:4:"f493";s:41:"Tests/Unit/MVC/Web/RequestBuilderTest.php";s:4:"a77a";s:34:"Tests/Unit/MVC/Web/RequestTest.php";s:4:"70cf";s:45:"Tests/Unit/MVC/Web/Routing/UriBuilderTest.php";s:4:"3b83";s:52:"Tests/Unit/Object/Container/ClassInfoFactoryTest.php";s:4:"e450";s:45:"Tests/Unit/Object/Container/ContainerTest.php";s:4:"f62e";s:50:"Tests/Unit/Object/Container/ContainerTest.php.orig";s:4:"3dd5";s:52:"Tests/Unit/Object/Container/Fixtures/Testclasses.php";s:4:"64ed";s:44:"Tests/Unit/Persistence/ObjectStorageTest.php";s:4:"f76b";s:42:"Tests/Unit/Persistence/QueryResultTest.php";s:4:"4681";s:36:"Tests/Unit/Persistence/QueryTest.php";s:4:"9df8";s:41:"Tests/Unit/Persistence/RepositoryTest.php";s:4:"1ca3";s:38:"Tests/Unit/Persistence/SessionTest.php";s:4:"908a";s:52:"Tests/Unit/Persistence/Mapper/DataMapFactoryTest.php";s:4:"1f05";s:53:"Tests/Unit/Persistence/Storage/Typo3DbBackendTest.php";s:4:"610a";s:42:"Tests/Unit/Reflection/ObjectAccessTest.php";s:4:"bbfc";s:37:"Tests/Unit/Reflection/ServiceTest.php";s:4:"135c";s:50:"Tests/Unit/Reflection/Fixture/ArrayAccessClass.php";s:4:"9afd";s:65:"Tests/Unit/Reflection/Fixture/DummyClassWithGettersAndSetters.php";s:4:"258b";s:54:"Tests/Unit/Security/Channel/RequestHashServiceTest.php";s:4:"a9be";s:52:"Tests/Unit/Security/Cryptography/HashServiceTest.php";s:4:"f27a";s:36:"Tests/Unit/Utility/ExtensionTest.php";s:4:"b3b1";s:39:"Tests/Unit/Utility/LocalizationTest.php";s:4:"e9f4";s:37:"Tests/Unit/Utility/TypoScriptTest.php";s:4:"4237";s:47:"Tests/Unit/Validation/ValidatorResolverTest.php";s:4:"4548";s:61:"Tests/Unit/Validation/Validator/AlphanumericValidatorTest.php";s:4:"0223";s:60:"Tests/Unit/Validation/Validator/ConjunctionValidatorTest.php";s:4:"4e82";s:57:"Tests/Unit/Validation/Validator/DateTimeValidatorTest.php";s:4:"1fd6";s:61:"Tests/Unit/Validation/Validator/EmailAddressValidatorTest.php";s:4:"7961";s:54:"Tests/Unit/Validation/Validator/FloatValidatorTest.php";s:4:"4b61";s:62:"Tests/Unit/Validation/Validator/GenericObjectValidatorTest.php";s:4:"5743";s:56:"Tests/Unit/Validation/Validator/IntegerValidatorTest.php";s:4:"f9e9";s:57:"Tests/Unit/Validation/Validator/NotEmptyValidatorTest.php";s:4:"29d8";s:60:"Tests/Unit/Validation/Validator/NumberRangeValidatorTest.php";s:4:"0351";s:55:"Tests/Unit/Validation/Validator/NumberValidatorTest.php";s:4:"82bf";s:52:"Tests/Unit/Validation/Validator/RawValidatorTest.php";s:4:"03b1";s:66:"Tests/Unit/Validation/Validator/RegularExpressionValidatorTest.php";s:4:"18d0";s:61:"Tests/Unit/Validation/Validator/StringLengthValidatorTest.php";s:4:"4cf3";s:53:"Tests/Unit/Validation/Validator/TextValidatorTest.php";s:4:"eb32";}',
 );
 
 ?>
\ No newline at end of file
index 0f685e1..50b5012 100644 (file)
@@ -1 +1 @@
-https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/extbase/tags/1.3.0beta4/
+https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/extbase/tags/1.3.0RC1/
index 7032818..6f50954 100644 (file)
@@ -1,6 +1,34 @@
 ChangeLog for Fluid
 ===================
 
+Changes for 1.3.0 RC1:
+======================
+included in TYPO3 4.5.0 RC1.
+
+This change contains numerous bugfixes, most notably fixes the Widget
+Bootstrap and the Standalone View (which is used in "FLUIDTEMPLATE").
+
+Full Changes for 1.3.0 RC1:
+===========================
+
+[+BUGFIX] Fluid (View): Fix StandaloneView
+       Since implementation of Dependency Injection the Fluid
+       Standalone view was broken in some cases, cause it did not
+       properly initialize all needed objects.
+       Fixes: #11520
+[+BUGFIX] Fluid (Core): Allow ViewHelpers to be placed in t3lib and tslib
+       The Fluid template parser does now recognize ViewHelpers inside t3lib/
+       or sysext/cms/tslib/, so Fluid can now be used inside the TYPO3 core.
+       Thanks to Andreas Wolf for the patch!
+       Resolves: #12061
+[+BUGFIX] Fluid (Widget): Adopt Widget Bootstrap to Extbase Bootstrap changes
+       Problem: The configureObjectManager method in Tx_Fluid_Core_Widget_Bootstrap
+       uses a call on a static method Tx_Extbase_Object_Container_Container::getContainer()
+       which doesn't exist anymore. The Container has become a t3lib_Singleton.
+       This patch changes the behavior, and makes it work again.
+       Thanks to Thomas Maroschik for the patch!
+       Resolves: #11991
+
 Changes for 1.3.0 Beta 4:
 =========================
 included in TYPO3 4.5.0 Beta 4.
index 10ceb6b..9d8a928 100644 (file)
@@ -27,7 +27,7 @@
  */
 class Tx_Fluid_Core_Parser_TemplateParser implements t3lib_Singleton {
 
-       public static $SCAN_PATTERN_NAMESPACEDECLARATION = '/(?<!\\\\){namespace\s*([a-zA-Z]+[a-zA-Z0-9]*)\s*=\s*((?:F3|Tx)(?:FLUID_NAMESPACE_SEPARATOR\w+)+)\s*}/m';
+       public static $SCAN_PATTERN_NAMESPACEDECLARATION = '/(?<!\\\\){namespace\s*([a-zA-Z]+[a-zA-Z0-9]*)\s*=\s*((?:F3|Tx|t3lib|tslib)(?:FLUID_NAMESPACE_SEPARATOR\w+)+)\s*}/m';
 
        /**
         * This regular expression splits the input string at all dynamic tags, AND
index 213c4f2..3d85f27 100644 (file)
@@ -100,14 +100,14 @@ class Tx_Fluid_Core_Widget_Bootstrap {
         */
        public function configureObjectManager() {
                $typoScriptSetup = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
-               if (isset($typoScriptSetup['config.']['tx_extbase.']['objects.']) && is_array($typoScriptSetup['config.']['tx_extbase.']['objects.'])) {
-                       $objectConfiguration = $typoScriptSetup['config.']['tx_extbase.']['objects.'];
-
-                       foreach ($objectConfiguration as $classNameWithDot => $classConfiguration) {
-                               if (isset($classConfiguration['className'])) {
-                                       $originalClassName = substr($classNameWithDot, 0, -1);
-                                       Tx_Extbase_Object_Container_Container::getContainer()->registerImplementation($originalClassName, $classConfiguration['className']);
-                               }
+               if (!is_array($typoScriptSetup['config.']['tx_extbase.']['objects.'])) {
+                       return;
+               }
+               $objectContainer = t3lib_div::makeInstance('Tx_Extbase_Object_Container_Container');
+               foreach ($typoScriptSetup['config.']['tx_extbase.']['objects.'] as $classNameWithDot => $classConfiguration) {
+                       if (isset($classConfiguration['className'])) {
+                               $originalClassName = rtrim($classNameWithDot, '.');
+                               $objectContainer->registerImplementation($originalClassName, $classConfiguration['className']);
                        }
                }
        }
index 68a3479..bbc3db1 100644 (file)
@@ -55,27 +55,36 @@ class Tx_Fluid_View_StandaloneView extends Tx_Fluid_View_AbstractTemplateView {
 
        /**
         * Constructor
+        *
+        * @param tslib_cObj $contentObject The current cObject. If NULL a new instance will be created
         */
-       public function __construct() {
+       public function __construct(tslib_cObj $contentObject = NULL) {
                if (!t3lib_extMgm::isLoaded('extbase')) {
                        return 'In the current version you still need to have Extbase installed in order to use the Fluid Standalone view!';
                }
                $this->initializeAutoloader();
-               $this->injectTemplateParser(Tx_Fluid_Compatibility_TemplateParserBuilder::build());
-               $this->injectObjectManager(t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager'));
+               $this->objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager');
+
+               $configurationManager = $this->objectManager->get('Tx_Extbase_Configuration_ConfigurationManagerInterface');
+               if ($contentObject === NULL) {
+                       $contentObject = t3lib_div::makeInstance('tslib_cObj');
+               }
+               $configurationManager->setContentObject($contentObject);
+
+               $this->templateParser = $this->objectManager->get('Tx_Fluid_Core_Parser_TemplateParser');
                $this->setRenderingContext($this->objectManager->create('Tx_Fluid_Core_Rendering_RenderingContext'));
 
-               $request = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Request');
+               $request = $this->objectManager->create('Tx_Extbase_MVC_Web_Request');
                $request->setRequestURI(t3lib_div::getIndpEnv('TYPO3_REQUEST_URL'));
                $request->setBaseURI(t3lib_div::getIndpEnv('TYPO3_SITE_URL'));
 
-               $uriBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_UriBuilder');
+               $uriBuilder = $this->objectManager->create('Tx_Extbase_MVC_Web_Routing_UriBuilder');
                $uriBuilder->setRequest($request);
 
                $controllerContext = $this->objectManager->create('Tx_Extbase_MVC_Controller_ControllerContext');
                $controllerContext->setRequest($request);
                $controllerContext->setUriBuilder($uriBuilder);
-               $flashMessageContainer = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_FlashMessages'); // singleton
+               $flashMessageContainer = $this->objectManager->get('Tx_Extbase_MVC_Controller_FlashMessages'); // singleton
                $controllerContext->setFlashMessageContainer($flashMessageContainer);
                $this->setControllerContext($controllerContext);
        }
index 1582f66..7ad2e3d 100644 (file)
@@ -53,41 +53,180 @@ class Tx_Fluid_Tests_Unit_View_StandaloneViewTest extends Tx_Extbase_BaseTestCas
        protected $mockTemplateParser;
 
        /**
-        * @var Tx_Extbase_Object_ObjectManagerInterface
+        * @var Tx_Extbase_Object_ObjectManager
         */
        protected $mockObjectManager;
 
        /**
-        * @var Tx_Extbase_MVC_Request
+        * @var Tx_Extbase_MVC_Web_Request
         */
        protected $mockRequest;
 
        /**
+        * @var Tx_Extbase_MVC_Web_Routing_UriBuilder
+        */
+       protected $mockUriBuilder;
+
+       /**
         * @var Tx_Fluid_Core_Parser_ParsedTemplateInterface
         */
        protected $mockParsedTemplate;
 
        /**
+        * @var Tx_Extbase_Configuration_ConfigurationManagerInterface
+        */
+       protected $mockConfigurationManager;
+
+       /**
+        * @var Tx_Extbase_MVC_Controller_FlashMessages
+        */
+       protected $mockFlashMessages;
+
+       /**
+        * @var tslib_cObj
+        */
+       protected $mockContentObject;
+
+       /**
         * Sets up this test case
         *
         * @return void
         */
        public function setUp() {
                $this->view = $this->getAccessibleMock('Tx_Fluid_View_StandaloneView', array('dummy'), array(), '', FALSE);
+
                $this->mockTemplateParser = $this->getMock('Tx_Fluid_Core_Parser_TemplateParser');
                $this->mockParsedTemplate = $this->getMock('Tx_Fluid_Core_Parser_ParsedTemplateInterface');
                $this->mockTemplateParser->expects($this->any())->method('parse')->will($this->returnValue($this->mockParsedTemplate));
-               $this->view->injectTemplateParser($this->mockTemplateParser);
-               $this->mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManagerInterface');
-               $this->view->injectObjectManager($this->mockObjectManager);
-               $this->mockRenderingContext = $this->getMock('Tx_Fluid_Core_Rendering_RenderingContextInterface');
-               $this->mockViewHelperVariableContainer = $this->getMock('Tx_Fluid_Core_ViewHelper_ViewHelperVariableContainer');
-               $this->mockRenderingContext->expects($this->any())->method('getViewHelperVariableContainer')->will($this->returnValue($this->mockViewHelperVariableContainer));
+
+               $this->mockConfigurationManager = $this->getMock('Tx_Extbase_Configuration_ConfigurationManagerInterface');
+
+               $this->mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManager');
+               $this->mockObjectManager->expects($this->any())->method('get')->will($this->returnCallback(array($this, 'objectManagerCallback')));
+               $this->mockObjectManager->expects($this->any())->method('create')->will($this->returnCallback(array($this, 'objectManagerCallback')));
+
+               $this->mockRequest = $this->getMock('Tx_Extbase_MVC_Web_Request');
+               $this->mockUriBuilder = $this->getMock('Tx_Extbase_MVC_Web_Routing_UriBuilder');
+               $this->mockFlashMessages = $this->getMock('Tx_Extbase_MVC_Controller_FlashMessages');
+               $this->mockContentObject = $this->getMock('tslib_cObj');
+
                $this->mockControllerContext = $this->getMock('Tx_Extbase_MVC_Controller_ControllerContext');
-               $this->mockRequest = $this->getMock('Tx_Extbase_MVC_Request');
                $this->mockControllerContext->expects($this->any())->method('getRequest')->will($this->returnValue($this->mockRequest));
+
+               $this->mockViewHelperVariableContainer = $this->getMock('Tx_Fluid_Core_ViewHelper_ViewHelperVariableContainer');
+
+               $this->mockRenderingContext = $this->getMock('Tx_Fluid_Core_Rendering_RenderingContextInterface');
                $this->mockRenderingContext->expects($this->any())->method('getControllerContext')->will($this->returnValue($this->mockControllerContext));
+               $this->mockRenderingContext->expects($this->any())->method('getViewHelperVariableContainer')->will($this->returnValue($this->mockViewHelperVariableContainer));
+
+               $this->view->injectTemplateParser($this->mockTemplateParser);
+               $this->view->injectObjectManager($this->mockObjectManager);
                $this->view->setRenderingContext($this->mockRenderingContext);
+
+               t3lib_div::setSingletonInstance('Tx_Extbase_Object_ObjectManager', $this->mockObjectManager);
+               t3lib_div::addInstance('tslib_cObj', $this->mockContentObject);
+       }
+
+       /**
+        * @param string $className
+        * @return object
+        */
+       public function objectManagerCallback($className) {
+               switch($className) {
+                       case 'Tx_Extbase_Configuration_ConfigurationManagerInterface':
+                               return $this->mockConfigurationManager;
+                       case 'Tx_Fluid_Core_Parser_TemplateParser':
+                               return $this->mockTemplateParser;
+                       case 'Tx_Fluid_Core_Rendering_RenderingContext':
+                               return $this->mockRenderingContext;
+                       case 'Tx_Extbase_MVC_Web_Request':
+                               return $this->mockRequest;
+                       case 'Tx_Extbase_MVC_Web_Routing_UriBuilder':
+                               return $this->mockUriBuilder;
+                       case 'Tx_Extbase_MVC_Controller_ControllerContext':
+                               return $this->mockControllerContext;
+                       case 'Tx_Extbase_MVC_Controller_FlashMessages':
+                               return $this->mockFlashMessages;
+               }
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorSetsSpecifiedContentObject() {
+               $mockContentObject = $this->getMock('tslib_cObj');
+               // FIXME should be compared with identicalTo() - but that does not seem to work
+               $this->mockConfigurationManager->expects($this->once())->method('setContentObject')->with($this->equalTo($this->mockContentObject));
+
+               new Tx_Fluid_View_StandaloneView($mockContentObject);
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorCreatesContentObjectIfItIsNotSpecified() {
+               // FIXME should be compared with identicalTo() - but that does not seem to work
+               $this->mockConfigurationManager->expects($this->once())->method('setContentObject')->with($this->equalTo($this->mockContentObject));
+
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorSetsRequestUri() {
+               $expectedRequestUri = t3lib_div::getIndpEnv('TYPO3_REQUEST_URL');
+               $this->mockRequest->expects($this->once())->method('setRequestURI')->with($expectedRequestUri);
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorSetsBaseUri() {
+               $expectedBaseUri = t3lib_div::getIndpEnv('TYPO3_SITE_URL');
+               $this->mockRequest->expects($this->once())->method('setBaseURI')->with($expectedBaseUri);
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorInjectsRequestToUriBuilder() {
+               $this->mockUriBuilder->expects($this->once())->method('setRequest')->with($this->mockRequest);
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorInjectsRequestToControllerContext() {
+               $this->mockControllerContext->expects($this->once())->method('setRequest')->with($this->mockRequest);
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorInjectsUriBuilderToControllerContext() {
+               $this->mockControllerContext->expects($this->once())->method('setUriBuilder')->with($this->mockUriBuilder);
+               new Tx_Fluid_View_StandaloneView();
+       }
+
+       /**
+        * @test
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function constructorInjectsFlashMessageContainerToControllerContext() {
+               $this->mockControllerContext->expects($this->once())->method('setFlashMessageContainer')->with($this->mockFlashMessages);
+               new Tx_Fluid_View_StandaloneView();
        }
 
        /**
index b7a2d74..5935a01 100755 (executable)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "fluid".
 #
-# Auto generated 12-01-2011 16:37
+# Auto generated 21-01-2011 14:09
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
@@ -29,17 +29,17 @@ $EM_CONF[$_EXTKEY] = array(
        'clearCacheOnLoad' => 0,
        'lockType' => '',
        'author_company' => '',
-       'version' => '1.3.0beta4',
+       'version' => '1.3.0RC1',
        'constraints' => array(
                'depends' => array(
-                       'extbase' => '1.3.0beta4',
+                       'extbase' => '1.3.0RC1',
                ),
                'conflicts' => array(
                ),
                'suggests' => array(
                ),
        ),
-       '_md5_values_when_last_written' => 'a:225:{s:13:"ChangeLog.txt";s:4:"0e69";s:16:"ext_autoload.php";s:4:"104d";s:12:"ext_icon.gif";s:4:"e922";s:14:"ext_tables.php";s:4:"344b";s:24:"ext_typoscript_setup.txt";s:4:"b410";s:21:"Classes/Exception.php";s:4:"7373";s:17:"Classes/Fluid.php";s:4:"ac13";s:49:"Classes/Compatibility/DocbookGeneratorService.php";s:4:"84b6";s:47:"Classes/Compatibility/TemplateParserBuilder.php";s:4:"617b";s:26:"Classes/Core/Exception.php";s:4:"79b3";s:37:"Classes/Core/Parser/Configuration.php";s:4:"ab36";s:33:"Classes/Core/Parser/Exception.php";s:4:"1cbd";s:44:"Classes/Core/Parser/InterceptorInterface.php";s:4:"28a6";s:47:"Classes/Core/Parser/ParsedTemplateInterface.php";s:4:"17a1";s:36:"Classes/Core/Parser/ParsingState.php";s:4:"6677";s:38:"Classes/Core/Parser/TemplateParser.php";s:4:"371e";s:42:"Classes/Core/Parser/Interceptor/Escape.php";s:4:"4db0";s:47:"Classes/Core/Parser/SyntaxTree/AbstractNode.php";s:4:"a57e";s:44:"Classes/Core/Parser/SyntaxTree/ArrayNode.php";s:4:"b123";s:48:"Classes/Core/Parser/SyntaxTree/NodeInterface.php";s:4:"1a31";s:53:"Classes/Core/Parser/SyntaxTree/ObjectAccessorNode.php";s:4:"fec4";s:65:"Classes/Core/Parser/SyntaxTree/RenderingContextAwareInterface.php";s:4:"68ab";s:43:"Classes/Core/Parser/SyntaxTree/RootNode.php";s:4:"6b59";s:43:"Classes/Core/Parser/SyntaxTree/TextNode.php";s:4:"7ce2";s:49:"Classes/Core/Parser/SyntaxTree/ViewHelperNode.php";s:4:"becf";s:43:"Classes/Core/Rendering/RenderingContext.php";s:4:"169b";s:52:"Classes/Core/Rendering/RenderingContextInterface.php";s:4:"29bb";s:55:"Classes/Core/ViewHelper/AbstractConditionViewHelper.php";s:4:"1b02";s:54:"Classes/Core/ViewHelper/AbstractTagBasedViewHelper.php";s:4:"7560";s:46:"Classes/Core/ViewHelper/AbstractViewHelper.php";s:4:"8c70";s:46:"Classes/Core/ViewHelper/ArgumentDefinition.php";s:4:"c4d5";s:37:"Classes/Core/ViewHelper/Arguments.php";s:4:"8553";s:37:"Classes/Core/ViewHelper/Exception.php";s:4:"f1d0";s:46:"Classes/Core/ViewHelper/TagBasedViewHelper.php";s:4:"b234";s:38:"Classes/Core/ViewHelper/TagBuilder.php";s:4:"1e21";s:53:"Classes/Core/ViewHelper/TemplateVariableContainer.php";s:4:"b576";s:47:"Classes/Core/ViewHelper/ViewHelperInterface.php";s:4:"8274";s:55:"Classes/Core/ViewHelper/ViewHelperVariableContainer.php";s:4:"f6b8";s:62:"Classes/Core/ViewHelper/Exception/InvalidVariableException.php";s:4:"6dd4";s:76:"Classes/Core/ViewHelper/Exception/RenderingContextNotAccessibleException.php";s:4:"bbb7";s:59:"Classes/Core/ViewHelper/Facets/ChildNodeAccessInterface.php";s:4:"7ec9";s:53:"Classes/Core/ViewHelper/Facets/PostParseInterface.php";s:4:"35d5";s:48:"Classes/Core/Widget/AbstractWidgetController.php";s:4:"5466";s:48:"Classes/Core/Widget/AbstractWidgetViewHelper.php";s:4:"fa90";s:47:"Classes/Core/Widget/AjaxWidgetContextHolder.php";s:4:"4658";s:33:"Classes/Core/Widget/Bootstrap.php";s:4:"f4e6";s:33:"Classes/Core/Widget/Exception.php";s:4:"a6e3";s:37:"Classes/Core/Widget/WidgetContext.php";s:4:"305f";s:37:"Classes/Core/Widget/WidgetRequest.php";s:4:"0ff7";s:44:"Classes/Core/Widget/WidgetRequestBuilder.php";s:4:"cf2b";s:44:"Classes/Core/Widget/WidgetRequestHandler.php";s:4:"c616";s:60:"Classes/Core/Widget/Exception/MissingControllerException.php";s:4:"5b77";s:67:"Classes/Core/Widget/Exception/RenderingContextNotFoundException.php";s:4:"a31b";s:64:"Classes/Core/Widget/Exception/WidgetContextNotFoundException.php";s:4:"ffc2";s:64:"Classes/Core/Widget/Exception/WidgetRequestNotFoundException.php";s:4:"7ce2";s:36:"Classes/Service/DocbookGenerator.php";s:4:"c6a5";s:37:"Classes/View/AbstractTemplateView.php";s:4:"ef25";s:26:"Classes/View/Exception.php";s:4:"4168";s:31:"Classes/View/StandaloneView.php";s:4:"d96b";s:29:"Classes/View/TemplateView.php";s:4:"b3c5";s:50:"Classes/View/Exception/InvalidSectionException.php";s:4:"6cb2";s:59:"Classes/View/Exception/InvalidTemplateResourceException.php";s:4:"d589";s:39:"Classes/ViewHelpers/AliasViewHelper.php";s:4:"06f9";s:38:"Classes/ViewHelpers/BaseViewHelper.php";s:4:"a23f";s:41:"Classes/ViewHelpers/CObjectViewHelper.php";s:4:"b8b2";s:39:"Classes/ViewHelpers/CountViewHelper.php";s:4:"140f";s:39:"Classes/ViewHelpers/CycleViewHelper.php";s:4:"defe";s:39:"Classes/ViewHelpers/DebugViewHelper.php";s:4:"b611";s:38:"Classes/ViewHelpers/ElseViewHelper.php";s:4:"cdde";s:40:"Classes/ViewHelpers/EscapeViewHelper.php";s:4:"bf87";s:47:"Classes/ViewHelpers/FlashMessagesViewHelper.php";s:4:"fee4";s:37:"Classes/ViewHelpers/ForViewHelper.php";s:4:"54de";s:38:"Classes/ViewHelpers/FormViewHelper.php";s:4:"d1e7";s:44:"Classes/ViewHelpers/GroupedForViewHelper.php";s:4:"e37a";s:36:"Classes/ViewHelpers/IfViewHelper.php";s:4:"aa56";s:39:"Classes/ViewHelpers/ImageViewHelper.php";s:4:"d12c";s:40:"Classes/ViewHelpers/LayoutViewHelper.php";s:4:"ac35";s:48:"Classes/ViewHelpers/RenderChildrenViewHelper.php";s:4:"218b";s:53:"Classes/ViewHelpers/RenderFlashMessagesViewHelper.php";s:4:"3e52";s:40:"Classes/ViewHelpers/RenderViewHelper.php";s:4:"3a8a";s:41:"Classes/ViewHelpers/SectionViewHelper.php";s:4:"c4fa";s:38:"Classes/ViewHelpers/ThenViewHelper.php";s:4:"de0c";s:43:"Classes/ViewHelpers/TranslateViewHelper.php";s:4:"e9b6";s:52:"Classes/ViewHelpers/Be/AbstractBackendViewHelper.php";s:4:"0b21";s:46:"Classes/ViewHelpers/Be/ContainerViewHelper.php";s:4:"0b13";s:45:"Classes/ViewHelpers/Be/PageInfoViewHelper.php";s:4:"2a33";s:45:"Classes/ViewHelpers/Be/PagePathViewHelper.php";s:4:"7bd7";s:46:"Classes/ViewHelpers/Be/TableListViewHelper.php";s:4:"13c5";s:48:"Classes/ViewHelpers/Be/Buttons/CshViewHelper.php";s:4:"1189";s:49:"Classes/ViewHelpers/Be/Buttons/IconViewHelper.php";s:4:"0ef2";s:53:"Classes/ViewHelpers/Be/Buttons/ShortcutViewHelper.php";s:4:"8b35";s:57:"Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php";s:4:"3798";s:53:"Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php";s:4:"e44d";s:61:"Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php";s:4:"8bc3";s:55:"Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php";s:4:"70a0";s:56:"Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php";s:4:"bcb0";s:51:"Classes/ViewHelpers/Form/AbstractFormViewHelper.php";s:4:"2dc3";s:47:"Classes/ViewHelpers/Form/CheckboxViewHelper.php";s:4:"57b8";s:45:"Classes/ViewHelpers/Form/ErrorsViewHelper.php";s:4:"41d1";s:45:"Classes/ViewHelpers/Form/HiddenViewHelper.php";s:4:"fd4f";s:47:"Classes/ViewHelpers/Form/PasswordViewHelper.php";s:4:"12a0";s:44:"Classes/ViewHelpers/Form/RadioViewHelper.php";s:4:"d39f";s:45:"Classes/ViewHelpers/Form/SelectViewHelper.php";s:4:"fd6c";s:45:"Classes/ViewHelpers/Form/SubmitViewHelper.php";s:4:"ee63";s:47:"Classes/ViewHelpers/Form/TextareaViewHelper.php";s:4:"dd77";s:46:"Classes/ViewHelpers/Form/TextboxViewHelper.php";s:4:"7c6d";s:48:"Classes/ViewHelpers/Form/TextfieldViewHelper.php";s:4:"8dd7";s:45:"Classes/ViewHelpers/Form/UploadViewHelper.php";s:4:"9b9e";s:45:"Classes/ViewHelpers/Format/CropViewHelper.php";s:4:"02f6";s:49:"Classes/ViewHelpers/Format/CurrencyViewHelper.php";s:4:"4911";s:45:"Classes/ViewHelpers/Format/DateViewHelper.php";s:4:"97d2";s:45:"Classes/ViewHelpers/Format/HtmlViewHelper.php";s:4:"5358";s:46:"Classes/ViewHelpers/Format/Nl2brViewHelper.php";s:4:"485e";s:47:"Classes/ViewHelpers/Format/NumberViewHelper.php";s:4:"4df4";s:48:"Classes/ViewHelpers/Format/PaddingViewHelper.php";s:4:"df5a";s:47:"Classes/ViewHelpers/Format/PrintfViewHelper.php";s:4:"7a95";s:45:"Classes/ViewHelpers/Link/ActionViewHelper.php";s:4:"1c8d";s:44:"Classes/ViewHelpers/Link/EmailViewHelper.php";s:4:"6a63";s:47:"Classes/ViewHelpers/Link/ExternalViewHelper.php";s:4:"e02d";s:43:"Classes/ViewHelpers/Link/PageViewHelper.php";s:4:"b6bc";s:58:"Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php";s:4:"b675";s:52:"Classes/ViewHelpers/Security/IfHasRoleViewHelper.php";s:4:"365b";s:44:"Classes/ViewHelpers/Uri/ActionViewHelper.php";s:4:"0bb9";s:43:"Classes/ViewHelpers/Uri/EmailViewHelper.php";s:4:"3ac1";s:46:"Classes/ViewHelpers/Uri/ExternalViewHelper.php";s:4:"716b";s:43:"Classes/ViewHelpers/Uri/ImageViewHelper.php";s:4:"2e43";s:42:"Classes/ViewHelpers/Uri/PageViewHelper.php";s:4:"1a59";s:46:"Classes/ViewHelpers/Uri/ResourceViewHelper.php";s:4:"d2d7";s:53:"Classes/ViewHelpers/Widget/AutocompleteViewHelper.php";s:4:"8a67";s:45:"Classes/ViewHelpers/Widget/LinkViewHelper.php";s:4:"205e";s:49:"Classes/ViewHelpers/Widget/PaginateViewHelper.php";s:4:"7a5d";s:44:"Classes/ViewHelpers/Widget/UriViewHelper.php";s:4:"d933";s:64:"Classes/ViewHelpers/Widget/Controller/AutocompleteController.php";s:4:"2983";s:60:"Classes/ViewHelpers/Widget/Controller/PaginateController.php";s:4:"1573";s:34:"Configuration/TypoScript/setup.txt";s:4:"0e30";s:70:"Resources/Private/Templates/ViewHelpers/Widget/Autocomplete/Index.html";s:4:"b955";s:66:"Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html";s:4:"55a2";s:42:"Tests/Unit/Core/TagBasedViewHelperTest.php";s:4:"ce1f";s:34:"Tests/Unit/Core/TagBuilderTest.php";s:4:"76eb";s:43:"Tests/Unit/Core/Fixtures/TestViewHelper.php";s:4:"253f";s:43:"Tests/Unit/Core/Parser/ParsingStateTest.php";s:4:"1877";s:52:"Tests/Unit/Core/Parser/TemplateParserPatternTest.php";s:4:"4786";s:45:"Tests/Unit/Core/Parser/TemplateParserTest.php";s:4:"1c66";s:66:"Tests/Unit/Core/Parser/Fixtures/ChildNodeAccessFacetViewHelper.php";s:4:"01d1";s:60:"Tests/Unit/Core/Parser/Fixtures/PostParseFacetViewHelper.php";s:4:"4546";s:79:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture01-shorthand-split.php";s:4:"ea3a";s:74:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture01-shorthand.html";s:4:"e949";s:69:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture06-split.php";s:4:"33ba";s:64:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture06.html";s:4:"92c2";s:69:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture14-split.php";s:4:"bd4b";s:64:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture14.html";s:4:"1ec8";s:49:"Tests/Unit/Core/Parser/Interceptor/EscapeTest.php";s:4:"74d6";s:54:"Tests/Unit/Core/Parser/SyntaxTree/AbstractNodeTest.php";s:4:"84e7";s:50:"Tests/Unit/Core/Parser/SyntaxTree/TextNodeTest.php";s:4:"d495";s:66:"Tests/Unit/Core/Parser/SyntaxTree/ViewHelperNodeComparatorTest.php";s:4:"0a6f";s:56:"Tests/Unit/Core/Parser/SyntaxTree/ViewHelperNodeTest.php";s:4:"69e3";s:50:"Tests/Unit/Core/Rendering/RenderingContextTest.php";s:4:"59d3";s:53:"Tests/Unit/Core/ViewHelper/AbstractViewHelperTest.php";s:4:"dfc4";s:53:"Tests/Unit/Core/ViewHelper/ArgumentDefinitionTest.php";s:4:"6c62";s:54:"Tests/Unit/Core/ViewHelper/ConditionViewHelperTest.php";s:4:"66d7";s:60:"Tests/Unit/Core/ViewHelper/TemplateVariableContainerTest.php";s:4:"17e5";s:62:"Tests/Unit/Core/ViewHelper/ViewHelperVariableContainerTest.php";s:4:"7bf5";s:55:"Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php";s:4:"686a";s:55:"Tests/Unit/Core/Widget/AbstractWidgetViewHelperTest.php";s:4:"29d7";s:54:"Tests/Unit/Core/Widget/AjaxWidgetContextHolderTest.php";s:4:"905f";s:44:"Tests/Unit/Core/Widget/WidgetContextTest.php";s:4:"28fd";s:51:"Tests/Unit/Core/Widget/WidgetRequestBuilderTest.php";s:4:"e01d";s:51:"Tests/Unit/Core/Widget/WidgetRequestHandlerTest.php";s:4:"4023";s:44:"Tests/Unit/Core/Widget/WidgetRequestTest.php";s:4:"73af";s:44:"Tests/Unit/View/AbstractTemplateViewTest.php";s:4:"d778";s:38:"Tests/Unit/View/StandaloneViewTest.php";s:4:"22df";s:36:"Tests/Unit/View/TemplateViewTest.php";s:4:"f4ed";s:38:"Tests/Unit/View/Fixtures/LayoutFixture";s:4:"85d8";s:43:"Tests/Unit/View/Fixtures/LayoutFixture.html";s:4:"cca1";s:42:"Tests/Unit/View/Fixtures/LayoutFixture.xml";s:4:"85be";s:51:"Tests/Unit/View/Fixtures/StandaloneViewFixture.html";s:4:"8952";s:48:"Tests/Unit/View/Fixtures/TemplateViewFixture.php";s:4:"79e8";s:56:"Tests/Unit/View/Fixtures/TemplateViewSectionFixture.html";s:4:"aa5f";s:54:"Tests/Unit/View/Fixtures/TransparentSyntaxTreeNode.php";s:4:"eb0d";s:53:"Tests/Unit/View/Fixtures/UnparsedTemplateFixture.html";s:4:"59dd";s:46:"Tests/Unit/ViewHelpers/AliasViewHelperTest.php";s:4:"4906";s:45:"Tests/Unit/ViewHelpers/BaseViewHelperTest.php";s:4:"ddfb";s:46:"Tests/Unit/ViewHelpers/CountViewHelperTest.php";s:4:"e230";s:46:"Tests/Unit/ViewHelpers/CycleViewHelperTest.php";s:4:"c976";s:45:"Tests/Unit/ViewHelpers/ElseViewHelperTest.php";s:4:"0d90";s:44:"Tests/Unit/ViewHelpers/ForViewHelperTest.php";s:4:"3666";s:45:"Tests/Unit/ViewHelpers/FormViewHelperTest.php";s:4:"8b40";s:51:"Tests/Unit/ViewHelpers/GroupedForViewHelperTest.php";s:4:"8f37";s:43:"Tests/Unit/ViewHelpers/IfViewHelperTest.php";s:4:"25b8";s:55:"Tests/Unit/ViewHelpers/RenderChildrenViewHelperTest.php";s:4:"c652";s:47:"Tests/Unit/ViewHelpers/RenderViewHelperTest.php";s:4:"02d2";s:45:"Tests/Unit/ViewHelpers/ThenViewHelperTest.php";s:4:"360c";s:49:"Tests/Unit/ViewHelpers/ViewHelperBaseTestcase.php";s:4:"759d";s:59:"Tests/Unit/ViewHelpers/Be/IfAuthenticatedViewHelperTest.php";s:4:"14d1";s:53:"Tests/Unit/ViewHelpers/Be/IfHasRoleViewHelperTest.php";s:4:"cec2";s:60:"Tests/Unit/ViewHelpers/Fixtures/ConstraintSyntaxTreeNode.php";s:4:"dd45";s:46:"Tests/Unit/ViewHelpers/Fixtures/IfFixture.html";s:4:"8458";s:54:"Tests/Unit/ViewHelpers/Fixtures/IfThenElseFixture.html";s:4:"62f0";s:63:"Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php";s:4:"edca";s:58:"Tests/Unit/ViewHelpers/Form/AbstractFormViewHelperTest.php";s:4:"32bd";s:54:"Tests/Unit/ViewHelpers/Form/CheckboxViewHelperTest.php";s:4:"4850";s:52:"Tests/Unit/ViewHelpers/Form/ErrorsViewHelperTest.php";s:4:"6729";s:52:"Tests/Unit/ViewHelpers/Form/HiddenViewHelperTest.php";s:4:"b2ba";s:51:"Tests/Unit/ViewHelpers/Form/RadioViewHelperTest.php";s:4:"a17e";s:52:"Tests/Unit/ViewHelpers/Form/SelectViewHelperTest.php";s:4:"1576";s:52:"Tests/Unit/ViewHelpers/Form/SubmitViewHelperTest.php";s:4:"e361";s:54:"Tests/Unit/ViewHelpers/Form/TextareaViewHelperTest.php";s:4:"c366";s:53:"Tests/Unit/ViewHelpers/Form/TextboxViewHelperTest.php";s:4:"3632";s:52:"Tests/Unit/ViewHelpers/Form/UploadViewHelperTest.php";s:4:"8bd9";s:60:"Tests/Unit/ViewHelpers/Form/Fixtures/EmptySyntaxTreeNode.php";s:4:"9dca";s:64:"Tests/Unit/ViewHelpers/Form/Fixtures/Fixture_UserDomainClass.php";s:4:"494c";s:52:"Tests/Unit/ViewHelpers/Format/CropViewHelperTest.php";s:4:"dee7";s:56:"Tests/Unit/ViewHelpers/Format/CurrencyViewHelperTest.php";s:4:"d525";s:52:"Tests/Unit/ViewHelpers/Format/DateViewHelperTest.php";s:4:"4e29";s:53:"Tests/Unit/ViewHelpers/Format/Nl2brViewHelperTest.php";s:4:"bffe";s:54:"Tests/Unit/ViewHelpers/Format/NumberViewHelperTest.php";s:4:"0a2d";s:55:"Tests/Unit/ViewHelpers/Format/PaddingViewHelperTest.php";s:4:"d7b9";s:54:"Tests/Unit/ViewHelpers/Format/PrintfViewHelperTest.php";s:4:"4409";s:51:"Tests/Unit/ViewHelpers/Link/EmailViewHelperTest.php";s:4:"21dd";s:54:"Tests/Unit/ViewHelpers/Link/ExternalViewHelperTest.php";s:4:"9571";s:61:"Tests/Unit/ViewHelpers/Persistence/IdentityViewHelperTest.php";s:4:"c6f2";s:65:"Tests/Unit/ViewHelpers/Security/IfAuthenticatedViewHelperTest.php";s:4:"af2a";s:59:"Tests/Unit/ViewHelpers/Security/IfHasRoleViewHelperTest.php";s:4:"5722";s:50:"Tests/Unit/ViewHelpers/Uri/EmailViewHelperTest.php";s:4:"0b80";s:53:"Tests/Unit/ViewHelpers/Uri/ExternalViewHelperTest.php";s:4:"5405";}',
+       '_md5_values_when_last_written' => 'a:225:{s:13:"ChangeLog.txt";s:4:"edf5";s:16:"ext_autoload.php";s:4:"104d";s:12:"ext_icon.gif";s:4:"e922";s:14:"ext_tables.php";s:4:"344b";s:24:"ext_typoscript_setup.txt";s:4:"b410";s:21:"Classes/Exception.php";s:4:"7373";s:17:"Classes/Fluid.php";s:4:"ac13";s:49:"Classes/Compatibility/DocbookGeneratorService.php";s:4:"84b6";s:47:"Classes/Compatibility/TemplateParserBuilder.php";s:4:"617b";s:26:"Classes/Core/Exception.php";s:4:"79b3";s:37:"Classes/Core/Parser/Configuration.php";s:4:"ab36";s:33:"Classes/Core/Parser/Exception.php";s:4:"1cbd";s:44:"Classes/Core/Parser/InterceptorInterface.php";s:4:"28a6";s:47:"Classes/Core/Parser/ParsedTemplateInterface.php";s:4:"17a1";s:36:"Classes/Core/Parser/ParsingState.php";s:4:"6677";s:38:"Classes/Core/Parser/TemplateParser.php";s:4:"d4cf";s:42:"Classes/Core/Parser/Interceptor/Escape.php";s:4:"4db0";s:47:"Classes/Core/Parser/SyntaxTree/AbstractNode.php";s:4:"a57e";s:44:"Classes/Core/Parser/SyntaxTree/ArrayNode.php";s:4:"b123";s:48:"Classes/Core/Parser/SyntaxTree/NodeInterface.php";s:4:"1a31";s:53:"Classes/Core/Parser/SyntaxTree/ObjectAccessorNode.php";s:4:"fec4";s:65:"Classes/Core/Parser/SyntaxTree/RenderingContextAwareInterface.php";s:4:"68ab";s:43:"Classes/Core/Parser/SyntaxTree/RootNode.php";s:4:"6b59";s:43:"Classes/Core/Parser/SyntaxTree/TextNode.php";s:4:"7ce2";s:49:"Classes/Core/Parser/SyntaxTree/ViewHelperNode.php";s:4:"becf";s:43:"Classes/Core/Rendering/RenderingContext.php";s:4:"169b";s:52:"Classes/Core/Rendering/RenderingContextInterface.php";s:4:"29bb";s:55:"Classes/Core/ViewHelper/AbstractConditionViewHelper.php";s:4:"1b02";s:54:"Classes/Core/ViewHelper/AbstractTagBasedViewHelper.php";s:4:"7560";s:46:"Classes/Core/ViewHelper/AbstractViewHelper.php";s:4:"8c70";s:46:"Classes/Core/ViewHelper/ArgumentDefinition.php";s:4:"c4d5";s:37:"Classes/Core/ViewHelper/Arguments.php";s:4:"8553";s:37:"Classes/Core/ViewHelper/Exception.php";s:4:"f1d0";s:46:"Classes/Core/ViewHelper/TagBasedViewHelper.php";s:4:"b234";s:38:"Classes/Core/ViewHelper/TagBuilder.php";s:4:"1e21";s:53:"Classes/Core/ViewHelper/TemplateVariableContainer.php";s:4:"b576";s:47:"Classes/Core/ViewHelper/ViewHelperInterface.php";s:4:"8274";s:55:"Classes/Core/ViewHelper/ViewHelperVariableContainer.php";s:4:"f6b8";s:62:"Classes/Core/ViewHelper/Exception/InvalidVariableException.php";s:4:"6dd4";s:76:"Classes/Core/ViewHelper/Exception/RenderingContextNotAccessibleException.php";s:4:"bbb7";s:59:"Classes/Core/ViewHelper/Facets/ChildNodeAccessInterface.php";s:4:"7ec9";s:53:"Classes/Core/ViewHelper/Facets/PostParseInterface.php";s:4:"35d5";s:48:"Classes/Core/Widget/AbstractWidgetController.php";s:4:"5466";s:48:"Classes/Core/Widget/AbstractWidgetViewHelper.php";s:4:"fa90";s:47:"Classes/Core/Widget/AjaxWidgetContextHolder.php";s:4:"4658";s:33:"Classes/Core/Widget/Bootstrap.php";s:4:"b8db";s:33:"Classes/Core/Widget/Exception.php";s:4:"a6e3";s:37:"Classes/Core/Widget/WidgetContext.php";s:4:"305f";s:37:"Classes/Core/Widget/WidgetRequest.php";s:4:"0ff7";s:44:"Classes/Core/Widget/WidgetRequestBuilder.php";s:4:"cf2b";s:44:"Classes/Core/Widget/WidgetRequestHandler.php";s:4:"c616";s:60:"Classes/Core/Widget/Exception/MissingControllerException.php";s:4:"5b77";s:67:"Classes/Core/Widget/Exception/RenderingContextNotFoundException.php";s:4:"a31b";s:64:"Classes/Core/Widget/Exception/WidgetContextNotFoundException.php";s:4:"ffc2";s:64:"Classes/Core/Widget/Exception/WidgetRequestNotFoundException.php";s:4:"7ce2";s:36:"Classes/Service/DocbookGenerator.php";s:4:"c6a5";s:37:"Classes/View/AbstractTemplateView.php";s:4:"ef25";s:26:"Classes/View/Exception.php";s:4:"4168";s:31:"Classes/View/StandaloneView.php";s:4:"4ac9";s:29:"Classes/View/TemplateView.php";s:4:"b3c5";s:50:"Classes/View/Exception/InvalidSectionException.php";s:4:"6cb2";s:59:"Classes/View/Exception/InvalidTemplateResourceException.php";s:4:"d589";s:39:"Classes/ViewHelpers/AliasViewHelper.php";s:4:"06f9";s:38:"Classes/ViewHelpers/BaseViewHelper.php";s:4:"a23f";s:41:"Classes/ViewHelpers/CObjectViewHelper.php";s:4:"b8b2";s:39:"Classes/ViewHelpers/CountViewHelper.php";s:4:"140f";s:39:"Classes/ViewHelpers/CycleViewHelper.php";s:4:"defe";s:39:"Classes/ViewHelpers/DebugViewHelper.php";s:4:"b611";s:38:"Classes/ViewHelpers/ElseViewHelper.php";s:4:"cdde";s:40:"Classes/ViewHelpers/EscapeViewHelper.php";s:4:"bf87";s:47:"Classes/ViewHelpers/FlashMessagesViewHelper.php";s:4:"fee4";s:37:"Classes/ViewHelpers/ForViewHelper.php";s:4:"54de";s:38:"Classes/ViewHelpers/FormViewHelper.php";s:4:"d1e7";s:44:"Classes/ViewHelpers/GroupedForViewHelper.php";s:4:"e37a";s:36:"Classes/ViewHelpers/IfViewHelper.php";s:4:"aa56";s:39:"Classes/ViewHelpers/ImageViewHelper.php";s:4:"d12c";s:40:"Classes/ViewHelpers/LayoutViewHelper.php";s:4:"ac35";s:48:"Classes/ViewHelpers/RenderChildrenViewHelper.php";s:4:"218b";s:53:"Classes/ViewHelpers/RenderFlashMessagesViewHelper.php";s:4:"3e52";s:40:"Classes/ViewHelpers/RenderViewHelper.php";s:4:"3a8a";s:41:"Classes/ViewHelpers/SectionViewHelper.php";s:4:"c4fa";s:38:"Classes/ViewHelpers/ThenViewHelper.php";s:4:"de0c";s:43:"Classes/ViewHelpers/TranslateViewHelper.php";s:4:"e9b6";s:52:"Classes/ViewHelpers/Be/AbstractBackendViewHelper.php";s:4:"0b21";s:46:"Classes/ViewHelpers/Be/ContainerViewHelper.php";s:4:"0b13";s:45:"Classes/ViewHelpers/Be/PageInfoViewHelper.php";s:4:"2a33";s:45:"Classes/ViewHelpers/Be/PagePathViewHelper.php";s:4:"7bd7";s:46:"Classes/ViewHelpers/Be/TableListViewHelper.php";s:4:"13c5";s:48:"Classes/ViewHelpers/Be/Buttons/CshViewHelper.php";s:4:"1189";s:49:"Classes/ViewHelpers/Be/Buttons/IconViewHelper.php";s:4:"0ef2";s:53:"Classes/ViewHelpers/Be/Buttons/ShortcutViewHelper.php";s:4:"8b35";s:57:"Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php";s:4:"3798";s:53:"Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php";s:4:"e44d";s:61:"Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php";s:4:"8bc3";s:55:"Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php";s:4:"70a0";s:56:"Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php";s:4:"bcb0";s:51:"Classes/ViewHelpers/Form/AbstractFormViewHelper.php";s:4:"2dc3";s:47:"Classes/ViewHelpers/Form/CheckboxViewHelper.php";s:4:"57b8";s:45:"Classes/ViewHelpers/Form/ErrorsViewHelper.php";s:4:"41d1";s:45:"Classes/ViewHelpers/Form/HiddenViewHelper.php";s:4:"fd4f";s:47:"Classes/ViewHelpers/Form/PasswordViewHelper.php";s:4:"12a0";s:44:"Classes/ViewHelpers/Form/RadioViewHelper.php";s:4:"d39f";s:45:"Classes/ViewHelpers/Form/SelectViewHelper.php";s:4:"fd6c";s:45:"Classes/ViewHelpers/Form/SubmitViewHelper.php";s:4:"ee63";s:47:"Classes/ViewHelpers/Form/TextareaViewHelper.php";s:4:"dd77";s:46:"Classes/ViewHelpers/Form/TextboxViewHelper.php";s:4:"7c6d";s:48:"Classes/ViewHelpers/Form/TextfieldViewHelper.php";s:4:"8dd7";s:45:"Classes/ViewHelpers/Form/UploadViewHelper.php";s:4:"9b9e";s:45:"Classes/ViewHelpers/Format/CropViewHelper.php";s:4:"02f6";s:49:"Classes/ViewHelpers/Format/CurrencyViewHelper.php";s:4:"4911";s:45:"Classes/ViewHelpers/Format/DateViewHelper.php";s:4:"97d2";s:45:"Classes/ViewHelpers/Format/HtmlViewHelper.php";s:4:"5358";s:46:"Classes/ViewHelpers/Format/Nl2brViewHelper.php";s:4:"485e";s:47:"Classes/ViewHelpers/Format/NumberViewHelper.php";s:4:"4df4";s:48:"Classes/ViewHelpers/Format/PaddingViewHelper.php";s:4:"df5a";s:47:"Classes/ViewHelpers/Format/PrintfViewHelper.php";s:4:"7a95";s:45:"Classes/ViewHelpers/Link/ActionViewHelper.php";s:4:"1c8d";s:44:"Classes/ViewHelpers/Link/EmailViewHelper.php";s:4:"6a63";s:47:"Classes/ViewHelpers/Link/ExternalViewHelper.php";s:4:"e02d";s:43:"Classes/ViewHelpers/Link/PageViewHelper.php";s:4:"b6bc";s:58:"Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php";s:4:"b675";s:52:"Classes/ViewHelpers/Security/IfHasRoleViewHelper.php";s:4:"365b";s:44:"Classes/ViewHelpers/Uri/ActionViewHelper.php";s:4:"0bb9";s:43:"Classes/ViewHelpers/Uri/EmailViewHelper.php";s:4:"3ac1";s:46:"Classes/ViewHelpers/Uri/ExternalViewHelper.php";s:4:"716b";s:43:"Classes/ViewHelpers/Uri/ImageViewHelper.php";s:4:"2e43";s:42:"Classes/ViewHelpers/Uri/PageViewHelper.php";s:4:"1a59";s:46:"Classes/ViewHelpers/Uri/ResourceViewHelper.php";s:4:"d2d7";s:53:"Classes/ViewHelpers/Widget/AutocompleteViewHelper.php";s:4:"8a67";s:45:"Classes/ViewHelpers/Widget/LinkViewHelper.php";s:4:"205e";s:49:"Classes/ViewHelpers/Widget/PaginateViewHelper.php";s:4:"7a5d";s:44:"Classes/ViewHelpers/Widget/UriViewHelper.php";s:4:"d933";s:64:"Classes/ViewHelpers/Widget/Controller/AutocompleteController.php";s:4:"2983";s:60:"Classes/ViewHelpers/Widget/Controller/PaginateController.php";s:4:"1573";s:34:"Configuration/TypoScript/setup.txt";s:4:"0e30";s:70:"Resources/Private/Templates/ViewHelpers/Widget/Autocomplete/Index.html";s:4:"b955";s:66:"Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html";s:4:"55a2";s:42:"Tests/Unit/Core/TagBasedViewHelperTest.php";s:4:"ce1f";s:34:"Tests/Unit/Core/TagBuilderTest.php";s:4:"76eb";s:43:"Tests/Unit/Core/Fixtures/TestViewHelper.php";s:4:"253f";s:43:"Tests/Unit/Core/Parser/ParsingStateTest.php";s:4:"1877";s:52:"Tests/Unit/Core/Parser/TemplateParserPatternTest.php";s:4:"4786";s:45:"Tests/Unit/Core/Parser/TemplateParserTest.php";s:4:"1c66";s:66:"Tests/Unit/Core/Parser/Fixtures/ChildNodeAccessFacetViewHelper.php";s:4:"01d1";s:60:"Tests/Unit/Core/Parser/Fixtures/PostParseFacetViewHelper.php";s:4:"4546";s:79:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture01-shorthand-split.php";s:4:"ea3a";s:74:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture01-shorthand.html";s:4:"e949";s:69:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture06-split.php";s:4:"33ba";s:64:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture06.html";s:4:"92c2";s:69:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture14-split.php";s:4:"bd4b";s:64:"Tests/Unit/Core/Parser/Fixtures/TemplateParserTestFixture14.html";s:4:"1ec8";s:49:"Tests/Unit/Core/Parser/Interceptor/EscapeTest.php";s:4:"74d6";s:54:"Tests/Unit/Core/Parser/SyntaxTree/AbstractNodeTest.php";s:4:"84e7";s:50:"Tests/Unit/Core/Parser/SyntaxTree/TextNodeTest.php";s:4:"d495";s:66:"Tests/Unit/Core/Parser/SyntaxTree/ViewHelperNodeComparatorTest.php";s:4:"0a6f";s:56:"Tests/Unit/Core/Parser/SyntaxTree/ViewHelperNodeTest.php";s:4:"69e3";s:50:"Tests/Unit/Core/Rendering/RenderingContextTest.php";s:4:"59d3";s:53:"Tests/Unit/Core/ViewHelper/AbstractViewHelperTest.php";s:4:"dfc4";s:53:"Tests/Unit/Core/ViewHelper/ArgumentDefinitionTest.php";s:4:"6c62";s:54:"Tests/Unit/Core/ViewHelper/ConditionViewHelperTest.php";s:4:"66d7";s:60:"Tests/Unit/Core/ViewHelper/TemplateVariableContainerTest.php";s:4:"17e5";s:62:"Tests/Unit/Core/ViewHelper/ViewHelperVariableContainerTest.php";s:4:"7bf5";s:55:"Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php";s:4:"686a";s:55:"Tests/Unit/Core/Widget/AbstractWidgetViewHelperTest.php";s:4:"29d7";s:54:"Tests/Unit/Core/Widget/AjaxWidgetContextHolderTest.php";s:4:"905f";s:44:"Tests/Unit/Core/Widget/WidgetContextTest.php";s:4:"28fd";s:51:"Tests/Unit/Core/Widget/WidgetRequestBuilderTest.php";s:4:"e01d";s:51:"Tests/Unit/Core/Widget/WidgetRequestHandlerTest.php";s:4:"4023";s:44:"Tests/Unit/Core/Widget/WidgetRequestTest.php";s:4:"73af";s:44:"Tests/Unit/View/AbstractTemplateViewTest.php";s:4:"d778";s:38:"Tests/Unit/View/StandaloneViewTest.php";s:4:"f2c6";s:36:"Tests/Unit/View/TemplateViewTest.php";s:4:"f4ed";s:38:"Tests/Unit/View/Fixtures/LayoutFixture";s:4:"85d8";s:43:"Tests/Unit/View/Fixtures/LayoutFixture.html";s:4:"cca1";s:42:"Tests/Unit/View/Fixtures/LayoutFixture.xml";s:4:"85be";s:51:"Tests/Unit/View/Fixtures/StandaloneViewFixture.html";s:4:"8952";s:48:"Tests/Unit/View/Fixtures/TemplateViewFixture.php";s:4:"79e8";s:56:"Tests/Unit/View/Fixtures/TemplateViewSectionFixture.html";s:4:"aa5f";s:54:"Tests/Unit/View/Fixtures/TransparentSyntaxTreeNode.php";s:4:"eb0d";s:53:"Tests/Unit/View/Fixtures/UnparsedTemplateFixture.html";s:4:"59dd";s:46:"Tests/Unit/ViewHelpers/AliasViewHelperTest.php";s:4:"4906";s:45:"Tests/Unit/ViewHelpers/BaseViewHelperTest.php";s:4:"ddfb";s:46:"Tests/Unit/ViewHelpers/CountViewHelperTest.php";s:4:"e230";s:46:"Tests/Unit/ViewHelpers/CycleViewHelperTest.php";s:4:"c976";s:45:"Tests/Unit/ViewHelpers/ElseViewHelperTest.php";s:4:"0d90";s:44:"Tests/Unit/ViewHelpers/ForViewHelperTest.php";s:4:"3666";s:45:"Tests/Unit/ViewHelpers/FormViewHelperTest.php";s:4:"8b40";s:51:"Tests/Unit/ViewHelpers/GroupedForViewHelperTest.php";s:4:"8f37";s:43:"Tests/Unit/ViewHelpers/IfViewHelperTest.php";s:4:"25b8";s:55:"Tests/Unit/ViewHelpers/RenderChildrenViewHelperTest.php";s:4:"c652";s:47:"Tests/Unit/ViewHelpers/RenderViewHelperTest.php";s:4:"02d2";s:45:"Tests/Unit/ViewHelpers/ThenViewHelperTest.php";s:4:"360c";s:49:"Tests/Unit/ViewHelpers/ViewHelperBaseTestcase.php";s:4:"759d";s:59:"Tests/Unit/ViewHelpers/Be/IfAuthenticatedViewHelperTest.php";s:4:"14d1";s:53:"Tests/Unit/ViewHelpers/Be/IfHasRoleViewHelperTest.php";s:4:"cec2";s:60:"Tests/Unit/ViewHelpers/Fixtures/ConstraintSyntaxTreeNode.php";s:4:"dd45";s:46:"Tests/Unit/ViewHelpers/Fixtures/IfFixture.html";s:4:"8458";s:54:"Tests/Unit/ViewHelpers/Fixtures/IfThenElseFixture.html";s:4:"62f0";s:63:"Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php";s:4:"edca";s:58:"Tests/Unit/ViewHelpers/Form/AbstractFormViewHelperTest.php";s:4:"32bd";s:54:"Tests/Unit/ViewHelpers/Form/CheckboxViewHelperTest.php";s:4:"4850";s:52:"Tests/Unit/ViewHelpers/Form/ErrorsViewHelperTest.php";s:4:"6729";s:52:"Tests/Unit/ViewHelpers/Form/HiddenViewHelperTest.php";s:4:"b2ba";s:51:"Tests/Unit/ViewHelpers/Form/RadioViewHelperTest.php";s:4:"a17e";s:52:"Tests/Unit/ViewHelpers/Form/SelectViewHelperTest.php";s:4:"1576";s:52:"Tests/Unit/ViewHelpers/Form/SubmitViewHelperTest.php";s:4:"e361";s:54:"Tests/Unit/ViewHelpers/Form/TextareaViewHelperTest.php";s:4:"c366";s:53:"Tests/Unit/ViewHelpers/Form/TextboxViewHelperTest.php";s:4:"3632";s:52:"Tests/Unit/ViewHelpers/Form/UploadViewHelperTest.php";s:4:"8bd9";s:60:"Tests/Unit/ViewHelpers/Form/Fixtures/EmptySyntaxTreeNode.php";s:4:"9dca";s:64:"Tests/Unit/ViewHelpers/Form/Fixtures/Fixture_UserDomainClass.php";s:4:"494c";s:52:"Tests/Unit/ViewHelpers/Format/CropViewHelperTest.php";s:4:"dee7";s:56:"Tests/Unit/ViewHelpers/Format/CurrencyViewHelperTest.php";s:4:"d525";s:52:"Tests/Unit/ViewHelpers/Format/DateViewHelperTest.php";s:4:"4e29";s:53:"Tests/Unit/ViewHelpers/Format/Nl2brViewHelperTest.php";s:4:"bffe";s:54:"Tests/Unit/ViewHelpers/Format/NumberViewHelperTest.php";s:4:"0a2d";s:55:"Tests/Unit/ViewHelpers/Format/PaddingViewHelperTest.php";s:4:"d7b9";s:54:"Tests/Unit/ViewHelpers/Format/PrintfViewHelperTest.php";s:4:"4409";s:51:"Tests/Unit/ViewHelpers/Link/EmailViewHelperTest.php";s:4:"21dd";s:54:"Tests/Unit/ViewHelpers/Link/ExternalViewHelperTest.php";s:4:"9571";s:61:"Tests/Unit/ViewHelpers/Persistence/IdentityViewHelperTest.php";s:4:"c6f2";s:65:"Tests/Unit/ViewHelpers/Security/IfAuthenticatedViewHelperTest.php";s:4:"af2a";s:59:"Tests/Unit/ViewHelpers/Security/IfHasRoleViewHelperTest.php";s:4:"5722";s:50:"Tests/Unit/ViewHelpers/Uri/EmailViewHelperTest.php";s:4:"0b80";s:53:"Tests/Unit/ViewHelpers/Uri/ExternalViewHelperTest.php";s:4:"5405";}',
        'suggests' => array(
        ),
 );
index 2afa929..7e20e0e 100644 (file)
@@ -1 +1 @@
-https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/fluid/tags/1.3.0beta3/
+https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/fluid/tags/1.3.0RC1/