X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=framework%2Fmain%2Fclasses%2Fclass_BaseFrameworkSystem.php;h=4b481128041aae298adee3ecf301c608ce063e49;hb=28ff0710d8eb3a2d0c1547d6ebeaae05eb50c7f6;hp=3ca59ca36e1be6a654f260e4993bb120dfc5e530;hpb=78a010fef84895720e796842208f01dfb619c332;p=core.git diff --git a/framework/main/classes/class_BaseFrameworkSystem.php b/framework/main/classes/class_BaseFrameworkSystem.php index 3ca59ca3..4b481128 100644 --- a/framework/main/classes/class_BaseFrameworkSystem.php +++ b/framework/main/classes/class_BaseFrameworkSystem.php @@ -1,38 +1,39 @@ * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2020 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -57,51 +58,21 @@ use \stdClass; * 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 { +abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** * Length of output from hash() */ private static $hashLength = NULL; /** - * The real class name - */ - private $realClass = 'BaseFrameworkSystem'; - - /** - * Instance of a Requestable class - */ - private $requestInstance = NULL; - - /** - * Instance of a Responseable 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 + * Self-referencing instance */ - private $fileIoInstance = NULL; + private static $instance = NULL; /** - * Resolver instance - */ - private $resolverInstance = NULL; - - /** - * Template engine instance + * The real class name */ - private $templateInstance = NULL; + private $realClass = __CLASS__; /** * Database result instance @@ -113,16 +84,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $userInstance = NULL; - /** - * A controller instance - */ - private $controllerInstance = NULL; - - /** - * Instance of a RNG - */ - private $rngInstance = NULL; - /** * Instance of a crypto helper */ @@ -133,61 +94,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ 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 $stackInstance = NULL; - - /** - * A Compressor instance - */ - private $compressorInstance = NULL; - - /** - * A Parseable instance - */ - private $parserInstance = NULL; - - /** - * A HandleableProtocol 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 class - */ - private $sourceInstance = NULL; - - /** - * An instance of a UrlSource class - */ - private $urlSourceInstance = NULL; - /** * An instance of a InputStream class */ @@ -199,142 +105,29 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { private $outputStreamInstance = NULL; /** - * Networkable handler instance + * Handler instance */ private $handlerInstance = NULL; - /** - * Visitor handler instance - */ - private $visitorInstance = NULL; - - /** - * DHT instance - */ - private $dhtInstance = NULL; - /** * An instance of a database wrapper class */ private $wrapperInstance = NULL; - /** - * An instance of a file I/O pointer class (not handler) - */ - private $pointerInstance = NULL; - - /** - * An instance of an Indexable class - */ - private $indexInstance = NULL; - - /** - * An instance of a Block class - */ - private $blockInstance = NULL; - - /** - * A Minable instance - */ - private $minableInstance = NULL; - - /** - * A FrameworkDirectory instance - */ - private $directoryInstance = NULL; - - /** - * Listener instance - */ - private $listenerInstance = NULL; - - /** - * An instance of a communicator - */ - private $communicatorInstance = NULL; - - /** - * The concrete output instance - */ - private $outputInstance = NULL; - /** * State instance */ private $stateInstance = NULL; /** - * Thousands separator - */ - private $thousands = '.'; // German - - /** - * Decimal separator - */ - private $decimals = ','; // German - - /** - * Socket resource - */ - private $socketResource = FALSE; - - /** - * Regular expression to use for validation - */ - private $regularExpression = ''; - - /** - * Package data + * Call-back instance */ - private $packageData = array(); + private $callbackInstance = NULL; /** * Generic array */ - private $genericArray = array(); - - /** - * Command name - */ - private $commandName = ''; - - /** - * Controller name - */ - private $controllerName = ''; - - /** - * Name of used protocol - */ - private $protocolName = 'invalid'; - - /** - * Array with bitmasks and such for pack/unpack methods to support both - * 32-bit and 64-bit systems - */ - private $packingData = array( - 32 => array( - 'step' => 3, - 'left' => 0xffff0000, - 'right' => 0x0000ffff, - 'factor' => 16, - 'format' => 'II', - ), - 64 => array( - 'step' => 7, - 'left' => 0xffffffff00000000, - 'right' => 0x00000000ffffffff, - 'factor' => 32, - 'format' => 'NN' - ) - ); - - /** - * Simple 64-bit check, thanks to "Salman A" from stackoverflow.com: - * - * The integer size is 4 bytes on 32-bit and 8 bytes on a 64-bit system. - */ - private $archArrayElement = FALSE; + private $genericArray = []; /*********************** * Exception codes.... * @@ -402,50 +195,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { const EXCEPTION_PATH_CANNOT_BE_WRITTEN = 0x03b; const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03c; const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03d; - - /** - * Hexadecimal->Decimal translation array - */ - private static $hexdec = array( - '0' => 0, - '1' => 1, - '2' => 2, - '3' => 3, - '4' => 4, - '5' => 5, - '6' => 6, - '7' => 7, - '8' => 8, - '9' => 9, - 'a' => 10, - 'b' => 11, - 'c' => 12, - 'd' => 13, - 'e' => 14, - 'f' => 15 - ); - - /** - * Decimal->hexadecimal translation array - */ - private static $dechex = array( - 0 => '0', - 1 => '1', - 2 => '2', - 3 => '3', - 4 => '4', - 5 => '5', - 6 => '6', - 7 => '7', - 8 => '8', - 9 => '9', - 10 => 'a', - 11 => 'b', - 12 => 'c', - 13 => 'd', - 14 => 'e', - 15 => 'f' - ); + const EXCEPTION_INVALID_SOCKET = 0x03e; + const EXCEPTION_SELF_INSTANCE = 0x03f; /** * Startup time in miliseconds @@ -458,24 +209,15 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $className Name of the class * @return void */ - protected function __construct ($className) { + protected function __construct (string $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::getSelfInstance()); - } // END - if - - // Is the startup time set? (0 cannot be TRUE anymore) + // Is the startup time set? (0 cannot be true anymore) if (self::$startupTime == 0) { // Then set it - self::$startupTime = microtime(TRUE); - } // END - if - - // Set array element - $this->archArrayElement = (PHP_INT_SIZE === 8 ? 64 : 32); + self::$startupTime = microtime(true); + } } /** @@ -493,8 +235,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $this->setRealClass('DestructedObject'); } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { // Already destructed object - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:] The object %s is already destroyed.', - __CLASS__, + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('The object %s is already destroyed.', $this->__toString() )); } else { @@ -511,23 +252,39 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @args $args Arguments passed to the method * @return void */ - public final function __call ($methodName, $args) { - return self::__callStatic($methodName, $args); + public final function __call (string $methodName, array $args = NULL) { + // Set self-instance + self::$instance = $this; + + // Call static method + self::__callStatic($methodName, $args); + + // Clear self-instance + self::$instance = NULL; } /** * The __callStatic() method where all non-implemented static methods end up * * @param $methodName Name of the missing method - * @args $args Arguments passed to the method + * @param $args Arguments passed to the method * @return void + * @throws InvalidArgumentException If self::$instance is not a framework's own object */ - public static final function __callStatic ($methodName, $args) { - // Trace message + public static final function __callStatic (string $methodName, array $args = NULL) { + // Init argument string and class name //* PRINT-DEBUG: */ printf('[%s:%d]: methodName=%s,args[]=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $methodName, gettype($args)); - - // Init argument string $argsString = ''; + $className = 'unknown'; + + // Is self-instance set? + if (self::$instance instanceof FrameworkInterface) { + // Framework's own instance + $className = self::$instance->__toString(); + } elseif (!is_null(self::$instance)) { + // Invalid argument! + throw new InvalidArgumentException(sprintf('self::instance[%s] is not expected.', gettype(self::$instance)), self::EXCEPTION_SELF_INSTANCE); + } // Is it NULL, empty or an array? if (is_null($args)) { @@ -560,33 +317,32 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Is an other object, maybe no __toString() available $argsString .= $reflection->getName(); - } elseif ($arg === TRUE) { - // ... is boolean 'TRUE' - $argsString .= 'TRUE'; - } elseif ($arg === FALSE) { - // ... is boolean 'FALSE' - $argsString .= 'FALSE'; + } elseif ($arg === true) { + // ... is boolean 'true' + $argsString .= 'true'; + } elseif ($arg === false) { + // ... is boolean 'false' + $argsString .= 'false'; } // Comma for next one $argsString .= ', '; - } // END - foreach + } - // Remove last comma + // Last comma found? if (substr($argsString, -2, 1) == ',') { + // Remove last comma $argsString = substr($argsString, 0, -2); - } // END - if + } // Close braces $argsString .= ')'; - } else { - // Invalid arguments! - $argsString = '!INVALID:' . gettype($args) . '!'; } // Output stub message // @TODO __CLASS__ does always return BaseFrameworkSystem but not the extending (=child) class - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[unknown::%s:] Stub! Args: %s', + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s::%s]: Stub! Args: %s', + $className, $methodName, $argsString )); @@ -611,11 +367,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $value Value to store * @return void */ - public final function __set ($name, $value) { + public final function __set (string $name, $value) { $this->debugBackTrace(sprintf('Tried to set a missing field. name=%s, value[%s]=%s', $name, gettype($value), - print_r($value, TRUE) + print_r($value, true) )); } @@ -625,7 +381,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $name Name of the field/attribute * @return void */ - public final function __get ($name) { + public final function __get (string $name) { $this->debugBackTrace(sprintf('Tried to get a missing field. name=%s', $name )); @@ -637,7 +393,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $name Name of the field/attribute * @return void */ - public final function __unset ($name) { + public final function __unset (string $name) { $this->debugBackTrace(sprintf('Tried to unset a missing field. name=%s', $name )); @@ -679,9 +435,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $realClass Class name (string) * @return void */ - public final function setRealClass ($realClass) { + public final function setRealClass (string $realClass) { // Set real class - $this->realClass = (string) $realClass; + $this->realClass = $realClass; } /** @@ -704,103 +460,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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 An instance of a LocalUpdateCriteria clase - * @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 * @@ -808,7 +467,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setDebugInstance (DebugMiddleware $debugInstance) { - Registry::getRegistry()->addInstance('debug', $debugInstance); + GenericRegistry::getRegistry()->addInstance('debug', $debugInstance); } /** @@ -818,7 +477,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public final function getDebugInstance () { // Get debug instance - $debugInstance = Registry::getRegistry()->getInstance('debug'); + $debugInstance = GenericRegistry::getRegistry()->getInstance('debug'); // Return it return $debugInstance; @@ -831,7 +490,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return void */ public final function setWebOutputInstance (OutputStreamer $webInstance) { - Registry::getRegistry()->addInstance('web_output', $webInstance); + GenericRegistry::getRegistry()->addInstance('web_output', $webInstance); } /** @@ -840,854 +499,179 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $webOutputInstance - Instance to class WebOutput */ public final function getWebOutputInstance () { - $webOutputInstance = Registry::getRegistry()->getInstance('web_output'); + $webOutputInstance = GenericRegistry::getRegistry()->getInstance('web_output'); return $webOutputInstance; } /** - * Setter for database instance - * - * @param $databaseInstance The instance for the database connection (forced DatabaseConnection) - * @return void - */ - public final function setDatabaseInstance (DatabaseConnection $databaseInstance) { - Registry::getRegistry()->addInstance('db_instance', $databaseInstance); - } - - /** - * Getter for database layer - * - * @return $databaseInstance The database layer instance - */ - public final function getDatabaseInstance () { - // Get instance - $databaseInstance = Registry::getRegistry()->getInstance('db_instance'); - - // Return instance - return $databaseInstance; - } - - /** - * 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; - } - - /** - * 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 + * Protected setter for user instance * - * @param $langInstance An instance to the language sub-system + * @param $userInstance An instance of a user class * @return void - * @see LanguageSystem */ - public final function setLanguageInstance (ManageableLanguage $langInstance) { - Registry::getRegistry()->addInstance('language', $langInstance); - } - - /** - * 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 (IoHandler $fileIoInstance) { - $this->fileIoInstance = $fileIoInstance; - } - - /** - * Protected setter for user instance - * - * @param $userInstance An instance of a user class - * @return void - */ - protected final function setUserInstance (ManageableAccount $userInstance) { - $this->userInstance = $userInstance; + 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; - } - - /** - * 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 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 $stackInstance An instance of an stacker - * @return void - */ - public final function setStackInstance (Stackable $stackInstance) { - $this->stackInstance = $stackInstance; - } - - /** - * Getter for stacker instance - * - * @return $stackInstance An instance of an stacker - */ - public final function getStackInstance () { - return $this->stackInstance; - } - - /** - * 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 HandleableProtocol instance - * - * @param $protocolInstance An instance of an HandleableProtocol - * @return void - */ - public final function setProtocolInstance (HandleableProtocol $protocolInstance) { - $this->protocolInstance = $protocolInstance; - } - - /** - * Getter for HandleableProtocol instance - * - * @return $protocolInstance An instance of an HandleableProtocol - */ - public final function getProtocolInstance () { - return $this->protocolInstance; - } - - /** - * Setter for DatabaseWrapper instance - * - * @param $wrapperInstance An instance of an DatabaseWrapper - * @return void - */ - public final function setWrapperInstance (DatabaseWrapper $wrapperInstance) { - $this->wrapperInstance = $wrapperInstance; - } - - /** - * Getter for DatabaseWrapper instance - * - * @return $wrapperInstance An instance of an DatabaseWrapper - */ - public final function getWrapperInstance () { - return $this->wrapperInstance; - } - - /** - * Setter for socket resource - * - * @param $socketResource A valid socket resource - * @return void - */ - public final function setSocketResource ($socketResource) { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($this->__toString() . '::' . __FUNCTION__ . ': socketResource=' . $socketResource . ',previous[' . gettype($this->socketResource) . ']=' . $this->socketResource); - $this->socketResource = $socketResource; - } - - /** - * Getter for socket resource - * - * @return $socketResource A valid socket resource - */ - public final function getSocketResource () { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($this->__toString() . '::' . __FUNCTION__ . ': socketResource[' . gettype($this->socketResource) . ']=' . $this->socketResource); - return $this->socketResource; - } - - /** - * Setter for regular expression - * - * @param $regularExpression A valid regular expression - * @return void - */ - public final function setRegularExpression ($regularExpression) { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($this->__toString() . '::' . __FUNCTION__ . ': regularExpression=' . $regularExpression . ',previous[' . gettype($this->regularExpression) . ']=' . $this->regularExpression); - $this->regularExpression = $regularExpression; - } - - /** - * Getter for regular expression - * - * @return $regularExpression A valid regular expression - */ - public final function getRegularExpression () { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($this->__toString() . '::' . __FUNCTION__ . ': regularExpression[' . gettype($this->regularExpression) . ']=' . $this->regularExpression); - return $this->regularExpression; - } - - /** - * 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 Source instance - * - * @param $sourceInstance An instance of a Source class - * @return void - */ - protected final function setSourceInstance (Source $sourceInstance) { - $this->sourceInstance = $sourceInstance; - } - - /** - * Getter for a Source instance - * - * @return $sourceInstance An instance of a Source class - */ - protected final function getSourceInstance () { - return $this->sourceInstance; - } - - /** - * Setter for a UrlSource instance - * - * @param $sourceInstance An instance of a UrlSource class - * @return void - */ - protected final function setUrlSourceInstance (UrlSource $urlSourceInstance) { - $this->urlSourceInstance = $urlSourceInstance; - } - - /** - * Getter for a UrlSource instance - * - * @return $urlSourceInstance An instance of a UrlSource class - */ - protected final function getUrlSourceInstance () { - return $this->urlSourceInstance; - } - - /** - * Getter for a InputStream instance - * - * @param $inputStreamInstance The InputStream instance - */ - protected final function getInputStreamInstance () { - return $this->inputStreamInstance; - } - - /** - * Setter for a InputStream instance - * - * @param $inputStreamInstance The InputStream instance - * @return void - */ - protected final function setInputStreamInstance (InputStream $inputStreamInstance) { - $this->inputStreamInstance = $inputStreamInstance; - } - - /** - * Getter for a OutputStream instance - * - * @param $outputStreamInstance The OutputStream instance - */ - protected final function getOutputStreamInstance () { - return $this->outputStreamInstance; - } - - /** - * Setter for a OutputStream instance - * - * @param $outputStreamInstance The OutputStream instance - * @return void - */ - protected final function setOutputStreamInstance (OutputStream $outputStreamInstance) { - $this->outputStreamInstance = $outputStreamInstance; - } - - /** - * Setter for handler instance - * - * @param $handlerInstance An instance of a Handleable class - * @return void - */ - protected final function setHandlerInstance (Handleable $handlerInstance) { - $this->handlerInstance = $handlerInstance; - } - - /** - * Getter for handler instance - * - * @return $handlerInstance A Networkable instance - */ - protected final function getHandlerInstance () { - return $this->handlerInstance; - } - - /** - * Setter for visitor instance - * - * @param $visitorInstance A Visitor instance - * @return void - */ - protected final function setVisitorInstance (Visitor $visitorInstance) { - $this->visitorInstance = $visitorInstance; - } - - /** - * Getter for visitor instance - * - * @return $visitorInstance A Visitor instance - */ - protected final function getVisitorInstance () { - return $this->visitorInstance; - } - - /** - * Setter for DHT instance - * - * @param $dhtInstance A Distributable instance - * @return void - */ - protected final function setDhtInstance (Distributable $dhtInstance) { - $this->dhtInstance = $dhtInstance; - } - - /** - * Getter for DHT instance - * - * @return $dhtInstance A Distributable instance - */ - protected final function getDhtInstance () { - return $this->dhtInstance; - } - - /** - * 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; - } - - - /** - * 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; - } - - /** - * Setter for FilePointer instance - * - * @param $pointerInstance An instance of an FilePointer class - * @return void - */ - protected final function setPointerInstance (FilePointer $pointerInstance) { - $this->pointerInstance = $pointerInstance; - } - - /** - * Getter for FilePointer instance - * - * @return $pointerInstance An instance of an FilePointer class - */ - public final function getPointerInstance () { - return $this->pointerInstance; - } - - /** - * Unsets pointer instance which triggers a call of __destruct() if the - * instance is still there. This is surely not fatal on already "closed" - * file pointer instances. - * - * I don't want to mess around with above setter by giving it a default - * value NULL as setter should always explicitly only set (existing) object - * instances and NULL is NULL. - * - * @return void - */ - protected final function unsetPointerInstance () { - // Simply it to NULL - $this->pointerInstance = NULL; - } - - /** - * Setter for Indexable instance - * - * @param $indexInstance An instance of an Indexable class - * @return void - */ - protected final function setIndexInstance (Indexable $indexInstance) { - $this->indexInstance = $indexInstance; - } - - /** - * Getter for Indexable instance - * - * @return $indexInstance An instance of an Indexable class - */ - public final function getIndexInstance () { - return $this->indexInstance; - } - - /** - * Setter for Block instance - * - * @param $blockInstance An instance of an Block class - * @return void - */ - protected final function setBlockInstance (Block $blockInstance) { - $this->blockInstance = $blockInstance; - } - - /** - * Getter for Block instance - * - * @return $blockInstance An instance of an Block class - */ - public final function getBlockInstance () { - return $this->blockInstance; - } - - /** - * Setter for Minable instance - * - * @param $minableInstance A Minable instance - * @return void - */ - protected final function setMinableInstance (Minable $minableInstance) { - $this->minableInstance = $minableInstance; - } - - /** - * Getter for minable instance - * - * @return $minableInstance A Minable instance + * @return $userInstance An instance of a user class */ - protected final function getMinableInstance () { - return $this->minableInstance; + public final function getUserInstance () { + return $this->userInstance; } /** - * Setter for FrameworkDirectory instance + * Setter for Cryptable instance * - * @param $directoryInstance A FrameworkDirectory instance + * @param $cryptoInstance An instance of a Cryptable class * @return void */ - protected final function setDirectoryInstance (FrameworkDirectory $directoryInstance) { - $this->directoryInstance = $directoryInstance; + protected final function setCryptoInstance (Cryptable $cryptoInstance) { + $this->cryptoInstance = $cryptoInstance; } /** - * Getter for FrameworkDirectory instance + * Getter for Cryptable instance * - * @return $directoryInstance A FrameworkDirectory instance + * @return $cryptoInstance An instance of a Cryptable class */ - protected final function getDirectoryInstance () { - return $this->directoryInstance; + public final function getCryptoInstance () { + return $this->cryptoInstance; } /** - * Setter for listener instance + * Setter for DatabaseWrapper instance * - * @param $listenerInstance A Listenable instance + * @param $wrapperInstance An instance of an DatabaseWrapper * @return void */ - protected final function setListenerInstance (Listenable $listenerInstance) { - $this->listenerInstance = $listenerInstance; + public final function setWrapperInstance (DatabaseWrapper $wrapperInstance) { + $this->wrapperInstance = $wrapperInstance; } /** - * Getter for listener instance + * Getter for DatabaseWrapper instance * - * @return $listenerInstance A Listenable instance + * @return $wrapperInstance An instance of an DatabaseWrapper */ - protected final function getListenerInstance () { - return $this->listenerInstance; + public final function getWrapperInstance () { + return $this->wrapperInstance; } /** - * Getter for communicator instance + * Getter for a InputStream instance * - * @return $communicatorInstance An instance of a Communicator class + * @param $inputStreamInstance The InputStream instance */ - public final function getCommunicatorInstance () { - return $this->communicatorInstance; + protected final function getInputStreamInstance () { + return $this->inputStreamInstance; } /** - * Setter for communicator instance + * Setter for a InputStream instance * - * @param $communicatorInstance An instance of a Communicator class + * @param $inputStreamInstance The InputStream instance * @return void */ - protected final function setCommunicatorInstance (Communicator $communicatorInstance) { - $this->communicatorInstance = $communicatorInstance; + protected final function setInputStreamInstance (InputStream $inputStreamInstance) { + $this->inputStreamInstance = $inputStreamInstance; } /** - * Setter for state instance + * Getter for a OutputStream instance * - * @param $stateInstance A Stateable instance - * @return void + * @param $outputStreamInstance The OutputStream instance */ - public final function setStateInstance (Stateable $stateInstance) { - $this->stateInstance = $stateInstance; + protected final function getOutputStreamInstance () { + return $this->outputStreamInstance; } /** - * Getter for state instance + * Setter for a OutputStream instance * - * @return $stateInstance A Stateable instance + * @param $outputStreamInstance The OutputStream instance + * @return void */ - public final function getStateInstance () { - return $this->stateInstance; + protected final function setOutputStreamInstance (OutputStream $outputStreamInstance) { + $this->outputStreamInstance = $outputStreamInstance; } /** - * Setter for output instance + * Setter for handler instance * - * @param $outputInstance The debug output instance + * @param $handlerInstance An instance of a Handleable class * @return void */ - public final function setOutputInstance (OutputStreamer $outputInstance) { - $this->outputInstance = $outputInstance; + protected final function setHandlerInstance (Handleable $handlerInstance) { + $this->handlerInstance = $handlerInstance; } /** - * Getter for output instance + * Getter for handler instance * - * @return $outputInstance The debug output instance + * @return $handlerInstance A Handleable instance */ - public final function getOutputInstance () { - return $this->outputInstance; + protected final function getHandlerInstance () { + return $this->handlerInstance; } /** - * Setter for command name + * Setter for Iterator instance * - * @param $commandName Last validated command name + * @param $iteratorInstance An instance of an Iterator * @return void */ - protected final function setCommandName ($commandName) { - $this->commandName = $commandName; + protected final function setIteratorInstance (Iterator $iteratorInstance) { + $this->iteratorInstance = $iteratorInstance; } /** - * Getter for command name + * Getter for Iterator instance * - * @return $commandName Last validated command name + * @return $iteratorInstance An instance of an Iterator */ - protected final function getCommandName () { - return $this->commandName; + public final function getIteratorInstance () { + return $this->iteratorInstance; } /** - * Setter for controller name + * Setter for state instance * - * @param $controllerName Last validated controller name + * @param $stateInstance A Stateable instance * @return void */ - protected final function setControllerName ($controllerName) { - $this->controllerName = $controllerName; + public final function setStateInstance (Stateable $stateInstance) { + $this->stateInstance = $stateInstance; } /** - * Getter for controller name + * Getter for state instance * - * @return $controllerName Last validated controller name + * @return $stateInstance A Stateable instance */ - protected final function getControllerName () { - return $this->controllerName; + public final function getStateInstance () { + return $this->stateInstance; } /** - * Getter for protocol name + * Setter for call-back instance * - * @return $protocolName Name of used protocol + * @param $callbackInstance An instance of a FrameworkInterface class + * @return void */ - public final function getProtocolName () { - return $this->protocolName; + public final function setCallbackInstance (FrameworkInterface $callbackInstance) { + $this->callbackInstance = $callbackInstance; } /** - * Setter for protocol name + * Getter for call-back instance * - * @param $protocolName Name of used protocol - * @return void + * @return $callbackInstance An instance of a FrameworkInterface class */ - protected final function setProtocolName ($protocolName) { - $this->protocolName = $protocolName; + protected final function getCallbackInstance () { + return $this->callbackInstance; } /** @@ -1720,35 +704,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return crc32($this->__toString()); } - /** - * Formats computer generated price values into human-understandable formats - * with thousand and decimal separators. - * - * @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 MissingDecimalsThousandsSeparatorException If decimals or - * thousands separator - * 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 MissingDecimalsThousandsSeparatorException($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; - } - /** * Appends a trailing slash to a string * @@ -1759,42 +714,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Is there a trailing slash? if (substr($str, -1, 1) != '/') { $str .= '/'; - } // END - if + } // Return string with trailing slash return $str; } - /** - * Prepare the template engine (HtmlTemplateEngine 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('html_template_class'); - - // Return the prepared instance - return $templateInstance; - } - /** * Debugs this instance by putting out it's full content * @@ -1811,20 +736,31 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Is a message set? if (!empty($message)) { // Construct message - $content = sprintf('
Message: %s
' . PHP_EOL, $message); - } // END - if + $content = sprintf('
+ Message: %s +
' . PHP_EOL, $message); + } // Generate the output $content .= sprintf('
%s
', trim( htmlentities( - print_r($this, TRUE) + print_r($this, true) ) ) ); // Output it - ApplicationEntryPoint::app_exit(sprintf('
%s debug output:
%s
Loaded includes:
%s
', + ApplicationEntryPoint::exitApplication(sprintf('
+ %s debug output: +
+
+ %s +
+Loaded includes: +
+ %s +
', $this->__toString(), $content, ClassLoader::getSelfInstance()->getPrintableIncludeList() @@ -1857,25 +793,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @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 - ); + // Init variable + $stubMessage = 'Partial stub!'; - // Is the extra message given? + // Is an extra message given? if (!empty($message)) { // Then add it as well $stubMessage .= ' Message: ' . $message; - } // END - if + } // Debug instance is there? if (!is_null($this->getDebugInstance())) { @@ -1892,24 +817,24 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * Outputs a debug backtrace and stops further script execution * * @param $message An optional message to output - * @param $doExit Whether exit the program (TRUE is default) + * @param $doExit Whether exit the program (true is default) * @return void */ - public function debugBackTrace ($message = '', $doExit = TRUE) { + public function debugBackTrace ($message = '', $doExit = true) { // Sorry, there is no other way getting this nice backtrace if (!empty($message)) { // Output message printf('Message: %s
' . PHP_EOL, $message); - } // END - if + } print('
');
 		debug_print_backtrace();
 		print('
'); // Exit program? - if ($doExit === TRUE) { + if ($doExit === true) { exit(); - } // END - if + } } /** @@ -1922,14 +847,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public final static function createDebugInstance ($className, $lineNumber = NULL) { // Is the instance set? - if (!Registry::getRegistry()->instanceExists('debug')) { + if (!GenericRegistry::getRegistry()->instanceExists('debug')) { // Init debug instance $debugInstance = NULL; // Try it try { // Get a debugger instance - $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkConfiguration::getSelfInstance()->getConfigEntry('debug_' . self::getResponseTypeFromSystem() . '_class'), $className); + $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className); } catch (NullPointerException $e) { // Didn't work, no instance there exit(sprintf('Cannot create debugInstance! Exception=%s,message=%s,className=%s,lineNumber=%d' . PHP_EOL, $e->__toString(), $e->getMessage(), $className, $lineNumber)); @@ -1938,11 +863,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Empty string should be ignored and used for testing the middleware DebugMiddleware::getSelfInstance()->output(''); - // Set it in its own class. This will set it in the registry - $debugInstance->setDebugInstance($debugInstance); + // Set it in registry + GenericRegistry::getRegistry()->addInstance('debug', $debugInstance); } else { // Get instance from registry - $debugInstance = Registry::getRegistry()->getDebugInstance(); + $debugInstance = GenericRegistry::getRegistry()->getDebugInstance(); } // Return it @@ -1967,13 +892,35 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @param $message Message we shall send out... * @param $doPrint Whether print or die here (default: print) - * @paran $stripTags Whether to strip tags (default: FALSE) + * @paran $stripTags Whether to strip tags (default: false) * @return void */ - public function debugOutput ($message, $doPrint = TRUE, $stripTags = FALSE) { + public function debugOutput ($message, $doPrint = true, $stripTags = false) { // Set debug instance to NULL $debugInstance = NULL; + // Get backtrace + $backtrace = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT); + + // Is function partialStub/__callStatic ? + if (in_array($backtrace[1]['function'], array('partialStub', '__call', '__callStatic'))) { + // Prepend class::function:line from 3rd element + $message = sprintf('[%s::%s:%d]: %s', + $backtrace[2]['class'], + $backtrace[2]['function'], + (isset($backtrace[2]['line']) ? $backtrace[2]['line'] : '0'), + $message + ); + } else { + // Prepend class::function:line from 2nd element + $message = sprintf('[%s::%s:%d]: %s', + $backtrace[1]['class'], + $backtrace[1]['function'], + (isset($backtrace[1]['line']) ? $backtrace[1]['line'] : '0'), + $message + ); + } + // Try it: try { // Get debug instance @@ -1987,19 +934,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Use debug output handler $debugInstance->output($message, $stripTags); - if ($doPrint === FALSE) { + if ($doPrint === false) { // Die here if not printed exit(); - } // END - if + } } else { // Are debug times enabled? - if ($this->getConfigInstance()->getConfigEntry('debug_' . self::getResponseTypeFromSystem() . '_output_timings') == 'Y') { + if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings') == 'Y') { // Prepent it $message = $this->getPrintableExecutionTime() . $message; - } // END - if + } // Put directly out - if ($doPrint === TRUE) { + if ($doPrint === true) { // Print message $this->outputLine($message); } else { @@ -2009,43 +956,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } } - /** - * 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 static final function convertToClassName ($str) { - // Init class name - $className = ''; - - // Convert all dashes in underscores - $str = self::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 static 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 * @@ -2068,7 +978,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $errorArray['message'], $errorArray['type'] ); - } // END - if + } // Add line number to the code foreach (explode(chr(10), $phpCode) as $lineNo => $code) { @@ -2077,79 +987,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { ($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 * @@ -2162,16 +1005,16 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if (!$this->getResultInstance() instanceof SearchableResult) { // 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) { + if ($this->getResultInstance()->valid() === false) { // @TODO Move the constant to e.g. BaseDatabaseResult when there is a non-cached database result available throw new InvalidDatabaseResultException(array($this, $this->getResultInstance()), CachedDatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT); - } // END - if + } // Get next entry $this->getResultInstance()->next(); @@ -2190,7 +1033,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $fieldValue Field value from the user * @throws NullPointerException If the result instance is null */ - public final function getField ($fieldName) { + public final function getField (string $fieldName) { // Default field value $fieldValue = NULL; @@ -2201,14 +1044,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($fieldName.':
'.print_r($fieldArray, TRUE).'
'); + //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($fieldName.':
'.print_r($fieldArray, true).'
'); // Convert dashes to underscore - $fieldName2 = self::convertDashesToUnderscores($fieldName); + $fieldName2 = StringUtils::convertDashesToUnderscores($fieldName); // Does the field exist? if ($this->isFieldSet($fieldName)) { @@ -2216,7 +1059,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $fieldValue = $fieldArray[$fieldName2]; } elseif (defined('DEVELOPER')) { // Missing field entry, may require debugging - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']:fieldArray
=' . print_r($fieldArray, TRUE) . '
,fieldName=' . $fieldName . ' not found!'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']:fieldArray
=' . print_r($fieldArray, true) . '
,fieldName=' . $fieldName . ' not found!'); } else { // Missing field entry, may require debugging self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']:fieldName=' . $fieldName . ' not found!'); @@ -2233,7 +1076,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $isSet Whether the given field name is set * @throws NullPointerException If the result instance is null */ - public function isFieldSet ($fieldName) { + public function isFieldSet (string $fieldName) { // Get result instance $resultInstance = $this->getResultInstance(); @@ -2241,14 +1084,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { 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(); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=
'.print_r($fieldArray, TRUE).'
'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=
'.print_r($fieldArray, true).'
'); // Convert dashes to underscore - $fieldName = self::convertDashesToUnderscores($fieldName); + $fieldName = StringUtils::convertDashesToUnderscores($fieldName); // Determine it $isSet = isset($fieldArray[$fieldName]); @@ -2276,7 +1119,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Yes, then send the whole result to the database layer $wrapperInstance->doUpdateByResult($this->getResultInstance()); - } // END - if + } } /** @@ -2326,7 +1169,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public function getMilliTime () { // Get the time of day as float - $milliTime = gettimeofday(TRUE); + $milliTime = gettimeofday(true); // Return it return $milliTime; @@ -2339,7 +1182,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ public function idle ($milliSeconds) { // Sleep is fine by default - $hasSlept = TRUE; + $hasSlept = true; // Idle so long with found function if (function_exists('time_sleep_until')) { @@ -2359,143 +1202,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Return result return $hasSlept; } - /** - * Converts a hexadecimal string, even with negative sign as first string to - * a decimal number using BC functions. - * - * This work is based on comment #86673 on php.net documentation page at: - * - * - * @param $hex Hexadecimal string - * @return $dec Decimal number - */ - protected function hex2dec ($hex) { - // Convert to all lower-case - $hex = strtolower($hex); - - // Detect sign (negative/positive numbers) - $sign = ''; - if (substr($hex, 0, 1) == '-') { - $sign = '-'; - $hex = substr($hex, 1); - } // END - if - - // Decode the hexadecimal string into a decimal number - $dec = 0; - for ($i = strlen($hex) - 1, $e = 1; $i >= 0; $i--, $e = bcmul($e, 16)) { - $factor = self::$hexdec[substr($hex, $i, 1)]; - $dec = bcadd($dec, bcmul($factor, $e)); - } // END - for - - // Return the decimal number - return $sign . $dec; - } - - /** - * Converts even very large decimal numbers, also signed, to a hexadecimal - * string. - * - * This work is based on comment #97756 on php.net documentation page at: - * - * - * @param $dec Decimal number, even with negative sign - * @param $maxLength Optional maximum length of the string - * @return $hex Hexadecimal string - */ - protected function dec2hex ($dec, $maxLength = 0) { - // maxLength can be zero or devideable by 2 - assert(($maxLength == 0) || (($maxLength % 2) == 0)); - - // Detect sign (negative/positive numbers) - $sign = ''; - if ($dec < 0) { - $sign = '-'; - $dec = abs($dec); - } // END - if - - // Encode the decimal number into a hexadecimal string - $hex = ''; - do { - $hex = self::$dechex[($dec % (2 ^ 4))] . $hex; - $dec /= (2 ^ 4); - } while ($dec >= 1); - - /* - * Leading zeros are required for hex-decimal "numbers". In some - * situations more leading zeros are wanted, so check for both - * conditions. - */ - if ($maxLength > 0) { - // Prepend more zeros - $hex = str_pad($hex, $maxLength, '0', STR_PAD_LEFT); - } elseif ((strlen($hex) % 2) != 0) { - // Only make string's length dividable by 2 - $hex = '0' . $hex; - } - - // Return the hexadecimal string - return $sign . $hex; - } - - /** - * Converts a ASCII string (0 to 255) into a decimal number. - * - * @param $asc The ASCII string to be converted - * @return $dec Decimal number - */ - protected function asc2dec ($asc) { - // Convert it into a hexadecimal number - $hex = bin2hex($asc); - - // And back into a decimal number - $dec = $this->hex2dec($hex); - - // Return it - return $dec; - } - - /** - * Converts a decimal number into an ASCII string. - * - * @param $dec Decimal number - * @return $asc An ASCII string - */ - protected function dec2asc ($dec) { - // First convert the number into a hexadecimal string - $hex = $this->dec2hex($dec); - - // Then convert it into the ASCII string - $asc = $this->hex2asc($hex); - - // Return it - return $asc; - } - - /** - * Converts a hexadecimal number into an ASCII string. Negative numbers - * are not allowed. - * - * @param $hex Hexadecimal string - * @return $asc An ASCII string - */ - protected function hex2asc ($hex) { - // Check for length, it must be devideable by 2 - //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('hex='.$hex); - assert((strlen($hex) % 2) == 0); - - // Walk the string - $asc = ''; - for ($idx = 0; $idx < strlen($hex); $idx+=2) { - // Get the decimal number of the chunk - $part = hexdec(substr($hex, $idx, 2)); - - // Add it to the final string - $asc .= chr($part); - } // END - for - - // Return the final string - return $asc; - } /** * Checks whether the given encoded data was encoded with Base64 @@ -2505,34 +1211,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected function isBase64Encoded ($encodedData) { // Determine it - $isBase64 = (@base64_decode($encodedData, TRUE) !== FALSE); + $isBase64 = (@base64_decode($encodedData, true) !== false); // Return it return $isBase64; } - /** - * "Getter" to get response/request type from analysis of the system. - * - * @return $responseType Analyzed response type - */ - protected static function getResponseTypeFromSystem () { - // Default is console - $responseType = 'console'; - - // Is 'HTTP_HOST' set? - if (isset($_SERVER['HTTP_HOST'])) { - /* - * Then it is a HTML response/request as RSS and so on may be - * transfered over HTTP as well. - */ - $responseType = 'html'; - } // END - if - - // Return it - return $responseType; - } - /** * Gets a cache key from Criteria instance * @@ -2540,15 +1224,16 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $onlyKeys Only use these keys for a cache key * @return $cacheKey A cache key suitable for lookup/storage purposes */ - protected function getCacheKeyByCriteria (Criteria $criteriaInstance, array $onlyKeys = array()) { + protected function getCacheKeyByCriteria (Criteria $criteriaInstance, array $onlyKeys = []) { // Generate it + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: criteriaInstance=' . $criteriaInstance->__toString() . ',onlyKeys()=' . count($onlyKeys) . ' - CALLED!'); $cacheKey = sprintf('%s@%s', $this->__toString(), $criteriaInstance->getCacheKey($onlyKeys) ); // And return it - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($this->__toString() . ': cacheKey=' . $cacheKey); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: cacheKey=' . $cacheKey . ' - EXIT!'); return $cacheKey; } @@ -2568,7 +1253,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected function getPrintableExecutionTime () { // Caculate the execution time - $executionTime = microtime(TRUE) - $this->getStartupTime(); + $executionTime = microtime(true) - $this->getStartupTime(); // Pack it in nice braces $executionTime = sprintf('[ %01.5f ] ', $executionTime); @@ -2603,7 +1288,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if (is_null(self::$hashLength)) { // No, then hash a string and save its length. self::$hashLength = strlen(self::hash('abc123')); - } // END - if + } // Return it return self::$hashLength; @@ -2617,21 +1302,21 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $assertMismatch Whether to assert mismatches * @return $ret The (hopefully) secured numbered value */ - public function bigintval ($num, $castValue = TRUE, $assertMismatch = FALSE) { + public function bigintval ($num, $castValue = true, $assertMismatch = false) { // Filter all numbers out $ret = preg_replace('/[^0123456789]/', '', $num); // Shall we cast? - if ($castValue === TRUE) { + if ($castValue === true) { // Cast to biggest numeric type $ret = (double) $ret; - } // END - if + } // Assert only if requested - if ($assertMismatch === TRUE) { + if ($assertMismatch === true) { // Has the whole value changed? assert(('' . $ret . '' != '' . $num . '') && (!is_null($num))); - } // END - if + } // Return result return $ret; @@ -2644,34 +1329,20 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $assertMismatch Whether to assert mismatches * @return $ret The (hopefully) secured hext-numbered value */ - public function hexval ($num, $assertMismatch = FALSE) { + public function hexval ($num, $assertMismatch = false) { // Filter all numbers out $ret = preg_replace('/[^0123456789abcdefABCDEF]/', '', $num); // Assert only if requested - if ($assertMismatch === TRUE) { + if ($assertMismatch === true) { // Has the whole value changed? assert(('' . $ret . '' != '' . $num . '') && (!is_null($num))); - } // END - if + } // Return result return $ret; } - /** - * Checks whether start/end marker are set - * - * @param $data Data to be checked - * @return $isset Whether start/end marker are set - */ - public final function ifStartEndMarkersSet ($data) { - // Determine it - $isset = ((substr($data, 0, strlen(BaseRawDataHandler::STREAM_START_MARKER)) == BaseRawDataHandler::STREAM_START_MARKER) && (substr($data, -1 * strlen(BaseRawDataHandler::STREAM_END_MARKER), strlen(BaseRawDataHandler::STREAM_END_MARKER)) == BaseRawDataHandler::STREAM_END_MARKER)); - - // ... and return it - return $isset; - } - /** * Determines if an element is set in the generic array * @@ -2742,10 +1413,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // No, then abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); exit; - } // END - if + } // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], TRUE)); + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); // Return it return $this->genericArray[$keyGroup][$subGroup]; @@ -2795,7 +1466,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function appendStringToGenericArrayKey ($keyGroup, $subGroup, $key, $value, $appendGlue = '') { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, TRUE) . ',appendGlue=' . $appendGlue); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); // Is it already there? if ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { @@ -2819,7 +1490,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function appendStringToGenericArrayElement ($keyGroup, $subGroup, $key, $element, $value, $appendGlue = '') { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, TRUE) . ',appendGlue=' . $appendGlue); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); // Is it already there? if ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { @@ -2843,7 +1514,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function setStringGenericArrayElement ($keyGroup, $subGroup, $key, $element, $value, $appendGlue = '') { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, TRUE) . ',appendGlue=' . $appendGlue); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); // Set it $this->genericArray[$keyGroup][$subGroup][$key][$element] = (string) $value; @@ -2858,19 +1529,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $forceInit Optionally force initialization * @return void */ - protected final function initGenericArrayGroup ($keyGroup, $subGroup, $forceInit = FALSE) { + protected final function initGenericArrayGroup ($keyGroup, $subGroup, $forceInit = false) { // Debug message //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',forceInit=' . intval($forceInit)); // Is it already set? - if (($forceInit === FALSE) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) { + if (($forceInit === false) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) { // Already initialized trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' already initialized.'); exit; - } // END - if + } // Initialize it - $this->genericArray[$keyGroup][$subGroup] = array(); + $this->genericArray[$keyGroup][$subGroup] = []; } /** @@ -2882,19 +1553,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $forceInit Optionally force initialization * @return void */ - protected final function initGenericArrayKey ($keyGroup, $subGroup, $key, $forceInit = FALSE) { + protected final function initGenericArrayKey ($keyGroup, $subGroup, $key, $forceInit = false) { // Debug message //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',forceInit=' . intval($forceInit)); // Is it already set? - if (($forceInit === FALSE) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) { + if (($forceInit === false) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) { // Already initialized trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' already initialized.'); exit; - } // END - if + } // Initialize it - $this->genericArray[$keyGroup][$subGroup][$key] = array(); + $this->genericArray[$keyGroup][$subGroup][$key] = []; } /** @@ -2907,19 +1578,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $forceInit Optionally force initialization * @return void */ - protected final function initGenericArrayElement ($keyGroup, $subGroup, $key, $element, $forceInit = FALSE) { + protected final function initGenericArrayElement ($keyGroup, $subGroup, $key, $element, $forceInit = false) { // Debug message //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',forceInit=' . intval($forceInit)); // Is it already set? - if (($forceInit === FALSE) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) { + if (($forceInit === false) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) { // Already initialized trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' already initialized.'); exit; - } // END - if + } // Initialize it - $this->genericArray[$keyGroup][$subGroup][$key][$element] = array(); + $this->genericArray[$keyGroup][$subGroup][$key][$element] = []; } /** @@ -2933,19 +1604,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function pushValueToGenericArrayKey ($keyGroup, $subGroup, $key, $value) { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, TRUE)); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true)); // Is it set? if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Initialize array $this->initGenericArrayKey($keyGroup, $subGroup, $key); - } // END - if + } // Then push it $count = array_push($this->genericArray[$keyGroup][$subGroup][$key], $value); // Return count - //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], TRUE)); + //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], true)); //* DEBUG: */ print(__METHOD__ . ': count=' . $count . PHP_EOL); return $count; } @@ -2962,19 +1633,19 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function pushValueToGenericArrayElement ($keyGroup, $subGroup, $key, $element, $value) { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, TRUE)); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true)); // Is it set? if (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Initialize array $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); - } // END - if + } // Then push it $count = array_push($this->genericArray[$keyGroup][$subGroup][$key][$element], $value); // Return count - //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], TRUE)); + //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], true)); //* DEBUG: */ print(__METHOD__ . ': count=' . $count . PHP_EOL); return $count; } @@ -2996,14 +1667,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Not found trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); exit; - } // END - if + } // Then "pop" it $value = array_pop($this->genericArray[$keyGroup][$subGroup][$key]); // Return value - //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], TRUE)); - //* DEBUG: */ print(__METHOD__ . ': value[' . gettype($value) . ']=' . print_r($value, TRUE) . PHP_EOL); + //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], true)); + //* DEBUG: */ print(__METHOD__ . ': value[' . gettype($value) . ']=' . print_r($value, true) . PHP_EOL); return $value; } @@ -3024,14 +1695,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Not found trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); exit; - } // END - if + } // Then "shift" it $value = array_shift($this->genericArray[$keyGroup][$subGroup][$key]); // Return value - //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], TRUE)); - //* DEBUG: */ print(__METHOD__ . ': value[' . gettype($value) . ']=' . print_r($value, TRUE) . PHP_EOL); + //* DEBUG: */ print(__METHOD__ . ': genericArray=' . print_r($this->genericArray[$keyGroup][$subGroup][$key], true)); + //* DEBUG: */ print(__METHOD__ . ': value[' . gettype($value) . ']=' . print_r($value, true) . PHP_EOL); return $value; } @@ -3050,7 +1721,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' not found.'); exit; - } // END - if + } // Then count it $count = count($this->genericArray[$keyGroup]); @@ -3078,7 +1749,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); exit; - } // END - if + } // Then count it $count = count($this->genericArray[$keyGroup][$subGroup]); @@ -3138,7 +1809,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Then abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' does not exist.'); exit; - } // END - if + } // Return it return $this->genericArray[$keyGroup]; @@ -3155,7 +1826,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function setGenericArrayKey ($keyGroup, $subGroup, $key, $value) { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, TRUE)); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true)); // Set value here $this->genericArray[$keyGroup][$subGroup][$key] = $value; @@ -3178,7 +1849,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Then abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' does not exist.'); exit; - } // END - if + } // Return it return $this->genericArray[$keyGroup][$subGroup][$key]; @@ -3196,7 +1867,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected final function setGenericArrayElement ($keyGroup, $subGroup, $key, $element, $value) { // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, TRUE)); + //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true)); // Then set it $this->genericArray[$keyGroup][$subGroup][$key][$element] = $value; @@ -3220,7 +1891,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Then abort here trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' does not exist.'); exit; - } // END - if + } // Return it return $this->genericArray[$keyGroup][$subGroup][$key][$element]; @@ -3270,13 +1941,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ protected function initWebOutputInstance () { // Get application instance - $applicationInstance = Registry::getRegistry()->getInstance('app'); - - // Is this a response instance? - if ($this instanceof Responseable) { - // Then set it in application instance - $applicationInstance->setResponseInstance($this); - } // END - if + $applicationInstance = GenericRegistry::getRegistry()->getInstance('application'); // Init web output instance $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($applicationInstance)); @@ -3286,172 +1951,52 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Translates boolean TRUE to 'Y' and FALSE to 'N' + * Translates boolean true to 'Y' and false to 'N' * * @param $boolean Boolean value * @return $translated Translated boolean value */ - public static final function translateBooleanToYesNo ($boolean) { + public static final function translateBooleanToYesNo (bool $boolean) { // Make sure it is really boolean assert(is_bool($boolean)); // "Translate" it - $translated = ($boolean === TRUE) ? 'Y' : 'N'; + $translated = ($boolean === true) ? 'Y' : 'N'; // ... and return it return $translated; } - /** - * Encodes raw data (almost any type) by "serializing" it and then pack it - * into a "binary format". - * - * @param $rawData Raw data (almost any type) - * @return $encoded Encoded data - */ - protected function encodeData ($rawData) { - // Make sure no objects or resources pass through - assert(!is_object($rawData)); - assert(!is_resource($rawData)); - - // First "serialize" it (json_encode() is faster than serialize()) - $encoded = $this->packString(json_encode($rawData)); - - // And return it - return $encoded; - } - - /** - * Pack a string into a "binary format". Please execuse me that this is - * widely undocumented. :-( - * - * @param $str Unpacked string - * @return $packed Packed string - * @todo Improve documentation - */ - protected function packString ($str) { - // Debug message - //* NOISY-DEBUG */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('str=' . $str . ' - CALLED!'); - - // First compress the string (gzcompress is okay) - $str = gzcompress($str); - - // Init variable - $packed = ''; - - // And start the "encoding" loop - for ($idx = 0; $idx < strlen($str); $idx += $this->packingData[$this->archArrayElement]['step']) { - $big = 0; - for ($i = 0; $i < $this->packingData[$this->archArrayElement]['step']; $i++) { - $factor = ($this->packingData[$this->archArrayElement]['step'] - 1 - $i); - - if (($idx + $i) <= strlen($str)) { - $ord = ord(substr($str, ($idx + $i), 1)); - - $add = $ord * pow(256, $factor); - - $big += $add; - - //print 'idx=' . $idx . ',i=' . $i . ',ord=' . $ord . ',factor=' . $factor . ',add=' . $add . ',big=' . $big . PHP_EOL; - } // END - if - } // END - for - - $l = ($big & $this->packingData[$this->archArrayElement]['left']) >>$this->packingData[$this->archArrayElement]['factor']; - $r = $big & $this->packingData[$this->archArrayElement]['right']; - - $chunk = str_pad(pack($this->packingData[$this->archArrayElement]['format'], $l, $r), 8, '0', STR_PAD_LEFT); - //* NOISY-DEBUG */ print 'big=' . $big . ',chunk('.strlen($chunk) . ')='.md5($chunk).PHP_EOL; - - $packed .= $chunk; - } // END - for - - // Return it - //* NOISY-DEBUG */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('packed=' . $packed . ' - EXIT!'); - return $packed; - } - - /** - * Checks whether the given file/path is in open_basedir(). This does not - * gurantee that the file is actually readable and/or writeable. If you need - * such gurantee then please use isReadableFile() instead. - * - * @param $filePathName Name of the file/path to be checked - * @return $isReachable Whether it is within open_basedir() - */ - protected static function isReachableFilePath ($filePathName) { - // Is not reachable by default - $isReachable = FALSE; - - // Get open_basedir parameter - $openBaseDir = ini_get('open_basedir'); - - // Is it set? - if (!empty($openBaseDir)) { - // Check all entries - foreach (explode(PATH_SEPARATOR, $openBaseDir) as $dir) { - // Check on existence - if (substr($filePathName, 0, strlen($dir)) == $dir) { - // Is reachable - $isReachable = TRUE; - } // END - if - } // END - foreach - } else { - // If open_basedir is not set, all is allowed - $isReachable = TRUE; - } - - // Return status - return $isReachable; - } - - /** - * Checks whether the give file is within open_basedir() (done by - * isReachableFilePath()), is actually a file and is readable. - * - * @param $fileName Name of the file to be checked - * @return $isReadable Whether the file is readable (and therefor exists) - */ - public static function isReadableFile ($fileName) { - // Default is not readable - $isReadable = FALSE; - - // Is within parameters, so check if it is a file and readable - $isReadable = ((self::isReachableFilePath($fileName)) && (file_exists($fileName)) && (is_file($fileName)) && (is_readable($fileName))); - - // Return status - return $isReadable; - } - /** * Creates a full-qualified file name (FQFN) for given file name by adding * a configured temporary file path to it. * - * @param $fileName Name for temporary file - * @return $fqfn Full-qualified file name + * @param $infoInstance An instance of a SplFileInfo class + * @return $tempInstance An instance of a SplFileInfo class (temporary file) * @throw PathWriteProtectedException If the path in 'temp_file_path' is write-protected * @throws FileIoException If the file cannot be written */ - protected static function createTempPathForFile ($fileName) { + protected static function createTempPathForFile (SplFileInfo $infoInstance) { // Get config entry - $basePath = FrameworkConfiguration::getSelfInstance()->getConfigEntry('temp_file_path'); + $basePath = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('temp_file_path'); // Is the path writeable? if (!is_writable($basePath)) { // Path is write-protected - throw new PathWriteProtectedException($fileName, self::EXCEPTION_PATH_CANNOT_BE_WRITTEN); - } // END - if + throw new PathWriteProtectedException($infoInstance, self::EXCEPTION_PATH_CANNOT_BE_WRITTEN); + } // Add it - $fqfn = $basePath . '/' . $fileName; + $tempInstance = new SplFileInfo($basePath . DIRECTORY_SEPARATOR . $infoInstance->getBasename()); // Is it reachable? - if (!self::isReachableFilePath($fqfn)) { + if (!FrameworkBootstrap::isReachableFilePath($tempInstance)) { // Not reachable - throw new FileIoException($fqfn, self::EXCEPTION_FILE_NOT_REACHABLE); - } // END - if + throw new FileIoException($tempInstance, self::EXCEPTION_FILE_NOT_REACHABLE); + } // Return it - return $fqfn; + return $tempInstance; } /** @@ -3470,56 +2015,10 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { if ($stateInstance instanceof Stateable) { // Then use that state name $stateName = $stateInstance->getStateName(); - } // END - if + } // Return result return $stateName; } - /** - * Handles socket error for given socket resource and peer data. This method - * validates $socketResource if it is a valid resource (see is_resource()) - * but assumes valid data in array $recipientData, except that - * count($recipientData) is always 2. - * - * @param $method Value of __METHOD__ from calling method - * @param $line Value of __LINE__ from calling method - * @param $socketResource A valid socket resource - * @param $socketData A valid socket data array (0 = IP/file name, 1 = port) - * @return void - * @throws InvalidSocketException If $socketResource is no socket resource - * @throws NoSocketErrorDetectedException If socket_last_error() gives zero back - * @todo Move all this socket-related stuff into own class, most of it resides in BaseListener - */ - protected final function handleSocketError ($method, $line, $socketResource, array $socketData) { - // This method handles only socket resources - if (!is_resource($socketResource)) { - // No resource, abort here - throw new InvalidSocketException(array($this, $socketResource), BaseListener::EXCEPTION_INVALID_SOCKET); - } // END - if - - // Check socket array, 1st element is mostly IP address (or file name), 2nd is port number - //* DEBUG-DIE: */ die(__METHOD__ . ':socketData=' . print_r($socketData, TRUE)); - assert(isset($socketData[0])); - assert(isset($socketData[1])); - - // Get error code for first validation (0 is not an error) - $errorCode = socket_last_error($socketResource); - - // If the error code is zero, someone called this method without an error - if ($errorCode == 0) { - // No error detected (or previously cleared outside this method) - throw new NoSocketErrorDetectedException(array($this, $socketResource), BaseListener::EXCEPTION_NO_SOCKET_ERROR); - } // END - if - - // Get handler (method) name - $handlerName = $this->getSocketErrorHandlerFromCode($errorCode); - - // Call-back the error handler method - call_user_func_array(array($this, $handlerName), array($socketResource, $socketData)); - - // Finally clear the error because it has been handled - socket_clear_error($socketResource); - } - }