From c0db3be770e75ae4de9468a9658aabcfdccbdfa3 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Fri, 1 Sep 2023 18:36:22 +0900 Subject: [PATCH] Composer libs update --- www/admin/class_test.check.colors.php | 2 +- www/admin/class_test.convert.colors.php | 14 +- www/admin/class_test.db.php | 8 + www/admin/class_test.image.php | 7 + www/admin/class_test.session.php | 35 +-- www/admin/class_test.session.read.php | 16 +- www/composer.lock | 2 +- www/vendor/composer/installed.json | 2 +- www/vendor/composer/installed.php | 2 +- .../corelibs-composer-all/publish/.gitignore | 1 - .../publish/last.published | 2 +- .../publish/package-download/.gitignore | 1 + .../corelibs-composer-all/publish/publish.sh | 14 +- .../corelibs-composer-all/src/ACL/Login.php | 21 +- .../src/Check/Colors.php | 12 +- .../src/Check/Encoding.php | 37 ++-- .../src/Combined/ArrayHandler.php | 13 +- .../src/Combined/DateTime.php | 188 ++++++++-------- .../src/Convert/Colors.php | 118 +++++----- .../src/Create/Session.php | 28 +-- .../src/DB/Extended/ArrayIO.php | 2 + .../corelibs-composer-all/src/DB/IO.php | 7 +- .../src/Debug/FileWriter.php | 4 +- .../src/Language/L10n.php | 2 +- .../src/Output/Image.php | 201 ++++++++++-------- .../src/Security/SymmetricEncryption.php | 7 +- .../test/phpunit/ACL/CoreLibsACLLoginTest.php | 68 +++--- .../phpunit/Check/CoreLibsCheckColorsTest.php | 7 +- .../CoreLibsCombinedArrayHandlerTest.php | 17 +- .../Combined/CoreLibsCombinedDateTimeTest.php | 104 ++++++++- .../Convert/CoreLibsConvertColorsTest.php | 113 ++++++++-- .../Create/CoreLibsCreateSessionTest.php | 45 ++-- .../test/phpunit/DB/CoreLibsDBIOTest.php | 15 ++ 33 files changed, 698 insertions(+), 417 deletions(-) create mode 100644 www/vendor/egrajp/corelibs-composer-all/publish/package-download/.gitignore diff --git a/www/admin/class_test.check.colors.php b/www/admin/class_test.check.colors.php index 130f6af2..595a0dda 100644 --- a/www/admin/class_test.check.colors.php +++ b/www/admin/class_test.check.colors.php @@ -99,7 +99,7 @@ echo "
"; try { $check = Colors::validateColor('#ab12cd', 99); print "No Exception"; -} catch (\Exception $e) { +} catch (\UnexpectedValueException $e) { print "ERROR: " . $e->getCode() . ": " . $e->getMessage() . "
"; } diff --git a/www/admin/class_test.convert.colors.php b/www/admin/class_test.convert.colors.php index 223d152e..3c82d7be 100644 --- a/www/admin/class_test.convert.colors.php +++ b/www/admin/class_test.convert.colors.php @@ -39,8 +39,18 @@ print '

' . $PAGE_NAME . '

'; // define a list of from to color sets for conversion test // A(out of bounds) -print "C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " . CoreLibs\Convert\Colors::rgb2hex(-1, -1, -1) . "
"; -print "\$C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " . $color_class::rgb2hex(-1, -1, -1) . "
"; +try { + print "C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " + . CoreLibs\Convert\Colors::rgb2hex(-1, -1, -1) . "
"; +} catch (\LengthException $e) { + print "*Exception: " . $e->getMessage() . "
" . $e . "
"; +} +try { + print "\$C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " + . $color_class::rgb2hex(-1, -1, -1) . "
"; +} catch (\LengthException $e) { + print "**Exception: " . $e->getMessage() . "
" . print_r($e, true) . "

