Added __unset() to catch unsetting of missing fields/attributes
[core.git] / inc / classes / main / class_BaseFrameworkSystem.php
index 656e3cdc4fb603a6d1a6215551458e8b5661a32f..85dd986a4e0a2626a95d26028876518c01b9184e 100644 (file)
@@ -78,6 +78,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         */
        private $rngInstance = null;
 
+       /**
+        * Instance of a crypto helper
+        */
+       private $cryptoInstance = null;
+
        /**
         * Instance of an Iterator class
         */
@@ -123,6 +128,16 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         */
        private $databaseInstance = null;
 
+       /**
+        * A helper instance for the form
+        */
+       private $helperInstance = null;
+
+       /**
+        * An instance of a source
+        */
+       private $sourceInstance = null;
+
        /**
         * The real class name
         */
@@ -197,8 +212,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        const EXCEPTION_ATTRIBUTES_ARE_MISSING       = 0x02b;
        const EXCEPTION_ARRAY_ELEMENTS_MISSING       = 0x02c;
        const EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED  = 0x02d;
-       const EXCEPTION_MISSING_LANGUAGE_HANDLER     = 0x02e;
-       const EXCEPTION_MISSING_FILE_IO_HANDLER      = 0x02f;
        const EXCEPTION_MISSING_ELEMENT              = 0x030;
        const EXCEPTION_HEADERS_ALREADY_SENT         = 0x031;
        const EXCEPTION_DEFAULT_CONTROLLER_GONE      = 0x032;
@@ -221,9 +234,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                // Set real class
                $this->setRealClass($className);
 
-               // Set configuration instance if no registry
+               // Set configuration instance if no registry ...
                if (!$this instanceof Register) {
-                       // Because registries doesn't need to be configured
+                       // ... because registries doesn't need to be configured
                        $this->setConfigInstance(FrameworkConfiguration::getInstance());
                } // END - if
        }
@@ -232,7 +245,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         * Destructor reached...
         *
         * @return      void
-        * @todo        This is old code. Do we still need this old lost code?
         */
        public function __destruct() {
                // Flush any updated entries to the database
@@ -252,8 +264,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        }
 
        /**
-        * The call method where all non-implemented methods end up
+        * The __call() method where all non-implemented methods end up
         *
+        * @param       $methodName             Name of the missing method
+        * @args        $args                   Arguments passed to the method
         * @return      void
         */
        public final function __call ($methodName, $args) {
@@ -269,7 +283,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                                $argsString .= $this->replaceControlCharacters($arg) . ' (' . gettype($arg);
 
                                // Add length if type is string
-                               if (gettype($arg) == 'string') $argsString .= ', '.strlen($arg);
+                               if (is_string($arg)) {
+                                       $argsString .= ', '.strlen($arg);
+                               } // END - if
 
                                // Closing bracket
                                $argsString .= '), ';
@@ -295,6 +311,54 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return null;
        }
 
+       /**
+        * Getter for $realClass
+        *
+        * @return      $realClass The name of the real class (not BaseFrameworkSystem)
+        */
+       public function __toString () {
+               return $this->realClass;
+       }
+
+       /**
+        * Magic function to catch setting of missing but set class fields/attributes
+        *
+        * @param       $name   Name of the field/attribute
+        * @param       $value  Value to store
+        * @return      void
+        */
+       public final function __set ($name, $value) {
+               $this->debugBackTrace(sprintf("Tried to set a missing field. name=%s, value[%s]=%s",
+                       $name,
+                       gettype($value),
+                       $value
+               ));
+       }
+
+       /**
+        * Magic function to catch getting of missing fields/attributes
+        *
+        * @param       $name   Name of the field/attribute
+        * @return      void
+        */
+       public final function __get ($name) {
+               $this->debugBackTrace(sprintf("Tried to get a missing field. name=%s",
+                       $name
+               ));
+       }
+
+       /**
+        * Magic function to catch unsetting of missing fields/attributes
+        *
+        * @param       $name   Name of the field/attribute
+        * @return      void
+        */
+       public final function __unset ($name) {
+               $this->debugBackTrace(sprintf("Tried to unset a missing field. name=%s",
+                       $name
+               ));
+       }
+
        /**
         * Setter for database result instance
         *
@@ -556,15 +620,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $this->responseInstance;
        }
 
-       /**
-        * Getter for $realClass
-        *
-        * @return      $realClass The name of the real class (not BaseFrameworkSystem)
-        */
-       public function __toString () {
-               return $this->realClass;
-       }
-
        /**
         * Setter for the real class name
         *
@@ -626,7 +681,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                if ((!isset($this->decimals)) || (!isset($this->thousands))) {
                        // Throw an exception
                        throw new MissingDecimalsThousandsSeperatorException($this, self::EXCEPTION_ATTRIBUTES_ARE_MISSING);
-               }
+               } // END - if
 
                // Cast the number
                $value = (float) $value;
@@ -667,7 +722,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         */
        public final function addMissingTrailingSlash ($str) {
                // Is there a trailing slash?
-               if (substr($str, -1, 1) != '/') $str .= '/';
+               if (substr($str, -1, 1) != '/') {
+                       $str .= '/';
+               } // END - if
+
+               // Return string with trailing slash
                return $str;
        }
 
@@ -694,42 +753,27 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         * Prepare the template engine (WebTemplateEngine by default) for a given
         * application helper instance (ApplicationHelper by default).
         *
