Version v0.18.0-dev

This commit is contained in:
github-actions[bot] 2025-07-20 18:06:40 +00:00
parent e87f4fb566
commit fafec25b11
27 changed files with 477 additions and 234 deletions

View File

@ -1 +1 @@
v0.17.0 v0.18.0-dev

162
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "a455b1a65c7b995734d820bdba5a58b2", "content-hash": "7a1692c86b6fc70eaaf43c4bee3673aa",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@ -475,16 +475,16 @@
}, },
{ {
"name": "ipl/html", "name": "ipl/html",
"version": "v0.8.2", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-html.git", "url": "https://github.com/Icinga/ipl-html.git",
"reference": "e18bdf11abca5e477100e2c7d190ef5f424d0d98" "reference": "946f5c06265f64a90cd74d7df8833a353a90d9a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-html/zipball/e18bdf11abca5e477100e2c7d190ef5f424d0d98", "url": "https://api.github.com/repos/Icinga/ipl-html/zipball/946f5c06265f64a90cd74d7df8833a353a90d9a5",
"reference": "e18bdf11abca5e477100e2c7d190ef5f424d0d98", "reference": "946f5c06265f64a90cd74d7df8833a353a90d9a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -499,6 +499,7 @@
"ipl/stdlib": "dev-main", "ipl/stdlib": "dev-main",
"ipl/validator": "dev-main" "ipl/validator": "dev-main"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -516,22 +517,22 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-html/issues", "issues": "https://github.com/Icinga/ipl-html/issues",
"source": "https://github.com/Icinga/ipl-html/tree/v0.8.2" "source": "https://github.com/Icinga/ipl-html/tree/main"
}, },
"time": "2025-05-21T09:00:03+00:00" "time": "2025-06-12T11:57:29+00:00"
}, },
{ {
"name": "ipl/i18n", "name": "ipl/i18n",
"version": "v0.2.2", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-i18n.git", "url": "https://github.com/Icinga/ipl-i18n.git",
"reference": "a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c" "reference": "692c33cf46fb8a4511da613dbf97c6216c345cc5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-i18n/zipball/a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c", "url": "https://api.github.com/repos/Icinga/ipl-i18n/zipball/692c33cf46fb8a4511da613dbf97c6216c345cc5",
"reference": "a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c", "reference": "692c33cf46fb8a4511da613dbf97c6216c345cc5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -543,6 +544,7 @@
"require-dev": { "require-dev": {
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"files": [ "files": [
@ -567,13 +569,13 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-i18n/issues", "issues": "https://github.com/Icinga/ipl-i18n/issues",
"source": "https://github.com/Icinga/ipl-i18n/tree/v0.2.2" "source": "https://github.com/Icinga/ipl-i18n/tree/main"
}, },
"time": "2024-04-08T12:28:47+00:00" "time": "2025-06-12T11:57:41+00:00"
}, },
{ {
"name": "ipl/orm", "name": "ipl/orm",
"version": "v0.7.0", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-orm.git", "url": "https://github.com/Icinga/ipl-orm.git",
@ -596,6 +598,7 @@
"ipl/sql": "dev-main", "ipl/sql": "dev-main",
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -621,16 +624,16 @@
}, },
{ {
"name": "ipl/scheduler", "name": "ipl/scheduler",
"version": "v0.1.2", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-scheduler.git", "url": "https://github.com/Icinga/ipl-scheduler.git",
"reference": "6119afdea07b1390bd728e350e0d80b26ec8d6ba" "reference": "3e4e8db870239d213b1dfd5d79d59fc7784b4c34"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-scheduler/zipball/6119afdea07b1390bd728e350e0d80b26ec8d6ba", "url": "https://api.github.com/repos/Icinga/ipl-scheduler/zipball/3e4e8db870239d213b1dfd5d79d59fc7784b4c34",
"reference": "6119afdea07b1390bd728e350e0d80b26ec8d6ba", "reference": "3e4e8db870239d213b1dfd5d79d59fc7784b4c34",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -650,6 +653,7 @@
"suggest": { "suggest": {
"ext-ev": "Improves performance, efficiency and avoids system limitations. Highly recommended! (See https://www.php.net/manual/en/intro.ev.php for details)" "ext-ev": "Improves performance, efficiency and avoids system limitations. Highly recommended! (See https://www.php.net/manual/en/intro.ev.php for details)"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"files": [ "files": [
@ -673,22 +677,22 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-scheduler/issues", "issues": "https://github.com/Icinga/ipl-scheduler/issues",
"source": "https://github.com/Icinga/ipl-scheduler/tree/v0.1.2" "source": "https://github.com/Icinga/ipl-scheduler/tree/main"
}, },
"time": "2023-08-30T14:14:23+00:00" "time": "2025-06-12T11:58:09+00:00"
}, },
{ {
"name": "ipl/sql", "name": "ipl/sql",
"version": "v0.7.1", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-sql.git", "url": "https://github.com/Icinga/ipl-sql.git",
"reference": "e80f1b712c4b96099b0bf9096e6efe317a165e3b" "reference": "d668799c89fe25af974db8cb249d1f100002e615"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-sql/zipball/e80f1b712c4b96099b0bf9096e6efe317a165e3b", "url": "https://api.github.com/repos/Icinga/ipl-sql/zipball/d668799c89fe25af974db8cb249d1f100002e615",
"reference": "e80f1b712c4b96099b0bf9096e6efe317a165e3b", "reference": "d668799c89fe25af974db8cb249d1f100002e615",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -699,6 +703,7 @@
"require-dev": { "require-dev": {
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -717,22 +722,22 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-sql/issues", "issues": "https://github.com/Icinga/ipl-sql/issues",
"source": "https://github.com/Icinga/ipl-sql/tree/v0.7.1" "source": "https://github.com/Icinga/ipl-sql/tree/main"
}, },
"time": "2024-06-25T09:55:43+00:00" "time": "2025-06-12T11:58:24+00:00"
}, },
{ {
"name": "ipl/stdlib", "name": "ipl/stdlib",
"version": "v0.14.0", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-stdlib.git", "url": "https://github.com/Icinga/ipl-stdlib.git",
"reference": "bf5fc8f40b86bd90337db6f3be389be2a93fa64a" "reference": "dca0319664db9b575254215b3f5dbbd87a3387bd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-stdlib/zipball/bf5fc8f40b86bd90337db6f3be389be2a93fa64a", "url": "https://api.github.com/repos/Icinga/ipl-stdlib/zipball/dca0319664db9b575254215b3f5dbbd87a3387bd",
"reference": "bf5fc8f40b86bd90337db6f3be389be2a93fa64a", "reference": "dca0319664db9b575254215b3f5dbbd87a3387bd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -740,6 +745,7 @@
"ext-openssl": "*", "ext-openssl": "*",
"php": ">=7.2" "php": ">=7.2"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"files": [ "files": [
@ -756,22 +762,22 @@
"description": "ipl Standard Library", "description": "ipl Standard Library",
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-stdlib/issues", "issues": "https://github.com/Icinga/ipl-stdlib/issues",
"source": "https://github.com/Icinga/ipl-stdlib/tree/v0.14.0" "source": "https://github.com/Icinga/ipl-stdlib/tree/main"
}, },
"time": "2024-04-22T08:47:08+00:00" "time": "2025-06-12T11:59:06+00:00"
}, },
{ {
"name": "ipl/validator", "name": "ipl/validator",
"version": "v0.5.0", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-validator.git", "url": "https://github.com/Icinga/ipl-validator.git",
"reference": "a601fae0ed330e63cea50e4a2a6659ca1ad97bde" "reference": "eac5c6c114d8007db5c24ae159fe6f55e89a946b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-validator/zipball/a601fae0ed330e63cea50e4a2a6659ca1ad97bde", "url": "https://api.github.com/repos/Icinga/ipl-validator/zipball/eac5c6c114d8007db5c24ae159fe6f55e89a946b",
"reference": "a601fae0ed330e63cea50e4a2a6659ca1ad97bde", "reference": "eac5c6c114d8007db5c24ae159fe6f55e89a946b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -780,11 +786,14 @@
"ipl/i18n": ">=0.2.0", "ipl/i18n": ">=0.2.0",
"ipl/stdlib": ">=0.12.0", "ipl/stdlib": ">=0.12.0",
"php": ">=7.2", "php": ">=7.2",
"psr/http-message": "~1.0" "psr/http-message": "^1.1"
}, },
"require-dev": { "require-dev": {
"guzzlehttp/psr7": "^1" "guzzlehttp/psr7": "^1",
"ipl/i18n": "dev-main",
"ipl/stdlib": "dev-main"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -799,13 +808,13 @@
"homepage": "https://github.com/Icinga/ipl-validator", "homepage": "https://github.com/Icinga/ipl-validator",
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-validator/issues", "issues": "https://github.com/Icinga/ipl-validator/issues",
"source": "https://github.com/Icinga/ipl-validator/tree/v0.5.0" "source": "https://github.com/Icinga/ipl-validator/tree/main"
}, },
"time": "2023-03-21T15:59:00+00:00" "time": "2025-06-12T11:59:27+00:00"
}, },
{ {
"name": "ipl/web", "name": "ipl/web",
"version": "v0.11.1", "version": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-web.git", "url": "https://github.com/Icinga/ipl-web.git",
@ -837,6 +846,7 @@
"ipl/stdlib": "dev-main", "ipl/stdlib": "dev-main",
"shardj/zf1-future": "^1.22" "shardj/zf1-future": "^1.22"
}, },
"default-branch": true,
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -1628,15 +1638,73 @@
} }
], ],
"packages-dev": [], "packages-dev": [],
"aliases": [], "aliases": [
"minimum-stability": "stable", {
"stability-flags": [], "package": "ipl/html",
"prefer-stable": false, "version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/i18n",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/orm",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/scheduler",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/sql",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/stdlib",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/validator",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
},
{
"package": "ipl/web",
"version": "dev-main",
"alias": "99.x-dev",
"alias_normalized": "99.9999999.9999999.9999999-dev"
}
],
"minimum-stability": "dev",
"stability-flags": {
"ipl/html": 20,
"ipl/i18n": 20,
"ipl/orm": 20,
"ipl/scheduler": 20,
"ipl/sql": 20,
"ipl/stdlib": 20,
"ipl/validator": 20,
"ipl/web": 20
},
"prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": ">=8.2" "php": ">=7.2"
}, },
"platform-dev": [], "platform-dev": {},
"platform-overrides": { "platform-overrides": {
"php": "8.2" "php": "8.2"
}, },

