diff --git a/app/composer.json b/app/composer.json
index f229bdbf8..62ffda130 100644
--- a/app/composer.json
+++ b/app/composer.json
@@ -7,24 +7,24 @@
"require": {
"php": ">=7.3",
"adodb/adodb-php": "^5.21",
- "cakephp/cakephp": "4.2.x",
- "cakephp/migrations": "^3.0",
+ "cakephp/cakephp": "^4.3",
+ "cakephp/migrations": "^3.2",
"cakephp/plugin-installer": "^1.3",
"doctrine/dbal": "^3.1",
"mobiledetect/mobiledetectlib": "^2.8"
},
"require-dev": {
- "cakephp/bake": "^2.3",
- "cakephp/cakephp-codesniffer": "~4.2.0",
- "cakephp/debug_kit": "^4.4",
+ "cakephp/bake": "^2.6",
+ "cakephp/repl": "^0.1",
+ "cakephp/cakephp-codesniffer": "^4.5",
+ "cakephp/debug_kit": "^4.5",
"josegonzalez/dotenv": "^3.2",
"phpstan/phpstan": "^0.12.99",
- "phpunit/phpunit": "~8.5.0 || ^9.3",
- "psy/psysh": "@stable"
+ "phpunit/phpunit": "~8.5.0 || ^9.3"
},
"suggest": {
"markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
- "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility.",
+ "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan/Psalm compatibility.",
"phpstan/phpstan": "PHPStan focuses on finding errors in your code without actually running it. It catches whole classes of bugs even before you write tests for the code."
},
"autoload": {
@@ -47,7 +47,7 @@
],
"cs-check": "phpcs --colors -p src/ tests/",
"cs-fix": "phpcbf --colors -p src/ tests/",
- "stan": "phpstan analyse src/",
+ "stan": "phpstan analyse",
"test": "phpunit --colors=always"
},
"prefer-stable": true,
diff --git a/app/composer.lock b/app/composer.lock
index 1f282961d..94b95ca97 100644
--- a/app/composer.lock
+++ b/app/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": "d6f8816fb1bdfe3edbc0bf4f1381a6c3",
+ "content-hash": "d1395ed21065ed1fe78848514350d15e",
"packages": [
{
"name": "adodb/adodb-php",
@@ -69,27 +69,27 @@
},
{
"name": "cakephp/cakephp",
- "version": "4.2.10",
+ "version": "4.3.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp.git",
- "reference": "ea47e927083e2f4bfaed0c404756d9852b617cad"
+ "reference": "fc71c2d7e1bda979da41ed1dea726d6e04240d3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp/zipball/ea47e927083e2f4bfaed0c404756d9852b617cad",
- "reference": "ea47e927083e2f4bfaed0c404756d9852b617cad",
+ "url": "https://api.github.com/repos/cakephp/cakephp/zipball/fc71c2d7e1bda979da41ed1dea726d6e04240d3b",
+ "reference": "fc71c2d7e1bda979da41ed1dea726d6e04240d3b",
"shasum": ""
},
"require": {
- "cakephp/chronos": "^2.0",
+ "cakephp/chronos": "^2.2",
"composer/ca-bundle": "^1.2",
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"laminas/laminas-diactoros": "^2.2.2",
"laminas/laminas-httphandlerrunner": "^1.1",
- "league/container": "^3.2",
+ "league/container": "^4.1.1",
"php": ">=7.2.0",
"psr/http-client": "^1.0",
"psr/http-server-handler": "^1.0",
@@ -115,8 +115,8 @@
"cakephp/validation": "self.version"
},
"require-dev": {
- "cakephp/cakephp-codesniffer": "^4.0",
- "mikey179/vfsstream": "^1.6",
+ "cakephp/cakephp-codesniffer": "^4.5",
+ "mikey179/vfsstream": "^1.6.10",
"paragonie/csp-builder": "^2.3",
"phpunit/phpunit": "^8.5 || ^9.3"
},
@@ -168,20 +168,20 @@
"issues": "https://github.com/cakephp/cakephp/issues",
"source": "https://github.com/cakephp/cakephp"
},
- "time": "2021-10-14T01:50:57+00:00"
+ "time": "2021-10-24T01:34:13+00:00"
},
{
"name": "cakephp/chronos",
- "version": "2.2.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/chronos.git",
- "reference": "556e14da67307ffc2e68beeb7df0694dc8d1207d"
+ "reference": "3ecd6e7ae191c676570cd1bed51fd561de4606dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/chronos/zipball/556e14da67307ffc2e68beeb7df0694dc8d1207d",
- "reference": "556e14da67307ffc2e68beeb7df0694dc8d1207d",
+ "url": "https://api.github.com/repos/cakephp/chronos/zipball/3ecd6e7ae191c676570cd1bed51fd561de4606dd",
+ "reference": "3ecd6e7ae191c676570cd1bed51fd561de4606dd",
"shasum": ""
},
"require": {
@@ -227,32 +227,32 @@
"issues": "https://github.com/cakephp/chronos/issues",
"source": "https://github.com/cakephp/chronos"
},
- "time": "2021-06-17T13:49:10+00:00"
+ "time": "2021-10-17T02:44:05+00:00"
},
{
"name": "cakephp/migrations",
- "version": "3.1.0",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/migrations.git",
- "reference": "d22737c31243db89774abfe6a077d254c0eae75a"
+ "reference": "3da702e619880ade5a50313f9dcf65c968b65363"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/migrations/zipball/d22737c31243db89774abfe6a077d254c0eae75a",
- "reference": "d22737c31243db89774abfe6a077d254c0eae75a",
+ "url": "https://api.github.com/repos/cakephp/migrations/zipball/3da702e619880ade5a50313f9dcf65c968b65363",
+ "reference": "3da702e619880ade5a50313f9dcf65c968b65363",
"shasum": ""
},
"require": {
- "cakephp/cache": "^4.0.5",
- "cakephp/orm": "^4.0.5",
+ "cakephp/cache": "^4.3.0",
+ "cakephp/orm": "^4.3.0",
"php": ">=7.2.0",
"robmorgan/phinx": "^0.12"
},
"require-dev": {
- "cakephp/bake": "^2.1.0",
- "cakephp/cakephp": "^4.0.5",
- "cakephp/cakephp-codesniffer": "~4.1.0",
+ "cakephp/bake": "^2.5.0",
+ "cakephp/cakephp": "^4.3.0",
+ "cakephp/cakephp-codesniffer": "~4.1",
"phpunit/phpunit": "~8.5.0"
},
"suggest": {
@@ -287,7 +287,7 @@
"issues": "https://github.com/cakephp/migrations/issues",
"source": "https://github.com/cakephp/migrations"
},
- "time": "2021-05-20T13:57:37+00:00"
+ "time": "2021-10-24T01:49:12+00:00"
},
{
"name": "cakephp/plugin-installer",
@@ -1066,21 +1066,21 @@
},
{
"name": "league/container",
- "version": "3.4.1",
+ "version": "4.1.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/container.git",
- "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd"
+ "reference": "82a57588c630663d2600f046753b23ab6dcda9b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/container/zipball/84ecbc2dbecc31bd23faf759a0e329ee49abddbd",
- "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd",
+ "url": "https://api.github.com/repos/thephpleague/container/zipball/82a57588c630663d2600f046753b23ab6dcda9b5",
+ "reference": "82a57588c630663d2600f046753b23ab6dcda9b5",
"shasum": ""
},
"require": {
- "php": "^7.0 || ^8.0",
- "psr/container": "^1.0.0"
+ "php": "^7.2 || ^8.0",
+ "psr/container": "^2.0.0"
},
"provide": {
"psr/container-implementation": "^1.0"
@@ -1089,15 +1089,19 @@
"orno/di": "~2.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.0 || ^7.0",
+ "nette/php-generator": "^3.4",
+ "nikic/php-parser": "^4.10",
+ "phpstan/phpstan": "^0.12.47",
+ "phpunit/phpunit": "^8.5.17",
"roave/security-advisories": "dev-latest",
"scrutinizer/ocular": "^1.8",
- "squizlabs/php_codesniffer": "^3.5"
+ "squizlabs/php_codesniffer": "^3.6"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.x-dev",
+ "dev-master": "4.x-dev",
+ "dev-4.x": "4.x-dev",
"dev-3.x": "3.x-dev",
"dev-2.x": "2.x-dev",
"dev-1.x": "1.x-dev"
@@ -1115,8 +1119,7 @@
"authors": [
{
"name": "Phil Bennett",
- "email": "philipobenito@gmail.com",
- "homepage": "http://www.philipobenito.com",
+ "email": "mail@philbennett.co.uk",
"role": "Developer"
}
],
@@ -1133,7 +1136,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/container/issues",
- "source": "https://github.com/thephpleague/container/tree/3.4.1"
+ "source": "https://github.com/thephpleague/container/tree/4.1.2"
},
"funding": [
{
@@ -1141,7 +1144,7 @@
"type": "github"
}
],
- "time": "2021-07-09T08:23:52+00:00"
+ "time": "2021-07-26T07:04:36+00:00"
},
{
"name": "mobiledetect/mobiledetectlib",
@@ -1207,22 +1210,27 @@
},
{
"name": "psr/container",
- "version": "1.1.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef",
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef",
"shasum": ""
},
"require": {
"php": ">=7.2.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@@ -1249,9 +1257,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.1"
+ "source": "https://github.com/php-fig/container/tree/2.0.1"
},
- "time": "2021-03-05T17:36:06+00:00"
+ "time": "2021-03-24T13:40:57+00:00"
},
{
"name": "psr/http-client",
@@ -2589,33 +2597,29 @@
},
{
"name": "symfony/service-contracts",
- "version": "v2.4.0",
+ "version": "v1.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1"
+ "php": "^7.1.3"
},
"suggest": {
+ "psr/container": "",
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "1.1-dev"
}
},
"autoload": {
@@ -2648,23 +2652,9 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-01T10:43:52+00:00"
+ "time": "2019-05-28T07:50:59+00:00"
},
{
"name": "symfony/string",
@@ -2796,21 +2786,21 @@
},
{
"name": "cakephp/bake",
- "version": "2.5.2",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/bake.git",
- "reference": "bfb856afcfbc70c5cf5341669c3036a45ca15d94"
+ "reference": "793ab54ad56f505284eafd30fcffe26835f74b8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/bake/zipball/bfb856afcfbc70c5cf5341669c3036a45ca15d94",
- "reference": "bfb856afcfbc70c5cf5341669c3036a45ca15d94",
+ "url": "https://api.github.com/repos/cakephp/bake/zipball/793ab54ad56f505284eafd30fcffe26835f74b8e",
+ "reference": "793ab54ad56f505284eafd30fcffe26835f74b8e",
"shasum": ""
},
"require": {
"brick/varexporter": "^0.3.5",
- "cakephp/cakephp": "^4.1",
+ "cakephp/cakephp": "^4.3.0",
"cakephp/twig-view": "^1.0.2",
"php": ">=7.2"
},
@@ -2818,7 +2808,7 @@
"cakephp/cakephp-codesniffer": "^4.0",
"cakephp/debug_kit": "^4.1",
"cakephp/plugin-installer": "^1.3",
- "phpunit/phpunit": "~8.5.0"
+ "phpunit/phpunit": "^8.5 || ^9.3"
},
"type": "cakephp-plugin",
"autoload": {
@@ -2848,26 +2838,26 @@
"issues": "https://github.com/cakephp/bake/issues",
"source": "https://github.com/cakephp/bake"
},
- "time": "2021-07-26T14:56:18+00:00"
+ "time": "2021-10-24T01:39:19+00:00"
},
{
"name": "cakephp/cakephp-codesniffer",
- "version": "4.2.4",
+ "version": "4.5.1",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp-codesniffer.git",
- "reference": "c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475"
+ "reference": "6b17905db024b8d7e64a15296688545c61ab6694"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475",
- "reference": "c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475",
+ "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/6b17905db024b8d7e64a15296688545c61ab6694",
+ "reference": "6b17905db024b8d7e64a15296688545c61ab6694",
"shasum": ""
},
"require": {
"php": ">=7.2.0",
- "slevomat/coding-standard": "^6.3.6",
- "squizlabs/php_codesniffer": "~3.5.5"
+ "slevomat/coding-standard": "^6.3.6 || ^7.0",
+ "squizlabs/php_codesniffer": "^3.6"
},
"require-dev": {
"phpunit/phpunit": "^7.1"
@@ -2900,24 +2890,24 @@
"issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
"source": "https://github.com/cakephp/cakephp-codesniffer"
},
- "time": "2020-12-03T20:39:38+00:00"
+ "time": "2021-07-11T04:47:47+00:00"
},
{
"name": "cakephp/debug_kit",
- "version": "4.4.4",
+ "version": "4.5.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/debug_kit.git",
- "reference": "10d7d9ba36945844211f1d8763e59618917e1784"
+ "reference": "518887795e583796fc7ec5926cb89874416bc97a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/10d7d9ba36945844211f1d8763e59618917e1784",
- "reference": "10d7d9ba36945844211f1d8763e59618917e1784",
+ "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/518887795e583796fc7ec5926cb89874416bc97a",
+ "reference": "518887795e583796fc7ec5926cb89874416bc97a",
"shasum": ""
},
"require": {
- "cakephp/cakephp": "^4.2.0",
+ "cakephp/cakephp": "^4.3.0",
"cakephp/chronos": "^2.0",
"composer/composer": "^1.3 | ^2.0",
"jdorn/sql-formatter": "^1.2",
@@ -2966,7 +2956,64 @@
"issues": "https://github.com/cakephp/debug_kit/issues",
"source": "https://github.com/cakephp/debug_kit"
},
- "time": "2021-09-12T20:06:14+00:00"
+ "time": "2021-10-24T01:45:50+00:00"
+ },
+ {
+ "name": "cakephp/repl",
+ "version": "0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/repl.git",
+ "reference": "6aa25db799a3bd062101b36f42a1ff0995654a56"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/repl/zipball/6aa25db799a3bd062101b36f42a1ff0995654a56",
+ "reference": "6aa25db799a3bd062101b36f42a1ff0995654a56",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^4.0",
+ "php": ">=7.2.0",
+ "psy/psysh": "@stable"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "phpunit/phpunit": "^8.5 || ^9.3"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Repl\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/repl/graphs/contributors"
+ }
+ ],
+ "description": "REPL plugin for CakePHP",
+ "homepage": "https://github.com/cakephp/repl",
+ "keywords": [
+ "REPL",
+ "cakephp"
+ ],
+ "support": {
+ "forum": "https://discourse.cakephp.org/",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/repl/issues",
+ "slack": "https://cakesf.herokuapp.com/",
+ "source": "https://github.com/cakephp/repl/tree/0.1.0"
+ },
+ "time": "2020-11-18T09:26:29+00:00"
},
{
"name": "cakephp/twig-view",
@@ -4148,16 +4195,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.2.2",
+ "version": "5.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
"shasum": ""
},
"require": {
@@ -4168,7 +4215,8 @@
"webmozart/assert": "^1.9.1"
},
"require-dev": {
- "mockery/mockery": "~1.3.2"
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
},
"type": "library",
"extra": {
@@ -4198,9 +4246,9 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
},
- "time": "2020-09-03T19:13:55+00:00"
+ "time": "2021-10-19T17:43:47+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@@ -4321,37 +4369,33 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "0.4.9",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531"
+ "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531",
- "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/dbc093d7af60eff5cd575d2ed761b15ed40bd08e",
+ "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "consistence/coding-standard": "^3.5",
- "ergebnis/composer-normalize": "^2.0.2",
- "jakub-onderka/php-parallel-lint": "^0.9.2",
- "phing/phing": "^2.16.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12.26",
- "phpstan/phpstan-strict-rules": "^0.12",
- "phpunit/phpunit": "^6.3",
- "slevomat/coding-standard": "^4.7.2",
- "symfony/process": "^4.0"
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.4-dev"
+ "dev-master": "1.0-dev"
}
},
"autoload": {
@@ -4368,9 +4412,9 @@
"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/master"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.2.0"
},
- "time": "2020-08-03T20:32:43+00:00"
+ "time": "2021-09-16T20:46:02+00:00"
},
{
"name": "phpstan/phpstan",
@@ -6059,37 +6103,37 @@
},
{
"name": "slevomat/coding-standard",
- "version": "6.4.1",
+ "version": "7.0.16",
"source": {
"type": "git",
"url": "https://github.com/slevomat/coding-standard.git",
- "reference": "696dcca217d0c9da2c40d02731526c1e25b65346"
+ "reference": "14c324b2f2f0072933036c2f3abaeda16a56dcd3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346",
- "reference": "696dcca217d0c9da2c40d02731526c1e25b65346",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/14c324b2f2f0072933036c2f3abaeda16a56dcd3",
+ "reference": "14c324b2f2f0072933036c2f3abaeda16a56dcd3",
"shasum": ""
},
"require": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
"php": "^7.1 || ^8.0",
- "phpstan/phpdoc-parser": "0.4.5 - 0.4.9",
- "squizlabs/php_codesniffer": "^3.5.6"
+ "phpstan/phpdoc-parser": "^1.0.0",
+ "squizlabs/php_codesniffer": "^3.6.1"
},
"require-dev": {
- "phing/phing": "2.16.3",
- "php-parallel-lint/php-parallel-lint": "1.2.0",
- "phpstan/phpstan": "0.12.48",
- "phpstan/phpstan-deprecation-rules": "0.12.5",
- "phpstan/phpstan-phpunit": "0.12.16",
- "phpstan/phpstan-strict-rules": "0.12.5",
- "phpunit/phpunit": "7.5.20|8.5.5|9.4.0"
+ "phing/phing": "2.17.0",
+ "php-parallel-lint/php-parallel-lint": "1.3.1",
+ "phpstan/phpstan": "0.12.99",
+ "phpstan/phpstan-deprecation-rules": "0.12.6",
+ "phpstan/phpstan-phpunit": "0.12.22",
+ "phpstan/phpstan-strict-rules": "0.12.11",
+ "phpunit/phpunit": "7.5.20|8.5.5|9.5.10"
},
"type": "phpcodesniffer-standard",
"extra": {
"branch-alias": {
- "dev-master": "6.x-dev"
+ "dev-master": "7.x-dev"
}
},
"autoload": {
@@ -6104,7 +6148,7 @@
"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/6.4.1"
+ "source": "https://github.com/slevomat/coding-standard/tree/7.0.16"
},
"funding": [
{
@@ -6116,20 +6160,20 @@
"type": "tidelift"
}
],
- "time": "2020-10-05T12:39:37+00:00"
+ "time": "2021-10-22T06:56:51+00:00"
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.5.8",
+ "version": "3.6.1",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "9d583721a7157ee997f235f327de038e7ea6dac4"
+ "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4",
- "reference": "9d583721a7157ee997f235f327de038e7ea6dac4",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e",
+ "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e",
"shasum": ""
},
"require": {
@@ -6172,7 +6216,7 @@
"source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
},
- "time": "2020-10-23T02:01:07+00:00"
+ "time": "2021-10-11T04:00:11+00:00"
},
{
"name": "symfony/finder",
@@ -6646,9 +6690,7 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {
- "psy/psysh": 0
- },
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
diff --git a/app/composer.lock.20211024 b/app/composer.lock.20211024
new file mode 100644
index 000000000..1f282961d
--- /dev/null
+++ b/app/composer.lock.20211024
@@ -0,0 +1,6659 @@
+{
+ "_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": "d6f8816fb1bdfe3edbc0bf4f1381a6c3",
+ "packages": [
+ {
+ "name": "adodb/adodb-php",
+ "version": "v5.21.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ADOdb/ADOdb.git",
+ "reference": "aa161c28dfffcab13a3cb9bd407917573987f0f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ADOdb/ADOdb/zipball/aa161c28dfffcab13a3cb9bd407917573987f0f6",
+ "reference": "aa161c28dfffcab13a3cb9bd407917573987f0f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "adodb.inc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "John Lim",
+ "email": "jlim@natsoft.com",
+ "role": "Author"
+ },
+ {
+ "name": "Damien Regad",
+ "role": "Current maintainer"
+ },
+ {
+ "name": "Mark Newnham",
+ "role": "Developer"
+ }
+ ],
+ "description": "ADOdb is a PHP database abstraction layer library",
+ "homepage": "https://adodb.org/",
+ "keywords": [
+ "abstraction",
+ "database",
+ "layer",
+ "library",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/ADOdb/ADOdb/issues",
+ "source": "https://github.com/ADOdb/ADOdb"
+ },
+ "time": "2021-08-22T10:49:44+00:00"
+ },
+ {
+ "name": "cakephp/cakephp",
+ "version": "4.2.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/cakephp.git",
+ "reference": "ea47e927083e2f4bfaed0c404756d9852b617cad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/cakephp/zipball/ea47e927083e2f4bfaed0c404756d9852b617cad",
+ "reference": "ea47e927083e2f4bfaed0c404756d9852b617cad",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/chronos": "^2.0",
+ "composer/ca-bundle": "^1.2",
+ "ext-intl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "laminas/laminas-diactoros": "^2.2.2",
+ "laminas/laminas-httphandlerrunner": "^1.1",
+ "league/container": "^3.2",
+ "php": ">=7.2.0",
+ "psr/http-client": "^1.0",
+ "psr/http-server-handler": "^1.0",
+ "psr/http-server-middleware": "^1.0",
+ "psr/log": "^1.0.0",
+ "psr/simple-cache": "^1.0.0"
+ },
+ "replace": {
+ "cakephp/cache": "self.version",
+ "cakephp/collection": "self.version",
+ "cakephp/console": "self.version",
+ "cakephp/core": "self.version",
+ "cakephp/database": "self.version",
+ "cakephp/datasource": "self.version",
+ "cakephp/event": "self.version",
+ "cakephp/filesystem": "self.version",
+ "cakephp/form": "self.version",
+ "cakephp/http": "self.version",
+ "cakephp/i18n": "self.version",
+ "cakephp/log": "self.version",
+ "cakephp/orm": "self.version",
+ "cakephp/utility": "self.version",
+ "cakephp/validation": "self.version"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "mikey179/vfsstream": "^1.6",
+ "paragonie/csp-builder": "^2.3",
+ "phpunit/phpunit": "^8.5 || ^9.3"
+ },
+ "suggest": {
+ "ext-curl": "To enable more efficient network calls in Http\\Client.",
+ "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
+ "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()",
+ "paragonie/csp-builder": "CSP builder, to use the CSP Middleware"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\": "src/"
+ },
+ "files": [
+ "src/Core/functions.php",
+ "src/Collection/functions.php",
+ "src/I18n/functions.php",
+ "src/Routing/functions.php",
+ "src/Utility/bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+ }
+ ],
+ "description": "The CakePHP framework",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "conventions over configuration",
+ "dry",
+ "form",
+ "framework",
+ "mvc",
+ "orm",
+ "psr-7",
+ "rapid-development",
+ "validation"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/cakephp"
+ },
+ "time": "2021-10-14T01:50:57+00:00"
+ },
+ {
+ "name": "cakephp/chronos",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/chronos.git",
+ "reference": "556e14da67307ffc2e68beeb7df0694dc8d1207d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/chronos/zipball/556e14da67307ffc2e68beeb7df0694dc8d1207d",
+ "reference": "556e14da67307ffc2e68beeb7df0694dc8d1207d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.5",
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Chronos\\": "src/"
+ },
+ "files": [
+ "src/carbon_compat.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "http://nesbot.com"
+ },
+ {
+ "name": "The CakePHP Team",
+ "homepage": "http://cakephp.org"
+ }
+ ],
+ "description": "A simple API extension for DateTime.",
+ "homepage": "http://cakephp.org",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/chronos/issues",
+ "source": "https://github.com/cakephp/chronos"
+ },
+ "time": "2021-06-17T13:49:10+00:00"
+ },
+ {
+ "name": "cakephp/migrations",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/migrations.git",
+ "reference": "d22737c31243db89774abfe6a077d254c0eae75a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/migrations/zipball/d22737c31243db89774abfe6a077d254c0eae75a",
+ "reference": "d22737c31243db89774abfe6a077d254c0eae75a",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cache": "^4.0.5",
+ "cakephp/orm": "^4.0.5",
+ "php": ">=7.2.0",
+ "robmorgan/phinx": "^0.12"
+ },
+ "require-dev": {
+ "cakephp/bake": "^2.1.0",
+ "cakephp/cakephp": "^4.0.5",
+ "cakephp/cakephp-codesniffer": "~4.1.0",
+ "phpunit/phpunit": "~8.5.0"
+ },
+ "suggest": {
+ "cakephp/bake": "If you want to generate migrations.",
+ "dereuromark/cakephp-ide-helper": "If you want to have IDE suggest/autocomplete when creating migrations."
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Migrations\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/migrations/graphs/contributors"
+ }
+ ],
+ "description": "Database Migration plugin for CakePHP based on Phinx",
+ "homepage": "https://github.com/cakephp/migrations",
+ "keywords": [
+ "cakephp",
+ "migrations"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/migrations/issues",
+ "source": "https://github.com/cakephp/migrations"
+ },
+ "time": "2021-05-20T13:57:37+00:00"
+ },
+ {
+ "name": "cakephp/plugin-installer",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/plugin-installer.git",
+ "reference": "e27027aa2d3d8ab64452c6817629558685a064cb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/e27027aa2d3d8ab64452c6817629558685a064cb",
+ "reference": "e27027aa2d3d8ab64452c6817629558685a064cb",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^3.3",
+ "composer/composer": "^2.0",
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5 || ^9.3"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Cake\\Composer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "Cake\\Composer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://cakephp.org"
+ }
+ ],
+ "description": "A composer installer for CakePHP 3.0+ plugins.",
+ "support": {
+ "issues": "https://github.com/cakephp/plugin-installer/issues",
+ "source": "https://github.com/cakephp/plugin-installer/tree/1.3.1"
+ },
+ "time": "2020-10-29T04:00:42+00:00"
+ },
+ {
+ "name": "composer/ca-bundle",
+ "version": "1.2.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
+ "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "psr/log": "^1.0",
+ "symfony/phpunit-bridge": "^4.2 || ^5",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\CaBundle\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.2.11"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-25T20:32:43+00:00"
+ },
+ {
+ "name": "composer/package-versions-deprecated",
+ "version": "1.11.99.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/package-versions-deprecated.git",
+ "reference": "b174585d1fe49ceed21928a945138948cb394600"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600",
+ "reference": "b174585d1fe49ceed21928a945138948cb394600",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.1.0 || ^2.0",
+ "php": "^7 || ^8"
+ },
+ "replace": {
+ "ocramius/package-versions": "1.11.99"
+ },
+ "require-dev": {
+ "composer/composer": "^1.9.3 || ^2.0@dev",
+ "ext-zip": "^1.13",
+ "phpunit/phpunit": "^6.5 || ^7"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PackageVersions\\Installer",
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PackageVersions\\": "src/PackageVersions"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+ "support": {
+ "issues": "https://github.com/composer/package-versions-deprecated/issues",
+ "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-13T08:41:34+00:00"
+ },
+ {
+ "name": "doctrine/cache",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/cache.git",
+ "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
+ "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/common": ">2.2,<2.4"
+ },
+ "require-dev": {
+ "alcaeus/mongo-php-adapter": "^1.1",
+ "cache/integration-tests": "dev-master",
+ "doctrine/coding-standard": "^8.0",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "predis/predis": "~1.0",
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
+ "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
+ },
+ "suggest": {
+ "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+ "homepage": "https://www.doctrine-project.org/projects/cache.html",
+ "keywords": [
+ "abstraction",
+ "apcu",
+ "cache",
+ "caching",
+ "couchdb",
+ "memcached",
+ "php",
+ "redis",
+ "xcache"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/cache/issues",
+ "source": "https://github.com/doctrine/cache/tree/2.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-17T14:49:29+00:00"
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/96b0053775a544b4a6ab47654dac0621be8b4cf8",
+ "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8",
+ "shasum": ""
+ },
+ "require": {
+ "composer/package-versions-deprecated": "^1.11.99",
+ "doctrine/cache": "^1.0|^2.0",
+ "doctrine/deprecations": "^0.5.3",
+ "doctrine/event-manager": "^1.0",
+ "php": "^7.3 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "9.0.0",
+ "jetbrains/phpstorm-stubs": "2021.1",
+ "phpstan/phpstan": "0.12.99",
+ "phpstan/phpstan-strict-rules": "^0.12.11",
+ "phpunit/phpunit": "9.5.10",
+ "psalm/plugin-phpunit": "0.16.1",
+ "squizlabs/php_codesniffer": "3.6.0",
+ "symfony/cache": "^5.2|^6.0",
+ "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0",
+ "vimeo/psalm": "4.10.0"
+ },
+ "suggest": {
+ "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ },
+ "bin": [
+ "bin/doctrine-dbal"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\DBAL\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
+ "homepage": "https://www.doctrine-project.org/projects/dbal.html",
+ "keywords": [
+ "abstraction",
+ "database",
+ "db2",
+ "dbal",
+ "mariadb",
+ "mssql",
+ "mysql",
+ "oci8",
+ "oracle",
+ "pdo",
+ "pgsql",
+ "postgresql",
+ "queryobject",
+ "sasql",
+ "sql",
+ "sqlite",
+ "sqlserver",
+ "sqlsrv"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/dbal/issues",
+ "source": "https://github.com/doctrine/dbal/tree/3.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-02T16:15:05+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v0.5.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
+ "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0|^7.0|^8.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0",
+ "psr/log": "^1.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
+ },
+ "time": "2021-03-21T12:59:47+00:00"
+ },
+ {
+ "name": "doctrine/event-manager",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/event-manager.git",
+ "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
+ "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/common": "<2.9@dev"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "lib/Doctrine/Common"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ }
+ ],
+ "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
+ "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
+ "keywords": [
+ "event",
+ "event dispatcher",
+ "event manager",
+ "event system",
+ "events"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/event-manager/issues",
+ "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-29T18:28:51+00:00"
+ },
+ {
+ "name": "laminas/laminas-diactoros",
+ "version": "2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laminas/laminas-diactoros.git",
+ "reference": "0c26ef1d95b6d7e6e3943a243ba3dc0797227199"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/0c26ef1d95b6d7e6e3943a243ba3dc0797227199",
+ "reference": "0c26ef1d95b6d7e6e3943a243ba3dc0797227199",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3 || ~8.0.0 || ~8.1.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0"
+ },
+ "conflict": {
+ "phpspec/prophecy": "<1.9.0",
+ "zendframework/zend-diactoros": "*"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "ext-dom": "*",
+ "ext-gd": "*",
+ "ext-libxml": "*",
+ "http-interop/http-factory-tests": "^0.8.0",
+ "laminas/laminas-coding-standard": "~1.0.0",
+ "php-http/psr7-integration-tests": "^1.1",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.1",
+ "psalm/plugin-phpunit": "^0.14.0",
+ "vimeo/psalm": "^4.3"
+ },
+ "type": "library",
+ "extra": {
+ "laminas": {
+ "config-provider": "Laminas\\Diactoros\\ConfigProvider",
+ "module": "Laminas\\Diactoros"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions/create_uploaded_file.php",
+ "src/functions/marshal_headers_from_sapi.php",
+ "src/functions/marshal_method_from_sapi.php",
+ "src/functions/marshal_protocol_version_from_sapi.php",
+ "src/functions/marshal_uri_from_sapi.php",
+ "src/functions/normalize_server.php",
+ "src/functions/normalize_uploaded_files.php",
+ "src/functions/parse_cookie_header.php",
+ "src/functions/create_uploaded_file.legacy.php",
+ "src/functions/marshal_headers_from_sapi.legacy.php",
+ "src/functions/marshal_method_from_sapi.legacy.php",
+ "src/functions/marshal_protocol_version_from_sapi.legacy.php",
+ "src/functions/marshal_uri_from_sapi.legacy.php",
+ "src/functions/normalize_server.legacy.php",
+ "src/functions/normalize_uploaded_files.legacy.php",
+ "src/functions/parse_cookie_header.legacy.php"
+ ],
+ "psr-4": {
+ "Laminas\\Diactoros\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "PSR HTTP Message implementations",
+ "homepage": "https://laminas.dev",
+ "keywords": [
+ "http",
+ "laminas",
+ "psr",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "chat": "https://laminas.dev/chat",
+ "docs": "https://docs.laminas.dev/laminas-diactoros/",
+ "forum": "https://discourse.laminas.dev",
+ "issues": "https://github.com/laminas/laminas-diactoros/issues",
+ "rss": "https://github.com/laminas/laminas-diactoros/releases.atom",
+ "source": "https://github.com/laminas/laminas-diactoros"
+ },
+ "funding": [
+ {
+ "url": "https://funding.communitybridge.org/projects/laminas-project",
+ "type": "community_bridge"
+ }
+ ],
+ "time": "2021-09-22T03:54:36+00:00"
+ },
+ {
+ "name": "laminas/laminas-httphandlerrunner",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laminas/laminas-httphandlerrunner.git",
+ "reference": "5f94e55d93f756e8ad07b9049aeb3d6d84582d0e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/5f94e55d93f756e8ad07b9049aeb3d6d84582d0e",
+ "reference": "5f94e55d93f756e8ad07b9049aeb3d6d84582d0e",
+ "shasum": ""
+ },
+ "require": {
+ "laminas/laminas-zendframework-bridge": "^1.0",
+ "php": "^7.3 || ~8.0.0 || ~8.1.0",
+ "psr/http-message": "^1.0",
+ "psr/http-message-implementation": "^1.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "replace": {
+ "zendframework/zend-httphandlerrunner": "^1.1.0"
+ },
+ "require-dev": {
+ "laminas/laminas-coding-standard": "~1.0.0",
+ "laminas/laminas-diactoros": "^2.8.0",
+ "phpunit/phpunit": "^9.5.9",
+ "psalm/plugin-phpunit": "^0.16.1",
+ "vimeo/psalm": "^4.10.0"
+ },
+ "type": "library",
+ "extra": {
+ "laminas": {
+ "config-provider": "Laminas\\HttpHandlerRunner\\ConfigProvider"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laminas\\HttpHandlerRunner\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Execute PSR-15 RequestHandlerInterface instances and emit responses they generate.",
+ "homepage": "https://laminas.dev",
+ "keywords": [
+ "components",
+ "laminas",
+ "mezzio",
+ "psr-15",
+ "psr-7"
+ ],
+ "support": {
+ "chat": "https://laminas.dev/chat",
+ "docs": "https://docs.laminas.dev/laminas-httphandlerrunner/",
+ "forum": "https://discourse.laminas.dev",
+ "issues": "https://github.com/laminas/laminas-httphandlerrunner/issues",
+ "rss": "https://github.com/laminas/laminas-httphandlerrunner/releases.atom",
+ "source": "https://github.com/laminas/laminas-httphandlerrunner"
+ },
+ "funding": [
+ {
+ "url": "https://funding.communitybridge.org/projects/laminas-project",
+ "type": "community_bridge"
+ }
+ ],
+ "time": "2021-09-22T09:17:54+00:00"
+ },
+ {
+ "name": "laminas/laminas-zendframework-bridge",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
+ "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bf180a382393e7db5c1e8d0f2ec0c4af9c724baf",
+ "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3 || ~8.0.0 || ~8.1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "psalm/plugin-phpunit": "^0.15.1",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.6"
+ },
+ "type": "library",
+ "extra": {
+ "laminas": {
+ "module": "Laminas\\ZendFrameworkBridge"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/autoload.php"
+ ],
+ "psr-4": {
+ "Laminas\\ZendFrameworkBridge\\": "src//"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Alias legacy ZF class names to Laminas Project equivalents.",
+ "keywords": [
+ "ZendFramework",
+ "autoloading",
+ "laminas",
+ "zf"
+ ],
+ "support": {
+ "forum": "https://discourse.laminas.dev/",
+ "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
+ "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
+ "source": "https://github.com/laminas/laminas-zendframework-bridge"
+ },
+ "funding": [
+ {
+ "url": "https://funding.communitybridge.org/projects/laminas-project",
+ "type": "community_bridge"
+ }
+ ],
+ "time": "2021-09-03T17:53:30+00:00"
+ },
+ {
+ "name": "league/container",
+ "version": "3.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/container.git",
+ "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/container/zipball/84ecbc2dbecc31bd23faf759a0e329ee49abddbd",
+ "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/container": "^1.0.0"
+ },
+ "provide": {
+ "psr/container-implementation": "^1.0"
+ },
+ "replace": {
+ "orno/di": "~2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0 || ^7.0",
+ "roave/security-advisories": "dev-latest",
+ "scrutinizer/ocular": "^1.8",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev",
+ "dev-3.x": "3.x-dev",
+ "dev-2.x": "2.x-dev",
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Container\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Phil Bennett",
+ "email": "philipobenito@gmail.com",
+ "homepage": "http://www.philipobenito.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fast and intuitive dependency injection container.",
+ "homepage": "https://github.com/thephpleague/container",
+ "keywords": [
+ "container",
+ "dependency",
+ "di",
+ "injection",
+ "league",
+ "provider",
+ "service"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/container/issues",
+ "source": "https://github.com/thephpleague/container/tree/3.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/philipobenito",
+ "type": "github"
+ }
+ ],
+ "time": "2021-07-09T08:23:52+00:00"
+ },
+ {
+ "name": "mobiledetect/mobiledetectlib",
+ "version": "2.8.37",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/serbanghita/Mobile-Detect.git",
+ "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7",
+ "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8.35||~5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Mobile_Detect.php"
+ ],
+ "psr-0": {
+ "Detection": "namespaced/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Serban Ghita",
+ "email": "serbanghita@gmail.com",
+ "homepage": "http://mobiledetect.net",
+ "role": "Developer"
+ }
+ ],
+ "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+ "homepage": "https://github.com/serbanghita/Mobile-Detect",
+ "keywords": [
+ "detect mobile devices",
+ "mobile",
+ "mobile detect",
+ "mobile detector",
+ "php mobile detect"
+ ],
+ "support": {
+ "issues": "https://github.com/serbanghita/Mobile-Detect/issues",
+ "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.37"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/serbanghita",
+ "type": "github"
+ }
+ ],
+ "time": "2021-02-19T21:22:57+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.1"
+ },
+ "time": "2021-03-05T17:36:06+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client/tree/master"
+ },
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "psr/http-server-handler",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-handler.git",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side request handler",
+ "keywords": [
+ "handler",
+ "http",
+ "http-interop",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response",
+ "server"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-handler/issues",
+ "source": "https://github.com/php-fig/http-server-handler/tree/master"
+ },
+ "time": "2018-10-30T16:46:14+00:00"
+ },
+ {
+ "name": "psr/http-server-middleware",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-middleware.git",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side middleware",
+ "keywords": [
+ "http",
+ "http-interop",
+ "middleware",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-middleware/issues",
+ "source": "https://github.com/php-fig/http-server-middleware/tree/master"
+ },
+ "time": "2018-10-30T17:12:04+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2017-10-23T01:57:42+00:00"
+ },
+ {
+ "name": "robmorgan/phinx",
+ "version": "0.12.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/phinx.git",
+ "reference": "5a0146a74c1bc195d1f5da86afa3b68badf7d90e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/5a0146a74c1bc195d1f5da86afa3b68badf7d90e",
+ "reference": "5a0146a74c1bc195d1f5da86afa3b68badf7d90e",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/database": "^4.0",
+ "php": ">=7.2",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/console": "^3.4|^4.0|^5.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "phpunit/phpunit": "^8.5|^9.3",
+ "sebastian/comparator": ">=1.2.3",
+ "symfony/yaml": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "ext-json": "Install if using JSON configuration format",
+ "ext-pdo": "PDO extension is needed",
+ "symfony/yaml": "Install if using YAML configuration format"
+ },
+ "bin": [
+ "bin/phinx"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phinx\\": "src/Phinx/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Morgan",
+ "email": "robbym@gmail.com",
+ "homepage": "https://robmorgan.id.au",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com",
+ "homepage": "https://shadowhand.me",
+ "role": "Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
+ "role": "Developer"
+ }
+ ],
+ "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+ "homepage": "https://phinx.org",
+ "keywords": [
+ "database",
+ "database migrations",
+ "db",
+ "migrations",
+ "phinx"
+ ],
+ "support": {
+ "issues": "https://github.com/cakephp/phinx/issues",
+ "source": "https://github.com/cakephp/phinx/tree/0.12.9"
+ },
+ "time": "2021-10-12T10:49:25+00:00"
+ },
+ {
+ "name": "symfony/config",
+ "version": "v5.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/config.git",
+ "reference": "4268f3059c904c61636275182707f81645517a37"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/config/zipball/4268f3059c904c61636275182707f81645517a37",
+ "reference": "4268f3059c904c61636275182707f81645517a37",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/filesystem": "^4.4|^5.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/polyfill-php81": "^1.22"
+ },
+ "conflict": {
+ "symfony/finder": "<4.4"
+ },
+ "require-dev": {
+ "symfony/event-dispatcher": "^4.4|^5.0",
+ "symfony/finder": "^4.4|^5.0",
+ "symfony/messenger": "^4.4|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/yaml": "^4.4|^5.0"
+ },
+ "suggest": {
+ "symfony/yaml": "To use the yaml reference dumper"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Config\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/config/tree/v5.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-21T12:40:44+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a",
+ "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/string": "^5.1"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0",
+ "symfony/event-dispatcher": "^4.4|^5.0",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "symfony/var-dumper": "^4.4|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-25T20:02:16+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-03-23T23:28:01+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v5.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32",
+ "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v5.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-21T12:40:44+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+ "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-02-19T12:13:01+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.23.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
+ "reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-05-27T12:26:48+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-02-19T12:13:01+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.23.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
+ "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-05-27T12:26:48+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
+ "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-02-19T12:13:01+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.23.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
+ "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-28T13:41:28+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "e66119f3de95efc359483f810c4c3e6436279436"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
+ "reference": "e66119f3de95efc359483f810c4c3e6436279436",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-05-21T13:25:03+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-01T10:43:52+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v5.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5",
+ "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0",
+ "symfony/http-client": "^4.4|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "files": [
+ "Resources/functions.php"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v5.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-26T08:00:08+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "brick/varexporter",
+ "version": "0.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/varexporter.git",
+ "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/varexporter/zipball/05241f28dfcba2b51b11e2d750e296316ebbe518",
+ "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.0",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^8.5 || ^9.0",
+ "vimeo/psalm": "4.4.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\VarExporter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()",
+ "keywords": [
+ "var_export"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/varexporter/issues",
+ "source": "https://github.com/brick/varexporter/tree/0.3.5"
+ },
+ "time": "2021-02-10T13:53:07+00:00"
+ },
+ {
+ "name": "cakephp/bake",
+ "version": "2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/bake.git",
+ "reference": "bfb856afcfbc70c5cf5341669c3036a45ca15d94"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/bake/zipball/bfb856afcfbc70c5cf5341669c3036a45ca15d94",
+ "reference": "bfb856afcfbc70c5cf5341669c3036a45ca15d94",
+ "shasum": ""
+ },
+ "require": {
+ "brick/varexporter": "^0.3.5",
+ "cakephp/cakephp": "^4.1",
+ "cakephp/twig-view": "^1.0.2",
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "cakephp/debug_kit": "^4.1",
+ "cakephp/plugin-installer": "^1.3",
+ "phpunit/phpunit": "~8.5.0"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Bake\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/bake/graphs/contributors"
+ }
+ ],
+ "description": "Bake plugin for CakePHP",
+ "homepage": "https://github.com/cakephp/bake",
+ "keywords": [
+ "bake",
+ "cakephp"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/bake/issues",
+ "source": "https://github.com/cakephp/bake"
+ },
+ "time": "2021-07-26T14:56:18+00:00"
+ },
+ {
+ "name": "cakephp/cakephp-codesniffer",
+ "version": "4.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/cakephp-codesniffer.git",
+ "reference": "c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475",
+ "reference": "c5bb1faeebf09cd4a3604bdb0c84f7bc92dc5475",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0",
+ "slevomat/coding-standard": "^6.3.6",
+ "squizlabs/php_codesniffer": "~3.5.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "phpcodesniffer-standard",
+ "autoload": {
+ "psr-4": {
+ "CakePHP\\": "CakePHP/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp-codesniffer/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP CodeSniffer Standards",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "codesniffer",
+ "framework"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
+ "source": "https://github.com/cakephp/cakephp-codesniffer"
+ },
+ "time": "2020-12-03T20:39:38+00:00"
+ },
+ {
+ "name": "cakephp/debug_kit",
+ "version": "4.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/debug_kit.git",
+ "reference": "10d7d9ba36945844211f1d8763e59618917e1784"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/10d7d9ba36945844211f1d8763e59618917e1784",
+ "reference": "10d7d9ba36945844211f1d8763e59618917e1784",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^4.2.0",
+ "cakephp/chronos": "^2.0",
+ "composer/composer": "^1.3 | ^2.0",
+ "jdorn/sql-formatter": "^1.2",
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "cakephp/authorization": "^2.0",
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "phpunit/phpunit": "~8.5.0 | ^9.3"
+ },
+ "suggest": {
+ "ext-pdo_sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use."
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "DebugKit\\": "src/",
+ "DebugKit\\Test\\Fixture\\": "tests/Fixture/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Story",
+ "homepage": "https://mark-story.com",
+ "role": "Author"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Debug Kit",
+ "homepage": "https://github.com/cakephp/debug_kit",
+ "keywords": [
+ "cakephp",
+ "debug",
+ "kit"
+ ],
+ "support": {
+ "forum": "http://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/debug_kit/issues",
+ "source": "https://github.com/cakephp/debug_kit"
+ },
+ "time": "2021-09-12T20:06:14+00:00"
+ },
+ {
+ "name": "cakephp/twig-view",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/twig-view.git",
+ "reference": "14df50360b809a171d0688020fbdfe513763f89b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/twig-view/zipball/14df50360b809a171d0688020fbdfe513763f89b",
+ "reference": "14df50360b809a171d0688020fbdfe513763f89b",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^4.0",
+ "jasny/twig-extensions": "^1.3",
+ "php": ">=7.2",
+ "twig/markdown-extra": "^3.0",
+ "twig/twig": "^3.0"
+ },
+ "conflict": {
+ "wyrihaximus/twig-view": "*"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^4.0",
+ "cakephp/debug_kit": "^4.0",
+ "cakephp/plugin-installer": "^1.3",
+ "michelf/php-markdown": "^1.9",
+ "mikey179/vfsstream": "^1.6",
+ "phpunit/phpunit": "^8.5 || ^9.3"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Cake\\TwigView\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+ }
+ ],
+ "description": "Twig powered View for CakePHP",
+ "keywords": [
+ "cakephp",
+ "template",
+ "twig",
+ "view"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/twig-view/issues",
+ "source": "https://github.com/cakephp/twig-view"
+ },
+ "time": "2021-09-17T14:07:52+00:00"
+ },
+ {
+ "name": "composer/composer",
+ "version": "2.1.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/composer.git",
+ "reference": "e558c88f28d102d497adec4852802c0dc14c7077"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/composer/zipball/e558c88f28d102d497adec4852802c0dc14c7077",
+ "reference": "e558c88f28d102d497adec4852802c0dc14c7077",
+ "shasum": ""
+ },
+ "require": {
+ "composer/ca-bundle": "^1.0",
+ "composer/metadata-minifier": "^1.0",
+ "composer/semver": "^3.0",
+ "composer/spdx-licenses": "^1.2",
+ "composer/xdebug-handler": "^2.0",
+ "justinrainbow/json-schema": "^5.2.11",
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0",
+ "react/promise": "^1.2 || ^2.7",
+ "seld/jsonlint": "^1.4",
+ "seld/phar-utils": "^1.0",
+ "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
+ "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "phpspec/prophecy": "^1.10",
+ "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0"
+ },
+ "suggest": {
+ "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+ "ext-zip": "Enabling the zip extension allows you to unzip archives",
+ "ext-zlib": "Allow gzip compression of HTTP requests"
+ },
+ "bin": [
+ "bin/composer"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\": "src/Composer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "https://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
+ "homepage": "https://getcomposer.org/",
+ "keywords": [
+ "autoload",
+ "dependency",
+ "package"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/composer/issues",
+ "source": "https://github.com/composer/composer/tree/2.1.9"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-05T07:47:38+00:00"
+ },
+ {
+ "name": "composer/metadata-minifier",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/metadata-minifier.git",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2",
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\MetadataMinifier\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Small utility library that handles metadata minification and expansion.",
+ "keywords": [
+ "composer",
+ "compression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/metadata-minifier/issues",
+ "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-07T13:37:33+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "3.2.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9",
+ "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.54",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.2.5"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-05-24T12:41:47+00:00"
+ },
+ {
+ "name": "composer/spdx-licenses",
+ "version": "1.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/spdx-licenses.git",
+ "reference": "de30328a7af8680efdc03e396aad24befd513200"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200",
+ "reference": "de30328a7af8680efdc03e396aad24befd513200",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Spdx\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "SPDX licenses list and validation library.",
+ "keywords": [
+ "license",
+ "spdx",
+ "validator"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/spdx-licenses/issues",
+ "source": "https://github.com/composer/spdx-licenses/tree/1.5.5"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-12-03T16:04:16+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339",
+ "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-31T17:03:58+00:00"
+ },
+ {
+ "name": "dealerdirect/phpcodesniffer-composer-installer",
+ "version": "v0.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
+ "reference": "fe390591e0241955f22eb9ba327d137e501c771c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c",
+ "reference": "fe390591e0241955f22eb9ba327d137e501c771c",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.3",
+ "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "composer/composer": "*",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "sensiolabs/security-checker": "^4.1.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"
+ }
+ ],
+ "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
+ "homepage": "http://www.dealerdirect.com",
+ "keywords": [
+ "PHPCodeSniffer",
+ "PHP_CodeSniffer",
+ "code quality",
+ "codesniffer",
+ "composer",
+ "installer",
+ "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": "2020-12-07T18:04:37+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^8.0",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-11-10T18:47:58+00:00"
+ },
+ {
+ "name": "jasny/twig-extensions",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jasny/twig-extensions.git",
+ "reference": "a694eb02f6fc14ff8e2fceb8b80882c0c926102b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/a694eb02f6fc14ff8e2fceb8b80882c0c926102b",
+ "reference": "a694eb02f6fc14ff8e2fceb8b80882c0c926102b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "twig/twig": "^2.0 | ^3.0"
+ },
+ "require-dev": {
+ "ext-intl": "*",
+ "ext-pcre": "*",
+ "jasny/php-code-quality": "^2.5",
+ "php": ">=7.2.0"
+ },
+ "suggest": {
+ "ext-intl": "Required for the use of the LocalDate Twig extension",
+ "ext-pcre": "Required for the use of the PCRE Twig extension"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Jasny\\Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Arnold Daniels",
+ "email": "arnold@jasny.net",
+ "homepage": "http://www.jasny.net"
+ }
+ ],
+ "description": "A set of useful Twig filters",
+ "homepage": "http://github.com/jasny/twig-extensions#README",
+ "keywords": [
+ "PCRE",
+ "array",
+ "date",
+ "datetime",
+ "preg",
+ "regex",
+ "templating",
+ "text",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/jasny/twig-extensions/issues",
+ "source": "https://github.com/jasny/twig-extensions"
+ },
+ "time": "2019-12-10T16:04:23+00:00"
+ },
+ {
+ "name": "jdorn/sql-formatter",
+ "version": "v1.2.17",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jdorn/sql-formatter.git",
+ "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
+ "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "lib"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jeremy Dorn",
+ "email": "jeremy@jeremydorn.com",
+ "homepage": "http://jeremydorn.com/"
+ }
+ ],
+ "description": "a PHP SQL highlighting library",
+ "homepage": "https://github.com/jdorn/sql-formatter/",
+ "keywords": [
+ "highlight",
+ "sql"
+ ],
+ "support": {
+ "issues": "https://github.com/jdorn/sql-formatter/issues",
+ "source": "https://github.com/jdorn/sql-formatter/tree/master"
+ },
+ "time": "2014-01-12T16:20:24+00:00"
+ },
+ {
+ "name": "josegonzalez/dotenv",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/josegonzalez/php-dotenv.git",
+ "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/josegonzalez/php-dotenv/zipball/f19174d9d7213a6c20e8e5e268aa7dd042d821ca",
+ "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca",
+ "shasum": ""
+ },
+ "require": {
+ "m1/env": "2.*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "php-mock/php-mock-phpunit": "^1.1",
+ "satooshi/php-coveralls": "1.*",
+ "squizlabs/php_codesniffer": "2.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "josegonzalez\\Dotenv": [
+ "src",
+ "tests"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jose Diaz-Gonzalez",
+ "email": "dotenv@josegonzalez.com",
+ "homepage": "http://josediazgonzalez.com",
+ "role": "Maintainer"
+ }
+ ],
+ "description": "dotenv file parsing for PHP",
+ "homepage": "https://github.com/josegonzalez/php-dotenv",
+ "keywords": [
+ "configuration",
+ "dotenv",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/josegonzalez/php-dotenv/issues",
+ "source": "https://github.com/josegonzalez/php-dotenv/tree/master"
+ },
+ "time": "2017-09-19T15:49:58+00:00"
+ },
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "5.2.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/justinrainbow/json-schema.git",
+ "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa",
+ "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+ "json-schema/json-schema-test-suite": "1.2.0",
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "JsonSchema\\": "src/JsonSchema/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "support": {
+ "issues": "https://github.com/justinrainbow/json-schema/issues",
+ "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11"
+ },
+ "time": "2021-07-22T09:24:00+00:00"
+ },
+ {
+ "name": "m1/env",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/m1/Env.git",
+ "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/m1/Env/zipball/5c296e3e13450a207e12b343f3af1d7ab569f6f3",
+ "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "scrutinizer/ocular": "~1.1",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "josegonzalez/dotenv": "For loading of .env",
+ "m1/vars": "For loading of configs"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "M1\\Env\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Miles Croxford",
+ "email": "hello@milescroxford.com",
+ "homepage": "http://milescroxford.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.",
+ "homepage": "https://github.com/m1/Env",
+ "keywords": [
+ ".env",
+ "config",
+ "dotenv",
+ "env",
+ "loader",
+ "m1",
+ "parser",
+ "support"
+ ],
+ "support": {
+ "issues": "https://github.com/m1/Env/issues",
+ "source": "https://github.com/m1/Env/tree/2.2.0"
+ },
+ "time": "2020-02-19T09:02:13+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.10.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "replace": {
+ "myclabs/deep-copy": "self.version"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-11-13T09:40:50+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.13.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "50953a2691a922aa1769461637869a0a2faa3f53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53",
+ "reference": "50953a2691a922aa1769461637869a0a2faa3f53",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0"
+ },
+ "time": "2021-09-20T12:20:58+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ },
+ "time": "2021-07-20T11:28:43+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "bae7c545bef187884426f042434e561ab1ddb182"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
+ "reference": "bae7c545bef187884426f042434e561ab1ddb182",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.1.0"
+ },
+ "time": "2021-02-23T14:00:09+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
+ "time": "2020-06-27T09:03:43+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+ "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.3",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
+ },
+ "time": "2020-09-03T19:13:55+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae",
+ "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1"
+ },
+ "time": "2021-10-02T14:08:47+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "1.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
+ "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2",
+ "php": "^7.2 || ~8.0, <8.2",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/1.14.0"
+ },
+ "time": "2021-09-10T09:02:12+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "0.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531",
+ "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "consistence/coding-standard": "^3.5",
+ "ergebnis/composer-normalize": "^2.0.2",
+ "jakub-onderka/php-parallel-lint": "^0.9.2",
+ "phing/phing": "^2.16.0",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12.26",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^6.3",
+ "slevomat/coding-standard": "^4.7.2",
+ "symfony/process": "^4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4-dev"
+ }
+ },
+ "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/master"
+ },
+ "time": "2020-08-03T20:32:43+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "0.12.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7",
+ "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.12-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "source": "https://github.com/phpstan/phpstan/tree/0.12.99"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/phpstan",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-12T20:09:55+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218",
+ "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.12.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-09-17T05:39:03+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
+ "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:57:25+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.5.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a",
+ "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.7",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^2.3.4",
+ "sebastian/version": "^3.0.2"
+ },
+ "require-dev": {
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ],
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/donate.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-09-25T07:38:51+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.10.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "01281336c4ae557fe4a994544f30d3a1bc204375"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/01281336c4ae557fe4a994544f30d3a1bc204375",
+ "reference": "01281336c4ae557fe4a994544f30d3a1bc204375",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+ "php": "^8.0 || ^7.0 || ^5.5.9",
+ "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+ "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "hoa/console": "3.17.*"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+ "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.10.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.10.9"
+ },
+ "time": "2021-10-10T13:37:39+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise/issues",
+ "source": "https://github.com/reactphp/promise/tree/v2.8.0"
+ },
+ "time": "2020-05-12T15:16:56+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:08:49+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:49:45+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.7",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:52:27+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:10:38+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:52:38+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+ "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:24:23+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
+ "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-06-11T13:31:12+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.6",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-28T06:42:11+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:17:30+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:45:17+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "2.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-06-15T12:49:02+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "seld/jsonlint",
+ "version": "1.8.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
+ "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ },
+ "bin": [
+ "bin/jsonlint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/jsonlint/issues",
+ "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-11-11T09:19:24+00:00"
+ },
+ {
+ "name": "seld/phar-utils",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
+ "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "PHAR file format utilities, for when PHP phars you up",
+ "keywords": [
+ "phar"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/phar-utils/issues",
+ "source": "https://github.com/Seldaek/phar-utils/tree/1.1.2"
+ },
+ "time": "2021-08-19T21:01:38+00:00"
+ },
+ {
+ "name": "slevomat/coding-standard",
+ "version": "6.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "696dcca217d0c9da2c40d02731526c1e25b65346"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346",
+ "reference": "696dcca217d0c9da2c40d02731526c1e25b65346",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
+ "php": "^7.1 || ^8.0",
+ "phpstan/phpdoc-parser": "0.4.5 - 0.4.9",
+ "squizlabs/php_codesniffer": "^3.5.6"
+ },
+ "require-dev": {
+ "phing/phing": "2.16.3",
+ "php-parallel-lint/php-parallel-lint": "1.2.0",
+ "phpstan/phpstan": "0.12.48",
+ "phpstan/phpstan-deprecation-rules": "0.12.5",
+ "phpstan/phpstan-phpunit": "0.12.16",
+ "phpstan/phpstan-strict-rules": "0.12.5",
+ "phpunit/phpunit": "7.5.20|8.5.5|9.4.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.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/6.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kukulich",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-10-05T12:39:37+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.5.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "9d583721a7157ee997f235f327de038e7ea6dac4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4",
+ "reference": "9d583721a7157ee997f235f327de038e7ea6dac4",
+ "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": "2020-10-23T02:01:07+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
+ "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-04T21:20:46+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967",
+ "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v5.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-04T21:20:46+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v5.3.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eaaea4098be1c90c8285543e1356a09c8aa5c8da",
+ "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.3",
+ "symfony/console": "<4.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^4.4|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v5.3.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-24T15:59:58+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2021-07-28T10:34:58+00:00"
+ },
+ {
+ "name": "twig/markdown-extra",
+ "version": "v3.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/markdown-extra.git",
+ "reference": "725a4ef89d93bb80fc63c67cf261bf7512649290"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/725a4ef89d93bb80fc63c67cf261bf7512649290",
+ "reference": "725a4ef89d93bb80fc63c67cf261bf7512649290",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "twig/twig": "^2.4|^3.0"
+ },
+ "require-dev": {
+ "erusev/parsedown": "^1.7",
+ "league/commonmark": "^1.0",
+ "league/html-to-markdown": "^4.8|^5.0",
+ "michelf/php-markdown": "^1.8",
+ "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Twig\\Extra\\Markdown\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "A Twig extension for Markdown",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "html",
+ "markdown",
+ "twig"
+ ],
+ "support": {
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-07T07:08:18+00:00"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v3.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "a27fa056df8a6384316288ca8b0fa3a35fdeb569"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/a27fa056df8a6384316288ca8b0fa3a35fdeb569",
+ "reference": "a27fa056df8a6384316288ca8b0fa3a35fdeb569",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3"
+ },
+ "require-dev": {
+ "psr/container": "^1.0",
+ "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "templating"
+ ],
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v3.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-17T08:44:23+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+ },
+ "time": "2021-03-09T10:59:23+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "psy/psysh": 0
+ },
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.3"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.1.0"
+}
diff --git a/app/config/bootstrap.php b/app/config/bootstrap.php
index 5709bada3..f93d37b82 100644
--- a/app/config/bootstrap.php
+++ b/app/config/bootstrap.php
@@ -199,31 +199,27 @@
});
/*
- * You can set whether the ORM uses immutable or mutable Time types.
- * The default changed in 4.0 to immutable types. You can uncomment
- * below to switch back to mutable types.
- *
* You can enable default locale format parsing by adding calls
* to `useLocaleParser()`. This enables the automatic conversion of
* locale specific date formats. For details see
* @link https://book.cakephp.org/4/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data
*/
- \Cake\Database\TypeFactory::build('time')
- ->useMutable();
- \Cake\Database\TypeFactory::build('date')
- ->useMutable();
- \Cake\Database\TypeFactory::build('datetime')
- ->useMutable();
- \Cake\Database\TypeFactory::build('timestamp')
- ->useMutable();
+// \Cake\Database\TypeFactory::build('time')
+// ->useLocaleParser();
+// \Cake\Database\TypeFactory::build('date')
+// ->useLocaleParser();
+// \Cake\Database\TypeFactory::build('datetime')
+// ->useLocaleParser();
+// \Cake\Database\TypeFactory::build('timestamp')
+// ->useLocaleParser();
// \Cake\Database\TypeFactory::build('datetimefractional')
-// ->useMutable();
+// ->useLocaleParser();
// \Cake\Database\TypeFactory::build('timestampfractional')
-// ->useMutable();
+// ->useLocaleParser();
// \Cake\Database\TypeFactory::build('datetimetimezone')
-// ->useMutable();
+// ->useLocaleParser();
// \Cake\Database\TypeFactory::build('timestamptimezone')
-// ->useMutable();
+// ->useLocaleParser();
// There is no time-specific type in Cake
TypeFactory::map('time', StringType::class);
diff --git a/app/src/Controller/AppController.php b/app/src/Controller/AppController.php
index d42740fc4..ed4ca306e 100644
--- a/app/src/Controller/AppController.php
+++ b/app/src/Controller/AppController.php
@@ -126,7 +126,7 @@ public function beforeRender(EventInterface $event) {
}
// Available Matchgrids
- $this->loadModel('Matchgrids');
+ $this->Matchgrids = $this->fetchTable('Matchgrids');
$this->set('vv_matchgrids', $this->Matchgrids->find('all')->find('activeMatchGrids')->order(['table_name' => 'ASC'])->toArray());
// The set of menu permissions, so the layout knows what to render
@@ -303,7 +303,7 @@ protected function setMatchgrid() {
}
if($mgid) {
- $this->loadModel('Matchgrids');
+ $this->Matchgrids = $this->fetchTable('Matchgrids');
// This throws Cake\Datasource\Exception\RecordNotFoundException which
// we just let pass up the stack.
diff --git a/app/src/Controller/StandardController.php b/app/src/Controller/StandardController.php
index 7c5cc0578..e56468b02 100644
--- a/app/src/Controller/StandardController.php
+++ b/app/src/Controller/StandardController.php
@@ -409,7 +409,7 @@ protected function populateAutoViewVars(object $obj=null) {
case 'select':
// We assume $modelName has a direct relationship to $avv['model']
$avvmodel = $avv['model'];
- $this->loadModel($avvmodel);
+ $this->$avvmodel = $this->fetchTable($avvmodel);
if($avv['type'] == 'auxiliary') {
$query = $this->$avvmodel->find();
diff --git a/app/src/Controller/TierApiController.php b/app/src/Controller/TierApiController.php
index 668f48e24..87d3cf9ff 100644
--- a/app/src/Controller/TierApiController.php
+++ b/app/src/Controller/TierApiController.php
@@ -578,7 +578,7 @@ public function isAuthorized(Array $user) {
}
if($sor && $mgid) {
- $this->loadModel('SystemsOfRecord');
+ $this->SystemsOfRecord = $this->fetchTable('SystemsOfRecord');
$count = $this->SystemsOfRecord->find()->where(['matchgrid_id' => $mgid, 'label' => $sor])->count();
@@ -688,7 +688,7 @@ protected function setMatchgrid() {
$mgid = $this->request->getParam('matchgrid_id');
if($mgid) {
- $this->loadModel('Matchgrids');
+ $this->Matchgrids = $this->fetchTable('Matchgrids');
// This throws Cake\Datasource\Exception\RecordNotFoundException which
// we just let pass up the stack.
diff --git a/app/src/Lib/Match/MatchgridBuilder.php b/app/src/Lib/Match/MatchgridBuilder.php
index 2230d4f50..af921abfa 100644
--- a/app/src/Lib/Match/MatchgridBuilder.php
+++ b/app/src/Lib/Match/MatchgridBuilder.php
@@ -188,7 +188,7 @@ protected function configToSchema(
}
// $stmt just returns the query string so we don't bother examining it
- $stmt = $dbc->query($sql);
+ $stmt = $dbc->executeQuery($sql);
}
}
diff --git a/app/src/Lib/Match/ResultManager.php b/app/src/Lib/Match/ResultManager.php
index e2e220328..3b7639a5f 100644
--- a/app/src/Lib/Match/ResultManager.php
+++ b/app/src/Lib/Match/ResultManager.php
@@ -33,7 +33,6 @@
namespace App\Lib\Match;
use \App\Lib\Enum\ConfidenceModeEnum;
-use Cake\I18n\Time;
class ResultManager {
// Results are keyed on referenceId and rowId (so we can track multiple SOR data
diff --git a/app/vendor/cakephp-plugins.php b/app/vendor/cakephp-plugins.php
index 114fb5eea..dd8b8057b 100644
--- a/app/vendor/cakephp-plugins.php
+++ b/app/vendor/cakephp-plugins.php
@@ -4,6 +4,7 @@
return [
'plugins' => [
'Bake' => $baseDir . '/vendor/cakephp/bake/',
+ 'Cake/Repl' => $baseDir . '/vendor/cakephp/repl/',
'Cake/TwigView' => $baseDir . '/vendor/cakephp/twig-view/',
'DebugKit' => $baseDir . '/vendor/cakephp/debug_kit/',
'Migrations' => $baseDir . '/vendor/cakephp/migrations/',
diff --git a/app/vendor/cakephp/bake/composer.json b/app/vendor/cakephp/bake/composer.json
index cd74c330b..881764551 100644
--- a/app/vendor/cakephp/bake/composer.json
+++ b/app/vendor/cakephp/bake/composer.json
@@ -19,13 +19,13 @@
},
"require": {
"php": ">=7.2",
- "cakephp/cakephp": "^4.1",
+ "cakephp/cakephp": "^4.3.0",
"cakephp/twig-view": "^1.0.2",
"brick/varexporter": "^0.3.5"
},
"require-dev": {
"cakephp/cakephp-codesniffer": "^4.0",
- "phpunit/phpunit": "~8.5.0",
+ "phpunit/phpunit": "^8.5 || ^9.3",
"cakephp/debug_kit": "^4.1",
"cakephp/plugin-installer": "^1.3"
},
diff --git a/app/vendor/cakephp/bake/docs/en/development.rst b/app/vendor/cakephp/bake/docs/en/development.rst
index e1c1aa7bf..735c4183f 100644
--- a/app/vendor/cakephp/bake/docs/en/development.rst
+++ b/app/vendor/cakephp/bake/docs/en/development.rst
@@ -102,11 +102,6 @@ Bake Template Syntax
Bake template files use the `Twig `__ template syntax.
-One way to see/understand how bake templates works, especially when attempting
-to modify bake template files, is to bake a class and compare the template used
-with the pre-processed template file which is left in the application's
-**tmp/bake** folder.
-
So, for example, when baking a command like so:
.. code-block:: bash
diff --git a/app/vendor/cakephp/bake/docs/fr/development.rst b/app/vendor/cakephp/bake/docs/fr/development.rst
index 61de705da..2bebf089b 100644
--- a/app/vendor/cakephp/bake/docs/fr/development.rst
+++ b/app/vendor/cakephp/bake/docs/fr/development.rst
@@ -3,7 +3,8 @@ Etendre Bake
Bake dispose d'une architecture extensible qui permet à votre application ou
à vos plugins de modifier ou ajouter la fonctionnalité de base. Bake utilise une
-classe de vue dédiée qui n'utilise pas la syntaxe PHP standard.
+classe de vue dédiée qui utilise le moteur de template
+`Twig `_.
Events de Bake
==============
@@ -18,12 +19,12 @@ s'appliquent à toutes les sorties fabriquées avec bake, par exemple pour ajout
un autre helper à la classe de vue bake, cet event peut être utilisé::
on('Bake.initialize', function (Event $event) {
+ // dans src/Application::bootstrapCli()
+
+ EventManager::instance()->on('Bake.initialize', function (EventInterface $event) {
$view = $event->getSubject();
// Dans mes templates de bake, permet l'utilisation du helper MySpecial
@@ -34,10 +35,6 @@ un autre helper à la classe de vue bake, cet event peut être utilisé::
});
-Si vous souhaitez modifier bake à partir d'un autre plugin, mettre les events
-de bake de votre plugin dans le fichier ``config/bootstrap.php`` du plugin est
-une bonne idée.
-
Les events de bake peuvent être pratiques pour faire de petits changements dans
les templates existants. Par exemple, pour changer les noms de variables
utilisés lors de la création avec bake de fichiers de controller/template, on
@@ -45,15 +42,15 @@ pourra utiliser une fonction qui écoute ``Bake.beforeRender`` pour modifier les
variables utilisées dans les templates de bake::
on('Bake.beforeRender', function (Event $event) {
+ // dans src/Application::bootstrapCli()
+
+ EventManager::instance()->on('Bake.beforeRender', function (EventInterface $event) {
$view = $event->getSubject();
- // Utilise $rows pour les principales variables de données dans les indexes
+ // Utilise $rows pour la principale variable de données dans les index
if ($view->get('pluralName')) {
$view->set('pluralName', 'rows');
}
@@ -61,7 +58,7 @@ variables utilisées dans les templates de bake::
$view->set('pluralVar', 'rows');
}
- // Utilise $theOne pour les principales variable de données dans les view/edit
+ // Utilise $theOne pour la principale variable de données dans les view/edit
if ($view->get('singularName')) {
$view->set('singularName', 'theOne');
}
@@ -74,23 +71,23 @@ variables utilisées dans les templates de bake::
Vous pouvez aussi scoper les events ``Bake.beforeRender`` et
``Bake.afterRender`` dans un fichier généré spécifique. Par exemple, si vous
souhaitez ajouter des actions spécifiques à votre UsersController quand vous le
-générez à partir d'un fichier **Controller/controller.ctp**, vous pouvez
+générez à partir d'un fichier **Controller/controller.twig**, vous pouvez
utiliser l'event suivant::
on(
'Bake.beforeRender.Controller.controller',
- function (Event $event) {
- $view = $event->subject;
- if ($view->viewVars['name'] == 'Users') {
+ function (EventInterface $event) {
+ $view = $event->getSubject();
+ if ($view->get('name') === 'Users') {
// ajouter les actions login et logout au controller Users
- $view->viewVars['actions'] = [
+ $view->set('actions', [
'login',
'logout',
'index',
@@ -110,237 +107,235 @@ qui sont plus faciles à tester.
Syntaxe de Template de Bake
===========================
-Les fichiers de template de Bake utilisent les balises erb-style (``<% %>``)
-pour indiquer la logique des templates, et traitent le reste, y compris les
-balises php, comme du texte.
-
-.. note::
-
- Les fichiers de template de Bake n'utilisent pas, et sont insensibles aux
- ``asp_tags`` de la configuration de php ini.
-
-``BakeView`` intègre les balises suivantes:
-
- * ``<%`` Une balise php ouverte de template de Bake
- * ``%>`` Une balise php fermante de template de Bake
- * ``<%=`` Une balise php de short-echo de template de Bake
- * ``<%-`` Une balise php ouverte de template de Bake, enlevant tout espace
- en tête avant la balise
- * ``-%>`` Une balise php fermante de template de Bake, enlevant les espaces
- à a fin après la balise
-
-Une façon de voir/comprendre la façon dont les templates de Bake fonctionne,
-spécialement quand on essaie de modifier les fichiers de template de bake, est
-de créer avec bake une classe et de comparer le template utilisé avec le
-template déjà présent dans le dossier **tmp/bake** de votre application.
+Les fichiers de template de Bake utilisent la syntaxe de template de
+`Twig `__.
Ainsi, par exemple, pour créer avec bake un shell comme ceci:
.. code-block:: bash
- bin/cake bake shell Foo
+ bin/cake bake command Foo
Le template utilisé
-(**vendor/cakephp/cakephp/src/Template/Bake/Shell/shell.ctp**)
+(***vendor/cakephp/bake/templates/bake/Command/command.twig**)
ressemble à ceci::
+ declare(strict_types=1);
- \Shell;
+ namespace {{ namespace }}\Command;
- use Cake\Console\Shell;
+ use Cake\Command\Command;
+ use Cake\Console\Arguments;
+ use Cake\Console\ConsoleIo;
+ use Cake\Console\ConsoleOptionParser;
/**
- * <%= $name %> shell command.
- */
- class <%= $name %>Shell extends Shell
+ * {{ name }} command.
+ */
+ class {{ name }}Command extends Command
{
-
/**
- * main() method.
- *
- * @return bool|int Success or error code.
- */
- public function main()
+ * Méthode hook pour définir le parseur d'option de cette commande.
+ *
+ * @see https://book.cakephp.org/4/fr/console-commands/commands.html#defining-arguments-and-options
+ * @param \Cake\Console\ConsoleOptionParser $parser Le parseur à définir
+ * @return \Cake\Console\ConsoleOptionParser Le parseur construit.
+ */
+ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
- }
-
- }
-
-Le fichier template déjà présent (pre-processed)
-(**tmp/bake/Bake-Shell-shell-ctp.php**), qui est le fichier réellement
-rendu, ressemble à ceci::
-
- \Shell;
+ $parser = parent::buildOptionParser($parser);
- use Cake\Console\Shell;
-
- /**
- * = $name ?> shell command.
- */
- class = $name ?>Shell extends Shell
- {
+ return $parser;
+ }
/**
- * main() method.
- *
- * @return bool|int Success or error code.
- */
- public function main()
+ * Implémentez cette méthode avec la logique de votre commande.
+ *
+ * @param \Cake\Console\Arguments $args Les arguments de la commande.
+ * @param \Cake\Console\ConsoleIo $io La console il
+ * @return null|void|int Le code de sortie ou null pour un succès
+ */
+ public function execute(Arguments $args, ConsoleIo $io)
{
}
-
}
-Et la classe résultante construite avec bake (**src/Shell/FooShell.php**)
+Et la classe résultante construite avec bake (**src/Command/FooCommand.php**)
ressemble à ceci::
\Foo;
+ namespace {{ namespace }}\FooPath;
/**
- * <%= $name %> foo
+ * {{ name }} fooOut
*/
- class <%= $name %>Foo
+ class {{ name }}FooOut
{
- // Add code.
+ // Ajouter le code.
}
-Vous devriez maintenant voir votre nouvelle tâche dans l'affichage de
+Vous devriez maintenant voir votre nouvelle commande dans l'affichage de
``bin/cake bake``. Vous pouvez lancer votre nouvelle tâche en exécutant
-``bin/cake bake foo Example``.
-Cela va générer une nouvelle classe ``ExampleFoo`` dans
-**src/Foo/ExampleFoo.php** que votre application va
+``bin/cake bake foo Exemple``.
+Cela va générer une nouvelle classe ``ExempleFoo`` dans
+**src/FooPath/ExempleFooOut.php** que votre application va
pouvoir utiliser.
Si vous souhaitez que votre appel à ``bake`` crée également un fichier de test
-pour la classe ``ExampleFoo``, vous devrez surcharger la méthode ``bakeTest()``
-dans la classe ``FooTask`` pour y définir le suffixe et le namespace de la
+pour la classe ``ExempleFooOut``, vous devrez surcharger la méthode ``bakeTest()``
+dans la classe ``FooCommand`` pour y définir le suffixe et le namespace de la
classe de votre nom de commande personnalisée::
- public function bakeTest($className)
+ use Cake\Console\Arguments;
+ use Cake\Console\ConsoleIo;
+
+ public function bakeTest(string $className, Arguments $args, ConsoleIo $io): void
{
if (!isset($this->Test->classSuffixes[$this->name()])) {
- $this->Test->classSuffixes[$this->name()] = 'Foo';
+ $this->Test->classSuffixes[$this->name()] = 'Foo';
}
$name = ucfirst($this->name());
if (!isset($this->Test->classTypes[$name])) {
- $this->Test->classTypes[$name] = 'Foo';
+ $this->Test->classTypes[$name] = 'Foo';
}
return parent::bakeTest($className);
}
* Le **suffixe de classe** sera ajouté après le nom passé à ``bake``. Dans le
- cadre de l'exemple ci-dessus, cela créerait un fichier ``ExampleFooTest.php``.
+ cadre de l'exemple ci-dessus, cela créerait un fichier ``ExempleFooTest.php``.
* Le **type de classe** sera le sous-namespace utilisé pour atteindre votre
fichier (relatif à l'application ou au plugin dans lequel vous faites le
``bake``). Dans le cadre de l'exemple ci-dessus, cela créerait le test avec le
diff --git a/app/vendor/cakephp/bake/docs/fr/index.rst b/app/vendor/cakephp/bake/docs/fr/index.rst
index c086cac49..80e39229b 100644
--- a/app/vendor/cakephp/bake/docs/fr/index.rst
+++ b/app/vendor/cakephp/bake/docs/fr/index.rst
@@ -16,11 +16,15 @@ Avant d'essayer d'utiliser ou d'étendre bake, assurez-vous qu'il est installé
dans votre application. Bake est disponible en tant que plugin que vous pouvez
installer avec Composer::
- composer require --dev cakephp/bake:~1.0
+ composer require --dev cakephp/bake:"^2.0"
Ceci va installer bake en tant que dépendance de développement. Cela signifie
qu'il ne sera pas installé lors d'un déploiement en production.
+Quand vous utilisez les templates Twig, vérifiez que vous chargez le plugin
+``Cake/TwigView`` avec son bootstrap. Vous pouvez aussi l'omettre complètement,
+ce qui fait que Bake chargera ce plugin à la demande.
+
.. meta::
:title lang=fr: Console Bake
:keywords lang=fr: interface ligne de commande,development,bake view, bake template syntaxe,erb tags,asp tags,percent tags
diff --git a/app/vendor/cakephp/bake/docs/fr/usage.rst b/app/vendor/cakephp/bake/docs/fr/usage.rst
index 56e891a19..79f9f4957 100644
--- a/app/vendor/cakephp/bake/docs/fr/usage.rst
+++ b/app/vendor/cakephp/bake/docs/fr/usage.rst
@@ -1,101 +1,58 @@
Génération de Code avec Bake
############################
-Suivant la configuration de votre installation, vous devrez peut être donner
-les droits d'exécution au script bash cake ou l'appeler avec la commande
-``./bin/cake bake``.
-La console cake est exécutée en utilisant le CLI PHP
+La console Bake est exécutée en utilisant le CLI PHP
(Interface de Ligne de Commande). Si vous avez des problèmes en exécutant ce
script, vérifiez que :
#. le CLI PHP est installé et qu'il a les bons modules activés (ex: MySQL, intl).
-#. Certains utilisateurs peuvent aussi rencontrer des problèmes si la base de
- données host est 'localhost' et devront essayer '127.0.0.1' à la place.
-#. Selon la configuration de votre ordinateur, vous devrez peut-être permettre
- l'exécution du script bash pour permettre de lancer ``bin/cake bake``.
-
-Avant de lancer bake, vous devrez vous assurer qu'au moins une connection à une
-base de données est configurée.
-
-Si vous exécutez la commande sans argument, ``bin/cake bake`` affichera la liste
-des tâches disponibles. Vous devriez voir quelque chose comme ceci::
-
- $ bin/cake bake
-
- Welcome to CakePHP v3.x.x Console
- ---------------------------------------------------------------
- App : src
- Path: /var/www/cakephp.dev/src/
- ---------------------------------------------------------------
- Les commandes suivantes avec lesquelles vous pouvez générer un squelette de
- code pour votre application.
-
- Les commandes disponibles de bake:
-
- - all
- - behavior
- - cell
- - component
- - controller
- - fixture
- - form
- - helper
- - mailer
- - migration
- - migration_snapshot
- - model
- - plugin
- - shell
- - shell-helper
- - template
- - test
-
- En utilisant `cake bake [name]` vous pouvez faire appel à une tâche
- spécifique de bake.
-
-Vous pouvez obtenir plus d'informations sur ce que chaque tâche fait et les
-options disponibles en utilisant l'option ``--help``::
-
- $ bin/cake bake controller --help
-
- Welcome to CakePHP v3.x.x Console
- ---------------------------------------------------------------
- App : src
- Path: /var/www/cakephp.dev/src/
- ---------------------------------------------------------------
- Bake a controller skeleton.
-
- Usage:
- cake bake controller [subcommand] [options] []
-
- Subcommands:
-
- all Bake all controllers with CRUD methods.
-
- To see help on a subcommand use `cake bake controller [subcommand] --help`
-
- Options:
-
- --help, -h Display this help.
- --verbose, -v Enable verbose output.
- --quiet, -q Enable quiet output.
- --plugin, -p Plugin to bake into.
- --force, -f Force overwriting existing files without prompting.
- --connection, -c The datasource connection to get data from.
- (default: default)
- --theme, -t The theme to use when baking code.
- --components The comma separated list of components to use.
- --helpers The comma separated list of helpers to use.
- --prefix The namespace/routing prefix to use.
- --no-test Do not generate a test skeleton.
- --no-actions Do not generate basic CRUD action methods.
-
- Arguments:
-
- name Name of the controller to bake. Can use Plugin.name to bake
- controllers into plugins. (optional)
-
-Themes de Bake
+#. Certains utilisateurs peuvent aussi rencontrer des problèmes si l'hôte de la
+ base de données est 'localhost' et devront essayer '127.0.0.1' à la place,
+ car localhost peut causer des problèmes avec PHP CLI.
+#. Selon la configuration de votre ordinateur, vous devrez peut-être donner les
+ permissions d'exécution sur le script bash cake pour autoriser le lancement
+ par ``bin/cake bake``.
+
+Avant de lancer bake, vous devrez vous assurer que vous avez au moins une
+connexion de base de données configurée.
+
+Vous pouvez voir la liste des commandes bake disponibles en lançant
+``bin/cake bake --help`` (pour Windows ``bin\cake bake --help``) ::
+
+ $ bin/cake bake --help
+ Current Paths:
+
+ * app: src/
+ * root: /path/to/your/app/
+ * core: /path/to/your/app/vendor/cakephp/cakephp/
+
+ Available Commands:
+
+ Bake:
+ - bake all
+ - bake behavior
+ - bake cell
+ - bake command
+ - bake component
+ - bake controller
+ - bake controller all
+ - bake fixture
+ - bake fixture all
+ - bake form
+ - bake helper
+ - bake mailer
+ - bake middleware
+ - bake model
+ - bake model all
+ - bake plugin
+ - bake template
+ - bake template all
+ - bake test
+
+ To run a command, type `cake command_name [args|options]`
+ To get help on a specific command, type `cake command_name --help`
+
+Thèmes de Bake
==============
L'option theme est commune à toutes les commandes de bake, et permet de changer
diff --git a/app/vendor/cakephp/bake/docs/ja/development.rst b/app/vendor/cakephp/bake/docs/ja/development.rst
index a7d733edc..070e43a5c 100644
--- a/app/vendor/cakephp/bake/docs/ja/development.rst
+++ b/app/vendor/cakephp/bake/docs/ja/development.rst
@@ -109,11 +109,6 @@ Bake テンプレート構文
Bake テンプレートファイルは、 `Twig `__
テンプレート構文を使用します。
-bake テンプレートがどのように動作するかを確認/理解する一つの方法は、
-bake テンプレートファイルを変更しようとする場合は特に、クラスを bake して、
-アプリケーションの **tmp/bake** フォルダー内に残っている前処理されたテンプレートファイルを
-使ったテンプレートと比較することです。
-
だから、例えば、以下のようにシェルを bake した場合:
.. code-block:: bash
diff --git a/app/vendor/cakephp/bake/docs/pt/development.rst b/app/vendor/cakephp/bake/docs/pt/development.rst
index 5e4fb05f8..9a24232be 100644
--- a/app/vendor/cakephp/bake/docs/pt/development.rst
+++ b/app/vendor/cakephp/bake/docs/pt/development.rst
@@ -109,11 +109,6 @@ Sintaxe de Templates do Bake
Os arquivos de templates do Bake usam a sintaxe `Twig `__.
-Uma forma de ver e entender como o bake funciona, especialmente quando tentamos
-modificar os arquivos de templates, é executar o bake de uma classe que compara
-o template usado com o template pré-processado deixado anteriormente pela
-aplicação na pasta **tmp/bake**.
-
Então, por exemplo, quando você executar algo como::
.. code-block:: bash
diff --git a/app/vendor/cakephp/bake/docs/ru/development.rst b/app/vendor/cakephp/bake/docs/ru/development.rst
index 5b7de8ec8..568068dbf 100644
--- a/app/vendor/cakephp/bake/docs/ru/development.rst
+++ b/app/vendor/cakephp/bake/docs/ru/development.rst
@@ -106,11 +106,6 @@ Bake имеет расширяемую архитектуру, которая п
Файлы шаблонов Bake используют синтаксис шаблонизатора `Twig `__.
-Один из способов увидеть/понять, как работают шаблоны выпечки, особенно при попытке
-изменить файлы шаблонов выпечки, это - испечь класс и сравнить используемый шаблон
-с предварительно обработанным файлом шаблона, который остаётся в приложении в папке
-**tmp/bake**.
-
Так, например, при выпечке такой оболочки:
.. code-block:: bash
diff --git a/app/vendor/cakephp/bake/src/Command/CommandHelperCommand.php b/app/vendor/cakephp/bake/src/Command/CommandHelperCommand.php
new file mode 100644
index 000000000..fba31ed10
--- /dev/null
+++ b/app/vendor/cakephp/bake/src/Command/CommandHelperCommand.php
@@ -0,0 +1,54 @@
+ 'When using generated data, the number of records to include in the fixture(s).',
'short' => 'n',
'default' => 1,
+ ])->addOption('fields', [
+ 'help' => 'Create a fixture that includes the deprecated $fields property.',
+ 'short' => 'f',
+ 'boolean' => true,
])->addOption('schema', [
'help' => 'Create a fixture that imports schema, instead of dumping a schema snapshot into the fixture.',
'short' => 's',
@@ -162,6 +168,8 @@ protected function bake(string $model, string $useTable, Arguments $args, Consol
$data = $this->readSchema($model, $useTable);
}
+ $this->validateNames($data);
+
if ($modelImport === null) {
$schema = $this->_generateSchema($data);
}
@@ -202,6 +210,25 @@ public function readSchema(string $name, string $table): TableSchemaInterface
return $model->getSchema();
}
+ /**
+ * Validates table and column names are supported.
+ *
+ * @param \Cake\Database\Schema\TableSchemaInterface $schema Table schema
+ * @return void
+ * @throws \Cake\Console\Exception\StopException When table or column names are not supported
+ */
+ public function validateNames(TableSchemaInterface $schema): void
+ {
+ foreach ($schema->columns() as $column) {
+ if (!is_string($column) || !ctype_alpha($column[0])) {
+ throw new StopException(sprintf(
+ 'Unable to bake table with integer column names or names that start with digits. Found `%s`.',
+ (string)$column
+ ));
+ }
+ }
+ }
+
/**
* Generate the fixture file, and write to disk
*
@@ -226,6 +253,9 @@ public function generateFixtureFile(Arguments $args, ConsoleIo $io, string $mode
$defaults['namespace'] = $this->_pluginNamespace($this->plugin);
}
$vars = $otherVars + $defaults;
+ if (!$args->getOption('fields')) {
+ $vars['schema'] = null;
+ }
$path = $this->getPath($args);
$filename = $vars['name'] . 'Fixture.php';
@@ -403,26 +433,15 @@ protected function _generateRecords(TableSchemaInterface $table, int $recordCoun
*/
protected function _makeRecordString(array $records): string
{
- $out = "[\n";
- foreach ($records as $record) {
- $values = [];
- foreach ($record as $field => $value) {
+ foreach ($records as &$record) {
+ array_walk($record, function (&$value) {
if ($value instanceof DateTimeInterface) {
$value = $value->format('Y-m-d H:i:s');
}
- $val = var_export($value, true);
- if ($val === 'NULL') {
- $val = 'null';
- }
- $values[] = " '$field' => $val";
- }
- $out .= " [\n";
- $out .= implode(",\n", $values);
- $out .= ",\n ],\n";
+ });
}
- $out .= ' ]';
- return $out;
+ return VarExporter::export($records, VarExporter::TRAILING_COMMA_IN_ARRAY, 2);
}
/**
diff --git a/app/vendor/cakephp/bake/src/Command/ModelCommand.php b/app/vendor/cakephp/bake/src/Command/ModelCommand.php
index 2be46282b..ccca5bfcc 100644
--- a/app/vendor/cakephp/bake/src/Command/ModelCommand.php
+++ b/app/vendor/cakephp/bake/src/Command/ModelCommand.php
@@ -21,8 +21,12 @@
use Cake\Console\Arguments;
use Cake\Console\ConsoleIo;
use Cake\Console\ConsoleOptionParser;
+use Cake\Console\Exception\StopException;
use Cake\Core\Configure;
+use Cake\Database\Connection;
+use Cake\Database\Driver\Sqlserver;
use Cake\Database\Exception;
+use Cake\Database\Schema\CachedCollection;
use Cake\Database\Schema\TableSchema;
use Cake\Database\Schema\TableSchemaInterface;
use Cake\Datasource\ConnectionManager;
@@ -78,6 +82,16 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
return static::CODE_SUCCESS;
}
+ // Disable caching before baking with connection
+ $connection = ConnectionManager::get($this->connection);
+ if ($connection instanceof Connection) {
+ $collection = $connection->getSchemaCollection();
+ if ($collection instanceof CachedCollection) {
+ $connection->getCacher()->clear();
+ $connection->cacheMetadata(false);
+ }
+ }
+
$this->bake($this->_camelize($name), $args, $io);
return static::CODE_SUCCESS;
@@ -95,6 +109,7 @@ public function bake(string $name, Arguments $args, ConsoleIo $io): void
{
$table = $this->getTable($name, $args);
$tableObject = $this->getTableObject($name, $table);
+ $this->validateNames($tableObject->getSchema());
$data = $this->getTableContext($tableObject, $table, $name, $args, $io);
$this->bakeTable($tableObject, $data, $args, $io);
$this->bakeEntity($tableObject, $data, $args, $io);
@@ -102,6 +117,25 @@ public function bake(string $name, Arguments $args, ConsoleIo $io): void
$this->bakeTest($tableObject->getAlias(), $args, $io);
}
+ /**
+ * Validates table and column names are supported.
+ *
+ * @param \Cake\Database\Schema\TableSchemaInterface $schema Table schema
+ * @return void
+ * @throws \Cake\Console\Exception\StopException When table or column names are not supported
+ */
+ public function validateNames(TableSchemaInterface $schema): void
+ {
+ foreach ($schema->columns() as $column) {
+ if (!is_string($column) || !ctype_alpha($column[0])) {
+ throw new StopException(sprintf(
+ 'Unable to bake table with integer column names or names that start with digits. Found `%s`.',
+ (string)$column
+ ));
+ }
+ }
+ }
+
/**
* Get table context for baking a given table.
*
@@ -472,16 +506,14 @@ public function findBelongsToMany(Table $model, array $associations): array
*
* @param \Cake\ORM\Table $model The model to introspect.
* @param \Cake\Console\Arguments $args CLI Arguments
- * @return string|null
- * @psalm-suppress InvalidReturnType
+ * @return array|string|null
*/
- public function getDisplayField(Table $model, Arguments $args): ?string
+ public function getDisplayField(Table $model, Arguments $args)
{
if ($args->getOption('display-field')) {
return (string)$args->getOption('display-field');
}
- /** @psalm-suppress InvalidReturnStatement */
return $model->getDisplayField();
}
@@ -848,7 +880,7 @@ public function getRules(Table $model, array $associations, Arguments $args): ar
$rules = [];
foreach ($fields as $fieldName) {
if (in_array($fieldName, $uniqueColumns, true)) {
- $rules[$fieldName] = ['name' => 'isUnique'];
+ $rules[$fieldName] = ['name' => 'isUnique', 'fields' => [$fieldName], 'options' => []];
}
}
foreach ($schema->constraints() as $name) {
@@ -856,10 +888,18 @@ public function getRules(Table $model, array $associations, Arguments $args): ar
if ($constraint['type'] !== TableSchema::CONSTRAINT_UNIQUE) {
continue;
}
- if (count($constraint['columns']) > 1) {
- continue;
+
+ $options = [];
+ $fields = $constraint['columns'];
+ foreach ($fields as $field) {
+ if ($schema->isNullable($field)) {
+ $allowMultiple = !ConnectionManager::get($this->connection)->getDriver() instanceof Sqlserver;
+ $options['allowMultipleNulls'] = $allowMultiple;
+ break;
+ }
}
- $rules[$constraint['columns'][0]] = ['name' => 'isUnique'];
+
+ $rules[$constraint['columns'][0]] = ['name' => 'isUnique', 'fields' => $fields, 'options' => $options];
}
if (empty($associations['belongsTo'])) {
@@ -867,7 +907,7 @@ public function getRules(Table $model, array $associations, Arguments $args): ar
}
foreach ($associations['belongsTo'] as $assoc) {
- $rules[$assoc['foreignKey']] = ['name' => 'existsIn', 'extra' => $assoc['alias']];
+ $rules[$assoc['foreignKey']] = ['name' => 'existsIn', 'extra' => $assoc['alias'], 'options' => []];
}
return $rules;
diff --git a/app/vendor/cakephp/bake/src/Command/TemplateCommand.php b/app/vendor/cakephp/bake/src/Command/TemplateCommand.php
index bb8bfd905..77b60e415 100644
--- a/app/vendor/cakephp/bake/src/Command/TemplateCommand.php
+++ b/app/vendor/cakephp/bake/src/Command/TemplateCommand.php
@@ -64,6 +64,13 @@ class TemplateCommand extends BakeCommand
*/
public $scaffoldActions = ['index', 'view', 'add', 'edit'];
+ /**
+ * Actions that exclude hidden fields
+ *
+ * @var string[]
+ */
+ public $excludeHiddenActions = ['index', 'view'];
+
/**
* AssociationFilter utility
*
@@ -270,7 +277,7 @@ protected function _loadController(ConsoleIo $io): array
$namespace = Configure::read('App.namespace');
$primaryKey = $displayField = $singularVar = $singularHumanName = null;
- $schema = $fields = $modelClass = null;
+ $schema = $fields = $hidden = $modelClass = null;
try {
$primaryKey = (array)$modelObject->getPrimaryKey();
$displayField = $modelObject->getDisplayField();
@@ -278,6 +285,7 @@ protected function _loadController(ConsoleIo $io): array
$singularHumanName = $this->_singularHumanName($this->controllerName);
$schema = $modelObject->getSchema();
$fields = $schema->columns();
+ $hidden = $modelObject->newEmptyEntity()->getHidden() ?: ['token', 'password', 'passwd'];
$modelClass = $this->modelName;
} catch (\Exception $exception) {
$io->error($exception->getMessage());
@@ -312,6 +320,7 @@ protected function _loadController(ConsoleIo $io): array
'singularHumanName',
'pluralHumanName',
'fields',
+ 'hidden',
'associations',
'keyFields',
'namespace'
@@ -373,6 +382,10 @@ public function getContent(Arguments $args, ConsoleIo $io, string $action, ?arra
$this->abort();
}
+ if (in_array($action, $this->excludeHiddenActions)) {
+ $vars['fields'] = array_diff($vars['fields'], $vars['hidden']);
+ }
+
$renderer = new TemplateRenderer($args->getOption('theme'));
$renderer->set('action', $action);
$renderer->set('plugin', $this->plugin);
diff --git a/app/vendor/cakephp/bake/src/Command/TestCommand.php b/app/vendor/cakephp/bake/src/Command/TestCommand.php
index abc840288..60be070e5 100644
--- a/app/vendor/cakephp/bake/src/Command/TestCommand.php
+++ b/app/vendor/cakephp/bake/src/Command/TestCommand.php
@@ -57,6 +57,7 @@ class TestCommand extends BakeCommand
'Form' => 'Form',
'Mailer' => 'Mailer',
'Command' => 'Command',
+ 'CommandHelper' => 'Command\Helper',
];
/**
@@ -78,6 +79,7 @@ class TestCommand extends BakeCommand
'Form' => 'Form',
'Mailer' => 'Mailer',
'Command' => 'Command',
+ 'CommandHelper' => 'Helper',
];
/**
@@ -576,7 +578,7 @@ public function generateConstructor(string $type, string $fullClassName): array
$pre .= " \$this->response = \$this->getMockBuilder('Cake\Http\Response')->getMock();";
$construct = "new {$className}(\$this->request, \$this->response);";
}
- if ($type === 'ShellHelper') {
+ if ($type === 'ShellHelper' || $type === 'CommandHelper') {
$pre = "\$this->stub = new ConsoleOutput();\n";
$pre .= ' $this->io = new ConsoleIo($this->stub);';
$construct = "new {$className}(\$this->io);";
@@ -626,6 +628,7 @@ public function generateProperties(string $type, string $subject, string $fullCl
];
break;
+ case 'CommandHelper':
case 'ShellHelper':
$properties[] = [
'description' => 'ConsoleOutput stub',
@@ -667,7 +670,7 @@ public function generateUses(string $type, string $fullClassName): array
if ($type === 'Helper') {
$uses[] = 'Cake\View\View';
}
- if ($type === 'ShellHelper') {
+ if ($type === 'ShellHelper' || $type === 'CommandHelper') {
$uses[] = 'Cake\TestSuite\Stub\ConsoleOutput';
$uses[] = 'Cake\Console\ConsoleIo';
}
diff --git a/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php b/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php
index 01c98c3c6..a513e65d4 100644
--- a/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php
+++ b/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php
@@ -69,7 +69,7 @@ public function getView(): View
}
$this->viewBuilder()
- ->setHelpers(['Bake.Bake', 'Bake.DocBlock'])
+ ->addhelpers(['Bake.Bake', 'Bake.DocBlock'])
->setTheme($this->theme);
$view = $this->createView(BakeView::class);
diff --git a/app/vendor/cakephp/bake/src/View/BakeView.php b/app/vendor/cakephp/bake/src/View/BakeView.php
index 1a5419710..87afbb16a 100644
--- a/app/vendor/cakephp/bake/src/View/BakeView.php
+++ b/app/vendor/cakephp/bake/src/View/BakeView.php
@@ -32,14 +32,6 @@ class BakeView extends TwigView
*/
public const BAKE_TEMPLATE_FOLDER = 'bake';
- /**
- * Path where bake's intermediary files are written.
- * Defaults to `TMP . 'bake' . DS`.
- *
- * @var string
- */
- protected $_tmpLocation;
-
/**
* @inheritDoc
*/
@@ -52,11 +44,6 @@ class BakeView extends TwigView
*/
public function initialize(): void
{
- $this->_tmpLocation = TMP . 'bake' . DS;
- if (!file_exists($this->_tmpLocation)) {
- mkdir($this->_tmpLocation);
- }
-
$this->setConfig('environment', [
'cache' => false,
'strict_variables' => Configure::read('Bake.twigStrictVariables', false),
diff --git a/app/vendor/cakephp/bake/templates/bake/Command/helper.twig b/app/vendor/cakephp/bake/templates/bake/Command/helper.twig
new file mode 100644
index 000000000..020d263fc
--- /dev/null
+++ b/app/vendor/cakephp/bake/templates/bake/Command/helper.twig
@@ -0,0 +1,37 @@
+{#
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link http://cakephp.org CakePHP(tm) Project
+ * @since 2.6.0
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+#}
+_io`.
+ *
+ * @param array $args The arguments for the helper.
+ * @return void
+ */
+ public function output(array $args): void
+ {
+ }
+}
diff --git a/app/vendor/cakephp/bake/templates/bake/Model/table.twig b/app/vendor/cakephp/bake/templates/bake/Model/table.twig
index edd58d349..7bbeff115 100644
--- a/app/vendor/cakephp/bake/templates/bake/Model/table.twig
+++ b/app/vendor/cakephp/bake/templates/bake/Model/table.twig
@@ -40,7 +40,7 @@ class {{ name }}Table extends Table
{% endif %}
{%- if displayField %}
- $this->setDisplayField('{{ displayField }}');
+ $this->setDisplayField({{ (displayField is iterable ? Bake.exportArray(displayField) : Bake.exportVar(displayField))|raw }});
{% endif %}
{%- if primaryKey %}
@@ -119,7 +119,12 @@ class {{ name }}Table extends Table
public function buildRules(RulesChecker $rules): RulesChecker
{
{% for field, rule in rulesChecker %}
- $rules->add($rules->{{ rule.name }}(['{{ field }}']{{ (rule.extra is defined and rule.extra ? (", '#{rule.extra}'") : '')|raw }}), ['errorField' => '{{ field }}']);
+{% set fields = rule.fields is defined ? Bake.exportArray(rule.fields) : Bake.exportVar(field) %}
+{% set options = '' %}
+{% for optionName, optionValue in rule.options %}
+ {%~ set options = (loop.first ? '[' : options) ~ "'#{optionName}' => " ~ Bake.exportVar(optionValue) ~ (loop.last ? ']' : ', ') %}
+{% endfor %}
+ $rules->add($rules->{{ rule.name }}({{ fields|raw }}{{ (rule.extra|default ? ", '#{rule.extra}'" : '')|raw }}{{ (options ? ', ' ~ options : '')|raw }}), ['errorField' => '{{ field }}']);
{% endfor %}
return $rules;
diff --git a/app/vendor/cakephp/bake/templates/bake/Plugin/phpunit.xml.dist.twig b/app/vendor/cakephp/bake/templates/bake/Plugin/phpunit.xml.dist.twig
index 2653e666e..3736109e8 100644
--- a/app/vendor/cakephp/bake/templates/bake/Plugin/phpunit.xml.dist.twig
+++ b/app/vendor/cakephp/bake/templates/bake/Plugin/phpunit.xml.dist.twig
@@ -32,19 +32,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
src/
-
diff --git a/app/vendor/cakephp/bake/templates/bake/Plugin/src/Plugin.php.twig b/app/vendor/cakephp/bake/templates/bake/Plugin/src/Plugin.php.twig
index 74b456757..fa078bbac 100644
--- a/app/vendor/cakephp/bake/templates/bake/Plugin/src/Plugin.php.twig
+++ b/app/vendor/cakephp/bake/templates/bake/Plugin/src/Plugin.php.twig
@@ -22,6 +22,7 @@ use Cake\Core\BasePlugin;
use Cake\Core\PluginApplicationInterface;
use Cake\Http\MiddlewareQueue;
use Cake\Routing\RouteBuilder;
+use Cake\Console\CommandCollection;
/**
* Plugin for {{ namespace }}
@@ -76,4 +77,19 @@ class Plugin extends BasePlugin
return $middlewareQueue;
}
+
+ /**
+ * Add commands for the plugin.
+ *
+ * @param \Cake\Console\CommandCollection $commands The command collection to update.
+ * @return \Cake\Console\CommandCollection
+ */
+ public function console(CommandCollection $commands) : CommandCollection
+ {
+ // Add your commands here
+
+ $commands = parent::console($commands);
+
+ return $commands;
+ }
}
diff --git a/app/vendor/cakephp/bake/templates/bake/Plugin/tests/bootstrap.php.twig b/app/vendor/cakephp/bake/templates/bake/Plugin/tests/bootstrap.php.twig
index bfad9f66f..07b207ba1 100644
--- a/app/vendor/cakephp/bake/templates/bake/Plugin/tests/bootstrap.php.twig
+++ b/app/vendor/cakephp/bake/templates/bake/Plugin/tests/bootstrap.php.twig
@@ -55,3 +55,18 @@ if (file_exists($root . '/config/bootstrap.php')) {
return;
}
+
+/**
+ * Load schema from a SQL dump file.
+ *
+ * If your plugin does not use database fixtures you can
+ * safely delete this.
+ *
+ * If you want to support multiple databases, consider
+ * using migrations to provide schema for your plugin,
+ * and using \Migrations\TestSuite\Migrator to load schema.
+ */
+use Cake\TestSuite\Schema\SchemaManager;
+
+// Load a schema dump file.
+SchemaManager::create('test', 'tests/schema.sql');
diff --git a/app/vendor/cakephp/bake/templates/bake/Plugin/tests/schema.sql.twig b/app/vendor/cakephp/bake/templates/bake/Plugin/tests/schema.sql.twig
new file mode 100644
index 000000000..cdf0465f7
--- /dev/null
+++ b/app/vendor/cakephp/bake/templates/bake/Plugin/tests/schema.sql.twig
@@ -0,0 +1 @@
+-- Test database schema for {{ plugin }}
diff --git a/app/vendor/cakephp/bake/templates/bake/element/Controller/add.twig b/app/vendor/cakephp/bake/templates/bake/element/Controller/add.twig
index 37d36e7f0..6dc3ab663 100644
--- a/app/vendor/cakephp/bake/templates/bake/element/Controller/add.twig
+++ b/app/vendor/cakephp/bake/templates/bake/element/Controller/add.twig
@@ -37,7 +37,7 @@
{%- for assoc in associations %}
{%- set otherName = Bake.getAssociatedTableAlias(modelObj, assoc) %}
{%- set otherPlural = otherName|variable %}
- ${{ otherPlural }} = $this->{{ currentModelName }}->{{ otherName }}->find('list', ['limit' => 200]);
+ ${{ otherPlural }} = $this->{{ currentModelName }}->{{ otherName }}->find('list', ['limit' => 200])->all();
{{- "\n" }}
{%- set compact = compact|merge(["'#{otherPlural}'"]) %}
{% endfor %}
diff --git a/app/vendor/cakephp/bake/templates/bake/element/Controller/edit.twig b/app/vendor/cakephp/bake/templates/bake/element/Controller/edit.twig
index b29da3b66..13e10e2d4 100644
--- a/app/vendor/cakephp/bake/templates/bake/element/Controller/edit.twig
+++ b/app/vendor/cakephp/bake/templates/bake/element/Controller/edit.twig
@@ -40,7 +40,7 @@
{% for assoc in belongsTo|merge(belongsToMany) %}
{%- set otherName = Bake.getAssociatedTableAlias(modelObj, assoc) %}
{%- set otherPlural = otherName|variable %}
- ${{ otherPlural }} = $this->{{ currentModelName }}->{{ otherName }}->find('list', ['limit' => 200]);
+ ${{ otherPlural }} = $this->{{ currentModelName }}->{{ otherName }}->find('list', ['limit' => 200])->all();
{{- "\n" }}
{%- set compact = compact|merge(["'#{otherPlural}'"]) %}
{% endfor %}
diff --git a/app/vendor/cakephp/bake/tests/Fixture/DatatypesFixture.php b/app/vendor/cakephp/bake/tests/Fixture/DatatypesFixture.php
index 620315650..c7f5757d4 100644
--- a/app/vendor/cakephp/bake/tests/Fixture/DatatypesFixture.php
+++ b/app/vendor/cakephp/bake/tests/Fixture/DatatypesFixture.php
@@ -35,6 +35,7 @@ class DatatypesFixture extends TestFixture
'tiny_int' => ['type' => 'tinyinteger'],
'bool' => ['type' => 'boolean', 'null' => false, 'default' => false],
'uuid' => ['type' => 'uuid'],
+ 'timestamp_field' => ['type' => 'timestamp'],
'_constraints' => ['primary' => ['type' => 'primary', 'columns' => ['id']]],
];
@@ -44,6 +45,6 @@ class DatatypesFixture extends TestFixture
* @var array
*/
public $records = [
- ['float_field' => 42.23, 'huge_int' => '1234567891234567891', 'small_int' => '1234', 'tiny_int' => '12', 'bool' => 0],
+ ['decimal_field' => '30.123', 'float_field' => 42.23, 'huge_int' => '1234567891234567891', 'small_int' => '1234', 'tiny_int' => '12', 'bool' => 0, 'timestamp_field' => '2007-03-17 01:16:23'],
];
}
diff --git a/app/vendor/cakephp/bake/tests/Fixture/HiddenFieldsFixture.php b/app/vendor/cakephp/bake/tests/Fixture/HiddenFieldsFixture.php
new file mode 100644
index 000000000..6928415c4
--- /dev/null
+++ b/app/vendor/cakephp/bake/tests/Fixture/HiddenFieldsFixture.php
@@ -0,0 +1,47 @@
+ ['type' => 'integer'],
+ 'password' => ['type' => 'string', 'null' => true, 'length' => 255],
+ 'auth_token' => ['type' => 'string', 'null' => true, 'length' => 255],
+ '_constraints' => [
+ 'primary' => ['type' => 'primary', 'columns' => ['id']],
+ ],
+ ];
+
+ /**
+ * records property
+ *
+ * @var array
+ */
+ public $records = [
+ ['password' => '$2a$10$u05j8FjsvLBNdfhBhc21LOuVMpzpabVXQ9OpC2wO3pSO0q6t7HHMO', 'auth_token' => '12345'],
+ ['password' => '$2a$10$u05j8FjsvLBNdfhBhc21LOuVMpzpabVXQ9OpC2wO3pSO0q6t7HHMO', 'auth_token' => '23456'],
+ ];
+}
diff --git a/app/vendor/cakephp/bake/tests/Fixture/UniqueFieldsFixture.php b/app/vendor/cakephp/bake/tests/Fixture/UniqueFieldsFixture.php
new file mode 100644
index 000000000..81dd98994
--- /dev/null
+++ b/app/vendor/cakephp/bake/tests/Fixture/UniqueFieldsFixture.php
@@ -0,0 +1,59 @@
+ ['type' => 'integer'],
+ 'username' => ['type' => 'string', 'null' => true, 'length' => 255],
+ 'email' => ['type' => 'string', 'null' => true, 'length' => 255],
+ 'field_1' => ['type' => 'string', 'null' => true, 'length' => 255],
+ 'field_2' => ['type' => 'string', 'null' => true,'length' => 255],
+ '_constraints' => [
+ 'primary' => [
+ 'type' => 'primary',
+ 'columns' => ['id'],
+ ],
+ 'multiple_fields_unique' => [
+ 'type' => 'unique',
+ 'columns' => [
+ 'field_1',
+ 'field_2',
+ ],
+ ],
+ ],
+ ];
+
+ /**
+ * records property
+ *
+ * @var array
+ */
+ public $records = [
+ ['field_1' => 'unique_value_1', 'field_2' => 'unique_value_2'],
+ ['field_1' => 'unique_value_2', 'field_2' => 'unique_value_3'],
+ ];
+}
diff --git a/app/vendor/cakephp/cakephp-codesniffer/.github/workflows/ci.yml b/app/vendor/cakephp/cakephp-codesniffer/.github/workflows/ci.yml
index 84355bcbb..f3149de54 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/.github/workflows/ci.yml
+++ b/app/vendor/cakephp/cakephp-codesniffer/.github/workflows/ci.yml
@@ -21,9 +21,7 @@ jobs:
prefer-lowest: 'prefer-lowest'
steps:
- - uses: actions/checkout@v1
- with:
- fetch-depth: 1
+ - uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
@@ -49,11 +47,11 @@ jobs:
- name: Composer Install
run: |
if [[ ${{ matrix.php-version }} == '8.0' ]]; then
- composer update --ignore-platform-reqs
+ composer install --ignore-platform-reqs
elif ${{ matrix.prefer-lowest == 'prefer-lowest' }}; then
composer update --prefer-lowest --prefer-stable
else
- composer update
+ composer install
fi
- name: Configure PHPUnit matcher
@@ -74,15 +72,14 @@ jobs:
runs-on: ubuntu-18.04
steps:
- - uses: actions/checkout@v1
- with:
- fetch-depth: 1
+ - uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.2'
extensions: mbstring, intl
+ tools: cs2pr
coverage: none
- name: Get composer cache directory
@@ -100,7 +97,7 @@ jobs:
key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}-${{ matrix.prefer-lowest }}
- name: Composer install
- run: composer update
+ run: composer install
- name: Run PHP CodeSniffer
- run: vendor/bin/phpcs --report=checkstyle CakePHP/
+ run: vendor/bin/phpcs --report=checkstyle CakePHP/ | cs2pr
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Classes/ReturnTypeHintSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Classes/ReturnTypeHintSniff.php
index a0267fa7a..9f1764cab 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Classes/ReturnTypeHintSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Classes/ReturnTypeHintSniff.php
@@ -61,13 +61,13 @@ public function process(File $phpcsFile, $stackPtr)
return [];
}
- $returnTokenType = $tokens[$startIndex]['type'];
- if ($returnTokenType !== 'T_SELF') {
+ $returnTokenCode = $tokens[$startIndex]['code'];
+ if ($returnTokenCode !== T_SELF) {
// Then we can only warn, but not auto-fix
$phpcsFile->addError(
'Chaining methods (@return $this) should not have any return-type-hint.',
$startIndex,
- 'TypeHint.Invalid.Self'
+ 'InvalidSelf'
);
return;
@@ -76,7 +76,7 @@ public function process(File $phpcsFile, $stackPtr)
$fix = $phpcsFile->addFixableError(
'Chaining methods (@return $this) should not have any return-type-hint (Remove "self").',
$startIndex,
- 'TypeHint.Invalid.Self'
+ 'InvalidSelf'
);
if (!$fix) {
return;
@@ -107,7 +107,7 @@ protected function isChainingMethod(File $phpCsFile, int $stackPointer): bool
$docBlockStartIndex = $tokens[$docBlockEndIndex]['comment_opener'];
for ($i = $docBlockStartIndex + 1; $i < $docBlockEndIndex; $i++) {
- if ($tokens[$i]['type'] !== 'T_DOC_COMMENT_TAG') {
+ if ($tokens[$i]['code'] !== T_DOC_COMMENT_TAG) {
continue;
}
if ($tokens[$i]['content'] !== '@return') {
@@ -116,7 +116,7 @@ protected function isChainingMethod(File $phpCsFile, int $stackPointer): bool
$classNameIndex = $i + 2;
- if ($tokens[$classNameIndex]['type'] !== 'T_DOC_COMMENT_STRING') {
+ if ($tokens[$classNameIndex]['code'] !== T_DOC_COMMENT_STRING) {
continue;
}
@@ -149,7 +149,7 @@ protected function assertNotThisOrStatic(File $phpCsFile, int $stackPointer): vo
$docBlockStartIndex = $tokens[$docBlockEndIndex]['comment_opener'];
for ($i = $docBlockStartIndex + 1; $i < $docBlockEndIndex; $i++) {
- if ($tokens[$i]['type'] !== 'T_DOC_COMMENT_TAG') {
+ if ($tokens[$i]['code'] !== T_DOC_COMMENT_TAG) {
continue;
}
if ($tokens[$i]['content'] !== '@return') {
@@ -158,7 +158,7 @@ protected function assertNotThisOrStatic(File $phpCsFile, int $stackPointer): vo
$classNameIndex = $i + 2;
- if ($tokens[$classNameIndex]['type'] !== 'T_DOC_COMMENT_STRING') {
+ if ($tokens[$classNameIndex]['code'] !== T_DOC_COMMENT_STRING) {
continue;
}
@@ -175,7 +175,7 @@ protected function assertNotThisOrStatic(File $phpCsFile, int $stackPointer): vo
$phpCsFile->addError(
'Class name repeated, expected `self` or `$this`.',
$classNameIndex,
- 'TypeHint.Invalid.Class'
+ 'InvalidClass'
);
}
}
@@ -197,14 +197,14 @@ protected function findRelatedDocBlock(File $phpCsFile, int $stackPointer): ?int
if (
!empty($tokens[$beginningOfLine - 2])
- && $tokens[$beginningOfLine - 2]['type'] === 'T_DOC_COMMENT_CLOSE_TAG'
+ && $tokens[$beginningOfLine - 2]['code'] === T_DOC_COMMENT_CLOSE_TAG
) {
return $beginningOfLine - 2;
}
if (
!empty($tokens[$beginningOfLine - 3])
- && $tokens[$beginningOfLine - 3]['type'] === 'T_DOC_COMMENT_CLOSE_TAG'
+ && $tokens[$beginningOfLine - 3]['code'] === T_DOC_COMMENT_CLOSE_TAG
) {
return $beginningOfLine - 3;
}
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/DocBlockAlignmentSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/DocBlockAlignmentSniff.php
index 5e75161b7..9d651c2a6 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/DocBlockAlignmentSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/DocBlockAlignmentSniff.php
@@ -74,7 +74,7 @@ public function process(File $phpcsFile, $stackPtr)
$phpcsFile->fixer->beginChangeset();
foreach ($tokensToIndent as $searchToken => $indent) {
$indentString = str_repeat(' ', $indent);
- $isOpenTag = $tokens[$searchToken]['type'] === 'T_DOC_COMMENT_OPEN_TAG';
+ $isOpenTag = $tokens[$searchToken]['code'] === T_DOC_COMMENT_OPEN_TAG;
if ($isOpenTag && $commentIndentation === 0) {
$phpcsFile->fixer->addContentBefore($searchToken, $indentString);
} else {
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/FunctionCommentSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/FunctionCommentSniff.php
index 7b7de4a11..cc59dd3e4 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/FunctionCommentSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Commenting/FunctionCommentSniff.php
@@ -15,8 +15,9 @@
namespace CakePHP\Sniffs\Commenting;
use PHP_CodeSniffer\Files\File;
-use PHP_CodeSniffer\Standards\PEAR\Sniffs\Commenting\FunctionCommentSniff as PearFunctionCommentSniff;
+use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Util\Common;
+use PHP_CodeSniffer\Util\Tokens;
/**
* Parses and verifies the doc comments for functions.
@@ -47,8 +48,139 @@
* @version Release: @package_version@
* @link http://pear.php.net/package/PHP_CodeSniffer
*/
-class FunctionCommentSniff extends PearFunctionCommentSniff
+class FunctionCommentSniff implements Sniff
{
+ /**
+ * Disable the check for functions with a lower visibility than the value given.
+ *
+ * Allowed values are public, protected, and private.
+ *
+ * @var string
+ */
+ public $minimumVisibility = 'private';
+
+ /**
+ * Array of methods which do not require a return type.
+ *
+ * @var array
+ */
+ public $specialMethods = [
+ '__construct',
+ '__destruct',
+ ];
+
+ /**
+ * Returns an array of tokens this test wants to listen for.
+ *
+ * @return array
+ */
+ public function register()
+ {
+ return [T_FUNCTION];
+ }
+
+ /**
+ * Processes this test, when one of its tokens is encountered.
+ *
+ * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
+ * @param int $stackPtr The position of the current token in the stack passed in $tokens.
+ * @return void
+ */
+ public function process(File $phpcsFile, $stackPtr)
+ {
+ $scopeModifier = $phpcsFile->getMethodProperties($stackPtr)['scope'];
+ if (
+ $scopeModifier === 'protected'
+ && $this->minimumVisibility === 'public'
+ || $scopeModifier === 'private'
+ && ($this->minimumVisibility === 'public' || $this->minimumVisibility === 'protected')
+ ) {
+ return;
+ }
+
+ $tokens = $phpcsFile->getTokens();
+ $ignore = Tokens::$methodPrefixes;
+ $ignore[] = T_WHITESPACE;
+
+ $commentEnd = $phpcsFile->findPrevious($ignore, $stackPtr - 1, null, true);
+ if ($tokens[$commentEnd]['code'] === T_COMMENT) {
+ // Inline comments might just be closing comments for
+ // control structures or functions instead of function comments
+ // using the wrong comment type. If there is other code on the line,
+ // assume they relate to that code.
+ $prev = $phpcsFile->findPrevious($ignore, $commentEnd - 1, null, true);
+ if ($prev !== false && $tokens[$prev]['line'] === $tokens[$commentEnd]['line']) {
+ $commentEnd = $prev;
+ }
+ }
+
+ if (
+ $tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG
+ && $tokens[$commentEnd]['code'] !== T_COMMENT
+ ) {
+ $previous = $commentEnd;
+ if (
+ $tokens[$commentEnd]['code'] === T_ATTRIBUTE_END
+ || $tokens[$commentEnd]['code'] === T_ATTRIBUTE
+ ) {
+ while ($tokens[$previous]['code'] !== T_ATTRIBUTE) {
+ $previous--;
+ }
+ $previous--;
+
+ $commentEnd = $phpcsFile->findPrevious($ignore, $previous, null, true);
+ if ($tokens[$commentEnd]['code'] === T_DOC_COMMENT_CLOSE_TAG) {
+ if ($tokens[$commentEnd]['line'] !== $tokens[$previous]['line'] - 1) {
+ $error = 'There must be no blank lines after the function comment';
+ $phpcsFile->addError($error, $commentEnd, 'SpacingAfter');
+ }
+
+ return;
+ }
+ }
+
+ $function = $phpcsFile->getDeclarationName($stackPtr);
+ $phpcsFile->addError(
+ 'Missing doc comment for function %s()',
+ $stackPtr,
+ 'Missing',
+ [$function]
+ );
+ $phpcsFile->recordMetric($stackPtr, 'Function has doc comment', 'no');
+
+ return;
+ } else {
+ $phpcsFile->recordMetric($stackPtr, 'Function has doc comment', 'yes');
+ }
+
+ if ($tokens[$commentEnd]['code'] === T_COMMENT) {
+ $phpcsFile->addError('You must use "/**" style comments for a function comment', $stackPtr, 'WrongStyle');
+
+ return;
+ }
+
+ if ($tokens[$commentEnd]['line'] !== $tokens[$stackPtr]['line'] - 1) {
+ $error = 'There must be no blank lines after the function comment';
+ $phpcsFile->addError($error, $commentEnd, 'SpacingAfter');
+ }
+
+ $commentStart = $tokens[$commentEnd]['comment_opener'];
+ foreach ($tokens[$commentStart]['comment_tags'] as $tag) {
+ if ($tokens[$tag]['content'] === '@see') {
+ // Make sure the tag isn't empty.
+ $string = $phpcsFile->findNext(T_DOC_COMMENT_STRING, $tag, $commentEnd);
+ if ($string === false || $tokens[$string]['line'] !== $tokens[$tag]['line']) {
+ $error = 'Content missing for @see tag in function comment';
+ $phpcsFile->addError($error, $tag, 'EmptySees');
+ }
+ }
+ }
+
+ $this->processReturn($phpcsFile, $stackPtr, $commentStart);
+ $this->processThrows($phpcsFile, $stackPtr, $commentStart);
+ $this->processParams($phpcsFile, $stackPtr, $commentStart);
+ }
+
/**
* Checks if the doc comment is an inheritDoc comment.
*
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Formatting/BlankLineBeforeReturnSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Formatting/BlankLineBeforeReturnSniff.php
index 7c9980555..1eb9faed5 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Formatting/BlankLineBeforeReturnSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/Formatting/BlankLineBeforeReturnSniff.php
@@ -58,24 +58,24 @@ public function process(File $phpcsFile, $stackPtr)
while ($current >= 0 && $tokens[$current]['line'] >= $previousLine) {
if (
$tokens[$current]['line'] == $previousLine
- && $tokens[$current]['type'] !== 'T_WHITESPACE'
- && $tokens[$current]['type'] !== 'T_COMMENT'
- && $tokens[$current]['type'] !== 'T_DOC_COMMENT_OPEN_TAG'
- && $tokens[$current]['type'] !== 'T_DOC_COMMENT_TAG'
- && $tokens[$current]['type'] !== 'T_DOC_COMMENT_STRING'
- && $tokens[$current]['type'] !== 'T_DOC_COMMENT_CLOSE_TAG'
- && $tokens[$current]['type'] !== 'T_DOC_COMMENT_WHITESPACE'
+ && $tokens[$current]['code'] !== T_WHITESPACE
+ && $tokens[$current]['code'] !== T_COMMENT
+ && $tokens[$current]['code'] !== T_DOC_COMMENT_OPEN_TAG
+ && $tokens[$current]['code'] !== T_DOC_COMMENT_TAG
+ && $tokens[$current]['code'] !== T_DOC_COMMENT_STRING
+ && $tokens[$current]['code'] !== T_DOC_COMMENT_CLOSE_TAG
+ && $tokens[$current]['code'] !== T_DOC_COMMENT_WHITESPACE
) {
- $prevLineTokens[] = $tokens[$current]['type'];
+ $prevLineTokens[] = $tokens[$current]['code'];
}
$current--;
}
if (
isset($prevLineTokens[0])
- && ($prevLineTokens[0] === 'T_OPEN_CURLY_BRACKET'
- || $prevLineTokens[0] === 'T_COLON'
- || $prevLineTokens[0] === 'T_OPEN_TAG')
+ && ($prevLineTokens[0] === T_OPEN_CURLY_BRACKET
+ || $prevLineTokens[0] === T_COLON
+ || $prevLineTokens[0] === T_OPEN_TAG)
) {
return;
} elseif (count($prevLineTokens) > 0) {
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/NamingConventions/ValidFunctionNameSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/NamingConventions/ValidFunctionNameSniff.php
index 12b886acf..7212f25d0 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/NamingConventions/ValidFunctionNameSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/NamingConventions/ValidFunctionNameSniff.php
@@ -41,6 +41,8 @@ class ValidFunctionNameSniff extends AbstractScopeSniff
'unset',
'sleep',
'wakeup',
+ 'serialize',
+ 'unserialize',
'toString',
'set_state',
'clone',
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/WhiteSpace/FunctionSpacingSniff.php b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/WhiteSpace/FunctionSpacingSniff.php
index 069b36597..f5b500856 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/WhiteSpace/FunctionSpacingSniff.php
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/Sniffs/WhiteSpace/FunctionSpacingSniff.php
@@ -57,7 +57,7 @@ public function process(File $phpCsFile, $stackPointer)
$nextContentIndex = $phpCsFile->findNext(T_WHITESPACE, $semicolonIndex + 1, null, true);
// Do not mess with the end of the class
- if ($tokens[$nextContentIndex]['type'] === 'T_CLOSE_CURLY_BRACKET') {
+ if ($tokens[$nextContentIndex]['code'] === T_CLOSE_CURLY_BRACKET) {
return;
}
@@ -86,7 +86,7 @@ public function process(File $phpCsFile, $stackPointer)
$nextContentIndex = $phpCsFile->findNext(T_WHITESPACE, $closingBraceIndex + 1, null, true);
// Do not mess with the end of the class
- if ($tokens[$nextContentIndex]['type'] === 'T_CLOSE_CURLY_BRACKET') {
+ if ($tokens[$nextContentIndex]['code'] === T_CLOSE_CURLY_BRACKET) {
return;
}
@@ -134,7 +134,12 @@ protected function assertNewLineAtTheBeginning(File $phpCsFile, $stackPointer)
}
$prevContentIndex = $phpCsFile->findPrevious(T_WHITESPACE, $firstTokenInLineIndex - 1, null, true);
- if ($tokens[$prevContentIndex]['type'] === 'T_DOC_COMMENT_CLOSE_TAG') {
+
+ if ($tokens[$prevContentIndex]['code'] === T_ATTRIBUTE_END) {
+ return;
+ }
+
+ if ($tokens[$prevContentIndex]['code'] === T_DOC_COMMENT_CLOSE_TAG) {
$firstTokenInLineIndex = $tokens[$prevContentIndex]['comment_opener'];
while ($tokens[$firstTokenInLineIndex - 1]['line'] === $line) {
$firstTokenInLineIndex--;
@@ -144,7 +149,7 @@ protected function assertNewLineAtTheBeginning(File $phpCsFile, $stackPointer)
$prevContentIndex = $phpCsFile->findPrevious(T_WHITESPACE, $firstTokenInLineIndex - 1, null, true);
// Do not mess with the start of the class
- if ($tokens[$prevContentIndex]['type'] === 'T_OPEN_CURLY_BRACKET') {
+ if ($tokens[$prevContentIndex]['code'] === T_OPEN_CURLY_BRACKET) {
return;
}
diff --git a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/ruleset.xml b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/ruleset.xml
index c205a1275..b85444eba 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/CakePHP/ruleset.xml
+++ b/app/vendor/cakephp/cakephp-codesniffer/CakePHP/ruleset.xml
@@ -8,127 +8,89 @@
/*/tmp/
tests/*/templates/*
-
-
-
-
- 0
-
-
- 0
+
+
+
+
+
+
+
-
-
- 0
+
+
+ */config/Migrations/*
-
- 0
+
+ */config/*
+ */tests/*
-
- 0
+
+ */src/Controller/*
+ */src/Command/*
+ */src/Shell/*
+ */tests/*
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
+
-
+
-
-
+
+
+
+
+ */tests/*
+
-
-
-
-
+
+
+
+ */tests/*
+
+
+
+
+
+ */config/Migrations/*
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- */tests/*
-
-
+
+
-
+
- */tests/*
-
-
-
-
- */config/*
- */tests/*
-
-
- */src/Controller/*
- */src/Command/*
- */src/Shell/*
- */tests/*
+
@@ -141,7 +103,11 @@
-
+
+
+
+
+
@@ -157,12 +123,8 @@
-
-
- 0
-
-
- 0
+
+
@@ -188,8 +150,11 @@
-
+
+
+
+
*/config/*
@@ -202,5 +167,15 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/vendor/cakephp/cakephp-codesniffer/README.md b/app/vendor/cakephp/cakephp-codesniffer/README.md
index 533515fa3..1d7e3943b 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/README.md
+++ b/app/vendor/cakephp/cakephp-codesniffer/README.md
@@ -1,6 +1,6 @@
# CakePHP Code Sniffer
-[](https://travis-ci.com/cakephp/cakephp-codesniffer)
+
[](https://packagist.org/packages/cakephp/cakephp-codesniffer)
[](https://packagist.org/packages/cakephp/cakephp-codesniffer)
[](LICENSE)
diff --git a/app/vendor/cakephp/cakephp-codesniffer/composer.json b/app/vendor/cakephp/cakephp-codesniffer/composer.json
index 3ceb62a7a..2fd121bee 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/composer.json
+++ b/app/vendor/cakephp/cakephp-codesniffer/composer.json
@@ -19,8 +19,8 @@
},
"require": {
"php": ">=7.2.0",
- "slevomat/coding-standard": "^6.3.6",
- "squizlabs/php_codesniffer": "~3.5.5"
+ "slevomat/coding-standard": "^6.3.6 || ^7.0",
+ "squizlabs/php_codesniffer": "^3.6"
},
"require-dev": {
"phpunit/phpunit": "^7.1"
diff --git a/app/vendor/cakephp/cakephp-codesniffer/docs/README.md b/app/vendor/cakephp/cakephp-codesniffer/docs/README.md
index 46929d92a..e5727fe37 100644
--- a/app/vendor/cakephp/cakephp-codesniffer/docs/README.md
+++ b/app/vendor/cakephp/cakephp-codesniffer/docs/README.md
@@ -1,6 +1,6 @@
# CakePHP ruleset
-The CakePHP standard contains 140 sniffs
+The CakePHP standard contains 136 sniffs
CakePHP (19 sniffs)
-------------------
@@ -82,11 +82,10 @@ PSR12 (16 sniffs)
- PSR12.Properties.ConstantVisibility
- PSR12.Traits.UseDeclaration
-PSR2 (12 sniffs)
-----------------
+PSR2 (9 sniffs)
+---------------
- PSR2.Classes.ClassDeclaration
- PSR2.Classes.PropertyDeclaration
-- PSR2.ControlStructures.ControlStructureSpacing
- PSR2.ControlStructures.ElseIfDeclaration
- PSR2.ControlStructures.SwitchDeclaration
- PSR2.Files.ClosingTag
@@ -94,8 +93,6 @@ PSR2 (12 sniffs)
- PSR2.Methods.FunctionCallSignature
- PSR2.Methods.FunctionClosingBrace
- PSR2.Methods.MethodDeclaration
-- PSR2.Namespaces.NamespaceDeclaration
-- PSR2.Namespaces.UseDeclaration
SlevomatCodingStandard (32 sniffs)
----------------------------------
@@ -166,4 +163,4 @@ Squiz (29 sniffs)
Zend (1 sniff)
---------------
-- Zend.NamingConventions.ValidVariableName
+- Zend.NamingConventions.ValidVariableName
\ No newline at end of file
diff --git a/app/vendor/cakephp/cakephp/README.md b/app/vendor/cakephp/cakephp/README.md
index 259e3fb1d..00314c002 100644
--- a/app/vendor/cakephp/cakephp/README.md
+++ b/app/vendor/cakephp/cakephp/README.md
@@ -7,8 +7,8 @@
-
-
+
+
@@ -81,12 +81,5 @@ tests for CakePHP by doing the following:
# Security
-If you’ve found a security issue in CakePHP, please use the following procedure instead of the normal bug reporting system. Instead of using the bug tracker, mailing list or IRC please send an email to security [at] cakephp.org. Emails sent to this address go to the CakePHP core team on a private mailing list.
-
-For each report, we try to first confirm the vulnerability. Once confirmed, the CakePHP team will take the following actions:
-
-- Acknowledge to the reporter that we’ve received the issue, and are working on a fix. We ask that the reporter keep the issue confidential until we announce it.
-- Get a fix/patch prepared.
-- Prepare a post describing the vulnerability, and the possible exploits.
-- Release new versions of all affected versions.
-- Prominently feature the problem in the release announcement.
+If you’ve found a security issue in CakePHP, please use the procedure
+described in [SECURITY.md](.github/SECURITY.md).
diff --git a/app/vendor/cakephp/cakephp/SECURITY.md b/app/vendor/cakephp/cakephp/SECURITY.md
deleted file mode 100644
index 551efc470..000000000
--- a/app/vendor/cakephp/cakephp/SECURITY.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-We support fixing security issues on the following releases:
-
-| Version | Supported | Security fixes until
-| ------- | ------------------ | --------------------
-| 4.x | :white_check_mark: |
-| 3.10.x | :white_check_mark: | 15th December 2022 (36 months after 4.0.0)
-| <= 3.9 | :x: |
-| 2.10.x | :x: | 15th June 2021 (18 months after 4.0.0)
-| <= 2.9 | :x: |
-
-## Reporting a Vulnerability
-
-If you’ve found a security issue in CakePHP, please use the following procedure
-instead of the normal bug reporting system. Instead of using the bug tracker,
-mailing list or IRC please send an email to security [at] cakephp.org. Emails
-sent to this address go to the CakePHP core team on a private mailing list.
-
-For each report, we try to first confirm the vulnerability. Once confirmed,
-the CakePHP team will take the following actions:
-
-* Acknowledge to the reporter that we’ve received the issue, and are
- working on a fix. We ask that the reporter keep the issue confidential until we announce it.
-* Get a fix/patch prepared.
-* Prepare a post describing the vulnerability, and the possible exploits.
-* Release new versions of all affected versions.
-* Prominently feature the problem in the release announcement
diff --git a/app/vendor/cakephp/cakephp/VERSION.txt b/app/vendor/cakephp/cakephp/VERSION.txt
index 741c5af23..71215e8c5 100644
--- a/app/vendor/cakephp/cakephp/VERSION.txt
+++ b/app/vendor/cakephp/cakephp/VERSION.txt
@@ -16,4 +16,4 @@
// @license https://opensource.org/licenses/mit-license.php MIT License
// +--------------------------------------------------------------------------------------------+ //
////////////////////////////////////////////////////////////////////////////////////////////////////
-4.2.10
+4.3.0
diff --git a/app/vendor/cakephp/cakephp/composer.json b/app/vendor/cakephp/cakephp/composer.json
index 2575cda2d..ef3bd4b9b 100644
--- a/app/vendor/cakephp/cakephp/composer.json
+++ b/app/vendor/cakephp/cakephp/composer.json
@@ -26,11 +26,11 @@
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "cakephp/chronos": "^2.0",
+ "cakephp/chronos": "^2.2",
"composer/ca-bundle": "^1.2",
"laminas/laminas-diactoros": "^2.2.2",
"laminas/laminas-httphandlerrunner": "^1.1",
- "league/container": "^3.2",
+ "league/container": "^4.1.1",
"psr/http-client": "^1.0",
"psr/http-server-handler": "^1.0",
"psr/http-server-middleware": "^1.0",
@@ -55,8 +55,8 @@
"cakephp/validation": "self.version"
},
"require-dev": {
- "cakephp/cakephp-codesniffer": "^4.0",
- "mikey179/vfsstream": "^1.6",
+ "cakephp/cakephp-codesniffer": "^4.5",
+ "mikey179/vfsstream": "^1.6.10",
"paragonie/csp-builder": "^2.3",
"phpunit/phpunit": "^8.5 || ^9.3"
},
@@ -87,6 +87,7 @@
"Cake\\PHPStan\\": "tests/PHPStan/",
"Cake\\Test\\": "tests/",
"TestApp\\": "tests/test_app/TestApp/",
+ "TestApp\\Test\\": "tests/test_app/TestApp/tests/",
"TestPlugin\\": "tests/test_app/Plugin/TestPlugin/src/",
"TestPlugin\\Test\\": "tests/test_app/Plugin/TestPlugin/tests/",
"TestPluginTwo\\": "tests/test_app/Plugin/TestPluginTwo/src/",
@@ -108,7 +109,8 @@
"@phpstan",
"@psalm"
],
- "stan-setup": "cp composer.json composer.backup && composer require --dev phpstan/phpstan:0.12.94 psalm/phar:~4.9.3 && mv composer.backup composer.json",
+ "stan-tests": "phpstan.phar analyze -c tests/phpstan.neon",
+ "stan-setup": "cp composer.json composer.backup && composer require --dev symfony/polyfill-php81 phpstan/phpstan:0.12.96 psalm/phar:~4.10.0 && mv composer.backup composer.json",
"test": "phpunit",
"test-coverage": "phpunit --coverage-clover=clover.xml"
},
diff --git a/app/vendor/cakephp/cakephp/src/Auth/AbstractPasswordHasher.php b/app/vendor/cakephp/cakephp/src/Auth/AbstractPasswordHasher.php
index 9b55f7978..c9f3b4084 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/AbstractPasswordHasher.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/AbstractPasswordHasher.php
@@ -30,14 +30,14 @@ abstract class AbstractPasswordHasher
*
* These are merged with user-provided config when the object is used.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [];
/**
* Constructor
*
- * @param array $config Array of config.
+ * @param array $config Array of config.
*/
public function __construct(array $config = [])
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/BaseAuthenticate.php b/app/vendor/cakephp/cakephp/src/Auth/BaseAuthenticate.php
index eccd18622..61dc2b14c 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/BaseAuthenticate.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/BaseAuthenticate.php
@@ -44,7 +44,7 @@ abstract class BaseAuthenticate implements EventListenerInterface
* or an array containing `className` key, any other keys will be passed as
* config to the class. Defaults to 'Default'.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'fields' => [
@@ -71,7 +71,7 @@ abstract class BaseAuthenticate implements EventListenerInterface
protected $_passwordHasher;
/**
- * Whether or not the user authenticated by this class
+ * Whether the user authenticated by this class
* requires their password to be rehashed with another algorithm.
*
* @var bool
@@ -82,7 +82,7 @@ abstract class BaseAuthenticate implements EventListenerInterface
* Constructor
*
* @param \Cake\Controller\ComponentRegistry $registry The Component registry used on this request.
- * @param array $config Array of config to use.
+ * @param array $config Array of config to use.
*/
public function __construct(ComponentRegistry $registry, array $config = [])
{
@@ -99,7 +99,7 @@ public function __construct(ComponentRegistry $registry, array $config = [])
* @param string $username The username/identifier.
* @param string|null $password The password, if not provided password checking is skipped
* and result of find is returned.
- * @return array|false Either false on failure, or an array of user data.
+ * @return array|false Either false on failure, or an array of user data.
*/
protected function _findUser(string $username, ?string $password = null)
{
@@ -171,9 +171,7 @@ protected function _query(string $username): Query
$finder = key($finder);
}
- if (!isset($options['username'])) {
- $options['username'] = $username;
- }
+ $options['username'] = $options['username'] ?? $username;
return $table->find($finder, $options);
}
@@ -197,7 +195,7 @@ public function passwordHasher(): AbstractPasswordHasher
}
/**
- * Returns whether or not the password stored in the repository for the logged in user
+ * Returns whether the password stored in the repository for the logged in user
* requires to be rehashed with another algorithm
*
* @return bool
@@ -212,7 +210,7 @@ public function needsPasswordRehash(): bool
*
* @param \Cake\Http\ServerRequest $request Request to get authentication information from.
* @param \Cake\Http\Response $response A response object that can have headers added.
- * @return array|false Either false on failure, or an array of user data on success.
+ * @return array|false Either false on failure, or an array of user data on success.
*/
abstract public function authenticate(ServerRequest $request, Response $response);
@@ -221,7 +219,7 @@ abstract public function authenticate(ServerRequest $request, Response $response
* systems like basic and digest auth.
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return array|false Either false or an array of user information
+ * @return array|false Either false or an array of user information
*/
public function getUser(ServerRequest $request)
{
@@ -233,7 +231,7 @@ public function getUser(ServerRequest $request)
* can be:
*
* - Null - No action taken, AuthComponent should return appropriate response.
- * - Cake\Http\Response - A response object, which will cause AuthComponent to
+ * - \Cake\Http\Response - A response object, which will cause AuthComponent to
* simply return that response.
*
* @param \Cake\Http\ServerRequest $request A request object.
@@ -258,7 +256,7 @@ public function unauthenticated(ServerRequest $request, Response $response)
* function should have signature like `logout(EventInterface $event, array $user)`
* where `$user` is the user about to be logged out.
*
- * @return array List of events this class listens to. Defaults to `[]`.
+ * @return array List of events this class listens to. Defaults to `[]`.
*/
public function implementedEvents(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/BaseAuthorize.php b/app/vendor/cakephp/cakephp/src/Auth/BaseAuthorize.php
index 2b2b2b7cc..49c50ce75 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/BaseAuthorize.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/BaseAuthorize.php
@@ -39,7 +39,7 @@ abstract class BaseAuthorize
/**
* Default config for authorize objects.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [];
@@ -47,7 +47,7 @@ abstract class BaseAuthorize
* Constructor
*
* @param \Cake\Controller\ComponentRegistry $registry The controller for this request.
- * @param array $config An array of config. This class does not use any config.
+ * @param array $config An array of config. This class does not use any config.
*/
public function __construct(ComponentRegistry $registry, array $config = [])
{
@@ -58,7 +58,7 @@ public function __construct(ComponentRegistry $registry, array $config = [])
/**
* Checks user authorization.
*
- * @param array|\ArrayAccess $user Active user data
+ * @param \ArrayAccess|array $user Active user data
* @param \Cake\Http\ServerRequest $request Request instance.
* @return bool
*/
diff --git a/app/vendor/cakephp/cakephp/src/Auth/BasicAuthenticate.php b/app/vendor/cakephp/cakephp/src/Auth/BasicAuthenticate.php
index a09d438a5..b7ff21612 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/BasicAuthenticate.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/BasicAuthenticate.php
@@ -70,7 +70,7 @@ public function authenticate(ServerRequest $request, Response $response)
* Get a user based on information in the request. Used by cookie-less auth for stateless clients.
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return array|false Either false or an array of user information
+ * @return array|false Either false or an array of user information
*/
public function getUser(ServerRequest $request)
{
@@ -104,7 +104,7 @@ public function unauthenticated(ServerRequest $request, Response $response)
* Generate the login headers
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return string[] Headers for logging in.
+ * @return array Headers for logging in.
*/
public function loginHeaders(ServerRequest $request): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/ControllerAuthorize.php b/app/vendor/cakephp/cakephp/src/Auth/ControllerAuthorize.php
index 58355ba78..8cd8b8717 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/ControllerAuthorize.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/ControllerAuthorize.php
@@ -24,7 +24,7 @@
/**
* An authorization adapter for AuthComponent. Provides the ability to authorize
* using a controller callback. Your controller's isAuthorized() method should
- * return a boolean to indicate whether or not the user is authorized.
+ * return a boolean to indicate whether the user is authorized.
*
* ```
* public function isAuthorized($user)
@@ -78,7 +78,7 @@ public function controller(?Controller $controller = null): Controller
/**
* Checks user authorization using a controller callback.
*
- * @param array|\ArrayAccess $user Active user data
+ * @param \ArrayAccess|array $user Active user data
* @param \Cake\Http\ServerRequest $request Request instance.
* @throws \Cake\Core\Exception\CakeException If controller does not have method `isAuthorized()`.
* @return bool
diff --git a/app/vendor/cakephp/cakephp/src/Auth/DefaultPasswordHasher.php b/app/vendor/cakephp/cakephp/src/Auth/DefaultPasswordHasher.php
index f0a3b4196..35a8246ce 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/DefaultPasswordHasher.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/DefaultPasswordHasher.php
@@ -31,7 +31,7 @@ class DefaultPasswordHasher extends AbstractPasswordHasher
* - `hashOptions` - Associative array of options. Check the PHP manual for
* supported options for each hash type. Defaults to empty array.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'hashType' => PASSWORD_DEFAULT,
diff --git a/app/vendor/cakephp/cakephp/src/Auth/DigestAuthenticate.php b/app/vendor/cakephp/cakephp/src/Auth/DigestAuthenticate.php
index b5ecda934..65921063c 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/DigestAuthenticate.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/DigestAuthenticate.php
@@ -82,7 +82,7 @@ class DigestAuthenticate extends BasicAuthenticate
*
* @param \Cake\Controller\ComponentRegistry $registry The Component registry
* used on this request.
- * @param array $config Array of config to use.
+ * @param array $config Array of config to use.
*/
public function __construct(ComponentRegistry $registry, array $config = [])
{
@@ -101,7 +101,7 @@ public function __construct(ComponentRegistry $registry, array $config = [])
* Get a user based on information in the request. Used by cookie-less auth for stateless clients.
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return array|false Either false or an array of user information
+ * @return array|false Either false or an array of user information
*/
public function getUser(ServerRequest $request)
{
@@ -140,7 +140,7 @@ public function getUser(ServerRequest $request)
* Gets the digest headers from the request/environment.
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return array|null Array of digest information.
+ * @return array|null Array of digest information.
*/
protected function _getDigest(ServerRequest $request): ?array
{
@@ -188,7 +188,7 @@ public function parseAuthData(string $digest): ?array
/**
* Generate the response hash for a given digest array.
*
- * @param array $digest Digest information containing data from DigestAuthenticate::parseAuthData().
+ * @param array $digest Digest information containing data from DigestAuthenticate::parseAuthData().
* @param string $password The digest hash password generated with DigestAuthenticate::password()
* @param string $method Request method
* @return string Response hash
@@ -219,7 +219,7 @@ public static function password(string $username, string $password, string $real
* Generate the login headers
*
* @param \Cake\Http\ServerRequest $request Request object.
- * @return string[] Headers for logging in.
+ * @return array Headers for logging in.
*/
public function loginHeaders(ServerRequest $request): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/FallbackPasswordHasher.php b/app/vendor/cakephp/cakephp/src/Auth/FallbackPasswordHasher.php
index b45d8d811..7c4de0518 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/FallbackPasswordHasher.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/FallbackPasswordHasher.php
@@ -26,7 +26,7 @@ class FallbackPasswordHasher extends AbstractPasswordHasher
/**
* Default config for this object.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'hashers' => [],
@@ -35,14 +35,14 @@ class FallbackPasswordHasher extends AbstractPasswordHasher
/**
* Holds the list of password hasher objects that will be used
*
- * @var \Cake\Auth\AbstractPasswordHasher[]
+ * @var array<\Cake\Auth\AbstractPasswordHasher>
*/
protected $_hashers = [];
/**
* Constructor
*
- * @param array $config configuration options for this object. Requires the
+ * @param array $config configuration options for this object. Requires the
* `hashers` key to be present in the array with a list of other hashers to be
* used.
*/
diff --git a/app/vendor/cakephp/cakephp/src/Auth/FormAuthenticate.php b/app/vendor/cakephp/cakephp/src/Auth/FormAuthenticate.php
index 41e59315f..953bbcaab 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/FormAuthenticate.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/FormAuthenticate.php
@@ -51,7 +51,7 @@ class FormAuthenticate extends BaseAuthenticate
* Checks the fields to ensure they are supplied.
*
* @param \Cake\Http\ServerRequest $request The request that contains login information.
- * @param array $fields The fields to be checked.
+ * @param array $fields The fields to be checked.
* @return bool False if the fields have not been supplied. True if they exist.
*/
protected function _checkFields(ServerRequest $request, array $fields): bool
@@ -73,7 +73,7 @@ protected function _checkFields(ServerRequest $request, array $fields): bool
*
* @param \Cake\Http\ServerRequest $request The request that contains login information.
* @param \Cake\Http\Response $response Unused response object.
- * @return array|false False on login failure. An array of User data on success.
+ * @return array|false False on login failure. An array of User data on success.
*/
public function authenticate(ServerRequest $request, Response $response)
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/PasswordHasherFactory.php b/app/vendor/cakephp/cakephp/src/Auth/PasswordHasherFactory.php
index 52a829199..7bdc352b1 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/PasswordHasherFactory.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/PasswordHasherFactory.php
@@ -27,11 +27,11 @@ class PasswordHasherFactory
/**
* Returns password hasher object out of a hasher name or a configuration array
*
- * @param string|array $passwordHasher Name of the password hasher or an array with
+ * @param array|string $passwordHasher Name of the password hasher or an array with
* at least the key `className` set to the name of the class to use
* @return \Cake\Auth\AbstractPasswordHasher Password hasher instance
* @throws \RuntimeException If password hasher class not found or
- * it does not extend Cake\Auth\AbstractPasswordHasher
+ * it does not extend {@link \Cake\Auth\AbstractPasswordHasher}
*/
public static function build($passwordHasher): AbstractPasswordHasher
{
diff --git a/app/vendor/cakephp/cakephp/src/Auth/Storage/MemoryStorage.php b/app/vendor/cakephp/cakephp/src/Auth/Storage/MemoryStorage.php
index 6c0a6f9c9..0be0d1449 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/Storage/MemoryStorage.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/Storage/MemoryStorage.php
@@ -31,7 +31,7 @@ class MemoryStorage implements StorageInterface
/**
* Redirect URL.
*
- * @var string|array|null
+ * @var array|string|null
*/
protected $_redirectUrl;
@@ -75,5 +75,7 @@ public function redirectUrl($url = null)
}
$this->_redirectUrl = $url;
+
+ return null;
}
}
diff --git a/app/vendor/cakephp/cakephp/src/Auth/Storage/SessionStorage.php b/app/vendor/cakephp/cakephp/src/Auth/Storage/SessionStorage.php
index 07ff8b75b..bfb6463ff 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/Storage/SessionStorage.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/Storage/SessionStorage.php
@@ -52,7 +52,7 @@ class SessionStorage implements StorageInterface
* - `key` - Session key used to store user record.
* - `redirect` - Session key used to store redirect URL.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'key' => 'Auth.User',
@@ -64,7 +64,7 @@ class SessionStorage implements StorageInterface
*
* @param \Cake\Http\ServerRequest $request Request instance.
* @param \Cake\Http\Response $response Response instance.
- * @param array $config Configuration list.
+ * @param array $config Configuration list.
*/
public function __construct(ServerRequest $request, Response $response, array $config = [])
{
@@ -96,7 +96,7 @@ public function read()
*
* The session id is also renewed to help mitigate issues with session replays.
*
- * @param array|\ArrayAccess $user User record.
+ * @param \ArrayAccess|array $user User record.
* @return void
*/
public function write($user): void
@@ -138,5 +138,7 @@ public function redirectUrl($url = null)
}
$this->_session->write($this->_config['redirect'], $url);
+
+ return null;
}
}
diff --git a/app/vendor/cakephp/cakephp/src/Auth/Storage/StorageInterface.php b/app/vendor/cakephp/cakephp/src/Auth/Storage/StorageInterface.php
index 1da65c48a..6e8aadd4a 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/Storage/StorageInterface.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/Storage/StorageInterface.php
@@ -51,7 +51,7 @@ public function delete(): void;
*
* @param mixed $url Redirect URL. If `null` returns current URL. If `false`
* deletes currently set URL.
- * @return string|array|null
+ * @return array|string|null
*/
public function redirectUrl($url = null);
}
diff --git a/app/vendor/cakephp/cakephp/src/Auth/WeakPasswordHasher.php b/app/vendor/cakephp/cakephp/src/Auth/WeakPasswordHasher.php
index 6ac275a37..5028b85c8 100644
--- a/app/vendor/cakephp/cakephp/src/Auth/WeakPasswordHasher.php
+++ b/app/vendor/cakephp/cakephp/src/Auth/WeakPasswordHasher.php
@@ -30,7 +30,7 @@ class WeakPasswordHasher extends AbstractPasswordHasher
/**
* Default config for this object.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'hashType' => null,
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Cache.php b/app/vendor/cakephp/cakephp/src/Cache/Cache.php
index 56a9c34da..0c8d8d37f 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Cache.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Cache.php
@@ -71,7 +71,7 @@ class Cache
* An array mapping URL schemes to fully qualified caching engine
* class names.
*
- * @var string[]
+ * @var array
* @psalm-var array
*/
protected static $_dsnClassMap = [
@@ -85,7 +85,7 @@ class Cache
];
/**
- * Flag for tracking whether or not caching is enabled.
+ * Flag for tracking whether caching is enabled.
*
* @var bool
*/
@@ -94,7 +94,7 @@ class Cache
/**
* Group to Config mapping
*
- * @var array
+ * @var array
*/
protected static $_groups = [];
@@ -466,7 +466,7 @@ public static function clear(string $config = 'default'): bool
/**
* Delete all keys from the cache from all configurations.
*
- * @return bool[] Status code. For each configuration, it reports the status of the operation
+ * @return array Status code. For each configuration, it reports the status of the operation
*/
public static function clearAll(): array
{
@@ -503,8 +503,8 @@ public static function clearGroup(string $group, string $config = 'default'): bo
* $configs will equal to `['posts' => ['daily', 'weekly']]`
* Calling this method will load all the configured engines.
*
- * @param string|null $group group name or null to retrieve all group mappings
- * @return array map of group and all configuration that has the same group
+ * @param string|null $group Group name or null to retrieve all group mappings
+ * @return array Map of group and all configuration that has the same group
* @throws \Cake\Cache\InvalidArgumentException
*/
public static function groupConfigs(?string $group = null): array
@@ -548,7 +548,7 @@ public static function disable(): void
}
/**
- * Check whether or not caching is enabled.
+ * Check whether caching is enabled.
*
* @return bool
*/
diff --git a/app/vendor/cakephp/cakephp/src/Cache/CacheEngine.php b/app/vendor/cakephp/cakephp/src/Cache/CacheEngine.php
index 56db69536..8e9fc613a 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/CacheEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/CacheEngine.php
@@ -49,7 +49,7 @@ abstract class CacheEngine implements CacheInterface, CacheEngineInterface
* - `warnOnWriteFailures` Some engines, such as ApcuEngine, may raise warnings on
* write failures.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'duration' => 3600,
@@ -72,7 +72,7 @@ abstract class CacheEngine implements CacheInterface, CacheEngineInterface
* Called automatically by the cache frontend. Merge the runtime config with the defaults
* before use.
*
- * @param array $config Associative array of parameters for the engine
+ * @param array $config Associative array of parameters for the engine
* @return bool True if the engine has been successfully initialized, false if not
*/
public function init(array $config = []): bool
@@ -317,7 +317,7 @@ abstract public function clearGroup(string $group): bool;
* and returns the `group value` for each of them, this is
* the token representing each group in the cache key
*
- * @return string[]
+ * @return array
*/
public function groups(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Cache/CacheRegistry.php b/app/vendor/cakephp/cakephp/src/Cache/CacheRegistry.php
index fb6d0ab06..1c5aa4660 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/CacheRegistry.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/CacheRegistry.php
@@ -24,7 +24,7 @@
/**
* An object registry for cache engines.
*
- * Used by Cake\Cache\Cache to load and manage cache engines.
+ * Used by {@link \Cake\Cache\Cache} to load and manage cache engines.
*
* @extends \Cake\Core\ObjectRegistry<\Cake\Cache\CacheEngine>
*/
@@ -64,9 +64,9 @@ protected function _throwMissingClassError(string $class, ?string $plugin): void
*
* Part of the template method for Cake\Core\ObjectRegistry::load()
*
- * @param string|\Cake\Cache\CacheEngine $class The classname or object to make.
+ * @param \Cake\Cache\CacheEngine|string $class The classname or object to make.
* @param string $alias The alias of the object.
- * @param array $config An array of settings to use for the cache engine.
+ * @param array $config An array of settings to use for the cache engine.
* @return \Cake\Cache\CacheEngine The constructed CacheEngine class.
* @throws \RuntimeException when an object doesn't implement the correct interface.
*/
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/ApcuEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/ApcuEngine.php
index 170ea4a43..bc90e8f0f 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/ApcuEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/ApcuEngine.php
@@ -29,7 +29,7 @@ class ApcuEngine extends CacheEngine
* Contains the compiled group names
* (prefixed with the global configuration prefix)
*
- * @var string[]
+ * @var array
*/
protected $_compiledGroupNames = [];
@@ -38,7 +38,7 @@ class ApcuEngine extends CacheEngine
*
* Called automatically by the cache frontend
*
- * @param array $config array of setting for the engine
+ * @param array $config array of setting for the engine
* @return bool True if the engine has been successfully initialized, false if not
*/
public function init(array $config = []): bool
@@ -183,7 +183,7 @@ public function add(string $key, $value): bool
* If the group initial value was not found, then it initializes
* the group accordingly.
*
- * @return string[]
+ * @return array
* @link https://secure.php.net/manual/en/function.apcu-fetch.php
* @link https://secure.php.net/manual/en/function.apcu-store.php
*/
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/ArrayEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/ArrayEngine.php
index c33608204..9050537eb 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/ArrayEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/ArrayEngine.php
@@ -152,7 +152,7 @@ public function clear(): bool
* If the group initial value was not found, then it initializes
* the group accordingly.
*
- * @return string[]
+ * @return array
*/
public function groups(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/FileEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/FileEngine.php
index 22ec33ce0..e7ce5ea2c 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/FileEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/FileEngine.php
@@ -57,7 +57,7 @@ class FileEngine extends CacheEngine
* cache::gc from ever being called automatically.
* - `serialize` Should cache objects be serialized first.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'duration' => 3600,
@@ -81,7 +81,7 @@ class FileEngine extends CacheEngine
*
* Called automatically by the cache frontend.
*
- * @param array $config array of setting for the engine
+ * @param array $config array of setting for the engine
* @return bool True if the engine has been successfully initialized, false if not
*/
public function init(array $config = []): bool
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/MemcachedEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/MemcachedEngine.php
index 781c4cfc7..9bdd3638d 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/MemcachedEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/MemcachedEngine.php
@@ -60,7 +60,7 @@ class MemcachedEngine extends CacheEngine
* - `options` - Additional options for the memcached client. Should be an array of option => value.
* Use the \Memcached::OPT_* constants as keys.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'compress' => false,
@@ -82,12 +82,12 @@ class MemcachedEngine extends CacheEngine
*
* Memcached must be compiled with JSON and igbinary support to use these engines
*
- * @var array
+ * @var array
*/
protected $_serializers = [];
/**
- * @var string[]
+ * @var array
*/
protected $_compiledGroupNames = [];
@@ -96,7 +96,7 @@ class MemcachedEngine extends CacheEngine
*
* Called automatically by the cache frontend
*
- * @param array $config array of setting for the engine
+ * @param array $config array of setting for the engine
* @return bool True if the engine has been successfully initialized, false if not
* @throws \InvalidArgumentException When you try use authentication without
* Memcached compiled with SASL support
@@ -470,7 +470,7 @@ public function add(string $key, $value): bool
* If the group initial value was not found, then it initializes
* the group accordingly.
*
- * @return string[]
+ * @return array
*/
public function groups(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/RedisEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/RedisEngine.php
index 1eeed8cad..b7f0fec4b 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/RedisEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/RedisEngine.php
@@ -51,7 +51,7 @@ class RedisEngine extends CacheEngine
* - `timeout` timeout in seconds (float).
* - `unix_socket` Path to the unix socket file (default: false)
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'database' => 0,
@@ -72,7 +72,7 @@ class RedisEngine extends CacheEngine
*
* Called automatically by the cache frontend
*
- * @param array $config array of setting for the engine
+ * @param array $config array of setting for the engine
* @return bool True if the engine has been successfully initialized, false if not
*/
public function init(array $config = []): bool
@@ -283,7 +283,7 @@ public function add(string $key, $value): bool
* If the group initial value was not found, then it initializes
* the group accordingly.
*
- * @return string[]
+ * @return array
*/
public function groups(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Cache/Engine/WincacheEngine.php b/app/vendor/cakephp/cakephp/src/Cache/Engine/WincacheEngine.php
index 9d9e36eb6..ca0388e4b 100644
--- a/app/vendor/cakephp/cakephp/src/Cache/Engine/WincacheEngine.php
+++ b/app/vendor/cakephp/cakephp/src/Cache/Engine/WincacheEngine.php
@@ -30,7 +30,7 @@ class WincacheEngine extends CacheEngine
* Contains the compiled group names
* (prefixed with the global configuration prefix)
*
- * @var array
+ * @var array
*/
protected $_compiledGroupNames = [];
@@ -39,7 +39,7 @@ class WincacheEngine extends CacheEngine
*
* Called automatically by the cache frontend
*
- * @param array $config array of setting for the engine
+ * @param array $config array of setting for the engine
* @return bool True if the engine has been successfully initialized, false if not
*/
public function init(array $config = []): bool
@@ -155,7 +155,7 @@ public function clear(): bool
* If the group initial value was not found, then it initializes
* the group accordingly.
*
- * @return string[]
+ * @return array
*/
public function groups(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Collection.php b/app/vendor/cakephp/cakephp/src/Collection/Collection.php
index 645b28137..d3af8c0f0 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Collection.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Collection.php
@@ -54,6 +54,16 @@ public function serialize(): string
return serialize($this->buffered());
}
+ /**
+ * Returns an array for serializing this of this object.
+ *
+ * @return array
+ */
+ public function __serialize(): array
+ {
+ return $this->buffered()->toArray();
+ }
+
/**
* Unserializes the passed string and rebuilds the Collection instance
*
@@ -65,6 +75,17 @@ public function unserialize($collection): void
$this->__construct(unserialize($collection));
}
+ /**
+ * Rebuilds the Collection instance.
+ *
+ * @param array $data Data array.
+ * @return void
+ */
+ public function __unserialize(array $data): void
+ {
+ $this->__construct($data);
+ }
+
/**
* {@inheritDoc}
*
@@ -95,7 +116,7 @@ public function countKeys(): int
* Returns an array that can be used to describe the internal state of this
* object.
*
- * @return array
+ * @return array
*/
public function __debugInfo(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Collection/CollectionInterface.php b/app/vendor/cakephp/cakephp/src/Collection/CollectionInterface.php
index 986e63976..a7cc8cc27 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/CollectionInterface.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/CollectionInterface.php
@@ -64,7 +64,7 @@ public function each(callable $callback);
* ```
*
* @param callable|null $callback the method that will receive each of the elements and
- * returns true whether or not they should be in the resulting collection.
+ * returns true whether they should be in the resulting collection.
* If left null, a callback that filters out falsey values will be used.
* @return self
*/
@@ -90,7 +90,7 @@ public function filter(?callable $callback = null): CollectionInterface;
* ```
*
* @param callable $callback the method that will receive each of the elements and
- * returns true whether or not they should be out of the resulting collection.
+ * returns true whether they should be out of the resulting collection.
* @return self
*/
public function reject(callable $callback): CollectionInterface;
@@ -226,7 +226,7 @@ public function reduce(callable $callback, $initial = null);
* [1, 2, 3, 4]
* ```
*
- * @param string|callable $path A dot separated path of column to follow
+ * @param callable|string $path A dot separated path of column to follow
* so that the final one can be returned or a callable that will take care
* of doing that.
* @return self
@@ -308,7 +308,7 @@ public function min($path, int $sort = \SORT_NUMERIC);
* The average of an empty set or 0 rows is `null`. Collections with `null`
* values are not considered empty.
*
- * @param string|callable|null $path The property name to sum or a function
+ * @param callable|string|null $path The property name to sum or a function
* If no value is passed, an identity function will be used.
* that will return the value of the property to sum.
* @return float|int|null
@@ -341,7 +341,7 @@ public function avg($path = null);
* The median of an empty set or 0 rows is `null`. Collections with `null`
* values are not considered empty.
*
- * @param string|callable|null $path The property name to sum or a function
+ * @param callable|string|null $path The property name to sum or a function
* If no value is passed, an identity function will be used.
* that will return the value of the property to sum.
* @return float|int|null
@@ -526,7 +526,7 @@ public function countBy($path): CollectionInterface;
* // Total: 6
* ```
*
- * @param string|callable|null $path The property name to sum or a function
+ * @param callable|string|null $path The property name to sum or a function
* If no value is passed, an identity function will be used.
* that will return the value of the property to sum.
* @return float|int
@@ -619,7 +619,7 @@ public function skip(int $length): CollectionInterface;
public function match(array $conditions): CollectionInterface;
/**
- * Returns the first result matching all of the key-value pairs listed in
+ * Returns the first result matching all the key-value pairs listed in
* conditions.
*
* @param array $conditions a key-value list of conditions where the key is
@@ -775,13 +775,13 @@ public function insert(string $path, $values): CollectionInterface;
/**
* Returns an array representation of the results
*
- * @param bool $preserveKeys whether to use the keys returned by this
+ * @param bool $keepKeys Whether to use the keys returned by this
* collection as the array keys. Keep in mind that it is valid for iterators
* to return the same key for different elements, setting this value to false
* can help getting all items if keys are not important in the result.
* @return array
*/
- public function toArray(bool $preserveKeys = true): array;
+ public function toArray(bool $keepKeys = true): array;
/**
* Returns an numerically-indexed array representation of the results.
@@ -827,13 +827,13 @@ public function jsonSerialize(): array;
* You can think of this method as a way to create save points for complex
* calculations in a collection.
*
- * @param bool $preserveKeys whether to use the keys returned by this
+ * @param bool $keepKeys Whether to use the keys returned by this
* collection as the array keys. Keep in mind that it is valid for iterators
* to return the same key for different elements, setting this value to false
* can help getting all items if keys are not important in the result.
* @return self
*/
- public function compile(bool $preserveKeys = true): CollectionInterface;
+ public function compile(bool $keepKeys = true): CollectionInterface;
/**
* Returns a new collection where any operations chained after it are guaranteed
@@ -891,7 +891,7 @@ public function buffered(): CollectionInterface;
* ```
*
* @param string|int $order The order in which to return the elements
- * @param string|callable $nestingKey The key name under which children are nested
+ * @param callable|string $nestingKey The key name under which children are nested
* or a callable function that will return the children list
* @return self
*/
@@ -1052,13 +1052,13 @@ public function chunk(int $chunkSize): CollectionInterface;
* ```
*
* @param int $chunkSize The maximum size for each chunk
- * @param bool $preserveKeys If the keys of the array should be preserved
+ * @param bool $keepKeys If the keys of the array should be kept
* @return self
*/
- public function chunkWithKeys(int $chunkSize, bool $preserveKeys = true): CollectionInterface;
+ public function chunkWithKeys(int $chunkSize, bool $keepKeys = true): CollectionInterface;
/**
- * Returns whether or not there are elements in this collection
+ * Returns whether there are elements in this collection
*
* ### Example:
*
diff --git a/app/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php b/app/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php
index 18ccbafef..010b06a63 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php
@@ -673,21 +673,21 @@ public function insert(string $path, $values): CollectionInterface
/**
* @inheritDoc
*/
- public function toArray(bool $preserveKeys = true): array
+ public function toArray(bool $keepKeys = true): array
{
$iterator = $this->unwrap();
if ($iterator instanceof ArrayIterator) {
$items = $iterator->getArrayCopy();
- return $preserveKeys ? $items : array_values($items);
+ return $keepKeys ? $items : array_values($items);
}
// RecursiveIteratorIterator can return duplicate key values causing
// data loss when converted into an array
- if ($preserveKeys && get_class($iterator) === RecursiveIteratorIterator::class) {
- $preserveKeys = false;
+ if ($keepKeys && get_class($iterator) === RecursiveIteratorIterator::class) {
+ $keepKeys = false;
}
- return iterator_to_array($this, $preserveKeys);
+ return iterator_to_array($this, $keepKeys);
}
/**
@@ -709,9 +709,9 @@ public function jsonSerialize(): array
/**
* @inheritDoc
*/
- public function compile(bool $preserveKeys = true): CollectionInterface
+ public function compile(bool $keepKeys = true): CollectionInterface
{
- return $this->newCollection($this->toArray($preserveKeys));
+ return $this->newCollection($this->toArray($keepKeys));
}
/**
@@ -850,11 +850,11 @@ public function chunk(int $chunkSize): CollectionInterface
/**
* @inheritDoc
*/
- public function chunkWithKeys(int $chunkSize, bool $preserveKeys = true): CollectionInterface
+ public function chunkWithKeys(int $chunkSize, bool $keepKeys = true): CollectionInterface
{
- return $this->map(function ($v, $k, $iterator) use ($chunkSize, $preserveKeys) {
+ return $this->map(function ($v, $k, $iterator) use ($chunkSize, $keepKeys) {
$key = 0;
- if ($preserveKeys) {
+ if ($keepKeys) {
$key = $k;
}
$values = [$key => $v];
@@ -863,7 +863,7 @@ public function chunkWithKeys(int $chunkSize, bool $preserveKeys = true): Collec
if (!$iterator->valid()) {
break;
}
- if ($preserveKeys) {
+ if ($keepKeys) {
$values[$iterator->key()] = $iterator->current();
} else {
$values[] = $iterator->current();
diff --git a/app/vendor/cakephp/cakephp/src/Collection/ExtractTrait.php b/app/vendor/cakephp/cakephp/src/Collection/ExtractTrait.php
index 81cc8d142..c9b69a58e 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/ExtractTrait.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/ExtractTrait.php
@@ -29,7 +29,7 @@ trait ExtractTrait
* Returns a callable that can be used to extract a property or column from
* an array or object based on a dot separated path.
*
- * @param string|callable $path A dot separated path of column to follow
+ * @param callable|string $path A dot separated path of column to follow
* so that the final one can be returned or a callable that will take care
* of doing that.
* @return callable
@@ -58,8 +58,8 @@ protected function _propertyExtractor($path): callable
* by iterating over the column names contained in $path.
* It will return arrays for elements in represented with `{*}`
*
- * @param array|\ArrayAccess $data Data.
- * @param string[] $parts Path to extract from.
+ * @param \ArrayAccess|array $data Data.
+ * @param array $parts Path to extract from.
* @return mixed
*/
protected function _extract($data, array $parts)
@@ -104,8 +104,8 @@ protected function _extract($data, array $parts)
* Returns a column from $data that can be extracted
* by iterating over the column names contained in $path
*
- * @param array|\ArrayAccess $data Data.
- * @param string[] $parts Path to extract from.
+ * @param \ArrayAccess|array $data Data.
+ * @param array $parts Path to extract from.
* @return mixed
*/
protected function _simpleExtract($data, array $parts)
@@ -123,7 +123,7 @@ protected function _simpleExtract($data, array $parts)
}
/**
- * Returns a callable that receives a value and will return whether or not
+ * Returns a callable that receives a value and will return whether
* it matches certain condition.
*
* @param array $conditions A key-value list of conditions to match where the
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/BufferedIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/BufferedIterator.php
index 5c46c9198..cdf1c4ef6 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/BufferedIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/BufferedIterator.php
@@ -56,7 +56,7 @@ class BufferedIterator extends Collection implements Countable, Serializable
protected $_key;
/**
- * Whether or not the internal iterator's rewind method was already
+ * Whether the internal iterator's rewind method was already
* called
*
* @var bool
@@ -64,7 +64,7 @@ class BufferedIterator extends Collection implements Countable, Serializable
protected $_started = false;
/**
- * Whether or not the internal iterator has reached its end.
+ * Whether the internal iterator has reached its end.
*
* @var bool
*/
@@ -87,6 +87,7 @@ public function __construct(iterable $items)
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function key()
{
return $this->_key;
@@ -97,6 +98,7 @@ public function key()
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function current()
{
return $this->_current;
@@ -120,7 +122,7 @@ public function rewind(): void
}
/**
- * Returns whether or not the iterator has more elements
+ * Returns whether the iterator has more elements
*
* @return bool
*/
@@ -201,6 +203,20 @@ public function serialize(): string
return serialize($this->_buffer);
}
+ /**
+ * Magic method used for serializing the iterator instance.
+ *
+ * @return array
+ */
+ public function __serialize(): array
+ {
+ if (!$this->_finished) {
+ $this->count();
+ }
+
+ return iterator_to_array($this->_buffer);
+ }
+
/**
* Unserializes the passed string and rebuilds the BufferedIterator instance
*
@@ -214,4 +230,22 @@ public function unserialize($collection): void
$this->_started = true;
$this->_finished = true;
}
+
+ /**
+ * Magic method used to rebuild the iterator instance.
+ *
+ * @param array $data Data array.
+ * @return void
+ */
+ public function __unserialize(array $data): void
+ {
+ $this->__construct([]);
+
+ foreach ($data as $value) {
+ $this->_buffer->push($value);
+ }
+
+ $this->_started = true;
+ $this->_finished = true;
+ }
}
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ExtractIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ExtractIterator.php
index c8299708a..f5ba7b97b 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ExtractIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ExtractIterator.php
@@ -52,7 +52,7 @@ class ExtractIterator extends Collection
* ```
*
* @param iterable $items The list of values to iterate
- * @param string|callable $path A dot separated path of column to follow
+ * @param callable|string $path A dot separated path of column to follow
* so that the final one can be returned or a callable that will take care
* of doing that.
*/
@@ -68,6 +68,7 @@ public function __construct(iterable $items, $path)
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function current()
{
$extractor = $this->_extractor;
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/InsertIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/InsertIterator.php
index a452e788f..8bcffc449 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/InsertIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/InsertIterator.php
@@ -44,7 +44,7 @@ class InsertIterator extends Collection
* An array containing each of the properties to be traversed to reach the
* point where the values should be inserted.
*
- * @var array
+ * @var array
*/
protected $_path;
@@ -101,6 +101,7 @@ public function next(): void
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function current()
{
$row = parent::current();
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/NestIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/NestIterator.php
index 408c7af24..c60c39b2f 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/NestIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/NestIterator.php
@@ -29,7 +29,7 @@ class NestIterator extends Collection implements RecursiveIterator
/**
* The name of the property that contains the nested items for each element
*
- * @var string|callable
+ * @var callable|string
*/
protected $_nestKey;
@@ -37,7 +37,7 @@ class NestIterator extends Collection implements RecursiveIterator
* Constructor
*
* @param iterable $items Collection items.
- * @param string|callable $nestKey the property that contains the nested items
+ * @param callable|string $nestKey the property that contains the nested items
* If a callable is passed, it should return the childrens for the passed item
*/
public function __construct(iterable $items, $nestKey)
@@ -51,7 +51,7 @@ public function __construct(iterable $items, $nestKey)
*
* @return \RecursiveIterator
*/
- public function getChildren()
+ public function getChildren(): RecursiveIterator
{
$property = $this->_propertyExtractor($this->_nestKey);
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/NoChildrenIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/NoChildrenIterator.php
index 49ac81114..ed940c1c4 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/NoChildrenIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/NoChildrenIterator.php
@@ -41,7 +41,7 @@ public function hasChildren(): bool
*
* @return \RecursiveIterator
*/
- public function getChildren()
+ public function getChildren(): RecursiveIterator
{
return new static([]);
}
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ReplaceIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ReplaceIterator.php
index 1793dbb55..285757a68 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ReplaceIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ReplaceIterator.php
@@ -65,6 +65,7 @@ public function __construct(iterable $items, callable $callback)
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function current()
{
$callback = $this->_callback;
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/StoppableIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/StoppableIterator.php
index ac626a443..d79de6788 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/StoppableIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/StoppableIterator.php
@@ -66,7 +66,7 @@ public function __construct(iterable $items, callable $condition)
/**
* Evaluates the condition and returns its result, this controls
- * whether or not more results will be yielded.
+ * whether more results will be yielded.
*
* @return bool
*/
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreeIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreeIterator.php
index 9a9b7ef67..49a28fe01 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreeIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreeIterator.php
@@ -82,9 +82,9 @@ public function __construct(
* });
* ```
*
- * @param string|callable $valuePath The property to extract or a callable to return
+ * @param callable|string $valuePath The property to extract or a callable to return
* the display value
- * @param string|callable|null $keyPath The property to use as iteration key or a
+ * @param callable|string|null $keyPath The property to use as iteration key or a
* callable returning the key value.
* @param string $spacer The string to use for prefixing the values according to
* their depth in the tree
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreePrinter.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreePrinter.php
index 2ac181fb0..d509d471a 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreePrinter.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/TreePrinter.php
@@ -61,9 +61,9 @@ class TreePrinter extends RecursiveIteratorIterator implements CollectionInterfa
* Constructor
*
* @param \RecursiveIterator $items The iterator to flatten.
- * @param string|callable $valuePath The property to extract or a callable to return
+ * @param callable|string $valuePath The property to extract or a callable to return
* the display value.
- * @param string|callable $keyPath The property to use as iteration key or a
+ * @param callable|string $keyPath The property to use as iteration key or a
* callable returning the key value.
* @param string $spacer The string to use for prefixing the values according to
* their depth in the tree.
@@ -87,6 +87,7 @@ public function __construct(
*
* @return mixed
*/
+ #[\ReturnTypeWillChange]
public function key()
{
$extractor = $this->_key;
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/UnfoldIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/UnfoldIterator.php
index dff2bdc70..017373ebc 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/UnfoldIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/UnfoldIterator.php
@@ -77,7 +77,7 @@ public function hasChildren(): bool
*
* @return \RecursiveIterator
*/
- public function getChildren()
+ public function getChildren(): RecursiveIterator
{
$current = $this->current();
$key = $this->key();
diff --git a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ZipIterator.php b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ZipIterator.php
index 3ab17e834..e032faf74 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/Iterator/ZipIterator.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/Iterator/ZipIterator.php
@@ -90,6 +90,7 @@ public function __construct(array $sets, ?callable $callable = null)
*
* @return array
*/
+ #[\ReturnTypeWillChange]
public function current()
{
if ($this->_callback === null) {
@@ -110,6 +111,16 @@ public function serialize(): string
return serialize($this->_iterators);
}
+ /**
+ * Magic method used for serializing the iterator instance.
+ *
+ * @return array
+ */
+ public function __serialize(): array
+ {
+ return $this->_iterators;
+ }
+
/**
* Unserializes the passed string and rebuilds the ZipIterator instance
*
@@ -124,4 +135,20 @@ public function unserialize($iterators): void
$this->attachIterator($it);
}
}
+
+ /**
+ * Magic method used to rebuild the iterator instance.
+ *
+ * @param array $data Data array.
+ * @return void
+ */
+ public function __unserialize(array $data): void
+ {
+ parent::__construct(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC);
+
+ $this->_iterators = $data;
+ foreach ($this->_iterators as $it) {
+ $this->attachIterator($it);
+ }
+ }
}
diff --git a/app/vendor/cakephp/cakephp/src/Collection/functions.php b/app/vendor/cakephp/cakephp/src/Collection/functions.php
index 947dd6c4b..0440f10ff 100644
--- a/app/vendor/cakephp/cakephp/src/Collection/functions.php
+++ b/app/vendor/cakephp/cakephp/src/Collection/functions.php
@@ -20,7 +20,7 @@
if (!function_exists('collection')) {
/**
- * Returns a new Cake\Collection\Collection object wrapping the passed argument.
+ * Returns a new {@link \Cake\Collection\Collection} object wrapping the passed argument.
*
* @param iterable $items The items from which the collection will be built.
* @return \Cake\Collection\Collection
diff --git a/app/vendor/cakephp/cakephp/src/Command/Command.php b/app/vendor/cakephp/cakephp/src/Command/Command.php
index 95cde0ecf..5c6afc026 100644
--- a/app/vendor/cakephp/cakephp/src/Command/Command.php
+++ b/app/vendor/cakephp/cakephp/src/Command/Command.php
@@ -48,6 +48,9 @@ public function __construct()
return $this->getTableLocator()->get($alias);
});
+ if ($this->defaultTable !== null) {
+ $this->modelClass = $this->defaultTable;
+ }
if (isset($this->modelClass)) {
$this->loadModel();
}
diff --git a/app/vendor/cakephp/cakephp/src/Command/CompletionCommand.php b/app/vendor/cakephp/cakephp/src/Command/CompletionCommand.php
index b666fcbc2..77a5f9011 100644
--- a/app/vendor/cakephp/cakephp/src/Command/CompletionCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/CompletionCommand.php
@@ -147,7 +147,7 @@ protected function getCommands(Arguments $args, ConsoleIo $io): int
protected function getSubcommands(Arguments $args, ConsoleIo $io): int
{
$name = $args->getArgument('command');
- if ($name === null || !strlen($name)) {
+ if ($name === null || $name === '') {
return static::CODE_SUCCESS;
}
@@ -185,7 +185,7 @@ protected function getSubcommands(Arguments $args, ConsoleIo $io): int
* Reflect the subcommands names out of a shell.
*
* @param \Cake\Console\Shell $shell The shell to get commands for
- * @return string[] A list of commands
+ * @return array A list of commands
*/
protected function shellSubcommands(Shell $shell): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Command/I18nExtractCommand.php b/app/vendor/cakephp/cakephp/src/Command/I18nExtractCommand.php
index a90815bd1..891f6d8e8 100644
--- a/app/vendor/cakephp/cakephp/src/Command/I18nExtractCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/I18nExtractCommand.php
@@ -41,14 +41,14 @@ public static function defaultName(): string
/**
* Paths to use when looking for strings
*
- * @var string[]
+ * @var array
*/
protected $_paths = [];
/**
* Files from where to extract
*
- * @var string[]
+ * @var array
*/
protected $_files = [];
@@ -59,13 +59,6 @@ public static function defaultName(): string
*/
protected $_merge = false;
- /**
- * Use relative paths in the pot files rather than full path
- *
- * @var bool
- */
- protected $_relativePaths = false;
-
/**
* Current file being processed
*
@@ -74,9 +67,9 @@ public static function defaultName(): string
protected $_file = '';
/**
- * Contains all content waiting to be write
+ * Contains all content waiting to be written
*
- * @var array
+ * @var array
*/
protected $_storage = [];
@@ -90,7 +83,7 @@ public static function defaultName(): string
/**
* Extracted strings indexed by domain.
*
- * @var array
+ * @var array
*/
protected $_translations = [];
@@ -104,7 +97,7 @@ public static function defaultName(): string
/**
* An array of directories to exclude.
*
- * @var string[]
+ * @var array
*/
protected $_exclude = [];
@@ -267,7 +260,6 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
}
$this->_markerError = (bool)$args->getOption('marker-error');
- $this->_relativePaths = (bool)$args->getOption('relative-paths');
if (empty($this->_files)) {
$this->_searchFiles();
@@ -368,10 +360,6 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar
'help' => 'Merge all domain strings into a single default.po file.',
'default' => 'no',
'choices' => ['yes', 'no'],
- ])->addOption('relative-paths', [
- 'help' => 'Use application relative paths in the .pot file.',
- 'boolean' => true,
- 'default' => false,
])->addOption('output', [
'help' => 'Full path to output directory.',
])->addOption('files', [
@@ -382,7 +370,8 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar
'help' => 'Ignores all files in plugins if this command is run inside from the same app directory.',
])->addOption('plugin', [
'help' => 'Extracts tokens only from the plugin specified and '
- . 'puts the result in the plugin\'s Locale directory.',
+ . 'puts the result in the plugin\'s `locales` directory.',
+ 'short' => 'p',
])->addOption('exclude', [
'help' => 'Comma separated list of directories to exclude.' .
' Any path containing a path segment with the provided values will be skipped. E.g. test,vendors',
@@ -511,9 +500,7 @@ protected function _parse(ConsoleIo $io, string $functionName, array $map): void
'file' => $this->_file,
'line' => $line,
];
- if ($this->_relativePaths) {
- $details['file'] = '.' . str_replace(ROOT, '', $details['file']);
- }
+ $details['file'] = '.' . str_replace(ROOT, '', $details['file']);
if ($plural !== null) {
$details['msgid_plural'] = $plural;
}
@@ -563,7 +550,7 @@ protected function _buildFiles(Arguments $args): void
$occurrences = implode("\n#: ", $occurrences);
$header = '#: '
- . str_replace(DIRECTORY_SEPARATOR, '/', str_replace($paths, '', $occurrences))
+ . str_replace(DIRECTORY_SEPARATOR, '/', $occurrences)
. "\n";
}
@@ -601,9 +588,8 @@ protected function _buildFiles(Arguments $args): void
*/
protected function _store(string $domain, string $header, string $sentence): void
{
- if (!isset($this->_storage[$domain])) {
- $this->_storage[$domain] = [];
- }
+ $this->_storage[$domain] = $this->_storage[$domain] ?? [];
+
if (!isset($this->_storage[$domain][$sentence])) {
$this->_storage[$domain][$sentence] = $header;
} else {
@@ -706,7 +692,7 @@ protected function _writeHeader(string $domain): string
* @param string $oldFile The existing file.
* @param int $headerLength The length of the file header in bytes.
* @param string $newFileContent The content of the new file.
- * @return bool Whether or not the old and new file are unchanged.
+ * @return bool Whether the old and new file are unchanged.
*/
protected function checkUnchanged(string $oldFile, int $headerLength, string $newFileContent): bool
{
@@ -731,7 +717,7 @@ protected function checkUnchanged(string $oldFile, int $headerLength, string $ne
protected function _getStrings(int &$position, int $target): array
{
$strings = [];
- $count = count($strings);
+ $count = 0;
while (
$count < $target
&& ($this->_tokens[$position] === ','
@@ -873,7 +859,7 @@ protected function _isExtractingApp(): bool
}
/**
- * Checks whether or not a given path is usable for writing.
+ * Checks whether a given path is usable for writing.
*
* @param string $path Path to folder
* @return bool true if it exists and is writable, false otherwise
diff --git a/app/vendor/cakephp/cakephp/src/Command/PluginAssetsTrait.php b/app/vendor/cakephp/cakephp/src/Command/PluginAssetsTrait.php
index 9470ff939..8e0ec7ff5 100644
--- a/app/vendor/cakephp/cakephp/src/Command/PluginAssetsTrait.php
+++ b/app/vendor/cakephp/cakephp/src/Command/PluginAssetsTrait.php
@@ -47,7 +47,7 @@ trait PluginAssetsTrait
*
* @param string|null $name Name of plugin for which to symlink assets.
* If null all plugins will be processed.
- * @return array List of plugins with meta data.
+ * @return array List of plugins with meta data.
*/
protected function _list(?string $name = null): array
{
@@ -95,7 +95,7 @@ protected function _list(?string $name = null): array
/**
* Process plugins
*
- * @param array $plugins List of plugins to process
+ * @param array $plugins List of plugins to process
* @param bool $copy Force copy mode. Default false.
* @param bool $overwrite Overwrite existing files.
* @return void
@@ -153,7 +153,7 @@ protected function _process(array $plugins, bool $copy = false, bool $overwrite
/**
* Remove folder/symlink.
*
- * @param array $config Plugin config.
+ * @param array $config Plugin config.
* @return bool
*/
protected function _remove(array $config): bool
diff --git a/app/vendor/cakephp/cakephp/src/Command/PluginLoadCommand.php b/app/vendor/cakephp/cakephp/src/Command/PluginLoadCommand.php
index 4897ccae0..b4122832e 100644
--- a/app/vendor/cakephp/cakephp/src/Command/PluginLoadCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/PluginLoadCommand.php
@@ -63,14 +63,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
$this->io = $io;
$this->args = $args;
- $plugin = $args->getArgument('plugin');
- if (!$plugin) {
- $this->io->err('You must provide a plugin name in CamelCase format.');
- $this->io->err('To load an "Example" plugin, run `cake plugin load Example`.');
-
- return static::CODE_ERROR;
- }
-
+ $plugin = $args->getArgument('plugin') ?? '';
try {
Plugin::getCollection()->findPath($plugin);
} catch (MissingPluginException $e) {
@@ -101,19 +94,27 @@ protected function modifyApplication(string $app, string $plugin): void
{
$contents = file_get_contents($app);
- $append = "\n \$this->addPlugin('%s');\n";
- $insert = str_replace(', []', '', sprintf($append, $plugin));
+ // Find start of bootstrap
+ if (!preg_match('/^(\s+)public function bootstrap(?:\s*)\(\)/mu', $contents, $matches, PREG_OFFSET_CAPTURE)) {
+ $this->io->err('Your Application class does not have a bootstrap() method. Please add one.');
+ $this->abort();
+ }
+
+ $offset = $matches[0][1];
+ $indent = $matches[1][0];
- if (!preg_match('/function bootstrap\(\)(?:\s*)\:(?:\s*)void/m', $contents)) {
+ // Find closing function bracket
+ if (!preg_match("/^$indent\}\n$/mu", $contents, $matches, PREG_OFFSET_CAPTURE, $offset)) {
$this->io->err('Your Application class does not have a bootstrap() method. Please add one.');
$this->abort();
- } else {
- $contents = preg_replace(
- '/(function bootstrap\(\)(?:\s*)\:(?:\s*)void(?:\s+)\{)/m',
- '$1' . $insert,
- $contents
- );
}
+
+ $append = "$indent \$this->addPlugin('%s');\n";
+ $insert = str_replace(', []', '', sprintf($append, $plugin));
+
+ $offset = $matches[0][1];
+ $contents = substr_replace($contents, $insert, $offset, 0);
+
file_put_contents($app, $contents);
$this->io->out('');
@@ -132,7 +133,8 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar
'Command for loading plugins.',
])
->addArgument('plugin', [
- 'help' => 'Name of the plugin to load.',
+ 'help' => 'Name of the plugin to load. Must be in CamelCase format. Example: cake plugin load Example',
+ 'required' => true,
]);
return $parser;
diff --git a/app/vendor/cakephp/cakephp/src/Command/RoutesCommand.php b/app/vendor/cakephp/cakephp/src/Command/RoutesCommand.php
index 517837400..e3a20b9f1 100644
--- a/app/vendor/cakephp/cakephp/src/Command/RoutesCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/RoutesCommand.php
@@ -35,14 +35,42 @@ class RoutesCommand extends Command
*/
public function execute(Arguments $args, ConsoleIo $io): ?int
{
- $output = [
- ['Route name', 'URI template', 'Defaults'],
- ];
+ $header = ['Route name', 'URI template', 'Plugin', 'Prefix', 'Controller', 'Action', 'Method(s)'];
+ if ($args->getOption('verbose')) {
+ $header[] = 'Defaults';
+ }
+
+ $output = [];
+
foreach (Router::routes() as $route) {
- $name = $route->options['_name'] ?? $route->getName();
- ksort($route->defaults);
- $output[] = [$name, $route->template, json_encode($route->defaults)];
+ $methods = $route->defaults['_method'] ?? '';
+
+ $item = [
+ $route->options['_name'] ?? $route->getName(),
+ $route->template,
+ $route->defaults['plugin'] ?? '',
+ $route->defaults['prefix'] ?? '',
+ $route->defaults['controller'] ?? '',
+ $route->defaults['action'] ?? '',
+ is_string($methods) ? $methods : implode(', ', $route->defaults['_method']),
+ ];
+
+ if ($args->getOption('verbose')) {
+ ksort($route->defaults);
+ $item[] = json_encode($route->defaults);
+ }
+
+ $output[] = $item;
+ }
+
+ if ($args->getOption('sort')) {
+ usort($output, function ($a, $b) {
+ return strcasecmp($a[0], $b[0]);
+ });
}
+
+ array_unshift($output, $header);
+
$io->helper('table')->output($output);
$io->out();
@@ -57,7 +85,13 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
*/
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
- $parser->setDescription('Get the list of routes connected in this application.');
+ $parser
+ ->setDescription('Get the list of routes connected in this application.')
+ ->addOption('sort', [
+ 'help' => 'Sorts alphabetically by route name A-Z',
+ 'short' => 's',
+ 'boolean' => true,
+ ]);
return $parser;
}
diff --git a/app/vendor/cakephp/cakephp/src/Command/RoutesGenerateCommand.php b/app/vendor/cakephp/cakephp/src/Command/RoutesGenerateCommand.php
index a2ceaafc1..35eae5cc2 100644
--- a/app/vendor/cakephp/cakephp/src/Command/RoutesGenerateCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/RoutesGenerateCommand.php
@@ -62,8 +62,8 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
/**
* Split the CLI arguments into a hash.
*
- * @param string[] $args The arguments to split.
- * @return (string|bool)[]
+ * @param array $args The arguments to split.
+ * @return array
*/
protected function _splitArgs(array $args): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Command/ServerCommand.php b/app/vendor/cakephp/cakephp/src/Command/ServerCommand.php
index fb32a3ec7..69f1203a0 100644
--- a/app/vendor/cakephp/cakephp/src/Command/ServerCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Command/ServerCommand.php
@@ -143,7 +143,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int
$port = ':' . $this->_port;
$io->out(sprintf('built-in server is running in http://%s%s/', $this->_host, $port));
- $io->out(sprintf('You can exit with `CTRL-C`'));
+ $io->out('You can exit with `CTRL-C`');
system($command);
return static::CODE_SUCCESS;
diff --git a/app/vendor/cakephp/cakephp/src/Console/Arguments.php b/app/vendor/cakephp/cakephp/src/Console/Arguments.php
index 02ba05828..5de44d9dd 100644
--- a/app/vendor/cakephp/cakephp/src/Console/Arguments.php
+++ b/app/vendor/cakephp/cakephp/src/Console/Arguments.php
@@ -25,30 +25,30 @@ class Arguments
/**
* Positional argument name map
*
- * @var string[]
+ * @var array
*/
protected $argNames;
/**
* Positional arguments.
*
- * @var string[]
+ * @var array
*/
protected $args;
/**
* Named options
*
- * @var array
+ * @var array
*/
protected $options;
/**
* Constructor
*
- * @param string[] $args Positional arguments
- * @param array $options Named arguments
- * @param string[] $argNames List of argument names. Order is expected to be
+ * @param array $args Positional arguments
+ * @param array $options Named arguments
+ * @param array $argNames List of argument names. Order is expected to be
* the same as $args.
*/
public function __construct(array $args, array $options, array $argNames)
@@ -61,7 +61,7 @@ public function __construct(array $args, array $options, array $argNames)
/**
* Get all positional arguments.
*
- * @return string[]
+ * @return array
*/
public function getArguments(): array
{
@@ -129,7 +129,7 @@ public function getArgument(string $name): ?string
/**
* Get an array of all the options
*
- * @return array
+ * @return array
*/
public function getOptions(): array
{
@@ -144,11 +144,7 @@ public function getOptions(): array
*/
public function getOption(string $name)
{
- if (isset($this->options[$name])) {
- return $this->options[$name];
- }
-
- return null;
+ return $this->options[$name] ?? null;
}
/**
diff --git a/app/vendor/cakephp/cakephp/src/Console/BaseCommand.php b/app/vendor/cakephp/cakephp/src/Console/BaseCommand.php
index 18b5ad38a..ad4866bfe 100644
--- a/app/vendor/cakephp/cakephp/src/Console/BaseCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Console/BaseCommand.php
@@ -246,9 +246,9 @@ public function abort(int $code = self::CODE_ERROR): void
* will not be resolved with the application container. Instead you will
* need to pass the command as an object with all of its dependencies.
*
- * @param string|\Cake\Console\CommandInterface $command The command class name or command instance.
+ * @param \Cake\Console\CommandInterface|string $command The command class name or command instance.
* @param array $args The arguments to invoke the command with.
- * @param \Cake\Console\ConsoleIo $io The ConsoleIo instance to use for the executed command.
+ * @param \Cake\Console\ConsoleIo|null $io The ConsoleIo instance to use for the executed command.
* @return int|null The exit code or null for success of the command.
*/
public function executeCommand($command, array $args = [], ?ConsoleIo $io = null): ?int
diff --git a/app/vendor/cakephp/cakephp/src/Console/Command/HelpCommand.php b/app/vendor/cakephp/cakephp/src/Console/Command/HelpCommand.php
index 0f9daf06d..9999518f7 100644
--- a/app/vendor/cakephp/cakephp/src/Console/Command/HelpCommand.php
+++ b/app/vendor/cakephp/cakephp/src/Console/Command/HelpCommand.php
@@ -164,7 +164,7 @@ protected function outputPaths(ConsoleIo $io): void
}
/**
- * @param string[] $names Names
+ * @param array $names Names
* @return string
*/
protected function getShortestName(array $names): string
diff --git a/app/vendor/cakephp/cakephp/src/Console/CommandCollection.php b/app/vendor/cakephp/cakephp/src/Console/CommandCollection.php
index e65dcc039..a3ac801c5 100644
--- a/app/vendor/cakephp/cakephp/src/Console/CommandCollection.php
+++ b/app/vendor/cakephp/cakephp/src/Console/CommandCollection.php
@@ -34,8 +34,8 @@ class CommandCollection implements IteratorAggregate, Countable
/**
* Command list
*
- * @var array
- * @psalm-var (\Cake\Console\Shell|\Cake\Console\CommandInterface|class-string)[]
+ * @var array
+ * @psalm-var array
* @psalm-suppress DeprecatedClass
*/
protected $commands = [];
@@ -43,7 +43,7 @@ class CommandCollection implements IteratorAggregate, Countable
/**
* Constructor
*
- * @param array $commands The map of commands to add to the collection.
+ * @param array $commands The map of commands to add to the collection.
*/
public function __construct(array $commands = [])
{
@@ -56,7 +56,7 @@ public function __construct(array $commands = [])
* Add a command to the collection
*
* @param string $name The name of the command you want to map.
- * @param string|\Cake\Console\Shell|\Cake\Console\CommandInterface $command The command to map.
+ * @param \Cake\Console\CommandInterface|\Cake\Console\Shell|string $command The command to map.
* Can be a FQCN, Shell instance or CommandInterface instance.
* @return $this
* @throws \InvalidArgumentException
@@ -86,7 +86,7 @@ public function add(string $name, $command)
/**
* Add multiple commands at once.
*
- * @param array $commands A map of command names => command classes/instances.
+ * @param array $commands A map of command names => command classes/instances.
* @return $this
* @see \Cake\Console\CommandCollection::add()
*/
@@ -127,9 +127,9 @@ public function has(string $name): bool
* Get the target for a command.
*
* @param string $name The named shell.
- * @return string|\Cake\Console\Shell|\Cake\Console\CommandInterface Either the command class or an instance.
+ * @return \Cake\Console\CommandInterface|\Cake\Console\Shell|string Either the command class or an instance.
* @throws \InvalidArgumentException when unknown commands are fetched.
- * @psalm-return class-string|\Cake\Console\Shell|\Cake\Console\CommandInterface
+ * @psalm-return \Cake\Console\CommandInterface|\Cake\Console\Shell|class-string
*/
public function get(string $name)
{
@@ -172,7 +172,7 @@ public function count(): int
* the long name (`plugin.command`) will be returned.
*
* @param string $plugin The plugin to scan.
- * @return string[] Discovered plugin commands.
+ * @return array Discovered plugin commands.
*/
public function discoverPlugin(string $plugin): array
{
@@ -186,7 +186,7 @@ public function discoverPlugin(string $plugin): array
* Resolve names based on existing commands
*
* @param array $input The results of a CommandScanner operation.
- * @return string[] A flat map of command names => class names.
+ * @return array A flat map of command names => class names.
*/
protected function resolveNames(array $input): array
{
@@ -223,7 +223,7 @@ protected function resolveNames(array $input): array
* Commands defined in the application will overwrite commands with
* the same name provided by CakePHP.
*
- * @return string[] An array of command names and their classes.
+ * @return array An array of command names and their classes.
*/
public function autoDiscover(): array
{
@@ -232,13 +232,13 @@ public function autoDiscover(): array
$core = $this->resolveNames($scanner->scanCore());
$app = $this->resolveNames($scanner->scanApp());
- return array_merge($core, $app);
+ return $app + $core;
}
/**
* Get the list of available command names.
*
- * @return string[] Command names
+ * @return array Command names
*/
public function keys(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/CommandRunner.php b/app/vendor/cakephp/cakephp/src/Console/CommandRunner.php
index 1892eff42..4d6fdfd43 100644
--- a/app/vendor/cakephp/cakephp/src/Console/CommandRunner.php
+++ b/app/vendor/cakephp/cakephp/src/Console/CommandRunner.php
@@ -64,7 +64,7 @@ class CommandRunner implements EventDispatcherInterface
/**
* Alias mappings.
*
- * @var string[]
+ * @var array
*/
protected $aliases = [];
@@ -103,7 +103,7 @@ public function __construct(
* $runner->setAliases(['--version' => 'version']);
* ```
*
- * @param string[] $aliases The map of aliases to replace.
+ * @param array $aliases The map of aliases to replace.
* @return $this
*/
public function setAliases(array $aliases)
@@ -239,7 +239,7 @@ public function setEventManager(EventManagerInterface $eventManager)
* @param \Cake\Console\ConsoleIo $io The IO wrapper for the created shell class.
* @param \Cake\Console\CommandCollection $commands The command collection to find the shell in.
* @param string $name The command name to find
- * @return \Cake\Console\Shell|\Cake\Console\CommandInterface
+ * @return \Cake\Console\CommandInterface|\Cake\Console\Shell
*/
protected function getCommand(ConsoleIo $io, CommandCollection $commands, string $name)
{
@@ -304,9 +304,7 @@ protected function resolveName(CommandCollection $commands, ConsoleIo $io, ?stri
$io->err('No command provided. Choose one of the available commands.', 2);
$name = 'help';
}
- if (isset($this->aliases[$name])) {
- $name = $this->aliases[$name];
- }
+ $name = $this->aliases[$name] ?? $name;
if (!$commands->has($name)) {
$name = Inflector::underscore($name);
}
@@ -362,7 +360,7 @@ protected function runShell(Shell $shell, array $argv)
*
* @param string $className Shell class name.
* @param \Cake\Console\ConsoleIo $io The IO wrapper for the created shell class.
- * @return \Cake\Console\Shell|\Cake\Console\CommandInterface
+ * @return \Cake\Console\CommandInterface|\Cake\Console\Shell
*/
protected function createCommand(string $className, ConsoleIo $io)
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/CommandScanner.php b/app/vendor/cakephp/cakephp/src/Console/CommandScanner.php
index ca4acd861..a704e4112 100644
--- a/app/vendor/cakephp/cakephp/src/Console/CommandScanner.php
+++ b/app/vendor/cakephp/cakephp/src/Console/CommandScanner.php
@@ -105,7 +105,7 @@ public function scanPlugin(string $plugin): array
* @param string $path The directory to read.
* @param string $namespace The namespace the shells live in.
* @param string $prefix The prefix to apply to commands for their full name.
- * @param string[] $hide A list of command names to hide as they are internal commands.
+ * @param array $hide A list of command names to hide as they are internal commands.
* @return array The list of shell info arrays based on scanning the filesystem and inflection.
*/
protected function scanDir(string $path, string $namespace, string $prefix, array $hide): array
@@ -119,7 +119,7 @@ protected function scanDir(string $path, string $namespace, string $prefix, arra
$classPattern = '/(Shell|Command)\.php$/';
$fs = new Filesystem();
- /** @var \SplFileInfo[] $files */
+ /** @var array<\SplFileInfo> $files */
$files = $fs->find($path, $classPattern);
$shells = [];
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleInput.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleInput.php
index 9e4ef7a6a..ceb2eb260 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleInput.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleInput.php
@@ -62,7 +62,7 @@ public function read(): ?string
if ($this->_canReadline) {
$line = readline('');
- if ($line !== false && strlen($line) > 0) {
+ if ($line !== false && $line !== '') {
readline_add_history($line);
}
} else {
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputArgument.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputArgument.php
index e76cfccc1..ad9ffc73a 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputArgument.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputArgument.php
@@ -51,17 +51,17 @@ class ConsoleInputArgument
/**
* An array of valid choices for this argument.
*
- * @var string[]
+ * @var array
*/
protected $_choices;
/**
* Make a new Input Argument
*
- * @param string|array $name The long name of the option, or an array with all the properties.
+ * @param array|string $name The long name of the option, or an array with all the properties.
* @param string $help The help text for this option
* @param bool $required Whether this argument is required. Missing required args will trigger exceptions
- * @param string[] $choices Valid choices for this option.
+ * @param array $choices Valid choices for this option.
*/
public function __construct($name, $help = '', $required = false, $choices = [])
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputOption.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputOption.php
index fe29594eb..21a253dd8 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputOption.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputOption.php
@@ -72,7 +72,7 @@ class ConsoleInputOption
/**
* An array of choices for the option.
*
- * @var string[]
+ * @var array
*/
protected $_choices;
@@ -91,7 +91,7 @@ class ConsoleInputOption
* @param string $help The help text for this option
* @param bool $isBoolean Whether this option is a boolean option. Boolean options don't consume extra tokens
* @param string|bool|null $default The default value for this option.
- * @param string[] $choices Valid choices for this option.
+ * @param array $choices Valid choices for this option.
* @param bool $multiple Whether this option can accept multiple value definition.
* @param bool $required Whether this option is required or not.
* @throws \Cake\Console\Exception\ConsoleException
@@ -162,7 +162,7 @@ public function help(int $width = 0): string
if ($this->_choices) {
$default .= sprintf(' (choices: %s)', implode('|', $this->_choices));
}
- if (strlen($this->_short) > 0) {
+ if ($this->_short !== '') {
$short = ', -' . $this->_short;
}
$name = sprintf('--%s%s', $this->_name, $short);
@@ -184,9 +184,9 @@ public function help(int $width = 0): string
*/
public function usage(): string
{
- $name = strlen($this->_short) > 0 ? '-' . $this->_short : '--' . $this->_name;
+ $name = $this->_short === '' ? '--' . $this->_name : '-' . $this->_short;
$default = '';
- if ($this->_default !== null && !is_bool($this->_default) && strlen($this->_default) > 0) {
+ if ($this->_default !== null && !is_bool($this->_default) && $this->_default !== '') {
$default = ' ' . $this->_default;
}
if ($this->_choices) {
@@ -277,7 +277,7 @@ public function xml(SimpleXMLElement $parent): SimpleXMLElement
$option = $parent->addChild('option');
$option->addAttribute('name', '--' . $this->_name);
$short = '';
- if (strlen($this->_short) > 0) {
+ if ($this->_short !== '') {
$short = '-' . $this->_short;
}
$default = $this->_default;
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputSubcommand.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputSubcommand.php
index 9649a73c6..1892aeaa0 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleInputSubcommand.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleInputSubcommand.php
@@ -53,7 +53,7 @@ class ConsoleInputSubcommand
/**
* Make a new Subcommand
*
- * @param string|array $name The long name of the subcommand, or an array with all the properties.
+ * @param array|string $name The long name of the subcommand, or an array with all the properties.
* @param string $help The help text for this option.
* @param \Cake\Console\ConsoleOptionParser|array|null $parser A parser for this subcommand.
* Either a ConsoleOptionParser, or an array that can be used with ConsoleOptionParser::buildFromArray().
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleIo.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleIo.php
index a0141c7bb..46292c0bd 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleIo.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleIo.php
@@ -96,7 +96,7 @@ class ConsoleIo
protected $_lastWritten = 0;
/**
- * Whether or not files should be overwritten
+ * Whether files should be overwritten
*
* @var bool
*/
@@ -155,7 +155,7 @@ public function level(?int $level = null): int
/**
* Output at the verbose level.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int|null The number of bytes returned from writing to stdout
* or null if current level is less than ConsoleIo::VERBOSE
@@ -168,7 +168,7 @@ public function verbose($message, int $newlines = 1): ?int
/**
* Output at all levels.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int|null The number of bytes returned from writing to stdout
* or null if current level is less than ConsoleIo::QUIET
@@ -189,7 +189,7 @@ public function quiet($message, int $newlines = 1): ?int
* present in most shells. Using ConsoleIo::QUIET for a message means it will always display.
* While using ConsoleIo::VERBOSE means it will only display when verbose output is toggled.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout
@@ -209,7 +209,7 @@ public function out($message = '', int $newlines = 1, int $level = self::NORMAL)
/**
* Convenience method for out() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout
@@ -227,7 +227,7 @@ public function info($message, int $newlines = 1, int $level = self::NORMAL): ?i
/**
* Convenience method for out() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout
@@ -245,7 +245,7 @@ public function comment($message, int $newlines = 1, int $level = self::NORMAL):
/**
* Convenience method for err() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to stderr.
* @see https://book.cakephp.org/4/en/console-and-shells.html#ConsoleIo::err
@@ -261,7 +261,7 @@ public function warning($message, int $newlines = 1): int
/**
* Convenience method for err() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to stderr.
* @see https://book.cakephp.org/4/en/console-and-shells.html#ConsoleIo::err
@@ -277,7 +277,7 @@ public function error($message, int $newlines = 1): int
/**
* Convenience method for out() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout
@@ -311,8 +311,8 @@ public function abort($message, $code = CommandInterface::CODE_ERROR): void
* Wraps a message with a given message type, e.g.
*
* @param string $messageType The message type, e.g. "warning".
- * @param string|string[] $message The message to wrap.
- * @return string|string[] The message wrapped with the given message type.
+ * @param array|string $message The message to wrap.
+ * @return array|string The message wrapped with the given message type.
*/
protected function wrapMessageWithType(string $messageType, $message)
{
@@ -371,7 +371,7 @@ public function overwrite($message, int $newlines = 1, ?int $size = null): void
* Outputs a single or multiple error messages to stderr. If no parameters
* are passed outputs just a newline.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to stderr.
*/
@@ -469,7 +469,7 @@ public function setStyle(string $style, array $definition): void
* Prompts the user for input based on a list of options, and returns it.
*
* @param string $prompt Prompt text.
- * @param string|array $options Array or string of options.
+ * @param array|string $options Array or string of options.
* @param string|null $default Default input value.
* @return string Either the default value, or the user-provided input.
*/
@@ -578,14 +578,14 @@ public function setLoggers($enable): void
* object has not already been loaded, it will be loaded and constructed.
*
* @param string $name The name of the helper to render
- * @param array $settings Configuration data for the helper.
+ * @param array $config Configuration data for the helper.
* @return \Cake\Console\Helper The created helper instance.
*/
- public function helper(string $name, array $settings = []): Helper
+ public function helper(string $name, array $config = []): Helper
{
$name = ucfirst($name);
- return $this->_helpers->load($name, $settings);
+ return $this->_helpers->load($name, $config);
}
/**
@@ -600,11 +600,11 @@ public function helper(string $name, array $settings = []): Helper
*
* @param string $path The path to create the file at.
* @param string $contents The contents to put into the file.
- * @param bool $forceOverwrite Whether or not the file should be overwritten.
- * If true, no question will be asked about whether or not to overwrite existing files.
+ * @param bool $forceOverwrite Whether the file should be overwritten.
+ * If true, no question will be asked about whether to overwrite existing files.
* @return bool Success.
* @throws \Cake\Console\Exception\StopException When `q` is given as an answer
- * to whether or not a file should be overwritten.
+ * to whether a file should be overwritten.
*/
public function createFile(string $path, string $contents, bool $forceOverwrite = false): bool
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleOptionParser.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleOptionParser.php
index 1951d2bdb..61bbea39b 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleOptionParser.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleOptionParser.php
@@ -95,14 +95,14 @@ class ConsoleOptionParser
* Option definitions.
*
* @see \Cake\Console\ConsoleOptionParser::addOption()
- * @var \Cake\Console\ConsoleInputOption[]
+ * @var array
*/
protected $_options = [];
/**
* Map of short -> long options, generated when using addOption()
*
- * @var array
+ * @var array
*/
protected $_shortOptions = [];
@@ -110,7 +110,7 @@ class ConsoleOptionParser
* Positional argument definitions.
*
* @see \Cake\Console\ConsoleOptionParser::addArgument()
- * @var \Cake\Console\ConsoleInputArgument[]
+ * @var array<\Cake\Console\ConsoleInputArgument>
*/
protected $_args = [];
@@ -118,7 +118,7 @@ class ConsoleOptionParser
* Subcommands for this Shell.
*
* @see \Cake\Console\ConsoleOptionParser::addSubcommand()
- * @var \Cake\Console\ConsoleInputSubcommand[]
+ * @var array
*/
protected $_subcommands = [];
@@ -212,7 +212,7 @@ public static function create(string $command, bool $defaultOptions = true)
* ];
* ```
*
- * @param array $spec The spec to build the OptionParser with.
+ * @param array $spec The spec to build the OptionParser with.
* @param bool $defaultOptions Whether you want the verbose and quiet options set.
* @return static
*/
@@ -241,7 +241,7 @@ public static function buildFromArray(array $spec, bool $defaultOptions = true)
/**
* Returns an array representation of this parser.
*
- * @return array
+ * @return array
*/
public function toArray(): array
{
@@ -260,7 +260,7 @@ public function toArray(): array
/**
* Get or set the command name for shell/task.
*
- * @param array|\Cake\Console\ConsoleOptionParser $spec ConsoleOptionParser or spec to merge with.
+ * @param \Cake\Console\ConsoleOptionParser|array $spec ConsoleOptionParser or spec to merge with.
* @return $this
*/
public function merge($spec)
@@ -313,7 +313,7 @@ public function getCommand(): string
/**
* Sets the description text for shell/task.
*
- * @param string|array $text The text to set. If an array the
+ * @param array|string $text The text to set. If an array the
* text will be imploded with "\n".
* @return $this
*/
@@ -341,7 +341,7 @@ public function getDescription(): string
* Sets an epilog to the parser. The epilog is added to the end of
* the options and arguments listing when help is generated.
*
- * @param string|array $text The text to set. If an array the text will
+ * @param array|string $text The text to set. If an array the text will
* be imploded with "\n".
* @return $this
*/
@@ -368,7 +368,7 @@ public function getEpilog(): string
/**
* Enables sorting of subcommands
*
- * @param bool $value Whether or not to sort subcommands
+ * @param bool $value Whether to sort subcommands
* @return $this
*/
public function enableSubcommandSort(bool $value = true)
@@ -379,7 +379,7 @@ public function enableSubcommandSort(bool $value = true)
}
/**
- * Checks whether or not sorting is enabled for subcommands.
+ * Checks whether sorting is enabled for subcommands.
*
* @return bool
*/
@@ -409,7 +409,7 @@ public function isSubcommandSortEnabled(): bool
*
* @param \Cake\Console\ConsoleInputOption|string $name The long name you want to the value to be parsed out
* as when options are parsed. Will also accept an instance of ConsoleInputOption.
- * @param array $options An array of parameters that define the behavior of the option
+ * @param array $options An array of parameters that define the behavior of the option
* @return $this
*/
public function addOption($name, array $options = [])
@@ -477,7 +477,7 @@ public function removeOption(string $name)
*
* @param \Cake\Console\ConsoleInputArgument|string $name The name of the argument.
* Will also accept an instance of ConsoleInputArgument.
- * @param array $params Parameters for the argument, see above.
+ * @param array $params Parameters for the argument, see above.
* @return $this
*/
public function addArgument($name, array $params = [])
@@ -537,7 +537,7 @@ public function addArguments(array $args)
* Add multiple options at once. Takes an array of option definitions.
* The keys are used as option names, and the values as params for the option.
*
- * @param array $options Array of options to add.
+ * @param array $options Array of options to add.
* @see \Cake\Console\ConsoleOptionParser::addOption()
* @return $this
*/
@@ -567,7 +567,7 @@ public function addOptions(array $options)
*
* @param \Cake\Console\ConsoleInputSubcommand|string $name Name of the subcommand.
* Will also accept an instance of ConsoleInputSubcommand.
- * @param array $options Array of params, see above.
+ * @param array $options Array of params, see above.
* @return $this
*/
public function addSubcommand($name, array $options = [])
@@ -610,7 +610,7 @@ public function removeSubcommand(string $name)
/**
* Add multiple subcommands at once.
*
- * @param array $commands Array of subcommands.
+ * @param array $commands Array of subcommands.
* @return $this
*/
public function addSubcommands(array $commands)
@@ -629,7 +629,7 @@ public function addSubcommands(array $commands)
/**
* Gets the arguments defined in the parser.
*
- * @return \Cake\Console\ConsoleInputArgument[]
+ * @return array<\Cake\Console\ConsoleInputArgument>
*/
public function arguments()
{
@@ -639,7 +639,7 @@ public function arguments()
/**
* Get the list of argument names.
*
- * @return string[]
+ * @return array
*/
public function argumentNames()
{
@@ -654,7 +654,7 @@ public function argumentNames()
/**
* Get the defined options in the parser.
*
- * @return \Cake\Console\ConsoleInputOption[]
+ * @return array
*/
public function options()
{
@@ -664,7 +664,7 @@ public function options()
/**
* Get the array of defined subcommands
*
- * @return \Cake\Console\ConsoleInputSubcommand[]
+ * @return array
*/
public function subcommands()
{
@@ -773,7 +773,7 @@ public function help(?string $subcommand = null, string $format = 'text', int $w
->addOptions($this->options())
->addArguments($this->arguments());
}
- if (strlen($subparser->getDescription()) === 0) {
+ if ($subparser->getDescription() === '') {
$subparser->setDescription($command->getRawHelp());
}
$subparser->setCommand($this->getCommand() . ' ' . $subcommand);
@@ -815,7 +815,7 @@ public function setRootName(string $name)
* options with an `=` in them.
*
* @param string $option The option to parse.
- * @param array $params The params to append the parsed value into
+ * @param array $params The params to append the parsed value into
* @return array Params with $option added in.
*/
protected function _parseLongOption(string $option, array $params): array
@@ -835,8 +835,8 @@ protected function _parseLongOption(string $option, array $params): array
* they will be shifted onto the token stack and parsed individually.
*
* @param string $option The option to parse.
- * @param array $params The params to append the parsed value into
- * @return array Params with $option added in.
+ * @param array $params The params to append the parsed value into
+ * @return array Params with $option added in.
* @throws \Cake\Console\Exception\ConsoleException When unknown short options are encountered.
*/
protected function _parseShortOption(string $option, array $params): array
@@ -869,8 +869,8 @@ protected function _parseShortOption(string $option, array $params): array
* Parse an option by its name index.
*
* @param string $name The name to parse.
- * @param array $params The params to append the parsed value into
- * @return array Params with $option added in.
+ * @param array $params The params to append the parsed value into
+ * @return array Params with $option added in.
* @throws \Cake\Console\Exception\ConsoleException
*/
protected function _parseOption(string $name, array $params): array
@@ -929,7 +929,7 @@ protected function _optionExists(string $name): bool
*
* @param string $argument The argument to append
* @param array $args The array of parsed args to append to.
- * @return string[] Args
+ * @return array Args
* @throws \Cake\Console\Exception\ConsoleException
*/
protected function _parseArg(string $argument, array $args): array
diff --git a/app/vendor/cakephp/cakephp/src/Console/ConsoleOutput.php b/app/vendor/cakephp/cakephp/src/Console/ConsoleOutput.php
index e009583f6..d87fbb390 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ConsoleOutput.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ConsoleOutput.php
@@ -93,7 +93,7 @@ class ConsoleOutput
/**
* text colors used in colored output.
*
- * @var array
+ * @var array
*/
protected static $_foregroundColors = [
'black' => 30,
@@ -109,7 +109,7 @@ class ConsoleOutput
/**
* background colors used in colored output.
*
- * @var array
+ * @var array
*/
protected static $_backgroundColors = [
'black' => 40,
@@ -125,7 +125,7 @@ class ConsoleOutput
/**
* Formatting options for colored output.
*
- * @var array
+ * @var array
*/
protected static $_options = [
'bold' => 1,
@@ -138,7 +138,7 @@ class ConsoleOutput
* Styles that are available as tags in console output.
* You can modify these styles with ConsoleOutput::styles()
*
- * @var array
+ * @var array
*/
protected static $_styles = [
'emergency' => ['text' => 'red'],
@@ -158,7 +158,7 @@ class ConsoleOutput
* Construct the output object.
*
* Checks for a pretty console environment. Ansicon and ConEmu allows
- * pretty consoles on windows, and is supported.
+ * pretty consoles on Windows, and is supported.
*
* @param string $stream The identifier of the stream to write output to.
*/
@@ -190,7 +190,7 @@ function_exists('posix_isatty') &&
* Outputs a single or multiple messages to stdout or stderr. If no parameters
* are passed, outputs just a newline.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to output.
*/
@@ -230,7 +230,7 @@ public function styleText(string $text): string
/**
* Replace tags with color codes.
*
- * @param array $matches An array of matches to replace.
+ * @param array $matches An array of matches to replace.
* @return string
*/
protected function _replaceTags(array $matches): string
@@ -312,7 +312,7 @@ public function setStyle(string $style, array $definition): void
/**
* Gets all the style definitions.
*
- * @return array
+ * @return array
*/
public function styles(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/Exception/MissingOptionException.php b/app/vendor/cakephp/cakephp/src/Console/Exception/MissingOptionException.php
index 58f8a8efb..3d5994f77 100644
--- a/app/vendor/cakephp/cakephp/src/Console/Exception/MissingOptionException.php
+++ b/app/vendor/cakephp/cakephp/src/Console/Exception/MissingOptionException.php
@@ -32,7 +32,7 @@ class MissingOptionException extends ConsoleException
/**
* The valid suggestions.
*
- * @var string[]
+ * @var array
*/
protected $suggestions = [];
@@ -41,7 +41,7 @@ class MissingOptionException extends ConsoleException
*
* @param string $message The string message.
* @param string $requested The requested value.
- * @param string[] $suggestions The list of potential values that were valid.
+ * @param array $suggestions The list of potential values that were valid.
* @param int|null $code The exception code if relevant.
* @param \Throwable|null $previous the previous exception.
*/
@@ -87,7 +87,7 @@ public function getFullMessage(): string
* Find the best match for requested in suggestions
*
* @param string $needle Unknown option name trying to be used.
- * @param string[] $haystack Suggestions to look through.
+ * @param array $haystack Suggestions to look through.
* @return string The best match
*/
protected function findClosestItem($needle, $haystack): ?string
diff --git a/app/vendor/cakephp/cakephp/src/Console/HelpFormatter.php b/app/vendor/cakephp/cakephp/src/Console/HelpFormatter.php
index 275972b49..146b0bb90 100644
--- a/app/vendor/cakephp/cakephp/src/Console/HelpFormatter.php
+++ b/app/vendor/cakephp/cakephp/src/Console/HelpFormatter.php
@@ -118,7 +118,7 @@ public function text(int $width = 72): string
}
$options = $parser->options();
- if (!empty($options)) {
+ if ($options) {
$max = $this->_getMaxLength($options) + 8;
$out[] = 'Options:';
$out[] = '';
@@ -192,7 +192,7 @@ protected function _generateUsage(): string
/**
* Iterate over a collection and find the longest named thing.
*
- * @param array $collection The collection to find a max length of.
+ * @param array<\Cake\Console\ConsoleInputOption|\Cake\Console\ConsoleInputArgument|\Cake\Console\ConsoleInputSubcommand> $collection The collection to find a max length of.
* @return int
*/
protected function _getMaxLength(array $collection): int
@@ -209,7 +209,7 @@ protected function _getMaxLength(array $collection): int
* Get the help as an XML string.
*
* @param bool $string Return the SimpleXml object or a string. Defaults to true.
- * @return string|\SimpleXMLElement See $string
+ * @return \SimpleXMLElement|string See $string
*/
public function xml(bool $string = true)
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/Helper.php b/app/vendor/cakephp/cakephp/src/Console/Helper.php
index 50a49767b..d9161b6af 100644
--- a/app/vendor/cakephp/cakephp/src/Console/Helper.php
+++ b/app/vendor/cakephp/cakephp/src/Console/Helper.php
@@ -32,7 +32,7 @@ abstract class Helper
/**
* Default config for this helper.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [];
@@ -47,7 +47,7 @@ abstract class Helper
* Constructor.
*
* @param \Cake\Console\ConsoleIo $io The ConsoleIo instance to use.
- * @param array $config The settings for this helper.
+ * @param array $config The settings for this helper.
*/
public function __construct(ConsoleIo $io, array $config = [])
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/HelperRegistry.php b/app/vendor/cakephp/cakephp/src/Console/HelperRegistry.php
index 900bbc317..30f312c1e 100644
--- a/app/vendor/cakephp/cakephp/src/Console/HelperRegistry.php
+++ b/app/vendor/cakephp/cakephp/src/Console/HelperRegistry.php
@@ -52,7 +52,7 @@ public function setIo(ConsoleIo $io): void
* Will prefer helpers defined in Command\Helper over those
* defined in Shell\Helper.
*
- * Part of the template method for Cake\Core\ObjectRegistry::load()
+ * Part of the template method for {@link \Cake\Core\ObjectRegistry::load()}.
*
* @param string $class Partial classname to resolve.
* @return string|null Either the correct class name or null.
@@ -94,7 +94,7 @@ protected function _throwMissingClassError(string $class, ?string $plugin): void
*
* @param string $class The classname to create.
* @param string $alias The alias of the helper.
- * @param array $config An array of settings to use for the helper.
+ * @param array $config An array of settings to use for the helper.
* @return \Cake\Console\Helper The constructed helper class.
* @psalm-suppress MoreSpecificImplementedParamType
*/
diff --git a/app/vendor/cakephp/cakephp/src/Console/Shell.php b/app/vendor/cakephp/cakephp/src/Console/Shell.php
index f196e36c5..529e4ca54 100644
--- a/app/vendor/cakephp/cakephp/src/Console/Shell.php
+++ b/app/vendor/cakephp/cakephp/src/Console/Shell.php
@@ -143,7 +143,7 @@ class Shell
/**
* Contains the loaded tasks
*
- * @var array
+ * @var array
*/
public $taskNames = [];
@@ -157,7 +157,7 @@ class Shell
/**
* Normalized map of tasks.
*
- * @var array
+ * @var array
*/
protected $_taskMap = [];
@@ -394,9 +394,7 @@ public function dispatchShell(): int
{
[$args, $extra] = $this->parseDispatchArguments(func_get_args());
- if (!isset($extra['requested'])) {
- $extra['requested'] = true;
- }
+ $extra['requested'] = $extra['requested'] ?? true;
/** @psalm-suppress DeprecatedClass */
$dispatcher = new ShellDispatcher($args, false);
@@ -615,18 +613,14 @@ public function __get(string $name)
*/
public function param(string $name)
{
- if (!isset($this->params[$name])) {
- return null;
- }
-
- return $this->params[$name];
+ return $this->params[$name] ?? null;
}
/**
* Prompts the user for input, and returns it.
*
* @param string $prompt Prompt text.
- * @param string|array|null $options Array or string of options.
+ * @param array|string|null $options Array or string of options.
* @param string|null $default Default input value.
* @return string|null Either the default value, or the user-provided input.
* @link https://book.cakephp.org/4/en/console-and-shells.html#Shell::in
@@ -654,7 +648,7 @@ public function in(string $prompt, $options = null, ?string $default = null): ?s
* - `indent` Indent the text with the string provided. Defaults to null.
*
* @param string $text Text the text to format.
- * @param int|array $options Array of options to use, or an integer to wrap the text to.
+ * @param array|int $options Array of options to use, or an integer to wrap the text to.
* @return string Wrapped / indented text
* @see \Cake\Utility\Text::wrap()
* @link https://book.cakephp.org/4/en/console-and-shells.html#Shell::wrapText
@@ -667,7 +661,7 @@ public function wrapText(string $text, $options = []): string
/**
* Output at the verbose level.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int|null The number of bytes returned from writing to stdout.
*/
@@ -679,7 +673,7 @@ public function verbose($message, int $newlines = 1): ?int
/**
* Output at all levels.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int|null The number of bytes returned from writing to stdout.
*/
@@ -699,7 +693,7 @@ public function quiet($message, int $newlines = 1): ?int
* present in most shells. Using Shell::QUIET for a message means it will always display.
* While using Shell::VERBOSE means it will only display when verbose output is toggled.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout.
@@ -714,7 +708,7 @@ public function out($message, int $newlines = 1, int $level = Shell::NORMAL): ?i
* Outputs a single or multiple error messages to stderr. If no parameters
* are passed outputs just a newline.
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to stderr.
*/
@@ -726,7 +720,7 @@ public function err($message, int $newlines = 1): int
/**
* Convenience method for out() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout.
@@ -740,7 +734,7 @@ public function info($message, int $newlines = 1, int $level = Shell::NORMAL): ?
/**
* Convenience method for err() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @return int The number of bytes returned from writing to stderr.
* @see https://book.cakephp.org/4/en/console-and-shells.html#Shell::err
@@ -753,7 +747,7 @@ public function warn($message, int $newlines = 1): int
/**
* Convenience method for out() that wraps message between tag
*
- * @param string|string[] $message A string or an array of strings to output
+ * @param array|string $message A string or an array of strings to output
* @param int $newlines Number of newlines to append
* @param int $level The message's output level, see above.
* @return int|null The number of bytes returned from writing to stdout.
@@ -906,12 +900,12 @@ public function shortPath(string $file): string
* object has not already been loaded, it will be loaded and constructed.
*
* @param string $name The name of the helper to render
- * @param array $settings Configuration data for the helper.
+ * @param array $config Configuration data for the helper.
* @return \Cake\Console\Helper The created helper instance.
*/
- public function helper(string $name, array $settings = []): Helper
+ public function helper(string $name, array $config = []): Helper
{
- return $this->_io->helper($name, $settings);
+ return $this->_io->helper($name, $config);
}
/**
@@ -931,7 +925,7 @@ protected function _stop(int $status = self::CODE_SUCCESS): void
* Returns an array that can be used to describe the internal state of this
* object.
*
- * @return array
+ * @return array
*/
public function __debugInfo(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php b/app/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php
index 482b4800c..79f4fcedf 100644
--- a/app/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php
+++ b/app/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php
@@ -44,7 +44,7 @@ class ShellDispatcher
/**
* List of connected aliases.
*
- * @var array
+ * @var array
*/
protected static $_aliases = [];
@@ -203,7 +203,7 @@ public function dispatch(array $extra = []): int
* Built-in extra parameter is :
*
* - `requested` : if used, will prevent the Shell welcome message to be displayed
- * @return bool|int|null
+ * @return int|bool|null
* @throws \Cake\Console\Exception\MissingShellMethodException
*/
protected function _dispatch(array $extra = [])
@@ -279,7 +279,6 @@ public function addShortPluginAliases(): array
$other = static::alias($shell);
if ($other) {
- $other = $aliases[$shell];
if ($other !== $plugin) {
Log::write(
'debug',
diff --git a/app/vendor/cakephp/cakephp/src/Console/TaskRegistry.php b/app/vendor/cakephp/cakephp/src/Console/TaskRegistry.php
index e4863e7b2..9368a3a22 100644
--- a/app/vendor/cakephp/cakephp/src/Console/TaskRegistry.php
+++ b/app/vendor/cakephp/cakephp/src/Console/TaskRegistry.php
@@ -48,7 +48,7 @@ public function __construct(Shell $shell)
/**
* Resolve a task classname.
*
- * Part of the template method for Cake\Core\ObjectRegistry::load()
+ * Part of the template method for {@link \Cake\Core\ObjectRegistry::load()}.
*
* @param string $class Partial classname to resolve.
* @return string|null Either the correct class name or null.
@@ -66,7 +66,7 @@ protected function _resolveClassName(string $class): ?string
* and Cake\Core\ObjectRegistry::unload()
*
* @param string $class The classname that is missing.
- * @param string $plugin The plugin the task is missing in.
+ * @param string|null $plugin The plugin the task is missing in.
* @return void
* @throws \Cake\Console\Exception\MissingTaskException
*/
@@ -85,7 +85,7 @@ protected function _throwMissingClassError(string $class, ?string $plugin): void
*
* @param string $class The classname to create.
* @param string $alias The alias of the task.
- * @param array $config An array of settings to use for the task.
+ * @param array $config An array of settings to use for the task.
* @return \Cake\Console\Shell The constructed task class.
* @psalm-suppress MoreSpecificImplementedParamType
*/
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component.php b/app/vendor/cakephp/cakephp/src/Controller/Component.php
index 54362df63..52540c039 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component.php
@@ -37,13 +37,13 @@
* cycle. The available callbacks are:
*
* - `beforeFilter(EventInterface $event)`
- * Called before the controller's beforeFilter method by default.
+ * Called before Controller::beforeFilter() method by default.
* - `startup(EventInterface $event)`
- * Called after the controller's beforeFilter method, and before the
+ * Called after Controller::beforeFilter() method, and before the
* controller action is called.
* - `beforeRender(EventInterface $event)`
- * Called before the Controller beforeRender, and before the view class is loaded.
- * - `shutdown(EventInterface $event)`
+ * Called before Controller::beforeRender(), and before the view class is loaded.
+ * - `afterFilter(EventInterface $event)`
* Called after the action is complete and the view has been rendered but
* before Controller::afterFilter().
* - `beforeRedirect(EventInterface $event $url, Response $response)`
@@ -82,14 +82,14 @@ class Component implements EventListenerInterface
*
* These are merged with user-provided config when the component is used.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [];
/**
* A component lookup table used to lazy load component objects.
*
- * @var array
+ * @var array
*/
protected $_componentMap = [];
@@ -98,7 +98,7 @@ class Component implements EventListenerInterface
*
* @param \Cake\Controller\ComponentRegistry $registry A component registry
* this component can use to lazy load its components.
- * @param array $config Array of configuration settings.
+ * @param array $config Array of configuration settings.
*/
public function __construct(ComponentRegistry $registry, array $config = [])
{
@@ -128,7 +128,7 @@ public function getController(): Controller
* Implement this method to avoid having to overwrite
* the constructor and call parent.
*
- * @param array $config The configuration settings provided to this component.
+ * @param array $config The configuration settings provided to this component.
* @return void
*/
public function initialize(array $config): void
@@ -147,11 +147,8 @@ public function __get(string $name)
$config = (array)$this->_componentMap[$name]['config'] + ['enabled' => false];
$this->{$name} = $this->_registry->load($this->_componentMap[$name]['class'], $config);
}
- if (!isset($this->{$name})) {
- return null;
- }
- return $this->{$name};
+ return $this->{$name} ?? null;
}
/**
@@ -164,7 +161,7 @@ public function __get(string $name)
* Override this method if you need to add non-conventional event listeners.
* Or if you want components to listen to non-standard events.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -173,7 +170,7 @@ public function implementedEvents(): array
'Controller.startup' => 'startup',
'Controller.beforeRender' => 'beforeRender',
'Controller.beforeRedirect' => 'beforeRedirect',
- 'Controller.shutdown' => 'shutdown',
+ 'Controller.shutdown' => 'afterFilter',
];
$events = [];
foreach ($eventMap as $event => $method) {
@@ -182,6 +179,14 @@ public function implementedEvents(): array
}
}
+ if (!isset($events['Controller.shutdown']) && method_exists($this, 'shutdown')) {
+ deprecationWarning(
+ '`Controller.shutdown` event callback is now `afterFilter()` instead of `shutdown()`.',
+ 0
+ );
+ $events[$event] = 'shutdown';
+ }
+
return $events;
}
@@ -189,7 +194,7 @@ public function implementedEvents(): array
* Returns an array that can be used to describe the internal state of this
* object.
*
- * @return array
+ * @return array
*/
public function __debugInfo(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php
index a9d859b2c..c299a6151 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php
@@ -79,7 +79,7 @@ class AuthComponent extends Component implements EventDispatcherInterface
* ```
*
* Using the class name without 'Authenticate' as the key, you can pass in an
- * array of config for each authentication object. Additionally you can define
+ * array of config for each authentication object. Additionally, you can define
* config that should be set to all authentications objects using the 'all' key:
*
* ```
@@ -156,7 +156,7 @@ class AuthComponent extends Component implements EventDispatcherInterface
* Defaults to 'Controller.startup'. You can set it to 'Controller.initialize'
* if you want the check to be done before controller's beforeFilter() is run.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'authenticate' => null,
@@ -181,14 +181,14 @@ class AuthComponent extends Component implements EventDispatcherInterface
/**
* Objects that will be used for authentication checks.
*
- * @var \Cake\Auth\BaseAuthenticate[]
+ * @var array<\Cake\Auth\BaseAuthenticate>
*/
protected $_authenticateObjects = [];
/**
* Objects that will be used for authorization checks.
*
- * @var \Cake\Auth\BaseAuthorize[]
+ * @var array<\Cake\Auth\BaseAuthorize>
*/
protected $_authorizeObjects = [];
@@ -202,7 +202,7 @@ class AuthComponent extends Component implements EventDispatcherInterface
/**
* Controller actions for which user validation is not required.
*
- * @var string[]
+ * @var array
* @see \Cake\Controller\Component\AuthComponent::allow()
*/
public $allowedActions = [];
@@ -227,7 +227,7 @@ class AuthComponent extends Component implements EventDispatcherInterface
/**
* Initialize properties.
*
- * @param array $config The config data.
+ * @param array $config The config data.
* @return void
*/
public function initialize(array $config): void
@@ -308,7 +308,7 @@ public function authCheck(EventInterface $event): ?Response
/**
* Events supported by this component.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -474,11 +474,11 @@ protected function _setDefaults(): void
/**
* Check if the provided user is authorized for the request.
*
- * Uses the configured Authorization adapters to check whether or not a user is authorized.
+ * Uses the configured Authorization adapters to check whether a user is authorized.
* Each adapter will be checked in sequence, if any of them return true, then the user will
* be authorized for the request.
*
- * @param array|\ArrayAccess|null $user The user to check the authorization of.
+ * @param \ArrayAccess|array|null $user The user to check the authorization of.
* If empty the user fetched from storage will be used.
* @param \Cake\Http\ServerRequest|null $request The request to authenticate for.
* If empty, the current request will be used.
@@ -578,7 +578,7 @@ public function getAuthorize(string $alias): ?BaseAuthorize
* $this->Auth->allow();
* ```
*
- * @param string|string[]|null $actions Controller action name or array of actions
+ * @param array|string|null $actions Controller action name or array of actions
* @return void
* @link https://book.cakephp.org/4/en/controllers/components/authentication.html#making-actions-public
*/
@@ -608,7 +608,7 @@ public function allow($actions = null): void
* ```
* to remove all items from the allowed list
*
- * @param string|string[]|null $actions Controller action name or array of actions
+ * @param array|string|null $actions Controller action name or array of actions
* @return void
* @see \Cake\Controller\Component\AuthComponent::allow()
* @link https://book.cakephp.org/4/en/controllers/components/authentication.html#making-actions-require-authorization
@@ -635,7 +635,7 @@ public function deny($actions = null): void
* The storage class is configured using `storage` config key or passing
* instance to AuthComponent::storage().
*
- * @param array|\ArrayAccess $user User data.
+ * @param \ArrayAccess|array $user User data.
* @return void
* @link https://book.cakephp.org/4/en/controllers/components/authentication.html#identifying-users-and-logging-them-in
*/
@@ -738,7 +738,7 @@ protected function _getUser(): bool
* `loginRedirect`, the `loginRedirect` value is returned.
* - If there is no session and no `loginRedirect`, / is returned.
*
- * @param string|array|null $url Optional URL to write as the login redirect URL.
+ * @param array|string|null $url Optional URL to write as the login redirect URL.
* @return string Redirect URL
*/
public function redirectUrl($url = null): string
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/FlashComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/FlashComponent.php
index 93b120bfd..b3f1d780d 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/FlashComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/FlashComponent.php
@@ -35,7 +35,7 @@ class FlashComponent extends Component
/**
* Default configuration
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'key' => 'flash',
@@ -60,10 +60,10 @@ class FlashComponent extends Component
* - `clear` A bool stating if the current stack should be cleared to start a new one
* - `escape` Set to false to allow templates to print out HTML content
*
- * @param string|\Throwable $message Message to be flashed. If an instance
+ * @param \Throwable|string $message Message to be flashed. If an instance
* of \Throwable the throwable message will be used and code will be set
* in params.
- * @param array $options An array of options
+ * @param array $options An array of options
* @return void
*/
public function set($message, array $options = []): void
@@ -88,7 +88,7 @@ protected function flash(): FlashMessage
/**
* Proxy method to FlashMessage instance.
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true.
* @return $this
@@ -128,7 +128,7 @@ public function getConfigOrFail(string $key)
/**
* Proxy method to FlashMessage instance.
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @return $this
*/
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/FormProtectionComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/FormProtectionComponent.php
index c2861b8d9..947403dca 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/FormProtectionComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/FormProtectionComponent.php
@@ -58,7 +58,7 @@ class FormProtectionComponent extends Component
* failure. Must be a valid Closure. Unset by default in which case
* exception is thrown on validation failure.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'validate' => true,
@@ -118,7 +118,7 @@ public function startup(EventInterface $event): ?Response
/**
* Events supported by this component.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/PaginatorComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/PaginatorComponent.php
index 8391cdb14..c6e4d2d3d 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/PaginatorComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/PaginatorComponent.php
@@ -50,7 +50,7 @@ class PaginatorComponent extends Component
* parameters. Modifying this list will allow users to have more influence
* over pagination, be careful with what you permit.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'page' => 1,
@@ -87,7 +87,7 @@ public function __construct(ComponentRegistry $registry, array $config = [])
/**
* Events supported by this component.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -188,7 +188,7 @@ public function implementedEvents(): array
* ```
*
* @param \Cake\Datasource\RepositoryInterface|\Cake\Datasource\QueryInterface $object Table or query to paginate.
- * @param array $settings The settings/configuration used for pagination.
+ * @param array $settings The settings/configuration used for pagination.
* @return \Cake\Datasource\ResultSetInterface Query results
* @throws \Cake\Http\Exception\NotFoundException
*/
@@ -226,8 +226,8 @@ public function paginate(object $object, array $settings = []): ResultSetInterfa
*
* @param string $alias Model alias being paginated, if the general settings has a key with this value
* that key's settings will be used for pagination instead of the general ones.
- * @param array $settings The settings to merge with the request data.
- * @return array Array of merged options.
+ * @param array $settings The settings to merge with the request data.
+ * @return array Array of merged options.
*/
public function mergeOptions(string $alias, array $settings): array
{
@@ -279,7 +279,7 @@ protected function _setPagingParams(): void
/**
* Proxy setting config options to Paginator.
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true.
* @return $this
@@ -306,7 +306,7 @@ public function getConfig(?string $key = null, $default = null)
/**
* Proxy setting config options to Paginator.
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @return $this
*/
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/RequestHandlerComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/RequestHandlerComponent.php
index fa2223c70..75d0604d9 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/RequestHandlerComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/RequestHandlerComponent.php
@@ -65,7 +65,7 @@ class RequestHandlerComponent extends Component
* - `viewClassMap` - Mapping between type and view classes. If undefined
* JSON, XML, and AJAX will be mapped. Defining any types will omit the defaults.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'checkHttpCache' => true,
@@ -76,7 +76,7 @@ class RequestHandlerComponent extends Component
* Constructor. Parses the accepted content types accepted by the client using HTTP_ACCEPT
*
* @param \Cake\Controller\ComponentRegistry $registry ComponentRegistry object.
- * @param array $config Array of config.
+ * @param array $config Array of config.
*/
public function __construct(ComponentRegistry $registry, array $config = [])
{
@@ -93,7 +93,7 @@ public function __construct(ComponentRegistry $registry, array $config = [])
/**
* Events supported by this component.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -183,12 +183,12 @@ public function startup(EventInterface $event): void
* - If Router::extensions() is enabled, the layout and template type are
* switched based on the parsed extension or `Accept` header. For example,
* if `controller/action.xml` is requested, the view path becomes
- * `templates/Controller/xml/action.php`. Also if `controller/action` is
+ * `templates/Controller/xml/action.php`. Also, if `controller/action` is
* requested with `Accept: application/xml` in the headers the view
* path will become `templates/Controller/xml/action.php`. Layout and template
- * types will only switch to mime-types recognized by Cake\Http\Response.
+ * types will only switch to mime-types recognized by \Cake\Http\Response.
* If you need to declare additional mime-types, you can do so using
- * Cake\Http\Response::setTypeMap() in your controller's beforeFilter() method.
+ * {@link \Cake\Http\Response::setTypeMap()} in your controller's beforeFilter() method.
* - If a helper with the same name as the extension exists, it is added to
* the controller.
* - If the extension is of a type that RequestHandler understands, it will
@@ -230,7 +230,7 @@ public function beforeRender(EventInterface $event): void
/**
* Determines which content types the client accepts. Acceptance is based on
* the file extension parsed by the Router (if present), and by the HTTP_ACCEPT
- * header. Unlike Cake\Http\ServerRequest::accepts() this method deals entirely with mapped content types.
+ * header. Unlike {@link \Cake\Http\ServerRequest::accepts()} this method deals entirely with mapped content types.
*
* Usage:
*
@@ -246,9 +246,9 @@ public function beforeRender(EventInterface $event): void
*
* Returns true if the client accepts XML.
*
- * @param string|array|null $type Can be null (or no parameter), a string type name, or an
+ * @param array|string|null $type Can be null (or no parameter), a string type name, or an
* array of types
- * @return mixed If null or no parameter is passed, returns an array of content
+ * @return array|bool|string|null If null or no parameter is passed, returns an array of content
* types the client accepts. If a string is passed, returns true
* if the client accepts it. If an array is passed, returns true
* if the client accepts one or more elements in the array.
@@ -284,7 +284,7 @@ public function accepts($type = null)
/**
* Determines the content type of the data the client has sent (i.e. in a POST request)
*
- * @param string|array|null $type Can be null (or no parameter), a string type name, or an array of types
+ * @param array|string|null $type Can be null (or no parameter), a string type name, or an array of types
* @return mixed If a single type is supplied a boolean will be returned. If no type is provided
* The mapped value of CONTENT_TYPE will be returned. If an array is supplied the first type
* in the request content type will be returned.
@@ -317,9 +317,11 @@ public function requestedWith($type = null)
return $controller->getResponse()->mapType($contentType);
}
- if (is_string($type)) {
- return $type === $controller->getResponse()->mapType($contentType);
+ if (!is_string($type)) {
+ return null;
}
+
+ return $type === $controller->getResponse()->mapType($contentType);
}
/**
@@ -330,7 +332,7 @@ public function requestedWith($type = null)
* if provided, and secondarily by the list of content-types provided in
* HTTP_ACCEPT.
*
- * @param string|array|null $type An optional array of 'friendly' content-type names, i.e.
+ * @param array|string|null $type An optional array of 'friendly' content-type names, i.e.
* 'html', 'xml', 'js', etc.
* @return string|bool|null If $type is null or not provided, the first content-type in the
* list, based on preference, is returned. If a single type is provided
@@ -394,7 +396,7 @@ public function prefers($type = null)
*
* @param \Cake\Controller\Controller $controller A reference to a controller object
* @param string $type Type of response to send (e.g: 'ajax')
- * @param array $options Array of options to use
+ * @param array $options Array of options to use
* @return void
* @see \Cake\Controller\Component\RequestHandlerComponent::respondAs()
*/
@@ -444,11 +446,11 @@ public function renderAs(Controller $controller, string $type, array $options =
/**
* Sets the response header based on type map index name. This wraps several methods
- * available on Cake\Http\Response. It also allows you to use Content-Type aliases.
+ * available on {@link \Cake\Http\Response}. It also allows you to use Content-Type aliases.
*
* @param string $type Friendly type name, i.e. 'html' or 'xml', or a full content-type,
* like 'application/x-shockwave'.
- * @param array $options If $type is a friendly type name that is associated with
+ * @param array $options If $type is a friendly type name that is associated with
* more than one type of content, $index is used to select which content-type to use.
* @return bool Returns false if the friendly type name given in $type does
* not exist in the type map, or if the Content-type header has
@@ -467,9 +469,7 @@ public function respondAs($type, array $options = []): bool
$cType = $response->getMimeType($type);
}
if (is_array($cType)) {
- if (isset($cType[$options['index']])) {
- $cType = $cType[$options['index']];
- }
+ $cType = $cType[$options['index']] ?? $cType;
if ($this->prefers($cType)) {
$cType = $this->prefers($cType);
@@ -498,8 +498,8 @@ public function respondAs($type, array $options = []): bool
/**
* Maps a content type alias back to its mime-type(s)
*
- * @param string|array $alias String alias to convert back into a content type. Or an array of aliases to map.
- * @return string|array|null Null on an undefined alias. String value of the mapped alias type. If an
+ * @param array|string $alias String alias to convert back into a content type. Or an array of aliases to map.
+ * @return array|string|null Null on an undefined alias. String value of the mapped alias type. If an
* alias maps to more than one content type, the first one will be returned. If an array is provided
* for $alias, an array of mapped types will be returned.
*/
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Component/SecurityComponent.php b/app/vendor/cakephp/cakephp/src/Controller/Component/SecurityComponent.php
index b8f44c145..4043b3f36 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Component/SecurityComponent.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Component/SecurityComponent.php
@@ -64,7 +64,7 @@ class SecurityComponent extends Component
* - `validatePost` - Whether to validate POST data. Set to false to disable
* for data coming from 3rd party services, etc.
*
- * @var array
+ * @var array
*/
protected $_defaultConfig = [
'blackHoleCallback' => null,
@@ -127,7 +127,7 @@ public function startup(EventInterface $event): ?Response
/**
* Events supported by this component.
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -139,7 +139,7 @@ public function implementedEvents(): array
/**
* Sets the actions that require a request that is SSL-secured, or empty for all actions
*
- * @param string|string[]|null $actions Actions list
+ * @param array|string|null $actions Actions list
* @return void
*/
public function requireSecure($actions = null): void
@@ -285,7 +285,7 @@ protected function _validToken(Controller $controller): string
* Return hash parts for the Token generation
*
* @param \Cake\Controller\Controller $controller Instantiating controller
- * @return string[]
+ * @return array
*/
protected function _hashParts(Controller $controller): array
{
@@ -409,7 +409,7 @@ protected function _sortedUnlocked(array $data): string
* Create a message for humans to understand why Security token is not matching
*
* @param \Cake\Controller\Controller $controller Instantiating controller
- * @param array $hashParts Elements used to generate the Token hash
+ * @param array $hashParts Elements used to generate the Token hash
* @return string Message explaining why the tokens are not matching
*/
protected function _debugPostTokenNotMatching(Controller $controller, array $hashParts): string
@@ -463,7 +463,7 @@ protected function _debugPostTokenNotMatching(Controller $controller, array $has
* @param string $stringKeyMessage Message string if tampered found in
* data fields indexed by string (protected).
* @param string $missingMessage Message string if missing field
- * @return string[] Messages
+ * @return array Messages
*/
protected function _debugCheckFields(
array $dataFields,
@@ -528,7 +528,7 @@ protected function _callback(Controller $controller, string $method, array $para
* @param string $intKeyMessage Message string if unexpected found in data fields indexed by int (not protected)
* @param string $stringKeyMessage Message string if tampered found in
* data fields indexed by string (protected)
- * @return string[] Error messages
+ * @return array Error messages
*/
protected function _matchExistingFields(
array $dataFields,
diff --git a/app/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php b/app/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php
index 3e4142544..288230519 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php
@@ -84,7 +84,7 @@ public function setController(Controller $controller)
/**
* Resolve a component classname.
*
- * Part of the template method for Cake\Core\ObjectRegistry::load()
+ * Part of the template method for {@link \Cake\Core\ObjectRegistry::load()}.
*
* @param string $class Partial classname to resolve.
* @return string|null Either the correct class name or null.
@@ -98,8 +98,8 @@ protected function _resolveClassName(string $class): ?string
/**
* Throws an exception when a component is missing.
*
- * Part of the template method for Cake\Core\ObjectRegistry::load()
- * and Cake\Core\ObjectRegistry::unload()
+ * Part of the template method for {@link \Cake\Core\ObjectRegistry::load()}
+ * and {@link \Cake\Core\ObjectRegistry::unload()}
*
* @param string $class The classname that is missing.
* @param string|null $plugin The plugin the component is missing in.
@@ -117,12 +117,12 @@ protected function _throwMissingClassError(string $class, ?string $plugin): void
/**
* Create the component instance.
*
- * Part of the template method for Cake\Core\ObjectRegistry::load()
+ * Part of the template method for {@link \Cake\Core\ObjectRegistry::load()}
* Enabled components will be registered with the event manager.
*
* @param string $class The classname to create.
* @param string $alias The alias of the component.
- * @param array $config An array of config to use for the component.
+ * @param array $config An array of config to use for the component.
* @return \Cake\Controller\Component The constructed component class.
* @psalm-suppress MoreSpecificImplementedParamType
* @psalm-param class-string $class
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Controller.php b/app/vendor/cakephp/cakephp/src/Controller/Controller.php
index 3bf1327d0..ef4086961 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/Controller.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/Controller.php
@@ -57,7 +57,7 @@
* possibly a redirection to another URL. In either case `$this->getResponse()`
* allows you to manipulate all aspects of the response.
*
- * Controllers are created by `ActionDispatcher` based on request parameters and
+ * Controllers are created based on request parameters and
* routing. By default controllers and actions use conventional names.
* For example `/posts/index` maps to `PostsController::index()`. You can re-map
* URLs using Router::connect() or RouterBuilder::connect().
@@ -121,13 +121,6 @@ class Controller implements EventListenerInterface, EventDispatcherInterface
*/
protected $response;
- /**
- * The class name to use for creating the response object.
- *
- * @var string
- */
- protected $_responseClass = Response::class;
-
/**
* Settings for pagination.
*
@@ -161,6 +154,14 @@ class Controller implements EventListenerInterface, EventDispatcherInterface
*/
protected $plugin;
+ /**
+ * Middlewares list.
+ *
+ * @var array
+ * @psalm-var array
+ */
+ protected $middlewares = [];
+
/**
* Constructor.
*
@@ -183,9 +184,7 @@ public function __construct(
) {
if ($name !== null) {
$this->name = $name;
- }
-
- if ($this->name === null && $request && $request->getParam('controller')) {
+ } elseif ($this->name === null && $request) {
$this->name = $request->getParam('controller');
}
@@ -202,9 +201,16 @@ public function __construct(
}
$this->modelFactory('Table', [$this->getTableLocator(), 'get']);
- $plugin = $this->request->getParam('plugin');
- $modelClass = ($plugin ? $plugin . '.' : '') . $this->name;
- $this->_setModelClass($modelClass);
+
+ if ($this->defaultTable !== null) {
+ $this->modelClass = $this->defaultTable;
+ }
+
+ if ($this->modelClass === null) {
+ $plugin = $this->request->getParam('plugin');
+ $modelClass = ($plugin ? $plugin . '.' : '') . $this->name;
+ $this->_setModelClass($modelClass);
+ }
if ($components !== null) {
$this->components($components);
@@ -277,7 +283,7 @@ public function components(?ComponentRegistry $components = null): ComponentRegi
* Will result in a `Authentication` property being set.
*
* @param string $name The name of the component to load.
- * @param array $config The config for the component.
+ * @param array $config The config for the component.
* @return \Cake\Controller\Component
* @throws \Exception
*/
@@ -544,11 +550,62 @@ public function invokeAction(Closure $action, array $args): void
}
}
+ /**
+ * Register middleware for the controller.
+ *
+ * @param \Psr\Http\Server\MiddlewareInterface|\Closure|string $middleware Middleware.
+ * @param array $options Valid options:
+ * - `only`: (array|string) Only run the middleware for specified actions.
+ * - `except`: (array|string) Run the middleware for all actions except the specified ones.
+ * @return void
+ * @psalm-param array{only?: array|string, except?: array|string} $options
+ */
+ public function middleware($middleware, array $options = [])
+ {
+ $this->middlewares[] = [
+ 'middleware' => $middleware,
+ 'options' => $options,
+ ];
+ }
+
+ /**
+ * Get middleware to be applied for this controller.
+ *
+ * @return array
+ */
+ public function getMiddleware(): array
+ {
+ $matching = [];
+ $action = $this->request->getParam('action');
+
+ foreach ($this->middlewares as $middleware) {
+ $options = $middleware['options'];
+ if (!empty($options['only'])) {
+ if (in_array($action, (array)$options['only'], true)) {
+ $matching[] = $middleware['middleware'];
+ }
+
+ continue;
+ }
+
+ if (
+ !empty($options['except']) &&
+ in_array($action, (array)$options['except'], true)
+ ) {
+ continue;
+ }
+
+ $matching[] = $middleware['middleware'];
+ }
+
+ return $matching;
+ }
+
/**
* Returns a list of all events that will fire in the controller during its lifecycle.
* You can override this function to add your own listener callbacks
*
- * @return array
+ * @return array
*/
public function implementedEvents(): array
{
@@ -606,7 +663,7 @@ public function shutdownProcess(): ?ResponseInterface
/**
* Redirects to given $url, after turning off $this->autoRender.
*
- * @param string|array|\Psr\Http\Message\UriInterface $url A string, array-based URL or UriInterface instance.
+ * @param \Psr\Http\Message\UriInterface|array|string $url A string, array-based URL or UriInterface instance.
* @param int $status HTTP status code. Defaults to `302`.
* @return \Cake\Http\Response|null
* @link https://book.cakephp.org/4/en/controllers.html#Controller::redirect
@@ -653,6 +710,10 @@ public function redirect($url, int $status = 302): ?Response
*/
public function setAction(string $action, ...$args)
{
+ deprecationWarning(
+ 'Controller::setAction() is deprecated. Either refactor your code to use `redirect()`, ' .
+ 'or call the other action as a method.'
+ );
$this->setRequest($this->request->withParam('action', $action));
return $this->$action(...$args);
@@ -724,7 +785,7 @@ protected function _templatePath(): string
/**
* Returns the referring URL for this request.
*
- * @param string|array|null $default Default URL to use if HTTP_REFERER cannot be read from headers
+ * @param array|string|null $default Default URL to use if HTTP_REFERER cannot be read from headers
* @param bool $local If false, do not restrict referring URLs to local server.
* Careful with trusting external sources.
* @return string Referring URL
@@ -758,9 +819,9 @@ public function referer($default = '/', bool $local = true): string
*
* This method will also make the PaginatorHelper available in the view.
*
- * @param \Cake\ORM\Table|string|\Cake\ORM\Query|null $object Table to paginate
+ * @param \Cake\ORM\Table|\Cake\ORM\Query|string|null $object Table to paginate
* (e.g: Table instance, 'TableName' or a Query object)
- * @param array $settings The settings/configuration used for pagination.
+ * @param array $settings The settings/configuration used for pagination.
* @return \Cake\ORM\ResultSet|\Cake\Datasource\ResultSetInterface Query results
* @link https://book.cakephp.org/4/en/controllers.html#paginating-a-model
* @throws \RuntimeException When no compatible table object can be found.
@@ -799,7 +860,7 @@ public function paginate($object = null, array $settings = [])
* and allows all public methods on all subclasses of this class.
*
* @param string $action The action to check.
- * @return bool Whether or not the method is accessible from a URL.
+ * @return bool Whether the method is accessible from a URL.
* @throws \ReflectionException
*/
public function isAction(string $action): bool
@@ -851,7 +912,7 @@ public function beforeRender(EventInterface $event)
* using controller's response instance.
*
* @param \Cake\Event\EventInterface $event An Event instance
- * @param string|array $url A string or array-based URL pointing to another location within the app,
+ * @param array|string $url A string or array-based URL pointing to another location within the app,
* or an absolute URL
* @param \Cake\Http\Response $response The response object.
* @return \Cake\Http\Response|null|void
diff --git a/app/vendor/cakephp/cakephp/src/Controller/ControllerFactory.php b/app/vendor/cakephp/cakephp/src/Controller/ControllerFactory.php
index b877977e7..076878432 100644
--- a/app/vendor/cakephp/cakephp/src/Controller/ControllerFactory.php
+++ b/app/vendor/cakephp/cakephp/src/Controller/ControllerFactory.php
@@ -16,15 +16,19 @@
*/
namespace Cake\Controller;
+use Cake\Controller\Exception\InvalidParameterException;
use Cake\Core\App;
use Cake\Core\ContainerInterface;
use Cake\Http\ControllerFactoryInterface;
use Cake\Http\Exception\MissingControllerException;
+use Cake\Http\MiddlewareQueue;
+use Cake\Http\Runner;
use Cake\Http\ServerRequest;
use Cake\Utility\Inflector;
-use InvalidArgumentException;
+use Closure;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\RequestHandlerInterface;
use ReflectionClass;
use ReflectionFunction;
use ReflectionNamedType;
@@ -34,13 +38,18 @@
*
* @implements \Cake\Http\ControllerFactoryInterface<\Cake\Controller\Controller>
*/
-class ControllerFactory implements ControllerFactoryInterface
+class ControllerFactory implements ControllerFactoryInterface, RequestHandlerInterface
{
/**
* @var \Cake\Core\ContainerInterface
*/
protected $container;
+ /**
+ * @var \Cake\Controller\Controller
+ */
+ protected $controller;
+
/**
* Constructor
*
@@ -85,75 +94,178 @@ public function create(ServerRequestInterface $request): Controller
/**
* Invoke a controller's action and wrapping methods.
*
- * @param mixed $controller The controller to invoke.
+ * @param \Cake\Controller\Controller $controller The controller to invoke.
* @return \Psr\Http\Message\ResponseInterface The response
* @throws \Cake\Controller\Exception\MissingActionException If controller action is not found.
* @throws \UnexpectedValueException If return value of action method is not null or ResponseInterface instance.
- * @psalm-param \Cake\Controller\Controller $controller
*/
public function invoke($controller): ResponseInterface
{
+ $this->controller = $controller;
+
+ $middlewares = $controller->getMiddleware();
+
+ if ($middlewares) {
+ $middlewareQueue = new MiddlewareQueue($middlewares);
+ $runner = new Runner();
+
+ return $runner->run($middlewareQueue, $controller->getRequest(), $this);
+ }
+
+ return $this->handle($controller->getRequest());
+ }
+
+ /**
+ * Invoke the action.
+ *
+ * @param \Psr\Http\Message\ServerRequestInterface $request Request instance.
+ * @return \Psr\Http\Message\ResponseInterface
+ */
+ public function handle(ServerRequestInterface $request): ResponseInterface
+ {
+ $controller = $this->controller;
+ /** @psalm-suppress ArgumentTypeCoercion */
+ $controller->setRequest($request);
+
$result = $controller->startupProcess();
if ($result instanceof ResponseInterface) {
return $result;
}
+
$action = $controller->getAction();
+ $args = $this->getActionArgs(
+ $action,
+ array_values((array)$controller->getRequest()->getParam('pass'))
+ );
+ $controller->invokeAction($action, $args);
- $args = [];
- $reflection = new ReflectionFunction($action);
- $passed = array_values((array)$controller->getRequest()->getParam('pass'));
- foreach ($reflection->getParameters() as $i => $parameter) {
- $position = $parameter->getPosition();
- $hasDefault = $parameter->isDefaultValueAvailable();
+ $result = $controller->shutdownProcess();
+ if ($result instanceof ResponseInterface) {
+ return $result;
+ }
- // If there is no type we can't look in the container
- // assume the parameter is a passed param
+ return $controller->getResponse();
+ }
+
+ /**
+ * Get the arguments for the controller action invocation.
+ *
+ * @param \Closure $action Controller action.
+ * @param array $passedParams Params passed by the router.
+ * @return array
+ */
+ protected function getActionArgs(Closure $action, array $passedParams): array
+ {
+ $resolved = [];
+ $function = new ReflectionFunction($action);
+ foreach ($function->getParameters() as $parameter) {
$type = $parameter->getType();
- if (!$type) {
- if (count($passed)) {
- $args[$position] = array_shift($passed);
- } elseif ($hasDefault) {
- $args[$position] = $parameter->getDefaultValue();
+ if ($type && !$type instanceof ReflectionNamedType) {
+ // Only single types are supported
+ throw new InvalidParameterException([
+ 'template' => 'unsupported_type',
+ 'parameter' => $parameter->getName(),
+ 'controller' => $this->controller->getName(),
+ 'action' => $this->controller->getRequest()->getParam('action'),
+ 'prefix' => $this->controller->getRequest()->getParam('prefix'),
+ 'plugin' => $this->controller->getRequest()->getParam('plugin'),
+ ]);
+ }
+
+ // Check for dependency injection for classes
+ if ($type instanceof ReflectionNamedType && !$type->isBuiltin()) {
+ if ($this->container->has($type->getName())) {
+ $resolved[] = $this->container->get($type->getName());
+ continue;
}
- continue;
+
+ // Add default value if provided
+ // Do not allow positional arguments for classes
+ if ($parameter->isDefaultValueAvailable()) {
+ $resolved[] = $parameter->getDefaultValue();
+ continue;
+ }
+
+ throw new InvalidParameterException([
+ 'template' => 'missing_dependency',
+ 'parameter' => $parameter->getName(),
+ 'controller' => $this->controller->getName(),
+ 'action' => $this->controller->getRequest()->getParam('action'),
+ 'prefix' => $this->controller->getRequest()->getParam('prefix'),
+ 'plugin' => $this->controller->getRequest()->getParam('plugin'),
+ ]);
}
- $typeName = $type instanceof ReflectionNamedType ? ltrim($type->getName(), '?') : null;
-
- // Primitive types are passed args as they can't be looked up in the container.
- // We only handle strings currently.
- if ($typeName === 'string') {
- if (count($passed)) {
- $args[$position] = array_shift($passed);
- } elseif ($hasDefault) {
- $args[$position] = $parameter->getDefaultValue();
+
+ // Use any passed params as positional arguments
+ if ($passedParams) {
+ $argument = array_shift($passedParams);
+ if ($type instanceof ReflectionNamedType) {
+ $typedArgument = $this->coerceStringToType($argument, $type);
+
+ if ($typedArgument === null) {
+ throw new InvalidParameterException([
+ 'template' => 'failed_coercion',
+ 'passed' => $argument,
+ 'type' => $type->getName(),
+ 'parameter' => $parameter->getName(),
+ 'controller' => $this->controller->getName(),
+ 'action' => $this->controller->getRequest()->getParam('action'),
+ 'prefix' => $this->controller->getRequest()->getParam('prefix'),
+ 'plugin' => $this->controller->getRequest()->getParam('plugin'),
+ ]);
+ }
+ $argument = $typedArgument;
}
+
+ $resolved[] = $argument;
continue;
}
- // Check the container and parameter default value.
- if ($typeName && $this->container->has($typeName)) {
- $args[$position] = $this->container->get($typeName);
- } elseif ($hasDefault) {
- $args[$position] = $parameter->getDefaultValue();
+ // Add default value if provided
+ if ($parameter->isDefaultValueAvailable()) {
+ $resolved[] = $parameter->getDefaultValue();
+ continue;
}
- if (!array_key_exists($position, $args)) {
- throw new InvalidArgumentException(
- "Could not resolve action argument `{$parameter->getName()}`. " .
- 'It has no definition in the container, no passed parameter, and no default value.'
- );
+
+ // Variadic parameter can have 0 arguments
+ if ($parameter->isVariadic()) {
+ continue;
}
+
+ throw new InvalidParameterException([
+ 'template' => 'missing_parameter',
+ 'parameter' => $parameter->getName(),
+ 'controller' => $this->controller->getName(),
+ 'action' => $this->controller->getRequest()->getParam('action'),
+ 'prefix' => $this->controller->getRequest()->getParam('prefix'),
+ 'plugin' => $this->controller->getRequest()->getParam('plugin'),
+ ]);
}
- if (count($passed)) {
- $args = array_merge($args, $passed);
- }
- $controller->invokeAction($action, $args);
- $result = $controller->shutdownProcess();
- if ($result instanceof ResponseInterface) {
- return $result;
+ return array_merge($resolved, $passedParams);
+ }
+
+ /**
+ * Coerces string argument to primitive type.
+ *
+ * @param string $argument Argument to coerce
+ * @param \ReflectionNamedType $type Parameter type
+ * @return string|float|int|bool|null
+ */
+ protected function coerceStringToType(string $argument, ReflectionNamedType $type)
+ {
+ switch ($type->getName()) {
+ case 'string':
+ return $argument;
+ case 'float':
+ return is_numeric($argument) ? (float)$argument : null;
+ case 'int':
+ return ctype_digit($argument) ? (int)$argument : null;
+ case 'bool':
+ return $argument === '0' ? false : ($argument === '1' ? true : null);
}
- return $controller->getResponse();
+ return null;
}
/**
diff --git a/app/vendor/cakephp/cakephp/src/Controller/Exception/InvalidParameterException.php b/app/vendor/cakephp/cakephp/src/Controller/Exception/InvalidParameterException.php
new file mode 100644
index 000000000..e9a9d68fa
--- /dev/null
+++ b/app/vendor/cakephp/cakephp/src/Controller/Exception/InvalidParameterException.php
@@ -0,0 +1,51 @@
+
+ */
+ protected $templates = [
+ 'failed_coercion' => 'Unable to coerce "%s" to `%s` for `%s` in action %s::%s().',
+ 'missing_dependency' => 'Failed to inject dependency from service container for `%s` in action %s::%s().',
+ 'missing_parameter' => 'Missing passed parameter for `%s` in action %s::%s().',
+ 'unsupported_type' => 'Type declaration for `%s` in action %s::%s() is unsupported.',
+ ];
+
+ /**
+ * Switches message template based on `template` key in message array.
+ *
+ * @param string|array $message Either the string of the error message, or an array of attributes
+ * that are made available in the view, and sprintf()'d into Exception::$_messageTemplate
+ * @param int|null $code The error code
+ * @param \Throwable|null $previous the previous exception.
+ */
+ public function __construct($message = '', ?int $code = null, ?Throwable $previous = null)
+ {
+ if (is_array($message)) {
+ $this->_messageTemplate = $this->templates[$message['template']] ?? '';
+ unset($message['template']);
+ }
+ parent::__construct($message, $code, $previous);
+ }
+}
diff --git a/app/vendor/cakephp/cakephp/src/Core/App.php b/app/vendor/cakephp/cakephp/src/Core/App.php
index 9330b5ca2..5d7f1f0db 100644
--- a/app/vendor/cakephp/cakephp/src/Core/App.php
+++ b/app/vendor/cakephp/cakephp/src/Core/App.php
@@ -126,11 +126,11 @@ public static function shortName(string $class, string $type, string $suffix = '
return $class;
}
- $pluginName = substr($class, 0, $pos);
- $name = substr($class, $pos + strlen($type));
+ $pluginName = (string)substr($class, 0, $pos);
+ $name = (string)substr($class, $pos + strlen($type));
if ($suffix) {
- $name = substr($name, 0, -strlen($suffix));
+ $name = (string)substr($name, 0, -strlen($suffix));
}
$nonPluginNamespaces = [
@@ -182,7 +182,7 @@ protected static function _classExistsInBase(string $name, string $namespace): b
*
* @param string $type Type of path
* @param string|null $plugin Plugin name
- * @return string[]
+ * @return array
* @link https://book.cakephp.org/4/en/core-libraries/app.html#finding-paths-to-namespaces
*/
public static function path(string $type, ?string $plugin = null): array
@@ -228,7 +228,7 @@ public static function path(string $type, ?string $plugin = null): array
*
* @param string $type Package type.
* @param string|null $plugin Plugin name.
- * @return string[]
+ * @return array
*/
public static function classPath(string $type, ?string $plugin = null): array
{
@@ -253,7 +253,7 @@ public static function classPath(string $type, ?string $plugin = null): array
* Will return the full path to the cache engines package.
*
* @param string $type Package type.
- * @return string[] Full path to package
+ * @return array Full path to package
*/
public static function core(string $type): array
{
diff --git a/app/vendor/cakephp/cakephp/src/Core/BasePlugin.php b/app/vendor/cakephp/cakephp/src/Core/BasePlugin.php
index 0ab41df2c..08e5905d8 100644
--- a/app/vendor/cakephp/cakephp/src/Core/BasePlugin.php
+++ b/app/vendor/cakephp/cakephp/src/Core/BasePlugin.php
@@ -18,14 +18,15 @@
use Cake\Console\CommandCollection;
use Cake\Http\MiddlewareQueue;
use Cake\Routing\RouteBuilder;
+use Closure;
use InvalidArgumentException;
use ReflectionClass;
/**
* Base Plugin Class
*
- * Every plugin should extends from this class or implement the interfaces and
- * include a plugin class in it's src root folder.
+ * Every plugin should extend from this class or implement the interfaces and
+ * include a plugin class in its src root folder.
*/
class BasePlugin implements PluginInterface
{
@@ -102,7 +103,7 @@ class BasePlugin implements PluginInterface
/**
* Constructor
*
- * @param array $options Options
+ * @param array $options Options
*/
public function __construct(array $options = [])
{
@@ -258,7 +259,10 @@ public function routes(RouteBuilder $routes): void
{
$path = $this->getConfigPath() . 'routes.php';
if (is_file($path)) {
- require $path;
+ $return = require $path;
+ if ($return instanceof Closure) {
+ $return($routes);
+ }
}
}
diff --git a/app/vendor/cakephp/cakephp/src/Core/ClassLoader.php b/app/vendor/cakephp/cakephp/src/Core/ClassLoader.php
index 56a327793..e2a752556 100644
--- a/app/vendor/cakephp/cakephp/src/Core/ClassLoader.php
+++ b/app/vendor/cakephp/cakephp/src/Core/ClassLoader.php
@@ -26,7 +26,7 @@ class ClassLoader
* An associative array where the key is a namespace prefix and the value
* is an array of base directories for classes in that namespace.
*
- * @var array
+ * @var array
*/
protected $_prefixes = [];
@@ -37,7 +37,9 @@ class ClassLoader
*/
public function register(): void
{
- spl_autoload_register([$this, 'loadClass']);
+ /** @var callable $callable */
+ $callable = [$this, 'loadClass'];
+ spl_autoload_register($callable);
}
/**
@@ -58,9 +60,7 @@ public function addNamespace(string $prefix, string $baseDir, bool $prepend = fa
$baseDir = rtrim($baseDir, '/') . DIRECTORY_SEPARATOR;
$baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . '/';
- if (!isset($this->_prefixes[$prefix])) {
- $this->_prefixes[$prefix] = [];
- }
+ $this->_prefixes[$prefix] = $this->_prefixes[$prefix] ?? [];
if ($prepend) {
array_unshift($this->_prefixes[$prefix], $baseDir);
diff --git a/app/vendor/cakephp/cakephp/src/Core/Configure.php b/app/vendor/cakephp/cakephp/src/Core/Configure.php
index 3d3d28485..0272fab71 100644
--- a/app/vendor/cakephp/cakephp/src/Core/Configure.php
+++ b/app/vendor/cakephp/cakephp/src/Core/Configure.php
@@ -47,12 +47,12 @@ class Configure
* Configured engine classes, used to load config files from resources
*
* @see \Cake\Core\Configure::load()
- * @var \Cake\Core\Configure\ConfigEngineInterface[]
+ * @var array<\Cake\Core\Configure\ConfigEngineInterface>
*/
protected static $_engines = [];
/**
- * Flag to track whether or not ini_set exists.
+ * Flag to track whether ini_set exists.
*
* @var bool|null
*/
@@ -76,7 +76,7 @@ class Configure
* ]);
* ```
*
- * @param string|array $config The key to write, can be a dot notation value.
+ * @param array|string $config The key to write, can be a dot notation value.
* Alternatively can be an array containing key(s) and value(s).
* @param mixed $value Value to set for var
* @return void
@@ -270,7 +270,7 @@ public static function isConfigured(string $name): bool
/**
* Gets the names of the configured Engine objects.
*
- * @return string[]
+ * @return array
*/
public static function configured(): array
{
@@ -321,15 +321,23 @@ public static function drop(string $name): bool
* @param string $key name of configuration resource to load.
* @param string $config Name of the configured engine to use to read the resource identified by $key.
* @param bool $merge if config files should be merged instead of simply overridden
- * @return bool False if file not found, true if load successful.
+ * @return bool True if load successful.
+ * @throws \Cake\Core\Exception\CakeException if the $config engine is not found
* @link https://book.cakephp.org/4/en/development/configuration.html#reading-and-writing-configuration-files
*/
public static function load(string $key, string $config = 'default', bool $merge = true): bool
{
$engine = static::_getEngine($config);
if (!$engine) {
- return false;
+ throw new CakeException(
+ sprintf(
+ 'Config %s engine not found when attempting to load %s.',
+ $config,
+ $key
+ )
+ );
}
+
$values = $engine->read($key);
if ($merge) {
@@ -365,7 +373,7 @@ public static function load(string $key, string $config = 'default', bool $merge
* @param string $key The identifier to create in the config adapter.
* This could be a filename or a cache key depending on the adapter being used.
* @param string $config The name of the configured adapter to dump data with.
- * @param string[] $keys The name of the top-level keys you want to dump.
+ * @param array $keys The name of the top-level keys you want to dump.
* This allows you save only some data stored in Configure.
* @return bool Success
* @throws \Cake\Core\Exception\CakeException if the adapter does not implement a `dump` method.
diff --git a/app/vendor/cakephp/cakephp/src/Core/Configure/Engine/PhpConfig.php b/app/vendor/cakephp/cakephp/src/Core/Configure/Engine/PhpConfig.php
index 581a11b26..6bdf3a42a 100644
--- a/app/vendor/cakephp/cakephp/src/Core/Configure/Engine/PhpConfig.php
+++ b/app/vendor/cakephp/cakephp/src/Core/Configure/Engine/PhpConfig.php
@@ -25,7 +25,7 @@
* files containing simple PHP arrays.
*
* Files compatible with PhpConfig should return an array that
- * contains all of the configuration data contained in the file.
+ * contains all the configuration data contained in the file.
*
* An example configuration file would look like::
*
diff --git a/app/vendor/cakephp/cakephp/src/Core/ContainerInterface.php b/app/vendor/cakephp/cakephp/src/Core/ContainerInterface.php
index cd48aa893..244e45f7e 100644
--- a/app/vendor/cakephp/cakephp/src/Core/ContainerInterface.php
+++ b/app/vendor/cakephp/cakephp/src/Core/ContainerInterface.php
@@ -16,8 +16,7 @@
*/
namespace Cake\Core;
-use League\Container\Definition\DefinitionInterface;
-use Psr\Container\ContainerInterface as PsrInterface;
+use League\Container\DefinitionContainerInterface;
/**
* Interface for the Dependency Injection Container in CakePHP applications
@@ -31,33 +30,6 @@
* @experimental This interface is not final and can have additional
* methods and parameters added in future minor releases.
*/
-interface ContainerInterface extends PsrInterface
+interface ContainerInterface extends DefinitionContainerInterface
{
- /**
- * Add an item to the container.
- *
- * @param string $id The class name or name of the service being registered.
- * @param mixed $concrete Either the classname an interface or name resolves to.
- * Can also be a constructed object, Closure, or null. When null, the `$id` parameter will
- * be used as the concrete class name.
- * @param bool $shared Set to true to make a service shared.
- * @return \League\Container\Definition\DefinitionInterface
- */
- public function add(string $id, $concrete = null, bool $shared = false): DefinitionInterface;
-
- /**
- * Add a service provider to the container
- *
- * @param \League\Container\ServiceProvider\ServiceProviderInterface $provider The service provider to add.
- * @return $this
- */
- public function addServiceProvider($provider);
-
- /**
- * Modify an existing definition
- *
- * @param string $id The class name or name of the service being modified.
- * @return \League\Container\Definition\DefinitionInterface
- */
- public function extend(string $id): DefinitionInterface;
}
diff --git a/app/vendor/cakephp/cakephp/src/Core/Exception/CakeException.php b/app/vendor/cakephp/cakephp/src/Core/Exception/CakeException.php
index e65d05daf..0a9f02452 100644
--- a/app/vendor/cakephp/cakephp/src/Core/Exception/CakeException.php
+++ b/app/vendor/cakephp/cakephp/src/Core/Exception/CakeException.php
@@ -40,7 +40,7 @@ class CakeException extends RuntimeException
protected $_messageTemplate = '';
/**
- * Array of headers to be passed to Cake\Http\Response::header()
+ * Array of headers to be passed to {@link \Cake\Http\Response::header()}
*
* @var array|null
*/
@@ -59,7 +59,7 @@ class CakeException extends RuntimeException
* Allows you to create exceptions that are treated as framework errors and disabled
* when debug mode is off.
*
- * @param string|array $message Either the string of the error message, or an array of attributes
+ * @param array|string $message Either the string of the error message, or an array of attributes
* that are made available in the view, and sprintf()'d into Exception::$_messageTemplate
* @param int|null $code The error code
* @param \Throwable|null $previous the previous exception.
@@ -86,9 +86,9 @@ public function getAttributes(): array
/**
* Get/set the response header to be used
*
- * See also Cake\Http\Response::withHeader()
+ * See also {@link \Cake\Http\Response::withHeader()}
*
- * @param string|array|null $header A single header string or an associative
+ * @param array|string|null $header A single header string or an associative
* array of "header name" => "header value"
* @param string|null $value The header value.
* @return array|null
diff --git a/app/vendor/cakephp/cakephp/src/Core/InstanceConfigTrait.php b/app/vendor/cakephp/cakephp/src/Core/InstanceConfigTrait.php
index d5a2e1efa..4ab8246ce 100644
--- a/app/vendor/cakephp/cakephp/src/Core/InstanceConfigTrait.php
+++ b/app/vendor/cakephp/cakephp/src/Core/InstanceConfigTrait.php
@@ -30,7 +30,7 @@ trait InstanceConfigTrait
/**
* Runtime config
*
- * @var array
+ * @var array
*/
protected $_config = [];
@@ -64,7 +64,7 @@ trait InstanceConfigTrait
* $this->setConfig(['one' => 'value', 'another' => 'value']);
* ```
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true.
* @return $this
@@ -168,7 +168,7 @@ public function getConfigOrFail(string $key)
* $this->configShallow(['one' => 'value', 'another' => 'value']);
* ```
*
- * @param string|array $key The key to set, or a complete array of configs.
+ * @param array|string $key The key to set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @return $this
*/
@@ -217,9 +217,9 @@ protected function _configRead(?string $key)
/**
* Writes a config key.
*
- * @param string|array $key Key to write to.
+ * @param array|string $key Key to write to.
* @param mixed $value Value to write.
- * @param bool|string $merge True to merge recursively, 'shallow' for simple merge,
+ * @param string|bool $merge True to merge recursively, 'shallow' for simple merge,
* false to overwrite, defaults to false.
* @return void
* @throws \Cake\Core\Exception\CakeException if attempting to clobber existing config
@@ -265,9 +265,7 @@ protected function _configWrite($key, $value, $merge = false): void
throw new CakeException(sprintf('Cannot set %s value', $key));
}
- if (!isset($update[$k])) {
- $update[$k] = [];
- }
+ $update[$k] = $update[$k] ?? [];
$update = &$update[$k];
}
diff --git a/app/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php b/app/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php
index 3ff380a72..5fc7e5aae 100644
--- a/app/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php
+++ b/app/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php
@@ -46,7 +46,7 @@ abstract class ObjectRegistry implements Countable, IteratorAggregate
/**
* Map of loaded objects.
*
- * @var object[]
+ * @var array