diff --git a/.phan/config.php b/.phan/config.php index 0ce711c9..da7adef3 100644 --- a/.phan/config.php +++ b/.phan/config.php @@ -27,6 +27,7 @@ use Phan\Config; return [ // "target_php_version" => "8.2", + "minimum_target_php_version" => "8.1", // turn color on (-C) "color_issue_messages_if_supported" => true, // If true, missing properties will be created when diff --git a/4dev/checking/phpunit.sh b/4dev/checking/phpunit.sh index 8d63fc0b..024d427a 100755 --- a/4dev/checking/phpunit.sh +++ b/4dev/checking/phpunit.sh @@ -15,8 +15,8 @@ php_bin=""; if [ ! -z "${1}" ]; then case "${1}" in # "7.3") php_bin="/usr/bin/php7.3 "; ;; - "7.4") php_bin="/usr/bin/php7.4 "; ;; - "8.0") php_bin="/usr/bin/php8.0 "; ;; + # "7.4") php_bin="/usr/bin/php7.4 "; ;; + # "8.0") php_bin="/usr/bin/php8.0 "; ;; "8.1") php_bin="/usr/bin/php8.1 "; ;; "8.2") php_bin="/usr/bin/php8.2 "; ;; *) echo "Not support PHP: ${1}"; exit; ;; @@ -25,8 +25,8 @@ fi; if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then case "${2}" in # "7.3") php_bin="/usr/bin/php7.3 "; ;; - "7.4") php_bin="/usr/bin/php7.4 "; ;; - "8.0") php_bin="/usr/bin/php8.0 "; ;; + # "7.4") php_bin="/usr/bin/php7.4 "; ;; + # "8.0") php_bin="/usr/bin/php8.0 "; ;; "8.1") php_bin="/usr/bin/php8.1 "; ;; "8.2") php_bin="/usr/bin/php8.2 "; ;; *) echo "Not support PHP: ${1}"; exit; ;; diff --git a/4dev/tests/CoreLibsACLLoginTest.php b/4dev/tests/CoreLibsACLLoginTest.php index c57528a6..2d011949 100644 --- a/4dev/tests/CoreLibsACLLoginTest.php +++ b/4dev/tests/CoreLibsACLLoginTest.php @@ -1729,7 +1729,7 @@ final class CoreLibsACLLoginTest extends TestCase ], 20 ], - 'invalud search' => [ + 'invalid search' => [ 12, 'foo', [], diff --git a/4dev/tests/CoreLibsCombinedArrayHandlerTest.php b/4dev/tests/CoreLibsCombinedArrayHandlerTest.php index 1fac71ae..689f5922 100644 --- a/4dev/tests/CoreLibsCombinedArrayHandlerTest.php +++ b/4dev/tests/CoreLibsCombinedArrayHandlerTest.php @@ -107,6 +107,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase */ public function arraySearchRecursiveAllProvider(): array { + /* + 0: $needle, + 1: array $input, + 2: ?string $key_search_for, + 3: bool $flag, + 4: array $expected + */ return [ 'find value' => [ 0 => 'bar', @@ -172,6 +179,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase */ public function arraySearchSimpleProvider(): array { + /* + 0: array $input, + 1: $key, + 2: $value, + 3: bool $flag, + 4: bool $expected + */ return [ 'key/value exist' => [ 0 => self::$array, @@ -665,7 +679,7 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase * * @param array $input * @param string|int $key - * @param string|int $value + * @param string|int|bool $value * @param bool $expected * @return void */ diff --git a/4dev/tests/CoreLibsDBIOTest.php b/4dev/tests/CoreLibsDBIOTest.php index 4c4dea3d..c1908825 100644 --- a/4dev/tests/CoreLibsDBIOTest.php +++ b/4dev/tests/CoreLibsDBIOTest.php @@ -1253,10 +1253,14 @@ final class CoreLibsDBIOTest extends TestCase 'string value literal' => ['string literal', 'tl', '\'string literal\'',], 'empty string value literal' => ['', 'tl', '\'\'',], '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\'',], 'empty string value d' => ['', '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 'string value d' => ['string d', 'by', '\x737472696e672064',], 'empty string value d' => ['', 'by', 'NULL',], @@ -1281,7 +1285,7 @@ final class CoreLibsDBIOTest extends TestCase * @dataProvider sqlEscapeProvider * @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 int|float|string $expected * @return void diff --git a/composer.json b/composer.json index 791089eb..57141339 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,19 @@ { + "name": "egrajp/development-corelibs-dev", + "version": "dev-master", + "description": "CoreLibs: Development package", + "type": "library", "require-dev": { "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" } } diff --git a/composer.lock b/composer.lock index 22e6e8ed..086a9c96 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fcdf8646822d333e75d48519c50c689a", + "content-hash": "e0be39c8d67ae1599bb76d055debab50", "packages": [], "packages-dev": [ { @@ -611,17 +611,61 @@ "time": "2022-10-14T12:47:21+00:00" }, { - "name": "phpstan/phpstan", - "version": "1.10.2", + "name": "phpstan/extension-installer", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd" + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a2ffec7db373d8da4973d1d62add872db5cd22dd", - "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "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": "" }, "require": { @@ -651,7 +695,7 @@ ], "support": { "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": [ { @@ -667,7 +711,7 @@ "type": "tidelift" } ], - "time": "2023-02-23T14:36:46+00:00" + "time": "2023-02-25T14:47:13+00:00" }, { "name": "psr/container", diff --git a/phpstan.neon b/phpstan.neon index 20f58e35..de2fb518 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -30,6 +30,10 @@ parameters: - www/admin/error_test.php # admin synlink files - www/admin/edit_*.php + # config symlinks + - www/admin/config.php + - www/frontend/config.php + - www/frontend/*/config.php # ignore admin header stuff # - www/includes/admin_header.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 # 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 - - # 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\\.$#" - path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php + # - # 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\\.$#" + # path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php # this is ignored for now # - '#Expression in empty\(\) is always falsy.#' # - diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 451aaf54..04f1db93 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -12,10 +12,10 @@ return array( 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', + '9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php', '2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php', - '9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 4f4a8a2c..27f336ed 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -21,6 +21,7 @@ return array( 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Phan\\' => array($vendorDir . '/phan/phan/src/Phan'), + 'PHPStan\\ExtensionInstaller\\' => array($vendorDir . '/phpstan/extension-installer/src'), 'Microsoft\\PhpParser\\' => array($vendorDir . '/microsoft/tolerant-php-parser/src'), 'Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), 'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 4e042a27..c9869549 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -13,12 +13,12 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', + '9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php', '2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php', - '9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php', ); public static $prefixLengthsPsr4 = array ( @@ -51,6 +51,7 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718 'Psr\\Log\\' => 8, 'Psr\\Container\\' => 14, 'Phan\\' => 5, + 'PHPStan\\ExtensionInstaller\\' => 27, ), 'M' => array ( @@ -131,6 +132,10 @@ class ComposerStaticInitdd705c6e8ab22e0d642372dec7767718 array ( 0 => __DIR__ . '/..' . '/phan/phan/src/Phan', ), + 'PHPStan\\ExtensionInstaller\\' => + array ( + 0 => __DIR__ . '/..' . '/phpstan/extension-installer/src', + ), 'Microsoft\\PhpParser\\' => array ( 0 => __DIR__ . '/..' . '/microsoft/tolerant-php-parser/src', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 8d0441e1..bf3cd69c 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -634,18 +634,65 @@ "install-path": "../phpdocumentor/type-resolver" }, { - "name": "phpstan/phpstan", - "version": "1.10.2", - "version_normalized": "1.10.2.0", + "name": "phpstan/extension-installer", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd" + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a2ffec7db373d8da4973d1d62add872db5cd22dd", - "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "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": "" }, "require": { @@ -654,7 +701,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2023-02-23T14:36:46+00:00", + "time": "2023-02-25T14:47:13+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -677,7 +724,7 @@ ], "support": { "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": [ { @@ -1786,6 +1833,7 @@ "phpdocumentor/reflection-common", "phpdocumentor/reflection-docblock", "phpdocumentor/type-resolver", + "phpstan/extension-installer", "phpstan/phpstan", "psr/container", "psr/log", diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index f72f899a..6b65eafc 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'da67d1bde3260de1ef8d778f5d75f4e2c60de869', + 'reference' => '44f37b7f74e1fcbfbbdf26036117d14404011abd', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'da67d1bde3260de1ef8d778f5d75f4e2c60de869', + 'reference' => '44f37b7f74e1fcbfbbdf26036117d14404011abd', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -109,10 +109,19 @@ 'aliases' => array(), '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( - 'pretty_version' => '1.10.2', - 'version' => '1.10.2.0', - 'reference' => 'a2ffec7db373d8da4973d1d62add872db5cd22dd', + 'pretty_version' => '1.10.3', + 'version' => '1.10.3.0', + 'reference' => '5419375b5891add97dc74be71e6c1c34baaddf64', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpstan', 'aliases' => array(), diff --git a/vendor/phpstan/extension-installer/LICENSE b/vendor/phpstan/extension-installer/LICENSE new file mode 100644 index 00000000..afe8bee4 --- /dev/null +++ b/vendor/phpstan/extension-installer/LICENSE @@ -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. diff --git a/vendor/phpstan/extension-installer/README.md b/vendor/phpstan/extension-installer/README.md new file mode 100644 index 00000000..70afa415 --- /dev/null +++ b/vendor/phpstan/extension-installer/README.md @@ -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. diff --git a/vendor/phpstan/extension-installer/build-cs/composer.json b/vendor/phpstan/extension-installer/build-cs/composer.json new file mode 100644 index 00000000..e3079710 --- /dev/null +++ b/vendor/phpstan/extension-installer/build-cs/composer.json @@ -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 + } + } +} diff --git a/vendor/phpstan/extension-installer/build-cs/composer.lock b/vendor/phpstan/extension-installer/build-cs/composer.lock new file mode 100644 index 00000000..4bcc8de4 --- /dev/null +++ b/vendor/phpstan/extension-installer/build-cs/composer.lock @@ -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" +} diff --git a/vendor/phpstan/extension-installer/composer.json b/vendor/phpstan/extension-installer/composer.json new file mode 100644 index 00000000..c57fcfe5 --- /dev/null +++ b/vendor/phpstan/extension-installer/composer.json @@ -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/" + } + } +} diff --git a/vendor/phpstan/extension-installer/src/GeneratedConfig.php b/vendor/phpstan/extension-installer/src/GeneratedConfig.php new file mode 100644 index 00000000..3c9004ac --- /dev/null +++ b/vendor/phpstan/extension-installer/src/GeneratedConfig.php @@ -0,0 +1,26 @@ + + */ + 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('phpstan/extension-installer: 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('phpstan/extension-installer: Extensions installed'); + + if ($oldGeneratedConfigFileHash === md5($generatedConfigFileContents)) { + return; + } + + foreach (array_keys($installedPackages) as $name) { + $io->write(sprintf('> %s: installed', $name)); + } + + foreach (array_keys($notInstalledPackages) as $name) { + $io->write(sprintf('> %s: not supported', $name)); + } + } + +} diff --git a/vendor/phpstan/phpstan/phpstan.phar b/vendor/phpstan/phpstan/phpstan.phar index e2efbc65..210214f8 100755 Binary files a/vendor/phpstan/phpstan/phpstan.phar and b/vendor/phpstan/phpstan/phpstan.phar differ diff --git a/vendor/phpstan/phpstan/phpstan.phar.asc b/vendor/phpstan/phpstan/phpstan.phar.asc index 0bdd7d24..7c45832e 100644 --- a/vendor/phpstan/phpstan/phpstan.phar.asc +++ b/vendor/phpstan/phpstan/phpstan.phar.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmP3eecACgkQzxoQjQ56 -5yAH6A//R+CaBjUmbQhmamLiYATpskxv25DC/BQQ1+aK5sz8IlKcxPViN3Ke9QAq -qikQQ3ZDcNmBFR+p5ew9WuW4c99B/MX+Pg0Nc47keq/TxU/sslE1G7SuHssSCCxp -o1W3HihbZtDmPWYj3VWSmyEvFAbho/qpTsu9d34qDcryRCZ3A46NZ5zOdNa5uI2R -8hyhuPsWF0fnd3sxYSRCL0fPp6CAEWxIRiG53gmMjTfVdTsZQZVwzgsfiW3GAIRf -J7tYbGcBN3tyrJEFyFJCJkWt2ATla1LzucL6rrDUa9HzNsA5NUTOLj6j6PACQ0Vj -eCMfcDxKj/t6EJlHBpO2A5AiE8DOLs+lWmKiG7DqWOqqOnoYc/Fbv9RL3p25r7N2 -gv4hhyEfBE0hoUxKSzsa7M++Ler+Js0Slxc881dpDuqvBEZFyA4M9YJTM4ckK92M -LcFC1RJ5xdHx/COpYVN3w2DvZ9BVk2kvdByJGnyQ9Tp/R8HdW+cv88kYopIXZ0R5 -8m7B/zbtxMbtEzEn38JqfTtiQpE6vNH3iaWInIkP/ZZgfetCoHdXUF+NTTpTyUCm -C+NqRlgtA9NyjkdjX/kbohuxAcGsxlZu4/CfYKEIVAeCpM5sdjf4tRmmYn/5wCRF -226D4n9yPZ9YHE7HYLrRcmlx2jzsKH8wv8Z5IZ8KqZK/9tPhHoM= -=aGUS +iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmP6H1oACgkQzxoQjQ56 +5yCVhxAAlXqhfvKCITSAJjkaIhncEBHpT5Ogby65BX1O5+SkKyc/OO7JnjlN8cLB +DKbJpdc8P2Dbfo/uBHVR5YiNX5CWYzgdMzCpLQI20Ffa7qkeRbA5ZS2AfdIfLqhD +PswlQIYxg0F3lj0L+joTxfBiHgmR5wnOUx1sLXnEbqGtFzzGstPGDg9gjKKh5EnO +g207jrm1we05+k3kKzr233/ENvQD6bBWLr2yngyMoirOuDpurAuPjkBL7vN6PDbx +DlyGDazsgU/R7aE2FtqmFC8KIU/BgnpbCSWTHBEJAqtncHbwTgneyEm+88lT6cUt +YM72Rh1+QTvS3WgJ/q7AQRik2aE83Kz2rc3XOl1ADd45J3Oan1rqQXdnKtH6qZeT +wMk6PE8SQPJ8NMHy3LT048PfMOakAtgBL5xonbVqX0IFAvKAMRijwBCNKat2yRsB +0VGnoeH7klf1fSSo0xOD20Pd0uIILAWZlBjb2e/1NRytFQkokAr1bsLD/VJHiNYh +lPQ4OztCT/uumJOAgTKm10T56CK1u0VxhIVtQ+/NkTvAwrmpX0KKqbYPP/1hZqVO +vFaWJR4iLFNt+il7dlv56jmTAneUrGrWkQdVFbz5FVpqz7abIo+/cevbSSndFZCI +K1mn42aFdYXSqVTFpkzeOQeJPPysEYDysFk7ClhE+F48HN7WAtw= +=A7BG -----END PGP SIGNATURE----- diff --git a/www/admin/class_test.db.dbReturn.php b/www/admin/class_test.db.dbReturn.php index d51cbb12..9d6827e5 100644 --- a/www/admin/class_test.db.dbReturn.php +++ b/www/admin/class_test.db.dbReturn.php @@ -23,6 +23,7 @@ ob_end_flush(); use CoreLibs\Debug\Support; use CoreLibs\Debug\RunningTime; +use CoreLibs\Convert\SetVarType; $log = new CoreLibs\Debug\Logging([ 'log_folder' => BASE . LOG, @@ -78,7 +79,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
"; + . "cursor_ext:
" . Support::printAr(
+			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
+		) . "
"; print "Run time: " . RunningTime::hrRunningTime() . "
"; } // reset all read data @@ -95,7 +98,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
"; + . "cursor_ext:
" . Support::printAr(
+			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
+		) . "
"; print "Run time: " . RunningTime::hrRunningTime() . "
"; } // reset all read data @@ -112,7 +117,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
"; + . "cursor_ext:
" . Support::printAr(
+			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
+		) . "
"; print "Run time: " . RunningTime::hrRunningTime() . "
"; } // reset all read data @@ -129,7 +136,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
" . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
"; + . "cursor_ext:
" . Support::printAr(
+			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
+		) . "
"; print "Run time: " . RunningTime::hrRunningTime() . "
"; } // reset all data diff --git a/www/admin/class_test.db.php b/www/admin/class_test.db.php index 6cb00098..d6804873 100644 --- a/www/admin/class_test.db.php +++ b/www/admin/class_test.db.php @@ -62,7 +62,11 @@ print "VERSION LONG DB: " . $db->dbVersionInfo('server', false) . "
"; print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "
"; print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "
"; print "ALL PG VERSION PARAMETERS:
" . print_r($db->dbVersionInfoParameters(), true) . "

