X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=0b5ce31099294001468444eda7f8daac25122f09;hp=d4eabd793f3564724250b78ec9e669c6f592b56e;hb=9ea7c80cda1d4b8018ddc61a0d1a2f9e5eedbdf1;hpb=c6d73b0e3246efc824cb98338d4be7ee5bc9f308 diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index d4eabd79..0b5ce310 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -5,7 +5,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -23,21 +23,6 @@ * along with this program. If not, see . */ 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 */ @@ -53,6 +38,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $searchInstance = null; + /** + * Update criteria instance + */ + private $updateInstance = null; + /** * The file I/O instance for the template loader */ @@ -83,20 +73,30 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $controllerInstance = null; + /** + * Instance of a RNG + */ + private $rngInstance = null; + + /** + * Instance of an Iterator class + */ + private $iteratorInstance = null; + /** * The real class name */ - private $realClass = "FrameworkSystem"; + private $realClass = 'BaseFrameworkSystem'; /** * Thousands seperator */ - private $thousands = "."; // German + private $thousands = '.'; // German /** * Decimal seperator */ - private $decimals = ","; // German + private $decimals = ','; // German /*********************** * Exception codes.... * @@ -159,6 +159,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { const EXCEPTION_ASSERTION_FAILED = 0x037; const EXCEPTION_FILE_CANNOT_BE_READ = 0x038; const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x039; + const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x040; /** * In the super constructor these system classes shall be ignored or else @@ -170,25 +171,21 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { *---------------------------------------------------------------------* */ 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 + '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 + * Protected super constructor * * @param $className Name of the class * @return void @@ -211,6 +208,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @todo This is old code. Do we still need this old lost code? */ public function __destruct() { + // Flush any updated entries to the database + $this->flushPendingUpdates(); + // Is this object already destroyed? if ($this->__toString() != 'DestructedObject') { // Destroy all informations about this class but keep some text about it alive @@ -218,7 +218,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { // Already destructed object $this->debugOutput(sprintf("[%s:] The object %s is already destroyed.", - __CLASS__, $this->__toString() + __CLASS__, + $this->__toString() )); } } @@ -230,30 +231,30 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public final function __call ($methodName, $args) { // Implode all given arguments - $argsString = ""; + $argsString = ''; if (empty($args)) { // No arguments - $argsString = "NULL"; + $argsString = 'NULL'; } elseif (is_array($args)) { // Some arguments are there foreach ($args as $arg) { // Add the type - $argsString .= $arg." (".gettype($arg); + $argsString .= $arg . ' (' . gettype($arg); // Add length if type is string - if (gettype($arg) == 'string') $argsString .= ", ".strlen($arg); + if (gettype($arg) == 'string') $argsString .= ', '.strlen($arg); // Closing bracket - $argsString .= "), "; + $argsString .= '), '; } // END - foreach // Remove last comma - if (substr($argsString, -2, 1) === ",") { + if (substr($argsString, -2, 1) == ',') { $argsString = substr($argsString, 0, -2); } // END - if } else { // Invalid arguments! - $argsString = sprintf("!INVALID:%s!", $args); + $argsString = '!INVALID:' . gettype($args) . '!'; } // Output stub message @@ -279,20 +280,20 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $this->setConfigInstance(FrameworkConfiguration::getInstance()); // Add application helper to our class - $this->systemclasses[] = $this->getConfigInstance()->readConfig('app_helper_class'); + $this->systemclasses[] = $this->getConfigInstance()->getConfigEntry('app_helper_class'); // Set debug instance - $this->setDebugInstance(DebugMiddleware::createDebugMiddleware($this->getConfigInstance()->readConfig('debug_class'))); + $this->setDebugInstance(DebugMiddleware::createDebugMiddleware($this->getConfigInstance()->getConfigEntry('debug_class'))); // Get output instance and set it - $outputInstance = ObjectFactory::createObjectByConfiguredName('web_engine', array($this->getConfigInstance()->readConfig('web_content_type'))); + $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($this->getConfigInstance()->getConfigEntry('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') - ))); + $this->setCompressorChannel(CompressorChannel::createCompressorChannel( + $this->getConfigInstance()->getConfigEntry('base_path'). + $this->getConfigInstance()->getConfigEntry('compressor_base_path') + )); // Initialization done! :D Registry::isInitialized('OK'); @@ -360,6 +361,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return $this->searchInstance; } + /** + * Setter for update instance + * + * @param $updateInstance Searchable criteria instance + * @return void + */ + public final function setUpdateInstance (LocalUpdateCriteria $updateInstance) { + $this->updateInstance = $updateInstance; + } + + /** + * Getter for update instance + * + * @return $updateInstance Updateable criteria instance + */ + public final function getUpdateInstance () { + return $this->updateInstance; + } + /** * Setter for resolver instance * @@ -393,11 +413,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Getter for configuration instance * - * @return $cfgInstance Configuration instance + * @return $configInstance Configuration instance */ public final function getConfigInstance () { - $cfgInstance = Registry::getRegistry()->getInstance('config'); - return $cfgInstance; + $configInstance = Registry::getRegistry()->getInstance('config'); + return $configInstance; } /** @@ -407,7 +427,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setDebugInstance (DebugMiddleware $debugInstance) { - self::$debugInstance = $debugInstance; + Registry::getRegistry()->addInstance('debug', $debugInstance); } /** @@ -416,7 +436,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput */ public final function getDebugInstance () { - return self::$debugInstance; + $debugInstance = Registry::getRegistry()->getInstance('debug'); + return $debugInstance; } /** @@ -432,10 +453,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Getter for web output instance * - * @return $webOutput - Instance to class WebOutput + * @return $webOutputInstance - Instance to class WebOutput */ public final function getWebOutputInstance () { - return Registry::getRegistry()->getInstance('web_output'); + $webOutputInstance = Registry::getRegistry()->getInstance('web_output'); + return $webOutputInstance; } /** @@ -446,7 +468,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setDatabaseInstance (DatabaseConnection $dbInstance) { - Registry::getRegistry()->addInstance('dbInstance', $dbInstance); + Registry::getRegistry()->addInstance('db_instance', $dbInstance); } /** @@ -460,7 +482,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Is the registry there and initialized? if ((class_exists('Registry')) && (Registry::isInitialized() === true)) { - $dbInstance = Registry::getRegistry()->getInstance('dbInstance'); + $dbInstance = Registry::getRegistry()->getInstance('db_instance'); } // END - if // Return instance @@ -470,20 +492,21 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Setter for compressor channel * - * @param $compressorChannel An instance of CompressorChannel + * @param $compressorInstance An instance of CompressorChannel * @return void */ - public final function setCompressorChannel (CompressorChannel $compressorChannel) { - Registry::getRegistry()->addInstance('compressor', $compressorChannel); + public final function setCompressorChannel (CompressorChannel $compressorInstance) { + Registry::getRegistry()->addInstance('compressor', $compressorInstance); } /** * Getter for compressor channel * - * @return $compressor The compressor channel + * @return $compressorInstance The compressor channel */ public final function getCompressorChannel () { - return Registry::getRegistry()->getInstance('compressor'); + $compressorInstance = Registry::getRegistry()->getInstance('compressor'); + return $compressorInstance; } /** @@ -492,7 +515,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $applicationInstance An instance of a manageable application helper class */ protected final function getApplicationInstance () { - return self::$applicationInstance; + $applicationInstance = Registry::getRegistry()->getInstance('application'); + return $applicationInstance; } /** @@ -502,7 +526,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setApplicationInstance (ManageableApplication $applicationInstance) { - self::$applicationInstance = $applicationInstance; + Registry::getRegistry()->addInstance('application', $applicationInstance); } /** @@ -576,27 +600,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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. @@ -609,7 +612,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * thousands seperator * is missing */ - public function formatCurrency ($value, $currency = "€", $decNum = 2) { + public function formatCurrency ($value, $currency = '€', $decNum = 2) { // Are all required attriutes set? if ((!isset($this->decimals)) || (!isset($this->thousands))) { // Throw an exception @@ -620,10 +623,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $value = (float) $value; // Reformat the US number - $price = sprintf("%s %s", - number_format($value, $decNum, $this->decimals, $this->thousands), - $currency - ); + $price = number_format($value, $decNum, $this->decimals, $this->thousands) . $currency; // Return as string... return $price; @@ -645,7 +645,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $langInstance An instance to the language sub-system */ protected final function getLanguageInstance () { - return self::$langInstance; + $langInstance = Registry::getRegistry()->getInstance('language'); + return $langInstance; } /** @@ -656,7 +657,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @see LanguageSystem */ public final function setLanguageInstance (ManageableLanguage $langInstance) { - self::$langInstance = $langInstance; + Registry::getRegistry()->addInstance('language', $langInstance); } /** @@ -676,7 +677,7 @@ 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 .= '/'; return $str; } @@ -728,13 +729,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // 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 @@ -745,7 +739,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // Initialize the template engine - $templateInstance = ObjectFactory::createObjectByConfiguredName('template_class', array($fqfn, $appInstance->getLanguageInstance(), $appInstance->getFileIoInstance())); + $templateInstance = ObjectFactory::createObjectByConfiguredName('template_class', array($appInstance)); // Return the prepared instance return $templateInstance; @@ -757,12 +751,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $message Optional message to show in debug output * @return void */ - public final function debugInstance ($message = "") { + 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 = ""; + $content = ''; // Is a message set? if (!empty($message)) { @@ -793,12 +787,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $message An optional message to display * @return void */ - protected function partialStub ($message = "") { + protected function partialStub ($message = '') { // Get the backtrace $backtrace = debug_backtrace(); // Generate the class::method string - $methodName = "UnknownClass->unknownMethod"; + $methodName = 'UnknownClass->unknownMethod'; if ((isset($backtrace[1]['class'])) && (isset($backtrace[1]['function']))) { $methodName = $backtrace[1]['class']."->".$backtrace[1]['function']; } // END - if @@ -855,7 +849,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if ($doPrint === false) die(); // Die here if not printed } else { // Put directly out - if ($doPrint) { + if ($doPrint === true) { print($message); } else { // DO NOT REWRITE THIS TO app_die() !!! @@ -872,13 +866,13 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public function convertToClassName ($str) { // Init class name - $className = ""; + $className = ''; // Convert all dashes in underscores - $str = str_replace("-", "_", $str); + $str = $this->convertDashesToUnderscores($str); // Now use that underscores to get classname parts for hungarian style - foreach (explode("_", $str) as $strPart) { + foreach (explode('_', $str) as $strPart) { // Make the class name part lower case and first upper case $className .= ucfirst(strtolower($strPart)); } // END - foreach @@ -887,6 +881,20 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return $className; } + /** + * Converts dashes to underscores, e.g. useable for configuration entries + * + * @param $str The string with maybe dashes inside + * @return $str The converted string with no dashed, but underscores + */ + public final function convertDashesToUnderscores ($str) { + // Convert them all + $str = str_replace('-', '_', $str); + + // Return converted string + return $str; + } + /** * Marks up the code by adding e.g. line numbers * @@ -895,7 +903,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public function markupCode ($phpCode) { // Init marked code - $markedCode = ""; + $markedCode = ''; // Get last error $errorArray = error_get_last(); @@ -934,7 +942,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public function doFilterFormatTimestamp ($timestamp) { // Default value to return - $readable = "???"; + $readable = '???'; // Is the timestamp null? if (is_null($timestamp)) { @@ -944,12 +952,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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]); + $dateTime = explode(' ', $timestamp ); + $dateArray = explode('-', $dateTime[0]); + $timeArray = explode(':', $dateTime[1]); // Construct the timestamp - $readable = sprintf($this->getConfigInstance()->readConfig('german_date_time'), + $readable = sprintf($this->getConfigInstance()->getConfigEntry('german_date_time'), $dateArray[0], $dateArray[1], $dateArray[2], @@ -1071,6 +1079,115 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { public final function getControllerInstance () { return $this->controllerInstance; } + + /** + * Flushs all pending updates to the database layer + * + * @return void + */ + public function flushPendingUpdates () { + // Get result instance + $resultInstance = $this->getResultInstance(); + + // Do we have data to update? + if ((is_object($resultInstance)) && ($resultInstance->ifDataNeedsFlush())) { + // Get wrapper class name config entry + $configEntry = $resultInstance->getUpdateInstance()->getWrapperConfigEntry(); + + // Create object instance + $wrapperInstance = ObjectFactory::createObjectByConfiguredName($configEntry); + + // Yes, then send the whole result to the database layer + $wrapperInstance->doUpdateByResult($this->getResultInstance()); + } // END - if + } + + /** + * Outputs a deprecation warning to the developer. + * + * @param $message The message we shall output to the developer + * @return void + * @todo Write a logging mechanism for productive mode + */ + public function deprecationWarning ($message) { + // Is developer mode active? + if (defined('DEVELOPER')) { + // Debug instance is there? + if (!is_null($this->getDebugInstance())) { + // Output stub message + $this->debugOutput($message); + } else { + // Trigger an error + trigger_error($message."
\n"); + } + } else { + // @TODO Finish this part! + $this->partialStub('Developer mode inactive. Message:' . $message); + } + } + + /** + * Generates a generic hash code of this class. You should really overwrite + * this method with your own hash code generator code. But keep KISS in mind. + * + * @return $hashCode A generic hash code respresenting this whole class + */ + public function hashCode () { + // Simple hash code + return crc32($this->__toString()); + } + + /** + * Checks wether the given PHP extension is loaded + * + * @param $phpExtension The PHP extension we shall check + * @return $isLoaded Wether the PHP extension is loaded + */ + public final function isPhpExtensionLoaded ($phpExtension) { + // Is it loaded? + $isLoaded = in_array($phpExtension, get_loaded_extensions()); + + // Return result + return $isLoaded; + } + + /** + * Setter for RNG instance + * + * @param $rngInstance An instance of a random number generator (RNG) + * @return void + */ + protected final function setRngInstance (RandomNumberGenerator $rngInstance) { + $this->rngInstance = $rngInstance; + } + + /** + * Getter for RNG instance + * + * @return $rngInstance An instance of a random number generator (RNG) + */ + public final function getRngInstance () { + return $this->rngInstance; + } + + /** + * Setter for Iterator instance + * + * @param $iteratorInstance An instance of an Iterator + * @return void + */ + protected final function setIteratorInstance (Iterator $iteratorInstance) { + $this->iteratorInstance = $iteratorInstance; + } + + /** + * Getter for Iterator instance + * + * @return $iteratorInstance An instance of an Iterator + */ + public final function getIteratorInstance () { + return $this->iteratorInstance; + } } // [EOF]