X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=framework%2Fmain%2Fclasses%2Fclass_BaseFrameworkSystem.php;h=dc2410c324d9991d2e8a4b91f5a4c7c791cd87e7;hb=f861d6bc00f8a3ecf6b057f2aa93129572643896;hp=96f05cdcc890272b3304369601b5c984808237d4;hpb=d831713579377eaedd277b577dcd9c73040d0767;p=core.git diff --git a/framework/main/classes/class_BaseFrameworkSystem.php b/framework/main/classes/class_BaseFrameworkSystem.php index 96f05cdc..dc2410c3 100644 --- a/framework/main/classes/class_BaseFrameworkSystem.php +++ b/framework/main/classes/class_BaseFrameworkSystem.php @@ -22,10 +22,11 @@ use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer; use Org\Mxchange\CoreFramework\Utils\Strings\StringUtils; // Import SPL stuff -use \stdClass; +use \BadMethodCallException; use \InvalidArgumentException; use \ReflectionClass; use \SplFileInfo; +use \stdClass; /** * The simulator system class is the super class of all other classes. This @@ -33,7 +34,7 @@ use \SplFileInfo; * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2021 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2023 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -56,6 +57,11 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac */ private static $selfInstance = NULL; + /** + * Debug instance + */ + private static $debugInstance = NULL; + /** * Stub methods */ @@ -130,24 +136,23 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac const EXCEPTION_ATTRIBUTES_ARE_MISSING = 0x02b; const EXCEPTION_ARRAY_ELEMENTS_MISSING = 0x02c; const EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED = 0x02d; - const EXCEPTION_UNSPPORTED_OPERATION = 0x02e; - const EXCEPTION_FACTORY_REQUIRE_PARAMETER = 0x02f; - 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_NOT_REACHABLE = 0x038; - const EXCEPTION_FILE_CANNOT_BE_READ = 0x039; - const EXCEPTION_FILE_CANNOT_BE_WRITTEN = 0x03a; - const EXCEPTION_PATH_CANNOT_BE_WRITTEN = 0x03b; - const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03c; - const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03d; - const EXCEPTION_INVALID_SOCKET = 0x03e; - const EXCEPTION_SELF_INSTANCE = 0x03f; + const EXCEPTION_FACTORY_REQUIRE_PARAMETER = 0x02e; + const EXCEPTION_MISSING_ELEMENT = 0x02f; + const EXCEPTION_HEADERS_ALREADY_SENT = 0x030; + const EXCEPTION_DEFAULT_CONTROLLER_GONE = 0x031; + const EXCEPTION_CLASS_NOT_FOUND = 0x032; + const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x033; + const EXCEPTION_FATAL_ERROR = 0x034; + const EXCEPTION_FILE_NOT_FOUND = 0x035; + const EXCEPTION_ASSERTION_FAILED = 0x036; + const EXCEPTION_FILE_NOT_REACHABLE = 0x037; + const EXCEPTION_FILE_CANNOT_BE_READ = 0x038; + const EXCEPTION_FILE_CANNOT_BE_WRITTEN = 0x039; + const EXCEPTION_PATH_CANNOT_BE_WRITTEN = 0x03a; + const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03b; + const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03c; + const EXCEPTION_INVALID_SOCKET = 0x03d; + const EXCEPTION_SELF_INSTANCE = 0x03e; /** * Startup time in miliseconds @@ -183,13 +188,13 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac $this->setRealClass('DestructedObject'); } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) { // Already destructed object - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('The object %s is already destroyed.', + self::createDebugInstance(__CLASS__, __LINE__)->warningMessage(sprintf('The object %s is already destroyed.', $this->__toString() )); } else { // Do not call this twice trigger_error(__METHOD__ . ': Called twice.'); - exit; + exit(255); } } @@ -289,7 +294,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac // Output stub message // @TODO __CLASS__ does always return BaseFrameworkSystem but not the extending (=child) class - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s::%s]: Stub! Args: %s', + self::createDebugInstance(__CLASS__, __LINE__)->warningMessage(sprintf('[%s::%s]: Stub! Args: %s', $className, $methodName, $argsString @@ -354,7 +359,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __sleep () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -364,7 +369,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __wakeup () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -374,7 +379,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __invoke () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -395,7 +400,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @return void */ public final function setDebugInstance (DebugMiddleware $debugInstance) { - GenericRegistry::getRegistry()->addInstance('debug', $debugInstance); + self::$debugInstance = $debugInstance; } /** @@ -404,11 +409,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput */ public final function getDebugInstance () { - // Get debug instance - $debugInstance = GenericRegistry::getRegistry()->getInstance('debug'); - - // Return it - return $debugInstance; + return self::$debugInstance; } /** @@ -427,8 +428,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @return $webOutputInstance - Instance to class WebOutput */ public final function getWebOutputInstance () { - $webOutputInstance = GenericRegistry::getRegistry()->getInstance('web_output'); - return $webOutputInstance; + return GenericRegistry::getRegistry()->getInstance('web_output'); } /** @@ -543,52 +543,6 @@ Loaded includes: )); } - /** - * Replaces control characters with printable output - * - * @param $str String with control characters - * @return $str Replaced string - */ - protected function replaceControlCharacters (string $str) { - // Replace them - $str = str_replace( - chr(13), '[r]', str_replace( - chr(10), '[n]', str_replace( - chr(9) , '[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 (string $message = '') { - // Init variable - $stubMessage = 'Partial stub!'; - - // Is an extra message given? - if (!empty($message)) { - // Then add it as well - $stubMessage .= ' Message: ' . $message; - } - - // Debug instance is there? - if (!is_null($this->getDebugInstance())) { - // Output stub message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($stubMessage); - } else { - // Trigger an error - trigger_error($stubMessage); - exit; - } - } - /** * Outputs a debug backtrace and stops further script execution * @@ -619,38 +573,37 @@ Loaded includes: * @param $className Name of the class (currently unsupported) * @param $lineNumber Line number where the call was made * @return $debugInstance An instance of a debugger class + * @throws InvalidArgumentException If a parameter has an invalid value * @deprecated Not fully, as the new Logger facilities are not finished yet. */ public final static function createDebugInstance (string $className, int $lineNumber = NULL) { // Validate parameter + //* NOISY-DEBUG: */ printf('[%s:%d]: className=%s,lineNumber[%s]=%d - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $className, gettype($lineNumber), $lineNumber); if (empty($className)) { // Throw IAE - throw new InvalidArgumentException('Parameter "className" is empty'); - } elseif (!GenericRegistry::getRegistry()->instanceExists('debug')) { + throw new InvalidArgumentException('Parameter "className" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // Is the debug instance set? + //* NOISY-DEBUG: */ printf('[%s:%d]: self::debugInstance[]=%s' . PHP_EOL, __METHOD__, __LINE__, gettype(self::$debugInstance)); + if (is_null(self::$debugInstance)) { // Init debug instance - $debugInstance = NULL; + self::$debugInstance = NULL; // Try it try { // Get a debugger instance - $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className); + //* NOISY-DEBUG: */ printf('[%s:%d]: className=%s' . PHP_EOL, __METHOD__, __LINE__, $className); + self::$debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className); } catch (NullPointerException $e) { // Didn't work, no instance there exit(sprintf('[%s:%d]: Cannot create debugInstance! Exception=%s,message=%s,className=%s,lineNumber=%d' . PHP_EOL, __METHOD__, __LINE__, $e->__toString(), $e->getMessage(), $className, $lineNumber)); } - - // Empty string should be ignored and used for testing the middleware - DebugMiddleware::getSelfInstance()->output(''); - - // Set it in registry - GenericRegistry::getRegistry()->addInstance('debug', $debugInstance); - } else { - // Get instance from registry - $debugInstance = GenericRegistry::getRegistry()->getDebugInstance(); } // Return it - return $debugInstance; + //* NOISY-DEBUG: */ printf('[%s:%d]: self::debugInstance=%s - EXIT!' . PHP_EOL, __METHOD__, __LINE__, self::$debugInstance->__toString()); + return self::$debugInstance; } /** @@ -664,77 +617,6 @@ Loaded includes: print($message . PHP_EOL); } - /** - * Outputs a debug message whether to debug instance (should be set!) or - * dies with or ptints the message. Do NEVER EVER rewrite the exit() call to - * ApplicationEntryPoint::app_exit(), this would cause an endless loop. - * - * @param $message Message we shall send out... - * @param $doPrint Whether print or die here (default: print) - * @paran $stripTags Whether to strip tags (default: false) - * @return void - */ - public function debugOutput (string $message, bool $doPrint = true, bool $stripTags = false) { - // Set debug instance to NULL - $debugInstance = NULL; - - // Get backtrace - $backtrace = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT); - - // Is function partialStub/__callStatic ? - if (isset(self::$stubMethods[$backtrace[1]['function']])) { - // 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 - $debugInstance = $this->getDebugInstance(); - } catch (NullPointerException $e) { - // The debug instance is not set (yet) - } - - // Is the debug instance there? - if (is_object($debugInstance)) { - // Use debug output handler - $debugInstance->output($message, $stripTags); - - if ($doPrint === false) { - // Die here if not printed - exit(); - } - } else { - // Are debug times enabled? - if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings') == 'Y') { - // Prepent it - $message = $this->getPrintableExecutionTime() . $message; - } - - // Put directly out - if ($doPrint === true) { - // Print message - $this->outputLine($message); - } else { - // Die here - exit($message); - } - } - } - /** * Marks up the code by adding e.g. line numbers * @@ -778,31 +660,40 @@ Loaded includes: * @return $entry An array with database entries * @throws NullPointerException If the database result is not found * @throws InvalidDatabaseResultException If the database result is invalid - * @todo Monolithic method, should be moved to proper classes + * @deprecated Monolithic method, should be moved to proper classes */ protected final function getDatabaseEntry () { + // This method is deprecated + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: CALLED!'); + $this->deprecationWarning('Monolithic method, should be moved to proper classes'); + // Is there an instance? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: this->resultInstance[]=%s', gettype($this->getResultInstance()))); if (!$this->getResultInstance() instanceof SearchableResult) { // Throw an exception here throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); } // Rewind it + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: Invoking this->resultInstance->rewind() ...'); $this->getResultInstance()->rewind(); // Do we have an entry? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: this->resultInstance->isValid()=%d', intval($this->getResultInstance()->isValid()))); 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); } // Get next entry + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: Invoking this->resultInstance->next() ...'); $this->getResultInstance()->next(); // Fetch it $entry = $this->getResultInstance()->current(); // And return it + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: entry[]=%s - EXIT!', gettype($entry))); return $entry; } @@ -812,8 +703,20 @@ Loaded includes: * @param $fieldName Field name which we shall get * @return $fieldValue Field value from the user * @throws NullPointerException If the result instance is null + * @throws InvalidArgumentException If a parameter is not valid + * @deprecated Monolithic method, should be moved to proper classes */ public final function getField (string $fieldName) { + // Check parameter + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - CALLED!', $fieldName)); + if (empty($fieldName)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "fieldName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // This method is deprecated + $this->deprecationWarning('Monolithic method, should be moved to proper classes'); + // Default field value $fieldValue = NULL; @@ -821,6 +724,7 @@ Loaded includes: $resultInstance = $this->getResultInstance(); // Is this instance null? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: resultInstance[]=%s', gettype($resultInstance))); if (is_null($resultInstance)) { // Then the user instance is no longer valid (expired cookies?) throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); @@ -828,24 +732,26 @@ Loaded includes: // Get current array $fieldArray = $resultInstance->current(); - //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($fieldName.':
'.print_r($fieldArray, true).'
'); // Convert dashes to underscore + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldArray()=%d', count($fieldArray))); $fieldName2 = StringUtils::convertDashesToUnderscores($fieldName); // Does the field exist? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName2=%s', $fieldName2)); if ($this->isFieldSet($fieldName)) { // Get it $fieldValue = $fieldArray[$fieldName2]; - } elseif (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('developer_mode_enabled')) { + } elseif (FrameworkBootstrap::getConfigurationInstance()->isEnabled('developer_mode')) { // Missing field entry, may require debugging - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: fieldArray
=' . print_r($fieldArray, true) . '
,fieldName=' . $fieldName . ' not found!'); + self::createDebugInstance(__CLASS__, __LINE__)->warningMessage('BASE-FRAMEWORK-SYSTEM: fieldArray
=' . print_r($fieldArray, true) . '
,fieldName=' . $fieldName . ' not found!'); } else { // Missing field entry, may require debugging - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: fieldName=' . $fieldName . ' not found!'); + self::createDebugInstance(__CLASS__, __LINE__)->warningMessage('BASE-FRAMEWORK-SYSTEM: fieldName=' . $fieldName . ' not found!'); } // Return it + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldValue[]=%s - EXIT!', gettype($fieldValue))); return $fieldValue; } @@ -855,12 +761,21 @@ Loaded includes: * @param $fieldName Field name to check * @return $isSet Whether the given field name is set * @throws NullPointerException If the result instance is null + * @throws InvalidArgumentException If a parameter is not valid */ public function isFieldSet (string $fieldName) { + // Check parameter + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - CALLED!', $fieldName)); + if (empty($fieldName)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "fieldName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Get result instance $resultInstance = $this->getResultInstance(); // Is this instance null? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: resultInstance[]=%s', gettype($resultInstance))); if (is_null($resultInstance)) { // Then the user instance is no longer valid (expired cookies?) throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); @@ -868,16 +783,18 @@ Loaded includes: // Get current array $fieldArray = $resultInstance->current(); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=
'.print_r($fieldArray, true).'
'); // Convert dashes to underscore + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldArray()=%d,fieldName=%s - BEFORE!', count($fieldArray), $fieldName)); $fieldName = StringUtils::convertDashesToUnderscores($fieldName); // Determine it - $isSet = isset($fieldArray[$fieldName]); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - AFTER!', $fieldName)); + $isset = isset($fieldArray[$fieldName]); // Return result - return $isSet; + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: isset=%d - EXIT!', intval($isset))); + return $isset; } /** @@ -889,19 +806,19 @@ Loaded includes: */ public function deprecationWarning (string $message) { // Is developer mode active? - if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('developer_mode_enabled')) { + if (FrameworkBootstrap::getConfigurationInstance()->isEnabled('developer_mode')) { // Debug instance is there? if (!is_null($this->getDebugInstance())) { // Output stub message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($message); + self::createDebugInstance(__CLASS__, __LINE__)->warningMessage($message); } else { // Trigger an error trigger_error($message . "
\n"); - exit; + exit(255); } } else { // @TODO Finish this part! - $this->partialStub('Developer mode inactive. Message:' . $message); + DebugMiddleware::getSelfInstance()->partialStub('Developer mode inactive. Message:' . $message); } } @@ -910,8 +827,15 @@ Loaded includes: * * @param $phpExtension The PHP extension we shall check * @return $isLoaded Whether the PHP extension is loaded + * @throws InvalidArgumentException If a parameter is not valid */ public final function isPhpExtensionLoaded (string $phpExtension) { + // Check parameter + if (empty($phpExtension)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "phpExtension" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Is it loaded? $isLoaded = in_array($phpExtension, get_loaded_extensions()); @@ -937,8 +861,15 @@ Loaded includes: * Idles (sleeps) for given milliseconds * * @return $hasSlept Whether it goes fine + * @throws InvalidArgumentException If a parameter is not valid */ public function idle (int $milliSeconds) { + // Check parameter + if ($milliSeconds < 1) { + // Throw IAE + throw new InvalidArgumentException(sprintf('milliSeconds=%d are not a reasonable value to idle', $milliSeconds)); + } + // Sleep is fine by default $hasSlept = true; @@ -966,8 +897,15 @@ Loaded includes: * * @param $encodedData Encoded data we shall check * @return $isBase64 Whether the encoded data is Base64 + * @throws InvalidArgumentException If a parameter is not valid */ protected function isBase64Encoded (string $encodedData) { + // Check parameter + if (empty($encodedData)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "encodedData" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Determine it $isBase64 = (@base64_decode($encodedData, true) !== false); @@ -1005,8 +943,24 @@ Loaded includes: * @param $key Key to check * @param $element Element to check * @return $isset Whether the given key is set + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function isGenericArrayElementSet (string $keyGroup, string $subGroup, $key, $element) { + protected final function isGenericArrayElementSet (string $keyGroup, string $subGroup, string $key, string $element) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Is it there? //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); $isset = isset($this->genericArray[$keyGroup][$subGroup][$key][$element]); @@ -1021,8 +975,21 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to check * @return $isset Whether the given key is set + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function isGenericArrayKeySet (string $keyGroup, string $subGroup, $key) { + protected final function isGenericArrayKeySet (string $keyGroup, string $subGroup, string $key) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Is it there? //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); $isset = isset($this->genericArray[$keyGroup][$subGroup][$key]); @@ -1031,17 +998,26 @@ Loaded includes: return $isset; } - /** * Determines if a group is set in the generic array * * @param $keyGroup Main group * @param $subGroup Sub group * @return $isset Whether the given group is set + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isGenericArrayGroupSet (string $keyGroup, string $subGroup) { - // Is it there? + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // Is it there? $isset = isset($this->genericArray[$keyGroup][$subGroup]); // Return it @@ -1054,17 +1030,24 @@ Loaded includes: * @param $keyGroup Main key group * @param $subGroup Sub key group * @return $array An array with all array elements + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function getGenericSubArray (string $keyGroup, string $subGroup) { - // Is it there? - if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { + // Check parameter + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { // No, then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Return it - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); return $this->genericArray[$keyGroup][$subGroup]; } @@ -1075,10 +1058,23 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function unsetGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Remove it + protected final function unsetGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key]); } @@ -1090,10 +1086,24 @@ Loaded includes: * @param $key Key to unset * @param $element Element to unset * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function unsetGenericArrayElement (string $keyGroup, string $subGroup, $key, $element) { - // Debug message + protected final function unsetGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key][$element]); @@ -1107,18 +1117,29 @@ Loaded includes: * @param $key Key to unset * @param $value Value to add/append * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function appendStringToGenericArrayKey (string $keyGroup, string $subGroup, $key, string $value, $appendGlue = '') { - // Debug message + protected final function appendStringToGenericArrayKey (string $keyGroup, string $subGroup, $key, string $value, string $appendGlue = '') { + // Check parameter //* 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); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Is it already there? if ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Append it - $this->genericArray[$keyGroup][$subGroup][$key] .= $appendGlue . (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key] .= $appendGlue . $value; } else { // Add it - $this->genericArray[$keyGroup][$subGroup][$key] = (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key] = $value; } } @@ -1131,39 +1152,35 @@ Loaded includes: * @param $element Element to check * @param $value Value to add/append * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function appendStringToGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value, $appendGlue = '') { - // Debug message + protected final function appendStringToGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, string $value, string $appendGlue = '') { + // Check parameter //* 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); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Is it already there? if ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Append it - $this->genericArray[$keyGroup][$subGroup][$key][$element] .= $appendGlue . (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key][$element] .= $appendGlue . $value; } else { // Add it - $this->setStringGenericArrayElement($keyGroup, $subGroup, $key, $element, $value); + $this->setGenericArrayElement($keyGroup, $subGroup, $key, $element, $value); } } - /** - * Sets a string in a given generic array element - * - * @param $keyGroup Main group for the key - * @param $subGroup Sub group for the key - * @param $key Key to unset - * @param $element Element to check - * @param $value Value to add/append - * @return void - */ - protected final function setStringGenericArrayElement (string $keyGroup, string $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); - - // Set it - $this->genericArray[$keyGroup][$subGroup][$key][$element] = (string) $value; - } - /** * Initializes given generic array group * @@ -1172,16 +1189,21 @@ Loaded includes: * @param $key Key to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group has already been initialized */ protected final function initGenericArrayGroup (string $keyGroup, string $subGroup, bool $forceInit = false) { - // Debug message + // Check parameter //* 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 (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (($forceInit === false) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s already initialized.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Initialize it @@ -1196,16 +1218,24 @@ Loaded includes: * @param $key Key to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group has already been initialized */ protected final function initGenericArrayKey (string $keyGroup, string $subGroup, $key, bool $forceInit = false) { - // Debug message + // Check parameter //* 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 (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (($forceInit === false) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Initialize it @@ -1221,16 +1251,27 @@ Loaded includes: * @param $element Element to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function initGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, bool $forceInit = false) { - // Debug message + protected final function initGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, bool $forceInit = false) { + // Check parameter //* 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 (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (($forceInit === false) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Initialize it @@ -1238,20 +1279,28 @@ Loaded includes: } /** - * Pushes an element to a generic key + * Pushes an element to a generic key. If the key isn't found, it will be initialized. * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @param $key Key to use * @param $value Value to add/append * @return $count Number of array elements + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function pushValueToGenericArrayKey (string $keyGroup, string $subGroup, $key, $value) { - // Debug message + protected final function pushValueToGenericArrayKey (string $keyGroup, string $subGroup, string $key, $value) { + // Check parameter //* 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)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Initialize array $this->initGenericArrayKey($keyGroup, $subGroup, $key); } @@ -1266,7 +1315,7 @@ Loaded includes: } /** - * Pushes an element to a generic array element + * Pushes an element to a generic array element. If the key isn't found, it will be initialized. * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key @@ -1274,13 +1323,24 @@ Loaded includes: * @param $element Element to check * @param $value Value to add/append * @return $count Number of array elements + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function pushValueToGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value) { - // Debug message + protected final function pushValueToGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, $value) { + // Check parameter //* 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)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Initialize array $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); } @@ -1301,16 +1361,24 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return $value Last "popped" value + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function popGenericArrayElement (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function popGenericArrayElement (string $keyGroup, string $subGroup, string $key) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it set? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Not found - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Then "pop" it @@ -1328,17 +1396,25 @@ Loaded includes: * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @param $key Key to unset - * @return $value Last "popped" value + * @return $value Last "shifted" value + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function shiftGenericArrayElement (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function shiftGenericArrayElement (string $keyGroup, string $subGroup, string $key) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it set? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Not found - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Then "shift" it @@ -1355,25 +1431,25 @@ Loaded includes: * * @param $keyGroup Main group for the key * @return $count Count of given group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key group isn't there but this method is invoked */ - protected final function countGenericArray ($keyGroup) { - // Debug message + protected final function countGenericArray (string $keyGroup) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup); - - // Is it there? - if (!isset($this->genericArray[$keyGroup])) { - // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' not found.'); - exit; + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!isset($this->genericArray[$keyGroup])) { + // Not found + throw new BadMethodCallException(sprintf('keyGroup=%s not found.', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Then count it $count = count($this->genericArray[$keyGroup]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',count=' . $count); return $count; } @@ -1383,25 +1459,28 @@ Loaded includes: * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @return $count Count of given group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function countGenericArrayGroup (string $keyGroup, string $subGroup) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); - - // Is it there? - if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Then count it $count = count($this->genericArray[$keyGroup][$subGroup]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',count=' . $count); return $count; } @@ -1410,31 +1489,36 @@ Loaded includes: * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key - * @para $key Key to count + * @param $key Key to count * @return $count Count of given key + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function countGenericArrayElements (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function countGenericArrayElements (string $keyGroup, string $subGroup, string $key) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it there? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) { // Not valid - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' is not an array.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s is not a valid key/sub group.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Then count it $count = count($this->genericArray[$keyGroup][$subGroup][$key]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',count=' . $count); return $count; } @@ -1443,16 +1527,18 @@ Loaded includes: * * @param $keyGroup Key group to get * @return $array Whole generic array group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function getGenericArray ($keyGroup) { - // Debug message + protected final function getGenericArray (string $keyGroup) { + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup); - - // Is it there? - if (!isset($this->genericArray[$keyGroup])) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!isset($this->genericArray[$keyGroup])) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s not found', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Return it @@ -1467,10 +1553,25 @@ Loaded includes: * @param $key Key to unset * @param $value Mixed value from generic array element * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function setGenericArrayKey (string $keyGroup, string $subGroup, $key, $value) { - // Debug message + protected final function setGenericArrayKey (string $keyGroup, string $subGroup, string $key, $value) { + // Check parameters //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) { + // Then abort here + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); + } // Set value here $this->genericArray[$keyGroup][$subGroup][$key] = $value; @@ -1483,16 +1584,24 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return $value Mixed value from generic array element + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function getGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function getGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it there? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Return it @@ -1508,10 +1617,27 @@ Loaded includes: * @param $element Element to set * @param $value Value to set * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function setGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value) { - // Debug message + protected final function setGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, $value) { + // Check parameter //* 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)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { + // Initialize array + $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); + } // Then set it $this->genericArray[$keyGroup][$subGroup][$key][$element] = $value; @@ -1525,16 +1651,27 @@ Loaded includes: * @param $key Key to look for * @param $element Element to look for * @return $value Mixed value from generic array element + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ - protected final function getGenericArrayElement (string $keyGroup, string $subGroup, $key, $element) { - // Debug message + protected final function getGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element) { + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); - - // Is it there? - if (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL); } // Return it @@ -1547,10 +1684,18 @@ Loaded includes: * @param $keyGroup Key group to get * @param $subGroup Sub group for the key * @return $isValid Whether given sub group is valid + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isValidGenericArrayGroup (string $keyGroup, string $subGroup) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Determine it $isValid = (($this->isGenericArrayGroupSet($keyGroup, $subGroup)) && (is_array($this->getGenericSubArray($keyGroup, $subGroup)))); @@ -1567,9 +1712,19 @@ Loaded includes: * @param $key Key to check * @return $isValid Whether given sub group is valid */ - protected final function isValidGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function isValidGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Determine it $isValid = (($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) && (is_array($this->getGenericArrayKey($keyGroup, $subGroup, $key)))); @@ -1598,9 +1753,6 @@ Loaded includes: * @return $translated Translated boolean value */ public static final function translateBooleanToYesNo (bool $boolean) { - // Make sure it is really boolean - assert(is_bool($boolean)); - // "Translate" it $translated = ($boolean === true) ? 'Y' : 'N';