Moved to repository 'core' (not yet done)
[mailer.git] / inc / classes / main / class_BaseFrameworkSystem.php
diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php
deleted file mode 100644 (file)
index d4eabd7..0000000
+++ /dev/null
@@ -1,1077 +0,0 @@
-<?php
-/**
- * The simulator system class is the super class of all other classes. This
- * class handles saving of games etc.
- *
- * @author             Roland Haeder <webmaster@ship-simu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, this is free software
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.ship-simu.org
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
-       /**
-        * Instance to an application helper class
-        */
-       private static $applicationInstance = null;
-
-       /**
-        * The language instance for the template loader
-        */
-       private static $langInstance = null;
-
-       /**
-        * Debug instance
-        */
-       private static $debugInstance = null;
-
-       /**
-        * Instance of a request class
-        */
-       private $requestInstance = null;
-
-       /**
-        * Instance of a response class
-        */
-       private $responseInstance = null;
-
-       /**
-        * Search criteria instance
-        */
-       private $searchInstance = null;
-
-       /**
-        * The file I/O instance for the template loader
-        */
-       private $fileIoInstance = null;
-
-       /**
-        * Resolver instance
-        */
-       private $resolverInstance = null;
-
-       /**
-        * Template engine instance
-        */
-       private $templateInstance = null;
-
-       /**
-        * Database result instance
-        */
-       private $resultInstance = null;
-
-       /**
-        * Instance for user class
-        */
-       private $userInstance = null;
-
-       /**
-        * A controller instance
-        */
-       private $controllerInstance = null;
-
-       /**
-        * The real class name
-        */
-       private $realClass      = "FrameworkSystem";
-
-       /**
-        * Thousands seperator
-        */
-       private $thousands = "."; // German
-
-       /**
-        * Decimal seperator
-        */
-       private $decimals  = ","; // German
-
-       /***********************
-        * Exception codes.... *
-        ***********************/
-
-       const EXCEPTION_IS_NULL_POINTER              = 0x001;
-       const EXCEPTION_IS_NO_OBJECT                 = 0x002;
-       const EXCEPTION_IS_NO_ARRAY                  = 0x003;
-       const EXCEPTION_MISSING_METHOD               = 0x004;
-       const EXCEPTION_CLASSES_NOT_MATCHING         = 0x005;
-       const EXCEPTION_INDEX_OUT_OF_BOUNDS          = 0x006;
-       const EXCEPTION_DIMENSION_ARRAY_INVALID      = 0x007;
-       const EXCEPTION_ITEM_NOT_TRADEABLE           = 0x008;
-       const EXCEPTION_ITEM_NOT_IN_PRICE_LIST       = 0x009;
-       const EXCEPTION_GENDER_IS_WRONG              = 0x00a;
-       const EXCEPTION_BIRTH_DATE_IS_INVALID        = 0x00b;
-       const EXCEPTION_EMPTY_STRUCTURES_ARRAY       = 0x00c;
-       const EXCEPTION_HAS_ALREADY_PERSONELL_LIST   = 0x00d;
-       const EXCEPTION_NOT_ENOUGTH_UNEMPLOYEES      = 0x00e;
-       const EXCEPTION_TOTAL_PRICE_NOT_CALCULATED   = 0x00f;
-       const EXCEPTION_HARBOR_HAS_NO_SHIPYARDS      = 0x010;
-       const EXCEPTION_CONTRACT_PARTNER_INVALID     = 0x011;
-       const EXCEPTION_CONTRACT_PARTNER_MISMATCH    = 0x012;
-       const EXCEPTION_CONTRACT_ALREADY_SIGNED      = 0x013;
-       const EXCEPTION_UNEXPECTED_EMPTY_STRING      = 0x014;
-       const EXCEPTION_PATH_NOT_FOUND               = 0x015;
-       const EXCEPTION_INVALID_PATH_NAME            = 0x016;
-       const EXCEPTION_READ_PROTECED_PATH           = 0x017;
-       const EXCEPTION_WRITE_PROTECED_PATH          = 0x018;
-       const EXCEPTION_DIR_POINTER_INVALID          = 0x019;
-       const EXCEPTION_FILE_POINTER_INVALID         = 0x01a;
-       const EXCEPTION_INVALID_DIRECTORY_POINTER    = 0x01b;
-       const EXCEPTION_UNEXPECTED_OBJECT            = 0x01c;
-       const EXCEPTION_LIMIT_ELEMENT_IS_UNSUPPORTED = 0x01d;
-       const EXCEPTION_GETTER_IS_MISSING            = 0x01e;
-       const EXCEPTION_ARRAY_EXPECTED               = 0x01f;
-       const EXCEPTION_ARRAY_HAS_INVALID_COUNT      = 0x020;
-       const EXCEPTION_ID_IS_INVALID_FORMAT         = 0x021;
-       const EXCEPTION_MD5_CHECKSUMS_MISMATCH       = 0x022;
-       const EXCEPTION_UNEXPECTED_STRING_SIZE       = 0x023;
-       const EXCEPTION_SIMULATOR_ID_INVALID         = 0x024;
-       const EXCEPTION_MISMATCHING_COMPRESSORS      = 0x025;
-       const EXCEPTION_CONTAINER_ITEM_IS_NULL       = 0x026;
-       const EXCEPTION_ITEM_IS_NO_ARRAY             = 0x027;
-       const EXCEPTION_CONTAINER_MAYBE_DAMAGED      = 0x028;
-       const EXCEPTION_INVALID_STRING               = 0x029;
-       const EXCEPTION_VARIABLE_NOT_SET             = 0x02a;
-       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;
-       const EXCEPTION_CLASS_NOT_FOUND              = 0x033;
-       const EXCEPTION_REQUIRED_INTERFACE_MISSING   = 0x034;
-       const EXCEPTION_FATAL_ERROR                  = 0x035;
-       const EXCEPTION_FILE_NOT_FOUND               = 0x036;
-       const EXCEPTION_ASSERTION_FAILED             = 0x037;
-       const EXCEPTION_FILE_CANNOT_BE_READ          = 0x038;
-       const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x039;
-
-       /**
-        * In the super constructor these system classes shall be ignored or else
-        * we would get an endless calling loop.
-        *
-        *---------------------------------------------------------------------*
-        * ATTENTION: IF YOU REMOVE ONE OF THEM YOU WILL RUN YOUR SERVER IN AN *
-        * ENDLESS LOOP !!!                                                    *
-        *---------------------------------------------------------------------*
-        */
-       private $systemClasses = array(
-               "DebugMiddleware",                              // Debug middleware output sub-system
-               "Registry",                                             // Object registry
-               "ObjectFactory",                                // Object factory
-               "DebugWebOutput",                               // Debug web output sub-system
-               "WebOutput",                                    // Web output sub-system
-               "CompressorChannel",                    // Compressor sub-system
-               "DebugConsoleOutput",                   // Debug console output sub-system
-               "DebugErrorLogOutput",                  // Debug error_log() output sub-system
-               "FrameworkDirectoryPointer",    // Directory handler sub-system
-               "NullCompressor",                               // Null compressor
-               "Bzip2Compressor",                              // BZIP2 compressor
-               "GzipCompressor",                               // GZIP compressor
-       );
-
-       /* No longer used:
-       */
-
-       /**
-        * Private super constructor
-        *
-        * @param       $className      Name of the class
-        * @return      void
-        */
-       protected function __construct ($className) {
-               // Set real class
-               $this->setRealClass($className);
-
-               // Initialize the class if class Registry is there
-               if ((class_exists('Registry')) && (Registry::isInitialized() === false)) {
-                       // Initialize the registry automatically
-                       $this->initInstance();
-               } // END - if
-       }
-
-       /**
-        * Destructor reached...
-        *
-        * @return      void
-        * @todo        This is old code. Do we still need this old lost code?
-        */
-       public function __destruct() {
-               // Is this object already destroyed?
-               if ($this->__toString() != 'DestructedObject') {
-                       // Destroy all informations about this class but keep some text about it alive
-                       $this->setRealClass('DestructedObject');
-               } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) {
-                       // Already destructed object
-                       $this->debugOutput(sprintf("[%s:] The object <span class=\"object_name\">%s</span> is already destroyed.",
-                               __CLASS__, $this->__toString()
-                       ));
-               }
-       }
-
-       /**
-        * The call method where all non-implemented methods end up
-        *
-        * @return      void
-        */
-       public final function __call ($methodName, $args) {
-               // Implode all given arguments
-               $argsString = "";
-               if (empty($args)) {
-                       // No arguments
-                       $argsString = "NULL";
-               } elseif (is_array($args)) {
-                       // Some arguments are there
-                       foreach ($args as $arg) {
-                               // Add the type
-                               $argsString .= $arg." (".gettype($arg);
-
-                               // Add length if type is string
-                               if (gettype($arg) == 'string') $argsString .= ", ".strlen($arg);
-
-                               // Closing bracket
-                               $argsString .= "), ";
-                       } // END - foreach
-
-                       // Remove last comma
-                       if (substr($argsString, -2, 1) === ",") {
-                               $argsString = substr($argsString, 0, -2);
-                       } // END - if
-               } else {
-                       // Invalid arguments!
-                       $argsString = sprintf("!INVALID:%s!", $args);
-               }
-
-               // Output stub message
-               $this->debugOutput(sprintf("[%s-&gt;%s] Stub! Args: %s",
-                       $this->__toString(),
-                       $methodName,
-                       $argsString
-               ));
-
-               // Return nothing
-               return null;
-       }
-
-       /**
-        * Private initializer for this class
-        *
-        * @return      void
-        */
-       private final function initInstance () {
-               // Is this a system class?
-               if (!in_array($this->__toString(), $this->systemClasses)) {
-                       // Set configuration instance
-                       $this->setConfigInstance(FrameworkConfiguration::getInstance());
-
-                       // Add application helper to our class
-                       $this->systemclasses[] = $this->getConfigInstance()->readConfig('app_helper_class');
-
-                       // Set debug instance
-                       $this->setDebugInstance(DebugMiddleware::createDebugMiddleware($this->getConfigInstance()->readConfig('debug_class')));
-
-                       // Get output instance and set it
-                       $outputInstance = ObjectFactory::createObjectByConfiguredName('web_engine', array($this->getConfigInstance()->readConfig('web_content_type')));
-                       $this->setWebOutputInstance($outputInstance);
-
-                       // Set the compressor channel
-                       $this->setCompressorChannel(CompressorChannel::createCompressorChannel(sprintf("%s%s",
-                               $this->getConfigInstance()->readConfig('base_path'),
-                               $this->getConfigInstance()->readConfig('compressor_base_path')
-                       )));
-
-                       // Initialization done! :D
-                       Registry::isInitialized('OK');
-               } elseif ($this->__toString() == 'DebugMiddleware') {
-                       // Set configuration instance
-                       $this->setConfigInstance(FrameworkConfiguration::getInstance());
-               }
-       }
-
-       /**
-        * Setter for database result instance
-        *
-        * @param       $resultInstance         An instance of a database result class
-        * @return      void
-        * @todo        SearchableResult and UpdateableResult shall have a super interface to use here
-        */
-       protected final function setResultInstance (SearchableResult $resultInstance) {
-               $this->resultInstance =  $resultInstance;
-       }
-
-       /**
-        * Getter for database result instance
-        *
-        * @return      $resultInstance         An instance of a database result class
-        */
-       public final function getResultInstance () {
-               return $this->resultInstance;
-       }
-
-       /**
-        * Setter for template engine instances
-        *
-        * @param       $templateInstance       An instance of a template engine class
-        * @return      void
-        */
-       protected final function setTemplateInstance (CompileableTemplate $templateInstance) {
-               $this->templateInstance = $templateInstance;
-       }
-
-       /**
-        * Getter for template engine instances
-        *
-        * @return      $templateInstance       An instance of a template engine class
-        */
-       protected final function getTemplateInstance () {
-               return $this->templateInstance;
-       }
-
-       /**
-        * Setter for search instance
-        *
-        * @param       $searchInstance         Searchable criteria instance
-        * @return      void
-        */
-       public final function setSearchInstance (LocalSearchCriteria $searchInstance) {
-               $this->searchInstance = $searchInstance;
-       }
-
-       /**
-        * Getter for search instance
-        *
-        * @return      $searchInstance         Searchable criteria instance
-        */
-       public final function getSearchInstance () {
-               return $this->searchInstance;
-       }
-
-       /**
-        * Setter for resolver instance
-        *
-        * @param       $resolverInstance               Instance of a command resolver class
-        * @return      void
-        */
-       public final function setResolverInstance (Resolver $resolverInstance) {
-               $this->resolverInstance = $resolverInstance;
-       }
-
-       /**
-        * Getter for resolver instance
-        *
-        * @return      $resolverInstance               Instance of a command resolver class
-        */
-       public final function getResolverInstance () {
-               return $this->resolverInstance;
-       }
-
-       /**
-        * Setter for language instance
-        *
-        * @param       $configInstance         The configuration instance which shall
-        *                                                              be FrameworkConfiguration
-        * @return      void
-        */
-       public final function setConfigInstance (FrameworkConfiguration $configInstance) {
-               Registry::getRegistry()->addInstance('config', $configInstance);
-       }
-
-       /**
-        * Getter for configuration instance
-        *
-        * @return      $cfgInstance    Configuration instance
-        */
-       public final function getConfigInstance () {
-               $cfgInstance = Registry::getRegistry()->getInstance('config');
-               return $cfgInstance;
-       }
-
-       /**
-        * Setter for debug instance
-        *
-        * @param       $debugInstance  The instance for debug output class
-        * @return      void
-        */
-       public final function setDebugInstance (DebugMiddleware $debugInstance) {
-               self::$debugInstance = $debugInstance;
-       }
-
-       /**
-        * Getter for debug instance
-        *
-        * @return      $debugInstance  Instance to class DebugConsoleOutput or DebugWebOutput
-        */
-       public final function getDebugInstance () {
-               return self::$debugInstance;
-       }
-
-       /**
-        * Setter for web output instance
-        *
-        * @param               $webInstance    The instance for web output class
-        * @return      void
-        */
-       public final function setWebOutputInstance (OutputStreamer $webInstance) {
-               Registry::getRegistry()->addInstance('web_output', $webInstance);
-       }
-
-       /**
-        * Getter for web output instance
-        *
-        * @return      $webOutput - Instance to class WebOutput
-        */
-       public final function getWebOutputInstance () {
-               return Registry::getRegistry()->getInstance('web_output');
-       }
-
-       /**
-        * Setter for database instance
-        *
-        * @param               $dbInstance     The instance for the database connection
-        *                                      (forced DatabaseConnection)
-        * @return      void
-        */
-       public final function setDatabaseInstance (DatabaseConnection $dbInstance) {
-               Registry::getRegistry()->addInstance('dbInstance', $dbInstance);
-       }
-
-       /**
-        * Getter for database layer
-        *
-        * @return      $dbInstance     The database layer instance
-        */
-       public final function getDatabaseInstance () {
-               // Default is invalid db instance
-               $dbInstance = null;
-
-               // Is the registry there and initialized?
-               if ((class_exists('Registry')) && (Registry::isInitialized() === true)) {
-                       $dbInstance = Registry::getRegistry()->getInstance('dbInstance');
-               } // END - if
-
-               // Return instance
-               return $dbInstance;
-       }
-
-       /**
-        * Setter for compressor channel
-        *
-        * @param               $compressorChannel      An instance of CompressorChannel
-        * @return      void
-        */
-       public final function setCompressorChannel (CompressorChannel $compressorChannel) {
-               Registry::getRegistry()->addInstance('compressor', $compressorChannel);
-       }
-
-       /**
-        * Getter for compressor channel
-        *
-        * @return      $compressor     The compressor channel
-        */
-       public final function getCompressorChannel () {
-               return Registry::getRegistry()->getInstance('compressor');
-       }
-
-       /**
-        * Protected getter for a manageable application helper class
-        *
-        * @return      $applicationInstance    An instance of a manageable application helper class
-        */
-       protected final function getApplicationInstance () {
-               return self::$applicationInstance;
-       }
-
-       /**
-        * Setter for a manageable application helper class
-        *
-        * @param       $applicationInstance    An instance of a manageable application helper class
-        * @return      void
-        */
-       public final function setApplicationInstance (ManageableApplication $applicationInstance) {
-               self::$applicationInstance = $applicationInstance;
-       }
-
-       /**
-        * Setter for request instance
-        *
-        * @param       $requestInstance        An instance of a Requestable class
-        * @return      void
-        */
-       public final function setRequestInstance (Requestable $requestInstance) {
-               $this->requestInstance = $requestInstance;
-       }
-
-       /**
-        * Getter for request instance
-        *
-        * @return      $requestInstance        An instance of a Requestable class
-        */
-       public final function getRequestInstance () {
-               return $this->requestInstance;
-       }
-
-       /**
-        * Setter for response instance
-        *
-        * @param       $responseInstance       An instance of a Responseable class
-        * @return      void
-        */
-       public final function setResponseInstance (Responseable $responseInstance) {
-               $this->responseInstance = $responseInstance;
-       }
-
-       /**
-        * Getter for response instance
-        *
-        * @return      $responseInstance       An instance of a Responseable class
-        */
-       public final function getResponseInstance () {
-               return $this->responseInstance;
-       }
-
-       /**
-        * Getter for $realClass
-        *
-        * @return      $realClass The name of the real class (not BaseFrameworkSystem)
-        */
-       public final function __toString () {
-               return $this->realClass;
-       }
-
-       /**
-        * Setter for the real class name
-        *
-        * @param               $realClass      Class name (string)
-        * @return      void
-        */
-       public final function setRealClass ($realClass) {
-               // Cast to string
-               $realClass = (string) $realClass;
-
-               // Set real class
-               $this->realClass = $realClass;
-       }
-
-       /**
-        * Compare class name of this and given class name
-        *
-        * @param               $className      The class name as string from the other class
-        * @return      boolean The result of comparing both class names
-        */
-       public final function isClass ($className) {
-               return ($this->__toString() == $className);
-       }
-
-       /**
-        * Stub method (only real cabins shall override it)
-        *
-        * @return      boolean false = is no cabin, true = is a cabin
-        * @deprecated
-        */
-       public function isCabin () {
-               return false;
-       }
-
-       /**
-        * Stub method for tradeable objects
-        *
-        * @return      boolean false = is not tradeable by the Merchant class,
-        *                                      true  = is a tradeable object
-        * @deprecated
-        */
-       public function isTradeable () {
-               return false;
-       }
-
-       /**
-        * Formats computer generated price values into human-understandable formats
-        * with thousand and decimal seperators.
-        *
-        * @param       $value          The in computer format value for a price
-        * @param       $currency       The currency symbol (use HTML-valid characters!)
-        * @param       $decNum         Number of decimals after commata
-        * @return      $price          The for the current language formated price string
-        * @throws      MissingDecimalsThousandsSeperatorException      If decimals or
-        *                                                                                              thousands seperator
-        *                                                                                              is missing
-        */
-       public function formatCurrency ($value, $currency = "&euro;", $decNum = 2) {
-               // Are all required attriutes set?
-               if ((!isset($this->decimals)) || (!isset($this->thousands))) {
-                       // Throw an exception
-                       throw new MissingDecimalsThousandsSeperatorException($this, self::EXCEPTION_ATTRIBUTES_ARE_MISSING);
-               }
-
-               // Cast the number
-               $value = (float) $value;
-
-               // Reformat the US number
-               $price = sprintf("%s %s",
-                       number_format($value, $decNum, $this->decimals, $this->thousands),
-                       $currency
-               );
-
-               // Return as string...
-               return $price;
-       }
-
-       /**
-        * Removes number formating characters
-        *
-        * @return      void
-        */
-       public final function removeNumberFormaters () {
-               unset($this->thousands);
-               unset($this->decimals);
-       }
-
-       /**
-        * Private getter for language instance
-        *
-        * @return      $langInstance   An instance to the language sub-system
-        */
-       protected final function getLanguageInstance () {
-               return self::$langInstance;
-       }
-
-       /**
-        * Setter for language instance
-        *
-        * @param       $langInstance   An instance to the language sub-system
-        * @return      void
-        * @see         LanguageSystem
-        */
-       public final function setLanguageInstance (ManageableLanguage $langInstance) {
-               self::$langInstance = $langInstance;
-       }
-
-       /**
-        * Remove the $systemClasses array from memory
-        *
-        * @return      void
-        */
-       public final function removeSystemArray () {
-               unset($this->systemClasses);
-       }
-
-       /**
-        * Appends a trailing slash to a string
-        *
-        * @param       $str            A string (maybe) without trailing slash
-        * @return      $str            A string with an auto-appended trailing slash
-        */
-       public final function addMissingTrailingSlash ($str) {
-               // Is there a trailing slash?
-               if (substr($str, -1, 1) != "/") $str .= "/";
-               return $str;
-       }
-
-       /**
-        * Private getter for file IO instance
-        *
-        * @return      $fileIoInstance An instance to the file I/O sub-system
-        */
-       protected final function getFileIoInstance () {
-               return $this->fileIoInstance;
-       }
-
-       /**
-        * Setter for file I/O instance
-        *
-        * @param       $fileIoInstance An instance to the file I/O sub-system
-        * @return      void
-        */
-       public final function setFileIoInstance (FileIoHandler $fileIoInstance) {
-               $this->fileIoInstance = $fileIoInstance;
-       }
-
-       /**
-        * Prepare the template engine (WebTemplateEngine by default) for a given
-        * application helper instance (ApplicationHelper by default).
-        *
-        * @param               $appInstance                    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
-        * @throws              NullPointerException    If the discovered application
-        *                                                                              instance is still null
-        */
-       protected function prepareTemplateInstance (BaseFrameworkSystem $appInstance=null) {
-               // Is the application instance set?
-               if (is_null($appInstance)) {
-                       // Get the current instance
-                       $appInstance = $this->getApplicationInstance();
-
-                       // Still null?
-                       if (is_null($appInstance)) {
-                               // Thrown an exception
-                               throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
-                       } // END - if
-               } // END - if
-
-               // Generate FQFN for all application templates
-               $fqfn = sprintf("%s%s/%s",
-                       $this->getConfigInstance()->readConfig('application_path'),
-                       strtolower($appInstance->getAppShortName()),
-                       $this->getConfigInstance()->readConfig('tpl_base_path')
-               );
-
-               // 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('template_class', array($fqfn, $appInstance->getLanguageInstance(), $appInstance->getFileIoInstance()));
-
-               // Return the prepared instance
-               return $templateInstance;
-       }
-
-       /**
-        * Debugs this instance by putting out it's full content
-        *
-        * @param       $message        Optional message to show in debug output
-        * @return      void
-        */
-       public final function debugInstance ($message = "") {
-               // Restore the error handler to avoid trouble with missing array elements or undeclared variables
-               restore_error_handler();
-
-               // Init content
-               $content = "";
-
-               // Is a message set?
-               if (!empty($message)) {
-                       // Construct message
-                       $content = sprintf("<div class=\"debug_message\">Message: %s</div>\n", $message);
-               } // END - if
-
-               // Generate the output
-               $content .= sprintf("<pre>%s</pre>",
-                       trim(
-                               htmlentities(
-                                       print_r($this, true)
-                               )
-                       )
-               );
-
-               // Output it
-               ApplicationEntryPoint::app_die(sprintf("<div class=\"debug_header\">%s debug output:</div><div class=\"debug_content\">%s</div>\nLoaded includes: <div class=\"debug_include_list\">%s</div>",
-                       $this->__toString(),
-                       $content,
-                       ClassLoader::getInstance()->getPrintableIncludeList()
-               ));
-       }
-
-       /**
-        * Output a partial stub message for the caller method
-        *
-        * @param       $message        An optional message to display
-        * @return      void
-        */
-       protected function partialStub ($message = "") {
-               // Get the backtrace
-               $backtrace = debug_backtrace();
-
-               // Generate the class::method string
-               $methodName = "UnknownClass-&gt;unknownMethod";
-               if ((isset($backtrace[1]['class'])) && (isset($backtrace[1]['function']))) {
-                       $methodName = $backtrace[1]['class']."-&gt;".$backtrace[1]['function'];
-               } // END - if
-
-               // Construct the full message
-               $stubMessage = sprintf("[%s:] Partial stub!",
-                       $methodName
-               );
-
-               // Is the extra message given?
-               if (!empty($message)) {
-                       // Then add it as well
-                       $stubMessage .= sprintf(" Message: <span id=\"stub_message\">%s</span>", $message);
-               } // END - if
-
-               // Debug instance is there?
-               if (!is_null($this->getDebugInstance())) {
-                       // Output stub message
-                       $this->debugOutput($stubMessage);
-               } else {
-                       // Trigger an error
-                       trigger_error($stubMessage."<br />\n");
-               }
-       }
-
-       /**
-        * Outputs a debug backtrace and stops further script execution
-        *
-        * @return      void
-        */
-       public function debugBackTrace () {
-               // Sorry, there is no other way getting this nice backtrace
-               print("<pre>\n");
-               debug_print_backtrace();
-               print("</pre>");
-               exit();
-       }
-
-       /**
-        * Outputs a debug message wether to debug instance (should be set!) or dies with or pints the message
-        *
-        * @param       $message        Message we shall send out...
-        * @param       $doPrint        Wether we shall print or die here which first is the default
-        * @return      void
-        */
-       public function debugOutput ($message, $doPrint = true) {
-               // Get debug instance
-               $debugInstance = $this->getDebugInstance();
-
-               // Is the debug instance there?
-               if (is_object($debugInstance)) {
-                       // Use debug output handler
-                       $debugInstance->output($message);
-                       if ($doPrint === false) die(); // Die here if not printed
-               } else {
-                       // Put directly out
-                       if ($doPrint) {
-                               print($message);
-                       } else {
-                               // DO NOT REWRITE THIS TO app_die() !!!
-                               die($message);
-                       }
-               }
-       }
-
-       /**
-        * Converts e.g. a command from URL to a valid class by keeping out bad characters
-        *
-        * @param       $str            The string, what ever it is needs to be converted
-        * @return      $className      Generated class name
-        */
-       public function convertToClassName ($str) {
-               // Init class name
-               $className = "";
-
-               // Convert all dashes in underscores
-               $str = str_replace("-", "_", $str);
-
-               // Now use that underscores to get classname parts for hungarian style
-               foreach (explode("_", $str) as $strPart) {
-                       // Make the class name part lower case and first upper case
-                       $className .= ucfirst(strtolower($strPart));
-               } // END - foreach
-
-               // Return class name
-               return $className;
-       }
-
-       /**
-        * Marks up the code by adding e.g. line numbers
-        *
-        * @param       $phpCode                Unmarked PHP code
-        * @return      $markedCode             Marked PHP code
-        */
-       public function markupCode ($phpCode) {
-               // Init marked code
-               $markedCode = "";
-
-               // Get last error
-               $errorArray = error_get_last();
-
-               // Init the code with error message
-               if (is_array($errorArray)) {
-                       // Get error infos
-                       $markedCode = sprintf("<div id=\"error_header\">File: <span id=\"error_data\">%s</span>, Line: <span id=\"error_data\">%s</span>, Message: <span id=\"error_data\">%s</span>, Type: <span id=\"error_data\">%s</span></div>",
-                               basename($errorArray['file']),
-                               $errorArray['line'],
-                               $errorArray['message'],
-                               $errorArray['type']
-                       );
-               } // END - if
-
-               // Add line number to the code
-               foreach (explode("\n", $phpCode) as $lineNo => $code) {
-                       // Add line numbers
-                       $markedCode .= sprintf("<span id=\"code_line\">%s</span>: %s\n",
-                               ($lineNo + 1),
-                               htmlentities($code, ENT_QUOTES)
-                       );
-               } // END - foreach
-
-               // Return the code
-               return $markedCode;
-       }
-
-       /**
-        * Filter a given GMT timestamp (non Uni* stamp!) to make it look more
-        * beatiful for web-based front-ends. If null is given a message id
-        * null_timestamp will be resolved and returned.
-        *
-        * @param       $timestamp      Timestamp to prepare (filter) for display
-        * @return      $readable       A readable timestamp
-        */
-       public function doFilterFormatTimestamp ($timestamp) {
-               // Default value to return
-               $readable = "???";
-
-               // Is the timestamp null?
-               if (is_null($timestamp)) {
-                       // Get a message string
-                       $readable = $this->getLanguageInstance()->getMessage('null_timestamp');
-               } else {
-                       switch ($this->getLanguageInstance()->getLanguageCode()) {
-                               case "de": // German format is a bit different to default
-                                       // Split the GMT stamp up
-                                       $dateTime = explode(" ", $timestamp);
-                                       $dateArray = explode("-", $dateTime[0]);
-                                       $timeArray = explode(":", $dateTime[1]);
-
-                                       // Construct the timestamp
-                                       $readable = sprintf($this->getConfigInstance()->readConfig('german_date_time'),
-                                               $dateArray[0],
-                                               $dateArray[1],
-                                               $dateArray[2],
-                                               $timeArray[0],
-                                               $timeArray[1],
-                                               $timeArray[2]
-                                       );
-                                       break;
-
-                               default: // Default is pass-through
-                                       $readable = $timestamp;
-                                       break;
-                       }
-               }
-
-               // Return the stamp
-               return $readable;
-       }
-
-       /**
-        * "Getter" for databse entry
-        *
-        * @return      $entry  An array with database entries
-        * @throws      NullPointerException    If the database result is not found
-        * @throws      InvalidDatabaseResultException  If the database result is invalid
-        */
-       protected final function getDatabaseEntry () {
-               // Is there an instance?
-               if (is_null($this->getResultInstance())) {
-                       // Throw an exception here
-                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
-               } // END - if
-
-               // Rewind it
-               $this->getResultInstance()->rewind();
-
-               // Do we have an entry?
-               if ($this->getResultInstance()->valid() === false) {
-                       throw new InvalidDatabaseResultException(array($this, $this->getResultInstance()), DatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT);
-               } // END - if
-
-               // Get next entry
-               $this->getResultInstance()->next();
-
-               // Fetch it
-               $entry = $this->getResultInstance()->current();
-
-               // And return it
-               return $entry;
-       }
-
-       /**
-        * Getter for field name
-        *
-        * @param       $fieldName              Field name which we shall get
-        * @return      $fieldValue             Field value from the user
-        * @throws      NullPointerException    If the result instance is null
-        */
-       public final function getField ($fieldName) {
-               // Default field value
-               $fieldValue = null;
-
-               // 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();
-
-               // Does the field exist?
-               if (isset($fieldArray[$fieldName])) {
-                       // Get it
-                       $fieldValue = $fieldArray[$fieldName];
-               } // END - if
-
-               // Return it
-               return $fieldValue;
-       }
-
-       /**
-        * Protected setter for user instance
-        *
-        * @param       $userInstance   An instance of a user class
-        * @return      void
-        */
-       protected final function setUserInstance (ManageableAccount $userInstance) {
-               $this->userInstance = $userInstance;
-       }
-
-       /**
-        * Getter for user instance
-        *
-        * @return      $userInstance   An instance of a user class
-        */
-       public final function getUserInstance () {
-               return $this->userInstance;
-       }
-
-       /**
-        * Setter for controller instance (this surely breaks a bit the MVC patterm)
-        *
-        * @param       $controllerInstance             An instance of the controller
-        * @return      void
-        */
-       public final function setControllerInstance (Controller $controllerInstance) {
-               $this->controllerInstance = $controllerInstance;
-       }
-
-       /**
-        * Getter for controller instance (this surely breaks a bit the MVC patterm)
-        *
-        * @return      $controllerInstance             An instance of the controller
-        */
-       public final function getControllerInstance () {
-               return $this->controllerInstance;
-       }
-}
-
-// [EOF]
-?>