]> git.mxchange.org Git - core.git/blobdiff - inc/main/classes/resolver/controller/class_BaseControllerResolver.php
Continued:
[core.git] / inc / main / classes / resolver / controller / class_BaseControllerResolver.php
index 13a086a8d9df44cb1fd44d4ecfd9809d256eb039..8f4f024825da0d0f06e20bb19824bf9f291c137c 100644 (file)
@@ -45,20 +45,28 @@ class BaseControllerResolver extends BaseResolver {
         * controller was not found one of the default controllers will be used
         * depending on whether news shall be displayed.
         *
+        * @param       $namespace                              Namespace to look in
         * @param       $controllerName                 A controller name we shall look for
         * @return      $controllerInstance             A loaded controller instance
         * @throws      InvalidControllerException      Thrown if even the requested
         *                                                                              controller class is missing (bad!)
         */
-       protected function loadController ($controllerName) {
+       protected function loadController ($namespace, $controllerName) {
                // Cache default controller
                $defaultController = $this->getConfigInstance()->getConfigEntry('default_' . strtolower($this->getClassPrefix()) . '_controller');
 
                // Init controller instance
                $controllerInstance = NULL;
 
+               // Create full class name
+               $className = sprintf(
+                       '%s\%sDefaultNewsController',
+                       $namespace,
+                       $this->getCapitalizedClassPrefix()
+               );
+
                // Default controller
-               $this->setClassName($this->getCapitalizedClassPrefix() . 'DefaultNewsController');
+               $this->setClassName($className);
 
                // Generate the class name
                //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BEFORE: controller=' . $controllerName);
@@ -70,7 +78,7 @@ class BaseControllerResolver extends BaseResolver {
                        $this->setClassName($className);
                } else {
                        // No news at main controller or non-news controller
-                       $this->setClassName($this->getCapitalizedClassPrefix() . 'DefaultNewsController');
+                       $this->setClassName($className);
                }
                //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('AFTER: controller=' . $this->getClassName());
 
@@ -109,23 +117,39 @@ class BaseControllerResolver extends BaseResolver {
        /**
         * Checks whether the given controller is valid
         *
+        * @param       $namespace                      Namespace to look in, no trailing backslash
         * @param       $controllerName         The default controller we shall execute
         * @return      $isValid                        Whether the given controller is valid
         * @throws      EmptyVariableException          Thrown if given controller is not set
         * @throws      DefaultControllerException      Thrown if default controller was not found
         */
-       public function isControllerValid ($controllerName) {
+       public function isControllerValid ($namespace, $controllerName) {
                // By default nothing shall be valid
                $isValid = FALSE;
 
-               // Is a controller set?
-               if (empty($controllerName)) {
+               // Is namespace and controller name set?
+               if (empty($namespace)) {
+                       // Then thrown an exception here
+                       throw new EmptyVariableException(array($this, 'namespace'), self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
+               } elseif (empty($controllerName)) {
                        // Then thrown an exception here
                        throw new EmptyVariableException(array($this, 'controllerName'), self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
                } // END - if
 
                // Create class name
-               $className = $this->getCapitalizedClassPrefix() . self::convertToClassName($controllerName) . 'Controller';
+               $className = sprintf(
+                       '%s\%sController',
+                       $namespace,
+                       $this->getCapitalizedClassPrefix() . self::convertToClassName($controllerName)
+               );
+               $newsControllerName = sprintf(
+                       '%s\%sDefaultNewsController',
+                       $namespace,
+                       $this->getCapitalizedClassPrefix()
+               );
+
+               // Debug message
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('className=%s', $className));
 
                // Now, let us create the full name of the controller class
                $this->setClassName($className);
@@ -136,9 +160,9 @@ class BaseControllerResolver extends BaseResolver {
                        if (class_exists($this->getClassName())) {
                                // This class does exist. :-)
                                $isValid = TRUE;
-                       } elseif ($this->getClassName() != $this->getCapitalizedClassPrefix() . 'DefaultNewsController') {
+                       } elseif ($this->getClassName() != $newsControllerName) {
                                // Set default controller
-                               $this->setClassName($this->getCapitalizedClassPrefix() . 'DefaultNewsController');
+                               $this->setClassName($newsControllerName);
                        } else {
                                // All is tried, give it up here
                                throw new DefaultControllerException($this, self::EXCEPTION_DEFAULT_CONTROLLER_GONE);
@@ -162,11 +186,12 @@ class BaseControllerResolver extends BaseResolver {
                $controllerName = '';
                $controllerInstance = NULL;
 
-               // Get the controller name 
+               // Get namespace and controller name
+               $namespace      = $this->getNamespace();
                $controllerName = $this->getControllerName();
 
                // Get the controller
-               $controllerInstance = $this->loadController($controllerName);
+               $controllerInstance = $this->loadController($namspace, $controllerName);
 
                // And validate it
                if ((!is_object($controllerInstance)) || (!$controllerInstance instanceof Controller)) {