X-Git-Url: https://git.mxchange.org/?p=shipsimu.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=e0716d7ade32f511558a1b5f28b25e56fd164c62;hp=7a738d6b26f9584dd5053c9e4acf90db922a6c65;hb=968aa514d2df8ed98dab8ff251ee83c95f1ac182;hpb=86553167136d11d44e1d938e964134c038785e3e diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 7a738d6..e0716d7 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, this is free software * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -63,6 +63,21 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $resolverInstance = null; + /** + * Template engine instance + */ + private $templateInstance = null; + + /** + * Database result instance + */ + private $resultInstance = null; + + /** + * Instance for user class + */ + private $userInstance = null; + /** * The real class name */ @@ -141,19 +156,23 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { const EXCEPTION_MISSING_FILE_IO_HANDLER = 0x02f; const EXCEPTION_MISSING_ELEMENT = 0x030; const EXCEPTION_HEADERS_ALREADY_SENT = 0x031; - const EXCEPTION_DEFAUL_CONTROLLER_GONE = 0x032; + 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 SHOOT YOUR SERVER!!! * - *--------------------------------------------------------------------* + *---------------------------------------------------------------------* + * 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 @@ -193,24 +212,18 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * Destructor reached... * * @return void + * @todo This is old code. Do we still need this old lost code? */ public function __destruct() { // Is this object already destroyed? - if ($this->__toString() != "DestructedObject") { - // Debug message - if ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { - $this->getDebugInstance()->output(sprintf("[%s:] Das Objekt %s wird zerstört.
\n", - __CLASS__, $this->__toString() - )); - } // END - if - + if ($this->__toString() != 'DestructedObject') { // Destroy all informations about this class but keep some text about it alive - $this->setObjectDescription(sprintf("Entferntes Objekt %s", $this->__toString())); - $this->setRealClass("DestructedObject"); + $this->setObjectDescription(sprintf("Removed object %s", $this->__toString())); + $this->setRealClass('DestructedObject'); $this->resetUniqueID(); } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { // Already destructed object - $this->getDebugInstance()->output(sprintf("[%s:] Das Objekt %s wurde bereits zerstört.
\n", + $this->debugOutput(sprintf("[%s:] The object %s is already destroyed.", __CLASS__, $this->__toString() )); } @@ -230,49 +243,21 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } 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 .= ", "; - } + // Add the type + $argsString .= $arg." (".gettype($arg)."), "; + } // END - foreach // Remove last comma - if (substr($argsString, -2, 1) === ",") $argsString = substr($argsString, 0, -2); + if (substr($argsString, -2, 1) === ",") { + $argsString = substr($argsString, 0, -2); + } // END - if } else { // Invalid arguments! $argsString = sprintf("!INVALID:%s!", $args); } // Output stub message - $this->getDebugInstance()->output(sprintf("[%s::%s] Stub! Args: %s", + $this->debugOutput(sprintf("[%s->%s] Stub! Args: %s", $this->__toString(), $methodName, $argsString @@ -307,13 +292,52 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { ))); // Initialization done! :D - Registry::isInitialized("OK"); - } elseif ($this->__toString() == "DebugMiddleware") { + Registry::isInitialized('OK'); + } elseif ($this->__toString() == 'DebugMiddleware') { // Set configuration instance $this->setConfigInstance(FrameworkConfiguration::createFrameworkConfiguration()); } } + /** + * 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 * @@ -368,7 +392,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return $cfgInstance Configuration instance */ - protected final function getConfigInstance () { + public final function getConfigInstance () { $cfgInstance = Registry::getRegistry()->getInstance('config'); return $cfgInstance; } @@ -428,11 +452,16 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @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)) { - return Registry::getRegistry()->getInstance('dbInstance'); - } else { - return null; - } + $dbInstance = Registry::getRegistry()->getInstance('dbInstance'); + } // END - if + + // Return instance + return $dbInstance; } /** @@ -669,11 +698,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $objectDescription The description of this simulation part */ public final function getObjectDescription () { - if (isset($this->objectDescription)) { - return $this->objectDescription; - } else { - return null; - } + return $this->objectDescription; } /** @@ -698,7 +723,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Compare if both simulation part description and class name matches - * (shall be enougth) + * (shall be enough) * * @param $itemInstance An object instance to an other class * @return boolean The result of comparing class name simulation part description @@ -818,10 +843,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * The left part of the ID shall always be a valid class name and the * right part an ID number. * - * @return $pfn The file name with a prepended path name - * @throws NoArrayCreatedException If explode() fails to create an array + * @return $pfn The file name with a prepended path name + * @throws NoArrayCreatedException If explode() fails to create an array * @throws InvalidArrayCountException If the array contains less or - * more than two elements + * more than two elements */ public final function getPathFileNameFromObject () { // Get the main object's unique ID. We use this as a path/filename combination @@ -833,10 +858,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Are there two elements? Index 0 is the path, 1 the file name + global extension if (!is_array($pathFile)) { // No array found - throw new NoArrayCreatedException(array($this, "pathFile"), self::EXCEPTION_ARRAY_EXPECTED); + throw new NoArrayCreatedException(array($this, 'pathFile'), self::EXCEPTION_ARRAY_EXPECTED); } elseif (count($pathFile) != 2) { // Invalid ID returned! - throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); + throw new InvalidArrayCountException(array($this, 'pathFile', count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); } // Auto-append missing trailing slash @@ -879,22 +904,22 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Prepare the template engine (TemplateEngine by default) for a given + * 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 $tplEngine The template engine instance + * @return $templateInstance The template engine instance * @throws NullPointerException If the template engine could not * be initialized - * @throws UnsupportedTemplateEngineException If $tplEngine is an + * @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 prepareTemplateEngine (BaseFrameworkSystem $appInstance=null) { + protected function prepareTemplateInstance (BaseFrameworkSystem $appInstance=null) { // Is the application instance set? if (is_null($appInstance)) { // Get the current instance @@ -904,8 +929,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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/%s", @@ -925,10 +950,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // Initialize the template engine - $tplEngine = ObjectFactory::createObjectByConfiguredName('template_class', array($fqfn, $appInstance->getLanguageInstance(), $appInstance->getFileIoInstance())); + $templateInstance = ObjectFactory::createObjectByConfiguredName('template_class', array($fqfn, $appInstance->getLanguageInstance(), $appInstance->getFileIoInstance())); // Return the prepared instance - return $tplEngine; + return $templateInstance; } /** @@ -937,13 +962,20 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function debugInstance () { + // Restore the error handler to avoid trouble with missing array elements or undeclared variables + restore_error_handler(); + // Generate the output $content = sprintf("
%s
", - trim(print_r($this, true)) + trim( + htmlentities( + print_r($this, true) + ) + ) ); // Output it - ApplicationEntryPoint::app_die(sprintf("%s debug output:
%s
Loaded includes:
%s
", + ApplicationEntryPoint::app_die(sprintf("%s debug output:
%s
\nLoaded includes:
%s
", $this->__toString(), $content, ClassLoader::getInstance()->getPrintableIncludeList() @@ -961,10 +993,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $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']; - } + $methodName = $backtrace[1]['class']."->".$backtrace[1]['function']; + } // END - if // Construct the full message $stubMessage = sprintf("[%s:] Partial stub!", @@ -975,12 +1007,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if (!empty($message)) { // Then add it as well $stubMessage .= sprintf(" Message: %s", $message); - } + } // END - if // Debug instance is there? if (!is_null($this->getDebugInstance())) { // Output stub message - $this->getDebugInstance()->output($stubMessage); + $this->debugOutput($stubMessage); } else { // Trigger an error trigger_error($stubMessage."
\n"); @@ -992,7 +1024,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return void */ - public function debugBacktrace () { + public function debugBackTrace () { // Sorry, there is no other way getting this nice backtrace print "
\n";
 		debug_print_backtrace();
@@ -1004,10 +1036,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 	 * 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 last is the default
+	 * @param	$doPrint	Wether we shall print or die here which first is the default
 	 * @return	void
 	 */
-	public function debugOutput ($message, $doPrint = false) {
+	public function debugOutput ($message, $doPrint = true) {
 		// Get debug instance
 		$debugInstance = $this->getDebugInstance();
 
@@ -1018,10 +1050,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 			if (!$doPrint) die(); // Die here if not printed
 		} else {
 			// Put directly out
-			// DO NOT REWRITE THIS TO app_die() !!!
 			if ($doPrint) {
 				print($message);
 			} else {
+				// DO NOT REWRITE THIS TO app_die() !!!
 				die($message);
 			}
 		}
@@ -1084,6 +1116,114 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 		// Return the code
 		return $markedCode;
 	}
+
+	/**
+	 * Filter a given timestamp to make it look more beatifull 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 {
+			$this->partialStub("Do further analysis on timestamp {$timestamp}.");
+		}
+
+		// 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()) {
+			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;
+	}
 }
 
 // [EOF]