3 namespace Org\Mxchange\City\Controller;
5 // Import framework stuff
6 use Org\Mxchange\CoreFramework\Controller\BaseController;
7 use Org\Mxchange\CoreFramework\Controller\Controller;
8 use Org\Mxchange\CoreFramework\Request\Requestable;
9 use Org\Mxchange\CoreFramework\Resolver\Command\CommandResolver;
10 use Org\Mxchange\CoreFramework\Response\Responseable;
13 * A controller for handling sent forms
15 * @author Roland Haeder <webmaster@shipsimu.org>
17 * @copyright Copyright (c) 2015, 2016 City Developer Team
18 * @license GNU GPL 3.0 or any newer version
19 * @link http://www.shipsimu.org
21 * This program is free software: you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation, either version 3 of the License, or
24 * (at your option) any later version.
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
31 * You should have received a copy of the GNU General Public License
32 * along with this program. If not, see <http://www.gnu.org/licenses/>.
34 class CityHtmlDoFormController extends BaseController implements Controller {
36 * Protected constructor
40 protected function __construct () {
41 // Call parent constructor
42 parent::__construct(__CLASS__);
44 // Init additional filter chains
45 foreach (array('shutdown') as $filterChain) {
46 $this->initFilterChain($filterChain);
51 * Creates an instance of this class
53 * @param $resolverInstance An instance of a resolver class
54 * @return $controllerInstance A prepared instance of this class
56 public static final function createCityHtmlDoFormController (CommandResolver $resolverInstance) {
57 // Create the instance
58 $controllerInstance = new CityHtmlDoFormController();
60 // Set resolver instance
61 $controllerInstance->setResolverInstance($resolverInstance);
63 // We need the controller instance in resolver class so set it here
64 $resolverInstance->setControllerInstance($controllerInstance);
66 // Return the prepared instance
67 return $controllerInstance;
71 * Handles the given request and response
73 * @param $requestInstance An instance of a request class
74 * @param $responseInstance An instance of a response class
77 public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) {
78 // Get the "form action"
79 $formAction = $requestInstance->getRequestElement('form');
81 // Get command instance from resolver
82 $commandInstance = $this->getResolverInstance()->resolveCommand($formAction);
84 // Add more filters by the command
85 $commandInstance->addExtraFilters($this, $requestInstance);
87 // Try to run the pre filters, if auth exceptions come through redirect here
89 // Run the pre filters
90 $this->executePreFilters($requestInstance, $responseInstance);
91 } catch (UserAuthorizationException $e) {
92 // Redirect to main page
93 $responseInstance->redirectToConfiguredUrl('login_failed');
100 * Is the request still valid? Post filters shall only be executed of
101 * the request is valid
103 if ($requestInstance->isRequestValid()) {
104 // Execute the command
105 $commandInstance->execute($requestInstance, $responseInstance);
107 // Execute *very* generic ppost filters
108 $this->executePostFilters($requestInstance, $responseInstance);
111 // Flush the buffer out
112 $responseInstance->flushBuffer();