X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fcontroller%2Fclass_BaseController.php;h=44be9968aad22c8a488dc39f9480e299745e6504;hp=5e56de17156a857b5954b8bb03dc0b947cf4a8bc;hb=0ff6b6dd6f297dc3257f8a4687ca514a2c60cd28;hpb=6952a92d67c0fa73f27e2a17bd352cec4053b04b diff --git a/inc/classes/main/controller/class_BaseController.php b/inc/classes/main/controller/class_BaseController.php index 5e56de17..44be9968 100644 --- a/inc/classes/main/controller/class_BaseController.php +++ b/inc/classes/main/controller/class_BaseController.php @@ -6,7 +6,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -29,6 +29,13 @@ class BaseController extends BaseFrameworkSystem implements Registerable { */ private $filterChains = array(); + // Exception constants + const EXCEPTION_FILTER_CHAIN_INVALID = 0xf10; + + // Names of controller's own filter chains + const FILTER_CHAIN_PRE_COMMAND = 'controller_pre_command'; + const FILTER_CHAIN_POST_COMMAND = 'controller_post_command'; + /** * Protected constructor * @@ -39,13 +46,9 @@ class BaseController extends BaseFrameworkSystem implements Registerable { // Call parent constructor parent::__construct($className); - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); - // Initialize both filter chains - $this->initFilterChain('pre'); - $this->initFilterChain('post'); + $this->initFilterChain(self::FILTER_CHAIN_PRE_COMMAND); + $this->initFilterChain(self::FILTER_CHAIN_POST_COMMAND); // Add this controller to the registry Registry::getRegistry()->addInstance('controller', $this); @@ -58,18 +61,31 @@ class BaseController extends BaseFrameworkSystem implements Registerable { * @return void */ protected function initFilterChain ($filterChain) { + //* DEBUG: */ $this->debugOutput('CONTROLLER: ' . $filterChain . ' init: START'); $this->filterChains[$filterChain] = ObjectFactory::createObjectByConfiguredName('filter_chain_class'); + //* DEBUG: */ $this->debugOutput('CONTROLLER: ' . $filterChain . ' init: FINISHED'); } /** - * Adds a filter to a given filter group + * Adds a filter to a given filter chain * - * @param $filterGroup Group of the filter + * @param $filterChain Chain of the filter * @param $filterInstance An instance of a filter * @return void + * @throws InvalidFilterChainException If the filter chain is invalid */ - protected function addFilter ($filterGroup, Filterable $filterInstance) { - $this->filterChains[$filterGroup]->addFilter($filterInstance); + protected function addFilter ($filterChain, Filterable $filterInstance) { + //* DEBUG: */ $this->debugOutput('CONTROLLER: ' . $filterChain . ',' . $filterInstance->__toString(). ' add: START'); + + // Test if the filter is there + if (!isset($this->filterChains[$filterChain])) { + // Throw an exception here + throw new InvalidFilterChainException(array($this, $filterChain), self::EXCEPTION_FILTER_CHAIN_INVALID); + } // END - if + + // Add the filter + $this->filterChains[$filterChain]->addFilter($filterInstance); + //* DEBUG: */ $this->debugOutput('CONTROLLER: ' . $filterChain . ',' . $filterInstance->__toString(). ' add: FINISH'); } /** @@ -80,7 +96,7 @@ class BaseController extends BaseFrameworkSystem implements Registerable { */ public function addPreFilter (Filterable $filterInstance) { // Add the pre filter - $this->addFilter('pre', $filterInstance); + $this->addFilter(self::FILTER_CHAIN_PRE_COMMAND, $filterInstance); } /** @@ -91,19 +107,27 @@ class BaseController extends BaseFrameworkSystem implements Registerable { */ public function addPostFilter (Filterable $filterInstance) { // Add the post filter - $this->addFilter('post', $filterInstance); + $this->addFilter(self::FILTER_CHAIN_POST_COMMAND, $filterInstance); } /** - * Executes given filter chain group + * Executes given filter chain chain * - * @param $filterGroup Group of the filter to execute + * @param $filterChain Chain of the filter to execute * @param $requestInstance An instance of a request class * @param $responseInstance An instance of a response class * @return void + * @throws InvalidFilterChainException If the filter chain is invalid */ - protected function executeFilters ($filterGroup, Requestable $requestInstance, Responseable $responseInstance) { - $this->filterChains[$filterGroup]->processFilters($requestInstance, $responseInstance); + protected function executeFilters ($filterChain, Requestable $requestInstance, Responseable $responseInstance) { + // Test if the filter is there + if (!isset($this->filterChains[$filterChain])) { + // Throw an exception here + throw new InvalidFilterChainException(array($this, $filterChain), self::EXCEPTION_FILTER_CHAIN_INVALID); + } // END - if + + // Run all filters + $this->filterChains[$filterChain]->processFilters($requestInstance, $responseInstance); } /** @@ -115,7 +139,7 @@ class BaseController extends BaseFrameworkSystem implements Registerable { */ protected function executePreFilters (Requestable $requestInstance, Responseable $responseInstance) { // Execute all pre filters - $this->executeFilters('pre', $requestInstance, $responseInstance); + $this->executeFilters(self::FILTER_CHAIN_PRE_COMMAND, $requestInstance, $responseInstance); } /** @@ -127,7 +151,7 @@ class BaseController extends BaseFrameworkSystem implements Registerable { */ protected function executePostFilters (Requestable $requestInstance, Responseable $responseInstance) { // Execute all post filters - $this->executeFilters('post', $requestInstance, $responseInstance); + $this->executeFilters(self::FILTER_CHAIN_POST_COMMAND, $requestInstance, $responseInstance); } }