Compare commits

...

2 Commits

Author SHA1 Message Date
Clemens Schwaighofer
283e7de1dc Remove Jason class, now in Json, deprecated since v7 2023-03-02 15:35:13 +09:00
Clemens Schwaighofer
1596654149 Moved minimum php version to 8.1
All PostgreSQL calls are now Connection/Resource object types and not
resource
All methods have parameter type set
2023-02-28 17:36:19 +09:00
54 changed files with 1375 additions and 573 deletions

View File

@@ -27,6 +27,7 @@ use Phan\Config;
return [ return [
// "target_php_version" => "8.2", // "target_php_version" => "8.2",
"minimum_target_php_version" => "8.1",
// turn color on (-C) // turn color on (-C)
"color_issue_messages_if_supported" => true, "color_issue_messages_if_supported" => true,
// If true, missing properties will be created when // If true, missing properties will be created when

View File

@@ -15,8 +15,8 @@ php_bin="";
if [ ! -z "${1}" ]; then if [ ! -z "${1}" ]; then
case "${1}" in case "${1}" in
# "7.3") php_bin="/usr/bin/php7.3 "; ;; # "7.3") php_bin="/usr/bin/php7.3 "; ;;
"7.4") php_bin="/usr/bin/php7.4 "; ;; # "7.4") php_bin="/usr/bin/php7.4 "; ;;
"8.0") php_bin="/usr/bin/php8.0 "; ;; # "8.0") php_bin="/usr/bin/php8.0 "; ;;
"8.1") php_bin="/usr/bin/php8.1 "; ;; "8.1") php_bin="/usr/bin/php8.1 "; ;;
"8.2") php_bin="/usr/bin/php8.2 "; ;; "8.2") php_bin="/usr/bin/php8.2 "; ;;
*) echo "Not support PHP: ${1}"; exit; ;; *) echo "Not support PHP: ${1}"; exit; ;;
@@ -25,8 +25,8 @@ fi;
if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then
case "${2}" in case "${2}" in
# "7.3") php_bin="/usr/bin/php7.3 "; ;; # "7.3") php_bin="/usr/bin/php7.3 "; ;;
"7.4") php_bin="/usr/bin/php7.4 "; ;; # "7.4") php_bin="/usr/bin/php7.4 "; ;;
"8.0") php_bin="/usr/bin/php8.0 "; ;; # "8.0") php_bin="/usr/bin/php8.0 "; ;;
"8.1") php_bin="/usr/bin/php8.1 "; ;; "8.1") php_bin="/usr/bin/php8.1 "; ;;
"8.2") php_bin="/usr/bin/php8.2 "; ;; "8.2") php_bin="/usr/bin/php8.2 "; ;;
*) echo "Not support PHP: ${1}"; exit; ;; *) echo "Not support PHP: ${1}"; exit; ;;

View File