-        * @param               $appInstance                    An application helper instance or
+        * @param               $applicationInstance    An application helper instance or
         *                                                                              null if we shall use the default
-        * @return              $templateInstance                               The template engine instance
-        * @throws              NullPointerException    If the template engine could not
-        *                                                                              be initialized
-        * @throws              UnsupportedTemplateEngineException      If $templateInstance is an
-        *                                                                              unsupported template engine
-        * @throws              MissingLanguageHandlerException If the language sub-system
-        *                                                                              is not yet initialized
+        * @return              $templateInstance               The template engine instance
         * @throws              NullPointerException    If the discovered application
         *                                                                              instance is still null
         */
-       protected function prepareTemplateInstance (FrameworkInterface $appInstance=null) {
+       protected function prepareTemplateInstance (ManageableApplication $applicationInstance = null) {
                // Is the application instance set?
-               if (is_null($appInstance)) {
+               if (is_null($applicationInstance)) {
                        // Get the current instance
-                       $appInstance = $this->getApplicationInstance();
+                       $applicationInstance = $this->getApplicationInstance();
 
                        // Still null?
-                       if (is_null($appInstance)) {
+                       if (is_null($applicationInstance)) {
                                // Thrown an exception
                                throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                        } // END - if
                } // END - if
 
-               // Are both instances set?
-               if ($appInstance->getLanguageInstance() === null) {
-                       // Invalid language instance
-                       throw new MissingLanguageHandlerException($appInstance, self::EXCEPTION_MISSING_LANGUAGE_HANDLER);
-               } elseif ($appInstance->getFileIoInstance() === null) {
-                       // Invalid language instance
-                       throw new MissingFileIoHandlerException($appInstance, self::EXCEPTION_MISSING_FILE_IO_HANDLER);
-               }
-
                // Initialize the template engine
-               $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class', array($appInstance));
+               $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class');
 
                // Return the prepared instance
                return $templateInstance;
@@ -803,7 +847,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                // Generate the class::method string
                $methodName = 'UnknownClass->unknownMethod';
                if ((isset($backtrace[1]['class'])) && (isset($backtrace[1]['function']))) {
-                       $methodName = $backtrace[1]['class']."->".$backtrace[1]['function'];
+                       $methodName = $backtrace[1]['class'] . '->' . $backtrace[1]['function'];
                } // END - if
 
                // Construct the full message
@@ -823,17 +867,23 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                        $this->debugOutput($stubMessage);
                } else {
                        // Trigger an error
-                       trigger_error($stubMessage."<br />\n");
+                       trigger_error($stubMessage . "<br />\n");
                }
        }
 
        /**
         * Outputs a debug backtrace and stops further script execution
         *
+        * @param       $message        An optional message to output
         * @return      void
         */
-       public function debugBackTrace () {
+       public function debugBackTrace ($message = '') {
                // Sorry, there is no other way getting this nice backtrace
+               if (!empty($message)) {
+                       // Output message
+                       printf("Message: %s<br />\n", $message);
+               } // END - if
+
                print("<pre>\n");
                debug_print_backtrace();
                print("</pre>");
@@ -855,7 +905,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                if (is_object($debugInstance)) {
                        // Use debug output handler
                        $debugInstance->output($message);
-                       if ($doPrint === false) die(); // Die here if not printed
+
+                       if ($doPrint === false) {
+                               // Die here if not printed
+                               die();
+                       } // END - if
                } else {
                        // Put directly out
                        if ($doPrint === true) {
@@ -1150,7 +1204,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                                $this->debugOutput($message);
                        } else {
                                // Trigger an error
-                               trigger_error($message."<br />\n");
+                               trigger_error($message . "<br />\n");
                        }
                } else {
                        // @TODO Finish this part!
@@ -1191,6 +1245,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $this->rngInstance;
        }
 
+       /**
+        * Setter for Cryptable instance
+        *
+        * @param       $cryptoInstance An instance of a Cryptable class
+        * @return      void
+        */
+       protected final function setCryptoInstance (Cryptable $cryptoInstance) {
+               $this->cryptoInstance = $cryptoInstance;
+       }
+
+       /**
+        * Getter for Cryptable instance
+        *
+        * @return      $cryptoInstance An instance of a Cryptable class
+        */
+       public final function getCryptoInstance () {
+               return $this->cryptoInstance;
+       }
+
        /**
         * Setter for Iterator instance
         *
@@ -1421,6 +1494,44 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                return $this->socketResource;
        }
 
+       /**
+        * Setter for helper instance
+        *
+        * @param       $helperInstance         An instance of a helper class
+        * @return      void
+        */
+       protected final function setHelperInstance (Helper $helperInstance) {
+               $this->helperInstance = $helperInstance;
+       }
+
+       /**
+        * Getter for helper instance
+        *
+        * @return      $helperInstance         An instance of a helper class
+        */
+       public final function getHelperInstance () {
+               return $this->helperInstance;
+       }
+
+       /**
+        * Setter for a Sourceable instance
+        *
+        * @param       $sourceInstance The Sourceable instance
+        * @return      void
+        */
+       protected final function setSourceInstance (Sourceable $sourceInstance) {
+               $this->sourceInstance = $sourceInstance;
+       }
+
+       /**
+        * Getter for a Sourceable instance
+        *
+        * @param       $sourceInstance The Sourceable instance
+        */
+       protected final function getSourceInstance () {
+               return $this->sourceInstance;
+       }
+
        /**
         * Setter for raw package Data
         *