Raised Extbase and Fluid to 1.3.0beta3
authorSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Mon, 27 Dec 2010 07:43:28 +0000 (07:43 +0000)
committerSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Mon, 27 Dec 2010 07:43:28 +0000 (07:43 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9904 709f56b5-9817-0410-a4d7-c38de5d9e867

24 files changed:
ChangeLog
typo3/sysext/extbase/ChangeLog.txt
typo3/sysext/extbase/Classes/Configuration/BackendConfigurationManager.php
typo3/sysext/extbase/Classes/Configuration/ConfigurationManagerInterface.php
typo3/sysext/extbase/Classes/Core/Bootstrap.php
typo3/sysext/extbase/Classes/DomainObject/AbstractDomainObject.php
typo3/sysext/extbase/Classes/MVC/Dispatcher.php
typo3/sysext/extbase/Classes/Object/Container/Container.php
typo3/sysext/extbase/Classes/Object/ObjectManager.php
typo3/sysext/extbase/Classes/Persistence/Repository.php
typo3/sysext/extbase/Classes/Reflection/Exception/PropertyNotAccessibleException.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Reflection/ObjectAccess.php
typo3/sysext/extbase/Tests/Unit/MVC/Controller/AbstractControllerTest.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/Reflection/Fixture/ArrayAccessClass.php [new file with mode: 0644]
typo3/sysext/extbase/Tests/Unit/Reflection/Fixture/DummyClassWithGettersAndSetters.php [new file with mode: 0644]
typo3/sysext/extbase/Tests/Unit/Reflection/ObjectAccessTest.php [new file with mode: 0644]
typo3/sysext/extbase/ext_emconf.php
typo3/sysext/extbase/ext_localconf.php
typo3/sysext/extbase/last_synched_target
typo3/sysext/fluid/Classes/ViewHelpers/Form/SelectViewHelper.php
typo3/sysext/fluid/ext_emconf.php
typo3/sysext/fluid/last_synched_target

index 20672f2..8a7732b 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-12-27  Sebastian Kurfuerst  <sebastian@typo3.org>
+
+       * Raised Extbase and Fluid to 1.3.0beta3
+
 2010-12-26  Steffen Gebert  <steffen@steffen-gebert.de>
 
        * Fixed bug #16841: Webkit performance issue with topbar status "in workspace"
index f00e21b..1de7e26 100755 (executable)
@@ -1,6 +1,42 @@
 ChangeLog for Extbase
 =====================
 
+Changes for 1.3.0 Beta 3:
+==========================
+included in TYPO3 4.5.0 Beta 3.
+
+This release features numerous stability improvements, the biggest one
+being a re-written core of the Object Manager, such that Lifecycle Methods
+are supported now. This means, that a method "initializeObject()" gets called
+as soon as all dependencies are injected and initialized.
+
+Additionally, Extbase didn't work in all cases in the TYPO3 Backend. This has
+also been improved, so Extbase (again) works in the backend
+with an empty page tree.
+
+Full Changes for 1.3.0 Beta 3:
+=============================
+
+[+BUGFIX] Extbase (Tests): Fixed Tx_Extbase_MVC_Controller_AbstractController_testcase. Thanks to Oliver Klee. Resolves #11567.
+[BUGFIX] Extbase (Configuration): Make Extbase work again in Backend
+[!!!][+TASK] Extbase (Object): Rewritten Object Container
+[+BUGFIX] Extbase (MVC): Improve Exception message
+       If one misses the @dontvalidate annotation, he will
+       get a strange error which does not have a hint that
+       the @dontvalidate is missing. Now, the exception message
+       is extended.
+[+API] Extbase (Configuration): Adding getContentObject to API
+[+TASK] Extbase (Reflection): Added deprecation annotation to ObjectAccess::getAccessiblePropertyNames()
+       To stay in sync with FLOW3, the methods getAccessibleProperties() and getAccessiblePropertyNames() to
+       getGettableProperties() and getGettablePropertyNames().
+       For compatibility reasons the old methods will stay in Extbase until version 1.5.
+       Note: you can now check wheter properties are settable as well
+[+FEATURE] Extbase (Reflection): Tx_Extbase_Reflection_ObjectAccess supports stdClass objects now
+       I've backported the ObjectAccess class and its unit tests from FLOW3.
+       Note: FLOW3's implementation allows to specify a third argument for the
+       method getPropertyPath() in order to support Closures.
+       This part is not backported as it's not compatible with PHP < 5.3.
+
 Changes for 1.3.0 Beta 2a:
 ==========================
 included in TYPO3 4.5.0 Beta 2.
index da2bb6e..a4c36d8 100644 (file)
@@ -128,10 +128,19 @@ class Tx_Extbase_Configuration_BackendConfigurationManager extends Tx_Extbase_Co
        }
 
        /**
-        * We do not want to override anything in the backend.
+        * We need to set some default request handler if the framework configuration
+        * could not be loaded; to make sure Extbase also works in Backend modules
+        * in all contexts.
+        *
         * @return array
         */
        protected function getContextSpecificFrameworkConfiguration(array $frameworkConfiguration) {
+               if (!isset($frameworkConfiguration['mvc']['requestHandlers'])) {
+                       $frameworkConfiguration['mvc']['requestHandlers'] = array(
+                               'Tx_Extbase_MVC_Web_FrontendRequestHandler' => 'Tx_Extbase_MVC_Web_FrontendRequestHandler',
+                               'Tx_Extbase_MVC_Web_BackendRequestHandler' => 'Tx_Extbase_MVC_Web_BackendRequestHandler'
+                       );
+               }
                return $frameworkConfiguration;
        }
 }
index 0c28e70..20f9fbc 100644 (file)
@@ -42,7 +42,10 @@ interface Tx_Extbase_Configuration_ConfigurationManagerInterface extends t3lib_S
        public function setContentObject(tslib_cObj $contentObject = NULL);
 
        /**
+        * Get the content object
+        *
         * @return tslib_cObj
+        * @api (v4 only)
         */
        public function getContentObject();
 
index efec0ba..38896a5 100644 (file)
@@ -154,12 +154,13 @@ class Tx_Extbase_Core_Bootstrap {
        public function configureObjectManager() {
                $typoScriptSetup = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
                if (!is_array($typoScriptSetup['config.']['tx_extbase.']['objects.'])) {
-                       throw new RuntimeException('Object configuration was not found in "config.tx_extbase.objects". Please make sure, that the TypoScript setup is loaded', 1290623010);
+                       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, '.');
-                               Tx_Extbase_Object_Container_Container::getContainer()->registerImplementation($originalClassName, $classConfiguration['className']);
+                               $objectContainer->registerImplementation($originalClassName, $classConfiguration['className']);
                        }
                }
        }