"; +} // B(valid) $rgb = [10, 20, 30]; $hex = '#0a141e'; diff --git a/www/admin/class_test.db.php b/www/admin/class_test.db.php index 507956fd..c791d8a9 100644 --- a/www/admin/class_test.db.php +++ b/www/admin/class_test.db.php @@ -75,6 +75,14 @@ $db->dbResetEncoding(); // empty calls, none of the below should fail // +$db->dbGetCursor(); +// +$db->dbGetCursorExt(); +// +$db->dbGetCursorPos('SELECT foo', ['bar']); +// +$db->dbGetCursorNumRows('SELECT foo', ['bar']); +// $db->dbGetInsertPKName(); // $db->dbGetInsertPK(); diff --git a/www/admin/class_test.image.php b/www/admin/class_test.image.php index cabc8814..d2be61c6 100644 --- a/www/admin/class_test.image.php +++ b/www/admin/class_test.image.php @@ -109,6 +109,13 @@ foreach ($images as $image) { echo "
"; } +// errros +try { + Image::createThumbnailSimple('', $thumb_width, 0, $cache_folder, $web_folder); +} catch (\UnexpectedValueException $e) { + print "Message:
" . $e->getMessage() . "
" . $e . "
"; +} + print ""; // __END__ diff --git a/www/admin/class_test.session.php b/www/admin/class_test.session.php index 0f685e87..7cc610c2 100644 --- a/www/admin/class_test.session.php +++ b/www/admin/class_test.session.php @@ -78,16 +78,18 @@ if (isset($_SESSION)) { # print "[UNSET] To set session name valid: " . ($session->checkValidSessionName($session_name) ? 'Valid' : 'Invalid') . "
"; -if (false === ($session_id = $session->startSession($session_name))) { - print "[FAILED] Session start failed: " . $session->getErrorStr() . "
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[SET] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[FAILED] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } // set again -if (false === ($session_id = $session->startSession($session_name))) { - print "[2 FAILED] Session start failed: " . $session->getErrorStr() . "
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[2 SET] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[2 FAILED] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } print "[SET] Current session id: " . $session->getSessionId() . "
"; print "[SET] Current session name: " . $session->getSessionName() . "
"; @@ -125,10 +127,11 @@ print "[READ MAGIC] unset Isset: " . (isset($session->setwrap) ? 'Yes' : 'No') . // differnt session name $session_name = 'class-test-session-ALT'; -if (false === ($session_id = $session->startSession($session_name))) { - print "[3 FAILED] Session start failed: " . $session->getErrorStr() . "
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[3 SET] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[3 FAILED] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } print "[SET AGAIN] Current session id: " . $session->getSessionId() . "
"; @@ -141,10 +144,11 @@ $_SESSION['will_never_be_written'] = 'empty'; // open again $session_name = 'class-test-session'; -if (false === ($session_id = $session->startSession($session_name))) { - print "[4 FAILED] Session start failed: " . $session->getErrorStr() . "
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[4 SET] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[4 FAILED] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } print "[START AGAIN] Current session id: " . $session->getSessionId() . "
"; $_SESSION['will_be_written_again'] = 'Full'; @@ -153,10 +157,11 @@ $_SESSION['will_be_written_again'] = 'Full'; $session->writeClose(); // invalid $session_name = '123'; -if (false === ($session_id = $session->startSession($session_name))) { - print "[5 FAILED] Session start failed: " . $session->getErrorStr() . "
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[5 SET] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[5 FAILED] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } print "[BAD NAME] Current session id: " . $session->getSessionId() . "
"; print "[BAD NAME] Current session name: " . $session->getSessionName() . "
"; diff --git a/www/admin/class_test.session.read.php b/www/admin/class_test.session.read.php index ec40f7c7..b871ea8c 100644 --- a/www/admin/class_test.session.read.php +++ b/www/admin/class_test.session.read.php @@ -69,16 +69,18 @@ print "[UNSET] Current session status: " . getSessionStatusString($session->getS print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "
"; // start -if (false === ($session_id = $session->startSession($session_name))) { - print "Session start failed: " . $session->getErrorStr() . "
"; -} else { - print "Current session id: " . $session_id . "
"; +try { + $session_id = $session->startSession($session_name); + print "[1] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[1] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } // set again -if (false === ($session_id = $session->startSession($session_name))) { - print "[2] Session start failed
"; -} else { +try { + $session_id = $session->startSession($session_name); print "[2] Current session id: " . $session_id . "
"; +} catch (\Exception $e) { + print "[2] Session start failed:
" . $e->getMessage() . "
" . $e . "
"; } print "[SET] Current session id: " . $session->getSessionId() . "
"; print "[SET] Current session name: " . $session->getSessionName() . "
"; diff --git a/www/composer.lock b/www/composer.lock index 90394877..2affaa04 100644 --- a/www/composer.lock +++ b/www/composer.lock @@ -12,7 +12,7 @@ "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "6f657f28901fee93a5aa2d5232a355da59e15fa3" + "reference": "e1466432a88803eb54ee761f3a4a076760876531" }, "require": { "php": ">=8.2", diff --git a/www/vendor/composer/installed.json b/www/vendor/composer/installed.json index 67a78f41..d3ffed69 100644 --- a/www/vendor/composer/installed.json +++ b/www/vendor/composer/installed.json @@ -7,7 +7,7 @@ "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "6f657f28901fee93a5aa2d5232a355da59e15fa3" + "reference": "e1466432a88803eb54ee761f3a4a076760876531" }, "require": { "php": ">=8.2", diff --git a/www/vendor/composer/installed.php b/www/vendor/composer/installed.php index 579977ea..ec290f3c 100644 --- a/www/vendor/composer/installed.php +++ b/www/vendor/composer/installed.php @@ -13,7 +13,7 @@ 'egrajp/corelibs-composer-all' => array( 'pretty_version' => 'dev-development', 'version' => 'dev-development', - 'reference' => '6f657f28901fee93a5aa2d5232a355da59e15fa3', + 'reference' => 'e1466432a88803eb54ee761f3a4a076760876531', 'type' => 'library', 'install_path' => __DIR__ . '/../egrajp/corelibs-composer-all', 'aliases' => array(), diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/.gitignore b/www/vendor/egrajp/corelibs-composer-all/publish/.gitignore index 9094d2f1..81a38be6 100644 --- a/www/vendor/egrajp/corelibs-composer-all/publish/.gitignore +++ b/www/vendor/egrajp/corelibs-composer-all/publish/.gitignore @@ -1,2 +1 @@ -*.zip .env* diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/last.published b/www/vendor/egrajp/corelibs-composer-all/publish/last.published index 9c50fbf5..7b0680f4 100644 --- a/www/vendor/egrajp/corelibs-composer-all/publish/last.published +++ b/www/vendor/egrajp/corelibs-composer-all/publish/last.published @@ -1 +1 @@ -9.5.1 +9.6.0 diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/package-download/.gitignore b/www/vendor/egrajp/corelibs-composer-all/publish/package-download/.gitignore new file mode 100644 index 00000000..c4c4ffc6 --- /dev/null +++ b/www/vendor/egrajp/corelibs-composer-all/publish/package-download/.gitignore @@ -0,0 +1 @@ +*.zip diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh b/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh index 1c22b060..3c16f7a7 100755 --- a/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh +++ b/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh @@ -1,6 +1,10 @@ #!/usr/bin/env bash BASE_FOLDER=$(dirname $(readlink -f $0))"/"; +PACKAGE_DOWNLOAD="${BASE_FOLDER}package-download/"; +if [ ! -d "${PACKAGE_DOWNLOAD}" ]; then + mkdir "${PACKAGE_DOWNLOAD}"; +fi; VERSION=$(git tag --list | sort -V | tail -n1 | sed -e "s/^v//"); file_last_published="${BASE_FOLDER}last.published"; go_flag="$1"; @@ -19,6 +23,7 @@ if [ -f "${file_last_published}" ]; then fi; # read in the .env.deploy file and we must have +# GITEA_UPLOAD_FILENAME # GITLAB_USER # GITLAB_TOKEN # GITLAB_URL @@ -45,17 +50,18 @@ fi; echo "[START]"; # gitea -if [ ! -z "${GITEA_URL_DL}" ] && [ ! -z "${GITEA_URL_PUSH}" ] && +if [ ! -z "${GITEA_UPLOAD_FILENAME}" ] && + [ ! -z "${GITEA_URL_DL}" ] && [ ! -z "${GITEA_URL_PUSH}" ] && [ ! -z "${GITEA_USER}" ] && [ ! -z "${GITEA_TOKEN}" ]; then curl -LJO \ - --output-dir "${BASE_FOLDER}" \ + --output-dir "${PACKAGE_DOWNLOAD}" \ ${GITEA_URL_DL}/v${VERSION}.zip; curl --user ${GITEA_USER}:${GITEA_TOKEN} \ - --upload-file "${BASE_FOLDER}/CoreLibs-Composer-All-v${VERSION}.zip" \ + --upload-file "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" \ ${GITEA_URL_PUSH}?version=${VERSION}; echo "${VERSION}" > "${file_last_published}"; else - echo "Missing either GITEA_USER or GITEA_TOKEN environment variable"; + echo "Missing either GITEA_UPLOAD_FILENAME, GITEA_URL_DL, GITEA_URL_PUSH, GITEA_USER or GITEA_TOKEN environment variable"; fi; # gitlab diff --git a/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php b/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php index 9522d52c..2a38c219 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php @@ -240,7 +240,7 @@ class Login if (false === $this->loginSetOptions($options)) { // on failure, exit echo "Could not set options"; - $this->loginTerminate(4000); + $this->loginTerminate('Could not set options', 3000); } // string key, msg: string, flag: e (error), o (ok) @@ -392,11 +392,18 @@ class Login /** * Wrapper for exit calls * - * @param int $code + * @param string $message [=''] + * @param int $code [=0] * @return void */ - protected function loginTerminate($code = 0): void + protected function loginTerminate(string $message = '', int $code = 0): void { + // all below 1000 are info end, all above 1000 are critical -> should throw exception? + if ($code < 1000) { + $this->log->info($message, ['code' => $code]); + } else { + $this->log->critical($message, ['code' => $code]); + } exit($code); } @@ -1810,14 +1817,14 @@ HTML; $this->login_error = 1; echo 'Could not connect to DB
'; // if I can't connect to the DB to auth exit hard. No access allowed - $this->loginTerminate(1000); + $this->loginTerminate('Could not connect to DB', 1000); } // initial the session if there is no session running already // check if session exists and could be created if ($this->session->checkActiveSession() === false) { $this->login_error = 2; echo 'No active session found'; - $this->loginTerminate(2000); + $this->loginTerminate('No active session found', 2000); } // set internal page name $this->page_name = $this->loginReadPageName(); @@ -1916,7 +1923,7 @@ HTML; $this->loginPrintLogin(); } // exit so we don't process anything further, at all - $this->loginTerminate(3000); + $this->loginTerminate('Exit after non ajax page load', 100); } else { // if we are on an ajax page reset any POST/GET array data to avoid // any accidentical processing going on @@ -1924,7 +1931,7 @@ HTML; $_GET = []; // set the action to login so we can trigger special login html return $_POST['action'] = 'login'; - $_POST['login_exit'] = 3000; + $_POST['login_exit'] = 100; $_POST['login_error'] = $this->loginGetLastErrorCode(); $_POST['login_error_text'] = $this->loginGetErrorMsg( $this->loginGetLastErrorCode(), diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Check/Colors.php b/www/vendor/egrajp/corelibs-composer-all/src/Check/Colors.php index 466ff133..d896664a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Check/Colors.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Check/Colors.php @@ -14,8 +14,6 @@ declare(strict_types=1); namespace CoreLibs\Check; -use Exception; - class Colors { /** @var int 1 for HEX rgb */ @@ -41,6 +39,7 @@ class Colors * @param int|false $rgb_flag flag to check for rgb * @param int|false $hsl_flag flag to check for hsl type * @return bool True if no error, False if error + * @throws \UnexpectedValueException 1: cannot extract color from string */ private static function rgbHslContentCheck( string $color, @@ -52,7 +51,7 @@ class Colors if ( !is_array($color_list = preg_split("/,\s*/", $matches[1] ?? '')) ) { - throw new \Exception("Could not extract color list from rgg/hsl", 3); + throw new \UnexpectedValueException("Could not extract color list from rgg/hsl", 1); } // based on rgb/hsl settings check that entries are valid // rgb: either 0-255 OR 0-100% @@ -124,7 +123,8 @@ class Colors * @param int $flags defaults to ALL, else use | to combined from * HEX_RGB, HEX_RGBA, RGB, RGBA, HSL, HSLA * @return bool True if valid, False if not - * @throws Exception 1: no valid flag set + * @throws \UnexpectedValueException 1: no valid flag set + * @throws \InvalidArgumentException 2: no regex block set */ public static function validateColor(string $color, int $flags = self::ALL): bool { @@ -152,10 +152,10 @@ class Colors } // wrong flag set if ($flags > self::ALL) { - throw new \Exception("Invalid flags parameter: $flags", 1); + throw new \UnexpectedValueException("Invalid flags parameter: $flags", 1); } if (!count($regex_blocks)) { - throw new \Exception("No regex blocks set: $flags", 2); + throw new \InvalidArgumentException("No regex blocks set: $flags", 2); } // build regex diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Check/Encoding.php b/www/vendor/egrajp/corelibs-composer-all/src/Check/Encoding.php index 3141e432..577cf9b9 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Check/Encoding.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Check/Encoding.php @@ -90,27 +90,26 @@ class Encoding $temp = mb_convert_encoding($string, $to_encoding, $from_encoding); $compare = mb_convert_encoding($temp, $from_encoding, $to_encoding); // if string does not match anymore we have a convert problem - if ($string != $compare) { - $failed = []; - // go through each character and find the ones that do not match - for ($i = 0, $iMax = mb_strlen($string, $from_encoding); $i < $iMax; $i++) { - $char = mb_substr($string, $i, 1, $from_encoding); - $r_char = mb_substr($compare, $i, 1, $from_encoding); - // the ord 194 is a hack to fix the IE7/IE8 - // bug with line break and illegal character - if ( - (($char != $r_char && (!self::$mb_error_char || - in_array(self::$mb_error_char, ['none', 'long', 'entity']))) || - ($char != $r_char && $r_char == self::$mb_error_char && self::$mb_error_char)) && - ord($char) != 194 - ) { - $failed[] = $char; - } - } - return $failed; - } else { + if ($string == $compare) { return false; } + $failed = []; + // go through each character and find the ones that do not match + for ($i = 0, $iMax = mb_strlen($string, $from_encoding); $i < $iMax; $i++) { + $char = mb_substr($string, $i, 1, $from_encoding); + $r_char = mb_substr($compare, $i, 1, $from_encoding); + // the ord 194 is a hack to fix the IE7/IE8 + // bug with line break and illegal character + if ( + (($char != $r_char && (!self::$mb_error_char || + in_array(self::$mb_error_char, ['none', 'long', 'entity']))) || + ($char != $r_char && $r_char == self::$mb_error_char && self::$mb_error_char)) && + ord($char) != 194 + ) { + $failed[] = $char; + } + } + return $failed; } } diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Combined/ArrayHandler.php b/www/vendor/egrajp/corelibs-composer-all/src/Combined/ArrayHandler.php index a7cb5f1f..d664310c 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Combined/ArrayHandler.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Combined/ArrayHandler.php @@ -245,14 +245,13 @@ class ArrayHandler * bool key flag: true: handle keys as string or int * default false: all keys are string * - * @return array|false merged array + * @return array merged array */ - public static function arrayMergeRecursive(): array|false + public static function arrayMergeRecursive(): array { // croak on not enough arguemnts (we need at least two) if (func_num_args() < 2) { - trigger_error(__FUNCTION__ . ' needs two or more array arguments', E_USER_WARNING); - return false; + throw new \ArgumentCountError(__FUNCTION__ . ' needs two or more array arguments'); } // default key is not string $key_is_string = false; @@ -265,15 +264,13 @@ class ArrayHandler } // check that arrays count is at least two, else we don't have enough to do anything if (count($arrays) < 2) { - trigger_error(__FUNCTION__ . ' needs two or more array arguments', E_USER_WARNING); - return false; + throw new \ArgumentCountError(__FUNCTION__ . ' needs two or more array arguments'); } $merged = []; while ($arrays) { $array = array_shift($arrays); if (!is_array($array)) { - trigger_error(__FUNCTION__ . ' encountered a non array argument', E_USER_WARNING); - return false; + throw new \TypeError(__FUNCTION__ . ' encountered a non array argument'); } if (!$array) { continue; diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Combined/DateTime.php b/www/vendor/egrajp/corelibs-composer-all/src/Combined/DateTime.php index 27917886..a807a39d 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Combined/DateTime.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Combined/DateTime.php @@ -105,49 +105,48 @@ class DateTime bool $show_micro = true ): string { // check if the timestamp has any h/m/s/ms inside, if yes skip - if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) { - list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null); - // if negative remember - $negative = false; - if ((int)$timestamp < 0) { - $negative = true; - } - $timestamp = abs((float)$timestamp); - $timegroups = [86400, 3600, 60, 1]; - $labels = ['d', 'h', 'm', 's']; - $time_string = ''; - // if timestamp is zero, return zero string - if ($timestamp == 0) { - $time_string = '0s'; - } else { - for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) { - $output = floor((float)$timestamp / $timegroups[$i]); - $timestamp = (float)$timestamp % $timegroups[$i]; - // output has days|hours|min|sec - if ($output || $time_string) { - $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : ''); - } - } - } - // only add ms if we have an ms value - if ($ms !== null) { - // if we have ms and it has leading zeros, remove them, but only if it is nut just 0 - $ms = preg_replace("/^0+(\d+)$/", '${1}', $ms); - if (!is_string($ms) || empty($ms)) { - $ms = '0'; - } - // add ms if there - if ($show_micro) { - $time_string .= ' ' . $ms . 'ms'; - } elseif (!$time_string) { - $time_string .= $ms . 'ms'; - } - } - if ($negative) { - $time_string = '-' . $time_string; - } + if (preg_match("/(h|m|s|ms)/", (string)$timestamp)) { + return (string)$timestamp; + } + list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null); + // if negative remember + $negative = false; + if ((int)$timestamp < 0) { + $negative = true; + } + $timestamp = abs((float)$timestamp); + $timegroups = [86400, 3600, 60, 1]; + $labels = ['d', 'h', 'm', 's']; + $time_string = ''; + // if timestamp is zero, return zero string + if ($timestamp == 0) { + $time_string = '0s'; } else { - $time_string = $timestamp; + for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) { + $output = floor((float)$timestamp / $timegroups[$i]); + $timestamp = (float)$timestamp % $timegroups[$i]; + // output has days|hours|min|sec + if ($output || $time_string) { + $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : ''); + } + } + } + // only add ms if we have an ms value + if ($ms !== null) { + // if we have ms and it has leading zeros, remove them, but only if it is nut just 0 + $ms = preg_replace("/^0+(\d+)$/", '${1}', $ms); + if (!is_string($ms) || empty($ms)) { + $ms = '0'; + } + // add ms if there + if ($show_micro) { + $time_string .= ' ' . $ms . 'ms'; + } elseif (!$time_string) { + $time_string .= $ms . 'ms'; + } + } + if ($negative) { + $time_string = '-' . $time_string; } return (string)$time_string; } @@ -162,37 +161,36 @@ class DateTime public static function stringToTime(string|int|float $timestring): string|int|float { $timestamp = 0; - if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) { - $timestring = (string)$timestring; - // pos for preg match read + multiply factor - $timegroups = [2 => 86400, 4 => 3600, 6 => 60, 8 => 1]; - $matches = []; - // if start with -, strip and set negative - $negative = false; - if (preg_match("/^-/", $timestring)) { - $negative = true; - $timestring = substr($timestring, 1); - } - // preg match: 0: full string - // 2, 4, 6, 8 are the to need values - preg_match("/^((\d+)d ?)?((\d+)h ?)?((\d+)m ?)?((\d+)s ?)?((\d+)ms)?$/", $timestring, $matches); - // multiply the returned matches and sum them up. the last one (ms) is added with . - foreach ($timegroups as $i => $time_multiply) { - if (isset($matches[$i]) && is_numeric($matches[$i])) { - $timestamp += (float)$matches[$i] * $time_multiply; - } - } - if (isset($matches[10]) && is_numeric($matches[10])) { - $timestamp .= '.' . $matches[10]; - } - if ($negative) { - // cast to flaot so we can do a negative multiplication - $timestamp = (float)$timestamp * -1; - } - return $timestamp; - } else { + if (!preg_match("/(d|h|m|s|ms)/", (string)$timestring)) { return $timestring; } + $timestring = (string)$timestring; + // pos for preg match read + multiply factor + $timegroups = [2 => 86400, 4 => 3600, 6 => 60, 8 => 1]; + $matches = []; + // if start with -, strip and set negative + $negative = false; + if (preg_match("/^-/", $timestring)) { + $negative = true; + $timestring = substr($timestring, 1); + } + // preg match: 0: full string + // 2, 4, 6, 8 are the to need values + preg_match("/^((\d+)d ?)?((\d+)h ?)?((\d+)m ?)?((\d+)s ?)?((\d+)ms)?$/", $timestring, $matches); + // multiply the returned matches and sum them up. the last one (ms) is added with . + foreach ($timegroups as $i => $time_multiply) { + if (isset($matches[$i]) && is_numeric($matches[$i])) { + $timestamp += (float)$matches[$i] * $time_multiply; + } + } + if (isset($matches[10]) && is_numeric($matches[10])) { + $timestamp .= '.' . $matches[10]; + } + if ($negative) { + // cast to flaot so we can do a negative multiplication + $timestamp = (float)$timestamp * -1; + } + return $timestamp; } /** @@ -323,36 +321,36 @@ class DateTime * * @param string $start_date start date string in YYYY-MM-DD * @param string $end_date end date string in YYYY-MM-DD - * @return int|bool false on error - * or int -1 (se) as difference + * @return int int -1 (se) as difference + * @throws \UnexpectedValueException On empty start/end values */ - public static function compareDate(string $start_date, string $end_date): int|bool + public static function compareDate(string $start_date, string $end_date): int { // pre check for empty or wrong - if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) { - return false; + if ($start_date == '--' || $end_date == '--' || empty($start_date) || empty($end_date)) { + throw new \UnexpectedValueException('Start or End date not set or are just "--"', 1); } // if invalid, quit if (($start_timestamp = strtotime($start_date)) === false) { - return false; + throw new \UnexpectedValueException("Error parsing start date through strtotime()", 2); } if (($end_timestamp = strtotime($end_date)) === false) { - return false; + throw new \UnexpectedValueException("Error parsing end date through strtotime()", 3); } + $comp = 0; // convert anything to Y-m-d and then to timestamp // this is to remove any time parts $start_timestamp = strtotime(date('Y-m-d', $start_timestamp)); $end_timestamp = strtotime(date('Y-m-d', $end_timestamp)); // compare, or end with false if ($start_timestamp < $end_timestamp) { - return -1; + $comp = -1; } elseif ($start_timestamp == $end_timestamp) { - return 0; + $comp = 0; } elseif ($start_timestamp > $end_timestamp) { - return 1; - } else { - return false; + $comp = 1; } + return $comp; } /** @@ -366,32 +364,32 @@ class DateTime * * @param string $start_datetime start date/time in YYYY-MM-DD HH:mm:ss * @param string $end_datetime end date/time in YYYY-MM-DD HH:mm:ss - * @return int|bool false for error - * or -1 (se) as difference + * @return int -1 (se) as difference + * @throws \UnexpectedValueException On empty start/end values */ - public static function compareDateTime(string $start_datetime, string $end_datetime): int|bool + public static function compareDateTime(string $start_datetime, string $end_datetime): int { // pre check for empty or wrong - if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) { - return false; + if ($start_datetime == '--' || $end_datetime == '--' || empty($start_datetime) || empty($end_datetime)) { + throw new \UnexpectedValueException('Start or end timestamp not set or are just "--"', 1); } // quit if invalid timestamp if (($start_timestamp = strtotime($start_datetime)) === false) { - return false; + throw new \UnexpectedValueException("Error parsing start timestamp through strtotime()", 2); } if (($end_timestamp = strtotime($end_datetime)) === false) { - return false; + throw new \UnexpectedValueException("Error parsing end timestamp through strtotime()", 3); } + $comp = 0; // compare, or return false if ($start_timestamp < $end_timestamp) { - return -1; + $comp = -1; } elseif ($start_timestamp == $end_timestamp) { - return 0; + $comp = 0; } elseif ($start_timestamp > $end_timestamp) { - return 1; - } else { - return false; + $comp = 1; } + return $comp; } /** diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Convert/Colors.php b/www/vendor/egrajp/corelibs-composer-all/src/Convert/Colors.php index 1c6f4b4c..f9f56171 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Convert/Colors.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Convert/Colors.php @@ -28,15 +28,15 @@ class Colors * @param int $green green 0-255 * @param int $blue blue 0-255 * @param bool $hex_prefix default true, prefix with "#" - * @return string|false rgb in hex values with leading # if set, - * false for invalid color + * @return string rgb in hex values with leading # if set, + * @throws \LengthException If any argument is not in the range of 0~255 */ public static function rgb2hex( int $red, int $green, int $blue, bool $hex_prefix = true - ): string|false { + ): string { $hex_color = ''; if ($hex_prefix === true) { $hex_color = '#'; @@ -44,7 +44,8 @@ class Colors foreach (['red', 'green', 'blue'] as $color) { // if not valid, abort if ($$color < 0 || $$color > 255) { - return false; + throw new \LengthException('Argument value ' . $$color . ' for color ' . $color + . ' is not in the range of 0 to 255', 1); } // pad left with 0 $hex_color .= str_pad(dechex($$color), 2, '0', STR_PAD_LEFT); @@ -55,37 +56,39 @@ class Colors /** * converts a hex RGB color to the int numbers * - * @param string $hexStr RGB hexstring + * @param string $hex_string RGB hexstring * @param bool $return_as_string flag to return as string * @param string $seperator string seperator: default: "," - * @return string|array|false false on error or array with RGB - * or a string with the seperator + * @return string|array array with RGB + * or a string with the seperator + * @throws \InvalidArgumentException if hex string is empty + * @throws \UnexpectedValueException if the hex string value is not valid */ public static function hex2rgb( - string $hexStr, + string $hex_string, bool $return_as_string = false, string $seperator = ',' - ): string|array|false { - $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string - if (!is_string($hexStr)) { - return false; + ): string|array { + $hex_string = preg_replace("/[^0-9A-Fa-f]/", '', $hex_string); // Gets a proper hex string + if (!is_string($hex_string)) { + throw new \InvalidArgumentException('hex_string argument cannot be empty', 1); } $rgbArray = []; - if (strlen($hexStr) == 6) { + if (strlen($hex_string) == 6) { // If a proper hex code, convert using bitwise operation. // No overhead... faster - $colorVal = hexdec($hexStr); + $colorVal = hexdec($hex_string); $rgbArray['r'] = 0xFF & ($colorVal >> 0x10); $rgbArray['g'] = 0xFF & ($colorVal >> 0x8); $rgbArray['b'] = 0xFF & $colorVal; - } elseif (strlen($hexStr) == 3) { + } elseif (strlen($hex_string) == 3) { // If shorthand notation, need some string manipulations - $rgbArray['r'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2)); - $rgbArray['g'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2)); - $rgbArray['b'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2)); + $rgbArray['r'] = hexdec(str_repeat(substr($hex_string, 0, 1), 2)); + $rgbArray['g'] = hexdec(str_repeat(substr($hex_string, 1, 1), 2)); + $rgbArray['b'] = hexdec(str_repeat(substr($hex_string, 2, 1), 2)); } else { // Invalid hex color code - return false; + throw new \UnexpectedValueException('Invalid hex_string: ' . $hex_string, 2); } // returns the rgb string or the associative array return $return_as_string ? implode($seperator, $rgbArray) : $rgbArray; @@ -97,20 +100,21 @@ class Colors * returns: * array with hue (0-360), sat (0-100%), brightness/value (0-100%) * - * @param int $red red 0-255 - * @param int $green green 0-255 - * @param int $blue blue 0-255 - * @return array|false Hue, Sat, Brightness/Value - * false for input value error + * @param int $red red 0-255 + * @param int $green green 0-255 + * @param int $blue blue 0-255 + * @return array Hue, Sat, Brightness/Value + * @throws \LengthException If any argument is not in the range of 0~255 */ - public static function rgb2hsb(int $red, int $green, int $blue): array|false + public static function rgb2hsb(int $red, int $green, int $blue): array { // check that rgb is from 0 to 255 - foreach (['red', 'green', 'blue'] as $c) { - if ($$c < 0 || $$c > 255) { - return false; + foreach (['red', 'green', 'blue'] as $color) { + if ($$color < 0 || $$color > 255) { + throw new \LengthException('Argument value ' . $$color . ' for color ' . $color + . ' is not in the range of 0 to 255', 1); } - $$c = $$c / 255; + $$color = $$color / 255; } $MAX = max($red, $green, $blue); @@ -144,13 +148,13 @@ class Colors * converts HSB/V to RGB values RGB is full INT * if HSB/V value is invalid, sets this value to 0 * - * @param float $H hue 0-360 (int) - * @param float $S saturation 0-100 (int) - * @param float $V brightness/value 0-100 (int) - * @return array|false 0 red/1 green/2 blue array as 0-255 - * false for input value error + * @param float $H hue 0-360 (int) + * @param float $S saturation 0-100 (int) + * @param float $V brightness/value 0-100 (int) + * @return array 0 red/1 green/2 blue array as 0-255 + * @throws \LengthException If any argument is not in the valid range */ - public static function hsb2rgb(float $H, float $S, float $V): array|false + public static function hsb2rgb(float $H, float $S, float $V): array { // check that H is 0 to 359, 360 = 0 // and S and V are 0 to 1 @@ -158,13 +162,13 @@ class Colors $H = 0; } if ($H < 0 || $H > 359) { - return false; + throw new \LengthException('Argument value ' . $H . ' for hue is not in the range of 0 to 359', 1); } if ($S < 0 || $S > 100) { - return false; + throw new \LengthException('Argument value ' . $S . ' for saturation is not in the range of 0 to 100', 2); } if ($V < 0 || $V > 100) { - return false; + throw new \LengthException('Argument value ' . $V . ' for brightness is not in the range of 0 to 100', 3); } // convert to internal 0-1 format $S /= 100; @@ -230,20 +234,21 @@ class Colors * return: * array with hue (0-360), saturation (0-100%) and luminance (0-100%) * - * @param int $red red 0-255 - * @param int $green green 0-255 - * @param int $blue blue 0-255 - * @return array|false hue/sat/luminance - * false for input value error + * @param int $red red 0-255 + * @param int $green green 0-255 + * @param int $blue blue 0-255 + * @return array hue/sat/luminance + * @throws \LengthException If any argument is not in the range of 0~255 */ - public static function rgb2hsl(int $red, int $green, int $blue): array|false + public static function rgb2hsl(int $red, int $green, int $blue): array { // check that rgb is from 0 to 255 - foreach (['red', 'green', 'blue'] as $c) { - if ($$c < 0 || $$c > 255) { - return false; + foreach (['red', 'green', 'blue'] as $color) { + if ($$color < 0 || $$color > 255) { + throw new \LengthException('Argument value ' . $$color . ' for color ' . $color + . ' is not in the range of 0 to 255', 1); } - $$c = $$c / 255; + $$color = $$color / 255; } $min = min($red, $green, $blue); @@ -284,24 +289,25 @@ class Colors * converts an HSL to RGB * if HSL value is invalid, set this value to 0 * - * @param float $hue hue: 0-360 (degrees) - * @param float $sat saturation: 0-100 - * @param float $lum luminance: 0-100 - * @return array|false red/blue/green 0-255 each + * @param float $hue hue: 0-360 (degrees) + * @param float $sat saturation: 0-100 + * @param float $lum luminance: 0-100 + * @return array red/blue/green 0-255 each + * @throws \LengthException If any argument is not in the valid range */ - public static function hsl2rgb(float $hue, float $sat, float $lum): array|false + public static function hsl2rgb(float $hue, float $sat, float $lum): array { if ($hue == 360) { $hue = 0; } if ($hue < 0 || $hue > 359) { - return false; + throw new \LengthException('Argument value ' . $hue . ' for hue is not in the range of 0 to 359', 1); } if ($sat < 0 || $sat > 100) { - return false; + throw new \LengthException('Argument value ' . $sat . ' for saturation is not in the range of 0 to 100', 2); } if ($lum < 0 || $lum > 100) { - return false; + throw new \LengthException('Argument value ' . $lum . ' for luminance is not in the range of 0 to 100', 3); } // calc to internal convert value for hue $hue = (1 / 360) * $hue; diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Create/Session.php b/www/vendor/egrajp/corelibs-composer-all/src/Create/Session.php index f7a0f7f7..ca3607e6 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Create/Session.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Create/Session.php @@ -15,9 +15,6 @@ namespace CoreLibs\Create; class Session { - /** @var string list for errors */ - private string $session_intern_error_str = ''; - /** * init a session, if array is empty or array does not have session_name set * then no auto init is run @@ -71,17 +68,6 @@ class Session return true; } - /** - * Return set error string, empty if none set - * Error strings are only set in the startSession method - * - * @return string Last error string - */ - public function getErrorStr(): string - { - return $this->session_intern_error_str; - } - /** * check if session name is valid * @@ -120,13 +106,11 @@ class Session { // we can't start sessions on command line if ($this->checkCliStatus()) { - $this->session_intern_error_str = '[SESSION] No sessions in php cli'; - return false; + throw new \RuntimeException('[SESSION] No sessions in php cli', 1); } // if session are OFF if ($this->getSessionStatus() === PHP_SESSION_DISABLED) { - $this->session_intern_error_str = '[SESSION] Sessions are disabled'; - return false; + throw new \RuntimeException('[SESSION] Sessions are disabled', 2); } // session_status // initial the session if there is no session running already @@ -139,8 +123,7 @@ class Session if (!empty($session_name)) { // invalid session name, abort if (!$this->checkValidSessionName($session_name)) { - $this->session_intern_error_str = '[SESSION] Invalid session name: ' . $session_name; - return false; + throw new \UnexpectedValueException('[SESSION] Invalid session name: ' . $session_name, 3); } $this->setSessionName($session_name); } @@ -149,11 +132,10 @@ class Session } // if we still have no active session if (!$this->checkActiveSession()) { - $this->session_intern_error_str = '[SESSION] Failed to activate session'; - return false; + throw new \RuntimeException('[SESSION] Failed to activate session', 4); } if (false === ($session_id = $this->getSessionId())) { - $this->session_intern_error_str = '[SESSION] getSessionId did not return a session id'; + throw new \UnexpectedValueException('[SESSION] getSessionId did not return a session id', 5); } return $session_id; } diff --git a/www/vendor/egrajp/corelibs-composer-all/src/DB/Extended/ArrayIO.php b/www/vendor/egrajp/corelibs-composer-all/src/DB/Extended/ArrayIO.php index 9b6b734c..7c2ed514 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/DB/Extended/ArrayIO.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/DB/Extended/ArrayIO.php @@ -61,6 +61,7 @@ class ArrayIO extends \CoreLibs\DB\IO * @param \CoreLibs\Logging\Logging $log Logging class * @param int $base_acl_level Set base acl level, if needed * @param int $acl_admin Flag if this is an admin ACL access level + * @throws \RuntimeException Missing table array or table name entry */ public function __construct( array $db_config, @@ -83,6 +84,7 @@ class ArrayIO extends \CoreLibs\DB\IO // error abort if no table array or no table name if (empty($table_array) || empty($table_name)) { $this->__dbError(1999, false, 'MAJOR ERROR: Core settings missing'); + throw new \RuntimeException('MAJOR ERROR: Core settings missing', 1999); } // set primary key for given table_array diff --git a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php index 398ba1ce..4486b9a4 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php @@ -340,6 +340,7 @@ class IO // 4: convert numeric/floatN to float (CONVERT_NUMERIC) // 8: convert bytea to string data (CONVERT_BYTEA) /** @var int type settings as bit mask, 0 for off, anything >2 will aways set 1 too */ + /** @phan-suppress-next-line PhanInvalidConstantExpression, PhanUndeclaredClassConstant */ private int $convert_type = Convert::off->value; // FOR BELOW: (This should be private and only readable through some method) // cursor array for cached readings @@ -413,6 +414,7 @@ class IO * phpcs:ignore * @param array{db_name:string,db_user:string,db_pass:string,db_host:string,db_port:int,db_schema:string,db_encoding:string,db_type:string,db_ssl:string,db_convert_type?:string[]} $db_config DB configuration array * @param \CoreLibs\Logging\Logging $log Logging class + * @throws \RuntimeException If no DB connection can be established on launch */ public function __construct( array $db_config, @@ -491,6 +493,7 @@ class IO if (!$this->__connectToDB()) { $this->__dbError(16); $this->db_connection_closed = true; + throw new \RuntimeException('INIT: No DB Handler found / connect or reconnect failed', 16); } } @@ -973,9 +976,9 @@ class IO /** * write an error * - * @param integer $error_id Any Error ID, used in debug message string + * @param integer $error_id Any Error ID, used in debug message string * @param \PgSql\Result|false $cursor Optional cursor, passed on to preprocessor - * @param string $msg optional message added to debug + * @param string $msg optional message added to debug * @return void */ protected function __dbError( diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Debug/FileWriter.php b/www/vendor/egrajp/corelibs-composer-all/src/Debug/FileWriter.php index c7105bbf..d51f6923 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Debug/FileWriter.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Debug/FileWriter.php @@ -63,7 +63,7 @@ class FileWriter * * @param string $string string to write to the file * @param boolean $enter default true, if set adds a linebreak \n at the end - * @return bool True for log written, false for not wirrten + * @return bool True for log written, false for not written */ public static function fdebug(string $string, bool $enter = true): bool { @@ -75,7 +75,7 @@ class FileWriter empty(self::$debug_folder) && defined('BASE') && defined('LOG') ) { - /** @deprecated Do not use this anymore, define path with fsetFolder */ + /** @deprecated Do not use this anymore, define path with festFolder */ trigger_error( 'fsetFolder must be set first. Setting via LOG_FILE_ID and LOG constants is deprecated', E_USER_DEPRECATED diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php b/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php index dcf97a74..2703415b 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php @@ -254,7 +254,7 @@ class L10n } // if this is still null here, we abort if ($this->l10n === null) { - throw new \Exception( + throw new \RuntimeException( "Could not create CoreLibs\Language\Core\GetTextReader object", E_USER_ERROR ); diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Output/Image.php b/www/vendor/egrajp/corelibs-composer-all/src/Output/Image.php index f530ec01..5af6ce3f 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Output/Image.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Output/Image.php @@ -23,7 +23,8 @@ class Image * if empty ROOT is choosen * @param string $cache_source cache path, if not given TMP is used * @param bool $clear_cache if set to true, will create thumb all the tame - * @return string|false thumbnail name, or false for error + * @return string thumbnail name + * @throws \RuntimeException no ImageMagick convert command found */ public static function createThumbnail( string $pic, @@ -33,7 +34,7 @@ class Image string $path = '', string $cache_source = '', bool $clear_cache = false - ): string|false { + ): string { // get image type flags $image_types = [ 0 => 'UNKOWN-IMAGE', @@ -41,7 +42,7 @@ class Image 2 => 'jpg', 3 => 'png' ]; - $return_data = false; + $return_data = ''; $CONVERT = ''; // if CONVERT is not defined, abort /** @phan-suppress-next-line PhanUndeclaredConstant */ @@ -49,7 +50,7 @@ class Image /** @phan-suppress-next-line PhanUndeclaredConstant */ $CONVERT = CONVERT; } else { - return $return_data; + throw new \RuntimeException('CONVERT set binary is not executable or CONVERT is not defined'); } if (!empty($cache_source)) { $tmp_src = $cache_source; @@ -69,72 +70,7 @@ class Image $pic = $tmp[(count($tmp) - 1)]; } // does this picture exist and is it a picture - if (file_exists($filename) && is_file($filename)) { - [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0]; - $convert_prefix = ''; - $create_file = false; - $delete_filename = ''; - // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png - if (!$type) { - $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3]; - if (!is_file($check_thumb)) { - $create_file = true; - } else { - $type = 3; - } - } - // if type is not in the list, but returns as PDF, we need to convert to JPEG before - if (!$type) { - $output = []; - $return = null; - // is this a PDF, if no, return from here with nothing - $convert_prefix = 'png:'; - # TEMP convert to PNG, we then override the file name - $convert_string = $CONVERT . ' ' . $filename . ' ' . $convert_prefix . $filename . '_TEMP'; - $status = exec($convert_string, $output, $return); - $filename .= '_TEMP'; - // for delete, in case we need to glob - $delete_filename = $filename; - // find file, if we can't find base name, use -0 as the first one (ignore other pages in multiple ones) - if (!is_file($filename)) { - $filename .= '-0'; - } - [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0]; - } - // if no size given, set size to original - if (!$size_x || $size_x < 1) { - $size_x = $width; - } - if (!$size_y || $size_y < 1) { - $size_y = $height; - } - $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type]; - $thumbnail = $tmp_src . $thumb; - // check if we already have this picture converted - if (!is_file($thumbnail) || $clear_cache == true) { - // convert the picture - if ($width > $size_x) { - $convert_string = $CONVERT . ' -geometry ' . $size_x . 'x ' . $filename . ' ' . $thumbnail; - $status = exec($convert_string, $output, $return); - // get the size of the converted data, if converted - if (is_file($thumbnail)) { - [$width, $height, $type] = getimagesize($thumbnail) ?: [0, 0, 0]; - } - } - if ($height > $size_y) { - $convert_string = $CONVERT . ' -geometry x' . $size_y . ' ' . $filename . ' ' . $thumbnail; - $status = exec($convert_string, $output, $return); - } - } - if (!is_file($thumbnail)) { - copy($filename, $thumbnail); - } - $return_data = $thumb; - // if we have a delete filename, delete here with glob - if ($delete_filename) { - array_map('unlink', glob($delete_filename . '*') ?: []); - } - } else { + if (!file_exists($filename) || !is_file($filename)) { if (!empty($dummy) && strstr($dummy, '/') === false) { // check if we have the "dummy" image flag set $filename = PICTURES . ICONS . strtoupper($dummy) . ".png"; @@ -142,11 +78,77 @@ class Image if (!empty($dummy) && file_exists($filename) && is_file($filename)) { $return_data = $filename; } else { - $return_data = false; + throw new \Exception('Could not set dummy return file: ' . $dummy . ' in ' . $filename); } } else { - $filename = $dummy; + $return_data = $dummy; } + return $return_data; + } + // resize image + [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0]; + $convert_prefix = ''; + $create_file = false; + $delete_filename = ''; + // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png + if (!$type) { + $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3]; + if (!is_file($check_thumb)) { + $create_file = true; + } else { + $type = 3; + } + } + // if type is not in the list, but returns as PDF, we need to convert to JPEG before + if (!$type) { + $output = []; + $return = null; + // is this a PDF, if no, return from here with nothing + $convert_prefix = 'png:'; + # TEMP convert to PNG, we then override the file name + $convert_string = $CONVERT . ' ' . $filename . ' ' . $convert_prefix . $filename . '_TEMP'; + $status = exec($convert_string, $output, $return); + $filename .= '_TEMP'; + // for delete, in case we need to glob + $delete_filename = $filename; + // find file, if we can't find base name, use -0 as the first one (ignore other pages in multiple ones) + if (!is_file($filename)) { + $filename .= '-0'; + } + [$width, $height, $type] = getimagesize($filename) ?: [0, 0, 0]; + } + // if no size given, set size to original + if (!$size_x || $size_x < 1) { + $size_x = $width; + } + if (!$size_y || $size_y < 1) { + $size_y = $height; + } + $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type]; + $thumbnail = $tmp_src . $thumb; + // check if we already have this picture converted + if (!is_file($thumbnail) || $clear_cache == true) { + // convert the picture + if ($width > $size_x) { + $convert_string = $CONVERT . ' -geometry ' . $size_x . 'x ' . $filename . ' ' . $thumbnail; + $status = exec($convert_string, $output, $return); + // get the size of the converted data, if converted + if (is_file($thumbnail)) { + [$width, $height, $type] = getimagesize($thumbnail) ?: [0, 0, 0]; + } + } + if ($height > $size_y) { + $convert_string = $CONVERT . ' -geometry x' . $size_y . ' ' . $filename . ' ' . $thumbnail; + $status = exec($convert_string, $output, $return); + } + } + if (!is_file($thumbnail)) { + copy($filename, $thumbnail); + } + $return_data = $thumb; + // if we have a delete filename, delete here with glob + if ($delete_filename) { + array_map('unlink', glob($delete_filename . '*') ?: []); } return $return_data; } @@ -173,7 +175,9 @@ class Image * set to false to not use (default true) * to use quick but less nice version * @param int $jpeg_quality default 80, set image quality for jpeg only - * @return string|false thumbnail with path + * @return string thumbnail with path + * @throws \UnexpectedValueException input values for filename or cache_folder are wrong + * @throws \RuntimeException convert (gd) failed */ public static function createThumbnailSimple( string $filename, @@ -185,8 +189,9 @@ class Image bool $use_cache = true, bool $high_quality = true, int $jpeg_quality = 80 - ): string|false { + ): string { $thumbnail = false; + $exception_message = 'Could not create thumbnail'; // $this->debug('IMAGE PREPARE', "FILE: $filename (exists " // .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height"); if ( @@ -210,12 +215,17 @@ class Image } // check that input image exists and is either jpeg or png // also fail if the basic CACHE folder does not exist at all - if ( - !file_exists($filename) || - !is_dir($cache_folder) || - !is_writable($cache_folder) - ) { - return $thumbnail; + if (!file_exists($filename)) { + // return $thumbnail; + throw new \UnexpectedValueException('Missing image file: ' . $filename); + } + if (!is_dir($cache_folder)) { + // return $thumbnail; + throw new \UnexpectedValueException('Cache folder is not a directory: ' . $cache_folder); + } + if (!is_writable($cache_folder)) { + // return $thumbnail; + throw new \UnexpectedValueException('Cache folder is not writeable: ' . $cache_folder); } // $this->debug('IMAGE PREPARE', "FILENAME OK, THUMB WIDTH/HEIGHT OK"); [$inc_width, $inc_height, $img_type] = getimagesize($filename) ?: [0, 0, null]; @@ -280,12 +290,18 @@ class Image // image, copy source image, offset in image, source x/y, new size, source image size $thumb = imagecreatetruecolor($thumb_width_r, $thumb_height_r); if ($thumb === false) { - return false; + throw new \RuntimeException( + 'imagecreatetruecolor failed: ' . $thumbnail . ', ' . $filename, + 1 + ); } if ($img_type == IMAGETYPE_PNG) { $imagecolorallocatealpha = imagecolorallocatealpha($thumb, 0, 0, 0, 127); if ($imagecolorallocatealpha === false) { - return false; + throw new \RuntimeException( + 'imagecolorallocatealpha failed: ' . $thumbnail . ', ' . $filename, + 2 + ); } // preservere transaprency imagecolortransparent( @@ -347,7 +363,10 @@ class Image imagedestroy($source); imagedestroy($thumb); } else { - $thumbnail = false; + throw new \RuntimeException( + 'Invalid source image file. Only JPEG/PNG are allowed: ' . $filename, + 3 + ); } } } else { @@ -388,14 +407,20 @@ class Image } $thumb = imagecreatetruecolor($thumb_width, $thumb_height); if ($thumb === false) { - return false; + throw new \RuntimeException( + 'imagecreatetruecolor dummy failed: ' . $thumbnail . ', ' . $filename, + 3 + ); } // add outside border px = 5% (rounded up) // eg 50px -> 2.5px $gray = imagecolorallocate($thumb, 200, 200, 200); $white = imagecolorallocate($thumb, 255, 255, 255); if ($gray === false || $white === false) { - return false; + throw new \RuntimeException( + 'imagecolorallocate/imagecolorallocate dummy failed: ' . $thumbnail . ', ' . $filename, + 2 + ); } // fill gray background imagefill($thumb, 0, 0, $gray); @@ -430,7 +455,11 @@ class Image // add web path $thumbnail = $thumbnail_web_path . $thumbnail; } - // either return false or the thumbnail name + output path web + // if still false -> throw exception + if ($thumbnail === false) { + throw new \RuntimeException($exception_message); + } + // else return the thumbnail name + output path web return $thumbnail; } diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php b/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php index b106cea1..2586e94a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php @@ -27,6 +27,7 @@ class SymmetricEncryption * @param string $message Message to encrypt * @param string $key Encryption key (as hex string) * @return string + * @throws \Exception * @throws \RangeException */ public static function encrypt(string $message, string $key): string @@ -34,7 +35,7 @@ class SymmetricEncryption try { $key = CreateKey::hex2bin($key); } catch (SodiumException $e) { - throw new \Exception('Invalid hex key'); + throw new \UnexpectedValueException('Invalid hex key'); } if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { throw new \RangeException( @@ -84,10 +85,10 @@ class SymmetricEncryption $key ); } catch (SodiumException $e) { - throw new \Exception('Invalid ciphertext (too short)'); + throw new \UnexpectedValueException('Invalid ciphertext (too short)'); } if (!is_string($plain)) { - throw new \Exception('Invalid Key'); + throw new \UnexpectedValueException('Invalid Key'); } sodium_memzero($ciphertext); sodium_memzero($key); diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php index 60958dcf..e2a28b0e 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php @@ -167,8 +167,10 @@ final class CoreLibsACLLoginTest extends TestCase // change_password, pw_username, pw_old_password, pw_new_password, // pw_new_password_confirm // 3[session]: override session set - // 4[error] : expected error code, 0 for all ok, 3000 for login page view - // note that 1000 (no db), 2000 (no session) must be tested too + // 4[error] : expected error code, 0 for all ok, 100 for login page view + // note that 1000 (no db), 2000 (no session), 3000 (options set error) + // must be tested too + // <1000 info, >=1000 critical error // 5[return] : expected return array, eg login_error code, // or other info data to match $tests = [ @@ -180,7 +182,7 @@ final class CoreLibsACLLoginTest extends TestCase [], [], [], - 3000, + 100, [ 'login_error' => 0, 'error_string' => 'Success: No error', @@ -198,7 +200,7 @@ final class CoreLibsACLLoginTest extends TestCase [], [], [], - 3000, + 100, [ 'login_error' => 0, 'error_string' => 'Success: No error', @@ -221,7 +223,7 @@ final class CoreLibsACLLoginTest extends TestCase [], [], [], - 3000, + 100, [ 'login_error' => 0, 'error_string' => 'Success: No error', @@ -308,7 +310,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => '', ], [], - 3000, + 100, [ 'login_error' => 102, 'error_string' => 'Fatal Error: ' @@ -329,7 +331,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'abc', ], [], - 3000, + 100, [ 'login_error' => 102, 'error_string' => 'Fatal Error: ' @@ -350,7 +352,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => '', ], [], - 3000, + 100, [ 'login_error' => 102, 'error_string' => 'Fatal Error: ' @@ -371,7 +373,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'abc', ], [], - 3000, + 100, [ 'login_error' => 1010, 'error_string' => 'Fatal Error: ' @@ -395,7 +397,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'abc', ], [], - 3000, + 100, [ // default password is plain text 'login_error' => 1012, @@ -421,7 +423,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 106, 'error_string' => 'Fatal Error: ' @@ -446,7 +448,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 104, 'error_string' => 'Fatal Error: ' @@ -471,7 +473,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 105, 'error_string' => 'Fatal Error: ' @@ -520,7 +522,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 107, 'error_string' => 'Fatal Error: ' @@ -574,7 +576,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 107, 'error_string' => 'Fatal Error: ' @@ -600,7 +602,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 107, 'error_string' => 'Fatal Error: ' @@ -625,7 +627,7 @@ final class CoreLibsACLLoginTest extends TestCase 'login_password' => 'admin', ], [], - 3000, + 100, [ 'login_error' => 108, 'error_string' => 'Fatal Error: ' @@ -761,7 +763,7 @@ final class CoreLibsACLLoginTest extends TestCase ], [], [], - 3000, + 100, [ 'login_error' => 1010, 'error_string' => 'Fatal Error: ' @@ -853,7 +855,7 @@ final class CoreLibsACLLoginTest extends TestCase ], [], [], - 3000, + 100, [ 'login_error' => 1101, 'error_string' => 'Fatal Error: ' @@ -909,7 +911,7 @@ final class CoreLibsACLLoginTest extends TestCase ], [], [], - 3000, + 100, [ 'login_error' => 1102, 'error_string' => 'Fatal Error: ' @@ -965,7 +967,7 @@ final class CoreLibsACLLoginTest extends TestCase ], [], [], - 3000, + 100, [ 'login_error' => 1102, 'error_string' => 'Fatal Error: ' @@ -992,7 +994,7 @@ final class CoreLibsACLLoginTest extends TestCase ], [], [], - 3000, + 100, [ 'login_error' => 1102, 'error_string' => 'Fatal Error: ' @@ -1133,7 +1135,7 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->expects($this->any()) ->method('loginTerminate') ->will( - $this->returnCallback(function ($code) { + $this->returnCallback(function ($message, $code) { throw new \Exception('', $code); }) ); @@ -1227,7 +1229,11 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->loginSetMaxLoginErrorCount($mock_settings['max_login_error_count']); // temporary wrong password $_POST['login_password'] = 'wrong'; - for ($run = 1, $max_run = $login_mock->loginGetMaxLoginErrorCount(); $run <= $max_run; $run++) { + for ( + $run = 1, $max_run = $login_mock->loginGetMaxLoginErrorCount(); + $run <= $max_run; + $run++ + ) { try { $login_mock->loginMainCall(); } catch (\Exception $e) { @@ -1475,10 +1481,10 @@ final class CoreLibsACLLoginTest extends TestCase // print "AJAX: " . $login_mock->loginGetAjaxFlag() . "\n"; // print "AJAX GLOBAL: " . ($GLOBALS['AJAX_PAGE'] ?? '{f}') . "\n"; // print "Login error expext: " . ($expected['login_error'] ?? '{0}') . "\n"; - // if this is 3000, then we do further error checks + // if this is 100, then we do further error checks if ( - $e->getCode() == 3000 || - !empty($_POST['login_exit']) && $_POST['login_exit'] == 3000 + $e->getCode() == 100 || + !empty($_POST['login_exit']) && $_POST['login_exit'] == 100 ) { $this->assertEquals( $expected['login_error'], @@ -1816,7 +1822,7 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->expects($this->any()) ->method('loginTerminate') ->will( - $this->returnCallback(function ($code) { + $this->returnCallback(function ($message, $code) { throw new \Exception('', $code); }) ); @@ -1930,7 +1936,7 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->expects($this->any()) ->method('loginTerminate') ->will( - $this->returnCallback(function ($code) { + $this->returnCallback(function ($message, $code) { throw new \Exception('', $code); }) ); @@ -2018,7 +2024,7 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->expects($this->any()) ->method('loginTerminate') ->will( - $this->returnCallback(function ($code) { + $this->returnCallback(function ($message, $code) { throw new \Exception('', $code); }) ); @@ -2114,7 +2120,7 @@ final class CoreLibsACLLoginTest extends TestCase $login_mock->expects($this->any()) ->method('loginTerminate') ->will( - $this->returnCallback(function ($code) { + $this->returnCallback(function ($message, $code) { throw new \Exception('', $code); }) ); diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Check/CoreLibsCheckColorsTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Check/CoreLibsCheckColorsTest.php index 7386bf76..3eeb59c9 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Check/CoreLibsCheckColorsTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Check/CoreLibsCheckColorsTest.php @@ -13,6 +13,11 @@ use PHPUnit\Framework\TestCase; */ final class CoreLibsCheckColorsTest extends TestCase { + /** + * Undocumented function + * + * @return array + */ public function validateColorProvider(): array { /* @@ -321,7 +326,7 @@ final class CoreLibsCheckColorsTest extends TestCase */ public function testValidateColorException(int $flag): void { - $this->expectException(\Exception::class); + $this->expectException(\UnexpectedValueException::class); \CoreLibs\Check\Colors::validateColor('#ffffff', $flag); } } diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php index 2965010a..25ade3a5 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedArrayHandlerTest.php @@ -518,17 +518,20 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase return [ // error <2 arguments 'too view arguments' => [ + 'ArgumentCountError', 'arrayMergeRecursive needs two or more array arguments', [1] ], // error <2 arrays 'only one array' => [ + 'ArgumentCountError', 'arrayMergeRecursive needs two or more array arguments', [1], true, ], // error element is not array 'non array between array' => [ + 'TypeError', 'arrayMergeRecursive encountered a non array argument', [1], 'string', @@ -947,18 +950,20 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase */ public function testArrayMergeRecursiveWarningA(): void { - set_error_handler( - static function (int $errno, string $errstr): never { - throw new Exception($errstr, $errno); - }, - E_USER_WARNING - ); + // set_error_handler( + // static function (int $errno, string $errstr): never { + // throw new Exception($errstr, $errno); + // }, + // E_USER_WARNING + // ); $arrays = func_get_args(); // first is expected warning + $exception = array_shift($arrays); $warning = array_shift($arrays); // phpunit 10.0 compatible + $this->expectException($exception); $this->expectExceptionMessage($warning); \CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(...$arrays); diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php index ddc03cad..7bd68d6a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Combined/CoreLibsCombinedDateTimeTest.php @@ -309,45 +309,73 @@ final class CoreLibsCombinedDateTimeTest extends TestCase '2020-12-12', '2021-12-12', -1, + null, + null, ], 'dates equal' => [ '2020-12-12', '2020-12-12', 0, + null, + null, ], 'second date smaller' => [ '2021-12-12', '2020-12-12', - 1 + 1, + null, + null, ], 'dates equal with different time' => [ '2020-12-12 12:12:12', '2020-12-12 13:13:13', 0, + null, + null, ], 'invalid dates --' => [ '--', '--', - false + false, + 'UnexpectedValueException', + 1, ], 'empty dates' => [ '', '', - false + false, + 'UnexpectedValueException', + 1 ], 'invalid dates' => [ 'not a date', 'not a date either', false, + 'UnexpectedValueException', + 2 + ], + 'invalid end date' => [ + '1990-01-01', + 'not a date either', + false, + 'UnexpectedValueException', + 3 ], 'out of bound dates' => [ '1900-1-1', '9999-12-31', - -1 + -1, + null, + null, ] ]; } + /** + * Undocumented function + * + * @return array + */ public function dateTimeCompareProvider(): array { return [ @@ -355,51 +383,85 @@ final class CoreLibsCombinedDateTimeTest extends TestCase '2020-12-12', '2021-12-12', -1, + null, + null, ], 'dates equal no timestamp' => [ '2020-12-12', '2020-12-12', 0, + null, + null, ], 'second date smaller no timestamp' => [ '2021-12-12', '2020-12-12', - 1 + 1, + null, + null, ], 'date equal first time smaller' => [ '2020-12-12 12:12:12', '2020-12-12 13:13:13', -1, + null, + null, ], 'date equal time equal' => [ '2020-12-12 12:12:12', '2020-12-12 12:12:12', 0, + null, + null, ], 'date equal second time smaller' => [ '2020-12-12 13:13:13', '2020-12-12 12:12:12', 1, + null, + null, ], 'valid date invalid time' => [ '2020-12-12 13:99:13', '2020-12-12 12:12:99', false, + 'UnexpectedValueException', + 2 + ], + 'valid date invalid end time' => [ + '2020-12-12 13:12:13', + '2020-12-12 12:12:99', + false, + 'UnexpectedValueException', + 3 ], 'invalid datetimes --' => [ '--', '--', false, + 'UnexpectedValueException', + 1 ], 'empty datetimess' => [ '', '', false, + 'UnexpectedValueException', + 1 ], - 'invalid datetimes' => [ + 'invalid date times' => [ 'not a date', 'not a date either', false, + 'UnexpectedValueException', + 2 + ], + 'invalid end date time' => [ + '1990-01-01 12:12:12', + 'not a date either', + false, + 'UnexpectedValueException', + 3 ], ]; } @@ -614,10 +676,21 @@ final class CoreLibsCombinedDateTimeTest extends TestCase * @param string $input_a * @param string $input_b * @param int|bool $expected + * @param string|null $exception + * @param int|null $exception_code * @return void */ - public function testCompareDate(string $input_a, string $input_b, $expected): void - { + public function testCompareDate( + string $input_a, + string $input_b, + int|bool $expected, + ?string $exception, + ?int $exception_code + ): void { + if ($expected === false) { + $this->expectException($exception); + $this->expectExceptionCode($exception_code); + } $this->assertEquals( $expected, \CoreLibs\Combined\DateTime::compareDate($input_a, $input_b) @@ -634,10 +707,21 @@ final class CoreLibsCombinedDateTimeTest extends TestCase * @param string $input_a * @param string $input_b * @param int|bool $expected + * @param string|null $exception + * @param int|null $exception_code * @return void */ - public function testCompareDateTime(string $input_a, string $input_b, $expected): void - { + public function testCompareDateTime( + string $input_a, + string $input_b, + int|bool $expected, + ?string $exception, + ?int $exception_code + ): void { + if ($expected === false) { + $this->expectException($exception); + $this->expectExceptionCode($exception_code); + } $this->assertEquals( $expected, \CoreLibs\Combined\DateTime::compareDateTime($input_a, $input_b) diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Convert/CoreLibsConvertColorsTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Convert/CoreLibsConvertColorsTest.php index 7b288f0c..aecd3f09 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Convert/CoreLibsConvertColorsTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Convert/CoreLibsConvertColorsTest.php @@ -59,6 +59,27 @@ final class CoreLibsConvertColorsTest extends TestCase 3 => false, 4 => false ], + 'invalid color red ' => [ + 0 => -12, + 1 => 12, + 2 => 12, + 3 => false, + 4 => false + ], + 'invalid color green ' => [ + 0 => 12, + 1 => -12, + 2 => 12, + 3 => false, + 4 => false + ], + 'invalid color blue ' => [ + 0 => 12, + 1 => 12, + 2 => -12, + 3 => false, + 4 => false + ], ]; } @@ -150,10 +171,40 @@ final class CoreLibsConvertColorsTest extends TestCase 'valid' => true, ], // invalid values - 'invalid color' => [ - 'rgb' => [-12, 300, 12], - 'hsb' => [-12, 300, 12], - 'hsl' => [-12, 300, 12], + 'invalid color r/h/h low' => [ + 'rgb' => [-1, 12, 12], + 'hsb' => [-1, 50, 50], + 'hsl' => [-1, 50, 50], + 'valid' => false, + ], + 'invalid color r/h/h high' => [ + 'rgb' => [256, 12, 12], + 'hsb' => [361, 50, 50], + 'hsl' => [361, 50, 50], + 'valid' => false, + ], + 'invalid color g/s/s low' => [ + 'rgb' => [12, -1, 12], + 'hsb' => [1, -1, 50], + 'hsl' => [1, -1, 50], + 'valid' => false, + ], + 'invalid color g/s/s high' => [ + 'rgb' => [12, 256, 12], + 'hsb' => [1, 101, 50], + 'hsl' => [1, 101, 50], + 'valid' => false, + ], + 'invalid color b/b/l low' => [ + 'rgb' => [12, 12, -1], + 'hsb' => [1, 50, -1], + 'hsl' => [1, 50, -1], + 'valid' => false, + ], + 'invalid color b/b/l high' => [ + 'rgb' => [12, 12, 256], + 'hsb' => [1, 50, 101], + 'hsl' => [1, 50, 101], 'valid' => false, ], ]; @@ -246,11 +297,22 @@ final class CoreLibsConvertColorsTest extends TestCase * @param int $input_r * @param int $input_g * @param int $input_b + * @param string|bool $expected_hash * @param string|bool $expected * @return void */ - public function testRgb2hex(int $input_r, int $input_g, int $input_b, $expected_hash, $expected) - { + public function testRgb2hex( + int $input_r, + int $input_g, + int $input_b, + string|bool $expected_hash, + string|bool $expected + ) { + // if expected hash is or expected is false, we need to check for + // LengthException + if ($expected_hash === false || $expected === false) { + $this->expectException(\LengthException::class); + } // with # $this->assertEquals( $expected_hash, @@ -292,11 +354,19 @@ final class CoreLibsConvertColorsTest extends TestCase */ public function testHex2rgb( string $input, - $expected, - $expected_str, + array|bool $expected, + string|bool $expected_str, string $separator, - $expected_str_sep + string|bool $expected_str_sep ): void { + if ($expected === false || $expected_str === false || $expected_str_sep === false) { + $hex_string = preg_replace("/[^0-9A-Fa-f]/", '', $input); + if (!is_string($hex_string)) { + $this->expectException(\InvalidArgumentException::class); + } else { + $this->expectException(\UnexpectedValueException::class); + } + } $this->assertEquals( $expected, \CoreLibs\Convert\Colors::hex2rgb($input) @@ -324,8 +394,11 @@ final class CoreLibsConvertColorsTest extends TestCase * @param array|bool $expected * @return void */ - public function testRgb2hsb(int $input_r, int $input_g, int $input_b, $expected): void + public function testRgb2hsb(int $input_r, int $input_g, int $input_b, array|bool $expected): void { + if ($expected === false) { + $this->expectException(\LengthException::class); + } $this->assertEquals( $expected, \CoreLibs\Convert\Colors::rgb2hsb($input_r, $input_g, $input_b) @@ -345,8 +418,12 @@ final class CoreLibsConvertColorsTest extends TestCase * @param array|bool $expected * @return void */ - public function testHsb2rgb(float $input_h, float $input_s, float $input_b, $expected): void + public function testHsb2rgb(float $input_h, float $input_s, float $input_b, array|bool $expected): void { + if ($expected === false) { + $this->expectException(\LengthException::class); + $expected = []; + } $this->assertEquals( $expected, \CoreLibs\Convert\Colors::hsb2rgb($input_h, $input_s, $input_b) @@ -366,8 +443,11 @@ final class CoreLibsConvertColorsTest extends TestCase * @param array|bool $expected * @return void */ - public function testRgb2hsl(int $input_r, int $input_g, int $input_b, $expected): void + public function testRgb2hsl(int $input_r, int $input_g, int $input_b, array|bool $expected): void { + if ($expected === false) { + $this->expectException(\LengthException::class); + } $this->assertEquals( $expected, \CoreLibs\Convert\Colors::rgb2hsl($input_r, $input_g, $input_b) @@ -387,8 +467,11 @@ final class CoreLibsConvertColorsTest extends TestCase * @param array|bool $expected * @return void */ - public function testHsl2rgb($input_h, float $input_s, float $input_l, $expected): void + public function testHsl2rgb(int|float $input_h, float $input_s, float $input_l, array|bool $expected): void { + if ($expected === false) { + $this->expectException(\LengthException::class); + } $this->assertEquals( $expected, \CoreLibs\Convert\Colors::hsl2rgb($input_h, $input_s, $input_l) @@ -406,11 +489,11 @@ final class CoreLibsConvertColorsTest extends TestCase */ public function testHslHsb360hue(): void { - $this->assertNotFalse( + $this->assertIsArray( \CoreLibs\Convert\Colors::hsl2rgb(360.0, 90.5, 41.2), 'HSL to RGB with 360 hue' ); - $this->assertNotFalse( + $this->assertIsArray( \CoreLibs\Convert\Colors::hsb2rgb(360, 95, 78.0), 'HSB to RGB with 360 hue' ); diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Create/CoreLibsCreateSessionTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Create/CoreLibsCreateSessionTest.php index ba97d1a4..f9c89109 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Create/CoreLibsCreateSessionTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Create/CoreLibsCreateSessionTest.php @@ -30,8 +30,10 @@ final class CoreLibsCreateSessionTest extends TestCase // setSessionName: true/false, // checkActiveSession: true/false, [1st call, 2nd call] // getSessionId: string or false - // 3: exepcted name (session) - // 4: expected error string + // 3: exepcted name (session)] + // 4: Exception thrown on error + // 5: exception code, null for none + // 6: expected error string return [ 'session parameter' => [ 'sessionNameParameter', @@ -44,7 +46,9 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], 'sessionNameParameter', - '' + null, + null, + '', ], 'session globals' => [ 'sessionNameGlobals', @@ -57,7 +61,9 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], 'sessionNameGlobals', - '' + null, + null, + '', ], 'session name default' => [ '', @@ -70,7 +76,9 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', - '' + null, + null, + '', ], // error checks // 1: we are in cli @@ -85,6 +93,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', + 'RuntimeException', + 1, '[SESSION] No sessions in php cli' ], // 2: session disabled @@ -99,6 +109,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', + 'RuntimeException', + 2, '[SESSION] Sessions are disabled' ], // 3: invalid session name: string @@ -113,6 +125,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', + 'UnexpectedValueException', + 3, '[SESSION] Invalid session name: 1invalid$session#;' ], // 3: invalid session name: only numbers @@ -127,6 +141,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', + 'UnexpectedValueException', + 3, '[SESSION] Invalid session name: 123' ], // 3: invalid session name: invalid name short @@ -143,6 +159,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => '1234abcd4567' ], '', + 'RuntimeException', + 4, '[SESSION] Failed to activate session' ], // 5: get session id return false @@ -157,6 +175,8 @@ final class CoreLibsCreateSessionTest extends TestCase 'getSessionId' => false ], '', + 'UnexpectedValueException', + 5, '[SESSION] getSessionId did not return a session id' ], ]; @@ -173,6 +193,7 @@ final class CoreLibsCreateSessionTest extends TestCase * @param string $type * @param array $mock_data * @param string $expected + * @param string|null $exception * @param string $expected_error * @return void */ @@ -181,6 +202,8 @@ final class CoreLibsCreateSessionTest extends TestCase string $type, array $mock_data, string $expected, + ?string $exception, + ?int $exception_code, string $expected_error ): void { // override expected @@ -224,6 +247,11 @@ final class CoreLibsCreateSessionTest extends TestCase // regex for session id $ression_id_regex = "/^\w+$/"; + if ($exception !== null) { + $this->expectException($exception); + $this->expectExceptionCode($exception_code); + } + unset($GLOBALS['SET_SESSION_NAME']); $session_id = ''; switch ($type) { @@ -253,13 +281,6 @@ final class CoreLibsCreateSessionTest extends TestCase $expected, $session_mock->getSessionName() ); - } else { - // false checks - $this->assertEquals( - $expected_error, - $session_mock->getErrorStr(), - 'error assert' - ); } } diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/DB/CoreLibsDBIOTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/DB/CoreLibsDBIOTest.php index bb24f270..40479e1a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/DB/CoreLibsDBIOTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/DB/CoreLibsDBIOTest.php @@ -445,12 +445,14 @@ final class CoreLibsDBIOTest extends TestCase { // 0: connection array // 1: status after connection + // 2: exception name // 2: info string // 3: ??? return [ 'invalid connection' => [ self::$db_config['invalid'], false, + 'RuntimeException', "-DB-info-> Connected to db '' with schema 'public' as user " . "'' at host '' on port '5432' with ssl mode 'allow' **** " . "-DB-info-> DB IO Class debug output: Yes **** ", @@ -459,6 +461,7 @@ final class CoreLibsDBIOTest extends TestCase 'valid connection' => [ self::$db_config['valid'], true, + '', "-DB-info-> Connected to db 'corelibs_db_io_test' with " . "schema 'public' as user 'corelibs_db_io_test' at host " . "'localhost' on port '5432' with ssl mode 'allow' **** " @@ -475,13 +478,21 @@ final class CoreLibsDBIOTest extends TestCase * @dataProvider connectionProvider * @testdox Connection will be $expected [$_dataName] * + * @param array $connection + * @param bool $expected_status + * @param string $exception + * @param string $expected_string * @return void */ public function testConnection( array $connection, bool $expected_status, + string $exception, string $expected_string ): void { + if ($expected_status === false) { + $this->expectException($exception); + } $db = new \CoreLibs\DB\IO( $connection, self::$log @@ -722,6 +733,10 @@ final class CoreLibsDBIOTest extends TestCase */ public function testGetSetting(string $connection, array $settings): void { + // if settings are all empty -> assume exception + if (empty($settings['db_name']) && empty($settings['db_user'])) { + $this->expectException('RuntimeException'); + } $db = new \CoreLibs\DB\IO( self::$db_config[$connection], self::$log