7
vendor/autoload.php vendored
View File

@ -14,12 +14,9 @@ if (PHP_VERSION_ID < 50600) {
echo $err; echo $err;
} }
} }
trigger_error( throw new RuntimeException($err);
$err,
E_USER_ERROR
);
} }
require_once __DIR__ . '/composer/autoload_real.php'; require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInita455b1a65c7b995734d820bdba5a58b2::getLoader(); return ComposerAutoloaderInit7a1692c86b6fc70eaaf43c4bee3673aa::getLoader();

View File

@ -26,12 +26,23 @@ use Composer\Semver\VersionParser;
*/ */
class InstalledVersions class InstalledVersions
{ {
/**
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
* @internal
*/
private static $selfDir = null;
/** /**
* @var mixed[]|null * @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/ */
private static $installed; private static $installed;
/**
* @var bool
*/
private static $installedIsLocalDir;
/** /**
* @var bool|null * @var bool|null
*/ */
@ -309,6 +320,24 @@ class InstalledVersions
{ {
self::$installed = $data; self::$installed = $data;
self::$installedByVendor = array(); self::$installedByVendor = array();
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
// so we have to assume it does not, and that may result in duplicate data being returned when listing
// all installed packages for example
self::$installedIsLocalDir = false;
}
/**
* @return string
*/
private static function getSelfDir()
{
if (self::$selfDir === null) {
self::$selfDir = strtr(__DIR__, '\\', '/');
}
return self::$selfDir;
} }
/** /**
@ -322,19 +351,27 @@ class InstalledVersions
} }
$installed = array(); $installed = array();
$copiedLocalDir = false;
if (self::$canGetVendors) { if (self::$canGetVendors) {
$selfDir = self::getSelfDir();
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
$vendorDir = strtr($vendorDir, '\\', '/');
if (isset(self::$installedByVendor[$vendorDir])) { if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir]; $installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) { } elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php'; $required = require $vendorDir.'/composer/installed.php';
$installed[] = self::$installedByVendor[$vendorDir] = $required; self::$installedByVendor[$vendorDir] = $required;
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { $installed[] = $required;
self::$installed = $installed[count($installed) - 1]; if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
self::$installed = $required;
self::$installedIsLocalDir = true;
} }
} }
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
$copiedLocalDir = true;
}
} }
} }
@ -350,7 +387,7 @@ class InstalledVersions
} }
} }
if (self::$installed !== array()) { if (self::$installed !== array() && !$copiedLocalDir) {
$installed[] = self::$installed; $installed[] = self::$installed;
} }

View File

@ -22,7 +22,7 @@ return array(
'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'),
'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'), 'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'Evenement\\' => array($vendorDir . '/evenement/evenement/src'), 'Evenement\\' => array($vendorDir . '/evenement/evenement/src'),
'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/src'), 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/src'),

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer // autoload_real.php @generated by Composer
class ComposerAutoloaderInita455b1a65c7b995734d820bdba5a58b2 class ComposerAutoloaderInit7a1692c86b6fc70eaaf43c4bee3673aa
{ {
private static $loader; private static $loader;
@ -24,16 +24,16 @@ class ComposerAutoloaderInita455b1a65c7b995734d820bdba5a58b2
require __DIR__ . '/platform_check.php'; require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInita455b1a65c7b995734d820bdba5a58b2', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit7a1692c86b6fc70eaaf43c4bee3673aa', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInita455b1a65c7b995734d820bdba5a58b2', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit7a1692c86b6fc70eaaf43c4bee3673aa', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php'; require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::getInitializer($loader));
$loader->register(true); $loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::$files; $filesToLoad = \Composer\Autoload\ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) { $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInita455b1a65c7b995734d820bdba5a58b2 class ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa
{ {
public static $files = array ( public static $files = array (
'a2c78434f64e5f5ed402f42eee19c025' => __DIR__ . '/..' . '/ipl/stdlib/src/functions_include.php', 'a2c78434f64e5f5ed402f42eee19c025' => __DIR__ . '/..' . '/ipl/stdlib/src/functions_include.php',
@ -139,8 +139,8 @@ class ComposerStaticInita455b1a65c7b995734d820bdba5a58b2
), ),
'Psr\\Http\\Message\\' => 'Psr\\Http\\Message\\' =>
array ( array (
0 => __DIR__ . '/..' . '/psr/http-message/src', 0 => __DIR__ . '/..' . '/psr/http-factory/src',
1 => __DIR__ . '/..' . '/psr/http-factory/src', 1 => __DIR__ . '/..' . '/psr/http-message/src',
), ),
'GuzzleHttp\\Psr7\\' => 'GuzzleHttp\\Psr7\\' =>
array ( array (
@ -194,10 +194,10 @@ class ComposerStaticInita455b1a65c7b995734d820bdba5a58b2
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::$prefixesPsr0; $loader->prefixesPsr0 = ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::$prefixesPsr0;
$loader->classMap = ComposerStaticInita455b1a65c7b995734d820bdba5a58b2::$classMap; $loader->classMap = ComposerStaticInit7a1692c86b6fc70eaaf43c4bee3673aa::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }

View File

@ -490,17 +490,17 @@
}, },
{ {
"name": "ipl/html", "name": "ipl/html",
"version": "v0.8.2", "version": "dev-main",
"version_normalized": "0.8.2.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-html.git", "url": "https://github.com/Icinga/ipl-html.git",
"reference": "e18bdf11abca5e477100e2c7d190ef5f424d0d98" "reference": "946f5c06265f64a90cd74d7df8833a353a90d9a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-html/zipball/e18bdf11abca5e477100e2c7d190ef5f424d0d98", "url": "https://api.github.com/repos/Icinga/ipl-html/zipball/946f5c06265f64a90cd74d7df8833a353a90d9a5",
"reference": "e18bdf11abca5e477100e2c7d190ef5f424d0d98", "reference": "946f5c06265f64a90cd74d7df8833a353a90d9a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -515,7 +515,8 @@
"ipl/stdlib": "dev-main", "ipl/stdlib": "dev-main",
"ipl/validator": "dev-main" "ipl/validator": "dev-main"
}, },
"time": "2025-05-21T09:00:03+00:00", "time": "2025-06-12T11:57:29+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -534,23 +535,23 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-html/issues", "issues": "https://github.com/Icinga/ipl-html/issues",
"source": "https://github.com/Icinga/ipl-html/tree/v0.8.2" "source": "https://github.com/Icinga/ipl-html/tree/main"
}, },
"install-path": "../ipl/html" "install-path": "../ipl/html"
}, },
{ {
"name": "ipl/i18n", "name": "ipl/i18n",
"version": "v0.2.2", "version": "dev-main",
"version_normalized": "0.2.2.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-i18n.git", "url": "https://github.com/Icinga/ipl-i18n.git",
"reference": "a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c" "reference": "692c33cf46fb8a4511da613dbf97c6216c345cc5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-i18n/zipball/a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c", "url": "https://api.github.com/repos/Icinga/ipl-i18n/zipball/692c33cf46fb8a4511da613dbf97c6216c345cc5",
"reference": "a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c", "reference": "692c33cf46fb8a4511da613dbf97c6216c345cc5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -562,7 +563,8 @@
"require-dev": { "require-dev": {
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"time": "2024-04-08T12:28:47+00:00", "time": "2025-06-12T11:57:41+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -588,14 +590,14 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-i18n/issues", "issues": "https://github.com/Icinga/ipl-i18n/issues",
"source": "https://github.com/Icinga/ipl-i18n/tree/v0.2.2" "source": "https://github.com/Icinga/ipl-i18n/tree/main"
}, },
"install-path": "../ipl/i18n" "install-path": "../ipl/i18n"
}, },
{ {
"name": "ipl/orm", "name": "ipl/orm",
"version": "v0.7.0", "version": "dev-main",
"version_normalized": "0.7.0.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-orm.git", "url": "https://github.com/Icinga/ipl-orm.git",
@ -619,6 +621,7 @@
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"time": "2025-07-10T06:16:16+00:00", "time": "2025-07-10T06:16:16+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -645,17 +648,17 @@
}, },
{ {
"name": "ipl/scheduler", "name": "ipl/scheduler",
"version": "v0.1.2", "version": "dev-main",
"version_normalized": "0.1.2.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-scheduler.git", "url": "https://github.com/Icinga/ipl-scheduler.git",
"reference": "6119afdea07b1390bd728e350e0d80b26ec8d6ba" "reference": "3e4e8db870239d213b1dfd5d79d59fc7784b4c34"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-scheduler/zipball/6119afdea07b1390bd728e350e0d80b26ec8d6ba", "url": "https://api.github.com/repos/Icinga/ipl-scheduler/zipball/3e4e8db870239d213b1dfd5d79d59fc7784b4c34",
"reference": "6119afdea07b1390bd728e350e0d80b26ec8d6ba", "reference": "3e4e8db870239d213b1dfd5d79d59fc7784b4c34",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -675,7 +678,8 @@
"suggest": { "suggest": {
"ext-ev": "Improves performance, efficiency and avoids system limitations. Highly recommended! (See https://www.php.net/manual/en/intro.ev.php for details)" "ext-ev": "Improves performance, efficiency and avoids system limitations. Highly recommended! (See https://www.php.net/manual/en/intro.ev.php for details)"
}, },
"time": "2023-08-30T14:14:23+00:00", "time": "2025-06-12T11:58:09+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -700,23 +704,23 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-scheduler/issues", "issues": "https://github.com/Icinga/ipl-scheduler/issues",
"source": "https://github.com/Icinga/ipl-scheduler/tree/v0.1.2" "source": "https://github.com/Icinga/ipl-scheduler/tree/main"
}, },
"install-path": "../ipl/scheduler" "install-path": "../ipl/scheduler"
}, },
{ {
"name": "ipl/sql", "name": "ipl/sql",
"version": "v0.7.1", "version": "dev-main",
"version_normalized": "0.7.1.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-sql.git", "url": "https://github.com/Icinga/ipl-sql.git",
"reference": "e80f1b712c4b96099b0bf9096e6efe317a165e3b" "reference": "d668799c89fe25af974db8cb249d1f100002e615"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-sql/zipball/e80f1b712c4b96099b0bf9096e6efe317a165e3b", "url": "https://api.github.com/repos/Icinga/ipl-sql/zipball/d668799c89fe25af974db8cb249d1f100002e615",
"reference": "e80f1b712c4b96099b0bf9096e6efe317a165e3b", "reference": "d668799c89fe25af974db8cb249d1f100002e615",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -727,7 +731,8 @@
"require-dev": { "require-dev": {
"ipl/stdlib": "dev-main" "ipl/stdlib": "dev-main"
}, },
"time": "2024-06-25T09:55:43+00:00", "time": "2025-06-12T11:58:24+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -747,23 +752,23 @@
], ],
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-sql/issues", "issues": "https://github.com/Icinga/ipl-sql/issues",
"source": "https://github.com/Icinga/ipl-sql/tree/v0.7.1" "source": "https://github.com/Icinga/ipl-sql/tree/main"
}, },
"install-path": "../ipl/sql" "install-path": "../ipl/sql"
}, },
{ {
"name": "ipl/stdlib", "name": "ipl/stdlib",
"version": "v0.14.0", "version": "dev-main",
"version_normalized": "0.14.0.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-stdlib.git", "url": "https://github.com/Icinga/ipl-stdlib.git",
"reference": "bf5fc8f40b86bd90337db6f3be389be2a93fa64a" "reference": "dca0319664db9b575254215b3f5dbbd87a3387bd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-stdlib/zipball/bf5fc8f40b86bd90337db6f3be389be2a93fa64a", "url": "https://api.github.com/repos/Icinga/ipl-stdlib/zipball/dca0319664db9b575254215b3f5dbbd87a3387bd",
"reference": "bf5fc8f40b86bd90337db6f3be389be2a93fa64a", "reference": "dca0319664db9b575254215b3f5dbbd87a3387bd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -771,7 +776,8 @@
"ext-openssl": "*", "ext-openssl": "*",
"php": ">=7.2" "php": ">=7.2"
}, },
"time": "2024-04-22T08:47:08+00:00", "time": "2025-06-12T11:59:06+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -789,23 +795,23 @@
"description": "ipl Standard Library", "description": "ipl Standard Library",
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-stdlib/issues", "issues": "https://github.com/Icinga/ipl-stdlib/issues",
"source": "https://github.com/Icinga/ipl-stdlib/tree/v0.14.0" "source": "https://github.com/Icinga/ipl-stdlib/tree/main"
}, },
"install-path": "../ipl/stdlib" "install-path": "../ipl/stdlib"
}, },
{ {
"name": "ipl/validator", "name": "ipl/validator",
"version": "v0.5.0", "version": "dev-main",
"version_normalized": "0.5.0.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-validator.git", "url": "https://github.com/Icinga/ipl-validator.git",
"reference": "a601fae0ed330e63cea50e4a2a6659ca1ad97bde" "reference": "eac5c6c114d8007db5c24ae159fe6f55e89a946b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Icinga/ipl-validator/zipball/a601fae0ed330e63cea50e4a2a6659ca1ad97bde", "url": "https://api.github.com/repos/Icinga/ipl-validator/zipball/eac5c6c114d8007db5c24ae159fe6f55e89a946b",
"reference": "a601fae0ed330e63cea50e4a2a6659ca1ad97bde", "reference": "eac5c6c114d8007db5c24ae159fe6f55e89a946b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -814,12 +820,15 @@
"ipl/i18n": ">=0.2.0", "ipl/i18n": ">=0.2.0",
"ipl/stdlib": ">=0.12.0", "ipl/stdlib": ">=0.12.0",
"php": ">=7.2", "php": ">=7.2",
"psr/http-message": "~1.0" "psr/http-message": "^1.1"
}, },
"require-dev": { "require-dev": {
"guzzlehttp/psr7": "^1" "guzzlehttp/psr7": "^1",
"ipl/i18n": "dev-main",
"ipl/stdlib": "dev-main"
}, },
"time": "2023-03-21T15:59:00+00:00", "time": "2025-06-12T11:59:27+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -835,14 +844,14 @@
"homepage": "https://github.com/Icinga/ipl-validator", "homepage": "https://github.com/Icinga/ipl-validator",
"support": { "support": {
"issues": "https://github.com/Icinga/ipl-validator/issues", "issues": "https://github.com/Icinga/ipl-validator/issues",
"source": "https://github.com/Icinga/ipl-validator/tree/v0.5.0" "source": "https://github.com/Icinga/ipl-validator/tree/main"
}, },
"install-path": "../ipl/validator" "install-path": "../ipl/validator"
}, },
{ {
"name": "ipl/web", "name": "ipl/web",
"version": "v0.11.1", "version": "dev-main",
"version_normalized": "0.11.1.0", "version_normalized": "dev-main",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Icinga/ipl-web.git", "url": "https://github.com/Icinga/ipl-web.git",
@ -875,6 +884,7 @@
"shardj/zf1-future": "^1.22" "shardj/zf1-future": "^1.22"
}, },
"time": "2025-06-12T11:58:42+00:00", "time": "2025-06-12T11:58:42+00:00",
"default-branch": true,
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {

View File

@ -3,7 +3,7 @@
'name' => 'icinga/icinga-php-library', 'name' => 'icinga/icinga-php-library',
'pretty_version' => 'dev-main', 'pretty_version' => 'dev-main',
'version' => 'dev-main', 'version' => 'dev-main',
'reference' => 'ac844e6464137f2e3b53a663dfb3a6d00599f24b', 'reference' => 'e87f4fb566b84fe2a146a8a04e89cf0be0fcd778',
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
@ -76,82 +76,106 @@
'icinga/icinga-php-library' => array( 'icinga/icinga-php-library' => array(
'pretty_version' => 'dev-main', 'pretty_version' => 'dev-main',
'version' => 'dev-main', 'version' => 'dev-main',
'reference' => 'ac844e6464137f2e3b53a663dfb3a6d00599f24b', 'reference' => 'e87f4fb566b84fe2a146a8a04e89cf0be0fcd778',
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/html' => array( 'ipl/html' => array(
'pretty_version' => 'v0.8.2', 'pretty_version' => 'dev-main',
'version' => '0.8.2.0', 'version' => 'dev-main',
'reference' => 'e18bdf11abca5e477100e2c7d190ef5f424d0d98', 'reference' => '946f5c06265f64a90cd74d7df8833a353a90d9a5',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/html', 'install_path' => __DIR__ . '/../ipl/html',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/i18n' => array( 'ipl/i18n' => array(
'pretty_version' => 'v0.2.2', 'pretty_version' => 'dev-main',
'version' => '0.2.2.0', 'version' => 'dev-main',
'reference' => 'a2b6109c5a93f86ce46d5dc351dbe75e8502cf8c', 'reference' => '692c33cf46fb8a4511da613dbf97c6216c345cc5',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/i18n', 'install_path' => __DIR__ . '/../ipl/i18n',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/orm' => array( 'ipl/orm' => array(
'pretty_version' => 'v0.7.0', 'pretty_version' => 'dev-main',
'version' => '0.7.0.0', 'version' => 'dev-main',
'reference' => '4893731e82c9a3859e8ea05c4c21d84f067d7cfb', 'reference' => '4893731e82c9a3859e8ea05c4c21d84f067d7cfb',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/orm', 'install_path' => __DIR__ . '/../ipl/orm',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/scheduler' => array( 'ipl/scheduler' => array(
'pretty_version' => 'v0.1.2', 'pretty_version' => 'dev-main',
'version' => '0.1.2.0', 'version' => 'dev-main',
'reference' => '6119afdea07b1390bd728e350e0d80b26ec8d6ba', 'reference' => '3e4e8db870239d213b1dfd5d79d59fc7784b4c34',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/scheduler', 'install_path' => __DIR__ . '/../ipl/scheduler',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/sql' => array( 'ipl/sql' => array(
'pretty_version' => 'v0.7.1', 'pretty_version' => 'dev-main',
'version' => '0.7.1.0', 'version' => 'dev-main',
'reference' => 'e80f1b712c4b96099b0bf9096e6efe317a165e3b', 'reference' => 'd668799c89fe25af974db8cb249d1f100002e615',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/sql', 'install_path' => __DIR__ . '/../ipl/sql',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/stdlib' => array( 'ipl/stdlib' => array(
'pretty_version' => 'v0.14.0', 'pretty_version' => 'dev-main',
'version' => '0.14.0.0', 'version' => 'dev-main',
'reference' => 'bf5fc8f40b86bd90337db6f3be389be2a93fa64a', 'reference' => 'dca0319664db9b575254215b3f5dbbd87a3387bd',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/stdlib', 'install_path' => __DIR__ . '/../ipl/stdlib',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/validator' => array( 'ipl/validator' => array(
'pretty_version' => 'v0.5.0', 'pretty_version' => 'dev-main',
'version' => '0.5.0.0', 'version' => 'dev-main',
'reference' => 'a601fae0ed330e63cea50e4a2a6659ca1ad97bde', 'reference' => 'eac5c6c114d8007db5c24ae159fe6f55e89a946b',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/validator', 'install_path' => __DIR__ . '/../ipl/validator',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ipl/web' => array( 'ipl/web' => array(
'pretty_version' => 'v0.11.1', 'pretty_version' => 'dev-main',
'version' => '0.11.1.0', 'version' => 'dev-main',
'reference' => 'af3a8a7be5e924f0ad841baf1471d296329aa1e7', 'reference' => 'af3a8a7be5e924f0ad841baf1471d296329aa1e7',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../ipl/web', 'install_path' => __DIR__ . '/../ipl/web',
'aliases' => array(), 'aliases' => array(
0 => '99.x-dev',
1 => '9999999-dev',
),
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'mtdowling/cron-expression' => array( 'mtdowling/cron-expression' => array(

View File

@ -19,8 +19,7 @@ if ($issues) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
} }
} }
trigger_error( throw new \RuntimeException(
'Composer detected issues in your platform: ' . implode(' ', $issues), 'Composer detected issues in your platform: ' . implode(' ', $issues)
E_USER_ERROR
); );
} }

View File

@ -13,4 +13,53 @@ class TestConnection extends Connection
{ {
$this->adapter = new TestAdapter(); $this->adapter = new TestAdapter();
} }
public function connect()
{
return $this;
}
public function beginTransaction()
{
throw new \LogicException('Transactions are not supported by the test connection');
}
public function commitTransaction()
{
throw new \LogicException('Transactions are not supported by the test connection');
}
public function rollbackTransaction()
{
throw new \LogicException('Transactions are not supported by the test connection');
}
public function prepexec($stmt, $values = null)
{
if (PHP_MAJOR_VERSION >= 8) {
return new class extends \PDOStatement {
public function getIterator(): \Iterator
{
return new \ArrayIterator([]);
}
public function setFetchMode($mode, ...$args): bool
{
return true;
}
};
} else {
return new class extends \PDOStatement {
public function getIterator(): \Iterator
{
return new \ArrayIterator([]);
}
public function setFetchMode($mode, $params = null): bool
{
return true;
}
};
}
}
} }

View File

@ -10,7 +10,7 @@
"ext-openssl": "*", "ext-openssl": "*",
"ipl/stdlib": ">=0.12.0", "ipl/stdlib": ">=0.12.0",
"ipl/i18n": ">=0.2.0", "ipl/i18n": ">=0.2.0",
"psr/http-message": "~1.0" "psr/http-message": "^1.1"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -23,6 +23,8 @@
} }
}, },
"require-dev": { "require-dev": {
"guzzlehttp/psr7": "^1" "guzzlehttp/psr7": "^1",
"ipl/stdlib": "dev-main",
"ipl/i18n": "dev-main"
} }
} }

View File

@ -12,10 +12,10 @@ class BetweenValidator extends BaseValidator
{ {
use Translation; use Translation;
/** @var mixed Min value */ /** @var int|float Min value */
protected $min; protected $min;
/** @var mixed Max value */ /** @var int|float Max value */
protected $max; protected $max;
/** /**
@ -33,14 +33,14 @@ class BetweenValidator extends BaseValidator
* *
* Required options: * Required options:
* *
* - min: (scalar) Minimum border * - min: (int|float) Minimum border
* - max: (scalar) Maximum border * - max: (int|float) Maximum border
* *
* Optional options: * Optional options:
* *
* - inclusive: (bool) Whether inclusive border values, default true * - inclusive: (bool) Whether inclusive border values, default true
* *
* @param array $options * @param array{min: int|float, max: int|float, inclusive?: bool} $options
* *
* @throws Exception When required option is missing * @throws Exception When required option is missing
*/ */
@ -58,7 +58,7 @@ class BetweenValidator extends BaseValidator
/** /**
* Return the min option * Return the min option
* *
* @return mixed * @return int|float
*/ */
public function getMin() public function getMin()
{ {
@ -68,7 +68,7 @@ class BetweenValidator extends BaseValidator
/** /**
* Set the min option * Set the min option
* *
* @param mixed $min * @param int|float $min
* *
* @return $this * @return $this
*/ */
@ -82,7 +82,7 @@ class BetweenValidator extends BaseValidator
/** /**
* Return the max option * Return the max option
* *
* @return mixed * @return int|float
*/ */
public function getMax() public function getMax()
{ {
@ -92,7 +92,7 @@ class BetweenValidator extends BaseValidator
/** /**
* Set the max option * Set the max option
* *
* @param mixed $max * @param int|float $max
* *
* @return $this * @return $this
*/ */
@ -120,14 +120,19 @@ class BetweenValidator extends BaseValidator
* *
* @return $this * @return $this
*/ */
public function setInclusive($inclusive = true): self public function setInclusive(bool $inclusive = true): self
{ {
$this->inclusive = (bool) $inclusive; $this->inclusive = $inclusive;
return $this; return $this;
} }
public function isValid($value) /**
* @param int|float $value
*
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -35,7 +35,7 @@ class CallbackValidator extends BaseValidator
$this->callback = $callback; $this->callback = $callback;
} }
public function isValid($value) public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -12,6 +12,10 @@ class CidrValidator extends BaseValidator
{ {
use Translation; use Translation;
/**
* @param string $value
* @return bool
*/
public function isValid($value): bool public function isValid($value): bool
{ {
$this->clearMessages(); $this->clearMessages();

View File

@ -23,9 +23,9 @@ class DateTimeValidator extends BaseValidator
* *
* @param bool $local * @param bool $local
*/ */
public function __construct($local = true) public function __construct(bool $local = true)
{ {
$this->local = (bool) $local; $this->local = $local;
} }
/** /**
@ -35,7 +35,7 @@ class DateTimeValidator extends BaseValidator
* *
* @return bool * @return bool
*/ */
public function isValid($value) public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -15,7 +15,7 @@ class DeferredInArrayValidator extends InArrayValidator
* *
* **Required parameter:** * **Required parameter:**
* *
* - `callback`: (`callable`) The callback to create haystack * - `callback`: (`callable`) The callback to create the haystack
* *
* **Optional parameter:** * **Optional parameter:**
* *
@ -23,8 +23,8 @@ class DeferredInArrayValidator extends InArrayValidator
* *
* * `strict`: (`bool`) Whether the types of the needle in the haystack should also match, default `false` * * `strict`: (`bool`) Whether the types of the needle in the haystack should also match, default `false`
* *
* @param callable $callback Validation callback * @param callable $callback The callback to create the haystack
* @param array $options * @param array{haystack?: mixed[], strict?: bool} $options
*/ */
public function __construct(callable $callback, array $options = []) public function __construct(callable $callback, array $options = [])
{ {

View File

@ -40,7 +40,7 @@ class EmailAddressValidator extends BaseValidator
* 'mx' => If an MX check should be enabled, boolean * 'mx' => If an MX check should be enabled, boolean
* 'deep' => If a deep MX check should be enabled, boolean * 'deep' => If a deep MX check should be enabled, boolean
* *
* @param array $options * @param array{max?: bool, deep?: bool} $options
* *
* @throws Exception * @throws Exception
*/ */
@ -266,7 +266,8 @@ class EmailAddressValidator extends BaseValidator
//decode IDN domain name //decode IDN domain name
$decodedHostname = idn_to_ascii($hostname, 0, INTL_IDNA_VARIANT_UTS46); $decodedHostname = idn_to_ascii($hostname, 0, INTL_IDNA_VARIANT_UTS46);
$result = getmxrr($decodedHostname, $mxHosts); $result = $decodedHostname && getmxrr($decodedHostname, $mxHosts);
if (! $result) { if (! $result) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate("'%s' does not appear to have a valid MX record for the email address '%s'"), $this->translate("'%s' does not appear to have a valid MX record for the email address '%s'"),

View File

@ -34,6 +34,8 @@ class FileValidator extends BaseValidator
* - maxSize: (int) Maximum allowed file size, by default no limit * - maxSize: (int) Maximum allowed file size, by default no limit
* - maxFileNameLength: (int) Maximum allowed file name length, by default no limit * - maxFileNameLength: (int) Maximum allowed file name length, by default no limit
* - mimeType: (array) Allowed mime types, by default no restriction * - mimeType: (array) Allowed mime types, by default no restriction
*
* @param array{minSize?: int, maxSize?: int, maxFileNameLength?: int, mimeType?: string[]} $options
*/ */
public function __construct(array $options = []) public function __construct(array $options = [])
{ {
@ -160,7 +162,11 @@ class FileValidator extends BaseValidator
return $this; return $this;
} }
public function isValid($value) /**
* @param UploadedFileInterface|UploadedFileInterface[] $value
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();
@ -185,7 +191,7 @@ class FileValidator extends BaseValidator
if ($this->getMaxSize() && $file->getSize() > $this->getMaxSize()) { if ($this->getMaxSize() && $file->getSize() > $this->getMaxSize()) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate('File %s is bigger than the allowed maximum size of %d'), $this->translate('File %s is bigger than the allowed maximum size of %d'),
$file->getClientFileName(), $file->getClientFilename(),
$this->getMaxSize() $this->getMaxSize()
)); ));
@ -195,7 +201,7 @@ class FileValidator extends BaseValidator
if ($this->getMinSize() && $file->getSize() < $this->getMinSize()) { if ($this->getMinSize() && $file->getSize() < $this->getMinSize()) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate('File %s is smaller than the minimum required size of %d'), $this->translate('File %s is smaller than the minimum required size of %d'),
$file->getClientFileName(), $file->getClientFilename(),
$this->getMinSize() $this->getMinSize()
)); ));
@ -205,7 +211,7 @@ class FileValidator extends BaseValidator
if ($this->getMaxFileNameLength()) { if ($this->getMaxFileNameLength()) {
$strValidator = new StringLengthValidator(['max' => $this->getMaxFileNameLength()]); $strValidator = new StringLengthValidator(['max' => $this->getMaxFileNameLength()]);
if (! $strValidator->isValid($file->getClientFilename())) { if (! $strValidator->isValid($file->getClientFilename() ?? '')) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate('File name is longer than the allowed length of %d characters.'), $this->translate('File name is longer than the allowed length of %d characters.'),
$this->maxFileNameLength $this->maxFileNameLength
@ -217,26 +223,29 @@ class FileValidator extends BaseValidator
if (! empty($this->getAllowedMimeTypes())) { if (! empty($this->getAllowedMimeTypes())) {
$hasAllowedMimeType = false; $hasAllowedMimeType = false;
foreach ($this->getAllowedMimeTypes() as $type) { $fileMimetype = $file->getClientMediaType();
$fileMimetype = $file->getClientMediaType();
if (($pos = strpos($type, '/*')) !== false) { // image/* if ($fileMimetype) {
$typePrefix = substr($type, 0, $pos); foreach ($this->getAllowedMimeTypes() as $type) {
if (Str::startsWith($fileMimetype, $typePrefix)) { if (($pos = strpos($type, '/*')) !== false) { // image/*
$typePrefix = substr($type, 0, $pos);
if (Str::startsWith($fileMimetype, $typePrefix)) {
$hasAllowedMimeType = true;
break;
}
} elseif ($fileMimetype === $type) { // image/png
$hasAllowedMimeType = true; $hasAllowedMimeType = true;
break; break;
} }
} elseif ($fileMimetype === $type) { // image/png
$hasAllowedMimeType = true;
break;
} }
} }
if (! $hasAllowedMimeType) { if (! $hasAllowedMimeType) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate('File %s is of type %s. Only %s allowed.'), $this->translate('File %s is of type %s. Only %s allowed.'),
$file->getClientFileName(), $file->getClientFilename(),
$file->getClientMediaType(), $file->getClientMediaType(),
implode(', ', $this->allowedMimeTypes) implode(', ', $this->allowedMimeTypes ?? [])
)); ));
$isValid = false; $isValid = false;

View File

@ -11,14 +11,16 @@ class GreaterThanValidator extends BaseValidator
{ {
use Translation; use Translation;
/** @var mixed Comparison value for greater than */ /** @var int|float Comparison value for greater than */
protected $min; protected $min;
/** /**
* Create a new GreaterThanValidator * Create a new GreaterThanValidator
* *
* Optional options: * Optional options:
* - min: (scalar) Comparison value for greater than, default 0 * - min: (int|float) Comparison value for greater than, default 0
*
* @param array{min?: int|float} $options
*/ */
public function __construct(array $options = []) public function __construct(array $options = [])
{ {
@ -28,7 +30,7 @@ class GreaterThanValidator extends BaseValidator
/** /**
* Get the min option * Get the min option
* *
* @return mixed * @return int|float
*/ */
public function getMin() public function getMin()
{ {
@ -38,7 +40,7 @@ class GreaterThanValidator extends BaseValidator
/** /**
* Set the min option * Set the min option
* *
* @param mixed $min * @param int|float $min
* *
* @return $this * @return $this
*/ */
@ -49,7 +51,12 @@ class GreaterThanValidator extends BaseValidator
return $this; return $this;
} }
public function isValid($value) /**
* @param int|float $value
*
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -18,7 +18,7 @@ class HostnameValidator extends BaseValidator
* *
* @return boolean * @return boolean
*/ */
public function isValid($value) public function isValid($value): bool
{ {
$this->clearMessages(); $this->clearMessages();
@ -26,7 +26,7 @@ class HostnameValidator extends BaseValidator
if (filter_var($asciiHostname, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) === false) { if (filter_var($asciiHostname, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) === false) {
$this->addMessage(sprintf( $this->addMessage(sprintf(
$this->translate("%s is not a valid host name."), $this->translate("%s is not a valid host name."),
$value ?? '' $value
)); ));
return false; return false;

View File

@ -11,7 +11,7 @@ class InArrayValidator extends BaseValidator
{ {
use Translation; use Translation;
/** @var array The array */ /** @var ?mixed[] The array */
protected $haystack; protected $haystack;
/** @var bool Whether the types of the needle in the haystack should also match */ /** @var bool Whether the types of the needle in the haystack should also match */
@ -25,7 +25,7 @@ class InArrayValidator extends BaseValidator
* * `haystack`: (`array`) The array * * `haystack`: (`array`) The array
* * `strict`: (`bool`) Whether the types of the needle in the haystack should also match, default `false` * * `strict`: (`bool`) Whether the types of the needle in the haystack should also match, default `false`
* *
* @param array $options * @param array{haystack?: mixed[], strict?: bool} $options
*/ */
public function __construct(array $options = []) public function __construct(array $options = [])
{ {
@ -39,7 +39,7 @@ class InArrayValidator extends BaseValidator
/** /**
* Get the haystack * Get the haystack
* *
* @return array * @return mixed[]
*/ */
public function getHaystack(): array public function getHaystack(): array
{ {
@ -49,7 +49,7 @@ class InArrayValidator extends BaseValidator
/** /**
* Set the haystack * Set the haystack
* *
* @param array $haystack * @param mixed[] $haystack
* *
* @return $this * @return $this
*/ */
@ -84,7 +84,7 @@ class InArrayValidator extends BaseValidator
return $this; return $this;
} }
public function isValid($value) public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();
@ -110,9 +110,9 @@ class InArrayValidator extends BaseValidator
/** /**
* Get the values from the specified array that are not present in the haystack * Get the values from the specified array that are not present in the haystack
* *
* @param array $values * @param mixed[] $values
* *
* @return array Values not found in the haystack * @return mixed[] Values not found in the haystack
*/ */
protected function findInvalid(array $values = []): array protected function findInvalid(array $values = []): array
{ {

View File

@ -11,14 +11,16 @@ class LessThanValidator extends BaseValidator
{ {
use Translation; use Translation;
/** @var mixed Comparison value for less than */ /** @var int|float Comparison value for less than */
protected $max; protected $max;
/** /**
* Create a new LessThanValidator * Create a new LessThanValidator
* *
* Optional options: * Optional options:
* - max: (int) Comparison value for less than, default 0 * - max: (int|float) Comparison value for less than, default 0
*
* @param array{max?: int|float} $options
*/ */
public function __construct(array $options = []) public function __construct(array $options = [])
{ {
@ -28,7 +30,7 @@ class LessThanValidator extends BaseValidator
/** /**
* Get the max option * Get the max option
* *
* @return mixed * @return int|float
*/ */
public function getMax() public function getMax()
{ {
@ -38,7 +40,7 @@ class LessThanValidator extends BaseValidator
/** /**
* Set the max option * Set the max option
* *
* @param mixed $max * @param int|float $max
* *
* @return $this * @return $this
*/ */
@ -49,7 +51,12 @@ class LessThanValidator extends BaseValidator
return $this; return $this;
} }
public function isValid($value) /**
* @param int|float $value
*
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -11,7 +11,12 @@ class PrivateKeyValidator extends BaseValidator
{ {
use Translation; use Translation;
public function isValid($value) /**
* @param string $value
*
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -13,10 +13,10 @@ class StringLengthValidator extends BaseValidator
{ {
use Translation; use Translation;
/** @var mixed Minimum required length */ /** @var int Minimum required length */
protected $min; protected $min;
/** @var mixed Maximum required length */ /** @var ?int Maximum required length */
protected $max; protected $max;
/** @var ?string Encoding to use */ /** @var ?string Encoding to use */
@ -26,9 +26,11 @@ class StringLengthValidator extends BaseValidator
* Create a new StringLengthValidator * Create a new StringLengthValidator
* *
* Optional options: * Optional options:
* - min: (scalar) Minimum required string length, default 0 * - min: (int) Minimum required string length, default 0
* - max: (scalar) Maximum required string length, default null * - max: (int) Maximum required string length, default none
* - encoding: (string) Encoding type, default null * - encoding: (string) Encoding type, default none
*
* @param array{min?: int, max?: int, encoding?: string} $options
*/ */
public function __construct(array $options = []) public function __construct(array $options = [])
{ {
@ -41,9 +43,9 @@ class StringLengthValidator extends BaseValidator
/** /**
* Get the minimum required string length * Get the minimum required string length
* *
* @return mixed * @return int
*/ */
public function getMin() public function getMin(): int
{ {
return $this->min; return $this->min;
} }
@ -51,13 +53,13 @@ class StringLengthValidator extends BaseValidator
/** /**
* Set the minimum required string length * Set the minimum required string length
* *
* @param mixed $min * @param int $min
* *
* @return $this * @return $this
* *
* @throws LogicException When the $min is greater than the $max value * @throws LogicException When the $min is greater than the $max value
*/ */
public function setMin($min): self public function setMin(int $min): self
{ {
if ($this->getMax() !== null && $min > $this->getMax()) { if ($this->getMax() !== null && $min > $this->getMax()) {
throw new LogicException( throw new LogicException(
@ -77,9 +79,9 @@ class StringLengthValidator extends BaseValidator
/** /**
* Get the maximum required string length * Get the maximum required string length
* *
* @return mixed * @return ?int
*/ */
public function getMax() public function getMax(): ?int
{ {
return $this->max; return $this->max;
} }
@ -87,13 +89,13 @@ class StringLengthValidator extends BaseValidator
/** /**
* Set the minimum required string length * Set the minimum required string length
* *
* @param mixed $max * @param ?int $max
* *
* @return $this * @return $this
* *
* @throws LogicException When the $min is greater than the $max value * @throws LogicException When the $min is greater than the $max value
*/ */
public function setMax($max): self public function setMax(?int $max): self
{ {
if ($max !== null && $this->getMin() > $max) { if ($max !== null && $this->getMin() > $max) {
throw new LogicException( throw new LogicException(
@ -143,7 +145,12 @@ class StringLengthValidator extends BaseValidator
return $this; return $this;
} }
public function isValid($value) /**
* @param string $value
*
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();

View File

@ -15,6 +15,7 @@ use UnexpectedValueException;
use function ipl\Stdlib\get_php_type; use function ipl\Stdlib\get_php_type;
/** @implements IteratorAggregate<int, Validator> */
class ValidatorChain implements Countable, IteratorAggregate, Validator class ValidatorChain implements Countable, IteratorAggregate, Validator
{ {
use Messages; use Messages;
@ -23,10 +24,10 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
/** Default priority at which validators are added */ /** Default priority at which validators are added */
const DEFAULT_PRIORITY = 1; const DEFAULT_PRIORITY = 1;
/** @var PriorityQueue Validator chain */ /** @var PriorityQueue<int, Validator> Validator chain */
protected $validators; protected $validators;
/** @var SplObjectStorage Validators that break the chain on failure */ /** @var SplObjectStorage<Validator, null> Validators that break the chain on failure */
protected $validatorsThatBreakTheChain; protected $validatorsThatBreakTheChain;
/** /**
@ -43,7 +44,7 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
/** /**
* Get the validators that break the chain * Get the validators that break the chain
* *
* @return SplObjectStorage * @return SplObjectStorage<Validator, null>
*/ */
public function getValidatorsThatBreakTheChain() public function getValidatorsThatBreakTheChain()
{ {
@ -76,7 +77,7 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
/** /**
* Add the validators from the given validator specification to the chain * Add the validators from the given validator specification to the chain
* *
* @param iterable $validators * @param static|Traversable<int|string, mixed> $validators
* *
* @return $this * @return $this
* *
@ -149,7 +150,7 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
* *
* @return $this * @return $this
*/ */
public function addValidatorLoader($namespace, $postfix = null) public function addValidatorLoader($namespace, $postfix = '')
{ {
$this->addPluginLoader('validator', $namespace, $postfix); $this->addPluginLoader('validator', $namespace, $postfix);
@ -221,6 +222,10 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
{ {
$validatorsThatBreakTheChain = $validatorChain->getValidatorsThatBreakTheChain(); $validatorsThatBreakTheChain = $validatorChain->getValidatorsThatBreakTheChain();
/**
* @var int $priority
* @var Validator $validator
*/
foreach ($validatorChain->validators->yieldAll() as $priority => $validator) { foreach ($validatorChain->validators->yieldAll() as $priority => $validator) {
$this->add($validator, $validatorsThatBreakTheChain->contains($validator), $priority); $this->add($validator, $validatorsThatBreakTheChain->contains($validator), $priority);
} }
@ -236,11 +241,14 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
/** /**
* Export the chain as array * Export the chain as array
* *
* @return array * @return Validator[]
*/ */
public function toArray() public function toArray()
{ {
return array_values(iterator_to_array($this)); /** @var Validator[] $validators */
$validators = iterator_to_array($this);
return array_values($validators);
} }
public function count(): int public function count(): int
@ -251,7 +259,7 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
/** /**
* Get an iterator for traversing the validators * Get an iterator for traversing the validators
* *
* @return Validator[]|PriorityQueue * @return PriorityQueue<int, Validator>
*/ */
public function getIterator(): Traversable public function getIterator(): Traversable
{ {
@ -259,7 +267,7 @@ class ValidatorChain implements Countable, IteratorAggregate, Validator
return clone $this->validators; return clone $this->validators;
} }
public function isValid($value) public function isValid($value): bool
{ {
$this->clearMessages(); $this->clearMessages();

View File

@ -11,7 +11,11 @@ class X509CertValidator extends BaseValidator
{ {
use Translation; use Translation;
public function isValid($value) /**
* @param String $value
* @return bool
*/
public function isValid($value): bool
{ {
// Multiple isValid() calls must not stack validation messages // Multiple isValid() calls must not stack validation messages
$this->clearMessages(); $this->clearMessages();