Compare commits

...

11 Commits

Author SHA1 Message Date
Clemens Schwaighofer a8755c8c0f phpstan check fixes 2026-05-11 15:31:59 +09:00
Clemens Schwaighofer 85f7e114b0 Add throw exception to get mime info if there is no mime type found
Instead of returning empty
2026-05-11 13:38:17 +09:00
Clemens Schwaighofer 6b1261b157 Update dotenv to v3 2026-04-20 16:19:19 +09:00
Clemens Schwaighofer b695c3ffdc phive updates 2026-04-20 10:36:53 +09:00
Clemens Schwaighofer 90d76bbd6c phpunit coverate checks added with report to HTMl, phpstan check fixes for enum 2026-04-17 18:56:07 +09:00
Clemens Schwaighofer 188f0b57d0 Clean up .gitignore and add coverage option to phpunit.sh 2026-02-27 10:58:05 +09:00
Clemens Schwaighofer b84fb5cef5 Comemit message fix for function param (phpdoc) 2026-02-17 18:16:16 +09:00
Clemens Schwaighofer 9a28c86991 json test file update 2026-01-22 11:51:32 +09:00
Clemens Schwaighofer 38b2ffe82a jsonConvertToArray with JSON_INVALID_UTF8_IGNORE does not work
json_decode JSON_INVALID_UTF8_IGNORE is not honoring any of those flags at the moment
2026-01-22 11:44:11 +09:00
Clemens Schwaighofer 6e547abccb Fix text in check runners 2026-01-22 11:31:01 +09:00
Clemens Schwaighofer 676af5e1a4 Add json validation and update tests
Also add removal of THROW flag for json decode to not throw an exception if if wanted

