Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 82ba2a189a | |||
| a8755c8c0f | |||
| 85f7e114b0 | |||
| 6b1261b157 | |||
| b695c3ffdc | |||
| 90d76bbd6c | |||
| 188f0b57d0 | |||
| b84fb5cef5 | |||
| 9a28c86991 | |||
| 38b2ffe82a | |||
| 6e547abccb | |||
| 676af5e1a4 |
+3
-4
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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,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
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -38,6 +38,25 @@ 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: does_not_exists.txt " . File::getMimeType("does_not_exists.txt") . "<br>";
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
print "Error: " . get_class($e) . ": " . $e->getMessage() . "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = [
|
||||||
|
'layout/css/edit.css',
|
||||||
|
'layout/javascript/edit.jq.js',
|
||||||
|
'class_test.file.php',
|
||||||
|
getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php',
|
||||||
|
];
|
||||||
|
foreach ($files as $file) {
|
||||||
|
try {
|
||||||
|
print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>";
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
print "Error: " . get_class($e) . ": " . $e->getMessage() . "<br>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print "</body></html>";
|
print "</body></html>";
|
||||||
|
|
||||||
|
|||||||
@@ -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>";
|
||||||
|
|||||||
+9680
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+2
-2
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ class L10n
|
|||||||
* Get the local as array same to the GetLocale::setLocale return
|
* Get the local as array same to the GetLocale::setLocale return
|
||||||
* This does not set from outside, but only what is set in the l10n class
|
* This does not set from outside, but only what is set in the l10n class
|
||||||
*
|
*
|
||||||
* @return array{locale: string, lang: string, lang_short: string, domain: string, encoding: string, path: string}
|
* @return array{locale:string,lang:string,lang_short:string,domain:string,encoding:string,path:string}
|
||||||
*/
|
*/
|
||||||
public function getLocaleAsArray(): array
|
public function getLocaleAsArray(): array
|
||||||
{
|
{
|
||||||
@@ -321,7 +321,7 @@ class L10n
|
|||||||
* parse the locale string for further processing
|
* parse the locale string for further processing
|
||||||
*
|
*
|
||||||
* @param string $locale Locale to parse
|
* @param string $locale Locale to parse
|
||||||
* @return array<string,string|null> array with lang, country, charset, modifier
|
* @return array{lang:string|null,country:string|null,charset:string|null,modifier:string|null} parsed locale
|
||||||
*/
|
*/
|
||||||
public static function parseLocale(string $locale = ''): array
|
public static function parseLocale(string $locale = ''): array
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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] ?? ''
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user