Introduced isFieldSet().
[core.git] / inc / classes / main / class_BaseFrameworkSystem.php
index 25e0986f07c910583695e597dd468e2c15b3be90..2e42a794b12018efe454f560730ca1a54d9e6d3a 100644 (file)
@@ -5,7 +5,7 @@
  *
  * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.shipsimu.org
  *
@@ -148,6 +148,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         */
        private $sourceInstance = NULL;
 
+       /**
+        * An instance of a UrlSource class
+        */
+       private $urlSourceInstance = NULL;
+
        /**
         * An instance of a InputStream class
         */
@@ -238,6 +243,16 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         */
        private $genericArray = array();
 
+       /**
+        * Command name
+        */
+       private $commandName = '';
+
+       /**
+        * Controller name
+        */
+       private $controllerName = '';
+
        /***********************
         * Exception codes.... *
         ***********************/
@@ -1033,7 +1048,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         * @param       $protocolInstance       An instance of an HandleableProtocol
         * @return      void
         */
-       public final function setProtocolInstance (HandleableProtocol $protocolInstance = NULL) {
+       public final function setProtocolInstance (HandleableProtocol $protocolInstance) {
                $this->protocolInstance = $protocolInstance;
        }
 
@@ -1129,7 +1144,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        /**
         * Setter for a Sourceable instance
         *
-        * @param       $sourceInstance The Sourceable instance
+        * @param       $sourceInstance         An instance of a Sourceable class
         * @return      void
         */
        protected final function setSourceInstance (Sourceable $sourceInstance) {
@@ -1139,12 +1154,31 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        /**
         * Getter for a Sourceable instance
         *
-        * @return      $sourceInstance The Sourceable instance
+        * @return      $sourceInstance         An instance of a Sourceable class
         */
        protected final function getSourceInstance () {
                return $this->sourceInstance;
        }
 
+       /**
+        * Setter for a UrlSource instance
+        *
+        * @param       $sourceInstance         An instance of a UrlSource class
+        * @return      void
+        */
+       protected final function setUrlSourceInstance (UrlSource $urlSourceInstance) {
+               $this->urlSourceInstance = $urlSourceInstance;
+       }
+
+       /**
+        * Getter for a UrlSource instance
+        *
+        * @return      $urlSourceInstance              An instance of a UrlSource class
+        */
+       protected final function getUrlSourceInstance () {
+               return $this->urlSourceInstance;
+       }
+
        /**
         * Getter for a InputStream instance
         *
@@ -1298,6 +1332,22 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $this->pointerInstance;
        }
 
+       /**
+        * Unsets pointer instance which triggers a call of __destruct() if the
+        * instance is still there. This is surely not fatal on already "closed"
+        * file pointer instances.
+        *
+        * I don't want to mess around with above setter by giving it a default
+        * value NULL as setter should always explicitly only set (existing) object
+        * instances and NULL is NULL.
+        *
+        * @return      void
+        */
+       protected final function unsetPointerInstance () {
+               // Simply it to NULL
+               $this->pointerInstance = NULL;
+       }
+
        /**
         * Setter for Indexable instance
         *
@@ -1393,6 +1443,44 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $this->listenerInstance;
        }
 
+       /**
+        * Setter for command name
+        *
+        * @param       $commandName    Last validated command name
+        * @return      void
+        */
+       protected final function setCommandName ($commandName) {
+               $this->commandName = $commandName;
+       }
+
+       /**
+        * Getter for command name
+        *
+        * @return      $commandName    Last validated command name
+        */
+       protected final function getCommandName () {
+               return $this->commandName;
+       }
+
+       /**
+        * Setter for controller name
+        *
+        * @param       $controllerName Last validated controller name
+        * @return      void
+        */
+       protected final function setControllerName ($controllerName) {
+               $this->controllerName = $controllerName;
+       }
+
+       /**
+        * Getter for controller name
+        *
+        * @return      $controllerName Last validated controller name
+        */
+       protected final function getControllerName () {
+               return $this->controllerName;
+       }
+
        /**
         * Checks whether an object equals this object. You should overwrite this
         * method to implement own equality checks
@@ -1469,7 +1557,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        }
 
        /**
-        * Prepare the template engine (WebTemplateEngine by default) for a given
+        * Prepare the template engine (HtmlTemplateEngine by default) for a given
         * application helper instance (ApplicationHelper by default).
         *
         * @param               $applicationInstance    An application helper instance or
@@ -1492,7 +1580,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                } // END - if
 
                // Initialize the template engine
-               $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class');
+               $templateInstance = ObjectFactory::createObjectByConfiguredName('html_template_class');
 
                // Return the prepared instance
                return $templateInstance;
@@ -1630,7 +1718,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                        // Try it
                        try {
                                // Get a debugger instance
-                               $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkConfiguration::getSelfInstance()->getConfigEntry('debug_class'));
+                               $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkConfiguration::getSelfInstance()->getConfigEntry('debug_' . self::getResponseTypeFromSystem() . '_class'));
                        } catch (NullPointerException $e) {
                                // Didn't work, no instance there
                                exit('Cannot create debugInstance! Exception=' . $e->__toString() . ', message=' . $e->getMessage());
@@ -1870,7 +1958,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 
                // Do we have an entry?
                if ($this->getResultInstance()->valid() === FALSE) {
-                       throw new InvalidDatabaseResultException(array($this, $this->getResultInstance()), DatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT);
+                       // @TODO Move the constant to e.g. BaseDatabaseResult when there is a non-cached database result available
+                       throw new InvalidDatabaseResultException(array($this, $this->getResultInstance()), CachedDatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT);
                } // END - if
 
                // Get next entry
@@ -1908,12 +1997,15 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput($fieldName.':<pre>'.print_r($fieldArray, TRUE).'</pre>');
 
                // Convert dashes to underscore
-               $fieldName = $this->convertDashesToUnderscores($fieldName);
+               $fieldName2 = $this->convertDashesToUnderscores($fieldName);
 
                // Does the field exist?
-               if (isset($fieldArray[$fieldName])) {
+               if ($this->isFieldSet($fieldName)) {
                        // Get it
-                       $fieldValue = $fieldArray[$fieldName];
+                       $fieldValue = $fieldArray[$fieldName2];
+               } elseif (defined('DEVELOPER')) {
+                       // Missing field entry, may require debugging
+                       self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']:fieldArray<pre>=' . print_r($fieldArray, TRUE) . '</pre>,fieldName=' . $fieldName . ' not found!');
                } else {
                        // Missing field entry, may require debugging
                        self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']:fieldName=' . $fieldName . ' not found!');
@@ -1923,6 +2015,37 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $fieldValue;
        }
 
+       /**
+        * Checks if given field is set
+        *
+        * @param       $fieldName      Field name to check
+        * @return      $isSet          Whether the given field name is set
+        * @throws      NullPointerException    If the result instance is null
+        */
+       public function isFieldSet ($fieldName) {
+               // Get result instance
+               $resultInstance = $this->getResultInstance();
+
+               // Is this instance null?
+               if (is_null($resultInstance)) {
+                       // Then the user instance is no longer valid (expired cookies?)
+                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+               } // END - if
+
+               // Get current array
+               $fieldArray = $resultInstance->current();
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=<pre>'.print_r($fieldArray, TRUE).'</pre>');
+
+               // Convert dashes to underscore
+               $fieldName = $this->convertDashesToUnderscores($fieldName);
+
+               // Determine it
+               $isSet = isset($fieldArray[$fieldName]);
+
+               // Return result
+               return $isSet;
+       }
+
        /**
         * Flushs all pending updates to the database layer
         *
@@ -2182,14 +2305,17 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         *
         * @return      $responseType   Analyzed response type
         */
-       protected function getResponseTypeFromSystem () {
+       protected static function getResponseTypeFromSystem () {
                // Default is console
                $responseType = 'console';
 
                // Is 'HTTP_HOST' set?
                if (isset($_SERVER['HTTP_HOST'])) {
-                       // Then it is a HTTP response/request
-                       $responseType = 'http';
+                       /*
+                        * Then it is a HTML response/request as RSS and so on may be
+                        * transfered over HTTP as well.
+                        */
+                       $responseType = 'html';
                } // END - if
 
                // Return it
@@ -2908,6 +3034,28 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $isValid;
        }
 
+       /**
+        * Initializes the web output instance
+        *
+        * @return      void
+        */
+       protected function initWebOutputInstance () {
+               // Get application instance
+               $applicationInstance = Registry::getRegistry()->getInstance('app');
+
+               // Is this a response instance?
+               if ($this instanceof Responseable) {
+                       // Then set it in application instance
+                       $applicationInstance->setResponseInstance($this);
+               } // END - if
+
+               // Init web output instance
+               $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($applicationInstance));
+
+               // Set it locally
+               $this->setWebOutputInstance($outputInstance);
+       }
+
        /**
         * Translates boolean TRUE to 'Y' and FALSE to 'N'
         *