ExtBase
authorJochen Rau <j.rau@web.de>
Thu, 26 Mar 2009 13:36:21 +0000 (13:36 +0000)
committerJochen Rau <j.rau@web.de>
Thu, 26 Mar 2009 13:36:21 +0000 (13:36 +0000)
* Changed the folder structure: moved all mvc related files to the MVC folder

45 files changed:
typo3/sysext/extbase/Classes/Controller/AbstractController.php [deleted file]
typo3/sysext/extbase/Classes/Controller/ActionController.php [deleted file]
typo3/sysext/extbase/Classes/Controller/Argument.php [deleted file]
typo3/sysext/extbase/Classes/Controller/Arguments.php [deleted file]
typo3/sysext/extbase/Classes/Controller/ControllerInterface.php [deleted file]
typo3/sysext/extbase/Classes/Controller/DefaultController.php [deleted file]
typo3/sysext/extbase/Classes/MVC/Controller/AbstractController.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Controller/Argument.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Controller/Arguments.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Controller/ControllerInterface.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Controller/DefaultController.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/MVC/Request.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Response.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/AbstractView.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/MVC/View/DefaultView.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/MVC/View/EmptyView.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/AbstractHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/ConvertHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/ForHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/LinkHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/TranslateHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/TemplateView.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/View/ViewInterface.php [new file with mode: 0644]
typo3/sysext/extbase/Classes/MVC/Web/Request.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/MVC/Web/Response.php [new file with mode: 0755]
typo3/sysext/extbase/Classes/Request.php [deleted file]
typo3/sysext/extbase/Classes/Response.php [deleted file]
typo3/sysext/extbase/Classes/View/AbstractView.php [deleted file]
typo3/sysext/extbase/Classes/View/DefaultView.php [deleted file]
typo3/sysext/extbase/Classes/View/EmptyView.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/AbstractHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/ConvertHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/ForHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/HelperInterface.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/LinkHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/TranslateHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/Helper/URIHelper.php [deleted file]
typo3/sysext/extbase/Classes/View/TemplateView.php [deleted file]
typo3/sysext/extbase/Classes/View/ViewInterface.php [deleted file]
typo3/sysext/extbase/Classes/Web/Request.php [deleted file]
typo3/sysext/extbase/Classes/Web/Response.php [deleted file]
typo3/sysext/extbase/class.tx_extbase_dispatcher.php