@@ -1729,7 +1729,7 @@ final class CoreLibsACLLoginTest extends TestCase
], ],
20 20
], ],
'invalud search' => [ 'invalid search' => [
12, 12,
'foo', 'foo',
[], [],

View File

@@ -107,6 +107,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
*/ */
public function arraySearchRecursiveAllProvider(): array public function arraySearchRecursiveAllProvider(): array
{ {
/*
0: $needle,
1: array $input,
2: ?string $key_search_for,
3: bool $flag,
4: array $expected
*/
return [ return [
'find value' => [ 'find value' => [
0 => 'bar', 0 => 'bar',
@@ -172,6 +179,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
*/ */
public function arraySearchSimpleProvider(): array public function arraySearchSimpleProvider(): array
{ {
/*
0: array $input,
1: $key,
2: $value,
3: bool $flag,
4: bool $expected
*/
return [ return [
'key/value exist' => [ 'key/value exist' => [
0 => self::$array, 0 => self::$array,
@@ -665,7 +679,7 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
* *
* @param array $input * @param array $input
* @param string|int $key * @param string|int $key
* @param string|int $value * @param string|int|bool $value
* @param bool $expected * @param bool $expected
* @return void * @return void
*/ */

View File

@@ -1253,10 +1253,14 @@ final class CoreLibsDBIOTest extends TestCase
'string value literal' => ['string literal', 'tl', '\'string literal\'',], 'string value literal' => ['string literal', 'tl', '\'string literal\'',],
'empty string value literal' => ['', 'tl', '\'\'',], 'empty string value literal' => ['', 'tl', '\'\'',],
'null string value literal' => [null, 'tl', 'NULL',], 'null string value literal' => [null, 'tl', 'NULL',],
// ?d (I have no idea what that does, is like string) // escape string, but set all empty strings to null ('' is null)
'string value d' => ['string d', 'd', '\'string d\'',], 'string value d' => ['string d', 'd', '\'string d\'',],
'empty string value d' => ['', 'd', 'NULL',], 'empty string value d' => ['', 'd', 'NULL',],
'null string value d' => [null, 'd', 'NULL',], 'null string value d' => [null, 'd', 'NULL',],
// escape literal string, but set all empty strings to null ('' is null)
'string value literal d' => ['string d', 'dl', '\'string d\'',],
'empty string value literal d' => ['', 'dl', 'NULL',],
'null string value literal d' => [null, 'dl', 'NULL',],
// by bytea // by bytea
'string value d' => ['string d', 'by', '\x737472696e672064',], 'string value d' => ['string d', 'by', '\x737472696e672064',],
'empty string value d' => ['', 'by', 'NULL',], 'empty string value d' => ['', 'by', 'NULL',],
@@ -1281,7 +1285,7 @@ final class CoreLibsDBIOTest extends TestCase
* @dataProvider sqlEscapeProvider * @dataProvider sqlEscapeProvider
* @testdox Input value $input as $flag to $expected [$_dataName] * @testdox Input value $input as $flag to $expected [$_dataName]
* *
* @param int|float|string|null $input * @param int|float|string|bool|null $input
* @param string $flag * @param string $flag
* @param int|float|string $expected * @param int|float|string $expected
* @return void * @return void

View File

@@ -1,6 +1,19 @@
{ {
"name": "egrajp/development-corelibs-dev",
"version": "dev-master",
"description": "CoreLibs: Development package",
"type": "library",
"require-dev": { "require-dev": {
"phpstan/phpstan": "^1.10", "phpstan/phpstan": "^1.10",
"phan/phan": "^5.4" "phan/phan": "^5.4",
"phpstan/extension-installer": "^1.2"
},
"config": {
"allow-plugins": {
"phpstan/extension-installer": true
}
},
"require": {
"php": ">=8.1"
} }
} }

62
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "fcdf8646822d333e75d48519c50c689a", "content-hash": "e0be39c8d67ae1599bb76d055debab50",
"packages": [], "packages": [],
"packages-dev": [ "packages-dev": [
{ {
@@ -611,17 +611,61 @@
"time": "2022-10-14T12:47:21+00:00" "time": "2022-10-14T12:47:21+00:00"
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/extension-installer",
"version": "1.10.2", "version": "1.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/extension-installer.git",
"reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd" "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/a2ffec7db373d8da4973d1d62add872db5cd22dd", "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40",
"reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd", "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.0",
"php": "^7.2 || ^8.0",
"phpstan/phpstan": "^1.8.0"
},
"require-dev": {
"composer/composer": "^2.0",
"php-parallel-lint/php-parallel-lint": "^1.2.0",
"phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
},
"type": "composer-plugin",
"extra": {
"class": "PHPStan\\ExtensionInstaller\\Plugin"
},
"autoload": {
"psr-4": {
"PHPStan\\ExtensionInstaller\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Composer plugin for automatic installation of PHPStan extensions",
"support": {
"issues": "https://github.com/phpstan/extension-installer/issues",
"source": "https://github.com/phpstan/extension-installer/tree/1.2.0"
},
"time": "2022-10-17T12:59:16+00:00"
},
{
"name": "phpstan/phpstan",
"version": "1.10.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/5419375b5891add97dc74be71e6c1c34baaddf64",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -651,7 +695,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/phpstan/phpstan/issues", "issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.10.2" "source": "https://github.com/phpstan/phpstan/tree/1.10.3"
}, },
"funding": [ "funding": [
{ {
@@ -667,7 +711,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-02-23T14:36:46+00:00" "time": "2023-02-25T14:47:13+00:00"
}, },
{ {
"name": "psr/container", "name": "psr/container",

View File

@@ -30,6 +30,10 @@ parameters:
- www/admin/error_test.php - www/admin/error_test.php
# admin synlink files # admin synlink files
- www/admin/edit_*.php - www/admin/edit_*.php
# config symlinks
- www/admin/config.php
- www/frontend/config.php
- www/frontend/*/config.php
# ignore admin header stuff # ignore admin header stuff
# - www/includes/admin_header.php # ignore the admin include stuff # - www/includes/admin_header.php # ignore the admin include stuff
- www/includes/admin_footer.php # ignore the admin include stuff - www/includes/admin_footer.php # ignore the admin include stuff
@@ -50,9 +54,9 @@ parameters:
#- # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*, only for 8.0 or lower #- # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*, only for 8.0 or lower
# message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#" # message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#"
# path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php # path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
- # this is for 8.1 or newer # - # this is for 8.1 or newer
message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects PgSql\\\\(Result|Connection(\\|string)?(\\|null)?), object\\|resource given\\.$#" # message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects PgSql\\\\(Result|Connection(\\|string)?(\\|null)?), object\\|resource given\\.$#"
path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php # path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
# this is ignored for now # this is ignored for now
# - '#Expression in empty\(\) is always falsy.#' # - '#Expression in empty\(\) is always falsy.#'
# - # -

View File

@@ -12,10 +12,10 @@ return array(
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
'9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
'2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php', '2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php',
'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php',
'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php',
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php', '6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php',
'9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
); );

View File

@@ -21,6 +21,7 @@ return array(
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'Phan\\' => array($vendorDir . '/phan/phan/src/Phan'), 'Phan\\' => array($vendorDir . '/phan/phan/src/Phan'),
'PHPStan\\ExtensionInstaller\\' => array($vendorDir . '/phpstan/extension-installer/src'),
'Microsoft\\PhpParser\\' => array($vendorDir . '/microsoft/tolerant-php-parser/src'), 'Microsoft\\PhpParser\\' => array($vendorDir . '/microsoft/tolerant-php-parser/src'),
'Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), 'Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'),
'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), 'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'),

View File

@@ -13,12 +13,12 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
'9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
'2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php', '2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php',
'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php',
'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php',
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php', '6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php',
'9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
); );
public static $prefixLengthsPsr4 = array ( public static $prefixLengthsPsr4 = array (
@@ -51,6 +51,7 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718
'Psr\\Log\\' => 8, 'Psr\\Log\\' => 8,
'Psr\\Container\\' => 14, 'Psr\\Container\\' => 14,
'Phan\\' => 5, 'Phan\\' => 5,
'PHPStan\\ExtensionInstaller\\' => 27,
), ),
'M' => 'M' =>
array ( array (
@@ -131,6 +132,10 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718
array ( array (
0 => __DIR__ . '/..' . '/phan/phan/src/Phan', 0 => __DIR__ . '/..' . '/phan/phan/src/Phan',
), ),
'PHPStan\\ExtensionInstaller\\' =>
array (
0 => __DIR__ . '/..' . '/phpstan/extension-installer/src',
),
'Microsoft\\PhpParser\\' => 'Microsoft\\PhpParser\\' =>
array ( array (
0 => __DIR__ . '/..' . '/microsoft/tolerant-php-parser/src', 0 => __DIR__ . '/..' . '/microsoft/tolerant-php-parser/src',

View File

@@ -634,18 +634,65 @@
"install-path": "../phpdocumentor/type-resolver" "install-path": "../phpdocumentor/type-resolver"
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/extension-installer",
"version": "1.10.2", "version": "1.2.0",
"version_normalized": "1.10.2.0", "version_normalized": "1.2.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/extension-installer.git",
"reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd" "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/a2ffec7db373d8da4973d1d62add872db5cd22dd", "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40",
"reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd", "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.0",
"php": "^7.2 || ^8.0",
"phpstan/phpstan": "^1.8.0"
},
"require-dev": {
"composer/composer": "^2.0",
"php-parallel-lint/php-parallel-lint": "^1.2.0",
"phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
},
"time": "2022-10-17T12:59:16+00:00",
"type": "composer-plugin",
"extra": {
"class": "PHPStan\\ExtensionInstaller\\Plugin"
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"PHPStan\\ExtensionInstaller\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Composer plugin for automatic installation of PHPStan extensions",
"support": {
"issues": "https://github.com/phpstan/extension-installer/issues",
"source": "https://github.com/phpstan/extension-installer/tree/1.2.0"
},
"install-path": "../phpstan/extension-installer"
},
{
"name": "phpstan/phpstan",
"version": "1.10.3",
"version_normalized": "1.10.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/5419375b5891add97dc74be71e6c1c34baaddf64",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -654,7 +701,7 @@
"conflict": { "conflict": {
"phpstan/phpstan-shim": "*" "phpstan/phpstan-shim": "*"
}, },
"time": "2023-02-23T14:36:46+00:00", "time": "2023-02-25T14:47:13+00:00",
"bin": [ "bin": [
"phpstan", "phpstan",
"phpstan.phar" "phpstan.phar"
@@ -677,7 +724,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/phpstan/phpstan/issues", "issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.10.2" "source": "https://github.com/phpstan/phpstan/tree/1.10.3"
}, },
"funding": [ "funding": [
{ {
@@ -1786,6 +1833,7 @@
"phpdocumentor/reflection-common", "phpdocumentor/reflection-common",
"phpdocumentor/reflection-docblock", "phpdocumentor/reflection-docblock",
"phpdocumentor/type-resolver", "phpdocumentor/type-resolver",
"phpstan/extension-installer",
"phpstan/phpstan", "phpstan/phpstan",
"psr/container", "psr/container",
"psr/log", "psr/log",

View File

@@ -3,7 +3,7 @@
'name' => '__root__', 'name' => '__root__',
'pretty_version' => 'dev-master', 'pretty_version' => 'dev-master',
'version' => 'dev-master', 'version' => 'dev-master',
'reference' => 'da67d1bde3260de1ef8d778f5d75f4e2c60de869', 'reference' => '44f37b7f74e1fcbfbbdf26036117d14404011abd',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
@@ -13,7 +13,7 @@
'__root__' => array( '__root__' => array(
'pretty_version' => 'dev-master', 'pretty_version' => 'dev-master',
'version' => 'dev-master', 'version' => 'dev-master',
'reference' => 'da67d1bde3260de1ef8d778f5d75f4e2c60de869', 'reference' => '44f37b7f74e1fcbfbbdf26036117d14404011abd',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
@@ -109,10 +109,19 @@
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'phpstan/extension-installer' => array(
'pretty_version' => '1.2.0',
'version' => '1.2.0.0',
'reference' => 'f06dbb052ddc394e7896fcd1cfcd533f9f6ace40',
'type' => 'composer-plugin',
'install_path' => __DIR__ . '/../phpstan/extension-installer',
'aliases' => array(),
'dev_requirement' => true,
),
'phpstan/phpstan' => array( 'phpstan/phpstan' => array(
'pretty_version' => '1.10.2', 'pretty_version' => '1.10.3',
'version' => '1.10.2.0', 'version' => '1.10.3.0',
'reference' => 'a2ffec7db373d8da4973d1d62add872db5cd22dd', 'reference' => '5419375b5891add97dc74be71e6c1c34baaddf64',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../phpstan/phpstan', 'install_path' => __DIR__ . '/../phpstan/phpstan',
'aliases' => array(), 'aliases' => array(),

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Ondřej Mirtes
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,77 @@
# PHPStan Extension Installer
[![Build](https://github.com/phpstan/extension-installer/workflows/Build/badge.svg)](https://github.com/phpstan/extension-installer/actions)
[![Latest Stable Version](https://poser.pugx.org/phpstan/extension-installer/v/stable)](https://packagist.org/packages/phpstan/extension-installer)
[![License](https://poser.pugx.org/phpstan/extension-installer/license)](https://packagist.org/packages/phpstan/extension-installer)
Composer plugin for automatic installation of [PHPStan](https://phpstan.org/) extensions.
# Motivation
```diff
diff --git a/phpstan.neon b/phpstan.neon
index db4e3df32e..2ca30fa20a 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -1,12 +1,3 @@
-includes:
- - vendor/phpstan/phpstan-doctrine/extension.neon
- - vendor/phpstan/phpstan-doctrine/rules.neon
- - vendor/phpstan/phpstan-nette/extension.neon
- - vendor/phpstan/phpstan-nette/rules.neon
- - vendor/phpstan/phpstan-phpunit/extension.neon
- - vendor/phpstan/phpstan-phpunit/rules.neon
- - vendor/phpstan/phpstan-strict-rules/rules.neon
-
parameters:
autoload_directories:
- %rootDir%/../../../build/SlevomatSniffs
diff --git a/composer.json b/composer.json
index 1b578dd624..f6ebf6e477 100644
--- a/composer.json
+++ b/composer.json
@@ -142,6 +142,7 @@
"jakub-onderka/php-parallel-lint": "1.0.0",
"justinrainbow/json-schema": "5.2.8",
"ondrejmirtes/mocktainer": "0.8",
+ "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.11.7",
"phpstan/phpstan-doctrine": "^0.11.3",
"phpstan/phpstan-nette": "^0.11.1",
```
## Usage
```bash
composer require --dev phpstan/extension-installer
```
Starting from Composer 2.2.0 you'll get the following question:
```
phpstan/extension-installer contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins
Do you trust "phpstan/extension-installer" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?]
```
Answer with `y` to allow the plugin.
## Instructions for extension developers
It's best (but optional) to set the extension's composer package [type](https://getcomposer.org/doc/04-schema.md#type) to `phpstan-extension` for this plugin to be able to recognize it and to be [discoverable on Packagist](https://packagist.org/explore/?type=phpstan-extension).
Add `phpstan` key in the extension `composer.json`'s `extra` section:
```json
{
"extra": {
"phpstan": {
"includes": [
"extension.neon"
]
}
}
}
```
## Limitations
The extension installer depends on Composer script events, therefore you cannot use `--no-scripts` flag.

View File

@@ -0,0 +1,12 @@
{
"require-dev": {
"consistence-community/coding-standard": "^3.10",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"slevomat/coding-standard": "^7.0"
},
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
}
}
}

View File

@@ -0,0 +1,322 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "4485bbedba7bcc71ace5f69dbb9b6c47",
"packages": [],
"packages-dev": [
{
"name": "consistence-community/coding-standard",
"version": "3.11.1",
"source": {
"type": "git",
"url": "https://github.com/consistence-community/coding-standard.git",
"reference": "4632fead8c9ee8f50044fcbce9f66c797b34c0df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/consistence-community/coding-standard/zipball/4632fead8c9ee8f50044fcbce9f66c797b34c0df",
"reference": "4632fead8c9ee8f50044fcbce9f66c797b34c0df",
"shasum": ""
},
"require": {
"php": ">=7.4",
"slevomat/coding-standard": "~7.0",
"squizlabs/php_codesniffer": "~3.6.0"
},
"replace": {
"consistence/coding-standard": "3.10.*"
},
"require-dev": {
"phing/phing": "2.16.4",
"php-parallel-lint/php-parallel-lint": "1.3.0",
"phpunit/phpunit": "9.5.4"
},
"type": "library",
"autoload": {
"psr-4": {
"Consistence\\": [
"Consistence"
]
},
"classmap": [
"Consistence"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Vašek Purchart",
"email": "me@vasekpurchart.cz",
"homepage": "http://vasekpurchart.cz"
}
],
"description": "Consistence - Coding Standard - PHP Code Sniffer rules",
"keywords": [
"Coding Standard",
"PHPCodeSniffer",
"codesniffer",
"coding",
"cs",
"phpcs",
"ruleset",
"sniffer",
"standard"
],
"support": {
"issues": "https://github.com/consistence-community/coding-standard/issues",
"source": "https://github.com/consistence-community/coding-standard/tree/3.11.1"
},
"time": "2021-05-03T18:13:22+00:00"
},
{
"name": "dealerdirect/phpcodesniffer-composer-installer",
"version": "v0.7.2",
"source": {
"type": "git",
"url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
"reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
"reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0 || ^2.0",
"php": ">=5.3",
"squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
},
"require-dev": {
"composer/composer": "*",
"php-parallel-lint/php-parallel-lint": "^1.3.1",
"phpcompatibility/php-compatibility": "^9.0"
},
"type": "composer-plugin",
"extra": {
"class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
},
"autoload": {
"psr-4": {
"Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Franck Nijhof",
"email": "franck.nijhof@dealerdirect.com",
"homepage": "http://www.frenck.nl",
"role": "Developer / IT Manager"
},
{
"name": "Contributors",
"homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors"
}
],
"description": "PHP_CodeSniffer Standards Composer Installer Plugin",
"homepage": "http://www.dealerdirect.com",
"keywords": [
"PHPCodeSniffer",
"PHP_CodeSniffer",
"code quality",
"codesniffer",
"composer",
"installer",
"phpcbf",
"phpcs",
"plugin",
"qa",
"quality",
"standard",
"standards",
"style guide",
"stylecheck",
"tests"
],
"support": {
"issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
"source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
},
"time": "2022-02-04T12:51:07+00:00"
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "981cc368a216c988e862a75e526b6076987d1b50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/981cc368a216c988e862a75e526b6076987d1b50",
"reference": "981cc368a216c988e862a75e526b6076987d1b50",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.5",
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^9.5",
"symfony/process": "^5.2"
},
"type": "library",
"autoload": {
"psr-4": {
"PHPStan\\PhpDocParser\\": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.5.1"
},
"time": "2022-05-05T11:32:40+00:00"
},
{
"name": "slevomat/coding-standard",
"version": "7.2.1",
"source": {
"type": "git",
"url": "https://github.com/slevomat/coding-standard.git",
"reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slevomat/coding-standard/zipball/aff06ae7a84e4534bf6f821dc982a93a5d477c90",
"reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90",
"shasum": ""
},
"require": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
"php": "^7.2 || ^8.0",
"phpstan/phpdoc-parser": "^1.5.1",
"squizlabs/php_codesniffer": "^3.6.2"
},
"require-dev": {
"phing/phing": "2.17.3",
"php-parallel-lint/php-parallel-lint": "1.3.2",
"phpstan/phpstan": "1.4.10|1.7.1",
"phpstan/phpstan-deprecation-rules": "1.0.0",
"phpstan/phpstan-phpunit": "1.0.0|1.1.1",
"phpstan/phpstan-strict-rules": "1.2.3",
"phpunit/phpunit": "7.5.20|8.5.21|9.5.20"
},
"type": "phpcodesniffer-standard",
"extra": {
"branch-alias": {
"dev-master": "7.x-dev"
}
},
"autoload": {
"psr-4": {
"SlevomatCodingStandard\\": "SlevomatCodingStandard"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
"support": {
"issues": "https://github.com/slevomat/coding-standard/issues",
"source": "https://github.com/slevomat/coding-standard/tree/7.2.1"
},
"funding": [
{
"url": "https://github.com/kukulich",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
"type": "tidelift"
}
],
"time": "2022-05-25T10:58:12+00:00"
},
{
"name": "squizlabs/php_codesniffer",
"version": "3.6.2",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
"reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"bin": [
"bin/phpcs",
"bin/phpcbf"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Greg Sherwood",
"role": "lead"
}
],
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
"homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
"keywords": [
"phpcs",
"standards"
],
"support": {
"issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
"source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
},
"time": "2021-12-12T21:44:58+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.3.0"
}

View File

@@ -0,0 +1,32 @@
{
"name": "phpstan/extension-installer",
"type": "composer-plugin",
"description": "Composer plugin for automatic installation of PHPStan extensions",
"license": [
"MIT"
],
"require": {
"php": "^7.2 || ^8.0",
"composer-plugin-api": "^2.0",
"phpstan/phpstan": "^1.8.0"
},
"require-dev": {
"composer/composer": "^2.0",
"php-parallel-lint/php-parallel-lint": "^1.2.0",
"phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
},
"config": {
"sort-packages": true,
"allow-plugins": {
"ocramius/package-versions": true
}
},
"extra": {
"class": "PHPStan\\ExtensionInstaller\\Plugin"
},
"autoload": {
"psr-4": {
"PHPStan\\ExtensionInstaller\\": "src/"
}
}
}

View File

@@ -0,0 +1,26 @@
<?php declare(strict_types = 1);
namespace PHPStan\ExtensionInstaller;
/**
* This is a stub class: it is in place only for scenarios where Composer
* is run with a `--no-scripts` flag, in which scenarios this stub class
* is not being replaced.
*
* If you are reading this docBlock inside your `vendor/` dir, then this means
* that phpstan/extension-installer didn't correctly install.
*
* @internal
*/
final class GeneratedConfig
{
public const EXTENSIONS = [];
public const NOT_INSTALLED = [];
private function __construct()
{
}
}

View File

@@ -0,0 +1,159 @@
<?php declare(strict_types = 1);
namespace PHPStan\ExtensionInstaller;
use Composer\Composer;
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
use Composer\Script\Event;
use Composer\Script\ScriptEvents;
use Composer\Util\Filesystem;
use function array_keys;
use function dirname;
use function file_exists;
use function file_put_contents;
use function getcwd;
use function in_array;
use function is_file;
use function ksort;
use function md5;
use function md5_file;
use function sprintf;
use function strpos;
use function var_export;
use const DIRECTORY_SEPARATOR;
final class Plugin implements PluginInterface, EventSubscriberInterface
{
/** @var string */
private static $generatedFileTemplate = <<<'PHP'
<?php declare(strict_types = 1);
namespace PHPStan\ExtensionInstaller;
/**
* This class is generated by phpstan/extension-installer.
* @internal
*/
final class GeneratedConfig
{
public const EXTENSIONS = %s;
public const NOT_INSTALLED = %s;
private function __construct()
{
}
}
PHP;
public function activate(Composer $composer, IOInterface $io): void
{
// noop
}
public function deactivate(Composer $composer, IOInterface $io): void
{
// noop
}
public function uninstall(Composer $composer, IOInterface $io): void
{
// noop
}
/**
* @return array<string, string>
*/
public static function getSubscribedEvents(): array
{
return [
ScriptEvents::POST_INSTALL_CMD => 'process',
ScriptEvents::POST_UPDATE_CMD => 'process',
];
}
public function process(Event $event): void
{
$io = $event->getIO();
if (!file_exists(__DIR__)) {
$io->write('<info>phpstan/extension-installer:</info> Package not found (probably scheduled for removal); extensions installation skipped.');
return;
}
$composer = $event->getComposer();
$installationManager = $composer->getInstallationManager();
$generatedConfigFilePath = __DIR__ . '/GeneratedConfig.php';
$oldGeneratedConfigFileHash = null;
if (is_file($generatedConfigFilePath)) {
$oldGeneratedConfigFileHash = md5_file($generatedConfigFilePath);
}
$notInstalledPackages = [];
$installedPackages = [];
$data = [];
$fs = new Filesystem();
foreach ($composer->getRepositoryManager()->getLocalRepository()->getPackages() as $package) {
if (
$package->getType() !== 'phpstan-extension'
&& !isset($package->getExtra()['phpstan'])
) {
if (
strpos($package->getName(), 'phpstan') !== false
&& !in_array($package->getName(), [
'phpstan/phpstan',
'phpstan/phpstan-shim',
'phpstan/phpdoc-parser',
'phpstan/extension-installer',
], true)
) {
$notInstalledPackages[$package->getName()] = $package->getFullPrettyVersion();
}
continue;
}
$installPath = $installationManager->getInstallPath($package);
$absoluteInstallPath = $fs->isAbsolutePath($installPath)
? $installPath
: getcwd() . DIRECTORY_SEPARATOR . $installPath;
$data[$package->getName()] = [
'install_path' => $absoluteInstallPath,
'relative_install_path' => $fs->findShortestPath(dirname($generatedConfigFilePath), $absoluteInstallPath, true),
'extra' => $package->getExtra()['phpstan'] ?? null,
'version' => $package->getFullPrettyVersion(),
];
$installedPackages[$package->getName()] = true;
}
ksort($data);
ksort($installedPackages);
ksort($notInstalledPackages);
$generatedConfigFileContents = sprintf(self::$generatedFileTemplate, var_export($data, true), var_export($notInstalledPackages, true));
file_put_contents($generatedConfigFilePath, $generatedConfigFileContents);
$io->write('<info>phpstan/extension-installer:</info> Extensions installed');
if ($oldGeneratedConfigFileHash === md5($generatedConfigFileContents)) {
return;
}
foreach (array_keys($installedPackages) as $name) {
$io->write(sprintf('> <info>%s:</info> installed', $name));
}
foreach (array_keys($notInstalledPackages) as $name) {
$io->write(sprintf('> <comment>%s:</comment> not supported', $name));
}
}
}

Binary file not shown.

View File

@@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmP3eecACgkQzxoQjQ56 iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmP6H1oACgkQzxoQjQ56
5yAH6A//R+CaBjUmbQhmamLiYATpskxv25DC/BQQ1+aK5sz8IlKcxPViN3Ke9QAq 5yCVhxAAlXqhfvKCITSAJjkaIhncEBHpT5Ogby65BX1O5+SkKyc/OO7JnjlN8cLB
qikQQ3ZDcNmBFR+p5ew9WuW4c99B/MX+Pg0Nc47keq/TxU/sslE1G7SuHssSCCxp DKbJpdc8P2Dbfo/uBHVR5YiNX5CWYzgdMzCpLQI20Ffa7qkeRbA5ZS2AfdIfLqhD
o1W3HihbZtDmPWYj3VWSmyEvFAbho/qpTsu9d34qDcryRCZ3A46NZ5zOdNa5uI2R PswlQIYxg0F3lj0L+joTxfBiHgmR5wnOUx1sLXnEbqGtFzzGstPGDg9gjKKh5EnO
8hyhuPsWF0fnd3sxYSRCL0fPp6CAEWxIRiG53gmMjTfVdTsZQZVwzgsfiW3GAIRf g207jrm1we05+k3kKzr233/ENvQD6bBWLr2yngyMoirOuDpurAuPjkBL7vN6PDbx
J7tYbGcBN3tyrJEFyFJCJkWt2ATla1LzucL6rrDUa9HzNsA5NUTOLj6j6PACQ0Vj DlyGDazsgU/R7aE2FtqmFC8KIU/BgnpbCSWTHBEJAqtncHbwTgneyEm+88lT6cUt
eCMfcDxKj/t6EJlHBpO2A5AiE8DOLs+lWmKiG7DqWOqqOnoYc/Fbv9RL3p25r7N2 YM72Rh1+QTvS3WgJ/q7AQRik2aE83Kz2rc3XOl1ADd45J3Oan1rqQXdnKtH6qZeT
gv4hhyEfBE0hoUxKSzsa7M++Ler+Js0Slxc881dpDuqvBEZFyA4M9YJTM4ckK92M wMk6PE8SQPJ8NMHy3LT048PfMOakAtgBL5xonbVqX0IFAvKAMRijwBCNKat2yRsB
LcFC1RJ5xdHx/COpYVN3w2DvZ9BVk2kvdByJGnyQ9Tp/R8HdW+cv88kYopIXZ0R5 0VGnoeH7klf1fSSo0xOD20Pd0uIILAWZlBjb2e/1NRytFQkokAr1bsLD/VJHiNYh
8m7B/zbtxMbtEzEn38JqfTtiQpE6vNH3iaWInIkP/ZZgfetCoHdXUF+NTTpTyUCm lPQ4OztCT/uumJOAgTKm10T56CK1u0VxhIVtQ+/NkTvAwrmpX0KKqbYPP/1hZqVO
C+NqRlgtA9NyjkdjX/kbohuxAcGsxlZu4/CfYKEIVAeCpM5sdjf4tRmmYn/5wCRF vFaWJR4iLFNt+il7dlv56jmTAneUrGrWkQdVFbz5FVpqz7abIo+/cevbSSndFZCI
226D4n9yPZ9YHE7HYLrRcmlx2jzsKH8wv8Z5IZ8KqZK/9tPhHoM= K1mn42aFdYXSqVTFpkzeOQeJPPysEYDysFk7ClhE+F48HN7WAtw=
=aGUS =A7BG
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View File

@@ -23,6 +23,7 @@ ob_end_flush();
use CoreLibs\Debug\Support; use CoreLibs\Debug\Support;
use CoreLibs\Debug\RunningTime; use CoreLibs\Debug\RunningTime;
use CoreLibs\Convert\SetVarType;
$log = new CoreLibs\Debug\Logging([ $log = new CoreLibs\Debug\Logging([
'log_folder' => BASE . LOG, 'log_folder' => BASE . LOG,
@@ -78,7 +79,9 @@ for ($i = 1; $i <= 6; $i++) {
(is_array($res) ? (is_array($res) ?
"Array: " . $db->log->prBl(is_array($res)) : '{-}') "Array: " . $db->log->prBl(is_array($res)) : '{-}')
) . ", " ) . ", "
. "cursor_ext: <pre>" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "</pre>"; . "cursor_ext: <pre>" . Support::printAr(
SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
) . "</pre>";
print "Run time: " . RunningTime::hrRunningTime() . "<br>"; print "Run time: " . RunningTime::hrRunningTime() . "<br>";
} }
// reset all read data // reset all read data
@@ -95,7 +98,9 @@ for ($i = 1; $i <= 6; $i++) {
(is_array($res) ? (is_array($res) ?
"Array: " . $db->log->prBl(is_array($res)) : '{-}') "Array: " . $db->log->prBl(is_array($res)) : '{-}')
) . ", " ) . ", "
. "cursor_ext: <pre>" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "</pre>"; . "cursor_ext: <pre>" . Support::printAr(
SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
) . "</pre>";
print "Run time: " . RunningTime::hrRunningTime() . "<br>"; print "Run time: " . RunningTime::hrRunningTime() . "<br>";
} }
// reset all read data // reset all read data
@@ -112,7 +117,9 @@ for ($i = 1; $i <= 6; $i++) {
(is_array($res) ? (is_array($res) ?
"Array: " . $db->log->prBl(is_array($res)) : '{-}') "Array: " . $db->log->prBl(is_array($res)) : '{-}')
) . ", " ) . ", "
. "cursor_ext: <pre>" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "</pre>"; . "cursor_ext: <pre>" . Support::printAr(
SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
) . "</pre>";
print "Run time: " . RunningTime::hrRunningTime() . "<br>"; print "Run time: " . RunningTime::hrRunningTime() . "<br>";
} }
// reset all read data // reset all read data
@@ -129,7 +136,9 @@ for ($i = 1; $i <= 6; $i++) {
(is_array($res) ? (is_array($res) ?
"Array: " . $db->log->prBl(is_array($res)) : '{-}') "Array: " . $db->log->prBl(is_array($res)) : '{-}')
) . ", " ) . ", "
. "cursor_ext: <pre>" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "</pre>"; . "cursor_ext: <pre>" . Support::printAr(
SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
) . "</pre>";
print "Run time: " . RunningTime::hrRunningTime() . "<br>"; print "Run time: " . RunningTime::hrRunningTime() . "<br>";
} }
// reset all data // reset all data

View File

@@ -62,7 +62,11 @@ print "VERSION LONG DB: " . $db->dbVersionInfo('server', false) . "<br>";
print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "<br>"; print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "<br>";
print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "<br>"; print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "<br>";
print "ALL PG VERSION PARAMETERS: <pre>" . print_r($db->dbVersionInfoParameters(), true) . "</pre><br>"; print "ALL PG VERSION PARAMETERS: <pre>" . print_r($db->dbVersionInfoParameters(), true) . "</pre><br>";
print "ALL OUTPUT [TEST]: <pre>" . print_r(pg_version($db->dbGetDbh()), true) . "</pre><br>"; if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) {
print "ALL OUTPUT [TEST]: <pre>" . print_r(pg_version($dbh), true) . "</pre><br>";
} else {
print "NO DB HANDLER<br>";
}
print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "<br>"; print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "<br>";
print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "<br>"; print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "<br>";
print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "<br>"; print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "<br>";
@@ -108,7 +112,11 @@ print "<br>";
print "<pre>"; print "<pre>";
print "SOCKET: " . pg_socket($db->dbGetDbh()) . "<br>"; if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) {
print "SOCKET: " . pg_socket($dbh) . "<br>";
} else {
print "NO SOCKET<br>";
}
// truncate test_foo table before testing // truncate test_foo table before testing
print "<b>TRUNCATE test_foo</b><br>"; print "<b>TRUNCATE test_foo</b><br>";

View File

@@ -24,6 +24,7 @@
} }
}, },
"require": { "require": {
"egrajp/smarty-extended": "^4.3" "egrajp/smarty-extended": "^4.3",
"php": ">=8.1"
} }
} }

View File

@@ -63,13 +63,14 @@ if (!defined('DIR')) {
exit('Base config could not be loaded'); exit('Base config could not be loaded');
} }
// find trigger name "admin/" or "frontend/" in the getcwd() folder // find trigger name "admin/" or "frontend/" in the getcwd() folder
foreach (['admin', 'frontend'] as $folder) { $folder = '';
if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $folder)) { foreach (['admin', 'frontend'] as $_folder) {
if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $_folder)) {
$folder = $_folder;
break; break;
} }
} }
// if content path is empty, fallback is default // if content path is empty, fallback is default
/** @phpstan-ignore-next-line can be empty */
if (empty($folder)) { if (empty($folder)) {
$folder = 'default'; $folder = 'default';
} }

