* @version 0.0.0
* @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
/**
* Instance of a request class
*/
private $requestInstance = null;
/**
* Instance of a response class
*/
private $responseInstance = null;
/**
* Search criteria instance
*/
private $searchInstance = null;
/**
* Update criteria instance
*/
private $updateInstance = null;
/**
* The file I/O instance for the template loader
*/
private $fileIoInstance = null;
/**
* Resolver instance
*/
private $resolverInstance = null;
/**
* Template engine instance
*/
private $templateInstance = null;
/**
* Database result instance
*/
private $resultInstance = null;
/**
* Instance for user class
*/
private $userInstance = null;
/**
* A controller instance
*/
private $controllerInstance = null;
/**
* Instance of a RNG
*/
private $rngInstance = null;
/**
* Instance of a crypto helper
*/
private $cryptoInstance = null;
/**
* Instance of an Iterator class
*/
private $iteratorInstance = null;
/**
* Instance of the list
*/
private $listInstance = null;
/**
* Instance of a menu
*/
private $menuInstance = null;
/**
* Instance of the image
*/
private $imageInstance = null;
/**
* Instance of the stacker
*/
private $stackerInstance = null;
/**
* A Compressor instance
*/
private $compressorInstance = null;
/**
* A Parseable instance
*/
private $parserInstance = null;
/**
* A ProtocolHandler instance
*/
private $protocolInstance = null;
/**
* A database wrapper instance
*/
private $databaseInstance = null;
/**
* A helper instance for the form
*/
private $helperInstance = null;
/**
* An instance of a source
*/
private $sourceInstance = null;
/**
* The real class name
*/
private $realClass = 'BaseFrameworkSystem';
/**
* Thousands seperator
*/
private $thousands = '.'; // German
/**
* Decimal seperator
*/
private $decimals = ','; // German
/**
* Socket resource
*/
private $socketResource = false;
/**
* Package data
*/
private $packageData = array();
/***********************
* Exception codes.... *
***********************/
// @todo Try to clean these constants up
const EXCEPTION_IS_NULL_POINTER = 0x001;
const EXCEPTION_IS_NO_OBJECT = 0x002;
const EXCEPTION_IS_NO_ARRAY = 0x003;
const EXCEPTION_MISSING_METHOD = 0x004;
const EXCEPTION_CLASSES_NOT_MATCHING = 0x005;
const EXCEPTION_INDEX_OUT_OF_BOUNDS = 0x006;
const EXCEPTION_DIMENSION_ARRAY_INVALID = 0x007;
const EXCEPTION_ITEM_NOT_TRADEABLE = 0x008;
const EXCEPTION_ITEM_NOT_IN_PRICE_LIST = 0x009;
const EXCEPTION_GENDER_IS_WRONG = 0x00a;
const EXCEPTION_BIRTH_DATE_IS_INVALID = 0x00b;
const EXCEPTION_EMPTY_STRUCTURES_ARRAY = 0x00c;
const EXCEPTION_HAS_ALREADY_PERSONELL_LIST = 0x00d;
const EXCEPTION_NOT_ENOUGTH_UNEMPLOYEES = 0x00e;
const EXCEPTION_TOTAL_PRICE_NOT_CALCULATED = 0x00f;
const EXCEPTION_HARBOR_HAS_NO_SHIPYARDS = 0x010;
const EXCEPTION_CONTRACT_PARTNER_INVALID = 0x011;
const EXCEPTION_CONTRACT_PARTNER_MISMATCH = 0x012;
const EXCEPTION_CONTRACT_ALREADY_SIGNED = 0x013;
const EXCEPTION_UNEXPECTED_EMPTY_STRING = 0x014;
const EXCEPTION_PATH_NOT_FOUND = 0x015;
const EXCEPTION_INVALID_PATH_NAME = 0x016;
const EXCEPTION_READ_PROTECED_PATH = 0x017;
const EXCEPTION_WRITE_PROTECED_PATH = 0x018;
const EXCEPTION_DIR_POINTER_INVALID = 0x019;
const EXCEPTION_FILE_POINTER_INVALID = 0x01a;
const EXCEPTION_INVALID_RESOURCE = 0x01b;
const EXCEPTION_UNEXPECTED_OBJECT = 0x01c;
const EXCEPTION_LIMIT_ELEMENT_IS_UNSUPPORTED = 0x01d;
const EXCEPTION_GETTER_IS_MISSING = 0x01e;
const EXCEPTION_ARRAY_EXPECTED = 0x01f;
const EXCEPTION_ARRAY_HAS_INVALID_COUNT = 0x020;
const EXCEPTION_ID_IS_INVALID_FORMAT = 0x021;
const EXCEPTION_MD5_CHECKSUMS_MISMATCH = 0x022;
const EXCEPTION_UNEXPECTED_STRING_SIZE = 0x023;
const EXCEPTION_SIMULATOR_ID_INVALID = 0x024;
const EXCEPTION_MISMATCHING_COMPRESSORS = 0x025;
const EXCEPTION_CONTAINER_ITEM_IS_NULL = 0x026;
const EXCEPTION_ITEM_IS_NO_ARRAY = 0x027;
const EXCEPTION_CONTAINER_MAYBE_DAMAGED = 0x028;
const EXCEPTION_INVALID_STRING = 0x029;
const EXCEPTION_VARIABLE_NOT_SET = 0x02a;
const EXCEPTION_ATTRIBUTES_ARE_MISSING = 0x02b;
const EXCEPTION_ARRAY_ELEMENTS_MISSING = 0x02c;
const EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED = 0x02d;
const EXCEPTION_MISSING_ELEMENT = 0x030;
const EXCEPTION_HEADERS_ALREADY_SENT = 0x031;
const EXCEPTION_DEFAULT_CONTROLLER_GONE = 0x032;
const EXCEPTION_CLASS_NOT_FOUND = 0x033;
const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x034;
const EXCEPTION_FATAL_ERROR = 0x035;
const EXCEPTION_FILE_NOT_FOUND = 0x036;
const EXCEPTION_ASSERTION_FAILED = 0x037;
const EXCEPTION_FILE_CANNOT_BE_READ = 0x038;
const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x039;
const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x040;
/**
* Protected super constructor
*
* @param $className Name of the class
* @return void
*/
protected function __construct ($className) {
// Set real class
$this->setRealClass($className);
// Set configuration instance if no registry ...
if (!$this instanceof Register) {
// ... because registries doesn't need to be configured
$this->setConfigInstance(FrameworkConfiguration::getInstance());
} // END - if
}
/**
* Destructor reached...
*
* @return void
*/
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
$this->setRealClass('DestructedObject');
} elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) {
// Already destructed object
$this->debugOutput(sprintf("[%s:] The object %s is already destroyed.",
__CLASS__,
$this->__toString()
));
}
}
/**
* The __call() method where all non-implemented methods end up
*
* @param $methodName Name of the missing method
* @args $args Arguments passed to the method
* @return void
*/
public final function __call ($methodName, $args) {
// Implode all given arguments
$argsString = '';
if (empty($args)) {
// No arguments
$argsString = 'NULL';
} elseif (is_array($args)) {
// Some arguments are there
foreach ($args as $arg) {
// Add the type
$argsString .= $this->replaceControlCharacters($arg) . ' (' . gettype($arg);
// Add length if type is string
if (is_string($arg)) {
$argsString .= ', '.strlen($arg);
} // END - if
// Closing bracket
$argsString .= '), ';
} // END - foreach
// Remove last comma
if (substr($argsString, -2, 1) == ',') {
$argsString = substr($argsString, 0, -2);
} // END - if
} else {
// Invalid arguments!
$argsString = '!INVALID:' . gettype($args) . '!';
}
// Output stub message
$this->debugOutput(sprintf("[%s->%s] Stub! Args: %s",
$this->__toString(),
$methodName,
$argsString
));
// Return nothing
return null;
}
/**
* Getter for $realClass
*
* @return $realClass The name of the real class (not BaseFrameworkSystem)
*/
public function __toString () {
return $this->realClass;
}
/**
* Magic function to catch setting of missing but set class fields/attributes
*
* @param $name Name of the field/attribute
* @param $value Value to store
* @return void
*/
public final function __set ($name, $value) {
$this->debugBackTrace(sprintf("Tried to set a missing field. name=%s, value[%s]=%s",
$name,
gettype($value),
$value
));
}
/**
* Magic function to catch getting of missing fields/attributes
*
* @param $name Name of the field/attribute
* @return void
*/
public final function __get ($name) {
$this->debugBackTrace(sprintf("Tried to get a missing field. name=%s",
$name
));
}
/**
* Magic function to catch unsetting of missing fields/attributes
*
* @param $name Name of the field/attribute
* @return void
*/
public final function __unset ($name) {
$this->debugBackTrace(sprintf("Tried to unset a missing field. name=%s",
$name
));
}
/**
* Setter for database result instance
*
* @param $resultInstance An instance of a database result class
* @return void
* @todo SearchableResult and UpdateableResult shall have a super interface to use here
*/
protected final function setResultInstance (SearchableResult $resultInstance) {
$this->resultInstance = $resultInstance;
}
/**
* Getter for database result instance
*
* @return $resultInstance An instance of a database result class
*/
public final function getResultInstance () {
return $this->resultInstance;
}
/**
* Setter for template engine instances
*
* @param $templateInstance An instance of a template engine class
* @return void
*/
protected final function setTemplateInstance (CompileableTemplate $templateInstance) {
$this->templateInstance = $templateInstance;
}
/**
* Getter for template engine instances
*
* @return $templateInstance An instance of a template engine class
*/
protected final function getTemplateInstance () {
return $this->templateInstance;
}
/**
* Setter for search instance
*
* @param $searchInstance Searchable criteria instance
* @return void
*/
public final function setSearchInstance (LocalSearchCriteria $searchInstance) {
$this->searchInstance = $searchInstance;
}
/**
* Getter for search instance
*
* @return $searchInstance Searchable criteria instance
*/
public final function getSearchInstance () {
return $this->searchInstance;
}
/**
* Setter for 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
*
* @param $resolverInstance Instance of a command resolver class
* @return void
*/
public final function setResolverInstance (Resolver $resolverInstance) {
$this->resolverInstance = $resolverInstance;
}
/**
* Getter for resolver instance
*
* @return $resolverInstance Instance of a command resolver class
*/
public final function getResolverInstance () {
return $this->resolverInstance;
}
/**
* Setter for language instance
*
* @param $configInstance The configuration instance which shall
* be FrameworkConfiguration
* @return void
*/
public final function setConfigInstance (FrameworkConfiguration $configInstance) {
Registry::getRegistry()->addInstance('config', $configInstance);
}
/**
* Getter for configuration instance
*
* @return $configInstance Configuration instance
*/
public final function getConfigInstance () {
$configInstance = Registry::getRegistry()->getInstance('config');
return $configInstance;
}
/**
* Setter for debug instance
*
* @param $debugInstance The instance for debug output class
* @return void
*/
public final function setDebugInstance (DebugMiddleware $debugInstance) {
Registry::getRegistry()->addInstance('debug', $debugInstance);
}
/**
* Getter for debug instance
*
* @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput
*/
public final function getDebugInstance () {
// Get debug instance
$debugInstance = Registry::getRegistry()->getInstance('debug');
// Return it
return $debugInstance;
}
/**
* Setter for web output instance
*
* @param $webInstance The instance for web output class
* @return void
*/
public final function setWebOutputInstance (OutputStreamer $webInstance) {
Registry::getRegistry()->addInstance('web_output', $webInstance);
}
/**
* Getter for web output instance
*
* @return $webOutputInstance - Instance to class WebOutput
*/
public final function getWebOutputInstance () {
$webOutputInstance = Registry::getRegistry()->getInstance('web_output');
return $webOutputInstance;
}
/**
* Setter for database instance
*
* @param $dbInstance The instance for the database connection (forced DatabaseConnection)
* @return void
*/
public final function setDatabaseInstance (DatabaseConnection $dbInstance) {
Registry::getRegistry()->addInstance('db_instance', $dbInstance);
}
/**
* Getter for database layer
*
* @return $dbInstance The database layer instance
*/
public final function getDatabaseInstance () {
// Get instance
$dbInstance = Registry::getRegistry()->getInstance('db_instance');
// Return instance
return $dbInstance;
}
/**
* Setter for compressor channel
*
* @param $compressorInstance An instance of CompressorChannel
* @return void
*/
public final function setCompressorChannel (CompressorChannel $compressorInstance) {
Registry::getRegistry()->addInstance('compressor', $compressorInstance);
}
/**
* Getter for compressor channel
*
* @return $compressorInstance The compressor channel
*/
public final function getCompressorChannel () {
$compressorInstance = Registry::getRegistry()->getInstance('compressor');
return $compressorInstance;
}
/**
* Protected getter for a manageable application helper class
*
* @return $applicationInstance An instance of a manageable application helper class
*/
protected final function getApplicationInstance () {
$applicationInstance = Registry::getRegistry()->getInstance('application');
return $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) {
Registry::getRegistry()->addInstance('application', $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;
}
/**
* Setter for the real class name
*
* @param $realClass Class name (string)
* @return void
*/
public final function setRealClass ($realClass) {
// Cast to string
$realClass = (string) $realClass;
// Set real class
$this->realClass = $realClass;
}
/**
* Checks wether an object equals this object. You should overwrite this
* method to implement own equality checks
*
* @param $objectInstance An instance of a FrameworkInterface object
* @return $equals Wether both objects equals
*/
public function equals (FrameworkInterface $objectInstance) {
// Now test it
$equals = ((
$this->__toString() == $objectInstance->__toString()
) && (
$this->hashCode() == $objectInstance->hashCode()
));
// Return the result
return $equals;
}
/**
* 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());
}
/**
* Formats computer generated price values into human-understandable formats
* with thousand and decimal seperators.
*
* @param $value The in computer format value for a price
* @param $currency The currency symbol (use HTML-valid characters!)
* @param $decNum Number of decimals after commata
* @return $price The for the current language formated price string
* @throws MissingDecimalsThousandsSeperatorException If decimals or
* thousands seperator
* is missing
*/
public function formatCurrency ($value, $currency = '€', $decNum = 2) {
// Are all required attriutes set?
if ((!isset($this->decimals)) || (!isset($this->thousands))) {
// Throw an exception
throw new MissingDecimalsThousandsSeperatorException($this, self::EXCEPTION_ATTRIBUTES_ARE_MISSING);
} // END - if
// Cast the number
$value = (float) $value;
// Reformat the US number
$price = number_format($value, $decNum, $this->decimals, $this->thousands) . $currency;
// Return as string...
return $price;
}
/**
* Private getter for language instance
*
* @return $langInstance An instance to the language sub-system
*/
protected final function getLanguageInstance () {
$langInstance = Registry::getRegistry()->getInstance('language');
return $langInstance;
}
/**
* Setter for language instance
*
* @param $langInstance An instance to the language sub-system
* @return void
* @see LanguageSystem
*/
public final function setLanguageInstance (ManageableLanguage $langInstance) {
Registry::getRegistry()->addInstance('language', $langInstance);
}
/**
* Appends a trailing slash to a string
*
* @param $str A string (maybe) without trailing slash
* @return $str A string with an auto-appended trailing slash
*/
public final function addMissingTrailingSlash ($str) {
// Is there a trailing slash?
if (substr($str, -1, 1) != '/') {
$str .= '/';
} // END - if
// Return string with trailing slash
return $str;
}
/**
* Private getter for file IO instance
*
* @return $fileIoInstance An instance to the file I/O sub-system
*/
protected final function getFileIoInstance () {
return $this->fileIoInstance;
}
/**
* Setter for file I/O instance
*
* @param $fileIoInstance An instance to the file I/O sub-system
* @return void
*/
public final function setFileIoInstance (FileIoHandler $fileIoInstance) {
$this->fileIoInstance = $fileIoInstance;
}
/**
* Prepare the template engine (WebTemplateEngine by default) for a given
* application helper instance (ApplicationHelper by default).
*
* @param $applicationInstance An application helper instance or
* null if we shall use the default
* @return $templateInstance The template engine instance
* @throws NullPointerException If the discovered application
* instance is still null
*/
protected function prepareTemplateInstance (ManageableApplication $applicationInstance = null) {
// Is the application instance set?
if (is_null($applicationInstance)) {
// Get the current instance
$applicationInstance = $this->getApplicationInstance();
// Still null?
if (is_null($applicationInstance)) {
// Thrown an exception
throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
} // END - if
} // END - if
// Initialize the template engine
$templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class');
// Return the prepared instance
return $templateInstance;
}
/**
* Debugs this instance by putting out it's full content
*
* @param $message Optional message to show in debug output
* @return void
*/
public final function debugInstance ($message = '') {
// Restore the error handler to avoid trouble with missing array elements or undeclared variables
restore_error_handler();
// Init content
$content = '';
// Is a message set?
if (!empty($message)) {
// Construct message
$content = sprintf("
Message: %s
\n", $message);
} // END - if
// Generate the output
$content .= sprintf("%s
",
trim(
htmlentities(
print_r($this, true)
)
)
);
// Output it
ApplicationEntryPoint::app_die(sprintf("%s
\nLoaded includes: %s
",
$this->__toString(),
$content,
ClassLoader::getInstance()->getPrintableIncludeList()
));
}
/**
* Replaces control characters with printable output
*
* @param $str String with control characters
* @return $str Replaced string
*/
protected function replaceControlCharacters ($str) {
// Replace them
$str = str_replace(
"\r", '[r]', str_replace(
"\n", '[n]', str_replace(
"\t", '[t]',
$str
)));
// Return it
return $str;
}
/**
* 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'];
} // END - if
// Construct the full message
$stubMessage = sprintf("[%s:] Partial stub!",
$methodName
);
// Is the extra message given?
if (!empty($message)) {
// Then add it as well
$stubMessage .= sprintf(" Message: %s", $message);
} // END - if
// Debug instance is there?
if (!is_null($this->getDebugInstance())) {
// Output stub message
$this->debugOutput($stubMessage);
} else {
// Trigger an error
trigger_error($stubMessage . "
\n");
}
}
/**
* Outputs a debug backtrace and stops further script execution
*
* @param $message An optional message to output
* @return void
*/
public function debugBackTrace ($message = '') {
// Sorry, there is no other way getting this nice backtrace
if (!empty($message)) {
// Output message
printf("Message: %s
\n", $message);
} // END - if
print("\n");
debug_print_backtrace();
print("
");
exit();
}
/**
* Outputs a debug message wether to debug instance (should be set!) or dies with or pints the message
*
* @param $message Message we shall send out...
* @param $doPrint Wether we shall print or die here which first is the default
* @return void
*/
public function debugOutput ($message, $doPrint = true) {
// Get debug instance
$debugInstance = $this->getDebugInstance();
// Is the debug instance there?
if (is_object($debugInstance)) {
// Use debug output handler
$debugInstance->output($message);
if ($doPrint === false) {
// Die here if not printed
die();
} // END - if
} else {
// Put directly out
if ($doPrint === true) {
print($message);
} else {
// DO NOT REWRITE THIS TO app_die() !!!
die($message);
}
}
}
/**
* Converts e.g. a command from URL to a valid class by keeping out bad characters
*
* @param $str The string, what ever it is needs to be converted
* @return $className Generated class name
*/
public function convertToClassName ($str) {
// Init class name
$className = '';
// Convert all dashes in underscores
$str = $this->convertDashesToUnderscores($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;
}
/**
* 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
*
* @param $phpCode Unmarked PHP code
* @return $markedCode Marked PHP code
*/
public function markupCode ($phpCode) {
// Init marked code
$markedCode = '';
// Get last error
$errorArray = error_get_last();
// Init the code with error message
if (is_array($errorArray)) {
// Get error infos
$markedCode = sprintf("",
basename($errorArray['file']),
$errorArray['line'],
$errorArray['message'],
$errorArray['type']
);
} // END - if
// Add line number to the code
foreach (explode("\n", $phpCode) as $lineNo => $code) {
// Add line numbers
$markedCode .= sprintf("%s: %s\n",
($lineNo + 1),
htmlentities($code, ENT_QUOTES)
);
} // END - foreach
// Return the code
return $markedCode;
}
/**
* Filter a given GMT timestamp (non Uni* stamp!) to make it look more
* beatiful for web-based front-ends. If null is given a message id
* null_timestamp will be resolved and returned.
*
* @param $timestamp Timestamp to prepare (filter) for display
* @return $readable A readable timestamp
*/
public function doFilterFormatTimestamp ($timestamp) {
// Default value to return
$readable = '???';
// Is the timestamp null?
if (is_null($timestamp)) {
// Get a message string
$readable = $this->getLanguageInstance()->getMessage('null_timestamp');
} else {
switch ($this->getLanguageInstance()->getLanguageCode()) {
case 'de': // German format is a bit different to default
// Split the GMT stamp up
$dateTime = explode(' ', $timestamp );
$dateArray = explode('-', $dateTime[0]);
$timeArray = explode(':', $dateTime[1]);
// Construct the timestamp
$readable = sprintf($this->getConfigInstance()->getConfigEntry('german_date_time'),
$dateArray[0],
$dateArray[1],
$dateArray[2],
$timeArray[0],
$timeArray[1],
$timeArray[2]
);
break;
default: // Default is pass-through
$readable = $timestamp;
break;
} // END - switch
}
// Return the stamp
return $readable;
}
/**
* Filter a given number into a localized number
*
* @param $value The raw value from e.g. database
* @return $localized Localized value
*/
public function doFilterFormatNumber ($value) {
// Generate it from config and localize dependencies
switch ($this->getLanguageInstance()->getLanguageCode()) {
case 'de': // German format is a bit different to default
$localized = number_format($value, $this->getConfigInstance()->getConfigEntry('decimals'), ',', '.');
break;
default: // US, etc.
$localized = number_format($value, $this->getConfigInstance()->getConfigEntry('decimals'), '.', ',');
break;
} // END - switch
// Return it
return $localized;
}
/**
* "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();
//* DEBUG: */ $this->debugOutput($fieldName.':'.print_r($fieldArray, true).'
');
// Does the field exist?
if (isset($fieldArray[$fieldName])) {
// Get it
$fieldValue = $fieldArray[$fieldName];
} // END - if
// Return it
return $fieldValue;
}
/**
* Protected setter for user instance
*
* @param $userInstance An instance of a user class
* @return void
*/
protected final function setUserInstance (ManageableAccount $userInstance) {
$this->userInstance = $userInstance;
}
/**
* Getter for user instance
*
* @return $userInstance An instance of a user class
*/
public final function getUserInstance () {
return $this->userInstance;
}
/**
* Setter for controller instance (this surely breaks a bit the MVC patterm)
*
* @param $controllerInstance An instance of the controller
* @return void
*/
public final function setControllerInstance (Controller $controllerInstance) {
$this->controllerInstance = $controllerInstance;
}
/**
* Getter for controller instance (this surely breaks a bit the MVC patterm)
*
* @return $controllerInstance An instance of the controller
*/
public final function getControllerInstance () {
return $this->controllerInstance;
}
/**
* 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);
}
}
/**
* 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 Cryptable instance
*
* @param $cryptoInstance An instance of a Cryptable class
* @return void
*/
protected final function setCryptoInstance (Cryptable $cryptoInstance) {
$this->cryptoInstance = $cryptoInstance;
}
/**
* Getter for Cryptable instance
*
* @return $cryptoInstance An instance of a Cryptable class
*/
public final function getCryptoInstance () {
return $this->cryptoInstance;
}
/**
* 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;
}
/**
* "Getter" as a time() replacement but with milliseconds. You should use this
* method instead of the encapsulated getimeofday() function.
*
* @return $milliTime Timestamp with milliseconds
*/
public function getMilliTime () {
// Get the time of day as float
$milliTime = gettimeofday(true);
// Return it
return $milliTime;
}
/**
* Idles (sleeps) for given milliseconds
*
* @return $hasSlept Wether it goes fine
*/
public function idle ($milliSeconds) {
// Sleep is fine by default
$hasSlept = true;
// Idle so long with found function
if (function_exists('time_sleep_until')) {
// Get current time and add idle time
$sleepUntil = $this->getMilliTime() + abs($milliSeconds) / 1000;
// New PHP 5.1.0 function found
$hasSlept = time_sleep_until($sleepUntil);
} else {
// My Sun Station doesn't have that function even with latest PHP
// package. :(
usleep($milliSeconds * 1000);
}
// Return result
return $hasSlept;
}
/**
* Setter for the list instance
*
* @param $listInstance A list of Listable
* @return void
*/
protected final function setListInstance (Listable $listInstance) {
$this->listInstance = $listInstance;
}
/**
* Getter for the list instance
*
* @return $listInstance A list of Listable
*/
protected final function getListInstance () {
return $this->listInstance;
}
/**
* Setter for the menu instance
*
* @param $menuInstance A RenderableMenu instance
* @return void
*/
protected final function setMenuInstance (RenderableMenu $menuInstance) {
$this->menuInstance = $menuInstance;
}
/**
* Getter for the menu instance
*
* @return $menuInstance A RenderableMenu instance
*/
protected final function getMenuInstance () {
return $this->menuInstance;
}
/**
* Setter for image instance
*
* @param $imageInstance An instance of an image
* @return void
*/
public final function setImageInstance (BaseImage $imageInstance) {
$this->imageInstance = $imageInstance;
}
/**
* Getter for image instance
*
* @return $imageInstance An instance of an image
*/
public final function getImageInstance () {
return $this->imageInstance;
}
/**
* Setter for stacker instance
*
* @param $stackerInstance An instance of an stacker
* @return void
*/
public final function setStackerInstance (Stackable $stackerInstance) {
$this->stackerInstance = $stackerInstance;
}
/**
* Getter for stacker instance
*
* @return $stackerInstance An instance of an stacker
*/
public final function getStackerInstance () {
return $this->stackerInstance;
}
/**
* Setter for compressor instance
*
* @param $compressorInstance An instance of an compressor
* @return void
*/
public final function setCompressorInstance (Compressor $compressorInstance) {
$this->compressorInstance = $compressorInstance;
}
/**
* Getter for compressor instance
*
* @return $compressorInstance An instance of an compressor
*/
public final function getCompressorInstance () {
return $this->compressorInstance;
}
/**
* Setter for Parseable instance
*
* @param $parserInstance An instance of an Parseable
* @return void
*/
public final function setParserInstance (Parseable $parserInstance) {
$this->parserInstance = $parserInstance;
}
/**
* Getter for Parseable instance
*
* @return $parserInstance An instance of an Parseable
*/
public final function getParserInstance () {
return $this->parserInstance;
}
/**
* Setter for ProtocolHandler instance
*
* @param $protocolInstance An instance of an ProtocolHandler
* @return void
*/
public final function setProtocolInstance (ProtocolHandler $protocolInstance) {
$this->protocolInstance = $protocolInstance;
}
/**
* Getter for ProtocolHandler instance
*
* @return $protocolInstance An instance of an ProtocolHandler
*/
public final function getProtocolInstance () {
return $this->protocolInstance;
}
/**
* Setter for BaseDatabaseWrapper instance
*
* @param $wrapperInstance An instance of an BaseDatabaseWrapper
* @return void
*/
public final function setWrapperInstance (BaseDatabaseWrapper $wrapperInstance) {
$this->wrapperInstance = $wrapperInstance;
}
/**
* Getter for BaseDatabaseWrapper instance
*
* @return $wrapperInstance An instance of an BaseDatabaseWrapper
*/
public final function getWrapperInstance () {
return $this->wrapperInstance;
}
/**
* Setter for socket resource
*
* @param $socketResource A valid socket resource
* @return void
*/
public final function setSocketResource ($socketResource) {
$this->socketResource = $socketResource;
}
/**
* Getter for socket resource
*
* @return $socketResource A valid socket resource
*/
public function getSocketResource () {
return $this->socketResource;
}
/**
* Setter for helper instance
*
* @param $helperInstance An instance of a helper class
* @return void
*/
protected final function setHelperInstance (Helper $helperInstance) {
$this->helperInstance = $helperInstance;
}
/**
* Getter for helper instance
*
* @return $helperInstance An instance of a helper class
*/
public final function getHelperInstance () {
return $this->helperInstance;
}
/**
* Setter for a Sourceable instance
*
* @param $sourceInstance The Sourceable instance
* @return void
*/
protected final function setSourceInstance (Sourceable $sourceInstance) {
$this->sourceInstance = $sourceInstance;
}
/**
* Getter for a Sourceable instance
*
* @param $sourceInstance The Sourceable instance
*/
protected final function getSourceInstance () {
return $this->sourceInstance;
}
/**
* Setter for raw package Data
*
* @param $packageData Raw package Data
* @return void
*/
public final function setPackageData (array $packageData) {
$this->packageData = $packageData;
}
/**
* Getter for raw package Data
*
* @return $packageData Raw package Data
*/
public function getPackageData () {
return $this->packageData;
}
}
// [EOF]
?>