Extbase:
authorSebastian Kurfürst <sebastian@typo3.org>
Thu, 28 May 2009 21:22:33 +0000 (21:22 +0000)
committerSebastian Kurfürst <sebastian@typo3.org>
Thu, 28 May 2009 21:22:33 +0000 (21:22 +0000)
* Backported major changes from FLOW3 to Extbase.
* !!! Some of these changes are not backwards-compatible!
* MVC:
** Controller:
*** Added ControllerContext
*** AbstractController:
**** !!! removed initializeArguments(). Use ActionController::initializeAction() instead.
*** ActionController:
**** !!! removed $initializeView
**** !!! new method signature of protected function initializeView(Tx_Extbase_View_ViewInterface $view)
** View:
*** !!! Removed Helper (and URIHelper)
**** !!! URIHelper has been moved to MVC_Web_Routing_URIBuilder and can be accessed through $this->controllerContext available in View and (Fluid) ViewHelpers
*** AbstractView:
**** !!! removed $request
**** removed $viewHelpers
**** !!! removed getViewHelper()
**** removed $contextVariables
**** added $controllerContext
* Validation:
** !!! ValidatorResolver: now internal! You should not need to use it!
** !!! renamed ChainValidator to ConjunctionValidator
** Introduced PropertyError
** Added new validators (f.e. DisjunctionValidator and some others missing from FLOW3)

23 files changed:
typo3/sysext/extbase/Classes/Dispatcher.php
typo3/sysext/extbase/Classes/MVC/Controller/AbstractController.php
typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php
typo3/sysext/extbase/Classes/MVC/Controller/ArgumentsValidator.php
typo3/sysext/extbase/Classes/MVC/Controller/ControllerContext.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Controller/ControllerInterface.php
typo3/sysext/extbase/Classes/MVC/View/AbstractView.php
typo3/sysext/extbase/Classes/MVC/View/EmptyView.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/AbstractHelper.php [deleted file]
typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php [deleted file]
typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php [deleted file]
typo3/sysext/extbase/Classes/MVC/View/ViewInterface.php
typo3/sysext/extbase/Classes/MVC/Web/Routing/URIBuilder.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Error.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Errors.php [deleted file]
typo3/sysext/extbase/Classes/Validation/PropertyError.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Validator/AbstractCompositeValidator.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Validator/AbstractValidator.php
typo3/sysext/extbase/Classes/Validation/Validator/ChainValidator.php [deleted file]
typo3/sysext/extbase/Classes/Validation/Validator/ConjunctionValidator.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Validator/DisjunctionValidator.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/Validation/Validator/GenericObjectValidator.php
typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php