diff --git a/typo3/sysext/extbase/Classes/Controller/AbstractController.php b/typo3/sysext/extbase/Classes/Controller/AbstractController.php
deleted file mode 100755 (executable)
index d3523ee..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * An abstract base class for Controllers
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-abstract class Tx_ExtBase_Controller_AbstractController implements Tx_ExtBase_Controller_ControllerInterface {
-
-       /**
-        * @var string Key of the extension this controller belongs to
-        */
-       protected $extensionName;
-
-       /**
-        * Contains the settings of the current extension
-        *
-        * @var array
-        */
-       protected $settings;
-
-       /**
-        * @var Tx_ExtBase_Request The current request
-        */
-       protected $request;
-
-       /**
-        * @var Tx_ExtBase_Response The response which will be returned by this action controller
-        */
-       protected $response;
-
-       /**
-        * @var Tx_ExtBase_Controller_Arguments Arguments passed to the controller
-        */
-       protected $arguments;
-
-       /**
-        * Actions that schould not be cached (changes the invocated dispatcher to a USER_INT cObject)
-        * @var array
-        */
-       protected $nonCachableActions = array();
-
-       /**
-        * Constructs the controller.
-        *
-        * @param F3_FLOW3_Object_FactoryInterface $objectFactory A reference to the Object Factory
-        * @param F3_FLOW3_Package_ManagerInterface $packageManager A reference to the Package Manager
-        */
-       public function __construct() {
-               // SK: Set $this->extensionName, could be done the same way as it is done in Fluid
-               $this->arguments = t3lib_div::makeInstance('Tx_ExtBase_Controller_Arguments');
-       }
-
-       /**
-        * Injects the settings of the extension.
-        *
-        * @param array $settings Settings container of the current extension
-        * @return void
-        */
-       public function injectSettings(array $settings) {
-               $this->settings = $settings;
-       }
-
-       /**
-        * Processes a general request. The result can be returned by altering the given response.
-        *
-        * @param Tx_ExtBase_Request $request The request object
-        * @param Tx_ExtBase_Response $response The response, modified by this handler
-        * @return void
-        * @throws Tx_ExtBase_Exception_UnsupportedRequestType if the controller doesn't support the current request type
-        */
-       public function processRequest(Tx_ExtBase_Request $request, Tx_ExtBase_Response $response) {
-               $this->request = $request;
-               $this->request->setDispatched(TRUE);
-               $this->response = $response;
-
-               $this->initializeArguments();
-               $this->mapRequestArgumentsToLocalArguments();
-       }
-
-       /**
-        * Initializes (registers / defines) arguments of this controller.
-        *
-        * Override this method to add arguments which can later be accessed
-        * by the action methods.
-        *
-        * @return void
-        */
-       protected function initializeArguments() {
-       }
-
-       /**
-        * Forwards the request to another controller.
-        *
-        * @return void
-        * @throws Tx_ExtBase_Exception_StopAction
-        */
-       public function forward($actionName, $controllerName = NULL, $extensionName = NULL, Tx_ExtBase_Controller_Arguments $arguments = NULL) {
-               $this->request->setDispatched(FALSE);
-               $this->request->setControllerActionName($actionName);
-               if ($controllerName !== NULL) $this->request->setControllerName($controllerName);
-               if ($extensionName !== NULL) $this->request->setExtensionName($extensionName);
-               if ($arguments !== NULL) $this->request->setArguments($arguments);
-               throw new Tx_ExtBase_Exception_StopAction();
-       }
-
-       /**
-        * Redirects the web request to another uri.
-        *
-        * NOTE: This method only supports web requests and will thrown an exception if used with other request types.
-        *
-        * @param mixed $uri Either a string representation of a URI or a F3_FLOW3_Property_DataType_URI object
-        * @param integer $delay (optional) The delay in seconds. Default is no delay.
-        * @param integer $statusCode (optional) The HTTP status code for the redirect. Default is "303 See Other"
-        * @throws Tx_ExtBase_Exception_UnsupportedRequestType If the request is not a web request
-        * @throws Tx_ExtBase_Exception_StopAction
-        */
-       public function redirect($uri, $delay = 0, $statusCode = 303) {
-               if (!$this->request instanceof Tx_ExtBase_Web_Request) throw new Tx_ExtBase_Exception_UnsupportedRequestType('redirect() only supports web requests.', 1220539734);
-
-               $escapedUri = htmlentities($uri, ENT_QUOTES, 'utf-8');
-               $this->response->setContent('<html><head><meta http-equiv="refresh" content="' . intval($delay) . ';url=' . $escapedUri . '"/></head></html>');
-               $this->response->setStatus($statusCode);
-               throw new Tx_ExtBase_Exception_StopAction();
-       }
-
-       /**
-        * Sends the specified HTTP status immediately.
-        *
-        * NOTE: This method only supports web requests and will thrown an exception if used with other request types.
-        *
-        * @param integer $statusCode The HTTP status code
-        * @param string $statusMessage A custom HTTP status message
-        * @param string $content Body content which further explains the status
-        * @throws Tx_ExtBase_Exception_UnsupportedRequestType If the request is not a web request
-        * @throws Tx_ExtBase_Exception_StopAction
-        */
-       public function throwStatus($statusCode, $statusMessage = NULL, $content = NULL) {
-               if (!$this->request instanceof Tx_ExtBase_Web_Request) throw new Tx_ExtBase_Exception_UnsupportedRequestType('throwStatus() only supports web requests.', 1220539739);
-
-               $this->response->setStatus($statusCode, $statusMessage);
-               if ($content === NULL) $content = $this->response->getStatus();
-               $this->response->setContent($content);
-               throw new Tx_ExtBase_Exception_StopAction();
-       }
-
-       /**
-        * Maps arguments delivered by the request object to the local controller arguments.
-        *
-        * @return void
-        */
-       protected function mapRequestArgumentsToLocalArguments() {
-               $requestArguments = $this->request->getArguments();
-               foreach ($this->arguments as $argument) {
-                       $argumentName = $argument->getName();
-                       $argumentShortName = $argument->getShortName();
-                       if (array_key_exists($argumentName, $requestArguments)) {
-                               $argument->setValue($requestArguments[$argumentName]);
-                       } elseif ($argumentShortName !== NULL && array_key_exists($argumentShortName, $requestArguments)) {
-                               $argument->setValue($requestArguments[$argumentShortName]);
-                       }
-               }
-       }
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Controller/ActionController.php b/typo3/sysext/extbase/Classes/Controller/ActionController.php
deleted file mode 100644 (file)
index 6210a98..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A multi action controller
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-// SK: fill initializeArguments() so it parses the arguments for a given view. We need to discuss how this parsing can be
-// SK: done effectively.
-class Tx_ExtBase_Controller_ActionController extends Tx_ExtBase_Controller_AbstractController {
-
-       /**
-        * @var boolean If initializeView() should be called on an action invocation.
-        */
-       protected $initializeView = TRUE;
-
-       /**
-        * @var Tx_ExtBase_View_AbstractView By default a view with the same name as the current action is provided. Contains NULL if none was found.
-        */
-       protected $view = NULL;
-
-       /**
-        * By default a matching view will be resolved. If this property is set, automatic resolving is disabled and the specified object is used instead.
-        * @var string
-        */
-       protected $defaultViewObjectName = NULL;
-
-       /**
-        * Pattern after which the view object name is built
-        *
-        * @var string
-        */
-       // SK: Decision: Do we support "format"?
-       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller@action';
-
-       /**
-        * Name of the action method
-        * @var string
-        */
-       protected $actionMethodName = 'indexAction';
-
-       /**
-        * Handles a request. The result output is returned by altering the given response.
-        *
-        * @param Tx_ExtBase_Request $request The request object
-        * @param Tx_ExtBase_Response $response The response, modified by this handler
-        * @return void
-        */
-       public function processRequest(Tx_ExtBase_Request $request, Tx_ExtBase_Response $response) {
-               $this->request = $request;
-               $this->request->setDispatched(TRUE);
-               $this->response = $response;
-
-               $this->actionMethodName = $this->resolveActionMethodName();
-               $this->initializeArguments();
-               $this->mapRequestArgumentsToLocalArguments();
-               if ($this->initializeView) $this->initializeView();
-               $this->initializeAction();
-               $this->callActionMethod();
-       }
-
-       /**
-        * Determines the action method and assures that the method exists.
-        *
-        * @return string The action method name
-        * @throws Tx_ExtBase_Exception_NoSuchAction if the action specified in the request object does not exist (and if there's no default action either).
-        */
-       protected function resolveActionMethodName() {
-               $actionMethodName = $this->request->getControllerActionName() . 'Action';
-               if (!method_exists($this, $actionMethodName)) throw new Tx_ExtBase_Exception_NoSuchAction('An action "' . $actionMethodName . '" does not exist in controller "' . get_class($this) . '".', 1186669086);
-               return $actionMethodName;
-       }
-
-       /**
-        * Returns TRUE if the given action (a name of an action like 'show'; without
-        * trailing 'Action') should be cached, otherwise it returns FALSE.
-        *
-        * @param string $actionName
-        * @return void
-        * @author Jochen Rau <jochen.rau@typoplanet.de>
-        */
-       public function isCachableAction($actionName) {
-                return !in_array($actionName, $this->nonCachableActions);
-       }
-
-       /**
-        * Calls the specified action method and passes the arguments.
-        * If the action returns a string, it is appended to the content in the
-        * response object.
-        *
-        * @param string $actionMethodName Name of the action method
-        * @return void
-        */
-       protected function callActionMethod() {
-               $actionResult = call_user_func_array(array($this, $this->actionMethodName), array());
-               if ($actionResult === NULL && $this->view instanceof Tx_ExtBase_View_ViewInterface) {
-                       $this->response->appendContent($this->view->render());
-               } elseif (is_string($actionResult) && strlen($actionResult) > 0) {
-                       $this->response->appendContent($actionResult);
-               }
-       }
-
-       /**
-        * Prepares a view for the current action and stores it in $this->view.
-        * By default, this method tries to locate a view with a name matching
-        * the current action.
-        *
-        * @return void
-        */
-       protected function initializeView() {
-               $viewObjectName = ($this->defaultViewObjectName === NULL) ? $this->resolveViewObjectName() : $this->defaultViewObjectName;
-               if (!class_exists($viewObjectName)) $viewObjectName = 'Tx_ExtBase_View_EmptyView';
-
-               $this->view = t3lib_div::makeInstance($viewObjectName);
-               $this->view->setRequest($this->request);
-       }
-
-       /**
-        * Determines the fully qualified view object name.
-        *
-        * @return string The fully qualified view object name
-        */
-       protected function resolveViewObjectName() {
-               $possibleViewName = $this->viewObjectNamePattern;
-               $extensionName = $this->request->getExtensionName();
-               $possibleViewName = str_replace('@extension', $extensionName, $possibleViewName);
-               $possibleViewName = str_replace('@controller', $this->request->getControllerName(), $possibleViewName);
-               $possibleViewName = str_replace('@action', ucfirst($this->request->getControllerActionName()), $possibleViewName);
-               return $possibleViewName;
-       }
-
-       /**
-        * Initializes the controller before invoking an action method.
-        *
-        * Override this method to solve tasks which all actions have in
-        * common.
-        *
-        * @return void
-        */
-       protected function initializeAction() {
-       }
-
-       /**
-        * The default action of this controller.
-        *
-        * This method should always be overridden by the concrete action
-        * controller implementation.
-        *
-        * @return void
-        */
-       protected function indexAction() {
-               return 'No index action has been implemented yet for this controller.';
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Controller/Argument.php b/typo3/sysext/extbase/Classes/Controller/Argument.php
deleted file mode 100644 (file)
index 4c054a9..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A controller argument
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_Controller_Argument {
-
-       /**
-        * Name of this argument
-        * @var string
-        */
-       protected $name = '';
-
-       /**
-        * Short name of this argument
-        * @var string
-        */
-       protected $shortName = NULL;
-
-       /**
-        * Data type of this argument's value
-        * @var string
-        */
-       protected $dataType = 'Text';
-
-       /**
-        * TRUE if this argument is required
-        * @var boolean
-        */
-       protected $isRequired = FALSE;
-
-       /**
-        * Actual value of this argument
-        * @var object
-        */
-       protected $value = NULL;
-
-       /**
-        * The argument is valid
-        * @var boolean
-        */
-       protected $isValid = NULL;
-
-       /**
-        * Any error (Tx_ExtBase_Error_Error) that occured while initializing this argument (e.g. a mapping error)
-        * @var array
-        */
-       protected $errors = array();
-
-       /**
-        * The property validator for this argument
-        * @var Tx_ExtBase_Validation_Validator_ValidatorInterface
-        */
-       protected $validator = NULL;
-
-       /**
-        * The property validator for this arguments datatype
-        * @var Tx_ExtBase_Validation_Validator_ValidatorInterface
-        */
-       // TODO Remove DatatypeValidator
-       protected $datatypeValidator = NULL;
-
-       /**
-        * Uid for the argument, if it has one
-        * @var string
-        */
-       protected $uid = NULL;
-
-       /**
-        * Constructs this controller argument
-        *
-        * @param string $name Name of this argument
-        * @param string $dataType The data type of this argument
-        * @throws InvalidArgumentException if $name is not a string or empty
-        */
-       public function __construct($name, $dataType = 'Text') {
-               if (!is_string($name) || strlen($name) < 1) throw new InvalidArgumentException('$name must be of type string, ' . gettype($name) . ' given.', 1187951688);
-               $this->name = $name;
-               if (is_array($dataType)) {
-                       $this->setNewValidatorChain($dataType);
-               } else {
-                       $this->setDataType($dataType);
-               }
-       }
-
-       /**
-        * Returns the name of this argument
-        *
-        * @return string This argument's name
-        */
-       public function getName() {
-               return $this->name;
-       }
-
-       /**
-        * Sets the short name of this argument.
-        *
-        * @param string $shortName A "short name" - a single character
-        * @return Tx_ExtBase_Controller_Argument $this
-        * @throws InvalidArgumentException if $shortName is not a character
-        */
-       public function setShortName($shortName) {
-               if ($shortName !== NULL && (!is_string($shortName) || strlen($shortName) != 1)) throw new InvalidArgumentException('$shortName must be a single character or NULL', 1195824959);
-               $this->shortName = $shortName;
-               return $this;
-       }
-
-       /**
-        * Returns the short name of this argument
-        *
-        * @return string This argument's short name
-        */
-       public function getShortName() {
-               return $this->shortName;
-       }
-
-       /**
-        * Sets the data type of this argument's value
-        *
-        * @param string $dataType: Name of the data type
-        * @return Tx_ExtBase_Controller_Argument $this
-        */
-       public function setDataType($dataType) {
-               $this->dataType = ($dataType != '' ? $dataType : 'Text');
-               // TODO Make validator path and class names configurable
-               $dataTypeValidatorClassName = 'Tx_ExtBase_Validation_Validator_' . $this->dataType;
-               $classFilePathAndName = t3lib_extMgm::extPath('extbase') . 'Classes/Validation/Validator/' . $this->dataType . '.php';
-               if (isset($classFilePathAndName) && file_exists($classFilePathAndName)) {                       
-                       require_once($classFilePathAndName);
-                       $this->datatypeValidator = t3lib_div::makeInstance($dataTypeValidatorClassName);
-               }
-               return $this;
-       }
-
-       /**
-        * Returns the data type of this argument's value
-        *
-        * @return string The data type
-        */
-       public function getDataType() {
-               return $this->dataType;
-       }
-
-       /**
-        * Marks this argument to be required
-        *
-        * @param boolean $required TRUE if this argument should be required
-        * @return Tx_ExtBase_Controller_Argument $this
-        */
-       public function setRequired($required) {
-               $this->isRequired = $required;
-               return $this;
-       }
-
-       /**
-        * Returns TRUE if this argument is required
-        *
-        * @return boolean TRUE if this argument is required
-        */
-       public function isRequired() {
-               return $this->isRequired;
-       }
-
-       /**
-        * Sets the value of this argument.
-        *
-        * @param mixed $value: The value of this argument
-        * @return Tx_ExtBase_Controller_Argument $this
-        * @throws Tx_ExtBase_Exception_InvalidArgumentValue if the argument is not a valid object of type $dataType
-        */
-       public function setValue($value) {
-               if ($this->isValidValueForThisArgument($value)) {
-                       $this->value = $value;
-               }
-               return $this;
-       }
-
-       /**
-        * Returns the value of this argument
-        *
-        * @return object The value of this argument - if none was set, NULL is returned
-        */
-       public function getValue() {
-               return $this->value;
-       }
-
-       /**
-        * Checks if this argument has a value set.
-        *
-        * @return boolean TRUE if a value was set, otherwise FALSE
-        */
-       public function isValue() {
-               return $this->value !== NULL;
-       }
-
-       /**
-        * undocumented function
-        *
-        * @param string $value 
-        * @return boolean TRUE if the value is valid for this argument, otherwise FALSE
-        */
-       protected function isValidValueForThisArgument($value) {
-               $isValid = TRUE;
-               $validatorErrors = t3lib_div::makeInstance('Tx_ExtBase_Validation_Errors');
-               // TODO use only Validator; do not distinguish between Validator and DatatypeValidator
-               if ($this->getValidator() !== NULL) {
-                       $isValid &= $this->getValidator()->isValid($value, $validatorErrors);
-               } elseif ($this->getDatatypeValidator() !== NULL) {
-                       $isValid = $this->getDatatypeValidator()->isValid($value, $validatorErrors);                    
-               } else {
-                       throw new Tx_ExtBase_Validation_Exception_NoValidatorFound('No appropriate validator for the argument "' . $this->getName() . '" was found.', 1235748909);
-               }
-               if (!$isValid) {
-                       foreach ($validatorErrors as $error) {
-                               $this->addError($error);
-                       }
-               }
-               $this->isValid = $isValid;
-               return (boolean)$isValid;
-       }
-
-       /**
-        * Returns TRUE when the argument is valid
-        *
-        * @return boolean TRUE if the argument is valid
-        */
-       public function isValid() {
-               return $this->isValid;
-       }
-       
-       /**
-        * Add an initialization error (e.g. a mapping error)
-        *
-        * @param string An error text
-        * @return void
-        */
-       public function addError($error) {
-               $this->errors[] = $error;
-       }
-
-       /**
-        * Get all initialization errors
-        *
-        * @return array An array containing Tx_ExtBase_Error_Error objects
-        * @see addError(Tx_ExtBase_Error_Error $error)
-        */
-       public function getErrors() {
-               return $this->errors;
-       }
-
-       /**
-        * Set an additional validator
-        *
-        * @param string Class name of a validator
-        * @return Tx_ExtBase_MVC_Controller_Argument Returns $this (used for fluent interface)
-        */
-       public function setValidator($className) {
-               $this->validator = t3lib_div::makeInstance($className);
-               return $this;
-       }
-
-       /**
-        * Returns the set validator
-        *
-        * @return Tx_ExtBase_Validation_Validator_ValidatorInterface The set validator, NULL if none was set
-        */
-       public function getValidator() {
-               return $this->validator;
-       }
-
-       /**
-        * Returns the set datatype validator
-        *
-        * @return Tx_ExtBase_Validation_Validator_ValidatorInterface The set datatype validator
-        */
-       public function getDatatypeValidator() {
-               return $this->datatypeValidator;
-       }
-       
-       /**
-        * Create and set a validator chain
-        *
-        * @param array Object names of the validators
-        * @return Tx_ExtBase_MVC_Controller_Argument Returns $this (used for fluent interface)
-        */
-       public function setNewValidatorChain(array $validators) {
-               $this->validator = t3lib_div::makeInstance('Tx_ExtBase_Validation_Validator_ChainValidator');
-               foreach ($validators as $validator) {
-                       if (is_array($validator)) {
-                               $objectName = 'Tx_ExtBase_Validation_Validator_' . $validator[0];
-                               $this->validator->addValidator(new $objectName);
-                       } else {
-                               $objectName = 'Tx_ExtBase_Validation_Validator_' . $validator;
-                               $this->validator->addValidator(t3lib_div::makeInstance($objectName));
-                       }
-               }
-               return $this;
-       }
-       
-       /**
-        * Set the uid for the argument.
-        *
-        * @param string $uid The uid for the argument.
-        * @return void
-        */
-       public function setUid($uid) {
-               $this->uid = $uid;
-       }
-
-       /**
-        * Get the uid of the argument, if it has one.
-        *
-        * @return string Uid of the argument. If none set, returns NULL.
-        */
-       public function getUid() {
-               return $this->uid;
-       }
-
-       /**
-        * Returns a string representation of this argument's value
-        *
-        * @return string
-        */
-       public function __toString() {
-               return (string)$this->value;
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Controller/Arguments.php b/typo3/sysext/extbase/Classes/Controller/Arguments.php
deleted file mode 100644 (file)
index ec00655..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A composite of controller arguments
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_Controller_Arguments extends ArrayObject {
-
-       /**
-        * @var array Names of the arguments contained by this object
-        */
-       protected $argumentNames = array();
-
-       /**
-        * Adds or replaces the argument specified by $value. The argument's name is taken from the
-        * argument object itself, therefore the $offset does not have any meaning in this context.
-        *
-        * @param mixed $offset Offset - not used here
-        * @param mixed $value The argument
-        * @return void
-        * @throws InvalidArgumentException if the argument is not a valid Controller Argument object
-        */
-       public function offsetSet($offset, $value) {
-               if (!$value instanceof Tx_ExtBase_Controller_Argument) throw new InvalidArgumentException('Controller arguments must be valid Tx_ExtBase_Controller_Argument objects.', 1187953786);
-
-               $argumentName = $value->getName();
-               parent::offsetSet($argumentName, $value);
-               $this->argumentNames[$argumentName] = TRUE;
-       }
-
-       /**
-        * Sets an argument, aliased to offsetSet()
-        *
-        * @param mixed $value The value
-        * @return void
-        * @throws InvalidArgumentException if the argument is not a valid Controller Argument object
-        */
-       public function append($value) {
-               if (!$value instanceof Tx_ExtBase_Controller_Argument) throw new InvalidArgumentException('Controller arguments must be valid Tx_ExtBase_Controller_Argument objects.', 1187953786);
-               $this->offsetSet(NULL, $value);
-       }
-
-       /**
-        * Unsets an argument
-        *
-        * @param mixed $offset Offset
-        * @return void
-        */
-       public function offsetUnset($offset) {
-               $translatedOffset = $this->translateToLongArgumentName($offset);
-               parent::offsetUnset($translatedOffset);
-
-               unset($this->argumentNames[$translatedOffset]);
-               if ($offset != $translatedOffset) {
-                       unset($this->argumentShortNames[$offset]);
-               }
-       }
-
-       /**
-        * Returns whether the requested index exists
-        *
-        * @param mixed $offset Offset
-        * @return boolean
-        */
-       public function offsetExists($offset) {
-               $translatedOffset = $this->translateToLongArgumentName($offset);
-               return parent::offsetExists($translatedOffset);
-       }
-
-       /**
-        * Returns the value at the specified index
-        *
-        * @param mixed $offset Offset
-        * @return Tx_ExtBase_Controller_Argument The requested argument object
-        * @throws Tx_ExtBase_Exception_NoSuchArgument if the argument does not exist
-        */
-       public function offsetGet($offset) {
-               $translatedOffset = $this->translateToLongArgumentName($offset);
-               if ($translatedOffset === '') throw new Tx_ExtBase_Exception_NoSuchArgument('The argument "' . $offset . '" does not exist.', 1216909923);
-               return parent::offsetGet($translatedOffset);
-       }
-
-       /**
-        * Creates, adds and returns a new controller argument to this composite object.
-        * If an argument with the same name exists already, it will be replaced by the
-        * new argument object.
-        *
-        * @param string $name Name of the argument
-        * @param string $dataType Name of one of the built-in data types
-        * @param boolean $isRequired TRUE if this argument should be marked as required
-        * @return Tx_ExtBase_Controller_Argument The new argument
-        */
-       public function addNewArgument($name, $dataType = 'Text', $isRequired = FALSE) {
-               $argument = new Tx_ExtBase_Controller_Argument($name, $dataType);
-               $argument->setRequired($isRequired);
-               $this->addArgument($argument);
-               return $argument;
-       }
-
-       /**
-        * Adds the specified controller argument to this composite object.
-        * If an argument with the same name exists already, it will be replaced by the
-        * new argument object.
-        *
-        * Note that the argument will be cloned, not referenced.
-        *
-        * @param Tx_ExtBase_Controller_Argument $argument The argument to add
-        * @return void
-        */
-       public function addArgument(Tx_ExtBase_Controller_Argument $argument) {
-               $this->offsetSet(NULL, $argument);
-       }
-
-       /**
-        * Returns an argument specified by name
-        *
-        * @param string $argumentName Name of the argument to retrieve
-        * @return Tx_ExtBase_Controller_Argument
-        * @throws Tx_ExtBase_Exception_NoSuchArgument
-        */
-       public function getArgument($argumentName) {
-               if (!$this->offsetExists($argumentName)) throw new Tx_ExtBase_Exception_NoSuchArgument('An argument "' . $argumentName . '" does not exist.', 1195815178);
-               return $this->offsetGet($argumentName);
-       }
-
-       /**
-        * Checks if an argument with the specified name exists
-        *
-        * @param string $argumentName Name of the argument to check for
-        * @return boolean TRUE if such an argument exists, otherwise FALSE
-        * @see offsetExists()
-        */
-       public function hasArgument($argumentName) {
-               return $this->offsetExists($argumentName);
-       }
-
-       /**
-        * Returns the names of all arguments contained in this object
-        *
-        * @return array Argument names
-        */
-       public function getArgumentNames() {
-               return array_keys($this->argumentNames);
-       }
-
-       /**
-        * Returns the short names of all arguments contained in this object that have one.
-        *
-        * @return array Argument short names
-        */
-       public function getArgumentShortNames() {
-               $argumentShortNames = array();
-               foreach ($this as $argument) {
-                       $argumentShortNames[$argument->getShortName()] = TRUE;
-               }
-               return array_keys($argumentShortNames);
-       }
-
-       /**
-        * Magic setter method for the argument values. Each argument
-        * value can be set by just calling the setArgumentName() method.
-        *
-        * @param string $methodName Name of the method
-        * @param array $arguments Method arguments
-        * @return void
-        */
-       public function __call($methodName, array $arguments) {
-               if (substr($methodName, 0, 3) !== 'set') throw new LogicException('Unknown method "' . $methodName . '".', 1210858451);
-
-               $firstLowerCaseArgumentName = $this->translateToLongArgumentName(strtolower($methodName{3}) . substr($methodName, 4));
-               $firstUpperCaseArgumentName = $this->translateToLongArgumentName(ucfirst(substr($methodName, 3)));
-
-               if (in_array($firstLowerCaseArgumentName, $this->getArgumentNames())) {
-                       $argument = parent::offsetGet($firstLowerCaseArgumentName);
-                       $argument->setValue($arguments[0]);
-               } elseif (in_array($firstUpperCaseArgumentName, $this->getArgumentNames())) {
-                       $argument = parent::offsetGet($firstUpperCaseArgumentName);
-                       $argument->setValue($arguments[0]);
-               }
-       }
-
-       /**
-        * Translates a short argument name to its corresponding long name. If the
-        * specified argument name is a real argument name already, it will be returned again.
-        *
-        * If an argument with the specified name or short name does not exist, an empty
-        * string is returned.
-        *
-        * @param string argument name
-        * @return string long argument name or empty string
-        */
-       protected function translateToLongArgumentName($argumentName) {
-
-               if (in_array($argumentName, $this->getArgumentNames())) return $argumentName;
-
-               foreach ($this as $argument) {
-                       if ($argumentName === $argument->getShortName()) return $argument->getName();
-               }
-               return '';
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Controller/ControllerInterface.php b/typo3/sysext/extbase/Classes/Controller/ControllerInterface.php
deleted file mode 100644 (file)
index 870d795..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * Interface for controllers
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-interface Tx_ExtBase_Controller_ControllerInterface {
-
-       /**
-        * Sets / injects the settings of the package this controller belongs to.
-        *
-        * @param array $settings Settings container of the current package
-        * @return void
-        */
-       public function injectSettings(array $settings);
-       
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Controller/DefaultController.php b/typo3/sysext/extbase/Classes/Controller/DefaultController.php
deleted file mode 100755 (executable)
index 37f5d56..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A Special Case of a Controller: If no controller could be resolved or no
- * controller has been specified in the request, this controller is chosen.
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_Controller_DefaultController extends Tx_ExtBase_Controller_ActionController {
-
-       /**
-        * @var Tx_ExtBase_View_DefaultView
-        */
-       protected $defaultView;
-
-       /**
-        * Injects the default view
-        *
-        * @param Tx_ExtBase_View_DefaultView $defaultView The default view
-        * @return void
-        */
-       public function injectDefaultView(Tx_ExtBase_View_DefaultView $defaultView) {
-               $this->defaultView = $defaultView;
-       }
-
-       /**
-        * Processes a generic request and returns a response
-        *
-        * @param Tx_ExtBase_Request $request: The request
-        * @param Tx_ExtBase_Response $response: The response
-        */
-       public function processRequest(Tx_ExtBase_Request $request, Tx_ExtBase_Response $response) {
-               $request->setDispatched(TRUE);
-               switch (get_class($request)) {
-                       case 'Tx_ExtBase_Web_Request' :
-                               $this->processWebRequest($request, $response);
-                               break;
-                       default :
-                               $response->setContent(
-                                       "\nWelcome to TYPO3!\n\n" .
-                                       "This is the default view of the TYPO3 MVC object. You see this message because no \n" .
-                                       "other view is available. Please refer to the Developer's Guide for more information \n" .
-                                       "how to create and configure one.\n\n" .
-                                       "Have fun! The TYPO3 Development Team\n"
-                               );
-               }
-       }
-
-       /**
-        * Processes a web request and returns a response
-        *
-        * @param Tx_ExtBase_Web_Request $request: The request
-        * @param Tx_ExtBase_Web_Response $response: The response
-        */
-       protected function processWebRequest(Tx_ExtBase_Web_Request $request, Tx_ExtBase_Web_Response $response) {
-               $this->defaultView->setRequest($request);
-               $response->setContent($this->defaultView->render());
-       }
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/AbstractController.php b/typo3/sysext/extbase/Classes/MVC/Controller/AbstractController.php
new file mode 100755 (executable)
index 0000000..dacf07a
--- /dev/null
@@ -0,0 +1,191 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * An abstract base class for Controllers
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+abstract class Tx_ExtBase_MVC_Controller_AbstractController implements Tx_ExtBase_MVC_Controller_ControllerInterface {
+
+       /**
+        * @var string Key of the extension this controller belongs to
+        */
+       protected $extensionName;
+
+       /**
+        * Contains the settings of the current extension
+        *
+        * @var array
+        */
+       protected $settings;
+
+       /**
+        * @var Tx_ExtBase_MVC_Request The current request
+        */
+       protected $request;
+
+       /**
+        * @var Tx_ExtBase_MVC_Response The response which will be returned by this action controller
+        */
+       protected $response;
+
+       /**
+        * @var Tx_ExtBase_MVC_Controller_Arguments Arguments passed to the controller
+        */
+       protected $arguments;
+
+       /**
+        * Actions that schould not be cached (changes the invocated dispatcher to a USER_INT cObject)
+        * @var array
+        */
+       protected $nonCachableActions = array();
+
+       /**
+        * Constructs the controller.
+        *
+        * @param F3_FLOW3_Object_FactoryInterface $objectFactory A reference to the Object Factory
+        * @param F3_FLOW3_Package_ManagerInterface $packageManager A reference to the Package Manager
+        */
+       public function __construct() {
+               // SK: Set $this->extensionName, could be done the same way as it is done in Fluid
+               $this->arguments = t3lib_div::makeInstance('Tx_ExtBase_MVC_Controller_Arguments');
+       }
+
+       /**
+        * Injects the settings of the extension.
+        *
+        * @param array $settings Settings container of the current extension
+        * @return void
+        */
+       public function injectSettings(array $settings) {
+               $this->settings = $settings;
+       }
+
+       /**
+        * 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 this handler
+        * @return void
+        * @throws Tx_ExtBase_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) {
+               $this->request = $request;
+               $this->request->setDispatched(TRUE);
+               $this->response = $response;
+
+               $this->initializeArguments();
+               $this->mapRequestArgumentsToLocalArguments();
+       }
+
+       /**
+        * Initializes (registers / defines) arguments of this controller.
+        *
+        * Override this method to add arguments which can later be accessed
+        * by the action methods.
+        *
+        * @return void
+        */
+       protected function initializeArguments() {
+       }
+
+       /**
+        * Forwards the request to another controller.
+        *
+        * @return void
+        * @throws Tx_ExtBase_Exception_StopAction
+        */
+       public function forward($actionName, $controllerName = NULL, $extensionName = NULL, Tx_ExtBase_MVC_Controller_Arguments $arguments = NULL) {
+               $this->request->setDispatched(FALSE);
+               $this->request->setControllerActionName($actionName);
+               if ($controllerName !== NULL) $this->request->setControllerName($controllerName);
+               if ($extensionName !== NULL) $this->request->setExtensionName($extensionName);
+               if ($arguments !== NULL) $this->request->setArguments($arguments);
+               throw new Tx_ExtBase_Exception_StopAction();
+       }
+
+       /**
+        * Redirects the web request to another uri.
+        *
+        * NOTE: This method only supports web requests and will thrown an exception if used with other request types.
+        *
+        * @param mixed $uri Either a string representation of a URI or a F3_FLOW3_Property_DataType_URI object
+        * @param integer $delay (optional) The delay in seconds. Default is no delay.
+        * @param integer $statusCode (optional) The HTTP status code for the redirect. Default is "303 See Other"
+        * @throws Tx_ExtBase_Exception_UnsupportedRequestType If the request is not a web request
+        * @throws Tx_ExtBase_Exception_StopAction
+        */
+       public function redirect($uri, $delay = 0, $statusCode = 303) {
+               if (!$this->request instanceof Tx_ExtBase_MVC_Web_Request) throw new Tx_ExtBase_Exception_UnsupportedRequestType('redirect() only supports web requests.', 1220539734);
+
+               $escapedUri = htmlentities($uri, ENT_QUOTES, 'utf-8');
+               $this->response->setContent('<html><head><meta http-equiv="refresh" content="' . intval($delay) . ';url=' . $escapedUri . '"/></head></html>');
+               $this->response->setStatus($statusCode);
+               throw new Tx_ExtBase_Exception_StopAction();
+       }
+
+       /**
+        * Sends the specified HTTP status immediately.
+        *
+        * NOTE: This method only supports web requests and will thrown an exception if used with other request types.
+        *
+        * @param integer $statusCode The HTTP status code
+        * @param string $statusMessage A custom HTTP status message
+        * @param string $content Body content which further explains the status
+        * @throws Tx_ExtBase_Exception_UnsupportedRequestType If the request is not a web request
+        * @throws Tx_ExtBase_Exception_StopAction
+        */
+       public function throwStatus($statusCode, $statusMessage = NULL, $content = NULL) {
+               if (!$this->request instanceof Tx_ExtBase_MVC_Web_Request) throw new Tx_ExtBase_Exception_UnsupportedRequestType('throwStatus() only supports web requests.', 1220539739);
+
+               $this->response->setStatus($statusCode, $statusMessage);
+               if ($content === NULL) $content = $this->response->getStatus();
+               $this->response->setContent($content);
+               throw new Tx_ExtBase_Exception_StopAction();
+       }
+
+       /**
+        * Maps arguments delivered by the request object to the local controller arguments.
+        *
+        * @return void
+        */
+       protected function mapRequestArgumentsToLocalArguments() {
+               $requestArguments = $this->request->getArguments();
+               foreach ($this->arguments as $argument) {
+                       $argumentName = $argument->getName();
+                       $argumentShortName = $argument->getShortName();
+                       if (array_key_exists($argumentName, $requestArguments)) {
+                               $argument->setValue($requestArguments[$argumentName]);
+                       } elseif ($argumentShortName !== NULL && array_key_exists($argumentShortName, $requestArguments)) {
+                               $argument->setValue($requestArguments[$argumentShortName]);
+                       }
+               }
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php b/typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php
new file mode 100644 (file)
index 0000000..152113c
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A multi action controller
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+// SK: fill initializeArguments() so it parses the arguments for a given view. We need to discuss how this parsing can be
+// SK: done effectively.
+class Tx_ExtBase_MVC_Controller_ActionController extends Tx_ExtBase_MVC_Controller_AbstractController {
+
+       /**
+        * @var boolean If initializeView() should be called on an action invocation.
+        */
+       protected $initializeView = TRUE;
+
+       /**
+        * @var Tx_ExtBase_MVC_View_AbstractView By default a view with the same name as the current action is provided. Contains NULL if none was found.
+        */
+       protected $view = NULL;
+
+       /**
+        * By default a matching view will be resolved. If this property is set, automatic resolving is disabled and the specified object is used instead.
+        * @var string
+        */
+       protected $defaultViewObjectName = NULL;
+
+       /**
+        * Pattern after which the view object name is built
+        *
+        * @var string
+        */
+       // SK: Decision: Do we support "format"?
+       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller@action';
+
+       /**
+        * Name of the action method
+        * @var string
+        */
+       protected $actionMethodName = 'indexAction';
+
+       /**
+        * Handles a request. The result output is 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 this handler
+        * @return void
+        */
+       public function processRequest(Tx_ExtBase_MVC_Request $request, Tx_ExtBase_MVC_Response $response) {
+               $this->request = $request;
+               $this->request->setDispatched(TRUE);
+               $this->response = $response;
+
+               $this->actionMethodName = $this->resolveActionMethodName();
+               $this->initializeArguments();
+               $this->mapRequestArgumentsToLocalArguments();
+               if ($this->initializeView) $this->initializeView();
+               $this->initializeAction();
+               $this->callActionMethod();
+       }
+
+       /**
+        * Determines the action method and assures that the method exists.
+        *
+        * @return string The action method name
+        * @throws Tx_ExtBase_Exception_NoSuchAction if the action specified in the request object does not exist (and if there's no default action either).
+        */
+       protected function resolveActionMethodName() {
+               $actionMethodName = $this->request->getControllerActionName() . 'Action';
+               if (!method_exists($this, $actionMethodName)) throw new Tx_ExtBase_Exception_NoSuchAction('An action "' . $actionMethodName . '" does not exist in controller "' . get_class($this) . '".', 1186669086);
+               return $actionMethodName;
+       }
+
+       /**
+        * Returns TRUE if the given action (a name of an action like 'show'; without
+        * trailing 'Action') should be cached, otherwise it returns FALSE.
+        *
+        * @param string $actionName
+        * @return void
+        * @author Jochen Rau <jochen.rau@typoplanet.de>
+        */
+       public function isCachableAction($actionName) {
+                return !in_array($actionName, $this->nonCachableActions);
+       }
+
+       /**
+        * Calls the specified action method and passes the arguments.
+        * If the action returns a string, it is appended to the content in the
+        * response object.
+        *
+        * @param string $actionMethodName Name of the action method
+        * @return void
+        */
+       protected function callActionMethod() {
+               $actionResult = call_user_func_array(array($this, $this->actionMethodName), array());
+               if ($actionResult === NULL && $this->view instanceof Tx_ExtBase_MVC_View_ViewInterface) {
+                       $this->response->appendContent($this->view->render());
+               } elseif (is_string($actionResult) && strlen($actionResult) > 0) {
+                       $this->response->appendContent($actionResult);
+               }
+       }
+
+       /**
+        * Prepares a view for the current action and stores it in $this->view.
+        * By default, this method tries to locate a view with a name matching
+        * the current action.
+        *
+        * @return void
+        */
+       protected function initializeView() {
+               $viewObjectName = ($this->defaultViewObjectName === NULL) ? $this->resolveViewObjectName() : $this->defaultViewObjectName;
+               if (!class_exists($viewObjectName)) $viewObjectName = 'Tx_ExtBase_MVC_View_EmptyView';
+
+               $this->view = t3lib_div::makeInstance($viewObjectName);
+               $this->view->setRequest($this->request);
+       }
+
+       /**
+        * Determines the fully qualified view object name.
+        *
+        * @return string The fully qualified view object name
+        */
+       protected function resolveViewObjectName() {
+               $possibleViewName = $this->viewObjectNamePattern;
+               $extensionName = $this->request->getExtensionName();
+               $possibleViewName = str_replace('@extension', $extensionName, $possibleViewName);
+               $possibleViewName = str_replace('@controller', $this->request->getControllerName(), $possibleViewName);
+               $possibleViewName = str_replace('@action', ucfirst($this->request->getControllerActionName()), $possibleViewName);
+               return $possibleViewName;
+       }
+
+       /**
+        * Initializes the controller before invoking an action method.
+        *
+        * Override this method to solve tasks which all actions have in
+        * common.
+        *
+        * @return void
+        */
+       protected function initializeAction() {
+       }
+
+       /**
+        * The default action of this controller.
+        *
+        * This method should always be overridden by the concrete action
+        * controller implementation.
+        *
+        * @return void
+        */
+       protected function indexAction() {
+               return 'No index action has been implemented yet for this controller.';
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/Argument.php b/typo3/sysext/extbase/Classes/MVC/Controller/Argument.php
new file mode 100644 (file)
index 0000000..3bbc20d
--- /dev/null
@@ -0,0 +1,355 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A controller argument
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Controller_Argument {
+
+       /**
+        * Name of this argument
+        * @var string
+        */
+       protected $name = '';
+
+       /**
+        * Short name of this argument
+        * @var string
+        */
+       protected $shortName = NULL;
+
+       /**
+        * Data type of this argument's value
+        * @var string
+        */
+       protected $dataType = 'Text';
+
+       /**
+        * TRUE if this argument is required
+        * @var boolean
+        */
+       protected $isRequired = FALSE;
+
+       /**
+        * Actual value of this argument
+        * @var object
+        */
+       protected $value = NULL;
+
+       /**
+        * The argument is valid
+        * @var boolean
+        */
+       protected $isValid = NULL;
+
+       /**
+        * Any error (Tx_ExtBase_Error_Error) that occured while initializing this argument (e.g. a mapping error)
+        * @var array
+        */
+       protected $errors = array();
+
+       /**
+        * The property validator for this argument
+        * @var Tx_ExtBase_Validation_Validator_ValidatorInterface
+        */
+       protected $validator = NULL;
+
+       /**
+        * The property validator for this arguments datatype
+        * @var Tx_ExtBase_Validation_Validator_ValidatorInterface
+        */
+       // TODO Remove DatatypeValidator
+       protected $datatypeValidator = NULL;
+
+       /**
+        * Uid for the argument, if it has one
+        * @var string
+        */
+       protected $uid = NULL;
+
+       /**
+        * Constructs this controller argument
+        *
+        * @param string $name Name of this argument
+        * @param string $dataType The data type of this argument
+        * @throws InvalidArgumentException if $name is not a string or empty
+        */
+       public function __construct($name, $dataType = 'Text') {
+               if (!is_string($name) || strlen($name) < 1) throw new InvalidArgumentException('$name must be of type string, ' . gettype($name) . ' given.', 1187951688);
+               $this->name = $name;
+               if (is_array($dataType)) {
+                       $this->setNewValidatorChain($dataType);
+               } else {
+                       $this->setDataType($dataType);
+               }
+       }
+
+       /**
+        * Returns the name of this argument
+        *
+        * @return string This argument's name
+        */
+       public function getName() {
+               return $this->name;
+       }
+
+       /**
+        * Sets the short name of this argument.
+        *
+        * @param string $shortName A "short name" - a single character
+        * @return Tx_ExtBase_MVC_Controller_Argument $this
+        * @throws InvalidArgumentException if $shortName is not a character
+        */
+       public function setShortName($shortName) {
+               if ($shortName !== NULL && (!is_string($shortName) || strlen($shortName) != 1)) throw new InvalidArgumentException('$shortName must be a single character or NULL', 1195824959);
+               $this->shortName = $shortName;
+               return $this;
+       }
+
+       /**
+        * Returns the short name of this argument
+        *
+        * @return string This argument's short name
+        */
+       public function getShortName() {
+               return $this->shortName;
+       }
+
+       /**
+        * Sets the data type of this argument's value
+        *
+        * @param string $dataType: Name of the data type
+        * @return Tx_ExtBase_MVC_Controller_Argument $this
+        */
+       public function setDataType($dataType) {
+               $this->dataType = ($dataType != '' ? $dataType : 'Text');
+               // TODO Make validator path and class names configurable
+               $dataTypeValidatorClassName = 'Tx_ExtBase_Validation_Validator_' . $this->dataType;
+               $classFilePathAndName = t3lib_extMgm::extPath('extbase') . 'Classes/Validation/Validator/' . $this->dataType . '.php';
+               if (isset($classFilePathAndName) && file_exists($classFilePathAndName)) {                       
+                       require_once($classFilePathAndName);
+                       $this->datatypeValidator = t3lib_div::makeInstance($dataTypeValidatorClassName);
+               }
+               return $this;
+       }
+
+       /**
+        * Returns the data type of this argument's value
+        *
+        * @return string The data type
+        */
+       public function getDataType() {
+               return $this->dataType;
+       }
+
+       /**
+        * Marks this argument to be required
+        *
+        * @param boolean $required TRUE if this argument should be required
+        * @return Tx_ExtBase_MVC_Controller_Argument $this
+        */
+       public function setRequired($required) {
+               $this->isRequired = $required;
+               return $this;
+       }
+
+       /**
+        * Returns TRUE if this argument is required
+        *
+        * @return boolean TRUE if this argument is required
+        */
+       public function isRequired() {
+               return $this->isRequired;
+       }
+
+       /**
+        * Sets the value of this argument.
+        *
+        * @param mixed $value: The value of this argument
+        * @return Tx_ExtBase_MVC_Controller_Argument $this
+        * @throws Tx_ExtBase_Exception_InvalidArgumentValue if the argument is not a valid object of type $dataType
+        */
+       public function setValue($value) {
+               if ($this->isValidValueForThisArgument($value)) {
+                       $this->value = $value;
+               }
+               return $this;
+       }
+
+       /**
+        * Returns the value of this argument
+        *
+        * @return object The value of this argument - if none was set, NULL is returned
+        */
+       public function getValue() {
+               return $this->value;
+       }
+
+       /**
+        * Checks if this argument has a value set.
+        *
+        * @return boolean TRUE if a value was set, otherwise FALSE
+        */
+       public function isValue() {
+               return $this->value !== NULL;
+       }
+
+       /**
+        * undocumented function
+        *
+        * @param string $value 
+        * @return boolean TRUE if the value is valid for this argument, otherwise FALSE
+        */
+       protected function isValidValueForThisArgument($value) {
+               $isValid = TRUE;
+               $validatorErrors = t3lib_div::makeInstance('Tx_ExtBase_Validation_Errors');
+               // TODO use only Validator; do not distinguish between Validator and DatatypeValidator
+               if ($this->getValidator() !== NULL) {
+                       $isValid &= $this->getValidator()->isValid($value, $validatorErrors);
+               } elseif ($this->getDatatypeValidator() !== NULL) {
+                       $isValid = $this->getDatatypeValidator()->isValid($value, $validatorErrors);                    
+               } else {
+                       throw new Tx_ExtBase_Validation_Exception_NoValidatorFound('No appropriate validator for the argument "' . $this->getName() . '" was found.', 1235748909);
+               }
+               if (!$isValid) {
+                       foreach ($validatorErrors as $error) {
+                               $this->addError($error);
+                       }
+               }
+               $this->isValid = $isValid;
+               return (boolean)$isValid;
+       }
+
+       /**
+        * Returns TRUE when the argument is valid
+        *
+        * @return boolean TRUE if the argument is valid
+        */
+       public function isValid() {
+               return $this->isValid;
+       }
+       
+       /**
+        * Add an initialization error (e.g. a mapping error)
+        *
+        * @param string An error text
+        * @return void
+        */
+       public function addError($error) {
+               $this->errors[] = $error;
+       }
+
+       /**
+        * Get all initialization errors
+        *
+        * @return array An array containing Tx_ExtBase_Error_Error objects
+        * @see addError(Tx_ExtBase_Error_Error $error)
+        */
+       public function getErrors() {
+               return $this->errors;
+       }
+
+       /**
+        * Set an additional validator
+        *
+        * @param string Class name of a validator
+        * @return Tx_ExtBase_MVC_Controller_Argument Returns $this (used for fluent interface)
+        */
+       public function setValidator($className) {
+               $this->validator = t3lib_div::makeInstance($className);
+               return $this;
+       }
+
+       /**
+        * Returns the set validator
+        *
+        * @return Tx_ExtBase_Validation_Validator_ValidatorInterface The set validator, NULL if none was set
+        */
+       public function getValidator() {
+               return $this->validator;
+       }
+
+       /**
+        * Returns the set datatype validator
+        *
+        * @return Tx_ExtBase_Validation_Validator_ValidatorInterface The set datatype validator
+        */
+       public function getDatatypeValidator() {
+               return $this->datatypeValidator;
+       }
+       
+       /**
+        * Create and set a validator chain
+        *
+        * @param array Object names of the validators
+        * @return Tx_ExtBase_MVC_Controller_Argument Returns $this (used for fluent interface)
+        */
+       public function setNewValidatorChain(array $validators) {
+               $this->validator = t3lib_div::makeInstance('Tx_ExtBase_Validation_Validator_ChainValidator');
+               foreach ($validators as $validator) {
+                       if (is_array($validator)) {
+                               $objectName = 'Tx_ExtBase_Validation_Validator_' . $validator[0];
+                               $this->validator->addValidator(new $objectName);
+                       } else {
+                               $objectName = 'Tx_ExtBase_Validation_Validator_' . $validator;
+                               $this->validator->addValidator(t3lib_div::makeInstance($objectName));
+                       }
+               }
+               return $this;
+       }
+       
+       /**
+        * Set the uid for the argument.
+        *
+        * @param string $uid The uid for the argument.
+        * @return void
+        */
+       public function setUid($uid) {
+               $this->uid = $uid;
+       }
+
+       /**
+        * Get the uid of the argument, if it has one.
+        *
+        * @return string Uid of the argument. If none set, returns NULL.
+        */
+       public function getUid() {
+               return $this->uid;
+       }
+
+       /**
+        * Returns a string representation of this argument's value
+        *
+        * @return string
+        */
+       public function __toString() {
+               return (string)$this->value;
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/Arguments.php b/typo3/sysext/extbase/Classes/MVC/Controller/Arguments.php
new file mode 100644 (file)
index 0000000..0672be5
--- /dev/null
@@ -0,0 +1,228 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A composite of controller arguments
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Controller_Arguments extends ArrayObject {
+
+       /**
+        * @var array Names of the arguments contained by this object
+        */
+       protected $argumentNames = array();
+
+       /**
+        * Adds or replaces the argument specified by $value. The argument's name is taken from the
+        * argument object itself, therefore the $offset does not have any meaning in this context.
+        *
+        * @param mixed $offset Offset - not used here
+        * @param mixed $value The argument
+        * @return void
+        * @throws InvalidArgumentException if the argument is not a valid Controller Argument object
+        */
+       public function offsetSet($offset, $value) {
+               if (!$value instanceof Tx_ExtBase_MVC_Controller_Argument) throw new InvalidArgumentException('Controller arguments must be valid Tx_ExtBase_MVC_Controller_Argument objects.', 1187953786);
+
+               $argumentName = $value->getName();
+               parent::offsetSet($argumentName, $value);
+               $this->argumentNames[$argumentName] = TRUE;
+       }
+
+       /**
+        * Sets an argument, aliased to offsetSet()
+        *
+        * @param mixed $value The value
+        * @return void
+        * @throws InvalidArgumentException if the argument is not a valid Controller Argument object
+        */
+       public function append($value) {
+               if (!$value instanceof Tx_ExtBase_MVC_Controller_Argument) throw new InvalidArgumentException('Controller arguments must be valid Tx_ExtBase_MVC_Controller_Argument objects.', 1187953786);
+               $this->offsetSet(NULL, $value);
+       }
+
+       /**
+        * Unsets an argument
+        *
+        * @param mixed $offset Offset
+        * @return void
+        */
+       public function offsetUnset($offset) {
+               $translatedOffset = $this->translateToLongArgumentName($offset);
+               parent::offsetUnset($translatedOffset);
+
+               unset($this->argumentNames[$translatedOffset]);
+               if ($offset != $translatedOffset) {
+                       unset($this->argumentShortNames[$offset]);
+               }
+       }
+
+       /**
+        * Returns whether the requested index exists
+        *
+        * @param mixed $offset Offset
+        * @return boolean
+        */
+       public function offsetExists($offset) {
+               $translatedOffset = $this->translateToLongArgumentName($offset);
+               return parent::offsetExists($translatedOffset);
+       }
+
+       /**
+        * Returns the value at the specified index
+        *
+        * @param mixed $offset Offset
+        * @return Tx_ExtBase_MVC_Controller_Argument The requested argument object
+        * @throws Tx_ExtBase_Exception_NoSuchArgument if the argument does not exist
+        */
+       public function offsetGet($offset) {
+               $translatedOffset = $this->translateToLongArgumentName($offset);
+               if ($translatedOffset === '') throw new Tx_ExtBase_Exception_NoSuchArgument('The argument "' . $offset . '" does not exist.', 1216909923);
+               return parent::offsetGet($translatedOffset);
+       }
+
+       /**
+        * Creates, adds and returns a new controller argument to this composite object.
+        * If an argument with the same name exists already, it will be replaced by the
+        * new argument object.
+        *
+        * @param string $name Name of the argument
+        * @param string $dataType Name of one of the built-in data types
+        * @param boolean $isRequired TRUE if this argument should be marked as required
+        * @return Tx_ExtBase_MVC_Controller_Argument The new argument
+        */
+       public function addNewArgument($name, $dataType = 'Text', $isRequired = FALSE) {
+               $argument = new Tx_ExtBase_MVC_Controller_Argument($name, $dataType);
+               $argument->setRequired($isRequired);
+               $this->addArgument($argument);
+               return $argument;
+       }
+
+       /**
+        * Adds the specified controller argument to this composite object.
+        * If an argument with the same name exists already, it will be replaced by the
+        * new argument object.
+        *
+        * Note that the argument will be cloned, not referenced.
+        *
+        * @param Tx_ExtBase_MVC_Controller_Argument $argument The argument to add
+        * @return void
+        */
+       public function addArgument(Tx_ExtBase_MVC_Controller_Argument $argument) {
+               $this->offsetSet(NULL, $argument);
+       }
+
+       /**
+        * Returns an argument specified by name
+        *
+        * @param string $argumentName Name of the argument to retrieve
+        * @return Tx_ExtBase_MVC_Controller_Argument
+        * @throws Tx_ExtBase_Exception_NoSuchArgument
+        */
+       public function getArgument($argumentName) {
+               if (!$this->offsetExists($argumentName)) throw new Tx_ExtBase_Exception_NoSuchArgument('An argument "' . $argumentName . '" does not exist.', 1195815178);
+               return $this->offsetGet($argumentName);
+       }
+
+       /**
+        * Checks if an argument with the specified name exists
+        *
+        * @param string $argumentName Name of the argument to check for
+        * @return boolean TRUE if such an argument exists, otherwise FALSE
+        * @see offsetExists()
+        */
+       public function hasArgument($argumentName) {
+               return $this->offsetExists($argumentName);
+       }
+
+       /**
+        * Returns the names of all arguments contained in this object
+        *
+        * @return array Argument names
+        */
+       public function getArgumentNames() {
+               return array_keys($this->argumentNames);
+       }
+
+       /**
+        * Returns the short names of all arguments contained in this object that have one.
+        *
+        * @return array Argument short names
+        */
+       public function getArgumentShortNames() {
+               $argumentShortNames = array();
+               foreach ($this as $argument) {
+                       $argumentShortNames[$argument->getShortName()] = TRUE;
+               }
+               return array_keys($argumentShortNames);
+       }
+
+       /**
+        * Magic setter method for the argument values. Each argument
+        * value can be set by just calling the setArgumentName() method.
+        *
+        * @param string $methodName Name of the method
+        * @param array $arguments Method arguments
+        * @return void
+        */
+       public function __call($methodName, array $arguments) {
+               if (substr($methodName, 0, 3) !== 'set') throw new LogicException('Unknown method "' . $methodName . '".', 1210858451);
+
+               $firstLowerCaseArgumentName = $this->translateToLongArgumentName(strtolower($methodName{3}) . substr($methodName, 4));
+               $firstUpperCaseArgumentName = $this->translateToLongArgumentName(ucfirst(substr($methodName, 3)));
+
+               if (in_array($firstLowerCaseArgumentName, $this->getArgumentNames())) {
+                       $argument = parent::offsetGet($firstLowerCaseArgumentName);
+                       $argument->setValue($arguments[0]);
+               } elseif (in_array($firstUpperCaseArgumentName, $this->getArgumentNames())) {
+                       $argument = parent::offsetGet($firstUpperCaseArgumentName);
+                       $argument->setValue($arguments[0]);
+               }
+       }
+
+       /**
+        * Translates a short argument name to its corresponding long name. If the
+        * specified argument name is a real argument name already, it will be returned again.
+        *
+        * If an argument with the specified name or short name does not exist, an empty
+        * string is returned.
+        *
+        * @param string argument name
+        * @return string long argument name or empty string
+        */
+       protected function translateToLongArgumentName($argumentName) {
+
+               if (in_array($argumentName, $this->getArgumentNames())) return $argumentName;
+
+               foreach ($this as $argument) {
+                       if ($argumentName === $argument->getShortName()) return $argument->getName();
+               }
+               return '';
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/ControllerInterface.php b/typo3/sysext/extbase/Classes/MVC/Controller/ControllerInterface.php
new file mode 100644 (file)
index 0000000..5723739
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Interface for controllers
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+interface Tx_ExtBase_MVC_Controller_ControllerInterface {
+
+       /**
+        * Sets / injects the settings of the package this controller belongs to.
+        *
+        * @param array $settings Settings container of the current package
+        * @return void
+        */
+       public function injectSettings(array $settings);
+       
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Controller/DefaultController.php b/typo3/sysext/extbase/Classes/MVC/Controller/DefaultController.php
new file mode 100755 (executable)
index 0000000..44689f8
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A Special Case of a Controller: If no controller could be resolved or no
+ * controller has been specified in the request, this controller is chosen.
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_Controller_DefaultController extends Tx_ExtBase_MVC_Controller_ActionController {
+
+       /**
+        * @var Tx_ExtBase_MVC_View_DefaultView
+        */
+       protected $defaultView;
+
+       /**
+        * Injects the default view
+        *
+        * @param Tx_ExtBase_MVC_View_DefaultView $defaultView The default view
+        * @return void
+        */
+       public function injectDefaultView(Tx_ExtBase_MVC_View_DefaultView $defaultView) {
+               $this->defaultView = $defaultView;
+       }
+
+       /**
+        * Processes a generic request and returns a response
+        *
+        * @param Tx_ExtBase_MVC_Request $request: The request
+        * @param Tx_ExtBase_MVC_Response $response: The response
+        */
+       public function processRequest(Tx_ExtBase_MVC_Request $request, Tx_ExtBase_MVC_Response $response) {
+               $request->setDispatched(TRUE);
+               switch (get_class($request)) {
+                       case 'Tx_ExtBase_MVC_Web_Request' :
+                               $this->processWebRequest($request, $response);
+                               break;
+                       default :
+                               $response->setContent(
+                                       "\nWelcome to TYPO3!\n\n" .
+                                       "This is the default view of the TYPO3 MVC object. You see this message because no \n" .
+                                       "other view is available. Please refer to the Developer's Guide for more information \n" .
+                                       "how to create and configure one.\n\n" .
+                                       "Have fun! The TYPO3 Development Team\n"
+                               );
+               }
+       }
+
+       /**
+        * Processes a web request and returns a response
+        *
+        * @param Tx_ExtBase_MVC_Web_Request $request: The request
+        * @param Tx_ExtBase_MVC_Web_Response $response: The response
+        */
+       protected function processWebRequest(Tx_ExtBase_MVC_Web_Request $request, Tx_ExtBase_MVC_Web_Response $response) {
+               $this->defaultView->setRequest($request);
+               $response->setContent($this->defaultView->render());
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Request.php b/typo3/sysext/extbase/Classes/MVC/Request.php
new file mode 100644 (file)
index 0000000..45c3e8e
--- /dev/null
@@ -0,0 +1,314 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Represents a generic request.
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Request {
+
+       const PATTERN_MATCH_FORMAT = '/^[a-z0-9]{1,5}$/';
+
+       /**
+        * Pattern after which the controller object name is built
+        *
+        * @var string
+        */
+       protected $controllerObjectNamePattern = 'Tx_@extension_Controller_@controllerController';
+
+       /**
+        * @var string Pattern after which the view object name is built
+        */
+       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller@action';
+
+       /**
+        * @var string Name of the extension which is supposed to handle this request. This is the extension name converted to UpperCamelCase
+        */
+       protected $extensionName = 'ExtBase';
+
+       /**
+        * @var string Name of the controller which is supposed to handle this request.
+        */
+       protected $controllerName = 'Default';
+
+       /**
+        * @var string Name of the action the controller is supposed to take.
+        */
+       protected $controllerActionName = 'index';
+
+       /**
+        * @var ArrayObject The arguments for this request
+        */
+       protected $arguments;
+
+       /**
+        * @var string The requested representation format
+        */
+       protected $format = 'txt';
+
+       /**
+        * @var boolean If this request has been changed and needs to be dispatched again
+        */
+       protected $dispatched = FALSE;
+
+       /**
+        * Constructs this request
+        *
+        */
+       public function __construct() {
+               $this->arguments = new ArrayObject;
+       }
+
+       /**
+        * Sets the dispatched flag
+        *
+        * @param boolean $flag If this request has been dispatched
+        * @return void
+        */
+       public function setDispatched($flag) {
+               $this->dispatched = $flag ? TRUE : FALSE;
+       }
+
+       /**
+        * If this request has been dispatched and addressed by the responsible
+        * controller and the response is ready to be sent.
+        *
+        * The dispatcher will try to dispatch the request again if it has not been
+        * addressed yet.
+        *
+        * @return boolean TRUE if this request has been disptached sucessfully
+        */
+       public function isDispatched() {
+               return $this->dispatched;
+       }
+
+       /**
+        * Returns the object name of the controller defined by the extension name and
+        * controller name
+        *
+        * @return string The controller's Object Name
+        * @throws Tx_ExtBase_Exception_NoSuchController if the controller does not exist
+        */
+       public function getControllerObjectName() {
+               $lowercaseObjectName = str_replace('@extension', $this->extensionName, $this->controllerObjectNamePattern);
+               $lowercaseObjectName = str_replace('@controller', $this->controllerName, $lowercaseObjectName);
+               // TODO implement getCaseSensitiveObjectName()
+               $objectName = $lowercaseObjectName;
+               if ($objectName === FALSE) throw new Tx_ExtBase_Exception_NoSuchController('The controller object "' . $lowercaseObjectName . '" does not exist.', 1220884009);
+
+               return $objectName;
+       }
+
+       /**
+        * Sets the pattern for building the controller object name.
+        *
+        * The pattern may contain the placeholders "@extension" and "@controller" which will be substituted
+        * by the real extension name and controller name.
+        *
+        * @param string $pattern The pattern
+        * @return void
+        */
+       public function setControllerObjectNamePattern($pattern) {
+               $this->controllerObjectNamePattern = $pattern;
+       }
+
+       /**
+        * Returns the pattern for building the controller object name.
+        *
+        * @return string $pattern The pattern
+        */
+       public function getControllerObjectNamePattern() {
+               return $this->controllerObjectNamePattern;
+       }
+
+       /**
+        * Sets the pattern for building the view object name
+        *
+        * @param string $pattern The view object name pattern, eg. F3_@extension_View::@controller@action
+        * @return void
+        */
+       public function setViewObjectNamePattern($pattern) {
+               if (!is_string($pattern)) throw new InvalidArgumentException('The view object name pattern must be a valid string, ' . gettype($pattern) . ' given.', 1221563219);
+               $this->viewObjectNamePattern = $pattern;
+       }
+
+       /**
+        * Returns the View Object Name Pattern
+        *
+        * @return string The pattern
+        */
+       public function getViewObjectNamePattern() {
+               return $this->viewObjectNamePattern;
+       }
+
+       /**
+        * Returns the view's (possible) object name according to the defined view object
+        * name pattern and the specified values for extension, controller, action and format.
+        *
+        * If no valid view object name could be resolved, FALSE is returned
+        *
+        * @return mixed Either the view object name or FALSE
+        */
+       public function getViewObjectName() {
+               $possibleViewName = $this->viewObjectNamePattern;
+               $possibleViewName = str_replace('@extension', $this->extensionName, $possibleViewName);
+               $possibleViewName = str_replace('@controller', $this->controllerName, $possibleViewName);
+               $possibleViewName = str_replace('@action', ucfirst($this->controllerActionName), $possibleViewName);
+
+               $viewObjectName = $possibleViewName;
+               // $viewObjectName = str_replace('@format', $this->format, $possibleViewName); //$this->objectManager->getCaseSensitiveObjectName(str_replace('@format', $this->format, $possibleViewName)); // TODO
+               // if ($viewObjectName === FALSE) {
+               //      $viewObjectName = str_replace('@format', '', $possibleViewName); //$this->objectManager->getCaseSensitiveObjectName(str_replace('@format', '', $possibleViewName));
+               // }
+               return $viewObjectName;
+       }
+
+       /**
+        * Sets the extension name of the controller.
+        *
+        * @param string $extensionName The extension name.
+        * @return void
+        * @throws Tx_ExtBase_Exception_InvalidExtensionName if the extension name is not valid
+        */
+       public function setExtensionName($extensionName) {
+               $upperCamelCasedExtensionName = $extensionName; //$this->packageManager->getCaseSensitiveExtensionName($extensionName);  // TODO implement getCaseSensitiveExtensionName()
+               if ($upperCamelCasedExtensionName === FALSE) throw new Tx_ExtBase_Exception_InvalidExtensionName('"' . $extensionName . '" is not a valid extension name.', 1217961104);
+               $this->extensionName = $upperCamelCasedExtensionName;
+       }
+
+       /**
+        * Returns the extension name of the specified controller.
+        *
+        * @return string The extension name
+        */
+       public function getExtensionName() {
+               return $this->extensionName;
+       }
+
+       /**
+        * Sets the name of the controller which is supposed to handle the request.
+        * Note: This is not the object name of the controller!
+        *
+        * @param string $controllerName Name of the controller
+        * @return void
+        */
+       public function setControllerName($controllerName) {
+               if (!is_string($controllerName)) throw new Tx_ExtBase_Exception_InvalidControllerName('The controller name must be a valid string, ' . gettype($controllerName) . ' given.', 1187176358);
+               if (strpos($controllerName, '_') !== FALSE) throw new Tx_ExtBase_Exception_InvalidControllerName('The controller name must not contain underscores.', 1217846412);
+               $this->controllerName = $controllerName;
+       }
+
+       /**
+        * Returns the object name of the controller supposed to handle this request, if one
+        * was set already (if not, the name of the default controller is returned)
+        *
+        * @return string Object name of the controller
+        */
+       public function getControllerName() {
+               return $this->controllerName;
+       }
+
+       /**
+        * Sets the name of the action contained in this request.
+        *
+        * Note that the action name must start with a lower case letter.
+        *
+        * @param string $actionName: Name of the action to execute by the controller
+        * @return void
+        * @throws Tx_ExtBase_Exception_InvalidActionName if the action name is not valid
+        */
+       public function setControllerActionName($actionName) {
+               if (!is_string($actionName)) throw new Tx_ExtBase_Exception_InvalidActionName('The action name must be a valid string, ' . gettype($actionName) . ' given (' . $actionName . ').', 1187176358);
+               if ($actionName{0} !== strtolower($actionName{0})) throw new Tx_ExtBase_Exception_InvalidActionName('The action name must start with a lower case letter, "' . $actionName . '" does not match this criteria.', 1218473352);
+               $this->controllerActionName = $actionName;
+       }
+
+       /**
+        * Returns the name of the action the controller is supposed to execute.
+        *
+        * @return string Action name
+        */
+       public function getControllerActionName() {
+               return $this->controllerActionName;
+       }
+
+       /**
+        * Sets the value of the specified argument
+        *
+        * @param string $argumentName Name of the argument to set
+        * @param mixed $value The new value
+        * @return void
+        */
+       public function setArgument($argumentName, $value) {
+               if (!is_string($argumentName) || strlen($argumentName) == 0) throw new Tx_ExtBase_Exception_InvalidArgumentName('Invalid argument name.', 1210858767);
+               $this->arguments[$argumentName] = $value;
+       }
+
+       /**
+        * Sets the whole arguments ArrayObject and therefore replaces any arguments
+        * which existed before.
+        *
+        * @param ArrayObject $arguments An ArrayObject of argument names and their values
+        * @return void
+        */
+       public function setArguments(ArrayObject $arguments) {
+               $this->arguments = $arguments;
+       }
+
+       /**
+        * Returns an ArrayObject of arguments and their values
+        *
+        * @return ArrayObject ArrayObject of arguments and their values (which may be arguments and values as well)
+        */
+       public function getArguments() {
+               return $this->arguments;
+       }
+
+       /**
+        * Returns the value of the specified argument
+        *
+        * @param string $argumentName Name of the argument
+        * @return string Value of the argument
+        * @throws Tx_ExtBase_Exception_NoSuchArgument if such an argument does not exist
+        */
+       public function getArgument($argumentName) {
+               if (!isset($this->arguments[$argumentName])) throw new Tx_ExtBase_Exception_NoSuchArgument('An argument "' . $argumentName . '" does not exist for this request.', 1176558158);
+               return $this->arguments[$argumentName];
+       }
+
+       /**
+        * Checks if an argument of the given name exists (is set)
+        *
+        * @param string $argumentName Name of the argument to check
+        * @return boolean TRUE if the argument is set, otherwise FALSE
+        */
+       public function hasArgument($argumentName) {
+               return isset($this->arguments[$argumentName]);
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Response.php b/typo3/sysext/extbase/Classes/MVC/Response.php
new file mode 100644 (file)
index 0000000..f75200e
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A generic and very basic response implementation
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Response {
+
+       /**
+        * @var string The response content
+        */
+       protected $content = NULL;
+
+       /**
+        * Overrides and sets the content of the response
+        *
+        * @param string $content The response content
+        * @return void
+        */
+       public function setContent($content) {
+               $this->content = $content;
+       }
+
+       /**
+        * Appends content to the already existing content.
+        *
+        * @param string $content More response content
+        * @return void
+        */
+       public function appendContent($content) {
+               $this->content .= $content;
+       }
+
+       /**
+        * Returns the response content without sending it.
+        *
+        * @return string The response content
+        */
+       public function getContent() {
+               return $this->content;
+       }
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/AbstractView.php b/typo3/sysext/extbase/Classes/MVC/View/AbstractView.php
new file mode 100755 (executable)
index 0000000..5ffe7e7
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * An abstract View
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+abstract class Tx_ExtBase_MVC_View_AbstractView implements Tx_ExtBase_MVC_View_ViewInterface {
+
+       /**
+        * @var Tx_ExtBase_MVC_Request
+        */
+       protected $request;
+
+       /**
+        * @var array of Tx_ExtBase_MVC_View_Helper_HelperInterface
+        */
+       protected $viewHelpers;
+
+       /**
+        * @var array
+        */
+       protected $contextVariables = array();
+
+       /**
+        * Sets the current request
+        *
+        * @param Tx_ExtBase_MVC_Request $request
+        * @return void
+        */
+       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];
+       }
+
+       /**
+        * Initializes this view.
+        *
+        * Override this method for initializing your concrete view implementation.
+        *
+        * @return void
+        */
+       protected function initializeView() {
+       }
+       
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/DefaultView.php b/typo3/sysext/extbase/Classes/MVC/View/DefaultView.php
new file mode 100755 (executable)
index 0000000..212189f
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * The default view - a special case.
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_DefaultView extends Tx_ExtBase_MVC_View_AbstractView {
+
+       /**
+        * Renders the default view
+        *
+        * @return string The rendered view
+        * @throws Tx_ExtBase_Exception if no request has been set
+        */
+       public function render() {
+               if (!is_object($this->request)) throw new Tx_ExtBase_Exception('Can\'t render view without request object.', 1192450280);
+
+               $template = t3lib_div::makeInstance('Tx_ExtBase_MVC_View_TemplateView');
+               $template->setTemplateResource($this->resourceManager->getResource('file://FLOW3/Public/MVC/DefaultView_Template.html')->getContent());
+
+               if ($this->request instanceof Tx_ExtBase_MVC_Web_Request) {
+                       $template->setMarkerContent('baseuri', $this->request->getBaseURI());
+               }
+               return $template->render();
+       }
+}
+
+?>
\ 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..31cf178
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * An empty view - a special case.
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_EmptyView extends Tx_ExtBase_MVC_View_AbstractView {
+
+       /**
+        * Renders the empty view
+        *
+        * @return string An empty string
+        */
+       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
+        */
+       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
new file mode 100644 (file)
index 0000000..46508f7
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * An abstract View Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @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;
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/ConvertHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/ConvertHelper.php
new file mode 100644 (file)
index 0000000..4b191a2
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A Converter Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_Helper_ConvertHelper extends Tx_ExtBase_MVC_View_Helper_AbstractHelper {
+
+       public function render($view, $arguments, $content, $templateSource, $variables) {
+               $value = $content;
+               $format = $arguments['format'];
+               if ($value instanceof DateTime) {
+                       if ($format === NULL) {
+                               $value = $value->format('Y-m-d G:i');
+                       } else {
+                               $value = $value->format($format);
+                       }
+               } else {
+               }
+               return $value;
+       }
+       
+
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/ForHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/ForHelper.php
new file mode 100644 (file)
index 0000000..bdc5fe0
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A For Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_Helper_ForHelper extends Tx_ExtBase_MVC_View_Helper_AbstractHelper {
+
+       public function render($view, $arguments, $content, $templateSource, $variables) {
+               if (is_array($arguments['each'])) {
+                       foreach ($arguments['each'] as $singleElement) {
+                               $variables[Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($arguments['as'])] = $singleElement;
+                               $newContent .= $view->renderTemplate($templateSource, $variables);
+                       }
+               }
+               return $newContent;
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/HelperInterface.php
new file mode 100644 (file)
index 0000000..93be063
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * View Helper interface
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+interface Tx_ExtBase_MVC_View_Helper_HelperInterface {
+
+       /**
+        * Sets the current request
+        */
+       public function setRequest(Tx_ExtBase_MVC_Web_Request $request);
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/LinkHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/LinkHelper.php
new file mode 100644 (file)
index 0000000..a383e1b
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+require_once(PATH_tslib . 'class.tslib_content.php');
+
+/**
+ * A For Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_Helper_LinkHelper extends Tx_ExtBase_MVC_View_Helper_AbstractHelper {
+
+       /**
+        * an instance of tslib_cObj
+        *
+        * @var tslib_cObj
+        */
+       protected $contentObject = null;
+
+       /**
+        * constructor for class tx_community_viewhelper_Link
+        */
+       public function __construct(array $arguments = array()) {
+               if (is_null($this->contentObject)) {
+                       $this->contentObject = t3lib_div::makeInstance('tslib_cObj');
+               }
+       }
+
+       /**
+        * This method renders the link of the View Helper
+        *
+        * @param string $view The view invoked the view helper
+        * @param string $content The content
+        * @param string $arguments 
+        * @param string $templateSource 
+        * @param string $variables 
+        * @return string A content wrapped in a link
+        */
+       public function render($view, $arguments, $content, $templateSource, $variables) {
+               $parameters = t3lib_div::_GET();
+               $prefixedExtensionKey = 'tx_' . strtolower($this->request->getExtensionName()) . '_' . strtolower($this->request->getControllerName());
+               if (!empty($arguments['to'])) {
+                       $linkTo = $arguments['to'];
+                       $view->replaceReferencesWithValues($linkTo, $variables);
+                       unset($parameters['id']);
+               }
+               if (!empty($arguments['parameters'])) {
+                       $explodedParameters = explode(' ', $arguments['parameters']);
+                       $additionalParameters = array();
+                       foreach ($explodedParameters as $parameterString) {
+                               list($parameterKey, $parameterValue) = explode('=', trim($parameterString));
+                               $view->replaceReferencesWithValues($parameterValue, $variables);
+                               $additionalParameters[$prefixedExtensionKey] = array(trim($parameterKey) => $parameterValue);
+                               if (is_array($parameters[$prefixedExtensionKey])) {
+                                       $parameters[$prefixedExtensionKey] = array_merge($parameters[$prefixedExtensionKey], $additionalParameters[$prefixedExtensionKey]);
+                               } else {
+                                       $parameters[$prefixedExtensionKey] = $additionalParameters[$prefixedExtensionKey];
+                               }
+                       }
+               }
+               $linkText = $view->renderTemplate($templateSource, $variables);
+               $parameters = is_array($parameters) ? t3lib_div::implodeArrayForUrl('', $parameters, '', 1) : '';
+               $link = $this->contentObject->typoLink(
+                       $linkText,
+                       array(
+                               'parameter' => $linkTo,
+                               'additionalParams' => $parameters
+                       )
+               );
+               return $link;
+       }
+                       
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/TranslateHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/TranslateHelper.php
new file mode 100644 (file)
index 0000000..037f5f3
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A For Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_Helper_TranslateHelper extends Tx_ExtBase_MVC_View_Helper_AbstractHelper {
+
+       /**
+        * @var string
+        */
+       protected $languagePath = 'Resources/Private/Language/';
+
+       /**
+        * Local Language content
+        *
+        * @var string
+        **/
+       protected $LOCAL_LANG = array();
+
+       /**
+        * Local Language content charset for individual labels (overriding)
+        *
+        * @var string
+        **/
+       protected $LOCAL_LANG_charset = array();
+
+       /**
+        * Key of the language to use
+        *
+        * @var string
+        **/
+       protected $languageKey = 'default';
+
+       /**
+        * Pointer to alternative fall-back language to use
+        *
+        * @var string
+        **/
+       protected $alternativeLanguageKey = '';
+       // var $LLtestPrefix='';                        // You can set this during development to some value that makes it easy for you to spot all labels that ARe delivered by the getLL function.
+       // var $LLtestPrefixAlt='';             // Save as LLtestPrefix, but additional prefix for the alternative value in getLL() function calls
+       
+
+       public function render($view, $arguments, $content, $templateSource, $variables) {
+               $this->initializeLocalization($view);
+               $translation = $this->translate($arguments['key']);
+               return (is_string($translation) && !empty($translation)) ? $translation : '';
+       }
+       
+       /**
+        * Loads local-language values by looking for a "locallang.php" file in the plugin class directory ($this->scriptRelPath) and if found includes it.
+        * Also locallang values set in the TypoScript property "_LOCAL_LANG" are merged onto the values found in the "locallang.php" file.
+        *
+        * @return      void
+        */
+       protected function initializeLocalization($view)        {
+               $languageFilePath = t3lib_extMgm::extPath(strtolower($this->request->getExtensionName())) . $this->languagePath . 'locallang.php';
+
+               if ($GLOBALS['TSFE']->config['config']['language'])     {
+                       $this->languageKey = $GLOBALS['TSFE']->config['config']['language'];
+                       if ($GLOBALS['TSFE']->config['config']['language_alt']) {
+                               $this->alternativeLanguageKey = $GLOBALS['TSFE']->config['config']['language_alt'];
+                       }
+               }
+
+               $this->LOCAL_LANG = t3lib_div::readLLfile($languageFilePath, $this->languageKey, $GLOBALS['TSFE']->renderCharset);
+               if ($this->alternativeLanguageKey)      {
+                       $tempLOCAL_LANG = t3lib_div::readLLfile($languageFilePath, $this->alternativeLanguageKey);
+                       $this->LOCAL_LANG = array_merge(is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array(), $tempLOCAL_LANG);
+               }
+
+               $configurationManager = t3lib_div::makeInstance('Tx_ExtBase_Configuration_Manager');
+               $settings = $configurationManager->getSettings($this->request->getExtensionName());
+               if (is_array($settings['_LOCAL_LANG'])) {
+                       foreach ($settings['_LOCAL_LANG'] as $k => $lA) {
+                               if (is_array($lA)) {
+                                       foreach($lA as $llK => $llV) {
+                                               if (!is_array($llV)) {
+                                                       $this->LOCAL_LANG[$k][$llK] = $llV;
+                                                               // For labels coming from the TypoScript (database) the charset is assumed to be "forceCharset" and if that is not set, assumed to be that of the individual system languages
+                                                       $this->LOCAL_LANG_charset[$k][$llK] = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] ? $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] : $GLOBALS['TSFE']->csConvObj->charSetArray[$k];
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       
+       /**
+        * Returns the localized label of the LOCAL_LANG key, $key
+        * Notice that for debugging purposes prefixes for the output values can be set with the internal vars ->LLtestPrefixAlt and ->LLtestPrefix
+        *
+        * @param       string          The key from the LOCAL_LANG array for which to return the value.
+        * @param       string          Alternative string to return IF no value is found set for the key, neither for the local language nor the default.
+        * @param       boolean         If true, the output label is passed through htmlspecialchars()
+        * @return      string          The value from LOCAL_LANG.
+        */
+       function translate($key, $default = '', $filterTranslation = FALSE)     {
+               // The "from" charset of csConv() is only set for strings from TypoScript via _LOCAL_LANG
+               if (isset($this->LOCAL_LANG[$this->languageKey][$key])) {
+                       $translation = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->languageKey][$key], $this->LOCAL_LANG_charset[$this->languageKey][$key]);
+               } elseif ($this->alternativeLanguageKey && isset($this->LOCAL_LANG[$this->alternativeLanguageKey][$key]))       {
+                       $translation = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->alternativeLanguageKey][$key], $this->LOCAL_LANG_charset[$this->alternativeLanguageKey][$key]);
+               } elseif (isset($this->LOCAL_LANG['default'][$key]))    {
+                       $translation = $this->LOCAL_LANG['default'][$key];      // No charset conversion because default is english and thereby ASCII
+               } else {
+                       $translation = $default;
+               }
+               return $filterTranslation === TRUE ? htmlspecialchars($translation) : $translation;
+       }
+       
+       
+
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php b/typo3/sysext/extbase/Classes/MVC/View/Helper/URIHelper.php
new file mode 100644 (file)
index 0000000..da095cb
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A URI/Link Helper
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+class Tx_ExtBase_MVC_View_Helper_URIHelper extends Tx_ExtBase_MVC_View_Helper_AbstractHelper {
+
+       /**
+        * @var Tx_ExtBase_MVC_Web_Routing_RouterInterface
+        */
+       protected $router;
+
+       /**
+        * Creates a link by making use of the Routers reverse routing mechanism.
+        * 
+        * @param string $label Inner HTML of the generated link. Label is htmlspecialchared by default
+        * @param string $actionName Name of the action to be called
+        * @param array $arguments Additional arguments
+        * @param string $controllerName Name of the target controller. If not set, current controller is used
+        * @param string $extensionName Name of the target extension. If not set, current extension is used
+        * @param string $subextensionName Name of the target subextension. If not set, current subextension is used
+        * @param array $options Further options
+        * @return string the HTML code for the generated link
+        * @see UIRFor()
+        */
+       public function linkTo($label, $actionName, $arguments = array(), $controllerName = NULL, $extensionName = NULL) {
+               $link = '<a href="' . $this->URIFor($actionName, $arguments, $controllerName, $extensionName) . '">' . htmlspecialchars($label) . '</a>';
+               return $link;
+       }
+
+       /**
+        * Creates an URI by making use of the Routers reverse routing mechanism.
+        * 
+        * @param string $actionName Name of the action to be called
+        * @param array $arguments Additional arguments
+        * @param string $controllerName Name of the target controller. If not set, current controller is used
+        * @param string $extensionName Name of the target extension. If not set, current extension is used
+        * @param array $options Further options
+        * @return string the HTML code for the generated link
+        */
+       public function URIFor($actionName, $arguments = array(), $controllerName = NULL, $extensionName = NULL) {
+               $routeValues = $arguments;
+               $routeValues['@action'] = $actionName;
+               $routeValues['@controller'] = ($controllerName === NULL) ? $this->request->getControllerName() : $controllerName;
+               $routeValues['@extension'] = ($extensionName === NULL) ? $this->request->getExtensionName() : $extensionName;
+
+               $URIString = $this->router->resolve($routeValues);
+               return $URIString;
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/TemplateView.php b/typo3/sysext/extbase/Classes/MVC/View/TemplateView.php
new file mode 100644 (file)
index 0000000..e51822c
--- /dev/null
@@ -0,0 +1,418 @@
+<?php
+declare(ENCODING = 'utf-8');
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+require_once(PATH_tslib . 'class.tslib_content.php');
+require_once(PATH_t3lib . 'class.t3lib_parsehtml.php');
+
+/**
+ * A basic Template View
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_View_TemplateView extends Tx_ExtBase_MVC_View_AbstractView {
+
+       /**
+        * Pattern for fetching information from controller object name
+        * @var string
+        */
+       const PATTERN_CONTROLLER = '/^Tx_\w*_Controller_(?P<ControllerName>\w*)Controller$/sm';
+
+       const SCAN_PATTERN_SUBPARTS = '/<!--\s*###(?P<SubpartName>[^#]*)###.*?-->(?P<SubpartTemplateSource>.*?)<!--\s*###(?P=SubpartName)###.*?-->/sm';
+       const SCAN_PATTERN_MARKER = '/###(?P<MarkerName>.*?)###/sm';
+
+       const SPLIT_PATTERN_STATEMENT = '/(?:\s*(?P<ViewHelperName>[a-zA-Z0-9_]+):)?(?P<ContextVariable>(?:\s*[a-zA-Z0-9_]+)(?=(\s|$)))?(?P<ObjectAndProperty>(?:\s*[a-zA-Z0-9_]+\.(?:[a-zA-Z0-9_]+)(?=(\s|$))))?(?P<Attributes>(?:\s*[a-zA-Z0-9_]+=(?:"(?:[^"])*"|\'(?:[^\'])*\'|\{(?:[^\{])*\}|[a-zA-Z0-9_\.]+)\s*)*)/';
+       const SPLIT_PATTERN_ARGUMENTS = '/(?P<ArgumentKey>[a-zA-Z][a-zA-Z0-9_]*)=(?:(?:"(?P<ValueDoubleQuoted>[^"]+)")|(?:\'(?P<ValueSingleQuoted>[^\']+)\')|(?:\{(?P<ValueObject>[^\'\s]+)\})|(?:(?P<ValueUnquoted>[^"\'\s]*)))/';
+
+       /**
+        * File pattern for resolving the template file
+        * @var string
+        */
+       protected $templateFilePattern = 'Resources/Private/Templates/@controller/@action.html';
+
+       /**
+        * @var array Marker uids and their replacement content
+        */
+       protected $markers = array();
+
+       /**
+        * @var array Subparts
+        */
+       protected $subparts = array();
+
+       /**
+        * @var array Wrapped subparts
+        */
+       protected $wrappedSubparts = array();
+
+       /**
+        * Context variables
+        * @var array of context variables
+        */
+       protected $contextVariables = array();
+
+       /**
+        * Template file path. If set, overrides the templateFilePattern
+        * @var string
+        */
+       protected $templateFile = NULL;
+
+       /**
+        * @var string
+        */
+       protected $templateSource = '';
+
+       /**
+        * Name of current action to render
+        * @var string
+        */
+       protected $actionName;
+
+       /**
+        * The content object
+        *
+        * @var tslib_cObj
+        **/
+       private $cObj;
+       
+       public function __construct() {
+               $this->initializeView();
+       }
+
+       /**
+        * Initialize view
+        *
+        * @return void
+        */
+       protected function initializeView() {
+               $this->cObj = t3lib_div::makeInstance('tslib_cObj');
+       }
+
+       /**
+        * Sets the template file. Effectively overrides the dynamic resolving of a template file.
+        *
+        * @param string $templateFile Template file path
+        * @return void
+        */
+       public function setTemplateFile($templateFile) {
+               $this->templateFile = $templateFile;
+       }
+       
+       /**
+        * Sets the text source which contains the markers of this template view
+        * is going to fill in.
+        *
+        * @param string $templateSource The template source
+        * @return void
+        */
+       public function setTemplateSource($templateSource) {
+               $this->templateSource = $templateSource;
+       }
+
+       /**
+        * Resolve the template file path, based on $this->templateFilePath and $this->templatePathPattern.
+        * In case a template has been set with $this->setTemplateFile, it just uses the given template file.
+        * Otherwise, it resolves the $this->templatePathPattern
+        *
+        * @param string $action Name of action. Optional. Defaults to current action.
+        * @return string File name of template file
+        */
+       protected function resolveTemplateFile() {
+               if ($this->templateFile) {
+                       return $this->templateFile;
+               } else {
+                       $action = ($this->actionName ? $this->actionName : $this->request->getControllerActionName());
+                       preg_match(self::PATTERN_CONTROLLER, $this->request->getControllerObjectName(), $matches);
+                       $controllerName = $matches['ControllerName'];
+                       $templateFile = $this->templateFilePattern;
+                       $templateFile = str_replace('@controller', $controllerName, $templateFile);
+                       $templateFile = str_replace('@action', strtolower($action), $templateFile);
+                       return $templateFile;
+               }
+       }
+
+       /**
+        * Load the given template file.
+        *
+        * @param string $templateFilePath Full path to template file to load
+        * @return string the contents of the template file
+        */
+       protected function loadTemplateFile($templateFilePath) {
+               $templateSource = file_get_contents(t3lib_extMgm::extPath(strtolower($this->request->getExtensionName())) . $templateFilePath, FILE_TEXT);
+               if (!$templateSource) throw new RuntimeException('The template file "' . $templateFilePath . '" was not found.', 1225709595);
+               return $templateSource;
+       }
+
+       /**
+        * Find the XHTML template according to $this->templatePathPattern and render the template.
+        *
+        * @return string Rendered Template
+        */
+       public function render() {
+               if ($this->templateSource == '') {
+                       $templateFileName = $this->resolveTemplateFile();
+                       $templateSource = $this->loadTemplateFile($templateFileName);
+               } else {
+                       $templateSource = $this->templateSource;
+               }
+               $content = $this->renderTemplate($templateSource, $this->contextVariables);
+               $this->removeUnfilledMarkers($content);
+               return $content;
+       }
+
+       /**
+        * Recursive rendering of a given template source.
+        *
+        * @param string $templateSource The template source
+        * @return void
+        */
+       public function renderTemplate($templateSource, $variables) {
+               $content = '';
+               $subpartArray = array();
+               $subparts = $this->getSubparts($templateSource);
+               foreach ($subparts as $subpartMarker => $subpartSource) {
+                       $subpartArray['###' . $subpartMarker . '###'] = $this->getMarkerContent($subpartMarker, $variables, $subpartSource);
+               }
+
+               $markerArray = array();
+               $markers = $this->getMarkers($templateSource);
+               foreach ($markers as $marker => $foo) {
+                       $markerArray['###' . $marker . '###'] = $this->getMarkerContent($marker, $variables);
+               }
+               
+               $content = $this->cObj->substituteMarkerArrayCached($templateSource, $markerArray, $subpartArray);
+
+               return $content;
+       }
+       
+       /**
+        * Returns the markers and their values
+        *
+        * @param string $templateSource The template source code with markers
+        * @param string $value The value (only useful if the method is called recursively)
+        * @return array The array with marker-value pairs
+        */
+       public function getMarkerArray($templateSource, $value = NULL) {
+               $markers = $this->getMarkers($templateSource);
+               $markerArray = array();
+               foreach ($markers as $marker => $foo) {
+                       $markerArray['###' . $marker . '###'] = $this->getMarkerContent($marker, $value);
+               }
+               return $markerArray;
+       }
+       
+       /**
+        * Returns the value of a marker
+        *
+        * @param string $marker The marker as string (without ###|###)
+        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
+        * @param string $templateSource The template source code
+        * @return string The value
+        */
+       public function getMarkerContent($marker, $variables = NULL, $templateSource = NULL) {
+               $explodedMarker = t3lib_div::trimExplode('|', $marker);
+               foreach ($explodedMarker as $key => $statement) {
+                       preg_match(self::SPLIT_PATTERN_STATEMENT, $statement, $explodedStatement);
+                       $viewHelperName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedStatement['ViewHelperName']);
+                       $contextVariableName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedStatement['ContextVariable']);
+                       $explodedObjectAndProperty = explode('.', $explodedStatement['ObjectAndProperty']);
+                       $objectName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedObjectAndProperty[0]);
+                       $property = Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($explodedObjectAndProperty[1]);
+                       if (!empty($explodedStatement['Attributes'])) {
+                               $arguments = $this->getArguments($explodedStatement['Attributes'], $variables);
+                       }
+                       
+                       if ($variables[$objectName] instanceof Tx_ExtBase_DomainObject_AbstractDomainObject) {
+                               $object = $variables[$objectName];
+                               $possibleMethodName = 'get' . ucfirst($property);
+                               if (method_exists($object, $possibleMethodName)) {
+                                       $content = $object->$possibleMethodName(); // Properties should be already secure (XSS)
+                               }
+                       } elseif (!empty($variables[$contextVariableName])) {
+                               $content = filter_var($variables[$contextVariableName], FILTER_SANITIZE_STRING);
+                       }
+
+                       if (!empty($viewHelperName)) {
+                               $viewHelperClassName = 'Tx_ExtBase_MVC_View_Helper_' . $viewHelperName . 'Helper';
+                               $viewHelper = $this->getViewHelper($viewHelperClassName);
+                               $content = $viewHelper->render($this, $arguments, $content, $templateSource, $variables);
+                       }
+               }
+               return $content;
+       }
+       
+       /**
+        * Parses the attributes string and returns the arguments
+        *
+        * @param string $attributes The attributes string
+        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
+        * @return array The arguments as key => value
+        */
+       protected function getArguments($attributes, $variables) {
+               preg_match_all(self::SPLIT_PATTERN_ARGUMENTS, $attributes, $explodedAttributes, PREG_SET_ORDER);                
+               $arguments = array();
+               foreach ($explodedAttributes as $explodedAttribute) {
+                       if (!empty($explodedAttribute['ValueDoubleQuoted'])) {
+                                $argumentValue = $explodedAttribute['ValueDoubleQuoted'];
+                       } elseif (!empty($explodedAttribute['ValueSingleQuoted'])) {
+                               $argumentValue = $explodedAttribute['ValueSingleQuoted'];
+                       } elseif (!empty($explodedAttribute['ValueObject'])) {                          
+                               $argumentValue = $this->getValueForVariableAndKey($explodedAttribute['ValueObject'], $variables);
+                       } elseif (!empty($explodedAttribute['ValueUnquoted'])) {
+                               $argumentValue = $this->getValueForVariableAndKey($explodedAttribute['ValueUnquoted'], $variables);
+                       } else {
+                               $argumentValue = NULL;
+                       }
+                       $arguments[Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($explodedAttribute['ArgumentKey'])] = $argumentValue;
+               }
+               return $arguments;
+       }
+       
+       /**
+        * Replaces references (e.g. "{OBJECT.PROPERTY}") with the corresponding values
+        *
+        * @param string $theString The string perhaps containing references
+        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
+        * @return void
+        */
+       public function replaceReferencesWithValues(&$theString, $variables) {
+               preg_match_all('/(?:\{([^\s]*?)\})?/', $theString, $matches, PREG_SET_ORDER);
+               foreach ($matches as $match) {
+                       if (count($match) > 1) {
+                               $reference = $match[0];
+                               $value = $this->getValueForVariableAndKey($match[1], $variables);
+                       }
+                       $theString = str_replace($reference, $value, $theString);
+               }
+       }
+       
+       /**
+        * Returns the value for a given string with a (context) variable and a key (e.g. "PERSON.NAME" invokes $variables['person']->getName())
+        *
+        * @param string $variableAndKey The variable (mainly an object) and key (mainly a property of an object) linked with a dot (e.g. "PERSON.NAME")
+        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
+        * @return mixed The value
+        */
+       public function getValueForVariableAndKey($variableAndKey, $variables) {
+               $explodedVariableAndKey = explode('.', $variableAndKey);
+               $variable = $variables[Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedVariableAndKey[0])];
+               if (!empty($variable)) {
+                       if (count($explodedVariableAndKey) > 1) {
+                               $key = $explodedVariableAndKey[1];
+                               if (is_object($variable)) {
+                                       $possibleMethodName = 'get' . Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($key);
+                                       if (method_exists($variable, $possibleMethodName)) {
+                                               $value = $variable->$possibleMethodName();
+                                       }
+                               } elseif (is_array($variable)) {
+                                       $value = $variable[Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($key)];
+                               }
+                       } else {
+                               if (is_object($variable)) {
+                                       $value = $variable->__toString();
+                               } else {
+                                       $value = $variable;
+                               }
+                       }
+               }
+               return $value;
+       }
+
+       /**
+        * Returns the subparts and their values
+        *
+        * @param string $templateSource The template source
+        * @return array The subparts
+        */
+       protected function getSubpartArray($templateSource) {
+               $subpartArray = array();
+               if (count($subparts) > 0) {
+                       foreach ($subparts as $subpartMarker => $subpartTemplateSource) {
+                               $value = $this->getMarkerContent($subpartMarker);
+                               $subpartArray['###' . $subpartMarker . '###'] .= $this->renderTemplate($subpartTemplateSource, $value);
+                       }
+               }
+               return $subpartArray;
+       }
+       
+       /**
+        * Fetches all subparts from the template source
+        *
+        * @param string $templateSource The template source
+        * @return array An array of subpartName => subpartTemplateSource pairs
+        */
+       protected function getSubparts($templateSource) {
+               preg_match_all(self::SCAN_PATTERN_SUBPARTS, $templateSource, $matches, PREG_SET_ORDER);
+               $subparts = array();
+               if (is_array($matches)) {
+                       foreach ($matches as $key => $match) {
+                               $subparts[$match['SubpartName']] = $match['SubpartTemplateSource'];
+                       }
+               }
+               return $subparts;
+       }
+
+       /**
+        * Fetches all markers from the template source
+        *
+        * @param string $templateSource The template source
+        * @return array An array of markerNames as keys
+        */
+       protected function getMarkers($templateSource) {
+               preg_match_all(self::SCAN_PATTERN_MARKER, $templateSource, $matches, PREG_SET_ORDER);
+               $markers = array();
+               if (is_array($matches)) {
+                       foreach ($matches as $key => $match) {
+                               $markers[$match['MarkerName']] = NULL;
+                       }
+               }
+               return $markers;
+       }
+       
+       /**
+        * Removes unfilled markers from the rendered content
+        *
+        * @param string $content The content
+        * @return string The cleaned content
+        */             
+       protected function removeUnfilledMarkers(&$content) {
+               $content = preg_replace('/###.*###|<!--[^>]*###.*###[^<]*-->(.*)/msU', '', $content);
+       }
+
+       /**
+        * Assigns domain models (single objects or aggregates) or values to the view
+        *
+        * @param string $valueName The name of the value
+        * @param mixed $value the value to assign
+        * @return void
+        */
+       public function assign($key, $value) {
+               $this->contextVariables[$key] = $value;
+               return $this;
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/View/ViewInterface.php b/typo3/sysext/extbase/Classes/MVC/View/ViewInterface.php
new file mode 100644 (file)
index 0000000..a9647ac
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Interface of a view
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ */
+interface Tx_ExtBase_MVC_View_ViewInterface {
+
+       /**
+        * Sets the current request
+        *
+        * @param Tx_ExtBase_MVC_Request $request
+        * @return void
+        */
+       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 including namespace
+        * @return Tx_ExtBase_MVC_View_Helper_HelperInterface The View Helper instance
+        */
+       public function getViewHelper($viewHelperObjectName);
+
+       /**
+        * Renders the view
+        *
+        * @return string The rendered view
+        */
+       public function render();
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Web/Request.php b/typo3/sysext/extbase/Classes/MVC/Web/Request.php
new file mode 100755 (executable)
index 0000000..2dbdc1a
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Represents a web request.
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ *
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Web_Request extends Tx_ExtBase_MVC_Request {
+
+       /**
+        * @var string The requested representation format
+        */
+       protected $format = 'html';
+
+       /**
+        * @var string Contains the request method
+        */
+       protected $method = 'GET';
+
+       /**
+        * @var string
+        */
+       protected $requestURI;
+
+       /**
+        * @var string The base URI for this request - ie. the host and path leading to the index.php
+        */
+       protected $baseURI;
+
+       /**
+        * Sets the request method
+        *
+        * @param string $method Name of the request method
+        * @return void
+        * @throws Tx_ExtBase_Exception_InvalidRequestMethod if the request method is not supported
+        */
+       public function setMethod($method) {
+               if ($method === '' || (strtoupper($method) !== $method)) throw new Tx_ExtBase_Exception_InvalidRequestMethod('The request method "' . $method . '" is not supported.', 1217778382);
+               $this->method = $method;
+       }
+
+       /**
+        * Returns the name of the request method
+        *
+        * @return string Name of the request method
+        */
+       public function getMethod() {
+               return $this->method;
+       }
+
+       /**
+        * Sets the request URI
+        *
+        * @param string $requestURI URI of this web request
+        * @return void
+        */
+       public function setRequestURI($requestURI) {
+               $this->requestURI = $requestURI;
+       }
+
+       /**
+        * Returns the request URI
+        *
+        * @return F3_FLOW3_Property_DataType_URI URI of this web request
+        */
+       public function getRequestURI() {
+               return $this->requestURI;
+       }
+
+       /**
+        * Sets the base URI for this request.
+        *
+        * @param string $baseURI New base URI
+        * @return void
+        */
+       public function setBaseURI($baseURI) {
+               $this->baseURI = $baseURI;
+       }
+
+       /**
+        * Returns the base URI
+        *
+        * @return F3_FLOW3_Property_DataType_URI Base URI of this web request
+        */
+       public function getBaseURI() {
+               return $this->baseURI;
+       }
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/MVC/Web/Response.php b/typo3/sysext/extbase/Classes/MVC/Web/Response.php
new file mode 100755 (executable)
index 0000000..91847e4
--- /dev/null
@@ -0,0 +1,217 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A web specific response implementation
+ *
+ * @package TYPO3
+ * @subpackage extbase
+ * @version $ID:$
+ * @scope prototype
+ */
+class Tx_ExtBase_MVC_Web_Response extends Tx_ExtBase_MVC_Response {
+
+       /**
+        * Additional header tags
+        *
+        * @var array
+        */
+       protected $additionalHeaderData = array();
+
+       /**
+        * The HTTP status code
+        *
+        * @var integer
+        */
+       protected $statusCode = 200;
+
+       /**
+        * The HTTP status message
+        *
+        * @var string
+        */
+       protected $statusMessage = 'OK';
+
+       /**
+        * The standardized and other important HTTP Status messages
+        *
+        * @var array
+        */
+       protected $statusMessages = array(
+               100 => 'Continue',
+               101 => 'Switching Protocols',
+               102 => 'Processing', # RFC 2518
+               200 => 'OK',
+               201 => 'Created',
+               202 => 'Accepted',
+               203 => 'Non-Authoritative Information',
+               204 => 'No Content',
+               205 => 'Reset Content',
+               206 => 'Partial Content',
+               207 => 'Multi-Status',
+               300 => 'Multiple Choices',
+               301 => 'Moved Permanently',
+               302 => 'Found',
+               303 => 'See Other',
+               304 => 'Not Modified',
+               305 => 'Use Proxy',
+               307 => 'Temporary Redirect',
+               400 => 'Bad Request',
+               401 => 'Unauthorized',
+               402 => 'Payment Required',
+               403 => 'Forbidden',
+               404 => 'Not Found',
+               405 => 'Method Not Allowed',
+               406 => 'Not Acceptable',
+               407 => 'Proxy Authentication Required',
+               408 => 'Request Timeout',
+               409 => 'Conflict',
+               410 => 'Gone',
+               411 => 'Length Required',
+               412 => 'Precondition Failed',
+               413 => 'Request Entity Too Large',
+               414 => 'Request-URI Too Long',
+               415 => 'Unsupported Media Type',
+               416 => 'Requested Range Not Satisfiable',
+               417 => 'Expectation Failed',
+               500 => 'Internal Server Error',
+               501 => 'Not Implemented',
+               502 => 'Bad Gateway',
+               503 => 'Service Unavailable',
+               504 => 'Gateway Timeout',
+               505 => 'HTTP Version Not Supported',
+               507 => 'Insufficient Storage',
+               509 => 'Bandwidth Limit Exceeded',
+       );
+
+       /**
+        * Sets the HTTP status code and (optionally) a customized message.
+        *
+        * @param integer $code The status code
+        * @param string $message If specified, this message is sent instead of the standard message
+        * @return void
+        * @throws InvalidArgumentException if the specified status code is not valid
+        */
+       public function setStatus($code, $message = NULL) {
+               if (!is_int($code)) throw new InvalidArgumentException('The HTTP status code must be of type integer, ' . gettype($code) . ' given.', 1220526013);
+               if ($message === NULL && !isset($this->statusMessages[$code])) throw new InvalidArgumentException('No message found for HTTP status code "' . $code . '".', 1220526014);
+
+               $this->statusCode = $code;
+               $this->statusMessage = ($message === NULL) ? $this->statusMessages[$code] : $message;
+       }
+
+       /**
+        * Returns status code and status message.
+        *
+        * @return string The status code and status message, eg. "404 Not Found"
+        */
+       public function getStatus() {
+               return $this->statusCode . ' ' . $this->statusMessage;
+       }
+       
+       /**
+        * Sets the specified HTTP header
+        *
+        * @param string $name Name of the header, for example "Location", "Content-Description" etc.
+        * @param mixed $value The value of the given header
+        * @param boolean $replaceExistingHeader If a header with the same name should be replaced. Default is TRUE.
+        * @return void
+        */
+       public function setHeader($name, $value, $replaceExistingHeader = TRUE) {
+               if (strtoupper(substr($name, 0, 4)) === 'HTTP') throw new InvalidArgumentException('The HTTP status header must be set via setStatus().', 1220541963);
+               if ($replaceExistingHeader === TRUE || !isset($this->headers[$name])) {
+                       $this->headers[$name] = array($value);
+               } else {
+                       $this->headers[$name][] = $value;
+               }
+       }
+       
+       /**
+        * Returns the HTTP headers - including the status header - of this web response
+        *
+        * @return string The HTTP headers
+        */
+       public function getHeaders() {
+               $preparedHeaders = array();
+               $statusHeader = 'HTTP/1.1 ' . $this->statusCode . ' ' . $this->statusMessage;
+
+               $preparedHeaders[] = $statusHeader;
+               foreach ($this->headers as $name => $values) {
+                       foreach ($values as $value) {
+                               $preparedHeaders[] = $name . ': ' . $value;
+                       }
+               }
+               return $preparedHeaders;
+       }
+
+       /**
+        * Sends the HTTP headers.
+        *
+        * If headers have already been sent, this method fails silently.
+        *
+        * @return void
+        */
+       public function sendHeaders() {
+               if (headers_sent() === TRUE) return;
+               foreach ($this->getHeaders() as $header) {
+                       header($header);
+               }
+       }
+
+       /**
+        * Renders and sends the whole web response
+        *
+        * @return void
+        */
+       public function send() {
+               $this->sendHeaders();
+               if ($this->content !== NULL) {
+                       echo $this->getContent();
+               }
+       }
+
+       /**
+        * Adds an additional header data (something like
+        * '<script src="myext/Resources/JavaScript/my.js" type="text/javascript"></script>'
+        * )
+        *
+        * @param string $additionalHeaderData The value additonal header
+        * @return void
+        */
+       public function addAdditionalHeaderData($additionalHeaderData) {
+               if (!is_string($additionalHeaderData)) throw new InvalidArgumentException('The additiona header data must be of type String, ' . gettype($additionalHeaderData) . ' given.', 1237370877);
+               $this->additionalHeaderData[] = $additionalHeaderData;
+       }
+
+       /**
+        * Returns the additional header data
+        *
+        * @return array The additional header data
+        */
+       public function getAdditionalHeaderData() {
+               return $this->additionalHeaderData;
+       }
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Request.php b/typo3/sysext/extbase/Classes/Request.php
deleted file mode 100644 (file)
index fa11cf2..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * Represents a generic request.
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_Request {
-
-       const PATTERN_MATCH_FORMAT = '/^[a-z0-9]{1,5}$/';
-
-       /**
-        * Pattern after which the controller object name is built
-        *
-        * @var string
-        */
-       protected $controllerObjectNamePattern = 'Tx_@extension_Controller_@controllerController';
-
-       /**
-        * @var string Pattern after which the view object name is built
-        */
-       protected $viewObjectNamePattern = 'Tx_@extension_View_@controller@action';
-
-       /**
-        * @var string Name of the extension which is supposed to handle this request. This is the extension name converted to UpperCamelCase
-        */
-       protected $extensionName = 'ExtBase';
-
-       /**
-        * @var string Name of the controller which is supposed to handle this request.
-        */
-       protected $controllerName = 'Default';
-
-       /**
-        * @var string Name of the action the controller is supposed to take.
-        */
-       protected $controllerActionName = 'index';
-
-       /**
-        * @var ArrayObject The arguments for this request
-        */
-       protected $arguments;
-
-       /**
-        * @var string The requested representation format
-        */
-       protected $format = 'txt';
-
-       /**
-        * @var boolean If this request has been changed and needs to be dispatched again
-        */
-       protected $dispatched = FALSE;
-
-       /**
-        * Constructs this request
-        *
-        */
-       public function __construct() {
-               $this->arguments = new ArrayObject;
-       }
-
-       /**
-        * Sets the dispatched flag
-        *
-        * @param boolean $flag If this request has been dispatched
-        * @return void
-        */
-       public function setDispatched($flag) {
-               $this->dispatched = $flag ? TRUE : FALSE;
-       }
-
-       /**
-        * If this request has been dispatched and addressed by the responsible
-        * controller and the response is ready to be sent.
-        *
-        * The dispatcher will try to dispatch the request again if it has not been
-        * addressed yet.
-        *
-        * @return boolean TRUE if this request has been disptached sucessfully
-        */
-       public function isDispatched() {
-               return $this->dispatched;
-       }
-
-       /**
-        * Returns the object name of the controller defined by the extension name and
-        * controller name
-        *
-        * @return string The controller's Object Name
-        * @throws Tx_ExtBase_Exception_NoSuchController if the controller does not exist
-        */
-       public function getControllerObjectName() {
-               $lowercaseObjectName = str_replace('@extension', $this->extensionName, $this->controllerObjectNamePattern);
-               $lowercaseObjectName = str_replace('@controller', $this->controllerName, $lowercaseObjectName);
-               // TODO implement getCaseSensitiveObjectName()
-               $objectName = $lowercaseObjectName;
-               if ($objectName === FALSE) throw new Tx_ExtBase_Exception_NoSuchController('The controller object "' . $lowercaseObjectName . '" does not exist.', 1220884009);
-
-               return $objectName;
-       }
-
-       /**
-        * Sets the pattern for building the controller object name.
-        *
-        * The pattern may contain the placeholders "@extension" and "@controller" which will be substituted
-        * by the real extension name and controller name.
-        *
-        * @param string $pattern The pattern
-        * @return void
-        */
-       public function setControllerObjectNamePattern($pattern) {
-               $this->controllerObjectNamePattern = $pattern;
-       }
-
-       /**
-        * Returns the pattern for building the controller object name.
-        *
-        * @return string $pattern The pattern
-        */
-       public function getControllerObjectNamePattern() {
-               return $this->controllerObjectNamePattern;
-       }
-
-       /**
-        * Sets the pattern for building the view object name
-        *
-        * @param string $pattern The view object name pattern, eg. F3_@extension_View::@controller@action
-        * @return void
-        */
-       public function setViewObjectNamePattern($pattern) {
-               if (!is_string($pattern)) throw new InvalidArgumentException('The view object name pattern must be a valid string, ' . gettype($pattern) . ' given.', 1221563219);
-               $this->viewObjectNamePattern = $pattern;
-       }
-
-       /**
-        * Returns the View Object Name Pattern
-        *
-        * @return string The pattern
-        */
-       public function getViewObjectNamePattern() {
-               return $this->viewObjectNamePattern;
-       }
-
-       /**
-        * Returns the view's (possible) object name according to the defined view object
-        * name pattern and the specified values for extension, controller, action and format.
-        *
-        * If no valid view object name could be resolved, FALSE is returned
-        *
-        * @return mixed Either the view object name or FALSE
-        */
-       public function getViewObjectName() {
-               $possibleViewName = $this->viewObjectNamePattern;
-               $possibleViewName = str_replace('@extension', $this->extensionName, $possibleViewName);
-               $possibleViewName = str_replace('@controller', $this->controllerName, $possibleViewName);
-               $possibleViewName = str_replace('@action', ucfirst($this->controllerActionName), $possibleViewName);
-
-               $viewObjectName = $possibleViewName;
-               // $viewObjectName = str_replace('@format', $this->format, $possibleViewName); //$this->objectManager->getCaseSensitiveObjectName(str_replace('@format', $this->format, $possibleViewName)); // TODO
-               // if ($viewObjectName === FALSE) {
-               //      $viewObjectName = str_replace('@format', '', $possibleViewName); //$this->objectManager->getCaseSensitiveObjectName(str_replace('@format', '', $possibleViewName));
-               // }
-               return $viewObjectName;
-       }
-
-       /**
-        * Sets the extension name of the controller.
-        *
-        * @param string $extensionName The extension name.
-        * @return void
-        * @throws Tx_ExtBase_Exception_InvalidExtensionName if the extension name is not valid
-        */
-       public function setExtensionName($extensionName) {
-               $upperCamelCasedExtensionName = $extensionName; //$this->packageManager->getCaseSensitiveExtensionName($extensionName);  // TODO implement getCaseSensitiveExtensionName()
-               if ($upperCamelCasedExtensionName === FALSE) throw new Tx_ExtBase_Exception_InvalidExtensionName('"' . $extensionName . '" is not a valid extension name.', 1217961104);
-               $this->extensionName = $upperCamelCasedExtensionName;
-       }
-
-       /**
-        * Returns the extension name of the specified controller.
-        *
-        * @return string The extension name
-        */
-       public function getExtensionName() {
-               return $this->extensionName;
-       }
-
-       /**
-        * Sets the name of the controller which is supposed to handle the request.
-        * Note: This is not the object name of the controller!
-        *
-        * @param string $controllerName Name of the controller
-        * @return void
-        */
-       public function setControllerName($controllerName) {
-               if (!is_string($controllerName)) throw new Tx_ExtBase_Exception_InvalidControllerName('The controller name must be a valid string, ' . gettype($controllerName) . ' given.', 1187176358);
-               if (strpos($controllerName, '_') !== FALSE) throw new Tx_ExtBase_Exception_InvalidControllerName('The controller name must not contain underscores.', 1217846412);
-               $this->controllerName = $controllerName;
-       }
-
-       /**
-        * Returns the object name of the controller supposed to handle this request, if one
-        * was set already (if not, the name of the default controller is returned)
-        *
-        * @return string Object name of the controller
-        */
-       public function getControllerName() {
-               return $this->controllerName;
-       }
-
-       /**
-        * Sets the name of the action contained in this request.
-        *
-        * Note that the action name must start with a lower case letter.
-        *
-        * @param string $actionName: Name of the action to execute by the controller
-        * @return void
-        * @throws Tx_ExtBase_Exception_InvalidActionName if the action name is not valid
-        */
-       public function setControllerActionName($actionName) {
-               if (!is_string($actionName)) throw new Tx_ExtBase_Exception_InvalidActionName('The action name must be a valid string, ' . gettype($actionName) . ' given (' . $actionName . ').', 1187176358);
-               if ($actionName{0} !== strtolower($actionName{0})) throw new Tx_ExtBase_Exception_InvalidActionName('The action name must start with a lower case letter, "' . $actionName . '" does not match this criteria.', 1218473352);
-               $this->controllerActionName = $actionName;
-       }
-
-       /**
-        * Returns the name of the action the controller is supposed to execute.
-        *
-        * @return string Action name
-        */
-       public function getControllerActionName() {
-               return $this->controllerActionName;
-       }
-
-       /**
-        * Sets the value of the specified argument
-        *
-        * @param string $argumentName Name of the argument to set
-        * @param mixed $value The new value
-        * @return void
-        */
-       public function setArgument($argumentName, $value) {
-               if (!is_string($argumentName) || strlen($argumentName) == 0) throw new Tx_ExtBase_Exception_InvalidArgumentName('Invalid argument name.', 1210858767);
-               $this->arguments[$argumentName] = $value;
-       }
-
-       /**
-        * Sets the whole arguments ArrayObject and therefore replaces any arguments
-        * which existed before.
-        *
-        * @param ArrayObject $arguments An ArrayObject of argument names and their values
-        * @return void
-        */
-       public function setArguments(ArrayObject $arguments) {
-               $this->arguments = $arguments;
-       }
-
-       /**
-        * Returns an ArrayObject of arguments and their values
-        *
-        * @return ArrayObject ArrayObject of arguments and their values (which may be arguments and values as well)
-        */
-       public function getArguments() {
-               return $this->arguments;
-       }
-
-       /**
-        * Returns the value of the specified argument
-        *
-        * @param string $argumentName Name of the argument
-        * @return string Value of the argument
-        * @throws Tx_ExtBase_Exception_NoSuchArgument if such an argument does not exist
-        */
-       public function getArgument($argumentName) {
-               if (!isset($this->arguments[$argumentName])) throw new Tx_ExtBase_Exception_NoSuchArgument('An argument "' . $argumentName . '" does not exist for this request.', 1176558158);
-               return $this->arguments[$argumentName];
-       }
-
-       /**
-        * Checks if an argument of the given name exists (is set)
-        *
-        * @param string $argumentName Name of the argument to check
-        * @return boolean TRUE if the argument is set, otherwise FALSE
-        */
-       public function hasArgument($argumentName) {
-               return isset($this->arguments[$argumentName]);
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Response.php b/typo3/sysext/extbase/Classes/Response.php
deleted file mode 100644 (file)
index 40c624c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A generic and very basic response implementation
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_Response {
-
-       /**
-        * @var string The response content
-        */
-       protected $content = NULL;
-
-       /**
-        * Overrides and sets the content of the response
-        *
-        * @param string $content The response content
-        * @return void
-        */
-       public function setContent($content) {
-               $this->content = $content;
-       }
-
-       /**
-        * Appends content to the already existing content.
-        *
-        * @param string $content More response content
-        * @return void
-        */
-       public function appendContent($content) {
-               $this->content .= $content;
-       }
-
-       /**
-        * Returns the response content without sending it.
-        *
-        * @return string The response content
-        */
-       public function getContent() {
-               return $this->content;
-       }
-
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/AbstractView.php b/typo3/sysext/extbase/Classes/View/AbstractView.php
deleted file mode 100755 (executable)
index 90ca12f..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * An abstract View
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-abstract class Tx_ExtBase_View_AbstractView implements Tx_ExtBase_View_ViewInterface {
-
-       /**
-        * @var Tx_ExtBase_Request
-        */
-       protected $request;
-
-       /**
-        * @var array of Tx_ExtBase_View_Helper_HelperInterface
-        */
-       protected $viewHelpers;
-
-       /**
-        * @var array
-        */
-       protected $contextVariables = array();
-
-       /**
-        * Sets the current request
-        *
-        * @param Tx_ExtBase_Request $request
-        * @return void
-        */
-       public function setRequest(Tx_ExtBase_Request $request) {
-               $this->request = $request;
-       }
-
-       /**
-        * Returns an View Helper instance.
-        * View Helpers must implement the interface Tx_ExtBase_View_Helper_HelperInterface
-        *
-        * @param string $viewHelperClassName the full name of the View Helper Class including 
-        * @return Tx_ExtBase_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_View_Helper_HelperInterface) {
-                               throw new Tx_ExtBase_Exception_InvalidViewHelper('View Helpers must implement interface "Tx_ExtBase_View_Helper_HelperInterface"', 1222895456);
-                       }
-                       $viewHelper->setRequest($this->request);
-                       $this->viewHelpers[$viewHelperClassName] = $viewHelper;
-               }
-               return $this->viewHelpers[$viewHelperClassName];
-       }
-
-       /**
-        * Initializes this view.
-        *
-        * Override this method for initializing your concrete view implementation.
-        *
-        * @return void
-        */
-       protected function initializeView() {
-       }
-       
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/DefaultView.php b/typo3/sysext/extbase/Classes/View/DefaultView.php
deleted file mode 100755 (executable)
index f9e5e6b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * The default view - a special case.
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_DefaultView extends Tx_ExtBase_View_AbstractView {
-
-       /**
-        * Renders the default view
-        *
-        * @return string The rendered view
-        * @throws Tx_ExtBase_Exception if no request has been set
-        */
-       public function render() {
-               if (!is_object($this->request)) throw new Tx_ExtBase_Exception('Can\'t render view without request object.', 1192450280);
-
-               $template = t3lib_div::makeInstance('Tx_ExtBase_View_TemplateView');
-               $template->setTemplateResource($this->resourceManager->getResource('file://FLOW3/Public/MVC/DefaultView_Template.html')->getContent());
-
-               if ($this->request instanceof Tx_ExtBase_Web_Request) {
-                       $template->setMarkerContent('baseuri', $this->request->getBaseURI());
-               }
-               return $template->render();
-       }
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/EmptyView.php b/typo3/sysext/extbase/Classes/View/EmptyView.php
deleted file mode 100644 (file)
index b028ca0..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * An empty view - a special case.
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_EmptyView extends Tx_ExtBase_View_AbstractView {
-
-       /**
-        * Renders the empty view
-        *
-        * @return string An empty string
-        */
-       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
-        */
-       public function __call($methodName, array $arguments) {
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/AbstractHelper.php b/typo3/sysext/extbase/Classes/View/Helper/AbstractHelper.php
deleted file mode 100644 (file)
index e7f1c70..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * An abstract View Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-abstract class Tx_ExtBase_View_Helper_AbstractHelper implements Tx_ExtBase_View_Helper_HelperInterface {
-
-       /**
-        * @var Tx_ExtBase_Web_Request
-        */
-       protected $request;
-
-       /**
-        * Sets the current request
-        */
-       public function setRequest(Tx_ExtBase_Web_Request $request) {
-               $this->request = $request;
-       }
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/ConvertHelper.php b/typo3/sysext/extbase/Classes/View/Helper/ConvertHelper.php
deleted file mode 100644 (file)
index 5e39b5f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A Converter Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_Helper_ConvertHelper extends Tx_ExtBase_View_Helper_AbstractHelper {
-
-       public function render($view, $arguments, $content, $templateSource, $variables) {
-               $value = $content;
-               $format = $arguments['format'];
-               if ($value instanceof DateTime) {
-                       if ($format === NULL) {
-                               $value = $value->format('Y-m-d G:i');
-                       } else {
-                               $value = $value->format($format);
-                       }
-               } else {
-               }
-               return $value;
-       }
-       
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/ForHelper.php b/typo3/sysext/extbase/Classes/View/Helper/ForHelper.php
deleted file mode 100644 (file)
index 726198a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A For Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_Helper_ForHelper extends Tx_ExtBase_View_Helper_AbstractHelper {
-
-       public function render($view, $arguments, $content, $templateSource, $variables) {
-               if (is_array($arguments['each'])) {
-                       foreach ($arguments['each'] as $singleElement) {
-                               $variables[Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($arguments['as'])] = $singleElement;
-                               $newContent .= $view->renderTemplate($templateSource, $variables);
-                       }
-               }
-               return $newContent;
-       }
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/HelperInterface.php b/typo3/sysext/extbase/Classes/View/Helper/HelperInterface.php
deleted file mode 100644 (file)
index 76da7a4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * View Helper interface
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-interface Tx_ExtBase_View_Helper_HelperInterface {
-
-       /**
-        * Sets the current request
-        */
-       public function setRequest(Tx_ExtBase_Web_Request $request);
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/LinkHelper.php b/typo3/sysext/extbase/Classes/View/Helper/LinkHelper.php
deleted file mode 100644 (file)
index c1d844b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-require_once(PATH_tslib . 'class.tslib_content.php');
-
-/**
- * A For Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_Helper_LinkHelper extends Tx_ExtBase_View_Helper_AbstractHelper {
-
-       /**
-        * an instance of tslib_cObj
-        *
-        * @var tslib_cObj
-        */
-       protected $contentObject = null;
-
-       /**
-        * constructor for class tx_community_viewhelper_Link
-        */
-       public function __construct(array $arguments = array()) {
-               if (is_null($this->contentObject)) {
-                       $this->contentObject = t3lib_div::makeInstance('tslib_cObj');
-               }
-       }
-
-       /**
-        * This method renders the link of the View Helper
-        *
-        * @param string $view The view invoked the view helper
-        * @param string $content The content
-        * @param string $arguments 
-        * @param string $templateSource 
-        * @param string $variables 
-        * @return string A content wrapped in a link
-        */
-       public function render($view, $arguments, $content, $templateSource, $variables) {
-               $parameters = t3lib_div::_GET();
-               $prefixedExtensionKey = 'tx_' . strtolower($this->request->getExtensionName()) . '_' . strtolower($this->request->getControllerName());
-               if (!empty($arguments['to'])) {
-                       $linkTo = $arguments['to'];
-                       $view->replaceReferencesWithValues($linkTo, $variables);
-                       unset($parameters['id']);
-               }
-               if (!empty($arguments['parameters'])) {
-                       $explodedParameters = explode(' ', $arguments['parameters']);
-                       $additionalParameters = array();
-                       foreach ($explodedParameters as $parameterString) {
-                               list($parameterKey, $parameterValue) = explode('=', trim($parameterString));
-                               $view->replaceReferencesWithValues($parameterValue, $variables);
-                               $additionalParameters[$prefixedExtensionKey] = array(trim($parameterKey) => $parameterValue);
-                               if (is_array($parameters[$prefixedExtensionKey])) {
-                                       $parameters[$prefixedExtensionKey] = array_merge($parameters[$prefixedExtensionKey], $additionalParameters[$prefixedExtensionKey]);
-                               } else {
-                                       $parameters[$prefixedExtensionKey] = $additionalParameters[$prefixedExtensionKey];
-                               }
-                       }
-               }
-               $linkText = $view->renderTemplate($templateSource, $variables);
-               $parameters = is_array($parameters) ? t3lib_div::implodeArrayForUrl('', $parameters, '', 1) : '';
-               $link = $this->contentObject->typoLink(
-                       $linkText,
-                       array(
-                               'parameter' => $linkTo,
-                               'additionalParams' => $parameters
-                       )
-               );
-               return $link;
-       }
-                       
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/TranslateHelper.php b/typo3/sysext/extbase/Classes/View/Helper/TranslateHelper.php
deleted file mode 100644 (file)
index 5a8aa59..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A For Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_Helper_TranslateHelper extends Tx_ExtBase_View_Helper_AbstractHelper {
-
-       /**
-        * @var string
-        */
-       protected $languagePath = 'Resources/Private/Language/';
-
-       /**
-        * Local Language content
-        *
-        * @var string
-        **/
-       protected $LOCAL_LANG = array();
-
-       /**
-        * Local Language content charset for individual labels (overriding)
-        *
-        * @var string
-        **/
-       protected $LOCAL_LANG_charset = array();
-
-       /**
-        * Key of the language to use
-        *
-        * @var string
-        **/
-       protected $languageKey = 'default';
-
-       /**
-        * Pointer to alternative fall-back language to use
-        *
-        * @var string
-        **/
-       protected $alternativeLanguageKey = '';
-       // var $LLtestPrefix='';                        // You can set this during development to some value that makes it easy for you to spot all labels that ARe delivered by the getLL function.
-       // var $LLtestPrefixAlt='';             // Save as LLtestPrefix, but additional prefix for the alternative value in getLL() function calls
-       
-
-       public function render($view, $arguments, $content, $templateSource, $variables) {
-               $this->initializeLocalization($view);
-               $translation = $this->translate($arguments['key']);
-               return (is_string($translation) && !empty($translation)) ? $translation : '';
-       }
-       
-       /**
-        * Loads local-language values by looking for a "locallang.php" file in the plugin class directory ($this->scriptRelPath) and if found includes it.
-        * Also locallang values set in the TypoScript property "_LOCAL_LANG" are merged onto the values found in the "locallang.php" file.
-        *
-        * @return      void
-        */
-       protected function initializeLocalization($view)        {
-               $languageFilePath = t3lib_extMgm::extPath(strtolower($this->request->getExtensionName())) . $this->languagePath . 'locallang.php';
-
-               if ($GLOBALS['TSFE']->config['config']['language'])     {
-                       $this->languageKey = $GLOBALS['TSFE']->config['config']['language'];
-                       if ($GLOBALS['TSFE']->config['config']['language_alt']) {
-                               $this->alternativeLanguageKey = $GLOBALS['TSFE']->config['config']['language_alt'];
-                       }
-               }
-
-               $this->LOCAL_LANG = t3lib_div::readLLfile($languageFilePath, $this->languageKey, $GLOBALS['TSFE']->renderCharset);
-               if ($this->alternativeLanguageKey)      {
-                       $tempLOCAL_LANG = t3lib_div::readLLfile($languageFilePath, $this->alternativeLanguageKey);
-                       $this->LOCAL_LANG = array_merge(is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array(), $tempLOCAL_LANG);
-               }
-
-               $configurationManager = t3lib_div::makeInstance('Tx_ExtBase_Configuration_Manager');
-               $settings = $configurationManager->getSettings($this->request->getExtensionName());
-               if (is_array($settings['_LOCAL_LANG'])) {
-                       foreach ($settings['_LOCAL_LANG'] as $k => $lA) {
-                               if (is_array($lA)) {
-                                       foreach($lA as $llK => $llV) {
-                                               if (!is_array($llV)) {
-                                                       $this->LOCAL_LANG[$k][$llK] = $llV;
-                                                               // For labels coming from the TypoScript (database) the charset is assumed to be "forceCharset" and if that is not set, assumed to be that of the individual system languages
-                                                       $this->LOCAL_LANG_charset[$k][$llK] = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] ? $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] : $GLOBALS['TSFE']->csConvObj->charSetArray[$k];
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       /**
-        * Returns the localized label of the LOCAL_LANG key, $key
-        * Notice that for debugging purposes prefixes for the output values can be set with the internal vars ->LLtestPrefixAlt and ->LLtestPrefix
-        *
-        * @param       string          The key from the LOCAL_LANG array for which to return the value.
-        * @param       string          Alternative string to return IF no value is found set for the key, neither for the local language nor the default.
-        * @param       boolean         If true, the output label is passed through htmlspecialchars()
-        * @return      string          The value from LOCAL_LANG.
-        */
-       function translate($key, $default = '', $filterTranslation = FALSE)     {
-               // The "from" charset of csConv() is only set for strings from TypoScript via _LOCAL_LANG
-               if (isset($this->LOCAL_LANG[$this->languageKey][$key])) {
-                       $translation = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->languageKey][$key], $this->LOCAL_LANG_charset[$this->languageKey][$key]);
-               } elseif ($this->alternativeLanguageKey && isset($this->LOCAL_LANG[$this->alternativeLanguageKey][$key]))       {
-                       $translation = $GLOBALS['TSFE']->csConv($this->LOCAL_LANG[$this->alternativeLanguageKey][$key], $this->LOCAL_LANG_charset[$this->alternativeLanguageKey][$key]);
-               } elseif (isset($this->LOCAL_LANG['default'][$key]))    {
-                       $translation = $this->LOCAL_LANG['default'][$key];      // No charset conversion because default is english and thereby ASCII
-               } else {
-                       $translation = $default;
-               }
-               return $filterTranslation === TRUE ? htmlspecialchars($translation) : $translation;
-       }
-       
-       
-
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/Helper/URIHelper.php b/typo3/sysext/extbase/Classes/View/Helper/URIHelper.php
deleted file mode 100644 (file)
index cb11d88..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A URI/Link Helper
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-class Tx_ExtBase_View_Helper_URIHelper extends Tx_ExtBase_View_Helper_AbstractHelper {
-
-       /**
-        * @var Tx_ExtBase_Web_Routing_RouterInterface
-        */
-       protected $router;
-
-       /**
-        * Creates a link by making use of the Routers reverse routing mechanism.
-        * 
-        * @param string $label Inner HTML of the generated link. Label is htmlspecialchared by default
-        * @param string $actionName Name of the action to be called
-        * @param array $arguments Additional arguments
-        * @param string $controllerName Name of the target controller. If not set, current controller is used
-        * @param string $extensionName Name of the target extension. If not set, current extension is used
-        * @param string $subextensionName Name of the target subextension. If not set, current subextension is used
-        * @param array $options Further options
-        * @return string the HTML code for the generated link
-        * @see UIRFor()
-        */
-       public function linkTo($label, $actionName, $arguments = array(), $controllerName = NULL, $extensionName = NULL) {
-               $link = '<a href="' . $this->URIFor($actionName, $arguments, $controllerName, $extensionName) . '">' . htmlspecialchars($label) . '</a>';
-               return $link;
-       }
-
-       /**
-        * Creates an URI by making use of the Routers reverse routing mechanism.
-        * 
-        * @param string $actionName Name of the action to be called
-        * @param array $arguments Additional arguments
-        * @param string $controllerName Name of the target controller. If not set, current controller is used
-        * @param string $extensionName Name of the target extension. If not set, current extension is used
-        * @param array $options Further options
-        * @return string the HTML code for the generated link
-        */
-       public function URIFor($actionName, $arguments = array(), $controllerName = NULL, $extensionName = NULL) {
-               $routeValues = $arguments;
-               $routeValues['@action'] = $actionName;
-               $routeValues['@controller'] = ($controllerName === NULL) ? $this->request->getControllerName() : $controllerName;
-               $routeValues['@extension'] = ($extensionName === NULL) ? $this->request->getExtensionName() : $extensionName;
-
-               $URIString = $this->router->resolve($routeValues);
-               return $URIString;
-       }
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/TemplateView.php b/typo3/sysext/extbase/Classes/View/TemplateView.php
deleted file mode 100644 (file)
index feea417..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-<?php
-declare(ENCODING = 'utf-8');
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-require_once(PATH_tslib . 'class.tslib_content.php');
-require_once(PATH_t3lib . 'class.t3lib_parsehtml.php');
-
-/**
- * A basic Template View
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_View_TemplateView extends Tx_ExtBase_View_AbstractView {
-
-       /**
-        * Pattern for fetching information from controller object name
-        * @var string
-        */
-       const PATTERN_CONTROLLER = '/^Tx_\w*_Controller_(?P<ControllerName>\w*)Controller$/sm';
-
-       const SCAN_PATTERN_SUBPARTS = '/<!--\s*###(?P<SubpartName>[^#]*)###.*?-->(?P<SubpartTemplateSource>.*?)<!--\s*###(?P=SubpartName)###.*?-->/sm';
-       const SCAN_PATTERN_MARKER = '/###(?P<MarkerName>.*?)###/sm';
-
-       const SPLIT_PATTERN_STATEMENT = '/(?:\s*(?P<ViewHelperName>[a-zA-Z0-9_]+):)?(?P<ContextVariable>(?:\s*[a-zA-Z0-9_]+)(?=(\s|$)))?(?P<ObjectAndProperty>(?:\s*[a-zA-Z0-9_]+\.(?:[a-zA-Z0-9_]+)(?=(\s|$))))?(?P<Attributes>(?:\s*[a-zA-Z0-9_]+=(?:"(?:[^"])*"|\'(?:[^\'])*\'|\{(?:[^\{])*\}|[a-zA-Z0-9_\.]+)\s*)*)/';
-       const SPLIT_PATTERN_ARGUMENTS = '/(?P<ArgumentKey>[a-zA-Z][a-zA-Z0-9_]*)=(?:(?:"(?P<ValueDoubleQuoted>[^"]+)")|(?:\'(?P<ValueSingleQuoted>[^\']+)\')|(?:\{(?P<ValueObject>[^\'\s]+)\})|(?:(?P<ValueUnquoted>[^"\'\s]*)))/';
-
-       /**
-        * File pattern for resolving the template file
-        * @var string
-        */
-       protected $templateFilePattern = 'Resources/Private/Templates/@controller/@action.html';
-
-       /**
-        * @var array Marker uids and their replacement content
-        */
-       protected $markers = array();
-
-       /**
-        * @var array Subparts
-        */
-       protected $subparts = array();
-
-       /**
-        * @var array Wrapped subparts
-        */
-       protected $wrappedSubparts = array();
-
-       /**
-        * Context variables
-        * @var array of context variables
-        */
-       protected $contextVariables = array();
-
-       /**
-        * Template file path. If set, overrides the templateFilePattern
-        * @var string
-        */
-       protected $templateFile = NULL;
-
-       /**
-        * @var string
-        */
-       protected $templateSource = '';
-
-       /**
-        * Name of current action to render
-        * @var string
-        */
-       protected $actionName;
-
-       /**
-        * The content object
-        *
-        * @var tslib_cObj
-        **/
-       private $cObj;
-       
-       public function __construct() {
-               $this->initializeView();
-       }
-
-       /**
-        * Initialize view
-        *
-        * @return void
-        */
-       protected function initializeView() {
-               $this->cObj = t3lib_div::makeInstance('tslib_cObj');
-       }
-
-       /**
-        * Sets the template file. Effectively overrides the dynamic resolving of a template file.
-        *
-        * @param string $templateFile Template file path
-        * @return void
-        */
-       public function setTemplateFile($templateFile) {
-               $this->templateFile = $templateFile;
-       }
-       
-       /**
-        * Sets the text source which contains the markers of this template view
-        * is going to fill in.
-        *
-        * @param string $templateSource The template source
-        * @return void
-        */
-       public function setTemplateSource($templateSource) {
-               $this->templateSource = $templateSource;
-       }
-
-       /**
-        * Resolve the template file path, based on $this->templateFilePath and $this->templatePathPattern.
-        * In case a template has been set with $this->setTemplateFile, it just uses the given template file.
-        * Otherwise, it resolves the $this->templatePathPattern
-        *
-        * @param string $action Name of action. Optional. Defaults to current action.
-        * @return string File name of template file
-        */
-       protected function resolveTemplateFile() {
-               if ($this->templateFile) {
-                       return $this->templateFile;
-               } else {
-                       $action = ($this->actionName ? $this->actionName : $this->request->getControllerActionName());
-                       preg_match(self::PATTERN_CONTROLLER, $this->request->getControllerObjectName(), $matches);
-                       $controllerName = $matches['ControllerName'];
-                       $templateFile = $this->templateFilePattern;
-                       $templateFile = str_replace('@controller', $controllerName, $templateFile);
-                       $templateFile = str_replace('@action', strtolower($action), $templateFile);
-                       return $templateFile;
-               }
-       }
-
-       /**
-        * Load the given template file.
-        *
-        * @param string $templateFilePath Full path to template file to load
-        * @return string the contents of the template file
-        */
-       protected function loadTemplateFile($templateFilePath) {
-               $templateSource = file_get_contents(t3lib_extMgm::extPath(strtolower($this->request->getExtensionName())) . $templateFilePath, FILE_TEXT);
-               if (!$templateSource) throw new RuntimeException('The template file "' . $templateFilePath . '" was not found.', 1225709595);
-               return $templateSource;
-       }
-
-       /**
-        * Find the XHTML template according to $this->templatePathPattern and render the template.
-        *
-        * @return string Rendered Template
-        */
-       public function render() {
-               if ($this->templateSource == '') {
-                       $templateFileName = $this->resolveTemplateFile();
-                       $templateSource = $this->loadTemplateFile($templateFileName);
-               } else {
-                       $templateSource = $this->templateSource;
-               }
-               $content = $this->renderTemplate($templateSource, $this->contextVariables);
-               $this->removeUnfilledMarkers($content);
-               return $content;
-       }
-
-       /**
-        * Recursive rendering of a given template source.
-        *
-        * @param string $templateSource The template source
-        * @return void
-        */
-       public function renderTemplate($templateSource, $variables) {
-               $content = '';
-               $subpartArray = array();
-               $subparts = $this->getSubparts($templateSource);
-               foreach ($subparts as $subpartMarker => $subpartSource) {
-                       $subpartArray['###' . $subpartMarker . '###'] = $this->getMarkerContent($subpartMarker, $variables, $subpartSource);
-               }
-
-               $markerArray = array();
-               $markers = $this->getMarkers($templateSource);
-               foreach ($markers as $marker => $foo) {
-                       $markerArray['###' . $marker . '###'] = $this->getMarkerContent($marker, $variables);
-               }
-               
-               $content = $this->cObj->substituteMarkerArrayCached($templateSource, $markerArray, $subpartArray);
-
-               return $content;
-       }
-       
-       /**
-        * Returns the markers and their values
-        *
-        * @param string $templateSource The template source code with markers
-        * @param string $value The value (only useful if the method is called recursively)
-        * @return array The array with marker-value pairs
-        */
-       public function getMarkerArray($templateSource, $value = NULL) {
-               $markers = $this->getMarkers($templateSource);
-               $markerArray = array();
-               foreach ($markers as $marker => $foo) {
-                       $markerArray['###' . $marker . '###'] = $this->getMarkerContent($marker, $value);
-               }
-               return $markerArray;
-       }
-       
-       /**
-        * Returns the value of a marker
-        *
-        * @param string $marker The marker as string (without ###|###)
-        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
-        * @param string $templateSource The template source code
-        * @return string The value
-        */
-       public function getMarkerContent($marker, $variables = NULL, $templateSource = NULL) {
-               $explodedMarker = t3lib_div::trimExplode('|', $marker);
-               foreach ($explodedMarker as $key => $statement) {
-                       preg_match(self::SPLIT_PATTERN_STATEMENT, $statement, $explodedStatement);
-                       $viewHelperName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedStatement['ViewHelperName']);
-                       $contextVariableName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedStatement['ContextVariable']);
-                       $explodedObjectAndProperty = explode('.', $explodedStatement['ObjectAndProperty']);
-                       $objectName = Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedObjectAndProperty[0]);
-                       $property = Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($explodedObjectAndProperty[1]);
-                       if (!empty($explodedStatement['Attributes'])) {
-                               $arguments = $this->getArguments($explodedStatement['Attributes'], $variables);
-                       }
-                       
-                       if ($variables[$objectName] instanceof Tx_ExtBase_DomainObject_AbstractDomainObject) {
-                               $object = $variables[$objectName];
-                               $possibleMethodName = 'get' . ucfirst($property);
-                               if (method_exists($object, $possibleMethodName)) {
-                                       $content = $object->$possibleMethodName(); // Properties should be already secure (XSS)
-                               }
-                       } elseif (!empty($variables[$contextVariableName])) {
-                               $content = filter_var($variables[$contextVariableName], FILTER_SANITIZE_STRING);
-                       }
-
-                       if (!empty($viewHelperName)) {
-                               $viewHelperClassName = 'Tx_ExtBase_View_Helper_' . $viewHelperName . 'Helper';
-                               $viewHelper = $this->getViewHelper($viewHelperClassName);
-                               $content = $viewHelper->render($this, $arguments, $content, $templateSource, $variables);
-                       }
-               }
-               return $content;
-       }
-       
-       /**
-        * Parses the attributes string and returns the arguments
-        *
-        * @param string $attributes The attributes string
-        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
-        * @return array The arguments as key => value
-        */
-       protected function getArguments($attributes, $variables) {
-               preg_match_all(self::SPLIT_PATTERN_ARGUMENTS, $attributes, $explodedAttributes, PREG_SET_ORDER);                
-               $arguments = array();
-               foreach ($explodedAttributes as $explodedAttribute) {
-                       if (!empty($explodedAttribute['ValueDoubleQuoted'])) {
-                                $argumentValue = $explodedAttribute['ValueDoubleQuoted'];
-                       } elseif (!empty($explodedAttribute['ValueSingleQuoted'])) {
-                               $argumentValue = $explodedAttribute['ValueSingleQuoted'];
-                       } elseif (!empty($explodedAttribute['ValueObject'])) {                          
-                               $argumentValue = $this->getValueForVariableAndKey($explodedAttribute['ValueObject'], $variables);
-                       } elseif (!empty($explodedAttribute['ValueUnquoted'])) {
-                               $argumentValue = $this->getValueForVariableAndKey($explodedAttribute['ValueUnquoted'], $variables);
-                       } else {
-                               $argumentValue = NULL;
-                       }
-                       $arguments[Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($explodedAttribute['ArgumentKey'])] = $argumentValue;
-               }
-               return $arguments;
-       }
-       
-       /**
-        * Replaces references (e.g. "{OBJECT.PROPERTY}") with the corresponding values
-        *
-        * @param string $theString The string perhaps containing references
-        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
-        * @return void
-        */
-       public function replaceReferencesWithValues(&$theString, $variables) {
-               preg_match_all('/(?:\{([^\s]*?)\})?/', $theString, $matches, PREG_SET_ORDER);
-               foreach ($matches as $match) {
-                       if (count($match) > 1) {
-                               $reference = $match[0];
-                               $value = $this->getValueForVariableAndKey($match[1], $variables);
-                       }
-                       $theString = str_replace($reference, $value, $theString);
-               }
-       }
-       
-       /**
-        * Returns the value for a given string with a (context) variable and a key (e.g. "PERSON.NAME" invokes $variables['person']->getName())
-        *
-        * @param string $variableAndKey The variable (mainly an object) and key (mainly a property of an object) linked with a dot (e.g. "PERSON.NAME")
-        * @param array $variables The variables of the context (these may be assigned by the controller or determined inside this view)
-        * @return mixed The value
-        */
-       public function getValueForVariableAndKey($variableAndKey, $variables) {
-               $explodedVariableAndKey = explode('.', $variableAndKey);
-               $variable = $variables[Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($explodedVariableAndKey[0])];
-               if (!empty($variable)) {
-                       if (count($explodedVariableAndKey) > 1) {
-                               $key = $explodedVariableAndKey[1];
-                               if (is_object($variable)) {
-                                       $possibleMethodName = 'get' . Tx_ExtBase_Utility_Strings::underscoredToUpperCamelCase($key);
-                                       if (method_exists($variable, $possibleMethodName)) {
-                                               $value = $variable->$possibleMethodName();
-                                       }
-                               } elseif (is_array($variable)) {
-                                       $value = $variable[Tx_ExtBase_Utility_Strings::underscoredToLowerCamelCase($key)];
-                               }
-                       } else {
-                               if (is_object($variable)) {
-                                       $value = $variable->__toString();
-                               } else {
-                                       $value = $variable;
-                               }
-                       }
-               }
-               return $value;
-       }
-
-       /**
-        * Returns the subparts and their values
-        *
-        * @param string $templateSource The template source
-        * @return array The subparts
-        */
-       protected function getSubpartArray($templateSource) {
-               $subpartArray = array();
-               if (count($subparts) > 0) {
-                       foreach ($subparts as $subpartMarker => $subpartTemplateSource) {
-                               $value = $this->getMarkerContent($subpartMarker);
-                               $subpartArray['###' . $subpartMarker . '###'] .= $this->renderTemplate($subpartTemplateSource, $value);
-                       }
-               }
-               return $subpartArray;
-       }
-       
-       /**
-        * Fetches all subparts from the template source
-        *
-        * @param string $templateSource The template source
-        * @return array An array of subpartName => subpartTemplateSource pairs
-        */
-       protected function getSubparts($templateSource) {
-               preg_match_all(self::SCAN_PATTERN_SUBPARTS, $templateSource, $matches, PREG_SET_ORDER);
-               $subparts = array();
-               if (is_array($matches)) {
-                       foreach ($matches as $key => $match) {
-                               $subparts[$match['SubpartName']] = $match['SubpartTemplateSource'];
-                       }
-               }
-               return $subparts;
-       }
-
-       /**
-        * Fetches all markers from the template source
-        *
-        * @param string $templateSource The template source
-        * @return array An array of markerNames as keys
-        */
-       protected function getMarkers($templateSource) {
-               preg_match_all(self::SCAN_PATTERN_MARKER, $templateSource, $matches, PREG_SET_ORDER);
-               $markers = array();
-               if (is_array($matches)) {
-                       foreach ($matches as $key => $match) {
-                               $markers[$match['MarkerName']] = NULL;
-                       }
-               }
-               return $markers;
-       }
-       
-       /**
-        * Removes unfilled markers from the rendered content
-        *
-        * @param string $content The content
-        * @return string The cleaned content
-        */             
-       protected function removeUnfilledMarkers(&$content) {
-               $content = preg_replace('/###.*###|<!--[^>]*###.*###[^<]*-->(.*)/msU', '', $content);
-       }
-
-       /**
-        * Assigns domain models (single objects or aggregates) or values to the view
-        *
-        * @param string $valueName The name of the value
-        * @param mixed $value the value to assign
-        * @return void
-        */
-       public function assign($key, $value) {
-               $this->contextVariables[$key] = $value;
-               return $this;
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/View/ViewInterface.php b/typo3/sysext/extbase/Classes/View/ViewInterface.php
deleted file mode 100644 (file)
index 233e8e4..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * Interface of a view
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- */
-interface Tx_ExtBase_View_ViewInterface {
-
-       /**
-        * Sets the current request
-        *
-        * @param Tx_ExtBase_Request $request
-        * @return void
-        */
-       public function setRequest(Tx_ExtBase_Request $request);
-
-       /**
-        * Returns an View Helper instance.
-        * View Helpers must implement the interface Tx_ExtBase_View_Helper_HelperInterface
-        *
-        * @param string $viewHelperObjectName the full name of the View Helper object including namespace
-        * @return Tx_ExtBase_View_Helper_HelperInterface The View Helper instance
-        */
-       public function getViewHelper($viewHelperObjectName);
-
-       /**
-        * Renders the view
-        *
-        * @return string The rendered view
-        */
-       public function render();
-}
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Web/Request.php b/typo3/sysext/extbase/Classes/Web/Request.php
deleted file mode 100755 (executable)
index fe6348f..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * Represents a web request.
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- *
- * @scope prototype
- */
-class Tx_ExtBase_Web_Request extends Tx_ExtBase_Request {
-
-       /**
-        * @var string The requested representation format
-        */
-       protected $format = 'html';
-
-       /**
-        * @var string Contains the request method
-        */
-       protected $method = 'GET';
-
-       /**
-        * @var string
-        */
-       protected $requestURI;
-
-       /**
-        * @var string The base URI for this request - ie. the host and path leading to the index.php
-        */
-       protected $baseURI;
-
-       /**
-        * Sets the request method
-        *
-        * @param string $method Name of the request method
-        * @return void
-        * @throws Tx_ExtBase_Exception_InvalidRequestMethod if the request method is not supported
-        */
-       public function setMethod($method) {
-               if ($method === '' || (strtoupper($method) !== $method)) throw new Tx_ExtBase_Exception_InvalidRequestMethod('The request method "' . $method . '" is not supported.', 1217778382);
-               $this->method = $method;
-       }
-
-       /**
-        * Returns the name of the request method
-        *
-        * @return string Name of the request method
-        */
-       public function getMethod() {
-               return $this->method;
-       }
-
-       /**
-        * Sets the request URI
-        *
-        * @param string $requestURI URI of this web request
-        * @return void
-        */
-       public function setRequestURI($requestURI) {
-               $this->requestURI = $requestURI;
-       }
-
-       /**
-        * Returns the request URI
-        *
-        * @return F3_FLOW3_Property_DataType_URI URI of this web request
-        */
-       public function getRequestURI() {
-               return $this->requestURI;
-       }
-
-       /**
-        * Sets the base URI for this request.
-        *
-        * @param string $baseURI New base URI
-        * @return void
-        */
-       public function setBaseURI($baseURI) {
-               $this->baseURI = $baseURI;
-       }
-
-       /**
-        * Returns the base URI
-        *
-        * @return F3_FLOW3_Property_DataType_URI Base URI of this web request
-        */
-       public function getBaseURI() {
-               return $this->baseURI;
-       }
-}
-?>
\ No newline at end of file
diff --git a/typo3/sysext/extbase/Classes/Web/Response.php b/typo3/sysext/extbase/Classes/Web/Response.php
deleted file mode 100755 (executable)
index bdc9eba..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-<?php
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-
-/**
- * A web specific response implementation
- *
- * @package TYPO3
- * @subpackage extbase
- * @version $ID:$
- * @scope prototype
- */
-class Tx_ExtBase_Web_Response extends Tx_ExtBase_Response {
-
-       /**
-        * Additional header tags
-        *
-        * @var array
-        */
-       protected $additionalHeaderData = array();
-
-       /**
-        * The HTTP status code
-        *
-        * @var integer
-        */
-       protected $statusCode = 200;
-
-       /**
-        * The HTTP status message
-        *
-        * @var string
-        */
-       protected $statusMessage = 'OK';
-
-       /**
-        * The standardized and other important HTTP Status messages
-        *
-        * @var array
-        */
-       protected $statusMessages = array(
-               100 => 'Continue',
-               101 => 'Switching Protocols',
-               102 => 'Processing', # RFC 2518
-               200 => 'OK',
-               201 => 'Created',
-               202 => 'Accepted',
-               203 => 'Non-Authoritative Information',
-               204 => 'No Content',
-               205 => 'Reset Content',
-               206 => 'Partial Content',
-               207 => 'Multi-Status',
-               300 => 'Multiple Choices',
-               301 => 'Moved Permanently',
-               302 => 'Found',
-               303 => 'See Other',
-               304 => 'Not Modified',
-               305 => 'Use Proxy',
-               307 => 'Temporary Redirect',
-               400 => 'Bad Request',
-               401 => 'Unauthorized',
-               402 => 'Payment Required',
-               403 => 'Forbidden',
-               404 => 'Not Found',
-               405 => 'Method Not Allowed',
-               406 => 'Not Acceptable',
-               407 => 'Proxy Authentication Required',
-               408 => 'Request Timeout',
-               409 => 'Conflict',
-               410 => 'Gone',
-               411 => 'Length Required',
-               412 => 'Precondition Failed',
-               413 => 'Request Entity Too Large',
-               414 => 'Request-URI Too Long',
-               415 => 'Unsupported Media Type',
-               416 => 'Requested Range Not Satisfiable',
-               417 => 'Expectation Failed',
-               500 => 'Internal Server Error',
-               501 => 'Not Implemented',
-               502 => 'Bad Gateway',
-               503 => 'Service Unavailable',
-               504 => 'Gateway Timeout',
-               505 => 'HTTP Version Not Supported',
-               507 => 'Insufficient Storage',
-               509 => 'Bandwidth Limit Exceeded',
-       );
-
-       /**
-        * Sets the HTTP status code and (optionally) a customized message.
-        *
-        * @param integer $code The status code
-        * @param string $message If specified, this message is sent instead of the standard message
-        * @return void
-        * @throws InvalidArgumentException if the specified status code is not valid
-        */
-       public function setStatus($code, $message = NULL) {
-               if (!is_int($code)) throw new InvalidArgumentException('The HTTP status code must be of type integer, ' . gettype($code) . ' given.', 1220526013);
-               if ($message === NULL && !isset($this->statusMessages[$code])) throw new InvalidArgumentException('No message found for HTTP status code "' . $code . '".', 1220526014);
-
-               $this->statusCode = $code;
-               $this->statusMessage = ($message === NULL) ? $this->statusMessages[$code] : $message;
-       }
-
-       /**
-        * Returns status code and status message.
-        *
-        * @return string The status code and status message, eg. "404 Not Found"
-        */
-       public function getStatus() {
-               return $this->statusCode . ' ' . $this->statusMessage;
-       }
-       
-       /**
-        * Sets the specified HTTP header
-        *
-        * @param string $name Name of the header, for example "Location", "Content-Description" etc.
-        * @param mixed $value The value of the given header
-        * @param boolean $replaceExistingHeader If a header with the same name should be replaced. Default is TRUE.
-        * @return void
-        */
-       public function setHeader($name, $value, $replaceExistingHeader = TRUE) {
-               if (strtoupper(substr($name, 0, 4)) === 'HTTP') throw new InvalidArgumentException('The HTTP status header must be set via setStatus().', 1220541963);
-               if ($replaceExistingHeader === TRUE || !isset($this->headers[$name])) {
-                       $this->headers[$name] = array($value);
-               } else {
-                       $this->headers[$name][] = $value;
-               }
-       }
-       
-       /**
-        * Returns the HTTP headers - including the status header - of this web response
-        *
-        * @return string The HTTP headers
-        */
-       public function getHeaders() {
-               $preparedHeaders = array();
-               $statusHeader = 'HTTP/1.1 ' . $this->statusCode . ' ' . $this->statusMessage;
-
-               $preparedHeaders[] = $statusHeader;
-               foreach ($this->headers as $name => $values) {
-                       foreach ($values as $value) {
-                               $preparedHeaders[] = $name . ': ' . $value;
-                       }
-               }
-               return $preparedHeaders;
-       }
-
-       /**
-        * Sends the HTTP headers.
-        *
-        * If headers have already been sent, this method fails silently.
-        *
-        * @return void
-        */
-       public function sendHeaders() {
-               if (headers_sent() === TRUE) return;
-               foreach ($this->getHeaders() as $header) {
-                       header($header);
-               }
-       }
-
-       /**
-        * Renders and sends the whole web response
-        *
-        * @return void
-        */
-       public function send() {
-               $this->sendHeaders();
-               if ($this->content !== NULL) {
-                       echo $this->getContent();
-               }
-       }
-
-       /**
-        * Adds an additional header data (something like
-        * '<script src="myext/Resources/JavaScript/my.js" type="text/javascript"></script>'
-        * )
-        *
-        * @param string $additionalHeaderData The value additonal header
-        * @return void
-        */
-       public function addAdditionalHeaderData($additionalHeaderData) {
-               if (!is_string($additionalHeaderData)) throw new InvalidArgumentException('The additiona header data must be of type String, ' . gettype($additionalHeaderData) . ' given.', 1237370877);
-               $this->additionalHeaderData[] = $additionalHeaderData;
-       }
-
-       /**
-        * Returns the additional header data
-        *
-        * @return array The additional header data
-        */
-       public function getAdditionalHeaderData() {
-               return $this->additionalHeaderData;
-       }
-
-}
-?>
\ No newline at end of file
index 5ff71e2..b46df09 100644 (file)
@@ -38,7 +38,7 @@ class Tx_ExtBase_Dispatcher {
        protected $configurationManager;
 
        /**
-        * @var Tx_ExtBase_Web_RequestBuilder
+        * @var Tx_ExtBase_MVC_Web_RequestBuilder
         */
        protected $requestBuilder;
 
@@ -93,11 +93,11 @@ class Tx_ExtBase_Dispatcher {
 
                $request = $this->buildRequest($extensionName, $controllerName, $actionName);
                $controller = t3lib_div::makeInstance($request->getControllerObjectName());
-               if (!$controller instanceof Tx_ExtBase_Controller_ControllerInterface) {
+               if (!$controller instanceof Tx_ExtBase_MVC_Controller_ControllerInterface) {
                        throw new Tx_ExtBase_Exception_InvalidController('Invalid controller "' . $request->getControllerObjectName() . '". The controller must be a valid request handling controller.', 1202921619);
                }
 
-               $arguments = t3lib_div::makeInstance('Tx_ExtBase_Controller_Arguments');
+               $arguments = t3lib_div::makeInstance('Tx_ExtBase_MVC_Controller_Arguments');
                // SK: strtolower($extensionName) is wrong I think, as all underscores need to be removed as well.
                // SK: Example: tt_news -> tx_ttnews
                // TODO Namespace for controller
@@ -105,7 +105,7 @@ class Tx_ExtBase_Dispatcher {
                        $request->setArgument($key, $value);
                }
 
-               $response = t3lib_div::makeInstance('Tx_ExtBase_Web_Response');
+               $response = t3lib_div::makeInstance('Tx_ExtBase_MVC_Web_Response');
                $controller->injectSettings($this->getSettings($extensionName));
 
                $persistenceSession = t3lib_div::makeInstance('Tx_ExtBase_Persistence_Session');
@@ -139,7 +139,7 @@ class Tx_ExtBase_Dispatcher {
        }
        
        protected function buildRequest($extensionName, $controllerName, $actionName) {
-               $request = t3lib_div::makeInstance('Tx_ExtBase_Web_Request');
+               $request = t3lib_div::makeInstance('Tx_ExtBase_MVC_Web_Request');
                $request->setExtensionName($extensionName);
                $request->setControllerName($controllerName);
                $request->setControllerActionName($actionName);