X-Git-Url: https://git.mxchange.org/?p=shipsimu.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=0c490f1ee7d1d7362552cd75eb3a2548df527264;hp=3b0a939c50725eee298d4335a61265863ecb4537;hb=5bf79580029c4f6ee71e6c9e7890169e4b344def;hpb=6ea47cac34fd28b9d8157ceb1d643f7bfc6a4379 diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 3b0a939..0c490f1 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 * @@ -64,19 +64,24 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { private $resolverInstance = null; /** - * The real class name + * Template engine instance */ - private $realClass = "FrameworkSystem"; + private $templateInstance = null; + + /** + * Database result instance + */ + private $resultInstance = null; /** - * A human-readable description for this simulator part + * Instance for user class */ - private $objectDescription = "Namenlose Framework-Einheit"; + private $userInstance = null; /** - * The unique ID string for identifying all type of classes + * The real class name */ - private $uniqueID = ""; + private $realClass = "FrameworkSystem"; /** * Thousands seperator @@ -141,20 +146,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 @@ -184,8 +192,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Set real class $this->setRealClass($className); - // Initialize the class if the registry is there + // Initialize the class if class Registry is there if ((class_exists('Registry')) && (Registry::isInitialized() === false)) { + // Initialize the registry automatically $this->initInstance(); } // END - if } @@ -194,24 +203,16 @@ 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.", - __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->resetUniqueID(); + $this->setRealClass('DestructedObject'); } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { // Already destructed object - $this->getDebugInstance()->output(sprintf("[%s:] Das Objekt %s wurde bereits zerstört.", + $this->debugOutput(sprintf("[%s:] The object %s is already destroyed.", __CLASS__, $this->__toString() )); } @@ -231,49 +232,27 @@ 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); + + // 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); + 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 @@ -291,6 +270,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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'); @@ -303,18 +285,57 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Set the compressor channel $this->setCompressorChannel(CompressorChannel::createCompressorChannel(sprintf("%s%s", - PATH, + $this->getConfigInstance()->readConfig('base_path'), $this->getConfigInstance()->readConfig('compressor_base_path') ))); // Initialization done! :D - Registry::isInitialized("OK"); - } elseif ($this->__toString() == "DebugMiddleware") { + Registry::isInitialized('OK'); + } elseif ($this->__toString() == 'DebugMiddleware') { // Set configuration instance - $this->setConfigInstance(FrameworkConfiguration::createFrameworkConfiguration()); + $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 * @@ -369,7 +390,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; } @@ -429,11 +450,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; } /** @@ -535,185 +561,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $this->realClass = $realClass; } - /** - * Generate unique ID from a lot entropy - * - * @return void - */ - public final function generateUniqueId () { - // Is the id set for this class? - if (empty($this->uniqueID)) { - - // Correct missing class name - $corrected = false; - if ($this->__toString() == "") { - $this->setRealClass(__CLASS__); - $corrected = true; - } - - // Cache datbase instance - $db = $this->getDatabaseInstance(); - - // Generate new id - $tempID = false; - while (true) { - // Generate a unique ID number - $tempID = $this->generateIdNumber(); - $isUsed = false; - - // Try to figure out if the ID number is not yet used - try { - // 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 ;-) - } - - if ( - ( - $tempID !== false - ) && ( - ( - $db === null - ) || ( - ( - is_object($db) - ) && ( - !$isUsed - ) - ) - ) - ) { - // Abort the loop - break; - } - } // END - while - - // Apply the new ID - $this->setUniqueID($tempID); - - // Revert maybe corrected class name - if ($corrected) { - $this->setRealClass(""); - } - - // Remove system classes if we are in a system class - if ((isset($this->systemClasses)) && (in_array($this->__toString(), $this->systemClasses))) { - // This may save some RAM... - $this->removeSystemArray(); - } - } - } - - /** - * Generates a new ID number for classes based from the class' real name, - * the description and some random data - * - * @return $tempID The new (temporary) ID number - */ - private final function generateIdNumber () { - return sprintf("%s@%s", - $this->__toString(), - md5(sprintf("%s:%s:%s:%s:%s:%s", - $this->__toString(), - $this->getObjectDescription(), - time(), - getenv('REMOTE_ADDR'), - getenv('SERVER_ADDR'), - mt_rand() - )) - ); - } - - /** - * Setter for unique ID - * - * @param $uniqueID The newly generated unique ID number - * @return void - */ - private final function setUniqueID ($uniqueID) { - // Cast to string - $uniqueID = (string) $uniqueID; - - // Set the ID number - $this->uniqueID = $uniqueID; - } - - /** - * Getter for unique ID - * - * @return $uniqueID The unique ID of this class - */ - public final function getUniqueID () { - return $this->uniqueID; - } - - /** - * Resets or recreates the unique ID number - * - * @return void - */ - public final function resetUniqueID() { - // Sweet and simple... ;-) - $newUniqueID = $this->generateIdNumber(); - $this->setUniqueID($newUniqueID); - } - - /** - * Getter for simulator description - * - * @return $objectDescription The description of this simulation part - */ - public final function getObjectDescription () { - if (isset($this->objectDescription)) { - return $this->objectDescription; - } else { - return null; - } - } - - /** - * Setter for simulation part description - * - * @param $objectDescription The description as string for this simulation part - * @return void - */ - public final function setObjectDescription ($objectDescription) { - $this->objectDescription = (String) $objectDescription; - } - - /** - * Validate if given object is the same as current - * - * @param $object An object instance for comparison with this class - * @return boolean The result of comparing both's unique ID - */ - public final function equals (FrameworkInterface $object) { - return ($this->getUniqueID() == $object->getUniqueID()); - } - - /** - * Compare if both simulation part description and class name matches - * (shall be enougth) - * - * @param $itemInstance An object instance to an other class - * @return boolean The result of comparing class name simulation part description - */ - public function itemMatches ($itemInstance) { - return ( - ( - $this->__toString() == $itemInstance->__toString() - ) && ( - $this->getObjectDescription() == $itemInstance->getObjectDescription() - ) - ); - } - /** * Compare class name of this and given class name * @@ -728,6 +575,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * Stub method (only real cabins shall override it) * * @return boolean false = is no cabin, true = is a cabin + * @deprecated */ public function isCabin () { return false; @@ -738,6 +586,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return boolean false = is not tradeable by the Merchant class, * true = is a tradeable object + * @deprecated */ public function isTradeable () { return false; @@ -814,40 +663,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { unset($this->systemClasses); } - /** - * Create a file name and path name from the object's unique ID number. - * 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 - * @throws InvalidArrayCountException If the array contains less or - * more than two elements - */ - public final function getPathFileNameFromObject () { - // Get the main object's unique ID. We use this as a path/filename combination - $pathFile = $this->getUniqueID(); - - // Split it up in path and file name - $pathFile = explode("@", $pathFile); - - // 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); - } elseif (count($pathFile) != 2) { - // Invalid ID returned! - throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } - - // Auto-append missing trailing slash - $pathFile[0] = $this->addMissingTrailingSlash($pathFile[0]); - - // Create the file name and return it - $pfn = ($pathFile[0] . $pathFile[1]); - return $pfn; - } - /** * Appends a trailing slash to a string * @@ -880,22 +695,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 @@ -905,12 +720,11 @@ 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", - PATH, + $fqfn = sprintf("%s%s/%s", $this->getConfigInstance()->readConfig('application_path'), strtolower($appInstance->getAppShortName()), $this->getConfigInstance()->readConfig('tpl_base_path') @@ -926,25 +740,42 @@ 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; } /** * 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 () { + 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("
Message: %s
\n", $message); + } // END - if + // Generate the output - $content = sprintf("
%s
", - trim(print_r($this, true)) + $content .= sprintf("
%s
", + 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() @@ -965,7 +796,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $methodName = "UnknownClass->unknownMethod"; if ((isset($backtrace[1]['class'])) && (isset($backtrace[1]['function']))) { $methodName = $backtrace[1]['class']."->".$backtrace[1]['function']; - } + } // END - if // Construct the full message $stubMessage = sprintf("[%s:] Partial stub!", @@ -976,12 +807,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"); @@ -993,11 +824,11 @@ 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";
+		print("
\n");
 		debug_print_backtrace();
-		print "
"; + print("
"); exit; } @@ -1005,10 +836,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(); @@ -1016,13 +847,13 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if (is_object($debugInstance)) { // Use debug output handler $debugInstance->output($message); - if (!$doPrint) die(); // Die here if not printed + if ($doPrint === false) 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); } } @@ -1058,11 +889,13 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @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 - $markedCode = ""; if (is_array($errorArray)) { // Get error infos $markedCode = sprintf("
File: %s, Line: %s, Message: %s, Type: %s
", @@ -1074,10 +907,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // END - if // Add line number to the code - foreach (explode("\n", $phpCode) as $lineNo=>$code) { + foreach (explode("\n", $phpCode) as $lineNo => $code) { // Add line numbers $markedCode .= sprintf("%s: %s\n", - ($lineNo+1), + ($lineNo + 1), htmlentities($code, ENT_QUOTES) ); } // END - foreach @@ -1085,6 +918,135 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // 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; + } } // [EOF]