index b59b50a..cf19fe4 100644 (file)
@@ -87,9 +87,6 @@ class Tx_Extbase_Dispatcher {
                $propertyMapper = t3lib_div::makeInstance('Tx_Extbase_Property_Mapper');
                $controller->injectPropertyMapper($propertyMapper);
                $controller->injectSettings($this->getSettings($request));
-               $URIHelper = t3lib_div::makeInstance('Tx_Extbase_MVC_View_Helper_URIHelper');
-               $URIHelper->setRequest($request);
-               $controller->injectURIHelper($URIHelper);
                $reflectionService = t3lib_div::makeInstance('Tx_Extbase_Reflection_Service');
                $validatorResolver = t3lib_div::makeInstance('Tx_Extbase_Validation_ValidatorResolver');
                $validatorResolver->injectReflectionService($reflectionService);
index ff10afa..7143a48 100755 (executable)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -35,9 +35,9 @@
 abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbase_MVC_Controller_ControllerInterface {
 
        /**
-        * @var Tx_Extbase_MVC_View_Helper_URIHelper
+        * @var Tx_Extbase_MVC_Web_Routing_URIBuilder
         */
-       protected $URIHelper;
+       protected $URIBuilder;
 
        /**
         * @var string Key of the extension this controller belongs to
@@ -121,17 +121,6 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
        }
 
        /**
-        * Injects the URI helper
-        *
-        * @param Tx_Extbase_MVC_View_Helper_URIHelper $URIHelper The URI helper
-        * @return void
-        * @internal
-        */
-       public function injectURIHelper(Tx_Extbase_MVC_View_Helper_URIHelper $URIHelper) {
-               $this->URIHelper = $URIHelper;
-       }
-
-       /**
         * Injects the validator resolver
         *
         * @param Tx_Extbase_Validation_ValidatorResolver $validatorResolver
@@ -174,19 +163,31 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
                $this->request->setDispatched(TRUE);
                $this->response = $response;
 
-               $this->initializeArguments();
+               $this->URIBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_URIBuilder');
+               $this->URIBuilder->setRequest($request);
+
+               $this->initializeControllerArgumentsBaseValidators();
                $this->mapRequestArgumentsToControllerArguments();
        }
 
        /**
-        * Initializes (registers / defines) arguments of this controller.
-        *
-        * Override this method to add arguments which can later be accessed
-        * by the action methods.
+        * Initialize the controller context
         *
-        * @return void
+        * @return Tx_Extbase_MVC_Controller_ControllerContext ControllerContext to be passed to the view
+        * @internal
         */
-       protected function initializeArguments() {
+       protected function buildControllerContext() {
+               $controllerContext = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_ControllerContext');
+               $controllerContext->setRequest($this->request);
+               $controllerContext->setResponse($this->response);
+               if ($this->arguments !== NULL) {
+                       $controllerContext->setArguments($this->arguments);
+               }
+               if ($this->argumentsMappingResults !== NULL) {
+                       $controllerContext->setArgumentsMappingResults($this->argumentsMappingResults);
+               }
+               $controllerContext->setURIBuilder($this->URIBuilder);
+               return $controllerContext;
        }
 
        /**
@@ -235,7 +236,7 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
                        $pageUid = $GLOBALS['TSFE']->id;
                }
 
-               $uri = $this->URIHelper->URIFor($pageUid, $actionName, $arguments, $controllerName, $extensionName);
+               $uri = $this->URIBuilder->URIFor($pageUid, $actionName, $arguments, $controllerName, $extensionName);
                $this->redirectToURI($uri, $delay, $statusCode);
        }
 
@@ -290,7 +291,7 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
         */
        public function initializeControllerArgumentsBaseValidators() {
                foreach ($this->arguments as $argument) {
-                       $validator = $this->validatorResolver->getBaseValidatorChain($argument->getDataType());
+                       $validator = $this->validatorResolver->getBaseValidatorConjunction($argument->getDataType());
                        if ($validator !== NULL) $argument->setValidator($validator);
                }
        }
@@ -313,5 +314,4 @@ abstract class Tx_Extbase_MVC_Controller_AbstractController implements Tx_Extbas
                $this->argumentsMappingResults = $this->propertyMapper->getMappingResults();
        }
 }
-
 ?>
\ No newline at end of file
index 971c7d8..d12ae81 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -41,29 +41,27 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
        protected $reflectionService;
 
        /**
-        * @var boolean If initializeView() should be called on an action invocation.
-        */
-       protected $initializeView = TRUE;
-
-       /**
-        * By default a view with the same name as the current action is provided. Contains NULL if none was found.
-        * @var Tx_Extbase_MVC_View_AbstractView
+        * By default a Fluid TemplateView is provided, if a template is available,
+        * then a view with the same name as the current action will be looked up.
+        * If none is available the $defaultViewObjectName will be used and finally
+        * an EmptyView will be created.
+        * @var Tx_Extbase_MVC_View_ViewInterface
         */
        protected $view = NULL;
 
        /**
-        * By default $this->viewObjectNamePattern is used to find a matching view object.
-        * If no custom view class can be found, $this->defaultViewObjectName will be used.
+        * Pattern after which the view object name is built if no Fluid template
+        * is found.
         * @var string
         */
-       protected $standardViewObjectName = 'Tx_Fluid_View_TemplateView';
+       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller_@action';
 
        /**
-        * Pattern after which the view object name is built
-        *
+        * The default view object to use if neither a Fluid template nor an action
+        * specific view object could be found.
         * @var string
         */
-       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller_@action';
+       protected $defaultViewObjectName = NULL;
 
        /**
         * Name of the action method
@@ -117,8 +115,10 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
                $this->request->setDispatched(TRUE);
                $this->response = $response;
 
+               $this->URIBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_URIBuilder');
+               $this->URIBuilder->setRequest($request);
+
                $this->actionMethodName = $this->resolveActionMethodName();
-               if ($this->initializeView) $this->initializeView();
 
                $this->initializeActionMethodArguments();
                $this->initializeControllerArgumentsBaseValidators();
@@ -131,6 +131,8 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
                }
 
                $this->mapRequestArgumentsToControllerArguments();
+               $this->view = $this->resolveView();
+               if ($this->view !== NULL) $this->initializeView($this->view);
                $this->callActionMethod();
        }
 
@@ -138,7 +140,7 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
         * Implementation of the arguments initilization in the action controller:
         * Automatically registers arguments of the current action
         *
-        * Don't override this method - use initializeArguments() instead.
+        * Don't override this method - use initializeAction() instead.
         *
         * @return void
         * @see initializeArguments()
@@ -167,10 +169,10 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
         * @internal
         */
        protected function initializeActionMethodValidators() {
-               $validatorChains = $this->validatorResolver->buildMethodArgumentsValidatorChains(get_class($this), $this->actionMethodName);
-               foreach ($validatorChains as $argumentName => $validatorChain) {
+               $validatorConjunctions = $this->validatorResolver->buildMethodArgumentsValidatorConjunctions(get_class($this), $this->actionMethodName);
+               foreach ($validatorConjunctions as $argumentName => $validatorConjunction) {
                        if (!isset($this->arguments[$argumentName])) throw new Tx_Extbase_MVC_Exception_NoSuchArgument('Found custom validation rule for non existing argument "' . $argumentName . '" in ' . get_class($this) . '->' . $this->actionMethodName . '().', 1239853108);
-                       $this->arguments[$argumentName]->setValidator($validatorChain);
+                       $this->arguments[$argumentName]->setValidator($validatorConjunction);
                }
        }
 
@@ -223,30 +225,53 @@ class Tx_Extbase_MVC_Controller_ActionController extends Tx_Extbase_MVC_Controll
         * the current action.
         *
         * @return void
-        * @internal
         */
-       protected function initializeView() {
-               $this->view = t3lib_div::makeInstance($this->resolveViewObjectName());
-               $this->view->setRequest($this->request);
+       protected function resolveView() {
+               $view = t3lib_div::makeInstance('Tx_Fluid_View_TemplateView');
+               $controllerContext = $this->buildControllerContext();
+               $view->setControllerContext($controllerContext);
+               if ($view->hasTemplate() === FALSE) {
+                       $viewObjectName = $this->resolveViewObjectName();
+                       if ($viewObjectName === FALSE) $viewObjectName = 'Tx_Extbase_MVC_View_EmptyView';
+                       $view = t3lib_div::makeInstance($viewObjectName);
+                       $view->setControllerContext($controllerContext);
+               }
+               $view->initializeView(); // In FLOW3, solved through Object Lifecycle methods, we need to call it explicitely.
+               // $view->assign('flashMessages', $this->popFlashMessages());
+               return $view;
        }
 
        /**
         * Determines the fully qualified view object name.
         *
-        * @return string The fully qualified view object name
+        * @return mixed The fully qualified view object name or FALSE if no matching view could be found.
         */
        protected function resolveViewObjectName() {
-               $viewObjectName = str_replace('@extension', $this->request->getControllerExtensionName(), $this->viewObjectNamePattern);
-               $viewObjectName = str_replace('@controller', $this->request->getControllerName(), $viewObjectName);
-               $viewObjectName = str_replace('@action', ucfirst($this->request->getControllerActionName()), $viewObjectName);
-               if (!class_exists($viewObjectName)) {
-                       if (class_exists($this->standardViewObjectName)) {
-                               $viewObjectName = $this->standardViewObjectName;
-                       } else {
-                               $viewObjectName = 'Tx_Extbase_View_EmptyView';
-                       }
+               $possibleViewName = $this->viewObjectNamePattern;
+               $possibleViewName = str_replace('@extension', $this->request->getControllerExtensionName(), $possibleViewName);
+               $possibleViewName = str_replace('@controller', $this->request->getControllerName(), $$possibleViewName);
+               $possibleViewName = str_replace('@action', ucfirst($this->request->getControllerActionName()), $possibleViewName);
+
+               if (class_exists($possibleViewName)) {
+                       return $possibleViewName;
+               }
+
+               if ($this->defaultViewObjectName !== NULL && class_exists($this->defaultViewObjectName)) {
+                       return $this->defaultViewObjectName;
                }
-               return $viewObjectName;
+               return FALSE;
+       }
+
+       /**
+        * Initializes the view before invoking an action method.
+        *
+        * Override this method to solve assign variables common for all actions
+        * or prepare the view in another way before the action is called.
+        *
+        * @param Tx_Extbase_View_ViewInterface $view The view to be initialized
+        * @return void
+        */
+       protected function initializeView(Tx_Extbase_MVC_View_ViewInterface $view) {
        }
 
        /**
index 9afcff8..959df6a 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -81,13 +81,13 @@ class Tx_Extbase_MVC_Controller_ArgumentsValidator extends Tx_Extbase_Validation
                if (!$arguments instanceof Tx_Extbase_MVC_Controller_Arguments) throw new InvalidArgumentException('Expected Tx_Extbase_MVC_Controller_Arguments, ' . gettype($arguments) . ' given.', 1241079562);
                $argument = $arguments[$argumentName];
 
-               $validatorChain = $argument->getValidator();
-               if ($validatorChain === NULL) return TRUE;
+               $validatorConjunction = $argument->getValidator();
+               if ($validatorConjunction === NULL) return TRUE;
 
                $argumentValue = $argument->getValue();
                if ($argumentValue === $argument->getDefaultValue() && $argument->isRequired() === FALSE) return TRUE;
-               if ($validatorChain->isValid($argumentValue) === FALSE) {
-                       $this->errors = $validatorChain->getErrors();
+               if ($validatorConjunction->isValid($argumentValue) === FALSE) {
+                       $this->errors = $validatorConjunction->getErrors();
                        return FALSE;
                }
                return TRUE;
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/ControllerContext.php b/typo3/sysext/extbase/Classes/MVC/Controller/ControllerContext.php
new file mode 100644 (file)
index 0000000..881e023
--- /dev/null
@@ -0,0 +1,171 @@
+<?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!
+***************************************************************/
+
+/**
+ * The controller context contains information from the controller
+ *
+ * @package Extbase
+ * @subpackage MVC
+ * @version $Id: AbstractController.php 2203 2009-05-12 18:44:47Z networkteam_hlubek $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ * @scope prototype
+ */
+class Tx_Extbase_MVC_Controller_ControllerContext {
+
+       /**
+        * @var Tx_Extbase_MVC_Request
+        */
+       protected $request;
+
+       /**
+        * @var Tx_Extbase_MVC_Response
+        */
+       protected $response;
+
+       /**
+        * @var Tx_Extbase_MVC_Controller_Arguments
+        */
+       protected $arguments;
+
+       /**
+        * @var Tx_Extbase_Property_MappingResults
+        */
+       protected $argumentsMappingResults;
+
+       /**
+        * @var Tx_Extbase_MVC_Web_Routing_URIBuilder
+        */
+       protected $URIBuilder;
+
+       /**
+        * Set the request of the controller
+        *
+        * @param Tx_Extbase_MVC_Request $request
+        * @return void
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        * @internal
+        */
+       public function setRequest(Tx_Extbase_MVC_Request $request) {
+               $this->request = $request;
+       }
+
+       /**
+        * Get the request of the controller
+        *
+        * @return Tx_Extbase_MVC_Request
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getRequest() {
+               return $this->request;
+       }
+
+       /**
+        * Set the response of the controller
+        *
+        * @param Tx_Extbase_MVC_Response $request
+        * @return void
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        * @internal
+        */
+       public function setResponse(Tx_Extbase_MVC_Response $response) {
+               $this->response = $response;
+       }
+
+       /**
+        * Get the response of the controller
+        *
+        * @return Tx_Extbase_MVC_Request
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getResponse() {
+               return $this->response;
+       }
+
+       /**
+        * Set the arguments of the controller
+        *
+        * @param Tx_Extbase_MVC_Controller_Arguments $arguments
+        * @return void
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        * @internal
+        */
+       public function setArguments(Tx_Extbase_MVC_Controller_Arguments $arguments) {
+               $this->arguments = $arguments;
+       }
+
+       /**
+        * Get the arguments of the controller
+        *
+        * @return Tx_Extbase_MVC_Controller_Arguments
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getArguments() {
+               return $this->arguments;
+       }
+
+       /**
+        * Set the arguments mapping results of the controller
+        *
+        * @param Tx_Extbase_Property_MappingResults $argumentsMappingResults
+        * @return void
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        * @internal
+        */
+       public function setArgumentsMappingResults(Tx_Extbase_Property_MappingResults $argumentsMappingResults) {
+               $this->argumentsMappingResults = $argumentsMappingResults;
+       }
+
+       /**
+        * Get the arguments mapping results of the controller
+        *
+        * @return Tx_Extbase_Property_MappingResults
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getArgumentsMappingResults() {
+               return $this->argumentsMappingResults;
+       }
+
+       /**
+        * Tx_Extbase_MVC_Web_Routing_URIBuilder $URIBuilder
+        * @return void
+        * @author Bastian Waidelich <bastian@typo3.org>
+        * @internal
+        */
+       public function setURIBuilder(Tx_Extbase_MVC_Web_Routing_URIBuilder $URIBuilder) {
+               $this->URIBuilder = $URIBuilder;
+       }
+
+       /**
+        * @return Tx_Extbase_MVC_Web_Routing_URIBuilder
+        * @author Bastian Waidelich <bastian@typo3.org>
+        */
+       public function getURIBuilder() {
+               return $this->URIBuilder;
+       }
+
+}
+?>
\ No newline at end of file
index d988cae..00c7b31 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -37,10 +37,30 @@ interface Tx_Extbase_MVC_Controller_ControllerInterface {
        /**
         * Sets / injects the settings of the package this controller belongs to.
         *
+        * Needed to emulate settings injection.
+        *
         * @param array $settings Settings container of the current package
         * @return void
         */
        public function injectSettings(array $settings);
-       
+
+       /**
+        * Checks if the current request type is supported by the controller.
+        *
+        * @param Tx_Extbase_MVC_Request $request The current request
+        * @return boolean TRUE if this request type is supported, otherwise FALSE
+        */
+       public function canProcessRequest(Tx_Extbase_MVC_Request $request);
+
+       /**
+        * Processes a general request. The result can be returned by altering the given response.
+        *
+        * @param Tx_Extbase_MVC_Request $request The request object
+        * @param Tx_Extbase_MVC_Response $response The response, modified by the controller
+        * @return void
+        * @throws Tx_Extbase_MVC_Exception_UnsupportedRequestType if the controller doesn't support the current request type
+        */
+       public function processRequest(Tx_Extbase_MVC_Request $request, Tx_Extbase_MVC_Response $response);
+
 }
 ?>
\ No newline at end of file
index 4aeaff1..24f3666 100755 (executable)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
 abstract class Tx_Extbase_MVC_View_AbstractView implements Tx_Extbase_MVC_View_ViewInterface {
 
        /**
-        * @var Tx_Extbase_MVC_Request
+        * @var Tx_Extbase_MVC_Controller_ControllerContext
         */
-       protected $request;
+       protected $controllerContext;
 
        /**
-        * @var array of Tx_Extbase_MVC_View_Helper_HelperInterface
-        */
-       protected $viewHelpers;
-
-       /**
-        * @var array
-        */
-       protected $contextVariables = array();
-
-       /**
-        * Sets the current request
+        * Sets the current controller context
         *
-        * @param Tx_Extbase_MVC_Request $request
+        * @param Tx_Extbase_MVC_Controller_ControllerContext $controllerContext
         * @return void
+        * @internal
         */
-       public function setRequest(Tx_Extbase_MVC_Request $request) {
-               $this->request = $request;
-       }
-
-       /**
-        * Returns an View Helper instance.
-        * View Helpers must implement the interface Tx_Extbase_MVC_View_Helper_HelperInterface
-        *
-        * @param string $viewHelperClassName the full name of the View Helper Class including
-        * @return Tx_Extbase_MVC_View_Helper_HelperInterface The View Helper instance
-        */
-       public function getViewHelper($viewHelperClassName) {
-               if (!isset($this->viewHelpers[$viewHelperClassName])) {
-                       $viewHelper = t3lib_div::makeInstance($viewHelperClassName);
-                       if (!$viewHelper instanceof Tx_Extbase_MVC_View_Helper_HelperInterface) {
-                               throw new Tx_Extbase_Exception_InvalidViewHelper('View Helpers must implement interface "Tx_Extbase_MVC_View_Helper_HelperInterface"', 1222895456);
-                       }
-                       $viewHelper->setRequest($this->request);
-                       $this->viewHelpers[$viewHelperClassName] = $viewHelper;
-               }
-               return $this->viewHelpers[$viewHelperClassName];
+       public function setControllerContext(Tx_Extbase_MVC_Controller_ControllerContext $controllerContext) {
+               $this->controllerContext = $controllerContext;
        }
 
        /**
@@ -87,7 +59,5 @@ abstract class Tx_Extbase_MVC_View_AbstractView implements Tx_Extbase_MVC_View_V
         */
        public function initializeView() {
        }
-
 }
-
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/EmptyView.php b/typo3/sysext/extbase/Classes/MVC/View/EmptyView.php
new file mode 100644 (file)
index 0000000..7cc822f
--- /dev/null
@@ -0,0 +1,69 @@
+<?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!
+***************************************************************/
+
+/**
+ *
+ * @package Extbase
+ * @subpackage MVC
+ * @version $Id: EmptyView.php 2293 2009-05-20 18:14:45Z robert $
+ */
+
+/**
+ * An empty view - a special case.
+ *
+ * @package Extbase
+ * @subpackage MVC
+ * @version $Id: EmptyView.php 2293 2009-05-20 18:14:45Z robert $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ */
+final class Tx_Extbase_MVC_View_EmptyView extends Tx_Extbase_MVC_View_AbstractView {
+
+       /**
+        * Renders the empty view
+        *
+        * @return string An empty string
+        * @internal
+        */
+       public function render() {
+               return '';
+       }
+
+       /**
+        * A magic call method.
+        *
+        * Because this empty view is used as a Special Case in situations when no matching
+        * view is available, it must be able to handle method calls which originally were
+        * directed to another type of view. This magic method should prevent PHP from issuing
+        * a fatal error.
+        *
+        * @return void
+        * @internal
+        */
+       public function __call($methodName, array $arguments) {
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/AbstractHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/AbstractHelper.php
deleted file mode 100644 (file)
index 9ce2332..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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 abstract View Helper
- *
- * @package Extbase
- * @subpackage MVC
- * @version $ID:$
- */
-abstract class Tx_Extbase_MVC_View_Helper_AbstractHelper implements Tx_Extbase_MVC_View_Helper_HelperInterface {
-
-       /**
-        * @var Tx_Extbase_MVC_Web_Request
-        */
-       protected $request;
-
-       /**
-        * Sets the current request
-        */
-       public function setRequest(Tx_Extbase_MVC_Web_Request $request) {
-               $this->request = $request;
-       }
-}
-
-?>
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php
deleted file mode 100644 (file)
index 3ed4a86..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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!
-***************************************************************/
-
-/**
- * View Helper Interface
- *
- * @package Extbase
- * @subpackage MVC
- * @version $ID:$
- */
-interface Tx_Extbase_MVC_View_Helper_HelperInterface {
-
-       /**
-        * Sets the current request
-        */
-       public function setRequest(Tx_Extbase_MVC_Web_Request $request);
-}
-
-?>
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php
deleted file mode 100644 (file)
index 30c67d1..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/*                                                                        *
- * This script is part of the TYPO3 project - inspiring people to share!  *
- *                                                                        *
- * TYPO3 is free software; you can redistribute it and/or modify it under *
- * the terms of the GNU General Public License version 2 as published by  *
- * the Free Software Foundation.                                          *
- *                                                                        *
- * This script is distributed in the hope that it will be useful, but     *
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-    *
- * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General      *
- * Public License for more details.                                       *
- *                                                                        */
-
-require_once(PATH_t3lib . 'interfaces/interface.t3lib_singleton.php');
-require_once(PATH_tslib . 'class.tslib_content.php');
-
-/**
- * @package
- * @subpackage MVC
- * @version $Id$
- * @internal
- */
-class Tx_Extbase_MVC_View_Helper_URIHelper extends Tx_Extbase_MVC_View_Helper_AbstractHelper implements t3lib_Singleton {
-
-       /**
-        * An instance of tslib_cObj
-        *
-        * @var tslib_cObj
-        */
-       protected $contentObject;
-
-       /**
-        * Constructs this URI Helper
-        */
-       public function __construct() {
-               $this->contentObject = t3lib_div::makeInstance('tslib_cObj');
-       }
-
-       /**
-        * Creates an URI by making use of the typolink mechanism.
-        *
-        * @param integer $pageUid uid of the target page
-        * @param string $actionName Name of the action to be called
-        * @param array $arguments Additional query parameters, will be "namespaced"
-        * @param string $controllerName Name of the target controller
-        * @param string $extensionName Name of the target extension, without underscores. If NULL current ExtensionName is used.
-        * @param string $pluginName Name of the target plugin.  If NULL current PluginName is used.
-        * @param integer $pageType type of the target page. See typolink.parameter
-        * @param boolean $noCache if TRUE, then no_cache=1 is appended to URI
-        * @param boolean $useCacheHash by default TRUE; if FALSE, disable the cHash
-        * @param string $section If specified, adds a given HTML anchor to the URI (#...)
-        * @param boolean $linkAccessRestrictedPages If TRUE, generates links for pages where the user does not have permission to see it
-        * @param string $additionalParams An additional params query string which will be appended to the URI
-        * @return string the typolink URI
-        * @internal
-        */
-       public function URIFor($pageUid = NULL, $actionName = NULL, $arguments = array(), $controllerName = NULL, $extensionName = NULL, $pluginName = NULL, $pageType = 0, $noCache = FALSE, $useCacheHash = TRUE, $section = '', $linkAccessRestrictedPages = FALSE, $additionalParams = '') {
-               if (is_array($arguments)) {
-                       foreach ($arguments as $argumentKey => $argumentValue) {
-                               if ($argumentValue instanceof Tx_Extbase_DomainObject_AbstractEntity) {
-                                       $arguments[$argumentKey] = array('uid' => $argumentValue->getUid());
-                               }
-                       }
-               }
-               if ($actionName !== NULL) {
-                       $arguments['action'] = $actionName;
-               }
-               if ($controllerName !== NULL) {
-                       $arguments['controller'] = $controllerName;
-               } else {
-                       $arguments['controller'] = $this->request->getControllerName();
-               }
-               if ($extensionName === NULL) {
-                       $extensionName = $this->request->getControllerExtensionName();
-               }
-               if ($pluginName === NULL) {
-                       $pluginName = $this->request->getPluginName();
-               }
-               $argumentPrefix = strtolower('tx_' . $extensionName . '_' . $pluginName);
-               $prefixedArguments = (count($arguments) > 0) ? array($argumentPrefix => $arguments) : array();
-
-               return $this->typolinkURI($pageUid, $prefixedArguments, $pageType, $noCache, $useCacheHash, $section, $linkAccessRestrictedPages, $additionalParams);
-       }
-
-       /**
-        * Get an URI from typolink_URL
-        *
-        * @param integer $pageUid uid of the target page
-        * @param array $arguments Additional query parameters, will be "namespaced"
-        * @param integer $pageType type of the target page. See typolink.parameter
-        * @param boolean $noCache if TRUE, then no_cache=1 is appended to URI
-        * @param boolean $useCacheHash by default TRUE; if FALSE, disable the cHash
-        * @param string $section If specified, adds a given HTML anchor to the URI (#...)
-        * @param boolean $linkAccessRestrictedPages If TRUE, generates links for pages where the user does not have permission to see it
-        * @param string $additionalParams An additional params query string which will be appended to the URI
-        * @return The URI
-        * @internal
-        */
-       public function typolinkURI($pageUid = NULL, array $arguments = array(), $pageType = 0, $noCache = FALSE, $useCacheHash = TRUE, $section = '', $linkAccessRestrictedPages = FALSE, $additionalParams = '') {
-               if ($pageUid === NULL) {
-                       $pageUid = $GLOBALS['TSFE']->id;
-               }
-
-               $typolinkConfiguration = array();
-               $typolinkConfiguration['parameter'] = $pageUid;
-               if ($pageType !== 0) {
-                       $typolinkConfiguration['parameter'] .= ',' . $pageType;
-               }
-               $typolinkConfiguration['additionalParams'] = '';
-               if (count($arguments) > 0) {
-                       $typolinkConfiguration['additionalParams'] .= '&' . http_build_query($arguments, NULL, '&');
-               }
-
-               if ($noCache) {
-                       $typolinkConfiguration['no_cache'] = 1;
-                       // TODO: stdwrap
-               }
-
-               if ($useCacheHash) {
-                       $typolinkConfiguration['useCacheHash'] = 1;
-               }
-
-               if ($section !== '') {
-                       $typolinkConfiguration['section'] = $section;
-                       // TODO: stdwrap
-               }
-
-               if ($linkAccessRestrictedPages === TRUE) {
-                       $typolinkConfiguration['linkAccessRestrictedPages'] = $linkAccessRestrictedPages;
-               }
-
-               if (isset($options['additionalParams'])) {
-                       // TODO: Stdwrap
-                       // TODO FIX THIS: $typolinkConfiguration['additionalParams'] .= $this->contentObject->stdWrap($options['additionalParams'], isset($options['additionalParams.']) ? $options['additionalParams.'] : array());
-                       $typolinkConfiguration['additionalParams'] .= $additionalParams;
-               }
-
-               return $this->contentObject->typoLink_URL($typolinkConfiguration);
-       }
-}
-?>
-
index 35c2299..9b50239 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
 interface Tx_Extbase_MVC_View_ViewInterface {
 
        /**
-        * Sets the current request
+        * Sets the current controller context
         *
-        * @param Tx_Extbase_MVC_Request $request
+        * @param Tx_Extbase_MVC_Controller_ControllerContext $controllerContext
         * @return void
+        * @internal
         */
-       public function setRequest(Tx_Extbase_MVC_Request $request);
-
-       /**
-        * Returns an View Helper instance.
-        * View Helpers must implement the interface Tx_Extbase_MVC_View_Helper_HelperInterface
-        *
-        * @param string $viewHelperObjectName the full name of the View Helper object
-        * @return Tx_Extbase_MVC_View_Helper_HelperInterface The View Helper instance
-        */
-       public function getViewHelper($viewHelperObjectName);
+       public function setControllerContext(Tx_Extbase_MVC_Controller_ControllerContext $controllerContext);
 
        /**
         * Renders the view
diff --git a/typo3/sysext/extbase/Classes/MVC/Web/Routing/URIBuilder.php b/typo3/sysext/extbase/Classes/MVC/Web/Routing/URIBuilder.php
new file mode 100644 (file)
index 0000000..2b8cfff
--- /dev/null
@@ -0,0 +1,160 @@
+<?php
+/*                                                                        *
+ * This script is part of the TYPO3 project - inspiring people to share!  *
+ *                                                                        *
+ * TYPO3 is free software; you can redistribute it and/or modify it under *
+ * the terms of the GNU General Public License version 2 as published by  *
+ * the Free Software Foundation.                                          *
+ *                                                                        *
+ * This script is distributed in the hope that it will be useful, but     *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-    *
+ * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General      *
+ * Public License for more details.                                       *
+ *                                                                        */
+
+require_once(PATH_t3lib . 'interfaces/interface.t3lib_singleton.php');
+require_once(PATH_tslib . 'class.tslib_content.php');
+
+/**
+ * An URI Builder
+ *
+ * @package Extbase
+ * @subpackage MVC
+ * @version $Id$
+ * @internal
+ */
+class Tx_Extbase_MVC_Web_Routing_URIBuilder {
+
+       /**
+        * An instance of tslib_cObj
+        *
+        * @var tslib_cObj
+        */
+       protected $contentObject;
+
+       /**
+        * @var Tx_Extbase_MVC_Request
+        */
+       protected $request;
+
+       /**
+        * Constructs this URI Helper
+        */
+       public function __construct() {
+               $this->contentObject = t3lib_div::makeInstance('tslib_cObj');
+       }
+
+       /**
+        * Sets the current request
+        *
+        * @param Tx_Extbase_MVC_Request $request
+        * @return void
+        */
+       public function setRequest(Tx_Extbase_MVC_Request $request) {
+               $this->request = $request;
+       }
+
+       /**
+        * Creates an URI by making use of the typolink mechanism.
+        *
+        * @param integer $pageUid uid of the target page
+        * @param string $actionName Name of the action to be called
+        * @param array $arguments Additional query parameters, will be "namespaced"
+        * @param string $controllerName Name of the target controller
+        * @param string $extensionName Name of the target extension, without underscores. If NULL current ExtensionName is used.
+        * @param string $pluginName Name of the target plugin.  If NULL current PluginName is used.
+        * @param integer $pageType type of the target page. See typolink.parameter
+        * @param boolean $noCache if TRUE, then no_cache=1 is appended to URI
+        * @param boolean $useCacheHash by default TRUE; if FALSE, disable the cHash
+        * @param string $section If specified, adds a given HTML anchor to the URI (#...)
+        * @param boolean $linkAccessRestrictedPages If TRUE, generates links for pages where the user does not have permission to see it
+        * @param string $additionalParams An additional params query string which will be appended to the URI
+        * @return string the typolink URI
+        * @internal
+        */
+       public function URIFor($pageUid = NULL, $actionName = NULL, $arguments = array(), $controllerName = NULL, $extensionName = NULL, $pluginName = NULL, $pageType = 0, $noCache = FALSE, $useCacheHash = TRUE, $section = '', $linkAccessRestrictedPages = FALSE, $additionalParams = '') {
+               if (is_array($arguments)) {
+                       foreach ($arguments as $argumentKey => $argumentValue) {
+                               if ($argumentValue instanceof Tx_Extbase_DomainObject_AbstractEntity) {
+                                       $arguments[$argumentKey] = array('uid' => $argumentValue->getUid());
+                               }
+                       }
+               }
+               if ($actionName !== NULL) {
+                       $arguments['action'] = $actionName;
+               }
+               if ($controllerName !== NULL) {
+                       $arguments['controller'] = $controllerName;
+               } else {
+                       $arguments['controller'] = $this->request->getControllerName();
+               }
+               if ($extensionName === NULL) {
+                       $extensionName = $this->request->getControllerExtensionName();
+               }
+               if ($pluginName === NULL) {
+                       $pluginName = $this->request->getPluginName();
+               }
+               $argumentPrefix = strtolower('tx_' . $extensionName . '_' . $pluginName);
+               $prefixedArguments = (count($arguments) > 0) ? array($argumentPrefix => $arguments) : array();
+
+               return $this->typolinkURI($pageUid, $prefixedArguments, $pageType, $noCache, $useCacheHash, $section, $linkAccessRestrictedPages, $additionalParams);
+       }
+
+       /**
+        * Get an URI from typolink_URL
+        *
+        * @param integer $pageUid uid of the target page
+        * @param array $arguments Additional query parameters, will be "namespaced"
+        * @param integer $pageType type of the target page. See typolink.parameter
+        * @param boolean $noCache if TRUE, then no_cache=1 is appended to URI
+        * @param boolean $useCacheHash by default TRUE; if FALSE, disable the cHash
+        * @param string $section If specified, adds a given HTML anchor to the URI (#...)
+        * @param boolean $linkAccessRestrictedPages If TRUE, generates links for pages where the user does not have permission to see it
+        * @param string $additionalParams An additional params query string which will be appended to the URI
+        * @return The URI
+        * @internal
+        */
+       public function typolinkURI($pageUid = NULL, array $arguments = array(), $pageType = 0, $noCache = FALSE, $useCacheHash = TRUE, $section = '', $linkAccessRestrictedPages = FALSE, $additionalParams = '') {
+               if ($pageUid === NULL) {
+                       $pageUid = $GLOBALS['TSFE']->id;
+               }
+
+               $typolinkConfiguration = array();
+               $typolinkConfiguration['parameter'] = $pageUid;
+               if ($pageType !== 0) {
+                       $typolinkConfiguration['parameter'] .= ',' . $pageType;
+               }
+               $typolinkConfiguration['additionalParams'] = '';
+               if (count($arguments) > 0) {
+                       $typolinkConfiguration['additionalParams'] .= '&' . http_build_query($arguments, NULL, '&');
+               }
+
+               if ($noCache) {
+                       $typolinkConfiguration['no_cache'] = 1;
+                       // TODO: stdwrap
+               }
+
+               if ($useCacheHash) {
+                       $typolinkConfiguration['useCacheHash'] = 1;
+               }
+
+               if ($section !== '') {
+                       $typolinkConfiguration['section'] = $section;
+                       // TODO: stdwrap
+               }
+
+               if ($linkAccessRestrictedPages === TRUE) {
+                       $typolinkConfiguration['linkAccessRestrictedPages'] = $linkAccessRestrictedPages;
+               }
+
+               if (isset($options['additionalParams'])) {
+                       // TODO: Stdwrap
+                       // TODO FIX THIS: $typolinkConfiguration['additionalParams'] .= $this->contentObject->stdWrap($options['additionalParams'], isset($options['additionalParams.']) ? $options['additionalParams.'] : array());
+                       $typolinkConfiguration['additionalParams'] .= $additionalParams;
+               }
+
+               return $this->contentObject->typoLink_URL($typolinkConfiguration);
+       }
+}
+?>
+
diff --git a/typo3/sysext/extbase/Classes/Validation/Error.php b/typo3/sysext/extbase/Classes/Validation/Error.php
new file mode 100644 (file)
index 0000000..9ead8bc
--- /dev/null
@@ -0,0 +1,86 @@
+<?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!
+***************************************************************/
+
+/**
+ * Objects of this kind contain a list of validation errors which occurred during
+ * validation.
+ *
+ * @package Extbase
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_Extbase_Validation_Error {
+
+       /**
+        * @var string The default (english) error message.
+        */
+       protected $message = 'Unknown validation error';
+
+       /**
+        * @var string The error code
+        */
+       protected $code = 1201447005;
+
+       /**
+        * Constructs this error
+        *
+        * @param string $message: An english error message which is used if no other error message can be resolved
+        * @param integer $code: A unique error code
+        */
+       public function __construct($message, $code) {
+               $this->message = $message;
+               $this->code = $code;
+       }
+
+       /**
+        * Returns the error message
+        * @return string The error message
+        */
+       public function getMessage() {
+               return $this->message;
+       }
+
+       /**
+        * Returns the error code
+        * @return string The error code
+        */
+       public function getCode() {
+               return $this->code;
+       }
+
+       /**
+        * Converts this error into a string
+        *
+        * @return string
+        */
+       public function __toString() {
+               return $this->message . ' (#' . $this->code . ')';
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Validation/Errors.php b/typo3/sysext/extbase/Classes/Validation/Errors.php
deleted file mode 100644 (file)
index aff711b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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!
-***************************************************************/
-
-/**
- * Objects of this kind contain a list of validation errors which occurred during
- * validation.
- *
- * @package Extbase
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_Extbase_Validation_Errors extends ArrayObject {
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Validation/PropertyError.php b/typo3/sysext/extbase/Classes/Validation/PropertyError.php
new file mode 100644 (file)
index 0000000..604ceb8
--- /dev/null
@@ -0,0 +1,107 @@
+<?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!
+***************************************************************/
+
+/**
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: Error.php 1811 2009-01-28 12:04:49Z robert $
+ */
+
+/**
+ * This object holds validation errors for one property.
+ *
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: Error.php 1811 2009-01-28 12:04:49Z robert $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ * @scope prototype
+ */
+class PropertyError extends Tx_Extbase_Validation_Error {
+
+       /**
+        * @var string The default (english) error message.
+        */
+       protected $message = 'Validation errors for property "%s"';
+
+       /**
+        * @var string The error code
+        */
+       protected $code = 1242859509;
+
+       /**
+        * @var string The property name
+        */
+       protected $propertyName;
+
+       /**
+        * @var array An array of Tx_Extbase_Validation_Error for the property
+        */
+       protected $errors = array();
+
+       /**
+        * Create a new property error with the given property name
+        *
+        * @param string $propertyName The property name
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function __construct($propertyName) {
+               $this->propertyName = $propertyName;
+               $this->message = sprintf($this->message, $propertyName);
+       }
+
+       /**
+        * Add errors
+        *
+        * @param array $errors Array of Tx_Extbase_Validation_Error for the property
+        * @return void
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function addErrors($errors) {
+               $this->errors = array_merge($this->errors, $errors);
+       }
+
+       /**
+        * Get all errors for the property
+        *
+        * @return array An array of Tx_Extbase_Validation_Error objects or an empty array if no errors occured for the property
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getErrors() {
+               return $this->errors;
+       }
+
+       /**
+        * Get the property name
+        * @return string The property name for this error
+        * @author Christopher Hlubek <hlubek@networkteam.com>
+        */
+       public function getPropertyName() {
+               return $this->propertyName;
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/AbstractCompositeValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/AbstractCompositeValidator.php
new file mode 100644 (file)
index 0000000..7d0e067
--- /dev/null
@@ -0,0 +1,116 @@
+<?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!
+***************************************************************/
+
+/**
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2203 2009-05-12 18:44:47Z networkteam_hlubek $
+ */
+
+/**
+ * An abstract composite validator with consisting of other validators
+ *
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2203 2009-05-12 18:44:47Z networkteam_hlubek $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ * @scope prototype
+ */
+abstract class Tx_Extbase_Validation_Validator_AbstractCompositeValidator implements Tx_Extbase_Validation_Validator_ValidatorInterface, Countable {
+
+       /**
+        * @var array
+        */
+       protected $options = array();
+
+       /**
+        * @var SPLObjectStorage
+        */
+       protected $validators;
+
+       /**
+        * @var array
+        */
+       protected $errors = array();
+
+       /**
+        * Constructs the validator conjunction
+        *
+        */
+       public function __construct() {
+               $this->validators = new SPLObjectStorage();
+       }
+
+       /**
+        * Does nothing.
+        *
+        * @param array $options Not used
+        * @return void
+        */
+       public function setOptions(array $options) {
+       }
+
+       /**
+        * Returns an array of errors which occurred during the last isValid() call.
+        *
+        * @return array An array of Tx_Extbase_Validation_Error objects or an empty array if no errors occurred.
+        */
+       public function getErrors() {
+               return $this->errors;
+       }
+
+       /**
+        * Adds a new validator to the conjunction.
+        *
+        * @param Tx_Extbase_Validation_Validator_ValidatorInterface $validator The validator that should be added
+        * @return void
+        */
+       public function addValidator(Tx_Extbase_Validation_Validator_ValidatorInterface $validator) {
+               $this->validators->attach($validator);
+       }
+
+       /**
+        * Removes the specified validator.
+        *
+        * @param Tx_Extbase_Validation_ValidatorInterface $validator The validator to remove
+        */
+       public function removeValidator(Tx_Extbase_Validation_Validator_ValidatorInterface $validator) {
+               if (!$this->validators->contains($validator)) throw new Tx_Extbase_Validation_Exception_NoSuchValidator('Cannot remove validator because its not in the conjunction.', 1207020177);
+               $this->validators->detach($validator);
+       }
+
+       /**
+        * Returns the number of validators contained in this conjunction.
+        *
+        * @return integer The number of validators
+        */
+       public function count() {
+               return count($this->validators);
+       }
+}
+
+?>
\ No newline at end of file
index 7644a99..dab28e2 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -56,7 +56,7 @@ abstract class Tx_Extbase_Validation_Validator_AbstractValidator implements Tx_E
        /**
         * Returns an array of errors which occurred during the last isValid() call.
         *
-        * @return array An array of error messages or an empty array if no errors occurred.
+        * @return array An array of Tx_Extbase_Validation_Error objects or an empty array if no errors occurred.
         */
        public function getErrors() {
                return $this->errors;
@@ -70,7 +70,7 @@ abstract class Tx_Extbase_Validation_Validator_AbstractValidator implements Tx_E
         * @return void
         */
        protected function addError($message, $code) {
-               $this->errors[] = $message;
+               $this->errors[] = t3lib_div::makeInstance('Tx_Extbase_Validation_Error', $message, $code);
        }
 }
 
diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/ChainValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/ChainValidator.php
deleted file mode 100644 (file)
index c3c6b96..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?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!
-***************************************************************/
-
-/**
- * Validator to chain many validators
- *
- * @package Extbase
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_Extbase_Validation_Validator_ChainValidator implements Tx_Extbase_Validation_Validator_ValidatorInterface, Countable {
-
-       /**
-        * @var array
-        */
-       protected $options = array();
-
-       /**
-        * @var Tx_Extbase_Persistence_ObjectStorage
-        */
-       protected $validators;
-
-       /**
-        * @var array
-        */
-       protected $errors = array();
-
-       /**
-        * Constructs the validator chain
-        *
-        */
-       public function __construct() {
-               $this->validators = new Tx_Extbase_Persistence_ObjectStorage();
-       }
-
-       /**
-        * Checks if the given value is valid according to the validators of the chain ..
-        *
-        * If at least one error occurred, the result is FALSE.
-        *
-        * @param mixed $value The value that should be validated
-        * @return boolean TRUE if the value is valid, FALSE if an error occured
-        */
-       public function isValid($value) {
-               foreach ($this->validators as $validator) {
-                       if ($validator->isValid($value) === FALSE) {
-                               $this->errors = $validator->getErrors();
-                               return FALSE;
-                       }
-               }
-               return TRUE;
-       }
-
-       /**
-        * Does nothing.
-        *
-        * @param array $options Not used
-        * @return void
-        */
-       public function setOptions(array $options) {
-       }
-
-       /**
-        * Returns an array of errors which occurred during the last isValid() call.
-        *
-        * @return array An array of error messages or an empty array if no errors occurred.
-        */
-       public function getErrors() {
-               return $this->errors;
-       }
-
-       /**
-        * Adds a new validator to the chain.
-        *
-        * @param Tx_Extbase_Validation_Validator_ValidatorInterface $validator The validator that should be added
-        * @return void
-        */
-       public function addValidator(Tx_Extbase_Validation_Validator_ValidatorInterface $validator) {
-               $this->validators->attach($validator);
-       }
-
-       /**
-        * Removes the specified validator.
-        *
-        * @param Tx_Extbase_Validation_Validator_ValidatorInterface $validator The validator to remove
-        */
-       public function removeValidator(Tx_Extbase_Validation_Validator_ValidatorInterface $validator) {
-               if (!$this->validators->contains($validator)) throw new Tx_Extbase_Validation_Exception_NoSuchValidator('Cannot remove validator because its not in the chain.', 1207020177);
-               $this->validators->detach($validator);
-       }
-
-       /**
-        * Returns the number of validators contained in this chain.
-        *
-        * @return integer The number of validators
-        */
-       public function count() {
-               return count($this->validators);
-       }
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/ConjunctionValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/ConjunctionValidator.php
new file mode 100644 (file)
index 0000000..8fb7d11
--- /dev/null
@@ -0,0 +1,63 @@
+<?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!
+***************************************************************/
+/**
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2212 2009-05-14 16:43:14Z networkteam_hlubek $
+ */
+
+/**
+ * Validator to chain many validators in a conjunction (logical and). So every
+ * validator has to be valid, to make the whole conjunction valid.
+ *
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2212 2009-05-14 16:43:14Z networkteam_hlubek $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ * @scope prototype
+ */
+class Tx_Extbase_Validation_Validator_ConjunctionValidator extends Tx_Extbase_Validation_Validator_AbstractCompositeValidator {
+       /**
+        * Checks if the given value is valid according to the validators of the conjunction.
+        *
+        * If at least one error occurred, the result is FALSE.
+        *
+        * @param mixed $value The value that should be validated
+        */
+       public function isValid($value) {
+               $result = TRUE;
+               foreach ($this->validators as $validator) {
+                       if ($validator->isValid($value) === FALSE) {
+                               $this->errors = array_merge($this->errors, $validator->getErrors());
+                               $result = FALSE;
+                       }
+               }
+               return $result;
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/DisjunctionValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/DisjunctionValidator.php
new file mode 100644 (file)
index 0000000..0fb96d3
--- /dev/null
@@ -0,0 +1,70 @@
+<?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!
+***************************************************************/
+
+/**
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2203 2009-05-12 18:44:47Z networkteam_hlubek $
+ */
+
+/**
+ * Validator to chain many validators in a disjunction (logical or). So only one
+ * validator has to be valid, to make the whole disjunction valid. Errors are
+ * only returned if all validators failed.
+ *
+ * @package Extbase
+ * @subpackage Validation
+ * @version $Id: ConjunctionValidator.php 2203 2009-05-12 18:44:47Z networkteam_hlubek $
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ * @scope prototype
+ */
+class Tx_Extbase_Validation_Validator_DisjunctionValidator extends Tx_Extbase_Validation_Validator_AbstractCompositeValidator {
+       /**
+        * Checks if the given value is valid according to the validators of the conjunction.
+        *
+        * If at least one error occurred, the result is FALSE.
+        *
+        * @param mixed $value The value that should be validated
+        * @return boolean TRUE if the value is valid, FALSE if an error occured
+        */
+       public function isValid($value) {
+               $result = FALSE;
+               foreach ($this->validators as $validator) {
+                       if ($validator->isValid($value) === FALSE) {
+                               $this->errors = array_merge($this->errors, $validator->getErrors());
+                       } else {
+                               $result = TRUE;
+                       }
+               }
+               if ($result === TRUE) {
+                       $this->errors = array();
+               }
+               return $result;
+       }
+}
+
+?>
\ No newline at end of file
index 67fa651..0c7b682 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -87,7 +87,7 @@ class Tx_Extbase_Validation_Validator_GenericObjectValidator extends Tx_Extbase_
 
                foreach ($this->propertyValidators[$propertyName] as $validator) {
                        if ($validator->isValid(Tx_Extbase_Reflection_ObjectAccess::getProperty($object, $propertyName)) === FALSE) {
-                               $this->errors = $validator->getErrors();
+                               $this->addErrorsForProperty($validator->getErrors(), $propertyName);
                                return FALSE;
                        }
                }
@@ -95,6 +95,19 @@ class Tx_Extbase_Validation_Validator_GenericObjectValidator extends Tx_Extbase_
        }
 
        /**
+        * @param array $errors Array of \F3\FLOW3\Validation\Error
+        * @param string $propertyName Name of the property to add errors
+        * @return void
+        * @internal
+        */
+       protected function addErrorsForProperty($errors, $propertyName) {
+               if (!isset($this->errors[$propertyName])) {
+                       $this->errors[$propertyName] = t3lib_div::makeInstance('Tx_Extbase_Validation_PropertyError', $propertyName);
+               }
+               $this->errors[$propertyName]->addErrors($errors);
+       }
+
+       /**
         * Adds the given validator for validation of the specified property.
         *
         * @param string $propertyName Name of the property to validate
index 9c2884b..ca3a5a8 100644 (file)
@@ -5,7 +5,7 @@
 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
 *  All rights reserved
 *
-*  This class is a backport of the corresponding class of FLOW3. 
+*  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
@@ -42,7 +42,7 @@ class Tx_Extbase_Validation_ValidatorResolver {
        /**
         * @var array
         */
-       protected $baseValidatorChains = array();
+       protected $baseValidatorConjunctions = array();
 
        /**
         * Injects the reflection service
@@ -63,6 +63,7 @@ class Tx_Extbase_Validation_ValidatorResolver {
         * @param string $validatorName Either one of the built-in data types or fully qualified validator class name
         * @param array $validatorOptions Options to be passed to the validator
         * @return Tx_Extbase_Validation_Validator_ValidatorInterface Validator or NULL if none found.
+        * @internal
         */
        public function createValidator($validatorName, array $validatorOptions = array()) {
                $validatorClassName = $this->resolveValidatorObjectName($validatorName);
@@ -73,31 +74,32 @@ class Tx_Extbase_Validation_ValidatorResolver {
        }
 
        /**
-        * Resolves and returns the base validator chain for the given data type.
+        * Resolves and returns the base validator conjunction for the given data type.
         *
         * If no validator could be resolved (which usually means that no validation is necessary),
         * NULL is returned.
         *
         * @param string $dataType The data type to search a validator for. Usually the fully qualified object name
-        * @return Tx_Extbase_Validation_Validator_ChainValidator The validator chain or NULL
+        * @return Tx_Extbase_Validation_Validator_ConjunctionValidator The validator conjunction or NULL
+        * @internal
         */
-       public function getBaseValidatorChain($dataType) {
-               if (!isset($this->baseValidatorChains[$dataType])) {
-                       $this->baseValidatorChains[$dataType] = $this->buildBaseValidatorChain($dataType);
+       public function getBaseValidatorConjunction($dataType) {
+               if (!isset($this->baseValidatorConjunctions[$dataType])) {
+                       $this->baseValidatorConjunctions[$dataType] = $this->buildBaseValidatorConjunction($dataType);
                }
-               return $this->baseValidatorChains[$dataType];
+               return $this->baseValidatorConjunctions[$dataType];
        }
 
        /**
         * Detects and registers any additional validators for arguments which were specified in the @validate
         * annotations of a method.
         *
-        * @return array Validator Chains
+        * @return array Validator Conjunctions
         * @internal
         */
-       public function buildMethodArgumentsValidatorChains($className, $methodName) {
-               $validatorChains = array();
-               
+       public function buildMethodArgumentsValidatorConjunctions($className, $methodName) {
+               $validatorConjunctions = array();
+
                $methodTagsValues = $this->reflectionService->getMethodTagsValues($className, $methodName);
                if (isset($methodTagsValues['validate'])) {
                        foreach ($methodTagsValues['validate'] as $validateValue) {
@@ -119,38 +121,38 @@ class Tx_Extbase_Validation_ValidatorResolver {
                                        $newValidator = $this->createValidator($validatorName, $validatorOptions);
                                        if ($newValidator === NULL) throw new Tx_Extbase_Validation_Exception_NoSuchValidator('Invalid validate annotation in ' . $className . '->' . $methodName . '(): Could not resolve class name for  validator "' . $validatorName . '".', 1239853109);
 
-                                       if  (isset($validatorChains[$argumentName])) {
-                                               $validatorChains[$argumentName]->addValidator($newValidator);
+                                       if  (isset($validatorConjunctions[$argumentName])) {
+                                               $validatorConjunctions[$argumentName]->addValidator($newValidator);
                                        } else {
-                                               $validatorChains[$argumentName] = $this->createValidator('Chain');
-                                               $validatorChains[$argumentName]->addValidator($newValidator);
+                                               $validatorConjunctions[$argumentName] = $this->createValidator('Conjunction');
+                                               $validatorConjunctions[$argumentName]->addValidator($newValidator);
                                        }
                                }
                        }
                }
-               return $validatorChains;
+               return $validatorConjunctions;
        }
 
        /**
-        * Builds a base validator chain for the given data type.
+        * Builds a base validator conjunction for the given data type.
         *
         * The base validation rules are those which were declared directly in a class (typically
         * a model) through some @validate annotations.
         *
         * Additionally, if a custom validator was defined for the class in question, it will be added
-        * to the end of the chain. A custom validator is found if it follows the naming convention
+        * to the end of the conjunction. A custom validator is found if it follows the naming convention
         * "[FullyqualifiedModelClassName]Validator".
         *
-        * @param string $dataType The data type to build the validation chain for. Usually the fully qualified object name.
-        * @return Tx_Extbase_Validation_Validator_ChainValidator The validator chain or NULL
+        * @param string $dataType The data type to build the validation conjunction for. Usually the fully qualified object name.
+        * @return Tx_Extbase_Validation_Validator_ConjunctionValidator The validator conjunction or NULL
         */
-       protected function buildBaseValidatorChain($dataType) {
-               $validatorChain = t3lib_div::makeInstance('Tx_Extbase_Validation_Validator_ChainValidator');
+       protected function buildBaseValidatorConjunction($dataType) {
+               $validatorConjunction = t3lib_div::makeInstance('Tx_Extbase_Validation_Validator_ConjunctionValidator');
 
                $customValidatorObjectName = $this->resolveValidatorObjectName($dataType);
 
                if ($customValidatorObjectName !== FALSE) {
-                       $validatorChain->addValidator(t3lib_div::makeInstance($customValidatorObjectName));
+                       $validatorConjunction->addValidator(t3lib_div::makeInstance($customValidatorObjectName));
                }
                if (class_exists($dataType)) {
                        $validatorCount = 0;
@@ -180,10 +182,10 @@ class Tx_Extbase_Validation_ValidatorResolver {
                                        }
                                }
                        }
-                       if ($validatorCount > 0) $validatorChain->addValidator($objectValidator);
+                       if ($validatorCount > 0) $validatorConjunction->addValidator($objectValidator);
                }
 
-               return $validatorChain;
+               return $validatorConjunction;
        }
 
        /**
@@ -195,8 +197,8 @@ class Tx_Extbase_Validation_ValidatorResolver {
         */
        protected function resolveValidatorObjectName($validatorName) {
                if (class_exists($validatorName . 'Validator')) return $validatorName . 'Validator';
-               
-               $possibleClassName = 'Tx_Extbase_Validation_Validator_' . $this->unifyDataType($validatorName) . 'Validator';           
+
+               $possibleClassName = 'Tx_Extbase_Validation_Validator_' . $this->unifyDataType($validatorName) . 'Validator';
                if (class_exists($possibleClassName)) return $possibleClassName;
 
                return FALSE;