View File

@@ -157,7 +157,7 @@ class Login
private $acl = []; private $acl = [];
/** @var array<mixed> */ /** @var array<mixed> */
private $default_acl_list = []; private $default_acl_list = [];
/** @var array<int|string,mixed> Reverse list to lookup level from type */ /** @var array<string,int> Reverse list to lookup level from type */
private $default_acl_list_type = []; private $default_acl_list_type = [];
/** @var int default ACL level to be based on if nothing set */ /** @var int default ACL level to be based on if nothing set */
private $default_acl_level = 0; private $default_acl_level = 0;
@@ -332,7 +332,7 @@ class Login
'type' => $res['type'], 'type' => $res['type'],
'name' => $res['name'] 'name' => $res['name']
]; ];
$this->default_acl_list_type[$res['type']] = $res['level']; $this->default_acl_list_type[(string)$res['type']] = (int)$res['level'];
} }
// write that into the session // write that into the session
$_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list; $_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list;
@@ -986,7 +986,7 @@ class Login
* @param string $password the new password * @param string $password the new password
* @return bool true or false if valid password or not * @return bool true or false if valid password or not
*/ */
private function loginPasswordChangeValidPassword($password): bool private function loginPasswordChangeValidPassword(string $password): bool
{ {
$is_valid_password = true; $is_valid_password = true;
// check for valid in regex arrays in list // check for valid in regex arrays in list
@@ -1048,7 +1048,7 @@ class Login
$res = $this->db->dbReturnRow($q); $res = $this->db->dbReturnRow($q);
if ( if (
!is_array($res) || !is_array($res) ||
(is_array($res) && empty($res['edit_user_id'])) empty($res['edit_user_id'])
) { ) {
// username wrong // username wrong
$this->login_error = 201; $this->login_error = 201;
@@ -1068,9 +1068,11 @@ class Login
} }
if ( if (
!is_array($res) || !is_array($res) ||
(is_array($res) && empty($res['edit_user_id']) ||
(empty($res['edit_user_id']) || !$this->loginPasswordCheck(
!$this->loginPasswordCheck($res['old_password_hash'], $this->pw_old_password))) $res['old_password_hash'],
$this->pw_old_password
)
) { ) {
// old password wrong // old password wrong
$this->login_error = 202; $this->login_error = 202;
@@ -1124,7 +1126,7 @@ class Login
* *
* @return string|null html data for login page, or null for nothing * @return string|null html data for login page, or null for nothing
*/ */
private function loginCreateLoginHTML() private function loginCreateLoginHTML(): ?string
{ {
$html_string = null; $html_string = null;
// if permission is ok, return null // if permission is ok, return null
@@ -1421,8 +1423,12 @@ EOM;
* @param string $username login user username * @param string $username login user username
* @return void has no return * @return void has no return
*/ */
private function writeLog(string $event, string $data, $error = '', string $username = ''): void private function writeLog(
{ string $event,
string $data,
string|int $error = '',
string $username = ''
): void {
if ($this->login) { if ($this->login) {
$this->action = 'Login'; $this->action = 'Login';
} elseif ($this->logout) { } elseif ($this->logout) {
@@ -1794,7 +1800,6 @@ EOM;
// check that numeric, positive numeric, not longer than max input string lenght // check that numeric, positive numeric, not longer than max input string lenght
// and not short than min password length // and not short than min password length
if ( if (
is_numeric($length) &&
$length >= $this->password_min_length_max && $length >= $this->password_min_length_max &&
$length <= $this->password_max_length && $length <= $this->password_max_length &&
$length <= 255 $length <= 255
@@ -2069,9 +2074,12 @@ EOM;
* @param string $type Type name to look in the acl list * @param string $type Type name to look in the acl list
* @return int|bool Either int level or false for not found * @return int|bool Either int level or false for not found
*/ */
public function loginGetAclListFromType(string $type) public function loginGetAclListFromType(string $type): int|bool
{ {
return $this->default_acl_list_type[$type] ?? false; if (!isset($this->default_acl_list_type[$type])) {
return false;
}
return (int)$this->default_acl_list_type[$type];
} }
/** /**
@@ -2081,7 +2089,7 @@ EOM;
* @return bool true/false: if the edit access is not * @return bool true/false: if the edit access is not
* in the valid list: false * in the valid list: false
*/ */
public function loginCheckEditAccess($edit_access_id): bool public function loginCheckEditAccess(?int $edit_access_id): bool
{ {
if ($edit_access_id === null) { if ($edit_access_id === null) {
return false; return false;
@@ -2122,8 +2130,10 @@ EOM;
* @param string|int $data_key key value to search for * @param string|int $data_key key value to search for
* @return bool|string false for not found or string for found data * @return bool|string false for not found or string for found data
*/ */
public function loginGetEditAccessData(int $edit_access_id, $data_key) public function loginGetEditAccessData(
{ int $edit_access_id,
string|int $data_key
): bool|string {
if (!isset($_SESSION['UNIT'][$edit_access_id]['data'][$data_key])) { if (!isset($_SESSION['UNIT'][$edit_access_id]['data'][$data_key])) {
return false; return false;
} }
@@ -2137,9 +2147,12 @@ EOM;
* @param string $uid Edit Access UID to look for * @param string $uid Edit Access UID to look for
* @return int|bool Either primary key in int or false in bool for not found * @return int|bool Either primary key in int or false in bool for not found
*/ */
public function loginGetEditAccessIdFromUid(string $uid) public function loginGetEditAccessIdFromUid(string $uid): int|bool
{ {
return $_SESSION['UNIT_UID'][$uid] ?? false; if (!isset($_SESSION['UNIT_UID'][$uid])) {
return false;
}
return (int)$_SESSION['UNIT_UID'][$uid];
} }
/** /**
@@ -2204,8 +2217,10 @@ EOM;
* @param string|int $data_key * @param string|int $data_key
* @return bool|string * @return bool|string
*/ */
public function loginSetEditAccessData(int $edit_access_id, $data_key) public function loginSetEditAccessData(
{ int $edit_access_id,
string|int $data_key
): bool|string {
return $this->loginGetEditAccessData($edit_access_id, $data_key); return $this->loginGetEditAccessData($edit_access_id, $data_key);
} }
} }

View File

@@ -194,7 +194,7 @@ class Backend
*/ */
public function adbEditLog( public function adbEditLog(
string $event = '', string $event = '',
$data = '', string|array $data = '',
string $write_type = 'STRING' string $write_type = 'STRING'
): void { ): void {
$data_binary = ''; $data_binary = '';
@@ -262,7 +262,7 @@ class Backend
* @param string|int $menu_show_flag * @param string|int $menu_show_flag
* @return string|int * @return string|int
*/ */
public function adbSetMenuShowFlag($menu_show_flag) public function adbSetMenuShowFlag(string|int $menu_show_flag): string|int
{ {
// must be string or int // must be string or int
$this->menu_show_flag = $menu_show_flag; $this->menu_show_flag = $menu_show_flag;
@@ -274,7 +274,7 @@ class Backend
* *
* @return string|int * @return string|int
*/ */
public function adbGetMenuShowFlag() public function adbGetMenuShowFlag(): string|int
{ {
return $this->menu_show_flag; return $this->menu_show_flag;
} }
@@ -437,7 +437,7 @@ class Backend
* @return array<mixed> associative array * @return array<mixed> associative array
* @deprecated \CoreLibs\Combined\ArrayHandler::genAssocArray() * @deprecated \CoreLibs\Combined\ArrayHandler::genAssocArray()
*/ */
public function adbAssocArray(array $db_array, $key, $value): array public function adbAssocArray(array $db_array, string|int|bool $key, string|int|bool $value): array
{ {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray',
@@ -453,7 +453,7 @@ class Backend
* @return string formatted string * @return string formatted string
* @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat() * @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat()
*/ */
public function adbByteStringFormat($number): string public function adbByteStringFormat(string|int|float $number): string
{ {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()',
@@ -482,7 +482,7 @@ class Backend
string $dummy = '', string $dummy = '',
string $path = '', string $path = '',
string $cache = '' string $cache = ''
) { ): string|bool {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Output\Image::createThumbnail()', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Output\Image::createThumbnail()',
E_USER_DEPRECATED E_USER_DEPRECATED
@@ -569,28 +569,28 @@ class Backend
* Basic class holds exact the same, except the Year/Month/Day/etc strings * Basic class holds exact the same, except the Year/Month/Day/etc strings
* are translated in this call * are translated in this call
* *
* @param int $year year YYYY * @param int|string $year year YYYY
* @param int $month month m * @param int|string $month month m
* @param int $day day d * @param int|string $day day d
* @param int $hour hour H * @param int|string $hour hour H
* @param int $min min i * @param int|string $min min i
* @param string $suffix additional info printed after the date time * @param string $suffix additional info printed after the date time
* variable in the drop down * variable in the drop down
* also used for ID in the on change JS call * also used for ID in the on change JS call
* @param int $min_steps default is 1 (minute), can set to anything, * @param int $min_steps default is 1 (minute), can set to anything,
* is used as sum up from 0 * is used as sum up from 0
* @param bool $name_pos_back default false, if set to true, * @param bool $name_pos_back default false, if set to true,
* the name will be printend * the name will be printend
* after the drop down and not before the drop down * after the drop down and not before the drop down
* @return string HTML formated strings for drop down lists * @return string HTML formated strings for drop down lists
* of date and time * of date and time
*/ */
public function adbPrintDateTime( public function adbPrintDateTime(
$year, int|string $year,
$month, int|string $month,
$day, int|string $day,
$hour, int|string $hour,
$min, int|string $min,
string $suffix = '', string $suffix = '',
int $min_steps = 1, int $min_steps = 1,
bool $name_pos_back = false bool $name_pos_back = false

View File

@@ -534,7 +534,7 @@ class EditBase
* @throws Exception * @throws Exception
* @throws SmartyException * @throws SmartyException
*/ */
public function editBaseRun() public function editBaseRun(): void
{ {
// set the template dir // set the template dir
// WARNING: this has a special check for the mailing tool layout (old layout) // WARNING: this has a special check for the mailing tool layout (old layout)

View File

@@ -672,9 +672,6 @@ class Basic
public static function arrayToString(array $array, string $connect_char): string public static function arrayToString(array $array, string $connect_char): string
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED);
if (!is_array($array)) {
$array = [];
}
return join($connect_char, $array); return join($connect_char, $array);
} }

View File

@@ -42,8 +42,11 @@ class Colors
* @param int|false $hsl_flag flag to check for hsl type * @param int|false $hsl_flag flag to check for hsl type
* @return bool True if no error, False if error * @return bool True if no error, False if error
*/ */
private static function rgbHslContentCheck(string $color, $rgb_flag, $hsl_flag): bool private static function rgbHslContentCheck(
{ string $color,
int|false $rgb_flag,
int|false $hsl_flag
): bool {
// extract string between () and split into elements // extract string between () and split into elements
preg_match("/\((.*)\)/", $color, $matches); preg_match("/\((.*)\)/", $color, $matches);
if ( if (

View File

@@ -25,7 +25,7 @@ class Encoding
* if null is set then "none" * if null is set then "none"
* @return void * @return void
*/ */
public static function setErrorChar($string): void public static function setErrorChar(string|int|null $string): void
{ {
if (empty($string)) { if (empty($string)) {
$string = 'none'; $string = 'none';
@@ -52,7 +52,7 @@ class Encoding
* directly * directly
* @return string|int Set error character * @return string|int Set error character
*/ */
public static function getErrorChar(bool $return_substitute_func = false) public static function getErrorChar(bool $return_substitute_func = false): string|int
{ {
// return mb_substitute_character(); // return mb_substitute_character();
if ($return_substitute_func === true) { if ($return_substitute_func === true) {
@@ -78,14 +78,14 @@ class Encoding
* @param string $string string to test * @param string $string string to test
* @param string $from_encoding encoding of string to test * @param string $from_encoding encoding of string to test
* @param string $to_encoding target encoding * @param string $to_encoding target encoding
* @return bool|array<string> false if no error or * @return array<string>|false false if no error or
* array with failed characters * array with failed characters
*/ */
public static function checkConvertEncoding( public static function checkConvertEncoding(
string $string, string $string,
string $from_encoding, string $from_encoding,
string $to_encoding string $to_encoding
) { ): array|false {
// convert to target encoding and convert back // convert to target encoding and convert back
$temp = mb_convert_encoding($string, $to_encoding, $from_encoding); $temp = mb_convert_encoding($string, $to_encoding, $from_encoding);
$compare = mb_convert_encoding($temp, $from_encoding, $to_encoding); $compare = mb_convert_encoding($temp, $from_encoding, $to_encoding);

View File

@@ -1,41 +0,0 @@
<?php
/*
* DEPRECATED: Use correct Convert\Json:: instead
*/
declare(strict_types=1);
namespace CoreLibs\Check;
use CoreLibs\Convert\Json;
class Jason
{
/**
* @param string|null $json a json string, or null data
* @param bool $override if set to true, then on json error
* set original value as array
* @return array<mixed> returns an array from the json values
* @deprecated Use Json::jsonConvertToArray()
*/
public static function jsonConvertToArray(?string $json, bool $override = false): array
{
return Json::jsonConvertToArray($json, $override);
}
/**
* @param bool|boolean $return_string [default=false] if set to true
* it will return the message string and not
* the error number
* @return int|string Either error number (0 for no error)
* or error string ('' for no error)
* @deprecated Use Json::jsonGetLastError()
*/
public static function jsonGetLastError(bool $return_string = false)
{
return Json::jsonGetLastError($return_string);
}
}
// __END__

View File

@@ -21,12 +21,12 @@ class ArrayHandler
* the needle can be found in the * the needle can be found in the
* haystack array * haystack array
*/ */
public static function arraySearchRecursive($needle, array $haystack, ?string $key_search_for = null): array public static function arraySearchRecursive(
{ string|int $needle,
array $haystack,
?string $key_search_for = null
): array {
$path = []; $path = [];
if (!is_array($haystack)) {
$haystack = [];
}
if ( if (
$key_search_for != null && $key_search_for != null &&
array_key_exists($key_search_for, $haystack) && array_key_exists($key_search_for, $haystack) &&
@@ -72,7 +72,7 @@ class ArrayHandler
* *
* @param string|int $needle needle (search for) * @param string|int $needle needle (search for)
* @param array<mixed> $haystack haystack (search in) * @param array<mixed> $haystack haystack (search in)
* @param string|int $key_search_for the key to look for in * @param string|int|null $key_search_for the key to look for in
* @param bool $old [true], if set to false will * @param bool $old [true], if set to false will
* return new flat layout * return new flat layout
* @param array<mixed>|null $path recursive call for previous path * @param array<mixed>|null $path recursive call for previous path
@@ -80,9 +80,9 @@ class ArrayHandler
* the element was found * the element was found
*/ */
public static function arraySearchRecursiveAll( public static function arraySearchRecursiveAll(
$needle, string|int $needle,
array $haystack, array $haystack,
$key_search_for, string|int|null $key_search_for,
bool $old = true, bool $old = true,
?array $path = null ?array $path = null
): ?array { ): ?array {
@@ -101,10 +101,6 @@ class ArrayHandler
$path['work'] = []; $path['work'] = [];
} }
} }
// should not be needed because it would trigger a php mehtod error
if (!is_array($haystack)) {
$haystack = [];
}
// go through the array, // go through the array,
foreach ($haystack as $_key => $_value) { foreach ($haystack as $_key => $_value) {
@@ -152,17 +148,18 @@ class ArrayHandler
* array search simple. looks for key, value combination, if found, returns true * array search simple. looks for key, value combination, if found, returns true
* on default does not strict check, so string '4' will match int 4 and vica versa * on default does not strict check, so string '4' will match int 4 and vica versa
* *
* @param array<mixed> $array search in as array * @param array<mixed> $array search in as array
* @param string|int $key key (key to search in) * @param string|int $key key (key to search in)
* @param string|int $value value (what to find) * @param string|int|bool $value value (what to find)
* @param bool $strict [false], if set to true, will strict check key/value * @param bool $strict [false], if set to true, will strict check key/value
* @return bool true on found, false on not found * @return bool true on found, false on not found
*/ */
public static function arraySearchSimple(array $array, $key, $value, bool $strict = false): bool public static function arraySearchSimple(
{ array $array,
if (!is_array($array)) { string|int $key,
$array = []; string|int|bool $value,
} bool $strict = false
): bool {
foreach ($array as $_key => $_value) { foreach ($array as $_key => $_value) {
// if value is an array, we search // if value is an array, we search
if (is_array($_value)) { if (is_array($_value)) {
@@ -189,9 +186,9 @@ class ArrayHandler
* bool key flag: true: handle keys as string or int * bool key flag: true: handle keys as string or int
* default false: all keys are string * default false: all keys are string
* *
* @return array<mixed>|bool merged array * @return array<mixed>|false merged array
*/ */
public static function arrayMergeRecursive() public static function arrayMergeRecursive(): array|false
{ {
// croak on not enough arguemnts (we need at least two) // croak on not enough arguemnts (we need at least two)
if (func_num_args() < 2) { if (func_num_args() < 2) {
@@ -264,10 +261,10 @@ class ArrayHandler
* @param array<mixed> $needle elements to search for * @param array<mixed> $needle elements to search for
* @param array<mixed> $haystack array where the $needle elements should * @param array<mixed> $haystack array where the $needle elements should
* be searched int * be searched int
* @return array<mixed>|bool either the found elements or * @return array<mixed>|false either the found elements or
* false for nothing found or error * false for nothing found or error
*/ */
public static function inArrayAny(array $needle, array $haystack) public static function inArrayAny(array $needle, array $haystack): array|false
{ {
$found = []; $found = [];
foreach ($needle as $element) { foreach ($needle as $element) {
@@ -291,8 +288,12 @@ class ArrayHandler
* @param bool $set_only flag to return all (default), or set only * @param bool $set_only flag to return all (default), or set only
* @return array<mixed> associative array * @return array<mixed> associative array
*/ */
public static function genAssocArray(array $db_array, $key, $value, bool $set_only = false): array public static function genAssocArray(
{ array $db_array,
string|int|bool $key,
string|int|bool $value,
bool $set_only = false
): array {
$ret_array = []; $ret_array = [];
// do this to only run count once // do this to only run count once
for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) { for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) {
@@ -385,11 +386,8 @@ class ArrayHandler
* and will be pushed up * and will be pushed up
* @return array<mixed> modified, flattened array * @return array<mixed> modified, flattened array
*/ */
public static function arrayFlatForKey(array $array, $search): array public static function arrayFlatForKey(array $array, string|int $search): array
{ {
if (!is_array($array)) {
$array = [];
}
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
// if it is not an array do just nothing // if it is not an array do just nothing
if (!is_array($value)) { if (!is_array($value)) {

View File

@@ -74,7 +74,7 @@ class DateTime
* @return string formated date+time in Y-M-D h:m:s ms * @return string formated date+time in Y-M-D h:m:s ms
*/ */
public static function dateStringFormat( public static function dateStringFormat(
$timestamp, int|float $timestamp,
bool $show_micro = false, bool $show_micro = false,
bool $micro_as_float = false bool $micro_as_float = false
): string { ): string {
@@ -100,8 +100,10 @@ class DateTime
* @param bool $show_micro show micro seconds, default true * @param bool $show_micro show micro seconds, default true
* @return string interval formatted string or string as is * @return string interval formatted string or string as is
*/ */
public static function timeStringFormat($timestamp, bool $show_micro = true): string public static function timeStringFormat(
{ string|int|float $timestamp,
bool $show_micro = true
): string {
// check if the timestamp has any h/m/s/ms inside, if yes skip // check if the timestamp has any h/m/s/ms inside, if yes skip
if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) { if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null); list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null);
@@ -157,7 +159,7 @@ class DateTime
* @param string|int|float $timestring formatted interval * @param string|int|float $timestring formatted interval
* @return string|int|float converted float interval, or string as is * @return string|int|float converted float interval, or string as is
*/ */
public static function stringToTime($timestring) public static function stringToTime(string|int|float $timestring): string|int|float
{ {
$timestamp = 0; $timestamp = 0;
if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) { if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) {
@@ -247,9 +249,9 @@ class DateTime
* @param string $date a date string in the format YYYY-MM-DD * @param string $date a date string in the format YYYY-MM-DD
* @return bool true if valid date, false if date not valid * @return bool true if valid date, false if date not valid
*/ */
public static function checkDate($date): bool public static function checkDate(string $date): bool
{ {
if (!$date) { if (empty($date)) {
return false; return false;
} }
list ($year, $month, $day) = array_pad( list ($year, $month, $day) = array_pad(
@@ -324,7 +326,7 @@ class DateTime
* @return int|bool false on error * @return int|bool false on error
* or int -1 (s<e)/0 (s=e)/1 (s>e) as difference * or int -1 (s<e)/0 (s=e)/1 (s>e) as difference
*/ */
public static function compareDate($start_date, $end_date) public static function compareDate(string $start_date, string $end_date): int|bool
{ {
// pre check for empty or wrong // pre check for empty or wrong
if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) { if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) {
@@ -367,7 +369,7 @@ class DateTime
* @return int|bool false for error * @return int|bool false for error
* or -1 (s<e)/0 (s=e)/1 (s>e) as difference * or -1 (s<e)/0 (s=e)/1 (s>e) as difference
*/ */
public static function compareDateTime($start_datetime, $end_datetime) public static function compareDateTime(string $start_datetime, string $end_datetime): int|bool
{ {
// pre check for empty or wrong // pre check for empty or wrong
if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) { if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) {
@@ -402,8 +404,11 @@ class DateTime
* @param bool $return_named return array type, false (default), true for named * @param bool $return_named return array type, false (default), true for named
* @return array<mixed> 0/overall, 1/weekday, 2/weekend * @return array<mixed> 0/overall, 1/weekday, 2/weekend
*/ */
public static function calcDaysInterval($start_date, $end_date, bool $return_named = false): array public static function calcDaysInterval(
{ string $start_date,
string $end_date,
bool $return_named = false
): array {
// pos 0 all, pos 1 weekday, pos 2 weekend // pos 0 all, pos 1 weekday, pos 2 weekend
$days = []; $days = [];
// if anything invalid, return 0,0,0 // if anything invalid, return 0,0,0

View File

@@ -39,7 +39,7 @@ class Byte
* @return string converted byte number (float) with suffix * @return string converted byte number (float) with suffix
* @throws \Exception 1: no valid flag set * @throws \Exception 1: no valid flag set
*/ */
public static function humanReadableByteFormat($bytes, int $flags = 0): string public static function humanReadableByteFormat(string|int|float $bytes, int $flags = 0): string
{ {
// if not numeric, return as is // if not numeric, return as is
if (is_numeric($bytes)) { if (is_numeric($bytes)) {
@@ -121,7 +121,7 @@ class Byte
* @return string|int|float converted value or original value * @return string|int|float converted value or original value
* @throws \Exception 1: no valid flag set * @throws \Exception 1: no valid flag set
*/ */
public static function stringByteFormat($number, int $flags = 0) public static function stringByteFormat(string|int|float $number, int $flags = 0): string|int|float
{ {
// use SI 1000 mod and not 1024 mod // use SI 1000 mod and not 1024 mod
if ($flags & self::BYTE_FORMAT_SI) { if ($flags & self::BYTE_FORMAT_SI) {

View File

@@ -31,8 +31,12 @@ class Colors
* @return string|bool rgb in hex values with leading # if set, * @return string|bool rgb in hex values with leading # if set,
* false for invalid color * false for invalid color
*/ */
public static function rgb2hex(int $red, int $green, int $blue, bool $hex_prefix = true) public static function rgb2hex(
{ int $red,
int $green,
int $blue,
bool $hex_prefix = true
): string|bool {
$hex_color = ''; $hex_color = '';
if ($hex_prefix === true) { if ($hex_prefix === true) {
$hex_color = '#'; $hex_color = '#';
@@ -61,7 +65,7 @@ class Colors
string $hexStr, string $hexStr,
bool $return_as_string = false, bool $return_as_string = false,
string $seperator = ',' string $seperator = ','
) { ): string|array|bool {
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
if (!is_string($hexStr)) { if (!is_string($hexStr)) {
return false; return false;
@@ -99,7 +103,7 @@ class Colors
* @return array<int|float>|bool Hue, Sat, Brightness/Value * @return array<int|float>|bool Hue, Sat, Brightness/Value
* false for input value error * false for input value error
*/ */
public static function rgb2hsb(int $red, int $green, int $blue) public static function rgb2hsb(int $red, int $green, int $blue): array|bool
{ {
// check that rgb is from 0 to 255 // check that rgb is from 0 to 255
foreach (['red', 'green', 'blue'] as $c) { foreach (['red', 'green', 'blue'] as $c) {
@@ -146,7 +150,7 @@ class Colors
* @return array<int>|bool 0 red/1 green/2 blue array as 0-255 * @return array<int>|bool 0 red/1 green/2 blue array as 0-255
* false for input value error * false for input value error
*/ */
public static function hsb2rgb(float $H, float $S, float $V) public static function hsb2rgb(float $H, float $S, float $V): array|bool
{ {
// check that H is 0 to 359, 360 = 0 // check that H is 0 to 359, 360 = 0
// and S and V are 0 to 1 // and S and V are 0 to 1
@@ -232,7 +236,7 @@ class Colors
* @return array<float>|bool hue/sat/luminance * @return array<float>|bool hue/sat/luminance
* false for input value error * false for input value error
*/ */
public static function rgb2hsl(int $red, int $green, int $blue) public static function rgb2hsl(int $red, int $green, int $blue): array|bool
{ {
// check that rgb is from 0 to 255 // check that rgb is from 0 to 255
foreach (['red', 'green', 'blue'] as $c) { foreach (['red', 'green', 'blue'] as $c) {
@@ -285,11 +289,8 @@ class Colors
* @param float $lum luminance: 0-100 * @param float $lum luminance: 0-100
* @return array<int,float|int>|bool red/blue/green 0-255 each * @return array<int,float|int>|bool red/blue/green 0-255 each
*/ */
public static function hsl2rgb(float $hue, float $sat, float $lum) public static function hsl2rgb(float $hue, float $sat, float $lum): array|bool
{ {
if (!is_numeric($hue)) {
return false;
}
if ($hue == 360) { if ($hue == 360) {
$hue = 0; $hue = 0;
} }

View File

@@ -19,7 +19,7 @@ class Html
* @param mixed $string string to html encode * @param mixed $string string to html encode
* @return mixed if string, encoded, else as is (eg null) * @return mixed if string, encoded, else as is (eg null)
*/ */
public static function htmlent($string) public static function htmlent(mixed $string): mixed
{ {
if (is_string($string)) { if (is_string($string)) {
return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
@@ -52,7 +52,7 @@ class Html
* @return ?string returns checked or selected, * @return ?string returns checked or selected,
* else returns null * else returns null
*/ */
public static function checked($haystack, string $needle, int $type = 0): ?string public static function checked(array|string $haystack, string $needle, int $type = 0): ?string
{ {
if (is_array($haystack)) { if (is_array($haystack)) {
if (in_array($needle, $haystack)) { if (in_array($needle, $haystack)) {

View File

@@ -51,13 +51,13 @@ class Json
/** /**
* returns human readable string for json errors thrown in jsonConvertToArray * returns human readable string for json errors thrown in jsonConvertToArray
* *
* @param bool|boolean $return_string [default=false] if set to true * @param bool $return_string [default=false] if set to true
* it will return the message string and not * it will return the message string and not
* the error number * the error number
* @return int|string Either error number (0 for no error) * @return int|string Either error number (0 for no error)
* or error string ('' for no error) * or error string ('' for no error)
*/ */
public static function jsonGetLastError(bool $return_string = false) public static function jsonGetLastError(bool $return_string = false): int|string
{ {
$json_error_string = ''; $json_error_string = '';
// valid errors as of php 8.0 // valid errors as of php 8.0

View File

@@ -48,7 +48,7 @@ class Math
* @param string|int|float $number string or number to check * @param string|int|float $number string or number to check
* @return float if not number, then returns 0, else original input * @return float if not number, then returns 0, else original input
*/ */
public static function initNumeric($number): float public static function initNumeric(string|int|float $number): float
{ {
if (!is_numeric($number)) { if (!is_numeric($number)) {
return 0; return 0;

View File

@@ -32,7 +32,7 @@ class RandomKey
* *
* @return void has no return * @return void has no return
*/ */
private static function initRandomKeyData() private static function initRandomKeyData(): void
{ {
// random key generation base string // random key generation base string
self::$key_range = join('', array_merge( self::$key_range = join('', array_merge(
@@ -52,7 +52,6 @@ class RandomKey
private static function validateRandomKeyLenght(int $key_length): bool private static function validateRandomKeyLenght(int $key_length): bool
{ {
if ( if (
is_numeric($key_length) &&
$key_length > 0 && $key_length > 0 &&
$key_length <= self::$max_key_length $key_length <= self::$max_key_length
) { ) {

View File

@@ -18,19 +18,6 @@ class Session
/** @var string list for errors */ /** @var string list for errors */
private $session_intern_error_str = ''; private $session_intern_error_str = '';
/**
* Start session
* startSession should be called for complete check
* If this is called without any name set before the php.ini name is
* used.
*
* @return void
*/
protected function startSessionCall(): void
{
session_start();
}
/** /**
* init a session, if array is empty or array does not have session_name set * init a session, if array is empty or array does not have session_name set
* then no auto init is run * then no auto init is run
@@ -44,6 +31,19 @@ class Session
} }
} }
/**
* Start session
* startSession should be called for complete check
* If this is called without any name set before the php.ini name is
* used.
*
* @return void
*/
protected function startSessionCall(): void
{
session_start();
}
/** /**
* check if we are in CLI, we set this, so we can mock this * check if we are in CLI, we set this, so we can mock this
* Not this is just a wrapper for the static System::checkCLI call * Not this is just a wrapper for the static System::checkCLI call
@@ -116,7 +116,7 @@ class Session
* @param string|null $session_name * @param string|null $session_name
* @return string|bool * @return string|bool
*/ */
public function startSession(?string $session_name = null) public function startSession(?string $session_name = null): string|bool
{ {
// we can't start sessions on command line // we can't start sessions on command line
if ($this->checkCliStatus()) { if ($this->checkCliStatus()) {
@@ -163,7 +163,7 @@ class Session
* *
* @return string|bool * @return string|bool
*/ */
public function getSessionId() public function getSessionId(): string|bool
{ {
return session_id(); return session_id();
} }
@@ -173,7 +173,7 @@ class Session
* *
* @return string|bool * @return string|bool
*/ */
public function getSessionName() public function getSessionName(): string|bool
{ {
return session_name(); return session_name();
} }
@@ -275,7 +275,7 @@ class Session
* @param mixed $value value to set (can be anything) * @param mixed $value value to set (can be anything)
* @return void * @return void
*/ */
public function setS($name, $value): void public function setS(string|int $name, mixed $value): void
{ {
$_SESSION[$name] = $value; $_SESSION[$name] = $value;
} }
@@ -286,7 +286,7 @@ class Session
* @param string|int $name value key to get from _SESSION * @param string|int $name value key to get from _SESSION
* @return mixed value stored in _SESSION * @return mixed value stored in _SESSION
*/ */
public function getS($name) public function getS(string|int $name): mixed
{ {
return $_SESSION[$name] ?? ''; return $_SESSION[$name] ?? '';
} }
@@ -297,7 +297,7 @@ class Session
* @param string|int $name Name to check for * @param string|int $name Name to check for
* @return bool True for set, False fornot set * @return bool True for set, False fornot set
*/ */
public function issetS($name): bool public function issetS(string|int $name): bool
{ {
return isset($_SESSION[$name]); return isset($_SESSION[$name]);
} }
@@ -308,7 +308,7 @@ class Session
* @param string|int $name _SESSION key name to remove * @param string|int $name _SESSION key name to remove
* @return void * @return void
*/ */
public function unsetS($name): void public function unsetS(string|int $name): void
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
unset($_SESSION[$name]); unset($_SESSION[$name]);
@@ -325,7 +325,7 @@ class Session
* @param mixed $value * @param mixed $value
* @return void * @return void
*/ */
public function __set($name, $value): void public function __set(string|int $name, mixed $value): void
{ {
$_SESSION[$name] = $value; $_SESSION[$name] = $value;
} }
@@ -334,13 +334,14 @@ class Session
* Undocumented function * Undocumented function
* *
* @param string|int $name * @param string|int $name
* @return mixed * @return mixed If name is not found, it will return null
*/ */
public function __get($name) public function __get(string|int $name): mixed
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
return $_SESSION[$name]; return $_SESSION[$name];
} }
return null;
} }
/** /**
@@ -349,7 +350,7 @@ class Session
* @param string|int $name * @param string|int $name
* @return bool * @return bool
*/ */
public function __isset($name): bool public function __isset(string|int $name): bool
{ {
return isset($_SESSION[$name]); return isset($_SESSION[$name]);
} }
@@ -360,7 +361,7 @@ class Session
* @param string|int $name * @param string|int $name
* @return void * @return void
*/ */
public function __unset($name): void public function __unset(string|int $name): void
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
unset($_SESSION[$name]); unset($_SESSION[$name]);

View File

@@ -137,7 +137,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text any html encoded string * @param string $text any html encoded string
* @return string decoded html string * @return string decoded html string
*/ */
public function convertData($text): string public function convertData(string $text): string
{ {
$text = str_replace('&lt;b&gt;', '<b>', $text); $text = str_replace('&lt;b&gt;', '<b>', $text);
$text = str_replace('&lt;/b&gt;', '</b>', $text); $text = str_replace('&lt;/b&gt;', '</b>', $text);
@@ -156,7 +156,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text encoded html string * @param string $text encoded html string
* @return string decoded html string * @return string decoded html string
*/ */
public function convertEntities($text): string public function convertEntities(string $text): string
{ {
$text = str_replace('&lt;', '<', $text); $text = str_replace('&lt;', '<', $text);
$text = str_replace('&gt;', '>', $text); $text = str_replace('&gt;', '>', $text);
@@ -172,7 +172,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param bool $write write to error message, default false * @param bool $write write to error message, default false
* @return string the array data as html string entry * @return string the array data as html string entry
*/ */
public function dbDumpArray($write = false): string public function dbDumpArray(bool $write = false): string
{ {
reset($this->table_array); reset($this->table_array);
$string = ''; $string = '';
@@ -192,7 +192,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* *
* @return bool true if pk value is set, else false * @return bool true if pk value is set, else false
*/ */
public function dbCheckPkSet() public function dbCheckPkSet(): bool
{ {
// if pk_id is set, overrule ... // if pk_id is set, overrule ...
if ($this->pk_id) { if ($this->pk_id) {
@@ -210,10 +210,10 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* resets the whole array values * resets the whole array values
* @param boolean $reset_pk true if we want to reset the pk too * @param bool $reset_pk true if we want to reset the pk too
* @return void has no return * @return void has no return
*/ */
public function dbResetArray($reset_pk = false): void public function dbResetArray(bool $reset_pk = false): void
{ {
reset($this->table_array); reset($this->table_array);
foreach (array_keys($this->table_array) as $column) { foreach (array_keys($this->table_array) as $column) {
@@ -230,10 +230,10 @@ class ArrayIO extends \CoreLibs\DB\IO
* *
* @param array<mixed> $table_array optional override for table array set * @param array<mixed> $table_array optional override for table array set
* set this as new table array too * set this as new table array too
* @param boolean $acl_limit [false], if set to true, well do ACL limit check * @param bool $acl_limit [false], if set to true, well do ACL limit check
* @return array<mixed> returns the table array that was deleted * @return array<mixed> returns the table array that was deleted
*/ */
public function dbDelete($table_array = [], $acl_limit = false) public function dbDelete(array $table_array = [], bool $acl_limit = false): array
{ {
// is array and has values, override set and set new // is array and has values, override set and set new
if (is_array($table_array) && count($table_array)) { if (is_array($table_array) && count($table_array)) {
@@ -294,12 +294,12 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* reads one row into the array * reads one row into the array
* *
* @param boolean $edit on true convert data, else as is * @param bool $edit on true convert data, else as is
* @param array<mixed> $table_array optional table array, overwrites * @param array<mixed> $table_array optional table array, overwrites
* internal set array * internal set array
* @return array<mixed> set table array with values * @return array<mixed> set table array with values
*/ */
public function dbRead($edit = false, $table_array = []) public function dbRead(bool $edit = false, array $table_array = []): array
{ {
// if array give, overrules internal array // if array give, overrules internal array
if (is_array($table_array) && count($table_array)) { if (is_array($table_array) && count($table_array)) {
@@ -381,9 +381,9 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* writes one set into DB or updates one set (if PK exists) * writes one set into DB or updates one set (if PK exists)
* *
* @param boolean $addslashes old convert entities and set set escape * @param bool $addslashes old convert entities and set set escape
* @param array<mixed> $table_array optional table array, overwrites internal one * @param array<mixed> $table_array optional table array, overwrites internal one
* @param boolean $acl_limit [false], if set to true, well do ACL limit check * @param bool $acl_limit [false], if set to true, well do ACL limit check
* @return array<mixed> table array or null * @return array<mixed> table array or null
*/ */
public function dbWrite( public function dbWrite(
@@ -391,7 +391,7 @@ class ArrayIO extends \CoreLibs\DB\IO
array $table_array = [], array $table_array = [],
bool $acl_limit = false bool $acl_limit = false
): array { ): array {
if (is_array($table_array) && count($table_array)) { if (count($table_array)) {
$this->table_array = $table_array; $this->table_array = $table_array;
} }
// PK ID check // PK ID check
@@ -475,13 +475,12 @@ class ArrayIO extends \CoreLibs\DB\IO
$this->table_array[$column]['type'] != 'view' && $this->table_array[$column]['type'] != 'view' &&
strlen($column) > 0 && strlen($column) > 0 &&
// no acl limiter // no acl limiter
($acl_limit === false ||
( (
$acl_limit === false ||
// acl limit is true, min edit must be at larger than set // acl limit is true, min edit must be at larger than set
$acl_limit === true &&
$this->base_acl_level >= $this->base_acl_level >=
($this->table_array[$column]['min_edit_acl'] ?? 100) ($this->table_array[$column]['min_edit_acl'] ?? 100)
)) )
) { ) {
// for password use hidden value if main is not set // for password use hidden value if main is not set
if ( if (
@@ -528,7 +527,7 @@ class ArrayIO extends \CoreLibs\DB\IO
} }
$q_data .= $_value; $q_data .= $_value;
} elseif (isset($this->table_array[$column]['bool'])) { } elseif (isset($this->table_array[$column]['bool'])) {
// boolean storeage (reverse check on ifset) // bool storage (reverse check on ifset)
$q_data .= "'" . $this->dbBoolean($this->table_array[$column]['value'], true) . "'"; $q_data .= "'" . $this->dbBoolean($this->table_array[$column]['value'], true) . "'";
} elseif ( } elseif (
isset($this->table_array[$column]['interval']) || isset($this->table_array[$column]['interval']) ||

View File

@@ -12,7 +12,7 @@
* 2013/10/10, prepare/excute were added, including auto RETURNING primary key if * 2013/10/10, prepare/excute were added, including auto RETURNING primary key if
* possible for any INSERT query in exec or prepare/execute, better debugging and * possible for any INSERT query in exec or prepare/execute, better debugging and
* data dumping. Proper string escape wrapper, special db exec writer for complex * data dumping. Proper string escape wrapper, special db exec writer for complex
* array inserts in auto calls. boolean converter from postresql to php * array inserts in auto calls. bool converter from postresql to php
* *
* 2003/12/08, one major change: renamed db_exec_ext to db_return, as it has not * 2003/12/08, one major change: renamed db_exec_ext to db_return, as it has not
* much in common with the normal db_exec wrapper, as it was written only for * much in common with the normal db_exec wrapper, as it was written only for
@@ -168,7 +168,7 @@
* - all HTML from the query data (color codes, etc) via flag to debug call * - all HTML from the query data (color codes, etc) via flag to debug call
* *
* HISTORY: * HISTORY:
* 2008/10/25 (cs) add db_boolean to fix the postgres to php boolean var problem * 2008/10/25 (cs) add db_boolean to fix the postgres to php bool var problem
* (TODO: implement this in any select return) * (TODO: implement this in any select return)
* 2008/07/03 (cs) add db_write_data function, original written for inventory tool "invSQLWriteData" * 2008/07/03 (cs) add db_write_data function, original written for inventory tool "invSQLWriteData"
* 2008/04/16 (cs) add db_escape_string function for correct string escape * 2008/04/16 (cs) add db_escape_string function for correct string escape
@@ -288,7 +288,7 @@ class IO
private $query; // the query string at the moment private $query; // the query string at the moment
// only inside // only inside
// basic vars // basic vars
/** @var object|resource|bool|int|null */ // replace object with PgSql\Connection| /** @var \PgSql\Connection|false|null */ // replace object with PgSql\Connection|
private $dbh; // the dbh handler, if disconnected by command is null, bool:false/int:-1 on error, private $dbh; // the dbh handler, if disconnected by command is null, bool:false/int:-1 on error,
/** @var bool */ /** @var bool */
private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs) private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs)
@@ -315,7 +315,7 @@ class IO
/** @var array<mixed,mixed> */ /** @var array<mixed,mixed> */
private $cursor_ext; // hash of hashes private $cursor_ext; // hash of hashes
// per query vars // per query vars
/** @var object|resource|bool */ // replace object with PgSql\Result /** @var \PgSql\Result|false */ // replace object with PgSql\Result
private $cursor; // actual cursor (DBH) private $cursor; // actual cursor (DBH)
/** @var int */ /** @var int */
private $num_rows; // how many rows have been found private $num_rows; // how many rows have been found
@@ -495,15 +495,15 @@ class IO
* OTOH this whole class is so PgSQL specific * OTOH this whole class is so PgSQL specific
* that non PgSQL doesn't make much sense anymore * that non PgSQL doesn't make much sense anymore
* *
* @return \CoreLibs\DB\SQL\PgSQL|null DB functions object or false on error * @return SQL\PgSQL|null DB functions object or false on error
*/ */
private function __loadDBFunctions() private function __loadDBFunctions(): SQL\PgSQL|null
{ {
$db_functions = null; $db_functions = null;
switch ($this->db_type) { switch ($this->db_type) {
// list of valid DB function objects // list of valid DB function objects
case 'pgsql': case 'pgsql':
$db_functions = new \CoreLibs\DB\SQL\PgSQL(); $db_functions = new SQL\PgSQL();
break; break;
// if non set or none matching abort // if non set or none matching abort
default: default:
@@ -566,7 +566,7 @@ class IO
*/ */
private function __closeDB(): void private function __closeDB(): void
{ {
if (!empty($this->dbh) && $this->dbh !== false) { if (!empty($this->dbh)) {
$this->db_functions->__dbClose(); $this->db_functions->__dbClose();
$this->dbh = null; $this->dbh = null;
} }
@@ -632,9 +632,6 @@ class IO
private function __printArray(array $array): string private function __printArray(array $array): string
{ {
$string = ''; $string = '';
if (!is_array($array)) {
$array = [];
}
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
$string .= $this->nbsp . '<b>' . $key . '</b> => '; $string .= $this->nbsp . '<b>' . $key . '</b> => ';
if (is_array($value)) { if (is_array($value)) {
@@ -701,7 +698,7 @@ class IO
/** /**
* Check if there is a cursor and write this cursors error info * Check if there is a cursor and write this cursors error info
* @param object|resource|bool $cursor current cursor for pg_result_error, * @param \PgSql\Result|false $cursor current cursor for pg_result_error,
* pg_last_error too, but pg_result_error * pg_last_error too, but pg_result_error
* is more accurate (PgSql\Result) * is more accurate (PgSql\Result)
* @return array<mixed> Pos 0: if we could get the method where it was called * @return array<mixed> Pos 0: if we could get the method where it was called
@@ -709,7 +706,7 @@ class IO
* Pos 1: if we have the pg_error_string from last error * Pos 1: if we have the pg_error_string from last error
* if nothing then empty string * if nothing then empty string
*/ */
private function __dbErrorPreprocessor($cursor = false): array private function __dbErrorPreprocessor(\PgSql\Result|false $cursor = false): array
{ {
$pg_error_string = ''; $pg_error_string = '';
// 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning, // 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning,
@@ -774,12 +771,15 @@ class IO
/** /**
* write an error * 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 object|resource|bool $cursor Optional cursor, passed on to preprocessor * @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 * @return void
*/ */
protected function __dbError(int $error_id, $cursor = false, string $msg = ''): void protected function __dbError(
{ int $error_id,
\PgSql\Result|false $cursor = false,
string $msg = ''
): void {
$error_id = (string)$error_id; $error_id = (string)$error_id;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
// write error msg ... // write error msg ...
@@ -798,12 +798,15 @@ class IO
/** /**
* write a warning * write a warning
* @param integer $warning_id Integer warning id added to debug * @param integer $warning_id Integer warning id added to debug
* @param object|resource|bool $cursor Optional cursor, passed on to preprocessor * @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 * @return void
*/ */
protected function __dbWarning(int $warning_id, $cursor = false, string $msg = ''): void protected function __dbWarning(
{ int $warning_id,
\PgSql\Result|false $cursor = false,
string $msg = ''
): void {
$warning_id = (string)$warning_id; $warning_id = (string)$warning_id;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
$this->__dbDebug( $this->__dbDebug(
@@ -821,18 +824,18 @@ class IO
/** /**
* if there is the 'to_encoding' var set, * if there is the 'to_encoding' var set,
* and the field is in the wrong encoding converts it to the target * and the field is in the wrong encoding converts it to the target
* @param array<mixed>|bool|null $row Array from fetch_row * @param array<mixed>|false $row Array from fetch_row
* @return array<mixed>|bool Convert fetch_row array, or false * @return array<mixed>|false Convert fetch_row array, or false
*/ */
private function __dbConvertEncoding($row) private function __dbConvertEncoding(array|false $row): array|false
{ {
if ($row === null) { if (is_bool($row)) {
return false; return false;
} }
// only do if array, else pass through row (can be false) // only do if array, else pass through row (can be false)
if ( if (
!is_array($row) || !is_array($row) ||
empty($this->to_encoding)// || empty($this->db_encoding) empty($this->to_encoding)
) { ) {
return $row; return $row;
} }
@@ -914,7 +917,7 @@ class IO
* check if there is another query running, or do we hang after a * check if there is another query running, or do we hang after a
* PHP error * PHP error
* @param integer $timeout_seconds For complex timeout waits, default 3 seconds * @param integer $timeout_seconds For complex timeout waits, default 3 seconds
* @return boolean True for connection OK, else false * @return bool True for connection OK, else false
*/ */
private function __dbCheckConnectionOk(int $timeout_seconds = 3): bool private function __dbCheckConnectionOk(int $timeout_seconds = 3): bool
{ {
@@ -932,7 +935,7 @@ class IO
* dbReturn * dbReturn
* Read data from previous written data cache * Read data from previous written data cache
* @param string $query_hash The hash for the current query * @param string $query_hash The hash for the current query
* @param boolean $assoc_only Only return assoc value (key named) * @param bool $assoc_only Only return assoc value (key named)
* @return array<mixed> Current position query data from cache * @return array<mixed> Current position query data from cache
*/ */
private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array
@@ -983,10 +986,11 @@ class IO
* - sets internal hash for query * - sets internal hash for query
* - checks multiple call count * - checks multiple call count
* @param string $query query string * @param string $query query string
* @param string $pk_name primary key [if set to NULL no returning will be added] * @param string $pk_name primary key
* @return string|bool queryt hash OR boolean false on error * [if set to NULL no returning will be added]
* @return string|false queryt hash OR bool false on error
*/ */
private function __dbPrepareExec(string $query, string $pk_name) private function __dbPrepareExec(string $query, string $pk_name): string|false
{ {
// reset current cursor before exec // reset current cursor before exec
$this->cursor = false; $this->cursor = false;
@@ -1152,10 +1156,10 @@ class IO
* insert_id_ext [DEPRECATED, all in insert_id_arr] * insert_id_ext [DEPRECATED, all in insert_id_arr]
* - holds all returning as array * - holds all returning as array
* TODO: Only use insert_id_arr and use functions to get ok array or single * TODO: Only use insert_id_arr and use functions to get ok array or single
* @param boolean $returning_id * @param bool $returning_id
* @param string $query * @param string $query
* @param string|null $pk_name * @param string|null $pk_name
* @param object|resource|bool $cursor (PgSql\Result) * @param \PgSql\Result|false $cursor (PgSql\Result)
* @param string|null $stm_name If not null, is dbExecutre run * @param string|null $stm_name If not null, is dbExecutre run
* @return void * @return void
*/ */
@@ -1163,7 +1167,7 @@ class IO
bool $returning_id, bool $returning_id,
string $query, string $query,
?string $pk_name, ?string $pk_name,
$cursor, \PgSql\Result|false $cursor,
?string $stm_name = null ?string $stm_name = null
): void { ): void {
// $this->log->debug('DB SET INSERT ID', 'Ret: ' . ($returning_id ? 'Y' : 'N') // $this->log->debug('DB SET INSERT ID', 'Ret: ' . ($returning_id ? 'Y' : 'N')
@@ -1271,10 +1275,10 @@ class IO
/** /**
* get certain settings like username, db name * get certain settings like username, db name
* @param string $name what setting to query * @param string $name what setting to query
* @return mixed setting value, if not allowed name return false * @return int|string|bool setting value, if not allowed name return false
*/ */
public function dbGetSetting(string $name) public function dbGetSetting(string $name): int|string|bool
{ {
$setting = ''; $setting = '';
switch ($name) { switch ($name) {
@@ -1373,7 +1377,7 @@ class IO
* extended version info, can access all additional information data * extended version info, can access all additional information data
* @param string $parameter Array parameter name, if not valid returns * @param string $parameter Array parameter name, if not valid returns
* empty string * empty string
* @param boolean $strip Strip extended server info string, default true * @param bool $strip Strip extended server info string, default true
* eg nn.n (other info) will only return nn.n * eg nn.n (other info) will only return nn.n
* @return string Parameter value * @return string Parameter value
*/ */
@@ -1392,14 +1396,15 @@ class IO
} }
/** /**
* returns boolean true or false if the string matches the database version * returns bool true or false if the string matches the database version
* @param string $compare string to match in type =X.Y, >X.Y, <X.Y, <=X.Y, >=X.Y * @param string $compare string to match in type =X.Y, >X.Y, <X.Y, <=X.Y, >=X.Y
* @return bool true for ok, false on not ok * @return bool true for ok, false on not ok
*/ */
public function dbCompareVersion(string $compare): bool public function dbCompareVersion(string $compare): bool
{ {
$matches = []; $matches = [];
// compare has =, >, < prefix, and gets stripped, if the rest is not X.Y format then error // compare has =, >, < prefix, and gets stripped
// if the rest is not X.Y format then error
preg_match("/^([<>=]{1,})(\d{1,})\.(\d{1,})/", $compare, $matches); preg_match("/^([<>=]{1,})(\d{1,})\.(\d{1,})/", $compare, $matches);
$compare = $matches[1]; $compare = $matches[1];
$to_master = $matches[2]; $to_master = $matches[2];
@@ -1464,7 +1469,7 @@ class IO
* else current cursor * else current cursor
* @return string Formated string with all the data in the array * @return string Formated string with all the data in the array
*/ */
public function dbDumpData($query = ''): string public function dbDumpData(string $query = ''): string
{ {
// set start array // set start array
if ($query) { if ($query) {
@@ -1490,7 +1495,7 @@ class IO
* @param string|int|float|bool $string string to escape * @param string|int|float|bool $string string to escape
* @return string escaped string * @return string escaped string
*/ */
public function dbEscapeString($string): string public function dbEscapeString(string|int|float|bool $string): string
{ {
return $this->db_functions->__dbEscapeString($string); return $this->db_functions->__dbEscapeString($string);
} }
@@ -1501,7 +1506,7 @@ class IO
* @param string|int|float|bool $string string to escape * @param string|int|float|bool $string string to escape
* @return string escaped string * @return string escaped string
*/ */
public function dbEscapeLiteral($string): string public function dbEscapeLiteral(string|int|float|bool $string): string
{ {
return $this->db_functions->__dbEscapeLiteral($string); return $this->db_functions->__dbEscapeLiteral($string);
} }
@@ -1538,11 +1543,11 @@ class IO
/** /**
* clear up any data for valid DB insert * clear up any data for valid DB insert
* @param int|float|string|null $value to escape data * @param int|float|string|bool|null $value to escape data
* @param string $kbn escape trigger type * @param string $kbn escape trigger type
* @return string escaped value * @return string escaped value
*/ */
public function dbSqlEscape($value, string $kbn = '') public function dbSqlEscape(int|float|string|bool|null $value, string $kbn = ''): string
{ {
switch ($kbn) { switch ($kbn) {
case 'i': case 'i':
@@ -1551,24 +1556,35 @@ class IO
case 'f': case 'f':
$value = empty($value) ? 'NULL' : floatval($value); $value = empty($value) ? 'NULL' : floatval($value);
break; break;
// string (null is null, else is string)
case 't': case 't':
$value = $value === null ? $value = $value === null ?
'NULL' : 'NULL' :
"'" . $this->dbEscapeString($value) . "'"; "'" . $this->dbEscapeString($value) . "'";
break; break;
// string litereal (null is null, else is stirng)
case 'tl': case 'tl':
$value = $value === null ? $value = $value === null ?
'NULL' : 'NULL' :
$this->dbEscapeLiteral($value); $this->dbEscapeLiteral($value);
break; break;
// what is d? // escape string, set empty to null
case 'd': case 'd':
$value = empty($value) ? 'NULL' : "'" . $this->dbEscapeString($value) . "'"; $value = empty($value) ?
'NULL' :
"'" . $this->dbEscapeString($value) . "'";
break;
// escape string literal, set empty to null
case 'dl':
$value = empty($value) ?
'NULL' :
$this->dbEscapeLiteral($value);
break; break;
// bytea data // bytea data
case 'by': case 'by':
$value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value); $value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value);
break; break;
// bool
case 'b': case 'b':
if (is_float($value)) { if (is_float($value)) {
$value = (int)$value; $value = (int)$value;
@@ -1577,6 +1593,7 @@ class IO
'NULL' : 'NULL' :
"'" . $this->dbBoolean($value, true) . "'"; "'" . $this->dbBoolean($value, true) . "'";
break; break;
// int, but with empty value is 0
case 'i2': case 'i2':
$value = empty($value) ? 0 : intval($value); $value = empty($value) ? 0 : intval($value);
break; break;
@@ -1590,14 +1607,14 @@ class IO
/** /**
* if the input is a single char 't' or 'f * if the input is a single char 't' or 'f
* it will return the boolean value instead * it will return the bool value instead
* also converts smallint 1/0 to true false * also converts smallint 1/0 to true false
* @param string|bool|int $string 't' / 'f' or any string, or bool true/false * @param string|bool|int $string 't' / 'f' or any string, or bool true/false
* @param boolean $rev do reverse (bool to string) * @param bool $rev do reverse (bool to string)
* @return bool|string correct php boolean true/false * @return bool|string correct php bool true/false
* or postgresql 't'/'f' * or postgresql 't'/'f'
*/ */
public function dbBoolean($string, $rev = false) public function dbBoolean(string|bool|int $string, bool $rev = false): bool|string
{ {
if (!$rev) { if (!$rev) {
if ($string == 't' || $string == 'true') { if ($string == 't' || $string == 'true') {
@@ -1696,9 +1713,9 @@ class IO
* returns an array of the table with columns and values. FALSE on no table found * returns an array of the table with columns and values. FALSE on no table found
* @param string $table table name * @param string $table table name
* @param string $schema optional schema name * @param string $schema optional schema name
* @return array<mixed>|bool array of table data, false on error (table not found) * @return array<mixed>|false array of table data, false on error (table not found)
*/ */
public function dbShowTableMetaData(string $table, string $schema = '') public function dbShowTableMetaData(string $table, string $schema = ''): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
$table = (!empty($schema) ? $schema . '.' : '') . $table; $table = (!empty($schema) ? $schema . '.' : '') . $table;
@@ -1736,14 +1753,14 @@ class IO
* NO_CACHE/3: don't write cache * NO_CACHE/3: don't write cache
* @param bool $assoc_only True to only returned the named and not * @param bool $assoc_only True to only returned the named and not
* index position ones * index position ones
* @return array<mixed>|bool return array data or false on error/end * @return array<mixed>|false return array data or false on error/end
* @#suppress PhanTypeMismatchDimFetch * @#suppress PhanTypeMismatchDimFetch
*/ */
public function dbReturn( public function dbReturn(
string $query, string $query,
int $cache = self::USE_CACHE, int $cache = self::USE_CACHE,
bool $assoc_only = false bool $assoc_only = false
) { ): array|false {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
$this->__dbError(11); $this->__dbError(11);
@@ -1754,7 +1771,7 @@ class IO
// pre declare array // pre declare array
if (!isset($this->cursor_ext[$query_hash])) { if (!isset($this->cursor_ext[$query_hash])) {
$this->cursor_ext[$query_hash] = [ $this->cursor_ext[$query_hash] = [
// cursor, null: unset, 1: finished read/cache, 2: object/resource reading // cursor, null: unset, 1: finished read/cache, 2: object reading
'cursor' => null, 'cursor' => null,
// cached data // cached data
'data' => [], 'data' => [],
@@ -2000,9 +2017,9 @@ class IO
* if pk name is table name and _id, pk_name * if pk name is table name and _id, pk_name
* is not needed to be set * is not needed to be set
* if NULL is given here, no RETURNING will be auto added * if NULL is given here, no RETURNING will be auto added
* @return object|resource|bool cursor for this query or false on error (PgSql\Result) * @return \PgSql\Result|false cursor for this query or false on error
*/ */
public function dbExec(string $query = '', string $pk_name = '') public function dbExec(string $query = '', string $pk_name = ''): \PgSql\Result|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// prepare and check if we can actually run it // prepare and check if we can actually run it
@@ -2031,7 +2048,7 @@ class IO
/** /**
* executes a cursor and returns the data, if no more data 0 will be returned * executes a cursor and returns the data, if no more data 0 will be returned
* @param object|resource|bool $cursor the cursor from db_exec or * @param \PgSql\Result|false $cursor the cursor from db_exec or
* pg_query/pg_exec/mysql_query * pg_query/pg_exec/mysql_query
* if not set will use internal cursor, * if not set will use internal cursor,
* if not found, stops with 0 (error) * if not found, stops with 0 (error)
@@ -2039,9 +2056,9 @@ class IO
* @param bool $assoc_only false is default, * @param bool $assoc_only false is default,
* if true only named rows, * if true only named rows,
* not numbered index rows * not numbered index rows
* @return array<mixed>|bool row array or false on error * @return array<mixed>|false row array or false on error
*/ */
public function dbFetchArray($cursor = false, bool $assoc_only = false) public function dbFetchArray(\PgSql\Result|false $cursor = false, bool $assoc_only = false): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// set last available cursor if none set or false // set last available cursor if none set or false
@@ -2064,9 +2081,9 @@ class IO
* returns the FIRST row of the given query * returns the FIRST row of the given query
* @param string $query the query to be executed * @param string $query the query to be executed
* @param bool $assoc_only if true, only return assoc entry (default false) * @param bool $assoc_only if true, only return assoc entry (default false)
* @return array<mixed>|bool row array or false on error * @return array<mixed>|false row array or false on error
*/ */
public function dbReturnRow(string $query, bool $assoc_only = false) public function dbReturnRow(string $query, bool $assoc_only = false): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2091,9 +2108,9 @@ class IO
* createds an array of hashes of the query (all data) * createds an array of hashes of the query (all data)
* @param string $query the query to be executed * @param string $query the query to be executed
* @param bool $assoc_only if true, only name ref are returned (default true) * @param bool $assoc_only if true, only name ref are returned (default true)
* @return array<mixed>|bool array of hashes (row -> fields), false on error * @return array<mixed>|false array of hashes (row -> fields), false on error
*/ */
public function dbReturnArray(string $query, bool $assoc_only = true) public function dbReturnArray(string $query, bool $assoc_only = true): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2151,41 +2168,44 @@ class IO
* returns the full array for cursor ext * returns the full array for cursor ext
* or cursor for one query * or cursor for one query
* or detail data fonr one query cursor data * or detail data fonr one query cursor data
* @param string|null $query Query string, if not null convert to hash * @param string|null $query Query string, if not null convert to hash
* and return set cursor ext for only this * and return set cursor ext for only this
* if not found or null return null * if not found or null return null
* @return array<mixed>|string|int|resource|object|null * @param string $query_field [=''] optional query field to get
* Cursor Extended array full if no parameter * @return array<mixed>|string|int|\PgSql\Result|null
* Key is hash string from query run * Cursor Extended array full if no parameter
* Or cursor data entry if query field is set * Key is hash string from query run
* If nothing found return null * Or cursor data entry if query field is set
* If nothing found return null
*/ */
public function dbGetCursorExt($query = null, string $query_field = '') public function dbGetCursorExt(
{ $query = null,
if ($query !== null) { string $query_field = ''
$query_hash = $this->dbGetQueryHash($query); ): array|string|int|\PgSql\Result|null {
if ( if ($query === null) {
is_array($this->cursor_ext) && return $this->cursor_ext;
isset($this->cursor_ext[$query_hash]) }
) { $query_hash = $this->dbGetQueryHash($query);
if (empty($query_field)) { if (
return $this->cursor_ext[$query_hash]; is_array($this->cursor_ext) &&
} else { isset($this->cursor_ext[$query_hash])
return $this->cursor_ext[$query_hash][$query_field] ?? null; ) {
} if (empty($query_field)) {
} else { return $this->cursor_ext[$query_hash];
return null; } else {
} return $this->cursor_ext[$query_hash][$query_field] ?? null;
}
} else {
return null;
} }
return $this->cursor_ext;
} }
/** /**
* returns the current position the read out * returns the current position the read out
* @param string $query query to find in cursor_ext * @param string $query query to find in cursor_ext
* @return int|bool query position (row pos), false on error * @return int|false query position (row pos), false on error
*/ */
public function dbGetCursorPos(string $query) public function dbGetCursorPos(string $query): int|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2199,9 +2219,9 @@ class IO
/** /**
* returns the number of rows for the current select query * returns the number of rows for the current select query
* @param string $query query to find in cursor_ext * @param string $query query to find in cursor_ext
* @return int|bool query position (row pos), false on error * @return int|false query position (row pos), false on error
*/ */
public function dbGetCursorNumRows(string $query) public function dbGetCursorNumRows(string $query): int|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2253,11 +2273,14 @@ class IO
* @param string $stm_name statement name * @param string $stm_name statement name
* @param string $query queryt string to run * @param string $query queryt string to run
* @param string $pk_name optional primary key * @param string $pk_name optional primary key
* @return bool|object|resource false on error, true on warning or * @return \PgSql\Result|bool false on error, true on warning or
* result on full ok (PgSql\Result) * result on full ok
*/ */
public function dbPrepare(string $stm_name, string $query, string $pk_name = '') public function dbPrepare(
{ string $stm_name,
string $query,
string $pk_name = ''
): \PgSql\Result|bool {
$this->__dbErrorReset(); $this->__dbErrorReset();
$matches = []; $matches = [];
if (!$query) { if (!$query) {
@@ -2361,9 +2384,9 @@ class IO
* runs a prepare query * runs a prepare query
* @param string $stm_name statement name for the query to run * @param string $stm_name statement name for the query to run
* @param array<mixed> $data data to run for this query, empty array for none * @param array<mixed> $data data to run for this query, empty array for none
* @return mixed false on error, or result on OK * @return \PgSql\Result|false false on error, or result on OK
*/ */
public function dbExecute(string $stm_name, array $data = []) public function dbExecute(string $stm_name, array $data = []): \PgSql\Result|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// if no DB Handler drop out // if no DB Handler drop out
@@ -2483,11 +2506,10 @@ class IO
/** /**
* checks a previous async query and returns data if finished * checks a previous async query and returns data if finished
* NEEDS : dbExecAsync * NEEDS : dbExecAsync
* @return bool|object|resource cursor resource if the query is still running, * @return \PgSql\Result|bool cursor resource if the query is still running,
* false if an error occured or cursor of that query * false if an error occured or cursor of that query
* (PgSql\Result)
*/ */
public function dbCheckAsync() public function dbCheckAsync(): \PgSql\Result|bool
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// if there is actually a async query there // if there is actually a async query there
@@ -2547,7 +2569,7 @@ class IO
* @param int $primary_key id key to decide if we write insert or update * @param int $primary_key id key to decide if we write insert or update
* @param string $table name for the target table * @param string $table name for the target table
* @param array<mixed> $data data array to override _POST data * @param array<mixed> $data data array to override _POST data
* @return int|bool primary key * @return int|false primary key
*/ */
public function dbWriteData( public function dbWriteData(
array $write_array, array $write_array,
@@ -2555,13 +2577,7 @@ class IO
int $primary_key, int $primary_key,
string $table, string $table,
array $data = [] array $data = []
) { ): int|false {
if (!is_array($write_array)) {
$write_array = [];
}
if (!is_array($not_write_array)) {
$not_write_array = [];
}
$not_write_update_array = []; $not_write_update_array = [];
return $this->dbWriteDataExt( return $this->dbWriteDataExt(
$write_array, $write_array,
@@ -2586,16 +2602,16 @@ class IO
* to write during update (optional) * to write during update (optional)
* @param array<mixed> $data optional array with data * @param array<mixed> $data optional array with data
* if not _POST vars are used * if not _POST vars are used
* @return int|bool primary key * @return int|false primary key
*/ */
public function dbWriteDataExt( public function dbWriteDataExt(
array $write_array, array $write_array,
$primary_key, int|string|array $primary_key,
string $table, string $table,
array $not_write_array = [], array $not_write_array = [],
array $not_write_update_array = [], array $not_write_update_array = [],
array $data = [] array $data = []
) { ): int|false {
if (!is_array($primary_key)) { if (!is_array($primary_key)) {
$primary_key = [ $primary_key = [
'row' => $table . '_id', 'row' => $table . '_id',
@@ -2711,7 +2727,10 @@ class IO
$primary_key['value'] = $this->dbGetInsertPK(); $primary_key['value'] = $this->dbGetInsertPK();
} }
// if there is not priamry key value field return false // if there is not priamry key value field return false
return $primary_key['value'] ?? false; if (!is_numeric($primary_key['value'])) {
return false;
}
return (int)$primary_key['value'];
} }
// *************************** // ***************************
@@ -2724,7 +2743,7 @@ class IO
* @param bool|null $debug true/false or null for just getting current set * @param bool|null $debug true/false or null for just getting current set
* @return bool Current debug flag as set * @return bool Current debug flag as set
*/ */
public function dbSetDebug($debug = null): bool public function dbSetDebug(?bool $debug = null): bool
{ {
if ($debug !== null) { if ($debug !== null) {
$this->db_debug = $debug; $this->db_debug = $debug;
@@ -2805,7 +2824,7 @@ class IO
* @return bool False on failure to find schema value or set schema, * @return bool False on failure to find schema value or set schema,
* True on successful set * True on successful set
*/ */
public function dbSetSchema(string $db_schema) public function dbSetSchema(string $db_schema): bool
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (empty($db_schema)) { if (empty($db_schema)) {
@@ -2934,9 +2953,9 @@ class IO
/** /**
* Return current database handler * Return current database handler
* @return object|resource|bool|int|null * @return \PgSql\Connection|false|null
*/ */
public function dbGetDbh() public function dbGetDbh(): \PgSql\Connection|false|null
{ {
return $this->dbh; return $this->dbh;
} }
@@ -2992,7 +3011,7 @@ class IO
* *
* @return array<mixed>|string|int|null Current insert query primary key * @return array<mixed>|string|int|null Current insert query primary key
*/ */
public function dbGetInsertPK() public function dbGetInsertPK(): array|string|int|null
{ {
if (empty($this->insert_id_pk_name)) { if (empty($this->insert_id_pk_name)) {
return null; return null;
@@ -3016,7 +3035,7 @@ class IO
* @param integer|null $pos * @param integer|null $pos
* @return array<mixed>|string|int|null * @return array<mixed>|string|int|null
*/ */
public function dbGetReturningExt(?string $key = null, ?int $pos = null) public function dbGetReturningExt(?string $key = null, ?int $pos = null): array|string|int|null
{ {
// return as is if key is null // return as is if key is null
if ($key === null) { if ($key === null) {
@@ -3110,7 +3129,7 @@ class IO
* Not ethat returnin_id also can return false * Not ethat returnin_id also can return false
* but will not set an error entry * but will not set an error entry
*/ */
public function dbGetPrepareCursorValue(string $stm_name, string $key) public function dbGetPrepareCursorValue(string $stm_name, string $key): null|string|int|bool
{ {
// if no statement name // if no statement name
if (empty($stm_name)) { if (empty($stm_name)) {
@@ -3159,8 +3178,8 @@ class IO
* Sets error number that was last * Sets error number that was last
* So we always have the last error number stored even if a new * So we always have the last error number stored even if a new
* one is created * one is created
* @param boolean $transform Set to true to transform into id + error message * @param bool $transform Set to true to transform into id + error message
* @return string Last error number as string or error message * @return string Last error number as string or error message
*/ */
public function dbGetLastError(bool $transform = false): string public function dbGetLastError(bool $transform = false): string
{ {
@@ -3180,10 +3199,10 @@ class IO
/** /**
* Sets warning number that was last * Sets warning number that was last
* So we always have the last warning number stored even if a new one is created * So we always have the last warning number stored even if a new one is created
* @param boolean $transform Set to true to transform into id + warning message * @param bool $transform Set to true to transform into id + warning message
* @return string Last Warning number as string or warning message * @return string Last Warning number as string or warning message
*/ */
public function dbGetLastWarning(bool $transform = false) public function dbGetLastWarning(bool $transform = false): string
{ {
// if no warning, return empty // if no warning, return empty
if (empty($this->warning_id)) { if (empty($this->warning_id)) {
@@ -3221,7 +3240,7 @@ class IO
* Null for error * Null for error
* @deprecated Use ->dbGetInsertPK(); * @deprecated Use ->dbGetInsertPK();
*/ */
public function dbGetReturning() public function dbGetReturning(): array|string|int|bool|null
{ {
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
} }
@@ -3271,7 +3290,7 @@ class IO
* @return array<mixed>|string|int|bool|null See above * @return array<mixed>|string|int|bool|null See above
* @deprecated use getReturningExt($key = null) instead * @deprecated use getReturningExt($key = null) instead
*/ */
public function getInsertReturn($key = null) public function getInsertReturn(?string $key = null): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use getReturningExt($key = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use getReturningExt($key = null)', E_USER_DEPRECATED);
return $this->dbGetReturningExt($key); return $this->dbGetReturningExt($key);
@@ -3282,7 +3301,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED] * @return array<mixed>|string|int|bool|null [DEPRECATED]
* @deprecated use dbGetReturning() instead * @deprecated use dbGetReturning() instead
*/ */
public function getReturning() public function getReturning(): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturning()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturning()', E_USER_DEPRECATED);
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
@@ -3293,7 +3312,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED] * @return array<mixed>|string|int|bool|null [DEPRECATED]
* @deprecated use dbGetInsertPK() instead * @deprecated use dbGetInsertPK() instead
*/ */
public function getInsertPK() public function getInsertPK(): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetInsertPK()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetInsertPK()', E_USER_DEPRECATED);
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
@@ -3305,7 +3324,7 @@ class IO
* @return array<mixed>|string|bool|int|null [DEPRECATED] * @return array<mixed>|string|bool|int|null [DEPRECATED]
* @deprecated use dbGetReturningExt($key = null) instead * @deprecated use dbGetReturningExt($key = null) instead
*/ */
public function getReturningExt($key = null) public function getReturningExt(?string $key = null): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturningExt($key = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturningExt($key = null)', E_USER_DEPRECATED);
return $this->dbGetReturningExt($key); return $this->dbGetReturningExt($key);
@@ -3314,10 +3333,10 @@ class IO
/** /**
* DEPRECATED: getCursorExt * DEPRECATED: getCursorExt
* @param string|null $q [DEPRECATED] * @param string|null $q [DEPRECATED]
* @return array<mixed>|string|int|resource|object|null [DEPRECATED] * @return array<mixed>|string|int|\PgSql\Result|null [DEPRECATED]
* @deprecated use dbGetCursorExt($q = null) instead * @deprecated use dbGetCursorExt($q = null) instead
*/ */
public function getCursorExt($q = null) public function getCursorExt(?string $q = null): array|string|int|\PgSql\Result|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetCursorExt($q = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetCursorExt($q = null)', E_USER_DEPRECATED);
return $this->dbGetCursorExt($q); return $this->dbGetCursorExt($q);
@@ -3328,7 +3347,7 @@ class IO
* @return int|null [DEPRECATED] * @return int|null [DEPRECATED]
* @deprecated use dbGetNumRows() instead * @deprecated use dbGetNumRows() instead
*/ */
public function getNumRows() public function getNumRows(): ?int
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED);
return $this->dbGetNumRows(); return $this->dbGetNumRows();

View File

@@ -6,7 +6,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace CoreLibs\DB\SQL\SqlInterface; namespace CoreLibs\DB\SQL\Interface;
interface SqlFunctions interface SqlFunctions
{ {
@@ -21,33 +21,33 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbQuery(string $query); public function __dbQuery(string $query): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @param array<mixed> $params * @param array<mixed> $params
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbQueryParams(string $query, array $params); public function __dbQueryParams(string $query, array $params): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @return boolean * @return bool
*/ */
public function __dbSendQuery(string $query): bool; public function __dbSendQuery(string $query): bool;
/** /**
* Undocumented function * Undocumented function
* *
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbGetResult(); public function __dbGetResult(): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
@@ -61,85 +61,85 @@ interface SqlFunctions
* *
* @param string $name * @param string $name
* @param string $query * @param string $query
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbPrepare(string $name, string $query); public function __dbPrepare(string $name, string $query): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $name * @param string $name
* @param array<mixed> $data * @param array<mixed> $data
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbExecute(string $name, array $data); public function __dbExecute(string $name, array $data): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbNumRows($cursor): int; public function __dbNumRows(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbNumFields($cursor): int; public function __dbNumFields(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @param int $i * @param int $i
* @return string|bool * @return string|false
*/ */
public function __dbFieldName($cursor, int $i); public function __dbFieldName(\PgSql\Result|false $cursor, int $i): string|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @param int $result_type * @param int $result_type
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH); public function __dbFetchArray(\PgSql\Result|false $cursor, int $result_type = PGSQL_BOTH);
/** /**
* Undocumented function * Undocumented function
* *
* @param boolean $assoc_type * @param bool $assoc_type
* @return integer * @return int
*/ */
public function __dbResultType(bool $assoc_type = true): int; public function __dbResultType(bool $assoc_type = true): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbFetchAll($cursor); public function __dbFetchAll(\PgSql\Result|false $cursor): array|bool;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbAffectedRows($cursor): int; public function __dbAffectedRows(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @param string|null $pk_name * @param string|null $pk_name
* @return string|integer|false * @return string|int|false
*/ */
public function __dbInsertId(string $query, ?string $pk_name); public function __dbInsertId(string $query, ?string $pk_name): string|int|false;
/** /**
* Undocumented function * Undocumented function
@@ -148,7 +148,7 @@ interface SqlFunctions
* @param string $schema * @param string $schema
* @return string|bool * @return string|bool
*/ */
public function __dbPrimaryKey(string $table, string $schema = ''); public function __dbPrimaryKey(string $table, string $schema = ''): string|bool;
/** /**
* Undocumented function * Undocumented function
@@ -157,9 +157,9 @@ interface SqlFunctions
* @param string $db_user * @param string $db_user
* @param string $db_pass * @param string $db_pass
* @param string $db_name * @param string $db_name
* @param integer $db_port * @param int $db_port
* @param string $db_ssl * @param string $db_ssl
* @return object|resource|bool * @return \PgSql\Connection|false
*/ */
public function __dbConnect( public function __dbConnect(
string $db_host, string $db_host,
@@ -168,24 +168,24 @@ interface SqlFunctions
string $db_name, string $db_name,
int $db_port, int $db_port,
string $db_ssl = 'allow' string $db_ssl = 'allow'
); ): \PgSql\Connection|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return string * @return string
*/ */
public function __dbPrintError($cursor = false): string; public function __dbPrintError(\PgSql\Result|false $cursor = false): string;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $table * @param string $table
* @param boolean $extended * @param bool $extended
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbMetaData(string $table, $extended = true); public function __dbMetaData(string $table, bool $extended = true): array|bool;
/** /**
* Undocumented function * Undocumented function
@@ -193,7 +193,7 @@ interface SqlFunctions
* @param string|int|float|bool $string * @param string|int|float|bool $string
* @return string * @return string
*/ */
public function __dbEscapeString($string): string; public function __dbEscapeString(string|int|float|bool $string): string;
/** /**
* Undocumented function * Undocumented function
@@ -201,7 +201,7 @@ interface SqlFunctions
* @param string|int|float|bool $string * @param string|int|float|bool $string
* @return string * @return string
*/ */
public function __dbEscapeLiteral($string): string; public function __dbEscapeLiteral(string|int|float|bool $string): string;
/** /**
* Undocumented function * Undocumented function
@@ -230,15 +230,15 @@ interface SqlFunctions
/** /**
* Undocumented function * Undocumented function
* *
* @return boolean * @return bool
*/ */
public function __dbConnectionBusy(): bool; public function __dbConnectionBusy(): bool;
/** /**
* Undocumented function * Undocumented function
* *
* @param integer $timeout_seconds * @param int $timeout_seconds
* @return boolean * @return bool
*/ */
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool; public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool;
@@ -253,8 +253,8 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $array_text * @param string $array_text
* @param integer $start * @param int $start
* @param integer|null $end * @param int|null $end
* @return array<mixed>|null * @return array<mixed>|null
*/ */
public function __dbArrayParse( public function __dbArrayParse(
@@ -275,7 +275,7 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $db_schema * @param string $db_schema
* @return integer * @return int
*/ */
public function __dbSetSchema(string $db_schema): int; public function __dbSetSchema(string $db_schema): int;
@@ -290,7 +290,7 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $db_encoding * @param string $db_encoding
* @return integer * @return int
*/ */
public function __dbSetEncoding(string $db_encoding): int; public function __dbSetEncoding(string $db_encoding): int;

View File

@@ -51,12 +51,11 @@ namespace CoreLibs\DB\SQL;
// as main system. Currently all @var sets are written as object // as main system. Currently all @var sets are written as object
/** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */ /** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */
class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions class PgSQL implements Interface\SqlFunctions
{ {
/** @var string */ /** @var string */
private $last_error_query; private $last_error_query;
// NOTE for PHP 8.1 this is no longer a resource /** @var \PgSql\Connection|false */
/** @var object|resource|bool */ // replace object with PgSql\Connection
private $dbh; private $dbh;
/** /**
@@ -77,12 +76,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* wrapper for pg_query, catches error and stores it in class var * wrapper for pg_query, catches error and stores it in class var
* *
* @param string $query Query string * @param string $query Query string
* @return object|resource|bool query result (PgSql\Result) * @return \PgSql\Result|false query result
*/ */
public function __dbQuery(string $query) public function __dbQuery(string $query): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// read out the query status and save the query if needed // read out the query status and save the query if needed
@@ -100,12 +99,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $query Query string with placeholders $1, .. * @param string $query Query string with placeholders $1, ..
* @param array<mixed> $params Matching parameters for each placerhold * @param array<mixed> $params Matching parameters for each placerhold
* @return object|resource|bool Query result (PgSql\Result) * @return \PgSql\Result|false Query result
*/ */
public function __dbQueryParams(string $query, array $params) public function __dbQueryParams(string $query, array $params): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// parse query and get all $n entries // parse query and get all $n entries
@@ -126,7 +125,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbSendQuery(string $query): bool public function __dbSendQuery(string $query): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_send_query($this->dbh, $query); $result = pg_send_query($this->dbh, $query);
@@ -136,12 +135,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_get_result * wrapper for pg_get_result
* *
* @return object|resource|bool resource handler or false for error (PgSql\Result) * @return \PgSql\Result|false resource handler or false for error
*/ */
public function __dbGetResult() public function __dbGetResult(): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_get_result($this->dbh); $result = pg_get_result($this->dbh);
@@ -161,7 +160,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbClose(): void public function __dbClose(): void
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return; return;
} }
if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) { if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) {
@@ -175,12 +174,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $name statement name * @param string $name statement name
* @param string $query query string * @param string $query query string
* @return object|resource|bool prepare statement handler or * @return \PgSql\Result|false prepare statement handler or
* false for error (PgSql\Result) * false for error
*/ */
public function __dbPrepare(string $name, string $query) public function __dbPrepare(string $name, string $query): \PgSql\Result|false
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_prepare($this->dbh, $name, $query); $result = pg_prepare($this->dbh, $name, $query);
@@ -195,11 +194,11 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $name statement name * @param string $name statement name
* @param array<mixed> $data data array * @param array<mixed> $data data array
* @return object|resource|bool returns status or false for error (PgSql\Result) * @return \PgSql\Result|false returns status or false for error
*/ */
public function __dbExecute(string $name, array $data) public function __dbExecute(string $name, array $data): \PgSql\Result|false
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_execute($this->dbh, $name, $data); $result = pg_execute($this->dbh, $name, $data);
@@ -212,12 +211,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_num_rows * wrapper for pg_num_rows
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int number of rows, -1 on error * @return int number of rows, -1 on error
*/ */
public function __dbNumRows($cursor): int public function __dbNumRows(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_num_rows($cursor); return pg_num_rows($cursor);
@@ -226,12 +225,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_num_fields * wrapper for pg_num_fields
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int number for fields in result, -1 on error * @return int number for fields in result, -1 on error
*/ */
public function __dbNumFields($cursor): int public function __dbNumFields(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_num_fields($cursor); return pg_num_fields($cursor);
@@ -240,13 +239,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_field_name * wrapper for pg_field_name
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @param int $i field position * @param int $i field position
* @return string|bool name or false on error * @return string|false name or false on error
*/ */
public function __dbFieldName($cursor, int $i) public function __dbFieldName(\PgSql\Result|false $cursor, int $i): string|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
return pg_field_name($cursor, $i); return pg_field_name($cursor, $i);
@@ -256,13 +255,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* wrapper for pg_fetch_array * wrapper for pg_fetch_array
* if through/true false, use __dbResultType(true) * if through/true false, use __dbResultType(true)
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @param int $result_type result type as int number * @param int $result_type result type as int number
* @return array<mixed>|bool array result data or false on end/error * @return array<mixed>|false array result data or false on end/error
*/ */
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH) public function __dbFetchArray(\PgSql\Result|false $cursor, int $result_type = PGSQL_BOTH): array|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
// result type is passed on as is [should be checked] // result type is passed on as is [should be checked]
@@ -287,12 +286,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_fetch_all * wrapper for pg_fetch_all
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return array<mixed>|bool data array or false for end/error * @return array<mixed>|false data array or false for end/error
*/ */
public function __dbFetchAll($cursor) public function __dbFetchAll(\PgSql\Result|false $cursor): array|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
return pg_fetch_all($cursor); return pg_fetch_all($cursor);
@@ -301,12 +300,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_affected_rows * wrapper for pg_affected_rows
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int affected rows, 0 for none, -1 for error * @return int affected rows, 0 for none, -1 for error
*/ */
public function __dbAffectedRows($cursor): int public function __dbAffectedRows(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_affected_rows($cursor); return pg_affected_rows($cursor);
@@ -323,7 +322,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|null $pk_name primary key name, if '' then auto detect * @param string|null $pk_name primary key name, if '' then auto detect
* @return string|int|false primary key value * @return string|int|false primary key value
*/ */
public function __dbInsertId(string $query, ?string $pk_name) public function __dbInsertId(string $query, ?string $pk_name): string|int|false
{ {
// only if an insert has been done // only if an insert has been done
if (preg_match("/^insert /i", $query)) { if (preg_match("/^insert /i", $query)) {
@@ -371,7 +370,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $schema optional schema name, '' for default * @param string $schema optional schema name, '' for default
* @return string|bool primary key name or false if not found * @return string|bool primary key name or false if not found
*/ */
public function __dbPrimaryKey(string $table, string $schema = '') public function __dbPrimaryKey(string $table, string $schema = ''): string|bool
{ {
if ($table) { if ($table) {
// check if schema set is different from schema given, // check if schema set is different from schema given,
@@ -426,7 +425,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $db_name databse name * @param string $db_name databse name
* @param integer $db_port port (int, 5432 is default) * @param integer $db_port port (int, 5432 is default)
* @param string $db_ssl SSL (allow is default) * @param string $db_ssl SSL (allow is default)
* @return object|resource|bool db handler PgSql\Connection or false on error * @return \PgSql\Connection|false db handler or false on error
*/ */
public function __dbConnect( public function __dbConnect(
string $db_host, string $db_host,
@@ -435,7 +434,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
string $db_name, string $db_name,
int $db_port, int $db_port,
string $db_ssl = 'allow' string $db_ssl = 'allow'
) { ): \PgSql\Connection|false {
if (empty($db_name)) { if (empty($db_name)) {
return false; return false;
} }
@@ -470,22 +469,22 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* reads the last error for this cursor and returns * reads the last error for this cursor and returns
* html formatted string with error name * html formatted string with error name
* *
* @param bool|object|resource $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* or null * or null
* @return string error string * @return string error string
*/ */
public function __dbPrintError($cursor = false): string public function __dbPrintError(\PgSql\Result|false $cursor = false): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// run the query again for the error result here // run the query again for the error result here
if (($cursor === false || is_bool($cursor)) && $this->last_error_query) { if ((is_bool($cursor)) && $this->last_error_query) {
pg_send_query($this->dbh, $this->last_error_query); pg_send_query($this->dbh, $this->last_error_query);
$this->last_error_query = ''; $this->last_error_query = '';
$cursor = pg_get_result($this->dbh); $cursor = pg_get_result($this->dbh);
} }
if ($cursor && !is_bool($cursor) && $error_str = pg_result_error($cursor)) { if ($cursor && $error_str = pg_result_error($cursor)) {
return '-PostgreSQL-Error- ' return '-PostgreSQL-Error- '
. $error_str; . $error_str;
} else { } else {
@@ -500,9 +499,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param bool $extended show extended info (default true) * @param bool $extended show extended info (default true)
* @return array<mixed>|bool array data for the table info or false on error * @return array<mixed>|bool array data for the table info or false on error
*/ */
public function __dbMetaData(string $table, $extended = true) public function __dbMetaData(string $table, bool $extended = true): array|bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// needs to prefixed with @ or it throws a warning on not existing table // needs to prefixed with @ or it throws a warning on not existing table
@@ -515,9 +514,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|int|float|bool $string any string/int/float/bool * @param string|int|float|bool $string any string/int/float/bool
* @return string excaped string * @return string excaped string
*/ */
public function __dbEscapeString($string): string public function __dbEscapeString(string|int|float|bool $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
return pg_escape_string($this->dbh, (string)$string); return pg_escape_string($this->dbh, (string)$string);
@@ -531,9 +530,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|int|float|bool $string any string/int/float/bool * @param string|int|float|bool $string any string/int/float/bool
* @return string excaped string including quites * @return string excaped string including quites
*/ */
public function __dbEscapeLiteral($string): string public function __dbEscapeLiteral(string|int|float|bool $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return (string)''; return (string)'';
} }
// for phpstan, thinks this is string|false? // for phpstan, thinks this is string|false?
@@ -549,7 +548,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbEscapeIdentifier(string $string): string public function __dbEscapeIdentifier(string $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// for phpstan, thinks this is string|false? // for phpstan, thinks this is string|false?
@@ -564,7 +563,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbEscapeBytea(string $data): string public function __dbEscapeBytea(string $data): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
return pg_escape_bytea($this->dbh, $data); return pg_escape_bytea($this->dbh, $data);
@@ -584,11 +583,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_connection_busy * wrapper for pg_connection_busy
* *
* @return bool True if connection is busy, False if not or no db connection at all * @return bool True if connection is busy
* False if not or no db connection at all
*/ */
public function __dbConnectionBusy(): bool public function __dbConnectionBusy(): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
return pg_connection_busy($this->dbh); return pg_connection_busy($this->dbh);
@@ -597,13 +597,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* Experimental wrapper with scoket timetout * Experimental wrapper with scoket timetout
* *
* @param integer $timeout_seconds Wait how many seconds on timeout * @param integer $timeout_seconds Wait how many seconds on timeout
* @return boolean True if connection is busy, or false on * @return bool True if connection is busy, or false on
* not busy or no db connection at all * not busy or no db connection at all
*/ */
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$busy = pg_connection_busy($this->dbh); $busy = pg_connection_busy($this->dbh);
@@ -626,14 +626,14 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* On default 'version' will be stripped of any space attached info * On default 'version' will be stripped of any space attached info
* eg 13.5 (other info) will return only 13.5 * eg 13.5 (other info) will return only 13.5
* *
* @param string $parameter Parameter string to extract from array * @param string $parameter Parameter string to extract from array
* @param boolean $strip If parameter is server strip out on default * @param bool $strip If parameter is server strip out on default
* Set to false to get original string AS is * Set to false to get original string AS is
* @return string The parameter value * @return string The parameter value
*/ */
public function __dbVersionInfo(string $parameter, bool $strip = true): string public function __dbVersionInfo(string $parameter, bool $strip = true): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// extract element // extract element
@@ -655,7 +655,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbVersionInfoParameterList(): array public function __dbVersionInfoParameterList(): array
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return []; return [];
} }
return array_keys(pg_version($this->dbh)); return array_keys(pg_version($this->dbh));
@@ -670,7 +670,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbVersion(): string public function __dbVersion(): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// array has client, protocol, server, we just return server stripped // array has client, protocol, server, we just return server stripped
@@ -762,9 +762,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $parameter Parameter to query * @param string $parameter Parameter to query
* @return string|bool Settings value as string * @return string|bool Settings value as string
*/ */
public function __dbParameter(string $parameter) public function __dbParameter(string $parameter): string|bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
if (empty($parameter)) { if (empty($parameter)) {

View File

@@ -413,7 +413,7 @@ class Logging
* @param string $name what variable to return * @param string $name what variable to return
* @return mixed can be anything, bool, string, int, array * @return mixed can be anything, bool, string, int, array
*/ */
public function getSetting(string $name) //:mixed DOES not work with PHP 7.4 public function getSetting(string $name): mixed
{ {
// for debug purpose only // for debug purpose only
return $this->{$name}; return $this->{$name};
@@ -550,9 +550,9 @@ class Logging
* @param string $flag on/off * @param string $flag on/off
* @param string|null $level if not null then check if this array entry is set * @param string|null $level if not null then check if this array entry is set
* else return false * else return false
* @return bool|array<mixed> if $level is null, return array, else boolean true/false * @return array<mixed>|bool if $level is null, return array, else boolean true/false
*/ */
public function getLogLevel(string $type, string $flag, ?string $level = null) public function getLogLevel(string $type, string $flag, ?string $level = null): array|bool
{ {
// abort if not valid type // abort if not valid type
if (!in_array($type, ['debug', 'echo', 'print'])) { if (!in_array($type, ['debug', 'echo', 'print'])) {

View File

@@ -122,7 +122,7 @@ class GetTextReader
* @param bool $enable_cache Enable or disable caching * @param bool $enable_cache Enable or disable caching
* of strings (default on) * of strings (default on)
*/ */
public function __construct($Reader, bool $enable_cache = true) public function __construct(FileReader|bool $Reader, bool $enable_cache = true)
{ {
// If there isn't a StreamReader, turn on short circuit mode. // If there isn't a StreamReader, turn on short circuit mode.
if ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) { if ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) {

View File

@@ -46,7 +46,7 @@ class Encoding
* @return void * @return void
* @deprecated Use \CoreLibs\Check\Encoding::setErrorChar(); * @deprecated Use \CoreLibs\Check\Encoding::setErrorChar();
*/ */
public static function setErrorChar($string): void public static function setErrorChar(string|int|null $string): void
{ {
\CoreLibs\Check\Encoding::setErrorChar($string); \CoreLibs\Check\Encoding::setErrorChar($string);
} }
@@ -60,7 +60,7 @@ class Encoding
* @return string|int Set error character * @return string|int Set error character
* @deprecated Use \CoreLibs\Check\Encoding::getErrorChar(); * @deprecated Use \CoreLibs\Check\Encoding::getErrorChar();
*/ */
public static function getErrorChar(bool $return_substitute_func = false) public static function getErrorChar(bool $return_substitute_func = false): string|int
{ {
return \CoreLibs\Check\Encoding::getErrorChar($return_substitute_func); return \CoreLibs\Check\Encoding::getErrorChar($return_substitute_func);
} }
@@ -81,7 +81,7 @@ class Encoding
* @param string $string string to test * @param string $string string to test
* @param string $from_encoding encoding of string to test * @param string $from_encoding encoding of string to test
* @param string $to_encoding target encoding * @param string $to_encoding target encoding
* @return bool|array<string> false if no error or * @return array<string>|false false if no error or
* array with failed characters * array with failed characters
* @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding(); * @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding();
*/ */
@@ -89,7 +89,7 @@ class Encoding
string $string, string $string,
string $from_encoding, string $from_encoding,
string $to_encoding string $to_encoding
) { ): array|false {
return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding); return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding);
} }

View File

@@ -13,27 +13,27 @@ class Elements
/** /**
* print the date/time drop downs, used in any queue/send/insert at date/time place * print the date/time drop downs, used in any queue/send/insert at date/time place
* *
* @param int $year year YYYY * @param int|string $year year YYYY
* @param int $month month m * @param int|string $month month m
* @param int $day day d * @param int|string $day day d
* @param int $hour hour H * @param int|string $hour hour H
* @param int $min min i * @param int|string $min min i
* @param string $suffix additional info printed after the date time * @param string $suffix additional info printed after the date time
* variable in the drop down * variable in the drop down
* also used for ID in the on change JS call * also used for ID in the on change JS call
* @param int $min_steps default is 1 (minute), can set to anything, * @param int $min_steps default is 1 (minute), can set to anything,
* is used as sum up from 0 * is used as sum up from 0
* @param bool $name_pos_back default false, if set to true, * @param bool $name_pos_back default false, if set to true,
* the name will be printend after the drop down * the name will be printend after the drop down
* and not before the drop down * and not before the drop down
* @return string HTML formated strings for drop down lists of date and time * @return string HTML formated strings for drop down lists of date and time
*/ */
public static function printDateTime( public static function printDateTime(
$year, int|string $year,
$month, int|string $month,
$day, int|string $day,
$hour, int|string $hour,
$min, int|string $min,
string $suffix = '', string $suffix = '',
int $min_steps = 1, int $min_steps = 1,
bool $name_pos_back = false bool $name_pos_back = false

View File

@@ -731,9 +731,6 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
empty($this->table_array['protected']['value']) && empty($this->table_array['protected']['value']) &&
!$this->error !$this->error
) { ) {
if (!is_array($element_list)) {
$element_list = [];
}
for ($i = 0, $i_max = count($element_list); $i < $i_max; $i++) { for ($i = 0, $i_max = count($element_list); $i < $i_max; $i++) {
// $this->log->debug('form_error', 'Array: ' // $this->log->debug('form_error', 'Array: '
// . is_array($this->element_list[$element_list[$i]]['read_data']) . ' | ' // . is_array($this->element_list[$element_list[$i]]['read_data']) . ' | '
@@ -2294,11 +2291,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
} }
} }
} }
if (is_array($hidden_array)) { reset($hidden_array);
reset($hidden_array); foreach ($hidden_array as $key => $value) {
foreach ($hidden_array as $key => $value) { $hidden[] = ['key' => $key, 'value' => $value];
$hidden[] = ['key' => $key, 'value' => $value];
}
} }
return $hidden; return $hidden;
} }

View File

@@ -22,7 +22,7 @@ class Image
* if empty ROOT is choosen * if empty ROOT is choosen
* @param string $cache_source cache path, if not given TMP is used * @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 * @param bool $clear_cache if set to true, will create thumb all the tame
* @return string|bool thumbnail name, or false for error * @return string|false thumbnail name, or false for error
*/ */
public static function createThumbnail( public static function createThumbnail(
string $pic, string $pic,
@@ -32,7 +32,7 @@ class Image
string $path = '', string $path = '',
string $cache_source = '', string $cache_source = '',
bool $clear_cache = false bool $clear_cache = false
) { ): string|false {
// get image type flags // get image type flags
$image_types = [ $image_types = [
1 => 'gif', 1 => 'gif',
@@ -73,7 +73,7 @@ class Image
$create_file = false; $create_file = false;
$delete_filename = ''; $delete_filename = '';
// check if we can skip the PDF creation: if we have size, if do not have type, we assume type png // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png
if (!$type && is_numeric($size_x) && is_numeric($size_y)) { if (!$type) {
$check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3]; $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3];
if (!is_file($check_thumb)) { if (!is_file($check_thumb)) {
$create_file = true; $create_file = true;
@@ -100,10 +100,10 @@ class Image
[$width, $height, $type] = getimagesize($filename) ?: []; [$width, $height, $type] = getimagesize($filename) ?: [];
} }
// if no size given, set size to original // if no size given, set size to original
if (!$size_x || $size_x < 1 || !is_numeric($size_x)) { if (!$size_x || $size_x < 1) {
$size_x = $width; $size_x = $width;
} }
if (!$size_y || $size_y < 1 || !is_numeric($size_y)) { if (!$size_y || $size_y < 1) {
$size_y = $height; $size_y = $height;
} }
$thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type]; $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type];
@@ -170,7 +170,7 @@ class Image
* set to false to not use (default true) * set to false to not use (default true)
* to use quick but less nice version * to use quick but less nice version
* @param int $jpeg_quality default 80, set image quality for jpeg only * @param int $jpeg_quality default 80, set image quality for jpeg only
* @return string|bool thumbnail with path * @return string|false thumbnail with path
*/ */
public static function createThumbnailSimple( public static function createThumbnailSimple(
string $filename, string $filename,
@@ -181,7 +181,7 @@ class Image
bool $use_cache = true, bool $use_cache = true,
bool $high_quality = true, bool $high_quality = true,
int $jpeg_quality = 80 int $jpeg_quality = 80
) { ): string|false {
$thumbnail = false; $thumbnail = false;
// $this->debug('IMAGE PREPARE', "FILE: $filename (exists " // $this->debug('IMAGE PREPARE', "FILE: $filename (exists "
// .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height"); // .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height");
@@ -425,7 +425,7 @@ class Image
* @param string $filename path + filename to rotate. This file must be writeable * @param string $filename path + filename to rotate. This file must be writeable
* @return void * @return void
*/ */
public static function correctImageOrientation($filename): void public static function correctImageOrientation(string $filename): void
{ {
// function exists & file is writeable, else do nothing // function exists & file is writeable, else do nothing
if (!function_exists('exif_read_data') || !is_writeable($filename)) { if (!function_exists('exif_read_data') || !is_writeable($filename)) {

View File

@@ -40,8 +40,8 @@ return array(
'CoreLibs\\Create\\Uids' => $baseDir . '/lib/CoreLibs/Create/Uids.php', 'CoreLibs\\Create\\Uids' => $baseDir . '/lib/CoreLibs/Create/Uids.php',
'CoreLibs\\DB\\Extended\\ArrayIO' => $baseDir . '/lib/CoreLibs/DB/Extended/ArrayIO.php', 'CoreLibs\\DB\\Extended\\ArrayIO' => $baseDir . '/lib/CoreLibs/DB/Extended/ArrayIO.php',
'CoreLibs\\DB\\IO' => $baseDir . '/lib/CoreLibs/DB/IO.php', 'CoreLibs\\DB\\IO' => $baseDir . '/lib/CoreLibs/DB/IO.php',
'CoreLibs\\DB\\SQL\\Interface\\SqlFunctions' => $baseDir . '/lib/CoreLibs/DB/SQL/Interface/SqlFunctions.php',
'CoreLibs\\DB\\SQL\\PgSQL' => $baseDir . '/lib/CoreLibs/DB/SQL/PgSQL.php', 'CoreLibs\\DB\\SQL\\PgSQL' => $baseDir . '/lib/CoreLibs/DB/SQL/PgSQL.php',
'CoreLibs\\DB\\SQL\\SqlInterface\\SqlFunctions' => $baseDir . '/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php',
'CoreLibs\\Debug\\FileWriter' => $baseDir . '/lib/CoreLibs/Debug/FileWriter.php', 'CoreLibs\\Debug\\FileWriter' => $baseDir . '/lib/CoreLibs/Debug/FileWriter.php',
'CoreLibs\\Debug\\Logging' => $baseDir . '/lib/CoreLibs/Debug/Logging.php', 'CoreLibs\\Debug\\Logging' => $baseDir . '/lib/CoreLibs/Debug/Logging.php',
'CoreLibs\\Debug\\MemoryUsage' => $baseDir . '/lib/CoreLibs/Debug/MemoryUsage.php', 'CoreLibs\\Debug\\MemoryUsage' => $baseDir . '/lib/CoreLibs/Debug/MemoryUsage.php',

View File

@@ -73,8 +73,8 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
'CoreLibs\\Create\\Uids' => __DIR__ . '/../..' . '/lib/CoreLibs/Create/Uids.php', 'CoreLibs\\Create\\Uids' => __DIR__ . '/../..' . '/lib/CoreLibs/Create/Uids.php',
'CoreLibs\\DB\\Extended\\ArrayIO' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/Extended/ArrayIO.php', 'CoreLibs\\DB\\Extended\\ArrayIO' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/Extended/ArrayIO.php',
'CoreLibs\\DB\\IO' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/IO.php', 'CoreLibs\\DB\\IO' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/IO.php',
'CoreLibs\\DB\\SQL\\Interface\\SqlFunctions' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/SQL/Interface/SqlFunctions.php',
'CoreLibs\\DB\\SQL\\PgSQL' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/SQL/PgSQL.php', 'CoreLibs\\DB\\SQL\\PgSQL' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/SQL/PgSQL.php',
'CoreLibs\\DB\\SQL\\SqlInterface\\SqlFunctions' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php',
'CoreLibs\\Debug\\FileWriter' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/FileWriter.php', 'CoreLibs\\Debug\\FileWriter' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/FileWriter.php',
'CoreLibs\\Debug\\Logging' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/Logging.php', 'CoreLibs\\Debug\\Logging' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/Logging.php',
'CoreLibs\\Debug\\MemoryUsage' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/MemoryUsage.php', 'CoreLibs\\Debug\\MemoryUsage' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/MemoryUsage.php',