X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=b725a85658143712d8edd560802c46ff2aad221b;hb=390641f83ec749cc41a77bb80357105c200abb43;hp=8ac8d31fb01a35b584214311eea9a8538ec7537a;hpb=090cdbc7b32bb76588126b2591e4a8d18d855f0c;p=shipsimu.git diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 8ac8d31..b725a85 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -4,10 +4,10 @@ * class handles saving of games etc. * * @author Roland Haeder - * @version 0.3.0 + * @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.mxchange.org + * @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 @@ -20,38 +20,33 @@ * 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 . + * along with this program. If not, see . */ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** - * The instance to the debug output handler (should be DebugConsoleOutput or DebugWebOutput) - * - * @see DebugConsoleOutput - * @see DebugWebOutput + * Instance to an application helper class */ - private static $debug = null; + private static $applicationInstance = null; /** - * The instance to the web output handler (should be WebOutput) - * - * @see WebOutput + * The language instance for the template loader */ - private static $webOutput = null; + private static $langInstance = null; /** - * The instance to the compression layer which should be CompressorChannel + * Instance of a request class */ - private static $compressor = null; + private $requestInstance = null; /** - * The configuration instance which shall be FrameworkConfiguration + * Instance of a response class */ - private static $cfgInstance = null; + private $responseInstance = null; /** - * The instance to the database layer which should be DatabaseConnection + * Search criteria instance */ - private $dbInstance = null; + private $searchInstance = null; /** * The real class name @@ -61,7 +56,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * A human-readable description for this simulator part */ - private $partDescr = "Namenlose Framework-Einheit"; + private $objectDescription = "Namenlose Framework-Einheit"; /** * The unique ID string for identifying all type of classes @@ -78,15 +73,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $decimals = ","; // German - /** - * The language instance for the template loader - */ - private $langInstance = null; - /** * The file I/O instance for the template loader */ - private $fileIOInstance = null; + private $fileIoInstance = null; /*********************** * Exception codes.... * @@ -139,6 +129,15 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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_INVALID_COMMAND = 0x031; + const EXCEPTION_INVALID_CONTROLLER = 0x032; + const EXCEPTION_HEADERS_ALREADY_SENT = 0x033; + const EXCEPTION_DEFAUL_CONTROLLER_GONE = 0x034; + const EXCEPTION_CLASS_NOT_FOUND = 0x035; + const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x036; + const EXCEPTION_FATAL_ERROR = 0x037; + const EXCEPTION_FILE_NOT_FOUND = 0x038; /** * In the super constructor these system classes shall be ignored or else @@ -149,26 +148,36 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { *--------------------------------------------------------------------* */ private $systemClasses = array( - "DebugMiddleware", // Debug middleware output sub-system - "DebugWebOutput", // Debug web output sub-system - "DebugConsoleOutput", // Debug console output sub-system - "DebugErrorLogOutput", // Debug error_log() output sub-system - "CompressorChannel", // Compressor sub-system + "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 - "WebOutput", // Web output sub-system + "NullCompressor", // Null compressor + "Bzip2Compressor", // BZIP2 compressor + "GzipCompressor", // GZIP compressor ); + /* No longer used: + */ + /** * Private super constructor * * @return void */ - private function __construct ($class) { + protected function __construct ($class) { // Set real class $this->setRealClass($class); + + // Initialize the class if the registry is there + if ((class_exists('Registry')) && (Registry::isInitialized() === false)) { + $this->initInstance(); + } } /** @@ -187,7 +196,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // Destroy all informations about this class but keep some text about it alive - $this->setPartDescr(sprintf("Entferntes Objekt %s", $this->__toString())); + $this->setObjectDescription(sprintf("Entferntes Objekt %s", $this->__toString())); $this->setRealClass("DestructedObject"); $this->resetUniqueID(); } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { @@ -205,8 +214,53 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public final function __call ($methodName, $args) { // Implode all given arguments - $argsString = implode("|", $args); - if (empty($argsString)) $argsString = "NULL"; + $argsString = ""; + if (empty($args)) { + // No arguments + $argsString = "NULL"; + } elseif (is_array($args)) { + // Some arguments are there + foreach ($args as $arg) { + // Check the type + if (is_bool($arg)) { + // Boolean! + if ($arg) $argsString .= "true(bool)"; else $argsString .= "false(bool)"; + } elseif (is_int($arg)) { + // Integer + $argsString .= $arg."(int)"; + } elseif (is_float($arg)) { + // Floating point + $argsString .= $arg."(float)"; + } elseif ($arg instanceof BaseFrameworkSystem) { + // Own object instance + $argsString .= $arg->__toString()."(Object)"; + } elseif (is_object($arg)) { + // External object + $argsString .= "unknown object(!)"; + } elseif (is_array($arg)) { + // Array + $argsString .= "Array(array)"; + } elseif (is_string($arg)) { + // String + $argsString .= "\"".$arg."\"(string)"; + } elseif (is_null($arg)) { + // Null + $argsString .= "(null)"; + } else { + // Unknown type (please report!) + $argsString .= $arg."(unknown!)"; + } + + // Add comma + $argsString .= ", "; + } + + // Remove last comma + if (substr($argsString, -2, 1) === ",") $argsString = substr($argsString, 0, -2); + } else { + // Invalid arguments! + $argsString = sprintf("!INVALID:%s!", $args); + } $this->getDebugInstance()->output(sprintf("[%s::%s] Stub! Args: %s", $this->__toString(), @@ -219,83 +273,46 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Public constructor (for initializing things, etc.) + * Private initializer for this class * * @return void */ - public function constructor ($class) { - // Call constructor - $this->__construct($class); - - // Get the current (singleton) configuration instance - $this->setConfigInstance(FrameworkConfiguration::createFrameworkConfiguration()); - - // Is the class weather debug nor compressor channel? - if (!in_array($class, $this->systemClasses)) { - // Initialize debug instance - if (is_null($this->getDebugInstance())) { - // Set the debug output system if it is not debug class ;) - $this->setDebugInstance(DebugMiddleware::createDebugMiddleware($this->getConfigInstance()->readConfig("debug_engine"))); - } - - // Initialize web instance - if (is_null($this->getWebOutputInstance())) { - // Generate the eval() command - $eval = sprintf("\$this->setWebOutputInstance(%s::create%s(\"%s\"));", - $this->getConfigInstance()->readConfig("web_engine"), - $this->getConfigInstance()->readConfig("web_engine"), - $this->getConfigInstance()->readConfig("web_content_type") - ); - - // Debug message - if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:] Konstruierte PHP-Anweisung:
%s

\n", - $this->__toString(), - htmlentities($eval) - )); - - // Run the command - eval($eval); - } - - // Initialize compressor channel - if (is_null($this->getCompressorChannel())) { - // Set the compressor channel - $this->setCompressorChannel(CompressorChannel::createCompressorChannel(sprintf("%s%s", - PATH, - $this->getConfigInstance()->readConfig("compressor_base_path") - ))); - } - - // Initialize database middleware - if (is_null($this->getDatabaseInstance())) { - // Get the middleware instance - $db = DatabaseConnection::getInstance(); - if (is_object($db)) { - // Set the database middleware - $this->setDatabaseInstance($db); - } - } - - // Debug output - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Alle Sub-Systeme sind initialisiert.
\n", - $this->__toString() - )); + private final function initInstance () { + // Is this a system class? + if (!in_array($this->__toString(), $this->systemClasses)) { + // 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", + PATH, + $this->getConfigInstance()->readConfig('compressor_base_path') + ))); + + // Initialization done! :D + Registry::isInitialized("OK"); + } elseif ($this->__toString() == "DebugMiddleware") { + // Set configuration instance + $this->setConfigInstance(FrameworkConfiguration::createFrameworkConfiguration()); } } /** * Setter for language instance * - * @param $configInstance The configuration instance which shall - * be FrameworkConfiguration + * @param $configInstance The configuration instance which shall + * be FrameworkConfiguration * @return void */ public final function setConfigInstance (FrameworkConfiguration $configInstance) { - $this->cfgInstance = $configInstance; - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Konfigurations-Handler auf %s gesetzt.
\n", - $this->__toString(), - $configInstance->__toString() - )); + Registry::getRegistry()->addInstance('config', $configInstance); } /** @@ -303,12 +320,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return $cfhInstance - Configuration instance */ - public final function getConfigInstance () { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Konfigurations-Handler %s angefordert.
\n", - $this->__toString(), - $this->cfgInstance->__toString() - )); - return $this->cfgInstance; + protected final function getConfigInstance () { + return Registry::getRegistry()->getInstance('config'); } /** @@ -318,11 +331,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setDebugInstance (DebugMiddleware $debugInstance) { - self::$debug = $debugInstance; - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Debug-Handler auf %s gesetzt.
\n", - $this->__toString(), - $this->getDebugInstance()->__toString() - )); + Registry::getRegistry()->addInstance('debug', $debugInstance); } /** @@ -331,7 +340,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $debug - Instance to class DebugConsoleOutput or DebugWebOutput */ public final function getDebugInstance () { - return self::$debug; + return Registry::getRegistry()->getInstance('debug'); } /** @@ -341,11 +350,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setWebOutputInstance (OutputStreamer $webInstance) { - self::$webOutput = $webInstance; - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Web-Handler auf %s gesetzt.
\n", - $this->__toString(), - $this->getWebOutputInstance()->__toString() - )); + Registry::getRegistry()->addInstance('web_output', $webInstance); } /** @@ -354,21 +359,107 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $webOutput - Instance to class WebOutput */ public final function getWebOutputInstance () { - return self::$webOutput; + return Registry::getRegistry()->getInstance('web_output'); } /** - * Static setter for database instance + * Setter for database instance * * @param $dbInstance The instance for the database connection * (forced DatabaseConnection) * @return void */ public final function setDatabaseInstance (DatabaseConnection $dbInstance) { - if ((defined('DEBUG_SYSTEM')) && (is_object($dbInstance->getDebugInstance()))) $dbInstance->getDebugInstance()->output(sprintf("[%s:] Datenbankschicht gesetzt.
\n", - $dbInstance->__toString() - )); - $this->dbInstance = $dbInstance; + Registry::getRegistry()->addInstance('dbInstance', $dbInstance); + } + + /** + * Getter for database layer + * + * @return $dbInstance The database layer instance + */ + public final function getDatabaseInstance () { + if ((class_exists('Registry')) && (Registry::isInitialized() === true)) { + return Registry::getRegistry()->getInstance('dbInstance'); + } else { + return null; + } + } + + /** + * 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; } /** @@ -377,9 +468,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $realClass The name of the real class (not BaseFrameworkSystem) */ public final function __toString () { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] __toString() erreicht.
\n", - $this->realClass - )); return $this->realClass; } @@ -402,16 +490,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return void */ - public final function createUniqueID () { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] createUniqueID aufgerufen.
\n", - $this->__toString() - )); - - // Existiert noch keine? + public final function generateUniqueId () { + // Is the id set for this class? if (empty($this->uniqueID)) { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] createUniqueID erzeugt neue Unique-ID.
\n", - $this->__toString() - )); // Correct missing class name $corrected = false; @@ -420,7 +501,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $corrected = true; } - // Neue ID erstellen + // Cache datbase instance + $db = $this->getDatabaseInstance(); + + // Generate new id $tempID = false; while (true) { // Generate a unique ID number @@ -429,8 +513,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Try to figure out if the ID number is not yet used try { - if (is_object($this->getDatabaseInstance())) { - $isUsed = $this->getDatabaseInstance()->isUniqueIdUsed($tempID, true); + // Is this a registry? + if ($this->__toString() == "Registry") { + // Registry, then abort here + break; + } elseif (is_object($db)) { + $isUsed = $db->isUniqueIdUsed($tempID, true); } } catch (FrameworkException $e) { // Catches all and ignores all ;-) @@ -441,10 +529,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $tempID !== false ) && ( ( - $this->getDatabaseInstance() === null + $db === null ) || ( ( - is_object($this->getDatabaseInstance()) + is_object($db) ) && ( !$isUsed ) @@ -454,13 +542,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Abort the loop break; } - } - - // Debug message - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] uniqueID ist auf %s gesetzt.
\n", - $this->__toString(), - $tempID - )); + } // END - while // Apply the new ID $this->setUniqueID($tempID); @@ -489,7 +571,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $this->__toString(), md5(sprintf("%s:%s:%s:%s:%s:%s", $this->__toString(), - $this->getPartDescr(), + $this->getObjectDescription(), time(), getenv('REMOTE_ADDR'), getenv('SERVER_ADDR'), @@ -508,12 +590,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Cast to string $uniqueID = (string) $uniqueID; - // Debug message - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Unique-ID gesetzt auf %s.
\n", - $this->__toString(), - $uniqueID - )); - // Set the ID number $this->uniqueID = $uniqueID; } @@ -524,9 +600,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $uniqueID The unique ID of this class */ public final function getUniqueID () { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Unique-ID angefordert.
\n", - $this->__toString() - )); return $this->uniqueID; } @@ -538,24 +611,17 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { public final function resetUniqueID() { // Sweet and simple... ;-) $newUniqueID = $this->generateIdNumber(); - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Unique-ID zurückgesetzt auf %s.
\n", - $this->__toString(), - $newUniqueID - )); $this->setUniqueID($newUniqueID); } /** * Getter for simulator description * - * @return $partDescr The description of this simulation part + * @return $objectDescription The description of this simulation part */ - public final function getPartDescr () { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] getPartDescr erreicht.
\n", - $this->__toString() - )); - if (isset($this->partDescr)) { - return $this->partDescr; + public final function getObjectDescription () { + if (isset($this->objectDescription)) { + return $this->objectDescription; } else { return null; } @@ -564,15 +630,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Setter for simulation part description * - * @param $partDescr The description as string for this simulation part + * @param $objectDescription The description as string for this simulation part * @return void */ - public final function setPartDescr ($partDescr) { - $this->partDescr = (String) $partDescr; - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Teilbeschreibung wird auf %s gesetzt.
\n", - $this->__toString(), - $this->partDescr - )); + public final function setObjectDescription ($objectDescription) { + $this->objectDescription = (String) $objectDescription; } /** @@ -597,7 +659,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { ( $this->__toString() == $itemInstance->__toString() ) && ( - $this->getPartDescr() == $itemInstance->getPartDescr() + $this->getObjectDescription() == $itemInstance->getObjectDescription() ) ); } @@ -609,11 +671,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return boolean The result of comparing both class names */ public final function isClass ($class) { - if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] %s=%s?
\n", - $this->__toString(), - $this->__toString(), - $class - )); return ($this->__toString() == $class); } @@ -640,10 +697,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * 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 + * @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 @@ -657,10 +714,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Cast the number $value = (float) $value; - if (defined('DEBUG_CORE') && is_object($this->getDebugInstance())) $this->getDebugInstance()->output(sprintf("[%s:] %d wird umformatiert.
\n", - $this->__toString(), - $value - )); // Reformat the US number $price = sprintf("%s %s", @@ -678,43 +731,28 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function removeNumberFormaters () { - if (defined('DEBUG_CORE') && is_object($this->getDebugInstance())) $this->getDebugInstance()->output(sprintf("[%s:] Zahlenumformatierungszeichen werden entfernt.
\n", - $this->__toString() - )); unset($this->thousands); unset($this->decimals); } /** - * Getter for database layer + * Private getter for language instance * - * @return $dbInstance The database layer instance + * @return $langInstance An instance to the language sub-system */ - public final function getDatabaseInstance () { - if (defined('DEBUG_CORE') && is_object($this->getDebugInstance())) $this->getDebugInstance()->output(sprintf("[%s:] Datenbank-Instanz %s angefordert.
\n", - $this->__toString(), - $this->dbInstance - )); - return $this->dbInstance; + protected final function getLanguageInstance () { + return self::$langInstance; } /** - * Setter for compressor channel + * Setter for language instance * - * @param $compressorChannel An instance of CompressorChannel + * @param $langInstance An instance to the language sub-system * @return void + * @see LanguageSystem */ - public final function setCompressorChannel (CompressorChannel $compressorChannel) { - self::$compressor = $compressorChannel; - } - - /** - * Getter for compressor channel - * - * @return $compressor The compressor channel - */ - public final function getCompressorChannel () { - return self::$compressor; + public final function setLanguageInstance (ManageableLanguage $langInstance) { + self::$langInstance = $langInstance; } /** @@ -772,50 +810,31 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return $str; } - /** - * Private getter for language instance - * - * @return $langInstance An instance to the language sub-system - */ - protected final function getLanguageInstance () { - return $this->langInstance; - } - - /** - * Setter for language instance - * - * @param $langInstance An instance to the language sub-system - * @return void - * @see LanguageSystem - */ - public final function setLanguageInstance (ManageableLanguage $langInstance) { - $this->langInstance = $langInstance; - } - /** * Private getter for file IO instance * - * @return $fileIOInstance An instance to the file I/O sub-system + * @return $fileIoInstance An instance to the file I/O sub-system */ - protected final function getFileIOInstance () { - return $this->fileIOInstance; + protected final function getFileIoInstance () { + return $this->fileIoInstance; } /** * Setter for file I/O instance * - * @param $fileIOInstance An instance to the file I/O sub-system + * @param $fileIoInstance An instance to the file I/O sub-system * @return void */ - public final function setFileIOInstance (FileIOHandler $fileIOInstance) { - $this->fileIOInstance = $fileIOInstance; + public final function setFileIoInstance (FileIoHandler $fileIoInstance) { + $this->fileIoInstance = $fileIoInstance; } /** * Prepare the template engine (TemplateEngine by default) for a given * application helper instance (ApplicationHelper by default). * - * @param $appInstance An application helper instance + * @param $appInstance An application helper instance or + * null if we shall use the default * @return $tplEngine The template engine instance * @throws NullPointerException If the template engine could not * be initialized @@ -823,59 +842,155 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * unsupported template engine * @throws MissingLanguageHandlerException If the language sub-system * is not yet initialized - */ - protected function prepareTemplateEngine (BaseFrameworkSystem $appInstance) { + * @throws NullPointerException If the discovered application + * instance is still null + */ + protected function prepareTemplateEngine (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); + } + } + // Generate FQFN for all application templates $fqfn = sprintf("%s%s/%s/%s", PATH, - $this->getConfigInstance()->readConfig("application_path"), + $this->getConfigInstance()->readConfig('application_path'), strtolower($appInstance->getAppShortName()), - $this->getConfigInstance()->readConfig("tpl_base_path") + $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) { + } elseif ($appInstance->getFileIoInstance() === null) { // Invalid language instance throw new MissingFileIoHandlerException($appInstance, self::EXCEPTION_MISSING_FILE_IO_HANDLER); } // Initialize the template engine - $tplEngine = null; - $eval = sprintf("\$tplEngine = %s::create%s( - \"%s\", - \$appInstance->getLanguageInstance(), - \$appInstance->getFileIOInstance() -);", - $this->getConfigInstance()->readConfig("tpl_engine"), - $this->getConfigInstance()->readConfig("tpl_engine"), - $fqfn + $tplEngine = ObjectFactory::createObjectByConfiguredName('template_class', array($fqfn, $appInstance->getLanguageInstance(), $appInstance->getFileIoInstance())); + + // Return the prepared instance + return $tplEngine; + } + + /** + * Debugs this instance by putting out it's full content + * + * @return void + */ + public final function debugInstance () { + // Generate the output + $content = sprintf("
%s
", + trim(print_r($this, true)) ); - // Debug message - if ((!is_null($this->getDebugInstance())) && (defined('DEBUG_EVAL'))) { - $this->getDebugInstance()->output(sprintf("[%s:] Konstruierte PHP-Anweisung:
%s

\n", - $this->__toString(), - htmlentities($eval) - )); + // Output it + ApplicationEntryPoint::app_die(sprintf("%s debug output:
%s
Loaded includes:
%s
", + $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::unknownMethod"; + if ((isset($backtrace[1]['class'])) && (isset($backtrace[1]['function']))) { + $methodName = $backtrace[1]['class']."::".$backtrace[1]['function']; } - // Run the command - eval($eval); + // Construct the full message + $stubMessage = sprintf("[%s:] Partial stub!", + $methodName + ); - // Is it a valid instance? - if (is_null($tplEngine)) { - // No class returned - throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); - } elseif (!$tplEngine instanceof CompileableTemplate) { - // Not an object! ;-( - throw new UnsupportedTemplateEngineException($tplEngine, self::EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED); + // Is the extra message given? + if (!empty($message)) { + // Then add it as well + $stubMessage .= sprintf(" Message: %s", $message); } - // Return the prepared instance - return $tplEngine; + // Debug instance is there? + if (!is_null($this->getDebugInstance())) { + // Output stub message + $this->getDebugInstance()->output($stubMessage); + } else { + // Trigger an error + trigger_error($stubMessage."
\n"); + } + } + + /** + * 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; + } + + /** + * 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 "
\n";
+		debug_print_backtrace();
+		print "
"; + exit; + } + + /** + * 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; } }