index 3b2b45b..09601f8 100644 (file)
@@ -55,16 +55,6 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
        private $_isClone = FALSE;
 
        /**
-        * The generic constructor. If you want to implement your own __constructor() method in your Domain Object you have to call
-        * $this->initializeObject() in the first line of your constructor.
-        *
-        * @var array
-        */
-       public function __construct() {
-               $this->initializeObject();
-       }
-
-       /**
         * This is the magic __wakeup() method. It's invoked by the unserialize statement in the reconstitution process
         * of the object. If you want to implement your own __wakeup() method in your Domain Object you have to call
         * parent::__wakeup() first!
@@ -75,13 +65,7 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
                $this->initializeObject();
        }
 
-       /**
-        * A template method to initialize an object. This can be used to manipulate the object after
-        * reconstitution and before the clean state of it's properties is stored.
-        *
-        * @return void
-        */
-       protected function initializeObject() {
+       public function initializeObject() {
        }
 
        /**
index ddd32ab..2ad8e9a 100644 (file)
@@ -76,7 +76,7 @@ class Tx_Extbase_MVC_Dispatcher implements t3lib_Singleton {
        public function dispatch(Tx_Extbase_MVC_RequestInterface $request, Tx_Extbase_MVC_ResponseInterface $response) {
                $dispatchLoopCount = 0;
                while (!$request->isDispatched()) {
-                       if ($dispatchLoopCount++ > 99) throw new Tx_Extbase_MVC_Exception_InfiniteLoop('Could not ultimately dispatch the request after '  . $dispatchLoopCount . ' iterations.', 1217839467);
+                       if ($dispatchLoopCount++ > 99) throw new Tx_Extbase_MVC_Exception_InfiniteLoop('Could not ultimately dispatch the request after '  . $dispatchLoopCount . ' iterations. Most probably, a @dontvalidate annotation is missing on re-displaying a form with validation errors.', 1217839467);
                        $controller = $this->resolveController($request);
                        try {
                                $controller->processRequest($request, $response);
index 62e5d92..7dead80 100644 (file)
 ***************************************************************/
 
 /**
- * TYPO3 Dependency Injection container
- * Initial Usage:
- *  $container = Tx_Extbase_Object_Container_Container::getContainer()
+ * Internal TYPO3 Dependency Injection container
  *
  * @author Daniel Pötzinger
+ * @author Sebastian Kurfürst
  */
-class Tx_Extbase_Object_Container_Container {
-
-       /**
-        * PHP singleton impelementation
-        *
-        * @var Tx_Extbase_Object_Container_Container
-        */
-       static private $containerInstance = null;
+class Tx_Extbase_Object_Container_Container implements t3lib_Singleton {
 
        /**
         * internal cache for classinfos
@@ -58,23 +50,19 @@ class Tx_Extbase_Object_Container_Container {
 
        /**
         * reference to the classinfofactory, that analyses dependencys
-        * @var classInfoFactory
+        *
+        * @var Tx_Extbase_Object_Container_ClassInfoFactory
         */
        private $classInfoFactory;
 
        /**
         * holds references of singletons
+        *
         * @var array
         */
        private $singletonInstances = array();
 
        /**
-        * holds references of objects that still needs setter injection processing
-        * @var array
-        */
-       private $setterInjectionRegistry = array();
-
-       /**
         * Constructor is protected since container should
         * be a singleton.
         *
@@ -82,99 +70,100 @@ class Tx_Extbase_Object_Container_Container {
         * @param void
         * @return void
         */
-       protected function __construct() {
-               $this->classInfoFactory = new Tx_Extbase_Object_Container_ClassInfoFactory();
-               $this->cache = new Tx_Extbase_Object_Container_ClassInfoCache();
+       public function __construct() {
+               $this->classInfoFactory = t3lib_div::makeInstance('Tx_Extbase_Object_Container_ClassInfoFactory');
+               $this->cache = t3lib_div::makeInstance('Tx_Extbase_Object_Container_ClassInfoCache');
        }
 
        /**
-        * Returns an instance of the container singleton.
+        * Main method which should be used to get an instance of the wished class
+        * specified by $className.
         *
-        * @return Tx_Extbase_Object_Container_Container
+        * @param string $className
+        * @param array $givenConstructorArguments the list of constructor arguments as array
+        * @return object the built object
         */
-       static public function getContainer() {
-               if (self::$containerInstance === NULL) {
-                       self::$containerInstance = new Tx_Extbase_Object_Container_Container();
+       public function getInstance($className, $givenConstructorArguments = array()) {
+               $className = $this->getImplementationClassName($className);
+
+               if ($className === 'Tx_Extbase_Object_Container_Container') {
+                       return $this;
                }
-               return self::$containerInstance;
-       }
 
-       private function __clone() {}
+               if (isset($this->singletonInstances[$className])) {
+                       if (count($givenConstructorArguments) > 0) {
+                               throw new Tx_Extbase_Object_Exception('Object "' . $className . '" fetched from singleton cache, thus, explicit constructor arguments are not allowed.', 1292857934);
+                       }
+                       return $this->singletonInstances[$className];
+               }
+               $classInfo = $this->getClassInfo($className);
 
-       /**
-        * gets an instance of the given class
-        * @param string $className
-        * @return object
-        */
-       public function getInstance($className) {
-               $givenConstructorArguments=array();
-               if (func_num_args() > 1) {
-                               $givenConstructorArguments = func_get_args();
-                               array_shift($givenConstructorArguments);
+               $instance = $this->instanciateObject($className, $classInfo, $givenConstructorArguments);
+               $this->injectDependencies($instance, $classInfo);
+
+               if (method_exists($instance, 'initializeObject') && is_callable(array($instance, 'initializeObject'))) {
+                       $instance->initializeObject();
                }
-               $object = $this->getInstanceFromClassName($className, $givenConstructorArguments, 0);
-               $this->processSetterInjectionRegistry();
-               return $object;
-       }
 
-       /**
-        * register a classname that should be used if a dependency is required.
-        * e.g. used to define default class for a interface
-        *
-        * @param string $className
-        * @param string $alternativeClassName
-        */
-       public function registerImplementation($className,$alternativeClassName) {
-               $this->alternativeImplementation[$className] = $alternativeClassName;
+               return $instance;
        }
 
        /**
-        * gets an instance of the given class
+        * Instanciates an object, possibly setting the constructor dependencies.
+        * Additionally, directly registers all singletons in the singleton registry,
+        * such that circular references of singletons are correctly instanciated.
+        *
         * @param string $className
+        * @param Tx_Extbase_Object_Container_ClassInfo $classInfo
         * @param array $givenConstructorArguments
+        * @return object the new instance
         */
-       private function getInstanceFromClassName($className, array $givenConstructorArguments=array(), $level=0) {
-               if ($level > 30) {
-                       throw new Tx_Extbase_Object_Container_Exception_TooManyRecursionLevelsException('Too many recursion levels. This should never happen, please file a bug!' . $className, 1289386945);
-               }
-               if ($className === 'Tx_Extbase_Object_Container_Container') {
-                       return $this;
-               }
-               if (isset($this->singletonInstances[$className])) {
-                       return $this->singletonInstances[$className];
-               }
+       protected function instanciateObject($className, Tx_Extbase_Object_Container_ClassInfo $classInfo, array $givenConstructorArguments) {
+               $classIsSingleton = $this->isSingleton($className);
 
-               $className = $this->getClassName($className);
-
-               $classInfo = $this->getClassInfo($className);
+               if ($classIsSingleton && count($givenConstructorArguments) > 0) {
+                       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);
-               $instance = $this->newObject($className, $constructorArguments);
+               array_unshift($constructorArguments, $className);
+               $instance = call_user_func_array(array('t3lib_div', 'makeInstance'), $constructorArguments);
 
-               if ($level > 0 && !($instance instanceof t3lib_Singleton)) {
-                       throw new Tx_Extbase_Object_Exception_WrongScope('Object "' . $className . '" is of not of scope singleton, but only singleton instances can be injected into other classes.', 1289387047);
+               if ($classIsSingleton) {
+                       $this->singletonInstances[$className] = $instance;
                }
+               return $instance;
+       }
 
-               if ($classInfo->hasInjectMethods()) {
-                       $this->setterInjectionRegistry[]=array($instance, $classInfo->getInjectMethods(), $level);
-               }
+       /**
+        * Inject setter-dependencies into $instance
+        *
+        * @param object $instance
+        * @param Tx_Extbase_Object_Container_ClassInfo $classInfo
+        * @return void
+        */
+       protected function injectDependencies($instance, Tx_Extbase_Object_Container_ClassInfo $classInfo) {
+               if (!$classInfo->hasInjectMethods()) return;
 
-               if ($instance instanceof t3lib_Singleton) {
-                       $this->singletonInstances[$className] = $instance;
+               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);
+                       }
+                       $instance->$injectMethodName($instanceToInject);
                }
-               return $instance;
        }
 
        /**
-        * returns a object of the given type, called with the constructor arguments.
-        * For speed improvements reflection is avoided
+        * register a classname that should be used if a dependency is required.
+        * e.g. used to define default class for a interface
         *
         * @param string $className
-        * @param array $constructorArguments
+        * @param string $alternativeClassName
         */
-       private function newObject($className, array $constructorArguments) {
-               array_unshift($constructorArguments, $className);
-               return call_user_func_array(array('t3lib_div', 'makeInstance'), $constructorArguments);
+       public function registerImplementation($className,$alternativeClassName) {
+               $this->alternativeImplementation[$className] = $alternativeClassName;
        }
 
        /**
@@ -189,12 +178,23 @@ class Tx_Extbase_Object_Container_Container {
                foreach ($constructorArgumentInformation as $argumentInformation) {
                        $argumentName = $argumentInformation['name'];
 
-                       if (count($givenConstructorArguments)) {
-                               // we have a value to set
-                               $parameter = array_shift($givenConstructorArguments);
-                       } elseif (isset($argumentInformation['dependency'])) {
+                       // We have a dependency we can automatically wire,
+                       // AND the class has NOT been explicitely passed in
+                       if (isset($argumentInformation['dependency']) && !(count($givenConstructorArguments) && is_a($givenConstructorArguments[0], $argumentInformation['dependency']))) {
                                // Inject parameter
-                               $parameter = $this->getInstanceFromClassName($argumentInformation['dependency'], array(), $level+1);
+                               if (!$this->isSingleton($argumentInformation['dependency'])) {
+                                       throw new Tx_Extbase_Object_Exception_WrongScope('Constructor dependencies can only be singletons', 1292860858);
+                               }
+                               $parameter = $this->getInstance($argumentInformation['dependency']);
+                       } elseif (count($givenConstructorArguments)) {
+                               // EITHER:
+                               // No dependency injectable anymore, but we still have
+                               // an explicit constructor argument
+                               // OR:
+                               // the passed constructor argument matches the type for the dependency
+                               // injection, and thus the passed constructor takes precendence over
+                               // autowiring.
+                               $parameter = array_shift($givenConstructorArguments);
                        } elseif (isset($argumentInformation['defaultValue'])) {
                                // no value to set anymore, we take default value
                                $parameter = $argumentInformation['defaultValue'];
@@ -207,13 +207,20 @@ class Tx_Extbase_Object_Container_Container {
        }
 
        /**
+        * @param string/object $object
+        * @return boolean TRUE if the object is a singleton, FALSE if it is a prototype.
+        */
+       protected function isSingleton($object) {
+               return in_array('t3lib_Singleton', class_implements($object));
+       }
+       /**
         * Returns the class name for a new instance, taking into account the
         * class-extension API.
         *
         * @param       string          Base class name to evaluate
         * @return      string          Final class name to instantiate with "new [classname]"
         */
-       protected function getClassName($className) {
+       protected function getImplementationClassName($className) {
                if (isset($this->alternativeImplementation[$className])) {
                        $className = $this->alternativeImplementation[$className];
                }
@@ -226,19 +233,6 @@ class Tx_Extbase_Object_Container_Container {
        }
 
        /**
-        * do inject dependecies to object $instance using the given methods
-        *
-        * @param object $instance
-        * @param array $setterMethods
-        * @param integer $level
-        */
-       private function handleSetterInjection($instance, array $setterMethods, $level) {
-               foreach ($setterMethods as $method => $dependency) {
-                       $instance->$method($this->getInstanceFromClassName($dependency, array(), $level+1));
-               }
-       }
-
-       /**
         * Gets Classinfos for the className - using the cache and the factory
         *
         * @param string $className
@@ -252,20 +246,4 @@ class Tx_Extbase_Object_Container_Container {
                }
                return $this->cache->get($className);
        }
-
-       /**
-        * does setter injection based on the data in $this->setterInjectionRegistry
-        * Its done as long till no setters are left
-        *
-        * @return void
-        */
-       private function processSetterInjectionRegistry() {
-               while (count($this->setterInjectionRegistry)>0) {
-                       $currentSetterData = $this->setterInjectionRegistry;
-                       $this->setterInjectionRegistry = array();
-                       foreach ($currentSetterData as $setterInjectionData) {
-                               $this->handleSetterInjection($setterInjectionData[0], $setterInjectionData[1], $setterInjectionData[2]);
-                       }
-               }
-       }
 }
\ No newline at end of file
index 12916a7..85ae014 100644 (file)
@@ -42,7 +42,7 @@ class Tx_Extbase_Object_ObjectManager implements Tx_Extbase_Object_ObjectManager
         * Constructs a new Object Manager
         */
        public function __construct() {
-               $this->objectContainer = Tx_Extbase_Object_Container_Container::getContainer();
+               $this->objectContainer = t3lib_div::makeInstance('Tx_Extbase_Object_Container_Container'); // Singleton
        }
 
        /**
@@ -60,7 +60,8 @@ class Tx_Extbase_Object_ObjectManager implements Tx_Extbase_Object_ObjectManager
         */
        public function get($objectName) {
                $arguments = func_get_args();
-               return call_user_func_array(array($this->objectContainer, 'getInstance'), $arguments);
+               array_shift($arguments);
+               return $this->objectContainer->getInstance($objectName, $arguments);
        }
 
        /**
@@ -78,7 +79,8 @@ class Tx_Extbase_Object_ObjectManager implements Tx_Extbase_Object_ObjectManager
         */
        public function create($objectName) {
                $arguments = func_get_args();
-               $instance = call_user_func_array(array($this->objectContainer, 'getInstance'), $arguments);
+               array_shift($arguments);
+               $instance = $this->objectContainer->getInstance($objectName, $arguments);
 
                if ($instance instanceof t3lib_Singleton) {
                        throw new Tx_Extbase_Object_Exception_WrongScope('Object "' . $objectName . '" is of not of scope prototype, but only prototype is supported by create()', 1265203124);
index edb144c..f942e31 100644 (file)
@@ -104,15 +104,6 @@ class Tx_Extbase_Persistence_Repository implements Tx_Extbase_Persistence_Reposi
                } else {
                        $this->objectManager = $objectManager;
                }
-               $this->initializeObject();
-       }
-
-       /**
-        * Life cycle method. You can override this in your own repository
-        *
-        * @return void
-        */
-       public function initializeObject() {
        }
 
        /**
diff --git a/typo3/sysext/extbase/Classes/Reflection/Exception/PropertyNotAccessibleException.php b/typo3/sysext/extbase/Classes/Reflection/Exception/PropertyNotAccessibleException.php
new file mode 100644 (file)
index 0000000..52c6d63
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This class is a backport of the corresponding class of FLOW3.
+*  All credits go to the v5 team.
+*
+*  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!
+***************************************************************/
+
+/**
+ * An "Property not accessible" exception
+ *
+ * @version $Id: InvalidPropertyType.php 1729 2009-11-25 21:37:20Z stucki $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ */
+class Tx_Extbase_Reflection_Exception_PropertyNotAccessibleException extends Tx_Extbase_Reflection_Exception {
+}
+
+?>
\ No newline at end of file
index da24058..84a3ebf 100644 (file)
@@ -76,7 +76,7 @@ class Tx_Extbase_Reflection_ObjectAccess {
                        }
                }
 
-               throw new RuntimeException('The property "' . $propertyName . '" on the subject was not accessible.', 1263391473);
+               throw new Tx_Extbase_Reflection_Exception_PropertyNotAccessibleException('The property "' . $propertyName . '" on the subject was not accessible.', 1263391473);
        }
 
        /**
@@ -93,8 +93,8 @@ class Tx_Extbase_Reflection_ObjectAccess {
                foreach ($propertyPathSegments as $pathSegment) {
                        if (is_object($subject) && self::isPropertyGettable($subject, $pathSegment)) {
                                $subject = self::getProperty($subject, $pathSegment);
-                       } elseif (is_array($subject) && array_key_exists($pathSegment, $subject)) {
-                               $subject = self::getProperty($subject, $pathSegment);
+                       } elseif ((is_array($subject) || $subject instanceof ArrayAccess) && isset($subject[$pathSegment])) {
+                               $subject = $subject[$pathSegment];
                        } else {
                                return NULL;
                        }
@@ -117,7 +117,11 @@ class Tx_Extbase_Reflection_ObjectAccess {
         * @return void
         * @throws Tx_Extbase_Reflection_Exception if property was could not be set
         */
-       static public function setProperty($object, $propertyName, $propertyValue) {
+       static public function setProperty(&$object, $propertyName, $propertyValue) {
+               if (is_array($object)) {
+                       $object[$propertyName] = $propertyValue;
+                       return TRUE;
+               }
                if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1237301368);
                if (!is_string($propertyName)) throw new InvalidArgumentException('Given property name is not of type string.', 1231178878);
 
@@ -142,17 +146,71 @@ class Tx_Extbase_Reflection_ObjectAccess {
         *
         * @param object $object Object to receive property names for
         * @return array Array of all declared property names
-        * @todo What to do with ArrayAccess
+        * @deprecated since Extbase 1.3.0; will be removed in Extbase 1.5.0. Please use getGettablePropertyNames() instead
         */
        static public function getAccessiblePropertyNames($object) {
+               t3lib_div::logDeprecatedFunction();
+               return self::getGettablePropertyNames($object);
+       }
+
+       /**
+        * Returns an array of properties which can be get with the getProperty()
+        * method.
+        * Includes the following properties:
+        * - which can be get through a public getter method.
+        * - public properties which can be directly get.
+        *
+        * @param object $object Object to receive property names for
+        * @return array Array of all gettable property names
+        * @author Sebastian Kurfürst <sebastian@typo3.org>
+        * @author Karsten Dambekalns <karsten@typo3.org>
+        */
+       static public function getGettablePropertyNames($object) {
                if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1237301369);
-               $declaredPropertyNames = array_keys(get_class_vars(get_class($object)));
+               if ($object instanceof stdClass) {
+                       $declaredPropertyNames = array_keys(get_object_vars($object));
+               } else {
+                       $declaredPropertyNames = array_keys(get_class_vars(get_class($object)));
+               }
+
+               foreach (get_class_methods($object) as $methodName) {
+                       if (is_callable(array($object, $methodName))) {
+                               if (substr($methodName, 0, 2) === 'is') {
+                                       $declaredPropertyNames[] = strtolower(substr($methodName, 2, 1)) . (substr($methodName, 3));
+                               }
+                               if (substr($methodName, 0, 3) === 'get') {
+                                       $declaredPropertyNames[] = strtolower(substr($methodName, 3, 1)) . (substr($methodName, 4));
+                               }
+                       }
+               }
+
+               $propertyNames = array_unique($declaredPropertyNames);
+               sort($propertyNames);
+               return $propertyNames;
+       }
+
+       /**
+        * Returns an array of properties which can be set with the setProperty()
+        * method.
+        * Includes the following properties:
+        * - which can be set through a public setter method.
+        * - public properties which can be directly set.
+        *
+        * @param object $object Object to receive property names for
+        * @return array Array of all settable property names
+        * @author Karsten Dambekalns <karsten@typo3.org>
+        */
+       static public function getSettablePropertyNames($object) {
+               if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1264022994);
+               if ($object instanceof stdClass) {
+                       $declaredPropertyNames = array_keys(get_object_vars($object));
+               } else {
+                       $declaredPropertyNames = array_keys(get_class_vars(get_class($object)));
+               }
 
                foreach (get_class_methods($object) as $methodName) {
-                       if (substr($methodName, 0, 3) === 'get') {
-                               $propertyName = substr($methodName, 3);
-                               $propertyName[0] = strtolower($propertyName[0]);
-                               $declaredPropertyNames[] = $propertyName;
+                       if (substr($methodName, 0, 3) === 'set' && is_callable(array($object, $methodName))) {
+                               $declaredPropertyNames[] = strtolower(substr($methodName, 3, 1)) . (substr($methodName, 4));
                        }
                }
 
@@ -167,17 +225,50 @@ class Tx_Extbase_Reflection_ObjectAccess {
         *
         * @param object $object Object to get all properties from.
         * @return array Associative array of all properties.
-        * @todo What to do with ArrayAccess
+        * @deprecated since Extbase 1.3.0; will be removed in Extbase 1.5.0. Please use getGettableProperties() instead
         */
        static public function getAccessibleProperties($object) {
+               t3lib_div::logDeprecatedFunction();
+               return self::getGettableProperties($object);
+       }
+
+       /**
+        * Get all properties (names and their current values) of the current
+        * $object that are accessible through this class.
+        *
+        * @param object $object Object to get all properties from.
+        * @return array Associative array of all properties.
+        * @author Sebastian Kurfürst <sebastian@typo3.org>
+        * @todo What to do with ArrayAccess
+        */
+       static public function getGettableProperties($object) {
                if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1237301370);
                $properties = array();
-               foreach (self::getAccessiblePropertyNames($object) as $propertyName) {
+               foreach (self::getGettablePropertyNames($object) as $propertyName) {
                        $properties[$propertyName] = self::getProperty($object, $propertyName);
                }
                return $properties;
        }
 
+
+       /**
+        * Tells if the value of the specified property can be set by this Object Accessor.
+        *
+        * @param object $object Object containting the property
+        * @param string $propertyName Name of the property to check
+        * @return boolean
+        * @author Robert Lemke <robert@typo3.org>
+        */
+       static public function isPropertySettable($object, $propertyName) {
+               if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1259828920);
+               if ($object instanceof stdClass && array_search($propertyName, array_keys(get_object_vars($object))) !== FALSE) {
+                       return TRUE;
+               } elseif (array_search($propertyName, array_keys(get_class_vars(get_class($object)))) !== FALSE) {
+                       return TRUE;
+               }
+               return is_callable(array($object, self::buildSetterMethodName($propertyName)));
+       }
+
        /**
         * Tells if the value of the specified property can be retrieved by this Object Accessor.
         *
@@ -187,7 +278,11 @@ class Tx_Extbase_Reflection_ObjectAccess {
         */
        static public function isPropertyGettable($object, $propertyName) {
                if (!is_object($object)) throw new InvalidArgumentException('$object must be an object, ' . gettype($object). ' given.', 1259828921);
-               if (array_search($propertyName, array_keys(get_class_vars(get_class($object)))) !== FALSE) return TRUE;
+               if ($object instanceof stdClass && array_search($propertyName, array_keys(get_object_vars($object))) !== FALSE) {
+                       return TRUE;
+               } elseif (array_search($propertyName, array_keys(get_class_vars(get_class($object)))) !== FALSE) {
+                       return TRUE;
+               }
                if (is_callable(array($object, 'get' . ucfirst($propertyName)))) return TRUE;
                return is_callable(array($object, 'is' . ucfirst($propertyName)));
        }
@@ -205,4 +300,4 @@ class Tx_Extbase_Reflection_ObjectAccess {
 }
 
 
-?>
\ No newline at end of file
+?>
index a64a98f..058f6ab 100644 (file)
@@ -58,7 +58,18 @@ class Tx_Extbase_MVC_Controller_AbstractController_testcase extends Tx_Extbase_T
 
                $mockResponse = $this->getMock('Tx_Extbase_MVC_Web_Response');
 
-               $controller = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Controller_AbstractController'), array('initializeArguments', 'initializeControllerArgumentsBaseValidators', 'mapRequestArgumentsToControllerArguments'), array(), '', FALSE);
+               $mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManagerInterface');
+               $mockObjectManager->expects($this->once())->method('create')
+                       ->with('Tx_Extbase_MVC_Web_Routing_UriBuilder')
+                       ->will($this->returnValue($this->getMock('Tx_Extbase_MVC_Web_Routing_UriBuilder')));
+
+               $controller = $this->getAccessibleMock(
+                       'Tx_Extbase_MVC_Controller_AbstractController',
+                       array('initializeArguments', 'initializeControllerArgumentsBaseValidators', 'mapRequestArgumentsToControllerArguments', 'buildControllerContext'),
+                       array(), '', FALSE
+               );
+               $controller->_set('objectManager', $mockObjectManager);
+
                $controller->processRequest($mockRequest, $mockResponse);
        }
 
@@ -196,7 +207,11 @@ class Tx_Extbase_MVC_Controller_AbstractController_testcase extends Tx_Extbase_T
         * @test
         */
        public function mapRequestArgumentsToControllerArgumentsPreparesInformationAndValidatorsAndMapsAndValidates() {
-               $mockValidator = new Tx_Extbase_MVC_Controller_ArgumentsValidator(); // FIXME see original FLOW3 code
+               $mockValidator = $this->getMock('Tx_Extbase_MVC_Controller_ArgumentsValidator');
+               $mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManagerInterface');
+               $mockObjectManager->expects($this->once())->method('create')
+                       ->with('Tx_Extbase_MVC_Controller_ArgumentsValidator')
+                       ->will($this->returnValue($mockValidator));
 
                $mockArgumentFoo = $this->getMock('Tx_Extbase_MVC_Controller_Argument', array(), array('foo'), '', FALSE);
                $mockArgumentFoo->expects($this->any())->method('getName')->will($this->returnValue('foo'));
@@ -218,7 +233,10 @@ class Tx_Extbase_MVC_Controller_AbstractController_testcase extends Tx_Extbase_T
                        ->will($this->returnValue(TRUE));
                $mockPropertyMapper->expects($this->once())->method('getMappingResults')->will($this->returnValue($mockMappingResults));
 
-               $controller = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Controller_AbstractController'), array('dummy'), array(), '', FALSE);
+               $controller = $this->getAccessibleMock(
+                       'Tx_Extbase_MVC_Controller_AbstractController',
+                       array('dummy'), array(), '', FALSE
+               );
 
                $controller->_set('arguments', $mockArguments);
                $controller->_set('request', $mockRequest);
@@ -228,8 +246,6 @@ class Tx_Extbase_MVC_Controller_AbstractController_testcase extends Tx_Extbase_T
                $controller->_call('mapRequestArgumentsToControllerArguments');
 
                $this->assertSame($mockMappingResults, $controller->_get('argumentsMappingResults'));
-               // $this->assertTrue(in_array('Tx_Extbase_Validation_Validator_ObjectValidatorInterface', class_implements($controller->_get('argumentsMappingResults'))));
        }
-
 }
 ?>
\ No newline at end of file
index 804bd9b..ba638cd 100644 (file)
@@ -37,7 +37,7 @@ class Tx_Extbase_Object_Container_ContainerTest extends Tx_Extbase_Tests_Unit_Ba
        private $container;
 
        public function setUp() {
-               $this->container = Tx_Extbase_Object_Container_Container::getContainer();
+               $this->container = new Tx_Extbase_Object_Container_Container();
 
        }
 
@@ -81,7 +81,17 @@ class Tx_Extbase_Object_Container_ContainerTest extends Tx_Extbase_Tests_Unit_Ba
         * @expectedException Tx_Extbase_Object_Exception
         */
        public function getInstanceThrowsExceptionWhenTryingToInstanciateASingletonWithConstructorParameters() {
-               $this->container->getInstance('t3lib_object_tests_amixed_array_singleton');
+               $this->container->getInstance('t3lib_object_tests_amixed_array_singleton', array('somevalue'));
+       }
+
+       /**
+        * @test
+        */
+       public function getInstanceReturnsInstanceOfAClassWithConstructorInjectionAndDefaultConstructorParameters() {
+               $object = $this->container->getInstance('t3lib_object_tests_amixed_array');
+               $this->assertType('t3lib_object_tests_b', $object->b);
+               $this->assertType('t3lib_object_tests_c', $object->c);
+               $this->assertEquals(array('some' => 'default'), $object->myvalue);
        }
 
        /**
@@ -90,7 +100,7 @@ class Tx_Extbase_Object_Container_ContainerTest extends Tx_Extbase_Tests_Unit_Ba
        public function getInstancePassesGivenParameterToTheNewObject() {
                $mockObject = $this->getMock('t3lib_object_tests_c');
 
-               $object = $this->container->getInstance('t3lib_object_tests_a', $mockObject);
+               $object = $this->container->getInstance('t3lib_object_tests_a', array($mockObject));
                $this->assertType('t3lib_object_tests_a', $object);
                $this->assertSame($mockObject, $object->c);
        }
@@ -119,9 +129,17 @@ class Tx_Extbase_Object_Container_ContainerTest extends Tx_Extbase_Tests_Unit_Ba
         * @test
         * @expectedException Tx_Extbase_Object_Exception
         */
-       public function getInstanceThrowsExceptionIfObjectContainsCyclicDependency() {
+       public function getInstanceThrowsExceptionIfObjectContainsCyclicDependencyAndIsNoSingleton() {
                $this->container->getInstance('t3lib_object_tests_cyclic1');
+       }
+
 
+       /**
+        * @test
+        * @expectedException Tx_Extbase_Object_Exception
+        */
+       public function getInstanceThrowsExceptionIfObjectContainsCyclicDependency() {
+               $this->container->getInstance('t3lib_object_tests_cyclic1');
        }
 
        /**
@@ -153,7 +171,7 @@ class Tx_Extbase_Object_Container_ContainerTest extends Tx_Extbase_Tests_Unit_Ba
        /**
         * @test
         */
-       public function test_canBuildCyclicDependenciesWithSetter() {
+       public function test_canBuildCyclicDependenciesOfSingletonsWithSetter() {
                $object = $this->container->getInstance('t3lib_object_tests_resolveablecyclic1');
                $this->assertType('t3lib_object_tests_resolveablecyclic1', $object);
                $this->assertType('t3lib_object_tests_resolveablecyclic1', $object->o2->o3->o1);
index fce57cf..8a05096 100644 (file)
@@ -44,10 +44,10 @@ class t3lib_object_tests_amixed_array_singleton implements t3lib_Singleton {
        public $b;
        public $c;
        public $myvalue;
-       public function __construct(t3lib_object_tests_b $b, t3lib_object_tests_c $c, array $myvalue=array('some' => 'default')) {
+       public function __construct(t3lib_object_tests_b $b, t3lib_object_tests_c $c, $someDefaultParameter = array('some' => 'default')) {
                $this->b = $b;
                $this->c = $c;
-               $this->myvalue = $myvalue;
+               $this->myvalue = $someDefaultParameter;
        }
 }
 
@@ -78,7 +78,7 @@ class t3lib_object_tests_c implements t3lib_Singleton {
 class t3lib_object_tests_b_child extends t3lib_object_tests_b {
 }
 
-interface t3lib_object_tests_someinterface {
+interface t3lib_object_tests_someinterface extends t3lib_Singleton {
 
 }
 
@@ -86,7 +86,7 @@ interface t3lib_object_tests_someinterface {
  * class which implements a Interface
  *
  */
-class t3lib_object_tests_someimplementation implements t3lib_object_tests_someinterface, t3lib_Singleton {
+class t3lib_object_tests_someimplementation implements t3lib_object_tests_someinterface {
 }
 
 /**
diff --git a/typo3/sysext/extbase/Tests/Unit/Reflection/Fixture/ArrayAccessClass.php b/typo3/sysext/extbase/Tests/Unit/Reflection/Fixture/ArrayAccessClass.php
new file mode 100644 (file)
index 0000000..1c097be
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  All rights reserved
+*
+*  This class is a backport of the corresponding class of FLOW3.
+*  All credits go to the v5 team.
+*
+*  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!
+***************************************************************/
+
+/**
+ * ArrayAccess class for the Reflection tests
+ *
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ */
+class Tx_Extbase_Tests_Unit_Reflection_Fixture_ArrayAccessClass implements ArrayAccess {
+
+       protected $array = array();
+
+       public function __construct(array $array) {
+               $this->array = $array;
+       }
+
+       public function offsetExists($offset) {
+               return array_key_exists($offset, $this->array);
+       }
+
+       public function offsetGet($offset) {
+               return $this->array[$offset];
+       }
+
+       public function offsetSet($offset, $value) {
+               $this->array[$offset] = $value;
+       }
+
+       public function offsetUnset($offset) {
+               unset($this->array[$offset]);
+       }
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Tests/Unit/Reflection/Fixture/DummyClassWithGettersAndSetters.php b/typo3/sysext/extbase/Tests/Unit/Reflection/Fixture/DummyClassWithGettersAndSetters.php
new file mode 100644 (file)
index 0000000..9099293
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  All rights reserved
+*
+*  This class is a backport of the corresponding class of FLOW3.
+*  All credits go to the v5 team.
+*
+*  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!
+***************************************************************/
+
+/**
+ * Fixture class with getters and setters
+ *
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ */
+class Tx_Extbase_Tests_Unit_Reflection_Fixture_DummyClassWithGettersAndSetters {
+
+       protected $property;
+       protected $anotherProperty;
+       protected $property2;
+       protected $booleanProperty = TRUE;
+
+       protected $protectedProperty;
+
+       protected $unexposedProperty;
+
+       public $publicProperty;
+       public $publicProperty2 = 42;
+
+       public function setProperty($property) {
+               $this->property = $property;
+       }
+
+       public function getProperty() {
+               return $this->property;
+       }
+
+       public function setAnotherProperty($anotherProperty) {
+               $this->anotherProperty = $anotherProperty;
+       }
+
+       public function getAnotherProperty() {
+               return $this->anotherProperty;
+       }
+
+       public function getProperty2() {
+               return $this->property2;
+       }
+       public function setProperty2($property2) {
+               $this->property2 = $property2;
+       }
+
+       protected function getProtectedProperty() {
+               return '42';
+       }
+
+       protected function setProtectedProperty($value) {
+               $this->protectedProperty = $value;
+       }
+
+       public function isBooleanProperty() {
+               return 'method called ' . $this->booleanProperty;
+       }
+
+       protected function getPrivateProperty() {
+               return '21';
+       }
+
+       public function setWriteOnlyMagicProperty($value) {
+       }
+}
+
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Tests/Unit/Reflection/ObjectAccessTest.php b/typo3/sysext/extbase/Tests/Unit/Reflection/ObjectAccessTest.php
new file mode 100644 (file)
index 0000000..ab3a40e
--- /dev/null
@@ -0,0 +1,315 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  All rights reserved
+*
+*  This class is a backport of the corresponding class of FLOW3.
+*  All credits go to the v5 team.
+*
+*  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!
+***************************************************************/
+
+require_once('Fixture/DummyClassWithGettersAndSetters.php');
+require_once('Fixture/ArrayAccessClass.php');
+
+class Tx_Extbase_Tests_Unit_Reflection_ObjectAccessTest extends Tx_Extbase_Tests_Unit_BaseTestCase {
+
+       protected $dummyObject;
+
+       public function setUp() {
+               $this->dummyObject = new Tx_Extbase_Tests_Unit_Reflection_Fixture_DummyClassWithGettersAndSetters();
+               $this->dummyObject->setProperty('string1');
+               $this->dummyObject->setAnotherProperty(42);
+               $this->dummyObject->shouldNotBePickedUp = TRUE;
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyReturnsExpectedValueForGetterProperty() {
+               $property = Tx_Extbase_Reflection_ObjectAccess::getProperty($this->dummyObject, 'property');
+               $this->assertEquals($property, 'string1');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyReturnsExpectedValueForPublicProperty() {
+               $property = Tx_Extbase_Reflection_ObjectAccess::getProperty($this->dummyObject, 'publicProperty2');
+               $this->assertEquals($property, 42, 'A property of a given object was not returned correctly.');
+       }
+
+       /**
+        * @test
+        * @expectedException Tx_Extbase_Reflection_Exception_PropertyNotAccessibleException
+        */
+       public function getPropertyReturnsThrowsExceptionIfPropertyDoesNotExist() {
+               Tx_Extbase_Reflection_ObjectAccess::getProperty($this->dummyObject, 'notExistingProperty');
+       }
+
+       /**
+        * @test
+        * @expectedException Tx_Extbase_Reflection_Exception_PropertyNotAccessibleException
+        */
+       public function getPropertyReturnsThrowsExceptionIfArrayKeyDoesNotExist() {
+               Tx_Extbase_Reflection_ObjectAccess::getProperty(array(), 'notExistingProperty');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyTriesToCallABooleanGetterMethodIfItExists() {
+               $property = Tx_Extbase_Reflection_ObjectAccess::getProperty($this->dummyObject, 'booleanProperty');
+               $this->assertSame('method called 1', $property);
+       }
+
+       /**
+        * @test
+        * @expectedException InvalidArgumentException
+        */
+       public function getPropertyThrowsExceptionIfThePropertyNameIsNotAString() {
+               Tx_Extbase_Reflection_ObjectAccess::getProperty($this->dummyObject, new ArrayObject());
+       }
+
+       /**
+        * @test
+        * @expectedException InvalidArgumentException
+        */
+       public function setPropertyThrowsExceptionIfThePropertyNameIsNotAString() {
+               Tx_Extbase_Reflection_ObjectAccess::setProperty($this->dummyObject, new ArrayObject(), 42);
+       }
+
+       /**
+        * @test
+        */
+       public function setPropertyReturnsFalseIfPropertyIsNotAccessible() {
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::setProperty($this->dummyObject, 'protectedProperty', 42));
+       }
+
+       /**
+        * @test
+        */
+       public function setPropertyCallsASetterMethodToSetThePropertyValueIfOneIsAvailable() {
+               Tx_Extbase_Reflection_ObjectAccess::setProperty($this->dummyObject, 'property', 4242);
+               $this->assertEquals($this->dummyObject->getProperty(), 4242, 'setProperty does not work with setter.');
+       }
+
+       /**
+        * @test
+        */
+       public function setPropertyWorksWithPublicProperty() {
+               Tx_Extbase_Reflection_ObjectAccess::setProperty($this->dummyObject, 'publicProperty', 4242);
+               $this->assertEquals($this->dummyObject->publicProperty, 4242, 'setProperty does not work with public property.');
+       }
+
+       /**
+        * @test
+        */
+       public function setPropertyCanDirectlySetValuesInAnArrayObjectOrArray() {
+               $arrayObject = new ArrayObject();
+               $array = array();
+
+               Tx_Extbase_Reflection_ObjectAccess::setProperty($arrayObject, 'publicProperty', 4242);
+               Tx_Extbase_Reflection_ObjectAccess::setProperty($array, 'key', 'value');
+
+               $this->assertEquals(4242, $arrayObject['publicProperty']);
+               $this->assertEquals('value', $array['key']);
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyCanAccessPropertiesOfAnArrayObject() {
+               $arrayObject = new ArrayObject(array('key' => 'value'));
+               $expected = Tx_Extbase_Reflection_ObjectAccess::getProperty($arrayObject, 'key');
+               $this->assertEquals($expected, 'value', 'getProperty does not work with ArrayObject property.');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyCanAccessPropertiesOfAnObjectImplementingArrayAccess() {
+               $arrayAccessInstance = new Tx_Extbase_Tests_Unit_Reflection_Fixture_ArrayAccessClass(array('key' => 'value'));
+               $expected = Tx_Extbase_Reflection_ObjectAccess::getProperty($arrayAccessInstance, 'key');
+               $this->assertEquals($expected, 'value', 'getPropertyPath does not work with Array Access property.');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyCanAccessPropertiesOfAnArray() {
+               $array = array('key' => 'value');
+               $expected = Tx_Extbase_Reflection_ObjectAccess::getProperty($array, 'key');
+               $this->assertEquals($expected, 'value', 'getProperty does not work with Array property.');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyPathCanAccessPropertiesOfAnArray() {
+               $array = array('parent' => array('key' => 'value'));
+               $expected = Tx_Extbase_Reflection_ObjectAccess::getPropertyPath($array, 'parent.key');
+               $this->assertEquals($expected, 'value', 'getPropertyPath does not work with Array property.');
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyPathCanAccessPropertiesOfAnObjectImplementingArrayAccess() {
+               $array = array('parent' => new ArrayObject(array('key' => 'value')));
+               $expected = Tx_Extbase_Reflection_ObjectAccess::getPropertyPath($array, 'parent.key');
+               $this->assertEquals($expected, 'value', 'getPropertyPath does not work with Array Access property.');
+       }
+
+       /**
+        * @test
+        */
+       public function getGettablePropertyNamesReturnsAllPropertiesWhichAreAvailable() {
+               $gettablePropertyNames = Tx_Extbase_Reflection_ObjectAccess::getGettablePropertyNames($this->dummyObject);
+               $expectedPropertyNames = array('anotherProperty', 'booleanProperty', 'property', 'property2', 'publicProperty', 'publicProperty2');
+               $this->assertEquals($gettablePropertyNames, $expectedPropertyNames, 'getGettablePropertyNames returns not all gettable properties.');
+       }
+
+       /**
+        * @test
+        */
+       public function getSettablePropertyNamesReturnsAllPropertiesWhichAreAvailable() {
+               $settablePropertyNames = Tx_Extbase_Reflection_ObjectAccess::getSettablePropertyNames($this->dummyObject);
+               $expectedPropertyNames = array('anotherProperty', 'property', 'property2', 'publicProperty', 'publicProperty2', 'writeOnlyMagicProperty');
+               $this->assertEquals($settablePropertyNames, $expectedPropertyNames, 'getSettablePropertyNames returns not all settable properties.');
+       }
+
+       /**
+        * @test
+        */
+       public function getSettablePropertyNamesReturnsPropertyNamesOfStdClass() {
+               $stdClassObject = new stdClass();
+               $stdClassObject->property = 'string1';
+               $stdClassObject->property2 = NULL;
+
+               $settablePropertyNames = Tx_Extbase_Reflection_ObjectAccess::getSettablePropertyNames($stdClassObject);
+               $expectedPropertyNames = array('property', 'property2');
+               $this->assertEquals($expectedPropertyNames, $settablePropertyNames, 'getSettablePropertyNames returns not all settable properties.');
+       }
+
+       /**
+        * @test
+        */
+       public function getGettablePropertiesReturnsTheCorrectValuesForAllProperties() {
+               $allProperties = Tx_Extbase_Reflection_ObjectAccess::getGettableProperties($this->dummyObject);
+               $expectedProperties = array(
+                       'anotherProperty' => 42,
+                       'booleanProperty' => TRUE,
+                       'property' => 'string1',
+                       'property2' => NULL,
+                       'publicProperty' => NULL,
+                       'publicProperty2' => 42);
+               $this->assertEquals($allProperties, $expectedProperties, 'expectedProperties did not return the right values for the properties.');
+       }
+
+       /**
+        * @test
+        */
+       public function getGettablePropertiesReturnsPropertiesOfStdClass() {
+               $stdClassObject = new stdClass();
+               $stdClassObject->property = 'string1';
+               $stdClassObject->property2 = NULL;
+               $stdClassObject->publicProperty2 = 42;
+               $allProperties = Tx_Extbase_Reflection_ObjectAccess::getGettableProperties($stdClassObject);
+               $expectedProperties = array(
+                       'property' => 'string1',
+                       'property2' => NULL,
+                       'publicProperty2' => 42);
+               $this->assertEquals($expectedProperties, $allProperties, 'expectedProperties did not return the right values for the properties.');
+       }
+
+       /**
+        * @test
+        */
+       public function isPropertySettableTellsIfAPropertyCanBeSet() {
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($this->dummyObject, 'writeOnlyMagicProperty'));
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($this->dummyObject, 'publicProperty'));
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($this->dummyObject, 'property'));
+
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($this->dummyObject, 'privateProperty'));
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($this->dummyObject, 'shouldNotBePickedUp'));
+       }
+
+       /**
+        * @test
+        */
+       public function isPropertySettableWorksOnStdClass() {
+               $stdClassObject = new stdClass();
+               $stdClassObject->property = 'foo';
+
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($stdClassObject, 'property'));
+
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertySettable($stdClassObject, 'undefinedProperty'));
+       }
+
+       /**
+        * @test
+        */
+       public function isPropertyGettableTellsIfAPropertyCanBeRetrieved() {
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'publicProperty'));
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'property'));
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'booleanProperty'));
+
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'privateProperty'));
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'writeOnlyMagicProperty'));
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($this->dummyObject, 'shouldNotBePickedUp'));
+       }
+
+       /**
+        * @test
+        */
+       public function isPropertyGettableWorksOnStdClass() {
+               $stdClassObject = new stdClass();
+               $stdClassObject->property = 'foo';
+
+               $this->assertTrue(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($stdClassObject, 'property'));
+
+               $this->assertFalse(Tx_Extbase_Reflection_ObjectAccess::isPropertyGettable($stdClassObject, 'undefinedProperty'));
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyPathCanRecursivelyGetPropertiesOfAnObject() {
+               $alternativeObject = new Tx_Extbase_Tests_Unit_Reflection_Fixture_DummyClassWithGettersAndSetters();
+               $alternativeObject->setProperty('test');
+               $this->dummyObject->setProperty2($alternativeObject);
+
+               $expected = 'test';
+               $actual = Tx_Extbase_Reflection_ObjectAccess::getPropertyPath($this->dummyObject, 'property2.property');
+               $this->assertEquals($expected, $actual);
+       }
+
+       /**
+        * @test
+        */
+       public function getPropertyPathReturnsNullForNonExistingPropertyPath() {
+               $alternativeObject = new Tx_Extbase_Tests_Unit_Reflection_Fixture_DummyClassWithGettersAndSetters();
+               $alternativeObject->setProperty(new stdClass());
+               $this->dummyObject->setProperty2($alternativeObject);
+
+               $this->assertNull(Tx_Extbase_Reflection_ObjectAccess::getPropertyPath($this->dummyObject, 'property2.property.not.existing'));
+       }
+
+}
+?>
\ No newline at end of file
index 3692375..4235aae 100755 (executable)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "extbase".
 #
-# Auto generated 01-12-2010 08:07
+# Auto generated 27-12-2010 08:37
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
@@ -29,7 +29,7 @@ $EM_CONF[$_EXTKEY] = array(
        'clearCacheOnLoad' => 1,
        'lockType' => '',
        'author_company' => '',
-       'version' => '1.3.0beta2a',
+       'version' => '1.3.0beta3',
        '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:293:{s:13:"ChangeLog.txt";s:4:"9a60";s:16:"ext_autoload.php";s:4:"6ba7";s:12:"ext_icon.gif";s:4:"e922";s:17:"ext_localconf.php";s:4:"ab60";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:"56cf";s:46:"Classes/Configuration/ConfigurationManager.php";s:4:"31cb";s:55:"Classes/Configuration/ConfigurationManagerInterface.php";s:4:"c22f";s:35:"Classes/Configuration/Exception.php";s:4:"31e6";s:54:"Classes/Configuration/FrontendConfigurationManager.php";s:4:"21b3";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:"728f";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:"7bed";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:"9999";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:"ed62";s:35:"Classes/MVC/Controller/Argument.php";s:4:"c646";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:"d77a";s:28:"Classes/Object/Exception.php";s:4:"2f66";s:26:"Classes/Object/Manager.php";s:4:"35a4";s:32:"Classes/Object/ObjectManager.php";s:4:"47c9";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:"e4e2";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:"1699";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"0073";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"1e52";s:34:"Classes/Persistence/Repository.php";s:4:"54dd";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:"8048";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:"cbe0";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: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:"0d1f";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:"25a4";s:61:"Tests/Unit/Configuration/FrontendConfigurationManagerTest.php";s:4:"5d51";s:46:"Tests/Unit/DomainObject/AbstractEntityTest.php";s:4:"ec3f";s:30:"Tests/Unit/Fixtures/Entity.php";s:4:"09e9";s:33:"Tests/Unit/MVC/DispatcherTest.php";s:4:"a976";s:52:"Tests/Unit/MVC/Controller/AbstractControllerTest.php";s:4:"729b";s:50:"Tests/Unit/MVC/Controller/ActionControllerTest.php";s:4:"92fa";s:42:"Tests/Unit/MVC/Controller/ArgumentTest.php";s:4:"c046";s:43:"Tests/Unit/MVC/Controller/ArgumentsTest.php";s:4:"ce79";s:41:"Tests/Unit/MVC/Web/RequestBuilderTest.php";s:4:"c46d";s:34:"Tests/Unit/MVC/Web/RequestTest.php";s:4:"e941";s:45:"Tests/Unit/MVC/Web/Routing/UriBuilderTest.php";s:4:"c23d";s:52:"Tests/Unit/Object/Container/ClassInfoFactoryTest.php";s:4:"7104";s:45:"Tests/Unit/Object/Container/ContainerTest.php";s:4:"74b8";s:52:"Tests/Unit/Object/Container/Fixtures/Testclasses.php";s:4:"96fb";s:44:"Tests/Unit/Persistence/ObjectStorageTest.php";s:4:"db76";s:42:"Tests/Unit/Persistence/QueryResultTest.php";s:4:"f681";s:36:"Tests/Unit/Persistence/QueryTest.php";s:4:"55de";s:41:"Tests/Unit/Persistence/RepositoryTest.php";s:4:"8d33";s:38:"Tests/Unit/Persistence/SessionTest.php";s:4:"1752";s:52:"Tests/Unit/Persistence/Mapper/DataMapFactoryTest.php";s:4:"ebf9";s:53:"Tests/Unit/Persistence/Storage/Typo3DbBackendTest.php";s:4:"9621";s:37:"Tests/Unit/Reflection/ServiceTest.php";s:4:"5df4";s:54:"Tests/Unit/Security/Channel/RequestHashServiceTest.php";s:4:"768e";s:52:"Tests/Unit/Security/Cryptography/HashServiceTest.php";s:4:"d27e";s:36:"Tests/Unit/Utility/ExtensionTest.php";s:4:"5481";s:37:"Tests/Unit/Utility/TypoScriptTest.php";s:4:"a27c";s:47:"Tests/Unit/Validation/ValidatorResolverTest.php";s:4:"5fe9";s:61:"Tests/Unit/Validation/Validator/AlphanumericValidatorTest.php";s:4:"ba9a";s:60:"Tests/Unit/Validation/Validator/ConjunctionValidatorTest.php";s:4:"a09c";s:57:"Tests/Unit/Validation/Validator/DateTimeValidatorTest.php";s:4:"183e";s:61:"Tests/Unit/Validation/Validator/EmailAddressValidatorTest.php";s:4:"3337";s:54:"Tests/Unit/Validation/Validator/FloatValidatorTest.php";s:4:"8616";s:62:"Tests/Unit/Validation/Validator/GenericObjectValidatorTest.php";s:4:"6b3a";s:56:"Tests/Unit/Validation/Validator/IntegerValidatorTest.php";s:4:"9b70";s:57:"Tests/Unit/Validation/Validator/NotEmptyValidatorTest.php";s:4:"0b44";s:60:"Tests/Unit/Validation/Validator/NumberRangeValidatorTest.php";s:4:"7b66";s:55:"Tests/Unit/Validation/Validator/NumberValidatorTest.php";s:4:"fd01";s:52:"Tests/Unit/Validation/Validator/RawValidatorTest.php";s:4:"b4a6";s:66:"Tests/Unit/Validation/Validator/RegularExpressionValidatorTest.php";s:4:"1125";s:61:"Tests/Unit/Validation/Validator/StringLengthValidatorTest.php";s:4:"9a44";s:53:"Tests/Unit/Validation/Validator/TextValidatorTest.php";s:4:"a4af";}',
+       '_md5_values_when_last_written' => 'a:297:{s:13:"ChangeLog.txt";s:4:"ef24";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:"ed62";s:35:"Classes/MVC/Controller/Argument.php";s:4:"c646";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:"d77a";s:28:"Classes/Object/Exception.php";s:4:"2f66";s:26:"Classes/Object/Manager.php";s:4:"35a4";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:"1699";s:44:"Classes/Persistence/QueryResultInterface.php";s:4:"0073";s:46:"Classes/Persistence/QuerySettingsInterface.php";s:4:"1e52";s:34:"Classes/Persistence/Repository.php";s:4:"c078";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:"8048";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:"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:"0d1f";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:"25a4";s:61:"Tests/Unit/Configuration/FrontendConfigurationManagerTest.php";s:4:"5d51";s:46:"Tests/Unit/DomainObject/AbstractEntityTest.php";s:4:"ec3f";s:30:"Tests/Unit/Fixtures/Entity.php";s:4:"09e9";s:33:"Tests/Unit/MVC/DispatcherTest.php";s:4:"a976";s:52:"Tests/Unit/MVC/Controller/AbstractControllerTest.php";s:4:"d9eb";s:50:"Tests/Unit/MVC/Controller/ActionControllerTest.php";s:4:"92fa";s:42:"Tests/Unit/MVC/Controller/ArgumentTest.php";s:4:"c046";s:43:"Tests/Unit/MVC/Controller/ArgumentsTest.php";s:4:"ce79";s:41:"Tests/Unit/MVC/Web/RequestBuilderTest.php";s:4:"c46d";s:34:"Tests/Unit/MVC/Web/RequestTest.php";s:4:"e941";s:45:"Tests/Unit/MVC/Web/Routing/UriBuilderTest.php";s:4:"c23d";s:52:"Tests/Unit/Object/Container/ClassInfoFactoryTest.php";s:4:"7104";s:45:"Tests/Unit/Object/Container/ContainerTest.php";s:4:"77a5";s:52:"Tests/Unit/Object/Container/Fixtures/Testclasses.php";s:4:"feae";s:44:"Tests/Unit/Persistence/ObjectStorageTest.php";s:4:"db76";s:42:"Tests/Unit/Persistence/QueryResultTest.php";s:4:"f681";s:36:"Tests/Unit/Persistence/QueryTest.php";s:4:"55de";s:41:"Tests/Unit/Persistence/RepositoryTest.php";s:4:"8d33";s:38:"Tests/Unit/Persistence/SessionTest.php";s:4:"1752";s:52:"Tests/Unit/Persistence/Mapper/DataMapFactoryTest.php";s:4:"ebf9";s:53:"Tests/Unit/Persistence/Storage/Typo3DbBackendTest.php";s:4:"9621";s:42:"Tests/Unit/Reflection/ObjectAccessTest.php";s:4:"829b";s:37:"Tests/Unit/Reflection/ServiceTest.php";s:4:"5df4";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:"768e";s:52:"Tests/Unit/Security/Cryptography/HashServiceTest.php";s:4:"d27e";s:36:"Tests/Unit/Utility/ExtensionTest.php";s:4:"5481";s:37:"Tests/Unit/Utility/TypoScriptTest.php";s:4:"a27c";s:47:"Tests/Unit/Validation/ValidatorResolverTest.php";s:4:"5fe9";s:61:"Tests/Unit/Validation/Validator/AlphanumericValidatorTest.php";s:4:"ba9a";s:60:"Tests/Unit/Validation/Validator/ConjunctionValidatorTest.php";s:4:"a09c";s:57:"Tests/Unit/Validation/Validator/DateTimeValidatorTest.php";s:4:"183e";s:61:"Tests/Unit/Validation/Validator/EmailAddressValidatorTest.php";s:4:"3337";s:54:"Tests/Unit/Validation/Validator/FloatValidatorTest.php";s:4:"8616";s:62:"Tests/Unit/Validation/Validator/GenericObjectValidatorTest.php";s:4:"6b3a";s:56:"Tests/Unit/Validation/Validator/IntegerValidatorTest.php";s:4:"9b70";s:57:"Tests/Unit/Validation/Validator/NotEmptyValidatorTest.php";s:4:"0b44";s:60:"Tests/Unit/Validation/Validator/NumberRangeValidatorTest.php";s:4:"7b66";s:55:"Tests/Unit/Validation/Validator/NumberValidatorTest.php";s:4:"fd01";s:52:"Tests/Unit/Validation/Validator/RawValidatorTest.php";s:4:"b4a6";s:66:"Tests/Unit/Validation/Validator/RegularExpressionValidatorTest.php";s:4:"1125";s:61:"Tests/Unit/Validation/Validator/StringLengthValidatorTest.php";s:4:"9a44";s:53:"Tests/Unit/Validation/Validator/TextValidatorTest.php";s:4:"a4af";}',
 );
 
 ?>
\ No newline at end of file
index a4fa1b5..6625930 100644 (file)
@@ -24,5 +24,13 @@ $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_extb
        ),
 );
 
+// We need to set the default implementation for the Storage Backend
+// the code below is NO PUBLIC API! It's just to make sure that
+// Extbase works correctly in the backend if the page tree is empty or no
+// template is defined.
+$extbaseObjectContainer = t3lib_div::makeInstance('Tx_Extbase_Object_Container_Container'); // Singleton
+$extbaseObjectContainer->registerImplementation('Tx_Extbase_Persistence_Storage_BackendInterface', 'Tx_Extbase_Persistence_Storage_Typo3DbBackend');
+unset($extbaseObjectContainer);
+
 # $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:extbase/Classes/Persistence/Hook/TCEMainValueObjectUpdater.php:tx_Extbase_Persistence_Hook_TCEMainValueObjectUpdater';
 ?>
\ No newline at end of file
index 27551df..164fd84 100644 (file)
@@ -1 +1 @@
-https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/extbase/tags/1.3.0beta2/
+https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/extbase/tags/1.3.0beta3/
index 38acc73..deb8654 100644 (file)
@@ -167,7 +167,8 @@ class Tx_Fluid_ViewHelpers_Form_SelectViewHelper extends Tx_Fluid_ViewHelpers_Fo
                        return array();
                }
                $options = array();
-               foreach ($this->arguments['options'] as $key => $value) {
+               $optionsArgument = $this->arguments['options'];
+               foreach ($optionsArgument as $key => $value) {
                        if (is_object($value)) {
 
                                if ($this->arguments->hasArgument('optionValueField')) {
index f9d37b0..288aed1 100755 (executable)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "fluid".
 #
-# Auto generated 01-12-2010 06:16
+# Auto generated 27-12-2010 08:29
 #
 # 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.0beta2',
+       'version' => '1.3.0beta3',
        'constraints' => array(
                'depends' => array(
-                       'extbase' => '1.3.0beta2',
+                       'extbase' => '1.3.0beta3',
                ),
                'conflicts' => array(
                ),
                'suggests' => array(
                ),
        ),
-       '_md5_values_when_last_written' => 'a:225:{s:13:"ChangeLog.txt";s:4:"6931";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:"03ad";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:"8476";s:38:"Classes/ViewHelpers/ElseViewHelper.php";s:4:"cdde";s:40:"Classes/ViewHelpers/EscapeViewHelper.php";s:4:"257d";s:47:"Classes/ViewHelpers/FlashMessagesViewHelper.php";s:4:"be05";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:"3c4f";s:36:"Classes/ViewHelpers/IfViewHelper.php";s:4:"41ff";s:39:"Classes/ViewHelpers/ImageViewHelper.php";s:4:"11bb";s:40:"Classes/ViewHelpers/LayoutViewHelper.php";s:4:"cf3b";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:"a1bb";s:41:"Classes/ViewHelpers/SectionViewHelper.php";s:4:"3d03";s:38:"Classes/ViewHelpers/ThenViewHelper.php";s:4:"de0c";s:43:"Classes/ViewHelpers/TranslateViewHelper.php";s:4:"253b";s:52:"Classes/ViewHelpers/Be/AbstractBackendViewHelper.php";s:4:"b8ea";s:46:"Classes/ViewHelpers/Be/ContainerViewHelper.php";s:4:"2dc9";s:45:"Classes/ViewHelpers/Be/PageInfoViewHelper.php";s:4:"4a46";s:45:"Classes/ViewHelpers/Be/PagePathViewHelper.php";s:4:"8a79";s:46:"Classes/ViewHelpers/Be/TableListViewHelper.php";s:4:"b17c";s:48:"Classes/ViewHelpers/Be/Buttons/CshViewHelper.php";s:4:"3be3";s:49:"Classes/ViewHelpers/Be/Buttons/IconViewHelper.php";s:4:"bc33";s:53:"Classes/ViewHelpers/Be/Buttons/ShortcutViewHelper.php";s:4:"2153";s:57:"Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php";s:4:"c3ba";s:53:"Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php";s:4:"eba5";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:"6cdd";s:45:"Classes/ViewHelpers/Form/ErrorsViewHelper.php";s:4:"2f40";s:45:"Classes/ViewHelpers/Form/HiddenViewHelper.php";s:4:"1efd";s:47:"Classes/ViewHelpers/Form/PasswordViewHelper.php";s:4:"6826";s:44:"Classes/ViewHelpers/Form/RadioViewHelper.php";s:4:"57e1";s:45:"Classes/ViewHelpers/Form/SelectViewHelper.php";s:4:"ffba";s:45:"Classes/ViewHelpers/Form/SubmitViewHelper.php";s:4:"d80a";s:47:"Classes/ViewHelpers/Form/TextareaViewHelper.php";s:4:"68d6";s:46:"Classes/ViewHelpers/Form/TextboxViewHelper.php";s:4:"ea7a";s:48:"Classes/ViewHelpers/Form/TextfieldViewHelper.php";s:4:"5b83";s:45:"Classes/ViewHelpers/Form/UploadViewHelper.php";s:4:"f165";s:45:"Classes/ViewHelpers/Format/CropViewHelper.php";s:4:"399d";s:49:"Classes/ViewHelpers/Format/CurrencyViewHelper.php";s:4:"19b5";s:45:"Classes/ViewHelpers/Format/DateViewHelper.php";s:4:"74df";s:45:"Classes/ViewHelpers/Format/HtmlViewHelper.php";s:4:"795e";s:46:"Classes/ViewHelpers/Format/Nl2brViewHelper.php";s:4:"56df";s:47:"Classes/ViewHelpers/Format/NumberViewHelper.php";s:4:"ee89";s:48:"Classes/ViewHelpers/Format/PaddingViewHelper.php";s:4:"bdde";s:47:"Classes/ViewHelpers/Format/PrintfViewHelper.php";s:4:"ada1";s:45:"Classes/ViewHelpers/Link/ActionViewHelper.php";s:4:"c189";s:44:"Classes/ViewHelpers/Link/EmailViewHelper.php";s:4:"2d48";s:47:"Classes/ViewHelpers/Link/ExternalViewHelper.php";s:4:"b68e";s:43:"Classes/ViewHelpers/Link/PageViewHelper.php";s:4:"f7a4";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:"7841";s:43:"Classes/ViewHelpers/Uri/EmailViewHelper.php";s:4:"463a";s:46:"Classes/ViewHelpers/Uri/ExternalViewHelper.php";s:4:"9366";s:43:"Classes/ViewHelpers/Uri/ImageViewHelper.php";s:4:"1c24";s:42:"Classes/ViewHelpers/Uri/PageViewHelper.php";s:4:"e7c5";s:46:"Classes/ViewHelpers/Uri/ResourceViewHelper.php";s:4:"0f12";s:53:"Classes/ViewHelpers/Widget/AutocompleteViewHelper.php";s:4:"8a67";s:45:"Classes/ViewHelpers/Widget/LinkViewHelper.php";s:4:"50e9";s:49:"Classes/ViewHelpers/Widget/PaginateViewHelper.php";s:4:"7a5d";s:44:"Classes/ViewHelpers/Widget/UriViewHelper.php";s:4:"09f9";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:"9b07";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:"b435";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:"016e";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:"b290";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:"feea";s:54:"Tests/Unit/ViewHelpers/Link/ExternalViewHelperTest.php";s:4:"57b7";s:61:"Tests/Unit/ViewHelpers/Persistence/IdentityViewHelperTest.php";s:4:"c6d2";s:65:"Tests/Unit/ViewHelpers/Security/IfAuthenticatedViewHelperTest.php";s:4:"2d94";s:59:"Tests/Unit/ViewHelpers/Security/IfHasRoleViewHelperTest.php";s:4:"2fc4";s:50:"Tests/Unit/ViewHelpers/Uri/EmailViewHelperTest.php";s:4:"8239";s:53:"Tests/Unit/ViewHelpers/Uri/ExternalViewHelperTest.php";s:4:"500c";}',
+       '_md5_values_when_last_written' => 'a:225:{s:13:"ChangeLog.txt";s:4:"6931";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:"03ad";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:"8476";s:38:"Classes/ViewHelpers/ElseViewHelper.php";s:4:"cdde";s:40:"Classes/ViewHelpers/EscapeViewHelper.php";s:4:"257d";s:47:"Classes/ViewHelpers/FlashMessagesViewHelper.php";s:4:"be05";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:"3c4f";s:36:"Classes/ViewHelpers/IfViewHelper.php";s:4:"41ff";s:39:"Classes/ViewHelpers/ImageViewHelper.php";s:4:"11bb";s:40:"Classes/ViewHelpers/LayoutViewHelper.php";s:4:"cf3b";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:"a1bb";s:41:"Classes/ViewHelpers/SectionViewHelper.php";s:4:"3d03";s:38:"Classes/ViewHelpers/ThenViewHelper.php";s:4:"de0c";s:43:"Classes/ViewHelpers/TranslateViewHelper.php";s:4:"253b";s:52:"Classes/ViewHelpers/Be/AbstractBackendViewHelper.php";s:4:"b8ea";s:46:"Classes/ViewHelpers/Be/ContainerViewHelper.php";s:4:"2dc9";s:45:"Classes/ViewHelpers/Be/PageInfoViewHelper.php";s:4:"4a46";s:45:"Classes/ViewHelpers/Be/PagePathViewHelper.php";s:4:"8a79";s:46:"Classes/ViewHelpers/Be/TableListViewHelper.php";s:4:"b17c";s:48:"Classes/ViewHelpers/Be/Buttons/CshViewHelper.php";s:4:"3be3";s:49:"Classes/ViewHelpers/Be/Buttons/IconViewHelper.php";s:4:"bc33";s:53:"Classes/ViewHelpers/Be/Buttons/ShortcutViewHelper.php";s:4:"2153";s:57:"Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php";s:4:"c3ba";s:53:"Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php";s:4:"eba5";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:"6cdd";s:45:"Classes/ViewHelpers/Form/ErrorsViewHelper.php";s:4:"2f40";s:45:"Classes/ViewHelpers/Form/HiddenViewHelper.php";s:4:"1efd";s:47:"Classes/ViewHelpers/Form/PasswordViewHelper.php";s:4:"6826";s:44:"Classes/ViewHelpers/Form/RadioViewHelper.php";s:4:"57e1";s:45:"Classes/ViewHelpers/Form/SelectViewHelper.php";s:4:"fd6c";s:45:"Classes/ViewHelpers/Form/SubmitViewHelper.php";s:4:"d80a";s:47:"Classes/ViewHelpers/Form/TextareaViewHelper.php";s:4:"68d6";s:46:"Classes/ViewHelpers/Form/TextboxViewHelper.php";s:4:"ea7a";s:48:"Classes/ViewHelpers/Form/TextfieldViewHelper.php";s:4:"5b83";s:45:"Classes/ViewHelpers/Form/UploadViewHelper.php";s:4:"f165";s:45:"Classes/ViewHelpers/Format/CropViewHelper.php";s:4:"399d";s:49:"Classes/ViewHelpers/Format/CurrencyViewHelper.php";s:4:"19b5";s:45:"Classes/ViewHelpers/Format/DateViewHelper.php";s:4:"74df";s:45:"Classes/ViewHelpers/Format/HtmlViewHelper.php";s:4:"795e";s:46:"Classes/ViewHelpers/Format/Nl2brViewHelper.php";s:4:"56df";s:47:"Classes/ViewHelpers/Format/NumberViewHelper.php";s:4:"ee89";s:48:"Classes/ViewHelpers/Format/PaddingViewHelper.php";s:4:"bdde";s:47:"Classes/ViewHelpers/Format/PrintfViewHelper.php";s:4:"ada1";s:45:"Classes/ViewHelpers/Link/ActionViewHelper.php";s:4:"c189";s:44:"Classes/ViewHelpers/Link/EmailViewHelper.php";s:4:"2d48";s:47:"Classes/ViewHelpers/Link/ExternalViewHelper.php";s:4:"b68e";s:43:"Classes/ViewHelpers/Link/PageViewHelper.php";s:4:"f7a4";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:"7841";s:43:"Classes/ViewHelpers/Uri/EmailViewHelper.php";s:4:"463a";s:46:"Classes/ViewHelpers/Uri/ExternalViewHelper.php";s:4:"9366";s:43:"Classes/ViewHelpers/Uri/ImageViewHelper.php";s:4:"1c24";s:42:"Classes/ViewHelpers/Uri/PageViewHelper.php";s:4:"e7c5";s:46:"Classes/ViewHelpers/Uri/ResourceViewHelper.php";s:4:"0f12";s:53:"Classes/ViewHelpers/Widget/AutocompleteViewHelper.php";s:4:"8a67";s:45:"Classes/ViewHelpers/Widget/LinkViewHelper.php";s:4:"50e9";s:49:"Classes/ViewHelpers/Widget/PaginateViewHelper.php";s:4:"7a5d";s:44:"Classes/ViewHelpers/Widget/UriViewHelper.php";s:4:"09f9";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:"9b07";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:"b435";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:"016e";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:"b290";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:"feea";s:54:"Tests/Unit/ViewHelpers/Link/ExternalViewHelperTest.php";s:4:"57b7";s:61:"Tests/Unit/ViewHelpers/Persistence/IdentityViewHelperTest.php";s:4:"c6d2";s:65:"Tests/Unit/ViewHelpers/Security/IfAuthenticatedViewHelperTest.php";s:4:"2d94";s:59:"Tests/Unit/ViewHelpers/Security/IfHasRoleViewHelperTest.php";s:4:"2fc4";s:50:"Tests/Unit/ViewHelpers/Uri/EmailViewHelperTest.php";s:4:"8239";s:53:"Tests/Unit/ViewHelpers/Uri/ExternalViewHelperTest.php";s:4:"500c";}',
        'suggests' => array(
        ),
 );
index 18d8905..2afa929 100644 (file)
@@ -1 +1 @@
-https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/fluid/tags/1.3.0beta2/
+https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/fluid/tags/1.3.0beta3/