"; -print "ALL OUTPUT [TEST]:
" . print_r(pg_version($db->dbGetDbh()), true) . "

"; +if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { + print "ALL OUTPUT [TEST]:
" . print_r(pg_version($dbh), true) . "

"; +} else { + print "NO DB HANDLER
"; +} print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "
"; print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "
"; print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "
"; @@ -108,7 +112,11 @@ print "
"; print "
";
 
-print "SOCKET: " . pg_socket($db->dbGetDbh()) . "
"; +if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { + print "SOCKET: " . pg_socket($dbh) . "
"; +} else { + print "NO SOCKET
"; +} // truncate test_foo table before testing print "TRUNCATE test_foo
"; diff --git a/www/composer.json b/www/composer.json index e523b9cc..ff8404ee 100644 --- a/www/composer.json +++ b/www/composer.json @@ -24,6 +24,7 @@ } }, "require": { - "egrajp/smarty-extended": "^4.3" + "egrajp/smarty-extended": "^4.3", + "php": ">=8.1" } } diff --git a/www/configs/config.php b/www/configs/config.php index df7f3b95..a1d8eb5b 100644 --- a/www/configs/config.php +++ b/www/configs/config.php @@ -63,13 +63,14 @@ if (!defined('DIR')) { exit('Base config could not be loaded'); } // find trigger name "admin/" or "frontend/" in the getcwd() folder -foreach (['admin', 'frontend'] as $folder) { - if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $folder)) { +$folder = ''; +foreach (['admin', 'frontend'] as $_folder) { + if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $_folder)) { + $folder = $_folder; break; } } // if content path is empty, fallback is default -/** @phpstan-ignore-next-line can be empty */ if (empty($folder)) { $folder = 'default'; } diff --git a/www/lib/CoreLibs/ACL/Login.php b/www/lib/CoreLibs/ACL/Login.php index c8be7b2f..332692ea 100644 --- a/www/lib/CoreLibs/ACL/Login.php +++ b/www/lib/CoreLibs/ACL/Login.php @@ -157,7 +157,7 @@ class Login private $acl = []; /** @var array */ private $default_acl_list = []; - /** @var array Reverse list to lookup level from type */ + /** @var array Reverse list to lookup level from type */ private $default_acl_list_type = []; /** @var int default ACL level to be based on if nothing set */ private $default_acl_level = 0; @@ -332,7 +332,7 @@ class Login 'type' => $res['type'], '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 $_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list; @@ -986,7 +986,7 @@ class Login * @param string $password the new password * @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; // check for valid in regex arrays in list @@ -1048,7 +1048,7 @@ class Login $res = $this->db->dbReturnRow($q); if ( !is_array($res) || - (is_array($res) && empty($res['edit_user_id'])) + empty($res['edit_user_id']) ) { // username wrong $this->login_error = 201; @@ -1068,9 +1068,11 @@ class Login } if ( !is_array($res) || - (is_array($res) && - (empty($res['edit_user_id']) || - !$this->loginPasswordCheck($res['old_password_hash'], $this->pw_old_password))) + empty($res['edit_user_id']) || + !$this->loginPasswordCheck( + $res['old_password_hash'], + $this->pw_old_password + ) ) { // old password wrong $this->login_error = 202; @@ -1124,7 +1126,7 @@ class Login * * @return string|null html data for login page, or null for nothing */ - private function loginCreateLoginHTML() + private function loginCreateLoginHTML(): ?string { $html_string = null; // if permission is ok, return null @@ -1421,8 +1423,12 @@ EOM; * @param string $username login user username * @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) { $this->action = 'Login'; } elseif ($this->logout) { @@ -1794,7 +1800,6 @@ EOM; // check that numeric, positive numeric, not longer than max input string lenght // and not short than min password length if ( - is_numeric($length) && $length >= $this->password_min_length_max && $length <= $this->password_max_length && $length <= 255 @@ -2069,9 +2074,12 @@ EOM; * @param string $type Type name to look in the acl list * @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 * 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) { return false; @@ -2122,8 +2130,10 @@ EOM; * @param string|int $data_key key value to search for * @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])) { return false; } @@ -2137,9 +2147,12 @@ EOM; * @param string $uid Edit Access UID to look for * @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 * @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); } } diff --git a/www/lib/CoreLibs/Admin/Backend.php b/www/lib/CoreLibs/Admin/Backend.php index b765cb5a..97d2da80 100644 --- a/www/lib/CoreLibs/Admin/Backend.php +++ b/www/lib/CoreLibs/Admin/Backend.php @@ -194,7 +194,7 @@ class Backend */ public function adbEditLog( string $event = '', - $data = '', + string|array $data = '', string $write_type = 'STRING' ): void { $data_binary = ''; @@ -262,7 +262,7 @@ class Backend * @param string|int $menu_show_flag * @return string|int */ - public function adbSetMenuShowFlag($menu_show_flag) + public function adbSetMenuShowFlag(string|int $menu_show_flag): string|int { // must be string or int $this->menu_show_flag = $menu_show_flag; @@ -274,7 +274,7 @@ class Backend * * @return string|int */ - public function adbGetMenuShowFlag() + public function adbGetMenuShowFlag(): string|int { return $this->menu_show_flag; } @@ -437,7 +437,7 @@ class Backend * @return array associative array * @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( 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray', @@ -453,7 +453,7 @@ class Backend * @return string formatted string * @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat() */ - public function adbByteStringFormat($number): string + public function adbByteStringFormat(string|int|float $number): string { trigger_error( 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()', @@ -482,7 +482,7 @@ class Backend string $dummy = '', string $path = '', string $cache = '' - ) { + ): string|bool { trigger_error( 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Output\Image::createThumbnail()', E_USER_DEPRECATED @@ -569,28 +569,28 @@ class Backend * Basic class holds exact the same, except the Year/Month/Day/etc strings * are translated in this call * - * @param int $year year YYYY - * @param int $month month m - * @param int $day day d - * @param int $hour hour H - * @param int $min min i - * @param string $suffix additional info printed after the date time - * variable in the drop down - * also used for ID in the on change JS call - * @param int $min_steps default is 1 (minute), can set to anything, - * is used as sum up from 0 - * @param bool $name_pos_back default false, if set to true, - * the name will be printend - * after the drop down and not before the drop down - * @return string HTML formated strings for drop down lists - * of date and time + * @param int|string $year year YYYY + * @param int|string $month month m + * @param int|string $day day d + * @param int|string $hour hour H + * @param int|string $min min i + * @param string $suffix additional info printed after the date time + * variable in the drop down + * also used for ID in the on change JS call + * @param int $min_steps default is 1 (minute), can set to anything, + * is used as sum up from 0 + * @param bool $name_pos_back default false, if set to true, + * the name will be printend + * after the drop down and not before the drop down + * @return string HTML formated strings for drop down lists + * of date and time */ public function adbPrintDateTime( - $year, - $month, - $day, - $hour, - $min, + int|string $year, + int|string $month, + int|string $day, + int|string $hour, + int|string $min, string $suffix = '', int $min_steps = 1, bool $name_pos_back = false diff --git a/www/lib/CoreLibs/Admin/EditBase.php b/www/lib/CoreLibs/Admin/EditBase.php index c84e159f..74760448 100644 --- a/www/lib/CoreLibs/Admin/EditBase.php +++ b/www/lib/CoreLibs/Admin/EditBase.php @@ -534,7 +534,7 @@ class EditBase * @throws Exception * @throws SmartyException */ - public function editBaseRun() + public function editBaseRun(): void { // set the template dir // WARNING: this has a special check for the mailing tool layout (old layout) diff --git a/www/lib/CoreLibs/Basic.php b/www/lib/CoreLibs/Basic.php index c902bde5..27d0c3eb 100644 --- a/www/lib/CoreLibs/Basic.php +++ b/www/lib/CoreLibs/Basic.php @@ -672,9 +672,6 @@ class Basic public static function arrayToString(array $array, string $connect_char): string { trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED); - if (!is_array($array)) { - $array = []; - } return join($connect_char, $array); } diff --git a/www/lib/CoreLibs/Check/Colors.php b/www/lib/CoreLibs/Check/Colors.php index 2d1d3ae3..466ff133 100644 --- a/www/lib/CoreLibs/Check/Colors.php +++ b/www/lib/CoreLibs/Check/Colors.php @@ -42,8 +42,11 @@ class Colors * @param int|false $hsl_flag flag to check for hsl type * @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 preg_match("/\((.*)\)/", $color, $matches); if ( diff --git a/www/lib/CoreLibs/Check/Encoding.php b/www/lib/CoreLibs/Check/Encoding.php index 09b23622..782b479e 100644 --- a/www/lib/CoreLibs/Check/Encoding.php +++ b/www/lib/CoreLibs/Check/Encoding.php @@ -25,7 +25,7 @@ class Encoding * if null is set then "none" * @return void */ - public static function setErrorChar($string): void + public static function setErrorChar(string|int|null $string): void { if (empty($string)) { $string = 'none'; @@ -52,7 +52,7 @@ class Encoding * directly * @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(); if ($return_substitute_func === true) { @@ -78,14 +78,14 @@ class Encoding * @param string $string string to test * @param string $from_encoding encoding of string to test * @param string $to_encoding target encoding - * @return bool|array false if no error or + * @return array|false false if no error or * array with failed characters */ public static function checkConvertEncoding( string $string, string $from_encoding, string $to_encoding - ) { + ): array|false { // convert to target encoding and convert back $temp = mb_convert_encoding($string, $to_encoding, $from_encoding); $compare = mb_convert_encoding($temp, $from_encoding, $to_encoding); diff --git a/www/lib/CoreLibs/Check/Jason.php b/www/lib/CoreLibs/Check/Jason.php index 9a38d12c..7961c05f 100644 --- a/www/lib/CoreLibs/Check/Jason.php +++ b/www/lib/CoreLibs/Check/Jason.php @@ -32,7 +32,7 @@ class Jason * or error string ('' for no error) * @deprecated Use Json::jsonGetLastError() */ - public static function jsonGetLastError(bool $return_string = false) + public static function jsonGetLastError(bool $return_string = false): int|string { return Json::jsonGetLastError($return_string); } diff --git a/www/lib/CoreLibs/Combined/ArrayHandler.php b/www/lib/CoreLibs/Combined/ArrayHandler.php index 925df15c..8029eb0d 100644 --- a/www/lib/CoreLibs/Combined/ArrayHandler.php +++ b/www/lib/CoreLibs/Combined/ArrayHandler.php @@ -21,12 +21,12 @@ class ArrayHandler * the needle can be found in the * 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 = []; - if (!is_array($haystack)) { - $haystack = []; - } if ( $key_search_for != null && array_key_exists($key_search_for, $haystack) && @@ -72,7 +72,7 @@ class ArrayHandler * * @param string|int $needle needle (search for) * @param array $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 * return new flat layout * @param array|null $path recursive call for previous path @@ -80,9 +80,9 @@ class ArrayHandler * the element was found */ public static function arraySearchRecursiveAll( - $needle, + string|int $needle, array $haystack, - $key_search_for, + string|int|null $key_search_for, bool $old = true, ?array $path = null ): ?array { @@ -101,10 +101,6 @@ class ArrayHandler $path['work'] = []; } } - // should not be needed because it would trigger a php mehtod error - if (!is_array($haystack)) { - $haystack = []; - } // go through the array, foreach ($haystack as $_key => $_value) { @@ -152,17 +148,18 @@ class ArrayHandler * 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 * - * @param array $array search in as array - * @param string|int $key key (key to search in) - * @param string|int $value value (what to find) - * @param bool $strict [false], if set to true, will strict check key/value - * @return bool true on found, false on not found + * @param array $array search in as array + * @param string|int $key key (key to search in) + * @param string|int|bool $value value (what to find) + * @param bool $strict [false], if set to true, will strict check key/value + * @return bool true on found, false on not found */ - public static function arraySearchSimple(array $array, $key, $value, bool $strict = false): bool - { - if (!is_array($array)) { - $array = []; - } + public static function arraySearchSimple( + array $array, + string|int $key, + string|int|bool $value, + bool $strict = false + ): bool { foreach ($array as $_key => $_value) { // if value is an array, we search if (is_array($_value)) { @@ -189,9 +186,9 @@ class ArrayHandler * bool key flag: true: handle keys as string or int * default false: all keys are string * - * @return array|bool merged array + * @return array|false merged array */ - public static function arrayMergeRecursive() + public static function arrayMergeRecursive(): array|false { // croak on not enough arguemnts (we need at least two) if (func_num_args() < 2) { @@ -264,10 +261,10 @@ class ArrayHandler * @param array $needle elements to search for * @param array $haystack array where the $needle elements should * be searched int - * @return array|bool either the found elements or + * @return array|false either the found elements or * 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 = []; foreach ($needle as $element) { @@ -291,8 +288,12 @@ class ArrayHandler * @param bool $set_only flag to return all (default), or set only * @return array 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 = []; // do this to only run count once for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) { @@ -385,11 +386,8 @@ class ArrayHandler * and will be pushed up * @return array 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) { // if it is not an array do just nothing if (!is_array($value)) { diff --git a/www/lib/CoreLibs/Combined/DateTime.php b/www/lib/CoreLibs/Combined/DateTime.php index 018cf2bb..c1f16147 100644 --- a/www/lib/CoreLibs/Combined/DateTime.php +++ b/www/lib/CoreLibs/Combined/DateTime.php @@ -74,7 +74,7 @@ class DateTime * @return string formated date+time in Y-M-D h:m:s ms */ public static function dateStringFormat( - $timestamp, + int|float $timestamp, bool $show_micro = false, bool $micro_as_float = false ): string { @@ -100,8 +100,10 @@ class DateTime * @param bool $show_micro show micro seconds, default true * @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 if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) { 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 * @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; 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 * @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; } list ($year, $month, $day) = array_pad( @@ -324,7 +326,7 @@ class DateTime * @return int|bool false on error * or int -1 (se) 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 if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) { @@ -367,7 +369,7 @@ class DateTime * @return int|bool false for error * or -1 (se) 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 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 * @return array 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 $days = []; // if anything invalid, return 0,0,0 diff --git a/www/lib/CoreLibs/Convert/Byte.php b/www/lib/CoreLibs/Convert/Byte.php index d7dc17ea..ebec727a 100644 --- a/www/lib/CoreLibs/Convert/Byte.php +++ b/www/lib/CoreLibs/Convert/Byte.php @@ -39,7 +39,7 @@ class Byte * @return string converted byte number (float) with suffix * @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 (is_numeric($bytes)) { @@ -121,7 +121,7 @@ class Byte * @return string|int|float converted value or original value * @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 if ($flags & self::BYTE_FORMAT_SI) { diff --git a/www/lib/CoreLibs/Convert/Colors.php b/www/lib/CoreLibs/Convert/Colors.php index 7f3c9f62..b88c6d3f 100644 --- a/www/lib/CoreLibs/Convert/Colors.php +++ b/www/lib/CoreLibs/Convert/Colors.php @@ -31,8 +31,12 @@ class Colors * @return string|bool rgb in hex values with leading # if set, * 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 = ''; if ($hex_prefix === true) { $hex_color = '#'; @@ -61,7 +65,7 @@ class Colors string $hexStr, bool $return_as_string = false, string $seperator = ',' - ) { + ): string|array|bool { $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string if (!is_string($hexStr)) { return false; @@ -99,7 +103,7 @@ class Colors * @return array|bool Hue, Sat, Brightness/Value * 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 foreach (['red', 'green', 'blue'] as $c) { @@ -146,7 +150,7 @@ class Colors * @return array|bool 0 red/1 green/2 blue array as 0-255 * 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 // and S and V are 0 to 1 @@ -232,7 +236,7 @@ class Colors * @return array|bool hue/sat/luminance * 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 foreach (['red', 'green', 'blue'] as $c) { @@ -285,11 +289,8 @@ class Colors * @param float $lum luminance: 0-100 * @return array|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) { $hue = 0; } diff --git a/www/lib/CoreLibs/Convert/Html.php b/www/lib/CoreLibs/Convert/Html.php index 4c3f4354..147a6443 100644 --- a/www/lib/CoreLibs/Convert/Html.php +++ b/www/lib/CoreLibs/Convert/Html.php @@ -19,7 +19,7 @@ class Html * @param mixed $string string to html encode * @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)) { return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); @@ -52,7 +52,7 @@ class Html * @return ?string returns checked or selected, * 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 (in_array($needle, $haystack)) { diff --git a/www/lib/CoreLibs/Convert/Json.php b/www/lib/CoreLibs/Convert/Json.php index a051eb9f..96867157 100644 --- a/www/lib/CoreLibs/Convert/Json.php +++ b/www/lib/CoreLibs/Convert/Json.php @@ -51,13 +51,13 @@ class Json /** * returns human readable string for json errors thrown in jsonConvertToArray * - * @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) + * @param bool $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) */ - public static function jsonGetLastError(bool $return_string = false) + public static function jsonGetLastError(bool $return_string = false): int|string { $json_error_string = ''; // valid errors as of php 8.0 diff --git a/www/lib/CoreLibs/Convert/Math.php b/www/lib/CoreLibs/Convert/Math.php index cddf4e2e..205abbf1 100644 --- a/www/lib/CoreLibs/Convert/Math.php +++ b/www/lib/CoreLibs/Convert/Math.php @@ -48,7 +48,7 @@ class Math * @param string|int|float $number string or number to check * @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)) { return 0; diff --git a/www/lib/CoreLibs/Create/RandomKey.php b/www/lib/CoreLibs/Create/RandomKey.php index 353aa568..3d340799 100644 --- a/www/lib/CoreLibs/Create/RandomKey.php +++ b/www/lib/CoreLibs/Create/RandomKey.php @@ -32,7 +32,7 @@ class RandomKey * * @return void has no return */ - private static function initRandomKeyData() + private static function initRandomKeyData(): void { // random key generation base string self::$key_range = join('', array_merge( @@ -52,7 +52,6 @@ class RandomKey private static function validateRandomKeyLenght(int $key_length): bool { if ( - is_numeric($key_length) && $key_length > 0 && $key_length <= self::$max_key_length ) { diff --git a/www/lib/CoreLibs/Create/Session.php b/www/lib/CoreLibs/Create/Session.php index f1d20f6e..46468cc8 100644 --- a/www/lib/CoreLibs/Create/Session.php +++ b/www/lib/CoreLibs/Create/Session.php @@ -18,19 +18,6 @@ class Session /** @var string list for errors */ 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 * 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 * Not this is just a wrapper for the static System::checkCLI call @@ -116,7 +116,7 @@ class Session * @param string|null $session_name * @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 if ($this->checkCliStatus()) { @@ -163,7 +163,7 @@ class Session * * @return string|bool */ - public function getSessionId() + public function getSessionId(): string|bool { return session_id(); } @@ -173,7 +173,7 @@ class Session * * @return string|bool */ - public function getSessionName() + public function getSessionName(): string|bool { return session_name(); } @@ -275,7 +275,7 @@ class Session * @param mixed $value value to set (can be anything) * @return void */ - public function setS($name, $value): void + public function setS(string|int $name, mixed $value): void { $_SESSION[$name] = $value; } @@ -286,7 +286,7 @@ class Session * @param string|int $name value key to get from _SESSION * @return mixed value stored in _SESSION */ - public function getS($name) + public function getS(string|int $name): mixed { return $_SESSION[$name] ?? ''; } @@ -297,7 +297,7 @@ class Session * @param string|int $name Name to check for * @return bool True for set, False fornot set */ - public function issetS($name): bool + public function issetS(string|int $name): bool { return isset($_SESSION[$name]); } @@ -308,7 +308,7 @@ class Session * @param string|int $name _SESSION key name to remove * @return void */ - public function unsetS($name): void + public function unsetS(string|int $name): void { if (isset($_SESSION[$name])) { unset($_SESSION[$name]); @@ -325,7 +325,7 @@ class Session * @param mixed $value * @return void */ - public function __set($name, $value): void + public function __set(string|int $name, mixed $value): void { $_SESSION[$name] = $value; } @@ -334,13 +334,14 @@ class Session * Undocumented function * * @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])) { return $_SESSION[$name]; } + return null; } /** @@ -349,7 +350,7 @@ class Session * @param string|int $name * @return bool */ - public function __isset($name): bool + public function __isset(string|int $name): bool { return isset($_SESSION[$name]); } @@ -360,7 +361,7 @@ class Session * @param string|int $name * @return void */ - public function __unset($name): void + public function __unset(string|int $name): void { if (isset($_SESSION[$name])) { unset($_SESSION[$name]); diff --git a/www/lib/CoreLibs/DB/Extended/ArrayIO.php b/www/lib/CoreLibs/DB/Extended/ArrayIO.php index 3044d414..f972e047 100644 --- a/www/lib/CoreLibs/DB/Extended/ArrayIO.php +++ b/www/lib/CoreLibs/DB/Extended/ArrayIO.php @@ -137,7 +137,7 @@ class ArrayIO extends \CoreLibs\DB\IO * @param string $text any html encoded string * @return string decoded html string */ - public function convertData($text): string + public function convertData(string $text): string { $text = str_replace('<b>', '', $text); $text = str_replace('</b>', '', $text); @@ -156,7 +156,7 @@ class ArrayIO extends \CoreLibs\DB\IO * @param string $text encoded html string * @return string decoded html string */ - public function convertEntities($text): string + public function convertEntities(string $text): string { $text = str_replace('<', '<', $text); $text = str_replace('>', '>', $text); @@ -172,7 +172,7 @@ class ArrayIO extends \CoreLibs\DB\IO * @param bool $write write to error message, default false * @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); $string = ''; @@ -192,7 +192,7 @@ class ArrayIO extends \CoreLibs\DB\IO * * @return bool true if pk value is set, else false */ - public function dbCheckPkSet() + public function dbCheckPkSet(): bool { // if pk_id is set, overrule ... if ($this->pk_id) { @@ -210,10 +210,10 @@ class ArrayIO extends \CoreLibs\DB\IO /** * 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 */ - public function dbResetArray($reset_pk = false): void + public function dbResetArray(bool $reset_pk = false): void { reset($this->table_array); foreach (array_keys($this->table_array) as $column) { @@ -230,10 +230,10 @@ class ArrayIO extends \CoreLibs\DB\IO * * @param array $table_array optional override for table array set * 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 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 if (is_array($table_array) && count($table_array)) { @@ -294,12 +294,12 @@ class ArrayIO extends \CoreLibs\DB\IO /** * 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 $table_array optional table array, overwrites * internal set array * @return array 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 (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) * - * @param boolean $addslashes old convert entities and set set escape + * @param bool $addslashes old convert entities and set set escape * @param array $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 table array or null */ public function dbWrite( @@ -391,7 +391,7 @@ class ArrayIO extends \CoreLibs\DB\IO array $table_array = [], bool $acl_limit = false ): array { - if (is_array($table_array) && count($table_array)) { + if (count($table_array)) { $this->table_array = $table_array; } // PK ID check @@ -475,13 +475,12 @@ class ArrayIO extends \CoreLibs\DB\IO $this->table_array[$column]['type'] != 'view' && strlen($column) > 0 && // no acl limiter - ($acl_limit === false || ( + $acl_limit === false || // acl limit is true, min edit must be at larger than set - $acl_limit === true && $this->base_acl_level >= ($this->table_array[$column]['min_edit_acl'] ?? 100) - )) + ) ) { // for password use hidden value if main is not set if ( @@ -528,7 +527,7 @@ class ArrayIO extends \CoreLibs\DB\IO } $q_data .= $_value; } 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) . "'"; } elseif ( isset($this->table_array[$column]['interval']) || diff --git a/www/lib/CoreLibs/DB/IO.php b/www/lib/CoreLibs/DB/IO.php index 4ecef2b5..6fc5b993 100644 --- a/www/lib/CoreLibs/DB/IO.php +++ b/www/lib/CoreLibs/DB/IO.php @@ -12,7 +12,7 @@ * 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 * 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 * 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 * * 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) * 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 @@ -288,7 +288,7 @@ class IO private $query; // the query string at the moment // only inside // 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, /** @var bool */ private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs) @@ -315,7 +315,7 @@ class IO /** @var array */ private $cursor_ext; // hash of hashes // 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) /** @var int */ private $num_rows; // how many rows have been found @@ -495,15 +495,15 @@ class IO * OTOH this whole class is so PgSQL specific * 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; switch ($this->db_type) { // list of valid DB function objects case 'pgsql': - $db_functions = new \CoreLibs\DB\SQL\PgSQL(); + $db_functions = new SQL\PgSQL(); break; // if non set or none matching abort default: @@ -566,7 +566,7 @@ class IO */ private function __closeDB(): void { - if (!empty($this->dbh) && $this->dbh !== false) { + if (!empty($this->dbh)) { $this->db_functions->__dbClose(); $this->dbh = null; } @@ -632,9 +632,6 @@ class IO private function __printArray(array $array): string { $string = ''; - if (!is_array($array)) { - $array = []; - } foreach ($array as $key => $value) { $string .= $this->nbsp . '' . $key . ' => '; if (is_array($value)) { @@ -701,7 +698,7 @@ class IO /** * 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 * is more accurate (PgSql\Result) * @return array 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 * if nothing then empty string */ - private function __dbErrorPreprocessor($cursor = false): array + private function __dbErrorPreprocessor(\PgSql\Result|false $cursor = false): array { $pg_error_string = ''; // 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning, @@ -774,12 +771,15 @@ class IO /** * write an error * @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 * @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; [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); // write error msg ... @@ -798,12 +798,15 @@ class IO /** * write a warning * @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 * @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; [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); $this->__dbDebug( @@ -821,18 +824,18 @@ class IO /** * if there is the 'to_encoding' var set, * and the field is in the wrong encoding converts it to the target - * @param array|bool|null $row Array from fetch_row - * @return array|bool Convert fetch_row array, or false + * @param array|false $row Array from fetch_row + * @return array|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; } // only do if array, else pass through row (can be false) if ( !is_array($row) || - empty($this->to_encoding)// || empty($this->db_encoding) + empty($this->to_encoding) ) { return $row; } @@ -914,7 +917,7 @@ class IO * check if there is another query running, or do we hang after a * PHP error * @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 { @@ -932,7 +935,7 @@ class IO * dbReturn * Read data from previous written data cache * @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 Current position query data from cache */ private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array @@ -983,10 +986,11 @@ class IO * - sets internal hash for query * - checks multiple call count * @param string $query query string - * @param string $pk_name primary key [if set to NULL no returning will be added] - * @return string|bool queryt hash OR boolean false on error + * @param string $pk_name primary key + * [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 $this->cursor = false; @@ -1152,10 +1156,10 @@ class IO * insert_id_ext [DEPRECATED, all in insert_id_arr] * - holds all returning as array * 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|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 * @return void */ @@ -1163,7 +1167,7 @@ class IO bool $returning_id, string $query, ?string $pk_name, - $cursor, + \PgSql\Result|false $cursor, ?string $stm_name = null ): void { // $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 - * @param string $name what setting to query - * @return mixed setting value, if not allowed name return false + * @param string $name what setting to query + * @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 = ''; switch ($name) { @@ -1373,7 +1377,7 @@ class IO * extended version info, can access all additional information data * @param string $parameter Array parameter name, if not valid returns * 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 * @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 * @return bool true for ok, false on not ok */ public function dbCompareVersion(string $compare): bool { $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); $compare = $matches[1]; $to_master = $matches[2]; @@ -1464,7 +1469,7 @@ class IO * else current cursor * @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 if ($query) { @@ -1490,7 +1495,7 @@ class IO * @param string|int|float|bool $string string to escape * @return string escaped string */ - public function dbEscapeString($string): string + public function dbEscapeString(string|int|float|bool $string): string { return $this->db_functions->__dbEscapeString($string); } @@ -1501,7 +1506,7 @@ class IO * @param string|int|float|bool $string string to escape * @return string escaped string */ - public function dbEscapeLiteral($string): string + public function dbEscapeLiteral(string|int|float|bool $string): string { return $this->db_functions->__dbEscapeLiteral($string); } @@ -1538,11 +1543,11 @@ class IO /** * clear up any data for valid DB insert - * @param int|float|string|null $value to escape data - * @param string $kbn escape trigger type - * @return string escaped value + * @param int|float|string|bool|null $value to escape data + * @param string $kbn escape trigger type + * @return string escaped value */ - public function dbSqlEscape($value, string $kbn = '') + public function dbSqlEscape(int|float|string|bool|null $value, string $kbn = ''): string { switch ($kbn) { case 'i': @@ -1551,24 +1556,35 @@ class IO case 'f': $value = empty($value) ? 'NULL' : floatval($value); break; + // string (null is null, else is string) case 't': $value = $value === null ? 'NULL' : "'" . $this->dbEscapeString($value) . "'"; break; + // string litereal (null is null, else is stirng) case 'tl': $value = $value === null ? 'NULL' : $this->dbEscapeLiteral($value); break; - // what is d? + // escape string, set empty to null 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; // bytea data case 'by': $value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value); break; + // bool case 'b': if (is_float($value)) { $value = (int)$value; @@ -1577,6 +1593,7 @@ class IO 'NULL' : "'" . $this->dbBoolean($value, true) . "'"; break; + // int, but with empty value is 0 case 'i2': $value = empty($value) ? 0 : intval($value); break; @@ -1590,14 +1607,14 @@ class IO /** * 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 * @param string|bool|int $string 't' / 'f' or any string, or bool true/false - * @param boolean $rev do reverse (bool to string) - * @return bool|string correct php boolean true/false + * @param bool $rev do reverse (bool to string) + * @return bool|string correct php bool true/false * 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 ($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 * @param string $table table name * @param string $schema optional schema name - * @return array|bool array of table data, false on error (table not found) + * @return array|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(); $table = (!empty($schema) ? $schema . '.' : '') . $table; @@ -1736,14 +1753,14 @@ class IO * NO_CACHE/3: don't write cache * @param bool $assoc_only True to only returned the named and not * index position ones - * @return array|bool return array data or false on error/end + * @return array|false return array data or false on error/end * @#suppress PhanTypeMismatchDimFetch */ public function dbReturn( string $query, int $cache = self::USE_CACHE, bool $assoc_only = false - ) { + ): array|false { $this->__dbErrorReset(); if (!$query) { $this->__dbError(11); @@ -1754,7 +1771,7 @@ class IO // pre declare array if (!isset($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, // cached data 'data' => [], @@ -2000,9 +2017,9 @@ class IO * if pk name is table name and _id, pk_name * is not needed to be set * 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(); // 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 - * @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 * if not set will use internal cursor, * if not found, stops with 0 (error) @@ -2039,9 +2056,9 @@ class IO * @param bool $assoc_only false is default, * if true only named rows, * not numbered index rows - * @return array|bool row array or false on error + * @return array|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(); // set last available cursor if none set or false @@ -2064,9 +2081,9 @@ class IO * returns the FIRST row of the given query * @param string $query the query to be executed * @param bool $assoc_only if true, only return assoc entry (default false) - * @return array|bool row array or false on error + * @return array|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(); if (!$query) { @@ -2091,9 +2108,9 @@ class IO * createds an array of hashes of the query (all data) * @param string $query the query to be executed * @param bool $assoc_only if true, only name ref are returned (default true) - * @return array|bool array of hashes (row -> fields), false on error + * @return array|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(); if (!$query) { @@ -2151,41 +2168,44 @@ class IO * returns the full array for cursor ext * or cursor for one query * or detail data fonr one query cursor data - * @param string|null $query Query string, if not null convert to hash - * and return set cursor ext for only this - * if not found or null return null - * @return array|string|int|resource|object|null - * Cursor Extended array full if no parameter - * Key is hash string from query run - * Or cursor data entry if query field is set - * If nothing found return null + * @param string|null $query Query string, if not null convert to hash + * and return set cursor ext for only this + * if not found or null return null + * @param string $query_field [=''] optional query field to get + * @return array|string|int|\PgSql\Result|null + * Cursor Extended array full if no parameter + * Key is hash string from query run + * Or cursor data entry if query field is set + * If nothing found return null */ - public function dbGetCursorExt($query = null, string $query_field = '') - { - if ($query !== null) { - $query_hash = $this->dbGetQueryHash($query); - if ( - is_array($this->cursor_ext) && - isset($this->cursor_ext[$query_hash]) - ) { - if (empty($query_field)) { - return $this->cursor_ext[$query_hash]; - } else { - return $this->cursor_ext[$query_hash][$query_field] ?? null; - } - } else { - return null; - } + public function dbGetCursorExt( + $query = null, + string $query_field = '' + ): array|string|int|\PgSql\Result|null { + if ($query === null) { + return $this->cursor_ext; + } + $query_hash = $this->dbGetQueryHash($query); + if ( + is_array($this->cursor_ext) && + isset($this->cursor_ext[$query_hash]) + ) { + if (empty($query_field)) { + return $this->cursor_ext[$query_hash]; + } else { + return $this->cursor_ext[$query_hash][$query_field] ?? null; + } + } else { + return null; } - return $this->cursor_ext; } /** * returns the current position the read out * @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(); if (!$query) { @@ -2199,9 +2219,9 @@ class IO /** * returns the number of rows for the current select query * @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(); if (!$query) { @@ -2253,11 +2273,14 @@ class IO * @param string $stm_name statement name * @param string $query queryt string to run * @param string $pk_name optional primary key - * @return bool|object|resource false on error, true on warning or - * result on full ok (PgSql\Result) + * @return \PgSql\Result|bool false on error, true on warning or + * 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(); $matches = []; if (!$query) { @@ -2361,9 +2384,9 @@ class IO * runs a prepare query * @param string $stm_name statement name for the query to run * @param array $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(); // if no DB Handler drop out @@ -2483,11 +2506,10 @@ class IO /** * checks a previous async query and returns data if finished * NEEDS : dbExecAsync - * @return bool|object|resource cursor resource if the query is still running, - * false if an error occured or cursor of that query - * (PgSql\Result) + * @return \PgSql\Result|bool cursor resource if the query is still running, + * false if an error occured or cursor of that query */ - public function dbCheckAsync() + public function dbCheckAsync(): \PgSql\Result|bool { $this->__dbErrorReset(); // 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 string $table name for the target table * @param array $data data array to override _POST data - * @return int|bool primary key + * @return int|false primary key */ public function dbWriteData( array $write_array, @@ -2555,13 +2577,7 @@ class IO int $primary_key, string $table, array $data = [] - ) { - if (!is_array($write_array)) { - $write_array = []; - } - if (!is_array($not_write_array)) { - $not_write_array = []; - } + ): int|false { $not_write_update_array = []; return $this->dbWriteDataExt( $write_array, @@ -2586,16 +2602,16 @@ class IO * to write during update (optional) * @param array $data optional array with data * if not _POST vars are used - * @return int|bool primary key + * @return int|false primary key */ public function dbWriteDataExt( array $write_array, - $primary_key, + int|string|array $primary_key, string $table, array $not_write_array = [], array $not_write_update_array = [], array $data = [] - ) { + ): int|false { if (!is_array($primary_key)) { $primary_key = [ 'row' => $table . '_id', @@ -2711,7 +2727,10 @@ class IO $primary_key['value'] = $this->dbGetInsertPK(); } // 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 * @return bool Current debug flag as set */ - public function dbSetDebug($debug = null): bool + public function dbSetDebug(?bool $debug = null): bool { if ($debug !== null) { $this->db_debug = $debug; @@ -2805,7 +2824,7 @@ class IO * @return bool False on failure to find schema value or set schema, * True on successful set */ - public function dbSetSchema(string $db_schema) + public function dbSetSchema(string $db_schema): bool { $this->__dbErrorReset(); if (empty($db_schema)) { @@ -2934,9 +2953,9 @@ class IO /** * 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; } @@ -2992,7 +3011,7 @@ class IO * * @return array|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)) { return null; @@ -3016,7 +3035,7 @@ class IO * @param integer|null $pos * @return array|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 if ($key === null) { @@ -3110,7 +3129,7 @@ class IO * Not ethat returnin_id also can return false * 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 (empty($stm_name)) { @@ -3159,8 +3178,8 @@ class IO * Sets error number that was last * So we always have the last error number stored even if a new * one is created - * @param boolean $transform Set to true to transform into id + error message - * @return string Last error number as string or error message + * @param bool $transform Set to true to transform into id + error message + * @return string Last error number as string or error message */ public function dbGetLastError(bool $transform = false): string { @@ -3180,10 +3199,10 @@ class IO /** * Sets warning number that was last * 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 - * @return string Last Warning number as string or warning message + * @param bool $transform Set to true to transform into id + 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 (empty($this->warning_id)) { @@ -3221,7 +3240,7 @@ class IO * Null for error * @deprecated Use ->dbGetInsertPK(); */ - public function dbGetReturning() + public function dbGetReturning(): array|string|int|bool|null { return $this->dbGetInsertPK(); } @@ -3271,7 +3290,7 @@ class IO * @return array|string|int|bool|null See above * @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); return $this->dbGetReturningExt($key); @@ -3282,7 +3301,7 @@ class IO * @return array|string|int|bool|null [DEPRECATED] * @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); return $this->dbGetInsertPK(); @@ -3293,7 +3312,7 @@ class IO * @return array|string|int|bool|null [DEPRECATED] * @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); return $this->dbGetInsertPK(); @@ -3305,7 +3324,7 @@ class IO * @return array|string|bool|int|null [DEPRECATED] * @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); return $this->dbGetReturningExt($key); @@ -3314,10 +3333,10 @@ class IO /** * DEPRECATED: getCursorExt * @param string|null $q [DEPRECATED] - * @return array|string|int|resource|object|null [DEPRECATED] + * @return array|string|int|\PgSql\Result|null [DEPRECATED] * @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); return $this->dbGetCursorExt($q); @@ -3328,7 +3347,7 @@ class IO * @return int|null [DEPRECATED] * @deprecated use dbGetNumRows() instead */ - public function getNumRows() + public function getNumRows(): ?int { trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED); return $this->dbGetNumRows(); diff --git a/www/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php b/www/lib/CoreLibs/DB/SQL/Interface/SqlFunctions.php similarity index 64% rename from www/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php rename to www/lib/CoreLibs/DB/SQL/Interface/SqlFunctions.php index 9380519f..36ef0f51 100644 --- a/www/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php +++ b/www/lib/CoreLibs/DB/SQL/Interface/SqlFunctions.php @@ -6,7 +6,7 @@ declare(strict_types=1); -namespace CoreLibs\DB\SQL\SqlInterface; +namespace CoreLibs\DB\SQL\Interface; interface SqlFunctions { @@ -21,33 +21,33 @@ interface SqlFunctions * Undocumented function * * @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 * * @param string $query * @param array $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 * * @param string $query - * @return boolean + * @return bool */ public function __dbSendQuery(string $query): bool; /** * Undocumented function * - * @return object|resource|bool + * @return \PgSql\Result|false */ - public function __dbGetResult(); + public function __dbGetResult(): \PgSql\Result|false; /** * Undocumented function @@ -61,85 +61,85 @@ interface SqlFunctions * * @param string $name * @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 * * @param string $name * @param array $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 * - * @param object|resource|bool $cursor - * @return integer + * @param \PgSql\Result|false $cursor + * @return int */ - public function __dbNumRows($cursor): int; + public function __dbNumRows(\PgSql\Result|false $cursor): int; /** * Undocumented function * - * @param object|resource|bool $cursor - * @return integer + * @param \PgSql\Result|false $cursor + * @return int */ - public function __dbNumFields($cursor): int; + public function __dbNumFields(\PgSql\Result|false $cursor): int; /** * Undocumented function * - * @param object|resource|bool $cursor + * @param \PgSql\Result|false $cursor * @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 * - * @param object|resource|bool $cursor + * @param \PgSql\Result|false $cursor * @param int $result_type * @return array|bool */ - public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH); + public function __dbFetchArray(\PgSql\Result|false $cursor, int $result_type = PGSQL_BOTH); /** * Undocumented function * - * @param boolean $assoc_type - * @return integer + * @param bool $assoc_type + * @return int */ public function __dbResultType(bool $assoc_type = true): int; /** * Undocumented function * - * @param object|resource|bool $cursor + * @param \PgSql\Result|false $cursor * @return array|bool */ - public function __dbFetchAll($cursor); + public function __dbFetchAll(\PgSql\Result|false $cursor): array|bool; /** * Undocumented function * - * @param object|resource|bool $cursor - * @return integer + * @param \PgSql\Result|false $cursor + * @return int */ - public function __dbAffectedRows($cursor): int; + public function __dbAffectedRows(\PgSql\Result|false $cursor): int; /** * Undocumented function * * @param string $query * @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 @@ -148,7 +148,7 @@ interface SqlFunctions * @param string $schema * @return string|bool */ - public function __dbPrimaryKey(string $table, string $schema = ''); + public function __dbPrimaryKey(string $table, string $schema = ''): string|bool; /** * Undocumented function @@ -157,9 +157,9 @@ interface SqlFunctions * @param string $db_user * @param string $db_pass * @param string $db_name - * @param integer $db_port + * @param int $db_port * @param string $db_ssl - * @return object|resource|bool + * @return \PgSql\Connection|false */ public function __dbConnect( string $db_host, @@ -168,24 +168,24 @@ interface SqlFunctions string $db_name, int $db_port, string $db_ssl = 'allow' - ); + ): \PgSql\Connection|false; /** * Undocumented function * - * @param object|resource|bool $cursor + * @param \PgSql\Result|false $cursor * @return string */ - public function __dbPrintError($cursor = false): string; + public function __dbPrintError(\PgSql\Result|false $cursor = false): string; /** * Undocumented function * * @param string $table - * @param boolean $extended + * @param bool $extended * @return array|bool */ - public function __dbMetaData(string $table, $extended = true); + public function __dbMetaData(string $table, bool $extended = true): array|bool; /** * Undocumented function @@ -193,7 +193,7 @@ interface SqlFunctions * @param string|int|float|bool $string * @return string */ - public function __dbEscapeString($string): string; + public function __dbEscapeString(string|int|float|bool $string): string; /** * Undocumented function @@ -201,7 +201,7 @@ interface SqlFunctions * @param string|int|float|bool $string * @return string */ - public function __dbEscapeLiteral($string): string; + public function __dbEscapeLiteral(string|int|float|bool $string): string; /** * Undocumented function @@ -230,15 +230,15 @@ interface SqlFunctions /** * Undocumented function * - * @return boolean + * @return bool */ public function __dbConnectionBusy(): bool; /** * Undocumented function * - * @param integer $timeout_seconds - * @return boolean + * @param int $timeout_seconds + * @return bool */ public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool; @@ -253,8 +253,8 @@ interface SqlFunctions * Undocumented function * * @param string $array_text - * @param integer $start - * @param integer|null $end + * @param int $start + * @param int|null $end * @return array|null */ public function __dbArrayParse( @@ -275,7 +275,7 @@ interface SqlFunctions * Undocumented function * * @param string $db_schema - * @return integer + * @return int */ public function __dbSetSchema(string $db_schema): int; @@ -290,7 +290,7 @@ interface SqlFunctions * Undocumented function * * @param string $db_encoding - * @return integer + * @return int */ public function __dbSetEncoding(string $db_encoding): int; diff --git a/www/lib/CoreLibs/DB/SQL/PgSQL.php b/www/lib/CoreLibs/DB/SQL/PgSQL.php index 251148b6..b9da6d3a 100644 --- a/www/lib/CoreLibs/DB/SQL/PgSQL.php +++ b/www/lib/CoreLibs/DB/SQL/PgSQL.php @@ -51,12 +51,11 @@ namespace CoreLibs\DB\SQL; // as main system. Currently all @var sets are written as object /** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */ -class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions +class PgSQL implements Interface\SqlFunctions { /** @var string */ private $last_error_query; - // NOTE for PHP 8.1 this is no longer a resource - /** @var object|resource|bool */ // replace object with PgSql\Connection + /** @var \PgSql\Connection|false */ 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 * * @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 = ''; - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } // 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 array $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 = ''; - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } // 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 { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } $result = pg_send_query($this->dbh, $query); @@ -136,12 +135,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * 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 = ''; - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } $result = pg_get_result($this->dbh); @@ -161,7 +160,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions */ public function __dbClose(): void { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return; } 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 $query query string - * @return object|resource|bool prepare statement handler or - * false for error (PgSql\Result) + * @return \PgSql\Result|false prepare statement handler or + * 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; } $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 array $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; } $result = pg_execute($this->dbh, $name, $data); @@ -212,12 +211,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * wrapper for pg_num_rows * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @return int number of rows, -1 on error + * @param \PgSql\Result|false $cursor cursor + * @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 pg_num_rows($cursor); @@ -226,12 +225,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * wrapper for pg_num_fields * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @return int number for fields in result, -1 on error + * @param \PgSql\Result|false $cursor cursor + * @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 pg_num_fields($cursor); @@ -240,13 +239,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * wrapper for pg_field_name * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @param int $i field position - * @return string|bool name or false on error + * @param \PgSql\Result|false $cursor cursor + * @param int $i field position + * @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 pg_field_name($cursor, $i); @@ -256,13 +255,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions * wrapper for pg_fetch_array * if through/true false, use __dbResultType(true) * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @param int $result_type result type as int number - * @return array|bool array result data or false on end/error + * @param \PgSql\Result|false $cursor cursor + * @param int $result_type result type as int number + * @return array|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; } // 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 * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @return array|bool data array or false for end/error + * @param \PgSql\Result|false $cursor cursor + * @return array|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 pg_fetch_all($cursor); @@ -301,12 +300,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * wrapper for pg_affected_rows * - * @param object|resource|bool $cursor cursor PgSql\Result (former resource) - * @return int affected rows, 0 for none, -1 for error + * @param \PgSql\Result|false $cursor cursor + * @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 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 * @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 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 * @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) { // 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 integer $db_port port (int, 5432 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( string $db_host, @@ -435,7 +434,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions string $db_name, int $db_port, string $db_ssl = 'allow' - ) { + ): \PgSql\Connection|false { if (empty($db_name)) { return false; } @@ -470,22 +469,22 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions * reads the last error for this cursor and returns * html formatted string with error name * - * @param bool|object|resource $cursor cursor PgSql\Result (former resource) + * @param \PgSql\Result|false $cursor cursor * or null * @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 ''; } // 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); $this->last_error_query = ''; $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- ' . $error_str; } else { @@ -500,9 +499,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions * @param bool $extended show extended info (default true) * @return array|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; } // 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 * @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 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 * @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)''; } // 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 { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return ''; } // 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 { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return ''; } return pg_escape_bytea($this->dbh, $data); @@ -584,11 +583,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * 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 { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } return pg_connection_busy($this->dbh); @@ -597,13 +597,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions /** * Experimental wrapper with scoket timetout * - * @param integer $timeout_seconds Wait how many seconds on timeout - * @return boolean True if connection is busy, or false on - * not busy or no db connection at all + * @param integer $timeout_seconds Wait how many seconds on timeout + * @return bool True if connection is busy, or false on + * not busy or no db connection at all */ public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return false; } $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 * eg 13.5 (other info) will return only 13.5 * - * @param string $parameter Parameter string to extract from array - * @param boolean $strip If parameter is server strip out on default - * Set to false to get original string AS is - * @return string The parameter value + * @param string $parameter Parameter string to extract from array + * @param bool $strip If parameter is server strip out on default + * Set to false to get original string AS is + * @return string The parameter value */ public function __dbVersionInfo(string $parameter, bool $strip = true): string { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return ''; } // extract element @@ -655,7 +655,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions */ public function __dbVersionInfoParameterList(): array { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return []; } return array_keys(pg_version($this->dbh)); @@ -670,7 +670,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions */ public function __dbVersion(): string { - if ($this->dbh === false || is_bool($this->dbh)) { + if (is_bool($this->dbh)) { return ''; } // 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 * @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; } if (empty($parameter)) { diff --git a/www/lib/CoreLibs/Debug/Logging.php b/www/lib/CoreLibs/Debug/Logging.php index b07ce0f7..d9ffb343 100644 --- a/www/lib/CoreLibs/Debug/Logging.php +++ b/www/lib/CoreLibs/Debug/Logging.php @@ -413,7 +413,7 @@ class Logging * @param string $name what variable to return * @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 return $this->{$name}; @@ -550,9 +550,9 @@ class Logging * @param string $flag on/off * @param string|null $level if not null then check if this array entry is set * else return false - * @return bool|array if $level is null, return array, else boolean true/false + * @return array|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 if (!in_array($type, ['debug', 'echo', 'print'])) { diff --git a/www/lib/CoreLibs/Language/Core/GetTextReader.php b/www/lib/CoreLibs/Language/Core/GetTextReader.php index cfa8e7c1..3fa7404d 100644 --- a/www/lib/CoreLibs/Language/Core/GetTextReader.php +++ b/www/lib/CoreLibs/Language/Core/GetTextReader.php @@ -122,7 +122,7 @@ class GetTextReader * @param bool $enable_cache Enable or disable caching * 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 ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) { diff --git a/www/lib/CoreLibs/Language/Encoding.php b/www/lib/CoreLibs/Language/Encoding.php index ebdbc612..443b3258 100644 --- a/www/lib/CoreLibs/Language/Encoding.php +++ b/www/lib/CoreLibs/Language/Encoding.php @@ -46,7 +46,7 @@ class Encoding * @return void * @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); } @@ -60,7 +60,7 @@ class Encoding * @return string|int Set error character * @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); } @@ -81,7 +81,7 @@ class Encoding * @param string $string string to test * @param string $from_encoding encoding of string to test * @param string $to_encoding target encoding - * @return bool|array false if no error or + * @return array|false false if no error or * array with failed characters * @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding(); */ @@ -89,7 +89,7 @@ class Encoding string $string, string $from_encoding, string $to_encoding - ) { + ): array|false { return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding); } diff --git a/www/lib/CoreLibs/Output/Form/Elements.php b/www/lib/CoreLibs/Output/Form/Elements.php index badbeae0..b6ee9d8b 100644 --- a/www/lib/CoreLibs/Output/Form/Elements.php +++ b/www/lib/CoreLibs/Output/Form/Elements.php @@ -13,27 +13,27 @@ class Elements /** * print the date/time drop downs, used in any queue/send/insert at date/time place * - * @param int $year year YYYY - * @param int $month month m - * @param int $day day d - * @param int $hour hour H - * @param int $min min i - * @param string $suffix additional info printed after the date time - * variable in the drop down - * also used for ID in the on change JS call - * @param int $min_steps default is 1 (minute), can set to anything, - * is used as sum up from 0 - * @param bool $name_pos_back default false, if set to true, - * the name will be printend after the drop down - * and not before the drop down - * @return string HTML formated strings for drop down lists of date and time + * @param int|string $year year YYYY + * @param int|string $month month m + * @param int|string $day day d + * @param int|string $hour hour H + * @param int|string $min min i + * @param string $suffix additional info printed after the date time + * variable in the drop down + * also used for ID in the on change JS call + * @param int $min_steps default is 1 (minute), can set to anything, + * is used as sum up from 0 + * @param bool $name_pos_back default false, if set to true, + * the name will be printend after the drop down + * and not before the drop down + * @return string HTML formated strings for drop down lists of date and time */ public static function printDateTime( - $year, - $month, - $day, - $hour, - $min, + int|string $year, + int|string $month, + int|string $day, + int|string $hour, + int|string $min, string $suffix = '', int $min_steps = 1, bool $name_pos_back = false diff --git a/www/lib/CoreLibs/Output/Form/Generate.php b/www/lib/CoreLibs/Output/Form/Generate.php index 4ec98820..cfbe8ee2 100644 --- a/www/lib/CoreLibs/Output/Form/Generate.php +++ b/www/lib/CoreLibs/Output/Form/Generate.php @@ -731,9 +731,6 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO empty($this->table_array['protected']['value']) && !$this->error ) { - if (!is_array($element_list)) { - $element_list = []; - } for ($i = 0, $i_max = count($element_list); $i < $i_max; $i++) { // $this->log->debug('form_error', 'Array: ' // . 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); - foreach ($hidden_array as $key => $value) { - $hidden[] = ['key' => $key, 'value' => $value]; - } + reset($hidden_array); + foreach ($hidden_array as $key => $value) { + $hidden[] = ['key' => $key, 'value' => $value]; } return $hidden; } diff --git a/www/lib/CoreLibs/Output/Image.php b/www/lib/CoreLibs/Output/Image.php index a3a14fd5..20d2a56f 100644 --- a/www/lib/CoreLibs/Output/Image.php +++ b/www/lib/CoreLibs/Output/Image.php @@ -22,7 +22,7 @@ class Image * if empty ROOT is choosen * @param string $cache_source cache path, if not given TMP is used * @param bool $clear_cache if set to true, will create thumb all the tame - * @return string|bool thumbnail name, or false for error + * @return string|false thumbnail name, or false for error */ public static function createThumbnail( string $pic, @@ -32,7 +32,7 @@ class Image string $path = '', string $cache_source = '', bool $clear_cache = false - ) { + ): string|false { // get image type flags $image_types = [ 1 => 'gif', @@ -73,7 +73,7 @@ class Image $create_file = false; $delete_filename = ''; // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png - if (!$type && is_numeric($size_x) && is_numeric($size_y)) { + if (!$type) { $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3]; if (!is_file($check_thumb)) { $create_file = true; @@ -100,10 +100,10 @@ class Image [$width, $height, $type] = getimagesize($filename) ?: []; } // 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; } - if (!$size_y || $size_y < 1 || !is_numeric($size_y)) { + if (!$size_y || $size_y < 1) { $size_y = $height; } $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) * to use quick but less nice version * @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( string $filename, @@ -181,7 +181,7 @@ class Image bool $use_cache = true, bool $high_quality = true, int $jpeg_quality = 80 - ) { + ): string|false { $thumbnail = false; // $this->debug('IMAGE PREPARE', "FILE: $filename (exists " // .(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 * @return void */ - public static function correctImageOrientation($filename): void + public static function correctImageOrientation(string $filename): void { // function exists & file is writeable, else do nothing if (!function_exists('exif_read_data') || !is_writeable($filename)) { diff --git a/www/vendor/composer/autoload_classmap.php b/www/vendor/composer/autoload_classmap.php index 3a0931ef..7f685d49 100644 --- a/www/vendor/composer/autoload_classmap.php +++ b/www/vendor/composer/autoload_classmap.php @@ -40,8 +40,8 @@ return array( 'CoreLibs\\Create\\Uids' => $baseDir . '/lib/CoreLibs/Create/Uids.php', 'CoreLibs\\DB\\Extended\\ArrayIO' => $baseDir . '/lib/CoreLibs/DB/Extended/ArrayIO.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\\SqlInterface\\SqlFunctions' => $baseDir . '/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php', 'CoreLibs\\Debug\\FileWriter' => $baseDir . '/lib/CoreLibs/Debug/FileWriter.php', 'CoreLibs\\Debug\\Logging' => $baseDir . '/lib/CoreLibs/Debug/Logging.php', 'CoreLibs\\Debug\\MemoryUsage' => $baseDir . '/lib/CoreLibs/Debug/MemoryUsage.php', diff --git a/www/vendor/composer/autoload_static.php b/www/vendor/composer/autoload_static.php index 49bf4ee6..e92239dd 100644 --- a/www/vendor/composer/autoload_static.php +++ b/www/vendor/composer/autoload_static.php @@ -73,8 +73,8 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9 'CoreLibs\\Create\\Uids' => __DIR__ . '/../..' . '/lib/CoreLibs/Create/Uids.php', 'CoreLibs\\DB\\Extended\\ArrayIO' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/Extended/ArrayIO.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\\SqlInterface\\SqlFunctions' => __DIR__ . '/../..' . '/lib/CoreLibs/DB/SQL/SqlInterface/SqlFunctions.php', 'CoreLibs\\Debug\\FileWriter' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/FileWriter.php', 'CoreLibs\\Debug\\Logging' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/Logging.php', 'CoreLibs\\Debug\\MemoryUsage' => __DIR__ . '/../..' . '/lib/CoreLibs/Debug/MemoryUsage.php',