Add jquery 4.0.0 libs
2026-01-22 11:08:18 +09:00
25 changed files with 9940 additions and 48 deletions
+3 -4
View File
@@ -1,10 +1,9 @@
.libs .libs
node_modules/ node_modules/
composer.lock **/composer.lock
vendor/ **/vendor/
tools/ tools/
www/composer.lock
www/vendor
**/.env **/.env
**/.target **/.target
package-lock.json package-lock.json
build/
+3 -3
View File
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive"> <phive xmlns="https://phar.io/phive">
<phar name="phpunit" version="~9.6" installed="9.6.31" location="./tools/phpunit" copy="false"/> <phar name="phpunit" version="~9.6" installed="9.6.34" location="./tools/phpunit" copy="false"/>
<phar name="phpcbf" version="4" installed="4.0.1" location="./tools/phpcbf" copy="false"/> <phar name="phpcbf" version="4" installed="4.0.1" location="./tools/phpcbf" copy="false"/>
<phar name="phpcs" version="4" installed="4.0.1" location="./tools/phpcs" copy="false"/> <phar name="phpcs" version="4" installed="4.0.1" location="./tools/phpcs" copy="false"/>
<phar name="phpstan" version="^2.0" installed="2.1.33" location="./tools/phpstan" copy="false"/> <phar name="phpstan" version="^2.0" installed="2.1.54" location="./tools/phpstan" copy="false"/>
<phar name="phan" version="^5.4.3" installed="5.5.2" location="./tools/phan" copy="false"/> <phar name="phan" version="^5.4.3" installed="5.5.2" location="./tools/phan" copy="false"/>
<phar name="psalm" version="^5.26.1" installed="5.26.1" location="./tools/psalm" copy="false"/> <phar name="psalm" version="^5.26.1" installed="5.26.1" location="./tools/psalm" copy="false"/>
<phar name="phpdox" version="^0.12.0" installed="0.12.0" location="./tools/phpdox" copy="false"/> <phar name="phpdox" version="^0.12.0" installed="0.12.0" location="./tools/phpdox" copy="false"/>
<phar name="phpdocumentor" version="^3.4.2" installed="3.9.1" location="./tools/phpDocumentor" copy="false"/> <phar name="phpdocumentor" version="^3.4.2" installed="3.9.1" location="./tools/phpDocumentor" copy="false"/>
<phar name="php-cs-fixer" version="^3.34.1" installed="3.92.4" location="./tools/php-cs-fixer" copy="false"/> <phar name="php-cs-fixer" version="^3.34.1" installed="3.95.1" location="./tools/php-cs-fixer" copy="false"/>
</phive> </phive>
+2 -2
View File
@@ -62,9 +62,9 @@ fi;
php_bin="${PHP_BIN_PATH}${php_version}"; php_bin="${PHP_BIN_PATH}${php_version}";
echo "Use PHP Version: ${php_version}"; echo "Use PHP Version: ${php_version}";
if [ "${use_composer}" -eq 1 ]; then if [ "${use_composer}" -eq 1 ]; then
echo "Use composer installed phan"; echo "Use composer installed";
else else
echo "Use phan installed via phives"; echo "Use phive installed";
fi; fi;
if [ ! -f "${php_bin}" ]; then if [ ! -f "${php_bin}" ]; then
+2 -2
View File
@@ -62,9 +62,9 @@ fi;
php_bin="${PHP_BIN_PATH}${php_version}"; php_bin="${PHP_BIN_PATH}${php_version}";
echo "Use PHP Version: ${php_version}"; echo "Use PHP Version: ${php_version}";
if [ "${use_composer}" -eq 1 ]; then if [ "${use_composer}" -eq 1 ]; then
echo "Use composer installed phan"; echo "Use composer installed";
else else
echo "Use phan installed via phives"; echo "Use phive installed";
fi; fi;
if [ ! -f "${php_bin}" ]; then if [ ! -f "${php_bin}" ]; then
+19 -2
View File
@@ -19,6 +19,7 @@ Available options:
-v, --verbose Enable verbose output for PHPunit -v, --verbose Enable verbose output for PHPunit
-c, --composer Use composer version and not the default phives bundle -c, --composer Use composer version and not the default phives bundle
-p, --php VERSION Chose PHP version in the form of "N.N", if not found will exit -p, --php VERSION Chose PHP version in the form of "N.N", if not found will exit
-C, --coverage Generate code coverage report in text format (default: disabled)
EOF EOF
exit exit
} }
@@ -47,6 +48,8 @@ opt_verbose="";
php_version=""; php_version="";
no_php_version=0; no_php_version=0;
use_composer=0; use_composer=0;
opt_generate_coverage="";
opt_generate_coverage_html="";
while [ -n "${1-}" ]; do while [ -n "${1-}" ]; do
case "${1}" in case "${1}" in
-t | --testdox) -t | --testdox)
@@ -59,6 +62,14 @@ while [ -n "${1-}" ]; do
use_composer=1; use_composer=1;
shift shift
;; ;;
-C | --coverage)
opt_generate_coverage="--coverage-text";
shift
;;
--coverage-report)
opt_generate_coverage_html="--coverage-html build/coverage-report";
shift
;;
-p | --php) -p | --php)
php_version="${2-}"; php_version="${2-}";
shift shift
@@ -81,9 +92,9 @@ fi;
php_bin="${PHP_BIN_PATH}${php_version}"; php_bin="${PHP_BIN_PATH}${php_version}";
echo "Use PHP Version: ${php_version}"; echo "Use PHP Version: ${php_version}";
if [ "${use_composer}" -eq 1 ]; then if [ "${use_composer}" -eq 1 ]; then
echo "Use composer installed phan"; echo "Use composer installed";
else else
echo "Use phan installed via phives"; echo "Use phive installed";
fi; fi;
if [ ! -f "${php_bin}" ]; then if [ ! -f "${php_bin}" ]; then
@@ -100,9 +111,15 @@ if [ "${use_composer}" -eq 1 ]; then
else else
PHPUNIT_CALL+=("${BASE_PATH}tools/phpunit"); PHPUNIT_CALL+=("${BASE_PATH}tools/phpunit");
fi; fi;
if [ -n "${opt_generate_coverage}" ]; then
echo "Will run coverage report";
export XDEBUG_MODE=coverage
fi;
PHPUNIT_CALL+=( PHPUNIT_CALL+=(
"${opt_testdox}" "${opt_testdox}"
"${opt_verbose}" "${opt_verbose}"
"${opt_generate_coverage}"
"${opt_generate_coverage_html}"
"-c" "${PHPUNIT_CONFIG}" "-c" "${PHPUNIT_CONFIG}"
"${BASE_PATH}4dev/tests/" "${BASE_PATH}4dev/tests/"
); );
@@ -164,6 +164,51 @@ final class CoreLibsConvertJsonTest extends TestCase
); );
} }
/**
* test with flags
*
* @covers ::jsonConvertToArray
* @testdox jsonConvertToArray flag test, if flag is used
*
* @return void
*/
public function testJsonConvertToArrayWithFlags(): void
{
$input = '{"valid":"json","invalid":"\xB1\x31"}';
/* $expected_without_flag = [
'valid' => 'json'
];
$expected_with_flag = [
'valid' => 'json',
'invalid' => "\xB1\x31"
]; */
// no idea why in both it throws an erro
$expected_without_flag = [];
$expected_with_flag = [];
$this->assertEquals(
$expected_without_flag,
\CoreLibs\Convert\Json::jsonConvertToArray($input)
);
$this->assertEquals(
$expected_with_flag,
\CoreLibs\Convert\Json::jsonConvertToArray($input, flags:JSON_INVALID_UTF8_IGNORE)
);
}
public function testJsonConvertToArrayRemoveThrowFlag(): void
{
$input = '{"valid":"json","invalid":"\xB1\x31"}';
// show NOT throw an exception
try {
$this->assertEquals(
[],
\CoreLibs\Convert\Json::jsonConvertToArray($input, flags:JSON_THROW_ON_ERROR)
);
} catch (\Exception $e) {
$this->fail('Exception was thrown despite flag removal');
}
}
/** /**
* test json error states * test json error states
* *
@@ -189,6 +234,81 @@ final class CoreLibsConvertJsonTest extends TestCase
); );
} }
/**
* test json error states
*
* @covers ::jsonValidate
* @dataProvider jsonErrorProvider
* @testdox jsonValidate $input will be $expected_i/$expected_s [$_dataName]
*
* @param string|null $input
* @param int $expected_i
* @param string $expected_s
* @return void
*/
public function testJsonValidateGetLastError(?string $input, int $expected_i, string $expected_s): void
{
\CoreLibs\Convert\Json::jsonValidate($input);
$this->assertEquals(
$expected_i,
\CoreLibs\Convert\Json::jsonGetLastError()
);
$this->assertEquals(
$expected_s,
\CoreLibs\Convert\Json::jsonGetLastError(true)
);
}
/**
* test json validation
*
* @covers ::jsonValidate
* @testdox jsonValidate test valid and invalid json
*
* @return void
*/
public function testJsonValidate(): void
{
$this->assertTrue(
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}')
);
$this->assertFalse(
\CoreLibs\Convert\Json::jsonValidate('not valid json')
);
}
/**
* Check if invalid flag throws exception
*
* @covers ::jsonValidate
* @testdox jsonValidate test exception thrown on invalid flag
*
* @return void
*/
public function testJsonValidateInvalidFlag(): void
{
$this->expectException("\InvalidArgumentException");
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 5);
}
/**
* Check if valid flag throws no exception
*
* @covers ::jsonValidate
* @testdox jsonValidate test no exception on valid flag
*
* @return void
*/
public function testJsonValidateValidflag(): void
{
$this->assertTrue(
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 0)
);
$this->assertTrue(
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', JSON_INVALID_UTF8_IGNORE)
);
}
/** /**
* Undocumented function * Undocumented function
* *
-1
View File
@@ -45,7 +45,6 @@ use CoreLibs\DB\Support\ConvertPlaceholder;
* Test class for DB\IO + DB\SQL\PgSQL * Test class for DB\IO + DB\SQL\PgSQL
* This will only test the PgSQL parts * This will only test the PgSQL parts
* @coversDefaultClass \CoreLibs\DB\IO * @coversDefaultClass \CoreLibs\DB\IO
* @coversDefaultClass \CoreLibs\DB\SQL\PgSQL
* @testdox \CoreLibs\DB\IO method tests for SQL\PgSQL * @testdox \CoreLibs\DB\IO method tests for SQL\PgSQL
*/ */
final class CoreLibsDBIOTest extends TestCase final class CoreLibsDBIOTest extends TestCase
+1 -1
View File
@@ -1,7 +1,7 @@
<?php <?php
$set = 0; $set = 0;
foreach (['/../../www', '/../www', '/../..', '/..', '/../../src', '/../src'] as $src) { foreach (['/../../www', '/../www', '/../../src', '/../src', '/../..', '/..'] as $src) {
if (is_file(dirname(__DIR__) . $src . '/vendor/autoload.php')) { if (is_file(dirname(__DIR__) . $src . '/vendor/autoload.php')) {
require dirname(__DIR__) . $src . '/vendor/autoload.php'; require dirname(__DIR__) . $src . '/vendor/autoload.php';
$set = 1; $set = 1;
+5 -2
View File
@@ -1,8 +1,11 @@
// https://www.typescriptlang.org/tsconfig/#compilerOptions // https://www.typescriptlang.org/tsconfig/#compilerOptions
{ {
"compilerOptions": { "compilerOptions": {
"module": "ESNext", // if "bundler"
"moduleResolution": "Node", // "module": "ESNext",
"module": "NodeNext",
// "bundler" (front), "nodenext" or "node16"
"moduleResolution": "nodenext",
"target": "ES2020", "target": "ES2020",
"jsx": "react", "jsx": "react",
"checkJs": true, "checkJs": true,
+13
View File
@@ -10,4 +10,17 @@
<directory>4dev/tests</directory> <directory>4dev/tests</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./www/lib/CoreLibs</directory>
</include>
<!-- <report>
<html outputDirectory="build/coverage-report"/>
</report> -->
</coverage>
<!-- <source>
<include>
<directory>./www/lib/CoreLibs</directory>
</include>
</source> -->
</phpunit> </phpunit>
+5
View File
@@ -38,6 +38,11 @@ print "GETFILENAMEENDING: $file: " . File::getFilenameEnding($file) . "<br>";
$file = getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php'; $file = getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php';
print "GETLINESFROMFILE: $file: " . File::getLinesFromFile($file) . "<br>"; print "GETLINESFROMFILE: $file: " . File::getLinesFromFile($file) . "<br>";
print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>"; print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>";
try {
print "MIMEINFO: $file: " . File::getMimeType("does_not_exists.txt") . "<br>";
} catch (\Exception $e) {
print "Error: " . get_class($e) . ": " . $e->getMessage() . "<br>";
}
print "</body></html>"; print "</body></html>";
+19
View File
@@ -46,6 +46,7 @@ $json = '["f: {b"""ar}]';
$output = Json::jsonConvertToArray($json); $output = Json::jsonConvertToArray($json);
print "S::E-JSON: $json: " . DgS::printAr($output) . "<br>"; print "S::E-JSON: $json: " . DgS::printAr($output) . "<br>";
print "S::E-JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>"; print "S::E-JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>";
print "S::E Validate: " . Json::jsonValidate($json) . ": " . Json::jsonGetLastError(true) . "<br>";
// direct // direct
$json = '{"direct": "static function call"}'; $json = '{"direct": "static function call"}';
@@ -58,6 +59,24 @@ $output = $json_class::jsonConvertToArray($json);
print "J/S::E-JSON: $json: " . DgS::printAr($output) . "<br>"; print "J/S::E-JSON: $json: " . DgS::printAr($output) . "<br>";
print "J/S::E-JSON ERROR: " . $json_class::jsonGetLastError() . ": " . $json_class::jsonGetLastError(true) . "<br>"; print "J/S::E-JSON ERROR: " . $json_class::jsonGetLastError() . ": " . $json_class::jsonGetLastError(true) . "<br>";
echo "<hr>";
$json = '{"valid":"json","invalid":"\xB1\x31"}';
// $json = '{"valid":"json","invalid":"abc\x80def"}';
$output_no_flag = Json::jsonConvertToArray($json);
print "No Flag JSON: $json: " . DgS::printAr($output_no_flag) . "<br>";
print "No Flag JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>";
$output_flag = Json::jsonConvertToArray($json, flags:JSON_INVALID_UTF8_IGNORE);
print "No Flag JSON: $json: " . DgS::printAr($output_flag) . "<br>";
print "No Flag JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>";
$output_raw = json_decode($json, true, flags:JSON_INVALID_UTF8_IGNORE);
print "No Flag JSON RAW (F-1): $json: " . DgS::printAr($output_raw) . "<br>";
$output_raw = json_decode($json, true, flags:JSON_INVALID_UTF8_SUBSTITUTE);
print "No Flag JSON RAW (F-2): $json: " . DgS::printAr($output_raw) . "<br>";
$output_raw = json_decode($json, true);
print "No Flag JSON RAW: $json: " . DgS::printAr($output_raw) . "<br>";
echo "<hr>";
// $json = '{"foo": "bar"}'; // $json = '{"foo": "bar"}';
// $output = Jason::jsonConvertToArray($json); // $output = Jason::jsonConvertToArray($json);
// print "S::JSON: $json: " . DgS::printAr($output) . "<br>"; // print "S::JSON: $json: " . DgS::printAr($output) . "<br>";
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -17,13 +17,13 @@
"repositories": { "repositories": {
"git.egplusww.jp.Composer": { "git.egplusww.jp.Composer": {
"type": "composer", "type": "composer",
"url": "https://git.egplusww.jp/api/packages/Composer/composer" "url": "https://packages.omnicomproduction.jp/api/packages/Composer/composer"
} }
}, },
"require": { "require": {
"egrajp/smarty-extended": "^5.4", "egrajp/smarty-extended": "^5.4",
"php": ">=8.1", "php": ">=8.1",
"gullevek/dotenv": "^2.0", "gullevek/dotenv": "^3.0",
"psr/log": "^2.0 || ^3.0", "psr/log": "^2.0 || ^3.0",
"php-privacy/openpgp": "^2.1" "php-privacy/openpgp": "^2.1"
} }
+9 -3
View File
@@ -58,15 +58,21 @@ class File
* else returns '' for any other finfo read problem * else returns '' for any other finfo read problem
* *
* @param string $read_file File to read, relative or absolute path * @param string $read_file File to read, relative or absolute path
* @return string * @return string mime type
* @throws \UnexpectedValueException if file cannot be read or is not a file
* @throws \RangeException if we cannot get a mime type and throw exception is on
*/ */
public static function getMimeType(string $read_file): string public static function getMimeType(string $read_file): string
{ {
$finfo = new \finfo(FILEINFO_MIME_TYPE); $finfo = new \finfo(FILEINFO_MIME_TYPE);
if (!is_file($read_file)) { if (!is_file($read_file) || !is_readable($read_file)) {
throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file); throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file);
} }
return $finfo->file($read_file) ?: ''; $mime_type = $finfo->file($read_file);
if ($mime_type === false) {
throw new \RangeException('[getMimeType] Cannot get mime type for: ' . $read_file);
}
return $mime_type;
} }
} }
+2 -2
View File
@@ -133,7 +133,7 @@ class DateTime
} else { } else {
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) { for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
$output = floor((float)$timestamp / $timegroups[$i]); $output = floor((float)$timestamp / $timegroups[$i]);
$timestamp = (float)$timestamp % $timegroups[$i]; $timestamp = $timestamp % $timegroups[$i];
// output has days|hours|min|sec // output has days|hours|min|sec
if ($output || $time_string) { if ($output || $time_string) {
$time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : ''); $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
@@ -453,7 +453,7 @@ class DateTime
} }
if (isset($matches[11]) && is_numeric($matches[11])) { if (isset($matches[11]) && is_numeric($matches[11])) {
// for milliseconds, we need to divide by 1000 and add them // for milliseconds, we need to divide by 1000 and add them
$timestamp += (float)($matches[11] / 1000); $timestamp += ((float)$matches[11] / 1000);
} }
if ($negative) { if ($negative) {
// cast to float so we can do a negative multiplication // cast to float so we can do a negative multiplication
+1 -1
View File
@@ -154,7 +154,7 @@ class Byte
if (!empty($matches[1])) { if (!empty($matches[1])) {
$number_negative = true; $number_negative = true;
} }
if (isset($matches[2]) && isset($matches[3])) { if (isset($matches[2])) {
// remove all non valid characters from the number // remove all non valid characters from the number
$number = preg_replace('/[^0-9\.]/', '', $matches[2]); $number = preg_replace('/[^0-9\.]/', '', $matches[2]);
// final clean up and convert to float // final clean up and convert to float
+6 -6
View File
@@ -957,9 +957,9 @@ class Color
* Undocumented function * Undocumented function
* *
* @param HWB $hwb * @param HWB $hwb
* @return Lch * @return LCH
*/ */
public static function hwbToLch(HWB $hwb): Lch public static function hwbToLch(HWB $hwb): LCH
{ {
return self::rgbToLch( return self::rgbToLch(
self::hwbToRgb($hwb) self::hwbToRgb($hwb)
@@ -1078,10 +1078,10 @@ class Color
/** /**
* OkLab to Lch (CIE) * OkLab to Lch (CIE)
* *
* @param LAB $lab * @param Lab $lab
* @return LCH * @return LCH
*/ */
public static function okLabToLch(LAB $lab): LCH public static function okLabToLch(Lab $lab): LCH
{ {
return self::labToLch( return self::labToLch(
self::okLabToLab($lab) self::okLabToLab($lab)
@@ -1092,9 +1092,9 @@ class Color
* Lch (CIE) to OkLab * Lch (CIE) to OkLab
* *
* @param LCH $lch * @param LCH $lch
* @return LAB * @return Lab
*/ */
public static function lchToOkLab(LCH $lch): LAB public static function lchToOkLab(LCH $lch): Lab
{ {
return self::labToOkLab( return self::labToOkLab(
self::lchToLab($lch) self::lchToLab($lch)
+25 -2
View File
@@ -27,10 +27,14 @@ class Json
* set original value as array * set original value as array
* @return array<mixed> returns an array from the json values * @return array<mixed> returns an array from the json values
*/ */
public static function jsonConvertToArray(?string $json, bool $override = false): array public static function jsonConvertToArray(?string $json, bool $override = false, int $flags = 0): array
{ {
if ($json !== null) { if ($json !== null) {
$_json = json_decode($json, true); // if flags has JSON_THROW_ON_ERROR remove it
if ($flags & JSON_THROW_ON_ERROR) {
$flags = $flags & ~JSON_THROW_ON_ERROR;
}
$_json = json_decode($json, true, flags:$flags);
if (self::$json_last_error = json_last_error()) { if (self::$json_last_error = json_last_error()) {
if ($override == true) { if ($override == true) {
// init return as array with original as element // init return as array with original as element
@@ -65,6 +69,25 @@ class Json
return (string)$json_string; return (string)$json_string;
} }
/**
* Validate if a json string could be decoded.
* Weill set the internval last error state and info can be read with jsonGetLastError
*
* @param string $json
* @param int $flags only JSON_INVALID_UTF8_IGNORE is currently allowed
* @return bool
* @throws \InvalidArgumentException if flags is invalid
*/
public static function jsonValidate(string $json, int $flags = 0): bool
{
if ($flags != 0 && $flags != JSON_INVALID_UTF8_IGNORE) {
throw new \InvalidArgumentException("For flag only 0 or JSON_INVALID_UTF8_IGNORE is allwed: " . $flags);
}
$json_valid = json_validate($json, flags:$flags);
self::$json_last_error = json_last_error();
return $json_valid;
}
/** /**
* returns human readable string for json errors thrown in jsonConvertToArray * returns human readable string for json errors thrown in jsonConvertToArray
* Source: https://www.php.net/manual/en/function.json-last-error.php * Source: https://www.php.net/manual/en/function.json-last-error.php
+12 -6
View File
@@ -2562,21 +2562,27 @@ class IO
// set field names // set field names
$this->cursor_ext[$query_hash]['field_names'] = []; $this->cursor_ext[$query_hash]['field_names'] = [];
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) { for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
$this->cursor_ext[$query_hash]['field_names'][] = if (
$this->db_functions->__dbFieldName( ($field_name = $this->db_functions->__dbFieldName(
$this->cursor_ext[$query_hash]['cursor'], $this->cursor_ext[$query_hash]['cursor'],
$i $i
); )) !== false
) {
$this->cursor_ext[$query_hash]['field_names'][] = $field_name;
}
} }
$this->field_names = $this->cursor_ext[$query_hash]['field_names']; $this->field_names = $this->cursor_ext[$query_hash]['field_names'];
// field types // field types
$this->cursor_ext[$query_hash]['field_types'] = []; $this->cursor_ext[$query_hash]['field_types'] = [];
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) { for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
$this->cursor_ext[$query_hash]['field_types'][] = if (
$this->db_functions->__dbFieldType( ($field_type = $this->db_functions->__dbFieldType(
$this->cursor_ext[$query_hash]['cursor'], $this->cursor_ext[$query_hash]['cursor'],
$i $i
); )) !== false
) {
$this->cursor_ext[$query_hash]['field_types'][] = $field_type;
}
} }
$this->field_types = $this->cursor_ext[$query_hash]['field_types']; $this->field_types = $this->cursor_ext[$query_hash]['field_types'];
// combined name => type // combined name => type
+1 -1
View File
@@ -51,7 +51,7 @@ enum Convert: int
/** /**
* Get internal name from int value * Get internal name from int value
* *
* @param int $value * @param int $value
* @return self * @return self
*/ */
public static function fromValue(int $value): self public static function fromValue(int $value): self
+2 -2
View File
@@ -134,8 +134,8 @@ class Support
* Convert bool value to string value. Short name alias for printBool * Convert bool value to string value. Short name alias for printBool
* *
* @param bool $bool Bool value to be transformed * @param bool $bool Bool value to be transformed
* @param string $true [='true'] Override default string 'true' * @param string $true [=true] Override default string 'true'
* @param string $false [=false'] Override default string 'false' * @param string $false [=false] Override default string 'false'
* @return string $true or $false string for true/false bool * @return string $true or $false string for true/false bool
*/ */
public static function prBl( public static function prBl(
+1 -1
View File
@@ -63,7 +63,7 @@ enum Flag: int
/** /**
* Get internal name from int value * Get internal name from int value
* *
* @param int $value * @param value-of<self::VALUES> $value
* @return self * @return self
*/ */
public static function fromValue(int $value): self public static function fromValue(int $value): self
+5 -5
View File
@@ -178,11 +178,11 @@ class Elements
"/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/", "/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/",
function ($matches) { function ($matches) {
return self::createUrl( return self::createUrl(
$matches[1] ?? '', $matches[1],
$matches[2] ?? '', $matches[2],
$matches[3] ?? '', $matches[3],
$matches[4] ?? '', $matches[4],
$matches[5] ?? '', $matches[5],
$matches[7] ?? '', $matches[7] ?? '',
$matches[9] ?? '' $matches[9] ?? ''
); );