diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc6ea40f..fa5e30364 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- Add support for arrays in actions + ## [5.2.0] - (30/11/2021) ### Changed diff --git a/composer.json b/composer.json index 1bf808d17..ecbfb0392 100644 --- a/composer.json +++ b/composer.json @@ -72,5 +72,10 @@ "fix-code-style": "vendor/bin/php-cs-fixer fix --config .php_cs --verbose --using-cache=no", "phpstan": "vendor/bristol-su/portal-code-style/src/PHPStan/phpstan.sh", "coverage": "vendor/bin/phpunit --colors=always --process-isolation --verbose --configuration phpunit.xml --coverage-html coverage" + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true + } } } diff --git a/composer.lock b/composer.lock index bcd29d770..1980879e6 100644 --- a/composer.lock +++ b/composer.lock @@ -58,16 +58,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.204.5", + "version": "3.209.28", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "1f690db4dfd66d0c729f4f8db12431bb047b4900" + "reference": "dfc4fdee991cdf764241125490a0b22875af6afe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1f690db4dfd66d0c729f4f8db12431bb047b4900", - "reference": "1f690db4dfd66d0c729f4f8db12431bb047b4900", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/dfc4fdee991cdf764241125490a0b22875af6afe", + "reference": "dfc4fdee991cdf764241125490a0b22875af6afe", "shasum": "" }, "require": { @@ -111,12 +111,12 @@ } }, "autoload": { - "psr-4": { - "Aws\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Aws\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -143,9 +143,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.204.5" + "source": "https://github.com/aws/aws-sdk-php/tree/3.209.28" }, - "time": "2021-11-24T19:13:34+00:00" + "time": "2022-02-21T19:14:33+00:00" }, { "name": "brick/math", @@ -209,16 +209,16 @@ }, { "name": "bristol-su/control", - "version": "v3.1.0", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/bristol-su/control.git", - "reference": "8f5d6a0abf82eab74259c58618291736d4d4ebe1" + "reference": "a9ba6f2f251bc97715ea51fdfec0ad9948e8c10e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bristol-su/control/zipball/8f5d6a0abf82eab74259c58618291736d4d4ebe1", - "reference": "8f5d6a0abf82eab74259c58618291736d4d4ebe1", + "url": "https://api.github.com/repos/bristol-su/control/zipball/a9ba6f2f251bc97715ea51fdfec0ad9948e8c10e", + "reference": "a9ba6f2f251bc97715ea51fdfec0ad9948e8c10e", "shasum": "" }, "require": { @@ -261,9 +261,9 @@ "description": "An implementation of the control contracts", "support": { "issues": "https://github.com/bristol-su/control/issues", - "source": "https://github.com/bristol-su/control/tree/v3.1.0" + "source": "https://github.com/bristol-su/control/tree/v3.1.3" }, - "time": "2021-10-24T17:45:36+00:00" + "time": "2021-11-30T22:05:28+00:00" }, { "name": "dflydev/dot-access-data", @@ -441,16 +441,16 @@ }, { "name": "doctrine/dbal", - "version": "2.13.5", + "version": "2.13.7", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d92ddb260547c2a7b650ff140f744eb6f395d8fc" + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d92ddb260547c2a7b650ff140f744eb6f395d8fc", - "reference": "d92ddb260547c2a7b650ff140f744eb6f395d8fc", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", "shasum": "" }, "require": { @@ -463,13 +463,13 @@ "require-dev": { "doctrine/coding-standard": "9.0.0", "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.1.1", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.10", + "phpstan/phpstan": "1.3.0", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.1", + "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.12.0" + "vimeo/psalm": "4.16.1" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -530,7 +530,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.5" + "source": "https://github.com/doctrine/dbal/tree/2.13.7" }, "funding": [ { @@ -546,7 +546,7 @@ "type": "tidelift" } ], - "time": "2021-11-11T16:27:36+00:00" + "time": "2022-01-06T09:08:04+00:00" }, { "name": "doctrine/deprecations", @@ -847,32 +847,28 @@ }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -907,7 +903,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "source": "https://github.com/doctrine/lexer/tree/1.2.2" }, "funding": [ { @@ -923,33 +919,33 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-01-12T08:27:12+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.1.0", + "version": "v3.3.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "webmozart/assert": "^1.7.0" + "webmozart/assert": "^1.0" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-webmozart-assert": "^0.12.7", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", @@ -976,7 +972,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" }, "funding": [ { @@ -984,25 +980,25 @@ "type": "github" } ], - "time": "2020-11-24T19:55:57+00:00" + "time": "2022-01-18T15:43:28+00:00" }, { "name": "dyrynda/laravel-cascade-soft-deletes", - "version": "4.1.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/michaeldyrynda/laravel-cascade-soft-deletes.git", - "reference": "dcfd120af3467901444a155ece03d8326efb53b3" + "reference": "6a4826c26954b83f3c11e08c5b4a63867c36b0a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michaeldyrynda/laravel-cascade-soft-deletes/zipball/dcfd120af3467901444a155ece03d8326efb53b3", - "reference": "dcfd120af3467901444a155ece03d8326efb53b3", + "url": "https://api.github.com/repos/michaeldyrynda/laravel-cascade-soft-deletes/zipball/6a4826c26954b83f3c11e08c5b4a63867c36b0a0", + "reference": "6a4826c26954b83f3c11e08c5b4a63867c36b0a0", "shasum": "" }, "require": { - "illuminate/database": "^8.12", - "illuminate/events": "^8.12", + "illuminate/database": "^8.12|^9.0", + "illuminate/events": "^8.12|^9.0", "php": "^7.3|^8.0" }, "require-dev": { @@ -1028,9 +1024,9 @@ "description": "Cascading deletes for Eloquent models that implement soft deletes", "support": { "issues": "https://github.com/michaeldyrynda/laravel-cascade-soft-deletes/issues", - "source": "https://github.com/michaeldyrynda/laravel-cascade-soft-deletes/tree/4.1.0" + "source": "https://github.com/michaeldyrynda/laravel-cascade-soft-deletes/tree/4.2.0" }, - "time": "2020-12-01T02:43:25+00:00" + "time": "2022-01-26T03:50:42+00:00" }, { "name": "egulias/email-validator", @@ -1164,16 +1160,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.0", + "version": "7.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", "shasum": "" }, "require": { @@ -1182,7 +1178,7 @@ "guzzlehttp/psr7": "^1.8.3 || ^2.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2" + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { "psr/http-client-implementation": "1.0" @@ -1206,12 +1202,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1268,7 +1264,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.0" + "source": "https://github.com/guzzle/guzzle/tree/7.4.1" }, "funding": [ { @@ -1284,7 +1280,7 @@ "type": "tidelift" } ], - "time": "2021-10-18T09:52:00+00:00" + "time": "2021-12-06T18:43:05+00:00" }, { "name": "guzzlehttp/promises", @@ -1487,24 +1483,24 @@ }, { "name": "laracasts/utilities", - "version": "3.2", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/laracasts/PHP-Vars-To-Js-Transformer.git", - "reference": "26b1712166a366e3f8a1fd1452d0c3b76cad612a" + "reference": "cfcda21b2425652e869af253d385d78e2129e3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laracasts/PHP-Vars-To-Js-Transformer/zipball/26b1712166a366e3f8a1fd1452d0c3b76cad612a", - "reference": "26b1712166a366e3f8a1fd1452d0c3b76cad612a", + "url": "https://api.github.com/repos/laracasts/PHP-Vars-To-Js-Transformer/zipball/cfcda21b2425652e869af253d385d78e2129e3a2", + "reference": "cfcda21b2425652e869af253d385d78e2129e3a2", "shasum": "" }, "require": { - "illuminate/support": "^5.0|^6.0|^7.0|^8.0", - "php": ">=5.5.0|>=7.2.5" + "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0", + "php": ">=5.5.0|>=7.2.5|>=8.0.0" }, "require-dev": { - "phpspec/phpspec": "~2.0" + "phpspec/phpspec": ">=2.0" }, "type": "library", "extra": { @@ -1542,22 +1538,22 @@ ], "support": { "issues": "https://github.com/laracasts/PHP-Vars-To-Js-Transformer/issues", - "source": "https://github.com/laracasts/PHP-Vars-To-Js-Transformer/tree/3.2" + "source": "https://github.com/laracasts/PHP-Vars-To-Js-Transformer/tree/3.2.1" }, - "time": "2020-09-07T13:29:37+00:00" + "time": "2022-02-09T14:09:45+00:00" }, { "name": "laravel/framework", - "version": "v8.73.2", + "version": "v8.83.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "0e1c63315eeaee5920552ff042bd820bb4014533" + "reference": "b91b3b5b39fbbdc763746f5714e08d50a4dd7857" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0e1c63315eeaee5920552ff042bd820bb4014533", - "reference": "0e1c63315eeaee5920552ff042bd820bb4014533", + "url": "https://api.github.com/repos/laravel/framework/zipball/b91b3b5b39fbbdc763746f5714e08d50a4dd7857", + "reference": "b91b3b5b39fbbdc763746f5714e08d50a4dd7857", "shasum": "" }, "require": { @@ -1575,22 +1571,22 @@ "opis/closure": "^3.6", "php": "^7.3|^8.0", "psr/container": "^1.0", - "psr/log": "^1.0 || ^2.0", + "psr/log": "^1.0|^2.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^4.2.2", "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.1.4", - "symfony/error-handler": "^5.1.4", - "symfony/finder": "^5.1.4", - "symfony/http-foundation": "^5.1.4", - "symfony/http-kernel": "^5.1.4", - "symfony/mime": "^5.1.4", - "symfony/process": "^5.1.4", - "symfony/routing": "^5.1.4", - "symfony/var-dumper": "^5.1.4", + "symfony/console": "^5.4", + "symfony/error-handler": "^5.4", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/mime": "^5.4", + "symfony/process": "^5.4", + "symfony/routing": "^5.4", + "symfony/var-dumper": "^5.4", "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^5.2", - "voku/portable-ascii": "^1.4.8" + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^1.6.1" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -1643,9 +1639,10 @@ "pda/pheanstalk": "^4.0", "phpunit/phpunit": "^8.5.19|^9.5.8", "predis/predis": "^1.1.9", - "symfony/cache": "^5.1.4" + "symfony/cache": "^5.4" }, "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", @@ -1670,8 +1667,8 @@ "predis/predis": "Required to use the predis connector (^1.1.9).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, @@ -1716,20 +1713,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-11-23T14:27:43+00:00" + "time": "2022-02-22T15:10:17+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.0.4", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "8148e72e6c2c3af7f05640ada1b26c3bca970f8d" + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8148e72e6c2c3af7f05640ada1b26c3bca970f8d", - "reference": "8148e72e6c2c3af7f05640ada1b26c3bca970f8d", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", "shasum": "" }, "require": { @@ -1775,20 +1772,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2021-11-16T17:01:57+00:00" + "time": "2022-02-11T19:23:53+00:00" }, { "name": "league/commonmark", - "version": "2.0.2", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13" + "reference": "13d7751377732637814f0cda0e3f6d3243f9f769" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2df87709f44b0dd733df86aef0830dce9b1f0f13", - "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/13d7751377732637814f0cda0e3f6d3243f9f769", + "reference": "13d7751377732637814f0cda0e3f6d3243f9f769", "shasum": "" }, "require": { @@ -1796,6 +1793,7 @@ "league/config": "^1.1.1", "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", "symfony/polyfill-php80": "^1.15" }, "require-dev": { @@ -1807,11 +1805,11 @@ "ext-json": "*", "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4", - "phpstan/phpstan": "^0.12.88", + "phpstan/phpstan": "^0.12.88 || ^1.0.0", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", "symfony/finder": "^5.3", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", "unleashedtech/php-coding-standard": "^3.1", "vimeo/psalm": "^4.7.3" }, @@ -1821,7 +1819,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.1-dev" + "dev-main": "2.3-dev" } }, "autoload": { @@ -1861,10 +1859,6 @@ "source": "https://github.com/thephpleague/commonmark" }, "funding": [ - { - "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", - "type": "custom" - }, { "url": "https://www.colinodell.com/sponsor", "type": "custom" @@ -1877,16 +1871,12 @@ "url": "https://github.com/colinodell", "type": "github" }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/league/commonmark", "type": "tidelift" } ], - "time": "2021-08-14T14:06:04+00:00" + "time": "2022-02-13T15:00:57+00:00" }, { "name": "league/config", @@ -1972,16 +1962,16 @@ }, { "name": "league/flysystem", - "version": "1.1.6", + "version": "1.1.9", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "627be7fcde84c71aa0f15097fcf48fd5f2be5287" + "reference": "094defdb4a7001845300334e7c1ee2335925ef99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/627be7fcde84c71aa0f15097fcf48fd5f2be5287", - "reference": "627be7fcde84c71aa0f15097fcf48fd5f2be5287", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99", "shasum": "" }, "require": { @@ -2054,7 +2044,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.6" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" }, "funding": [ { @@ -2062,7 +2052,7 @@ "type": "other" } ], - "time": "2021-11-21T11:04:36+00:00" + "time": "2021-12-09T09:40:50+00:00" }, { "name": "league/mime-type-detection", @@ -2251,12 +2241,12 @@ } }, "autoload": { - "psr-4": { - "JmesPath\\": "src/" - }, "files": [ "src/JmesPath.php" - ] + ], + "psr-4": { + "JmesPath\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2297,9 +2287,6 @@ "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" - }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", @@ -2307,12 +2294,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2340,16 +2327,16 @@ }, { "name": "nesbot/carbon", - "version": "2.54.0", + "version": "2.57.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5" + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5", - "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", "shasum": "" }, "require": { @@ -2357,7 +2344,7 @@ "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.0", @@ -2366,7 +2353,7 @@ "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^0.12.54 || ^1.0", "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, @@ -2418,6 +2405,7 @@ "time" ], "support": { + "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", "source": "https://github.com/briannesbitt/Carbon" }, @@ -2431,7 +2419,7 @@ "type": "tidelift" } ], - "time": "2021-11-01T21:22:20+00:00" + "time": "2022-02-13T18:13:33+00:00" }, { "name": "nette/schema", @@ -2497,16 +2485,16 @@ }, { "name": "nette/utils", - "version": "v3.2.6", + "version": "v3.2.7", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02" + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/2f261e55bd6a12057442045bf2c249806abc1d02", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02", + "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", "shasum": "" }, "require": { @@ -2576,22 +2564,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.6" + "source": "https://github.com/nette/utils/tree/v3.2.7" }, - "time": "2021-11-24T15:47:23+00:00" + "time": "2022-01-24T11:29:14+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.1", + "version": "v4.13.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd" + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -2632,22 +2620,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" }, - "time": "2021-11-03T20:52:16+00:00" + "time": "2021-11-30T19:35:32+00:00" }, { "name": "opis/closure", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { @@ -2697,9 +2685,9 @@ ], "support": { "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "source": "https://github.com/opis/closure/tree/3.6.3" }, - "time": "2021-04-09T13:42:10+00:00" + "time": "2022-01-27T09:35:39+00:00" }, { "name": "phar-io/manifest", @@ -2763,16 +2751,16 @@ }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -2808,9 +2796,9 @@ "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" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2924,16 +2912,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -2968,22 +2956,22 @@ "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" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpoption/phpoption", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28" + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5455cb38aed4523f99977c4a12ef19da4bfe2a28", - "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", "shasum": "" }, "require": { @@ -2991,7 +2979,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.0.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" }, "type": "library", "extra": { @@ -3011,11 +2999,13 @@ "authors": [ { "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" }, { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "description": "Option Type for PHP", @@ -3027,7 +3017,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.0" + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" }, "funding": [ { @@ -3039,20 +3029,20 @@ "type": "tidelift" } ], - "time": "2021-08-28T21:27:29+00:00" + "time": "2021-12-04T23:24:31+00:00" }, { "name": "phpspec/prophecy", - "version": "1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { @@ -3104,9 +3094,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2021-09-10T09:02:12+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -3162,16 +3152,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.9", + "version": "9.2.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b" + "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f301eb1453c9e7a1bc912ee8b0ea9db22c60223b", - "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f", + "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f", "shasum": "" }, "require": { @@ -3227,7 +3217,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11" }, "funding": [ { @@ -3235,20 +3225,20 @@ "type": "github" } ], - "time": "2021-11-19T15:21:02+00:00" + "time": "2022-02-18T12:46:09+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -3287,7 +3277,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -3295,7 +3285,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -3480,16 +3470,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.5.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "1883687169c017d6ae37c58883ca3994cfc34189" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189", + "reference": "1883687169c017d6ae37c58883ca3994cfc34189", "shasum": "" }, "require": { @@ -3540,11 +3530,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3567,11 +3557,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -3579,7 +3569,7 @@ "type": "github" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2022-02-18T12:54:07+00:00" }, { "name": "psr/container", @@ -4667,16 +4657,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -4719,7 +4709,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -4727,7 +4717,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -5271,28 +5261,29 @@ }, { "name": "symfony/console", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e7ab8f5905058984899b05a4648096f558bfeba" + "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e7ab8f5905058984899b05a4648096f558bfeba", - "reference": "3e7ab8f5905058984899b05a4648096f558bfeba", + "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -5304,12 +5295,12 @@ }, "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" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -5349,7 +5340,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.11" + "source": "https://github.com/symfony/console/tree/v5.4.3" }, "funding": [ { @@ -5365,25 +5356,24 @@ "type": "tidelift" } ], - "time": "2021-11-21T19:41:05+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.4", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90" + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a", + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -5415,7 +5405,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.4" + "source": "https://github.com/symfony/css-selector/tree/v6.0.3" }, "funding": [ { @@ -5431,29 +5421,29 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:38:00+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -5482,7 +5472,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" }, "funding": [ { @@ -5498,32 +5488,35 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2021-11-01T23:48:49+00:00" }, { "name": "symfony/error-handler", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "eec73dd7218713f48a7996583a741b3bae58c8d3" + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/eec73dd7218713f48a7996583a741b3bae58c8d3", - "reference": "eec73dd7218713f48a7996583a741b3bae58c8d3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", "autoload": { "psr-4": { @@ -5550,7 +5543,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.3.11" + "source": "https://github.com/symfony/error-handler/tree/v5.4.3" }, "funding": [ { @@ -5566,26 +5559,26 @@ "type": "tidelift" } ], - "time": "2021-11-13T13:42:37+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "661a7a6e085394f8513945669e31f7c1338a7e69" + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/661a7a6e085394f8513945669e31f7c1338a7e69", - "reference": "661a7a6e085394f8513945669e31f7c1338a7e69", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", "symfony/polyfill-php80": "^1.16" }, "conflict": { @@ -5597,13 +5590,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -5635,7 +5628,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.11" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" }, "funding": [ { @@ -5651,24 +5644,24 @@ "type": "tidelift" } ], - "time": "2021-11-17T12:16:12+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -5677,7 +5670,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -5714,7 +5707,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" }, "funding": [ { @@ -5730,24 +5723,25 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2021-07-15T12:33:35+00:00" }, { "name": "symfony/finder", - "version": "v5.3.7", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -5776,7 +5770,7 @@ "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" + "source": "https://github.com/symfony/finder/tree/v5.4.3" }, "funding": [ { @@ -5792,111 +5786,33 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ec82e57b5b714dbb69300d348bd840b345e24166", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "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 HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.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-11-03T09:24:47+00:00" + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d1e7059ebeb0b8f9fe5eb5b26eacd2e3c1f371cc" + "reference": "ef409ff341a565a3663157d4324536746d49a0c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d1e7059ebeb0b8f9fe5eb5b26eacd2e3c1f371cc", - "reference": "d1e7059ebeb0b8f9fe5eb5b26eacd2e3c1f371cc", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ef409ff341a565a3663157d4324536746d49a0c7", + "reference": "ef409ff341a565a3663157d4324536746d49a0c7", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php80": "^1.16" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -5927,7 +5843,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.3.11" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.3" }, "funding": [ { @@ -5943,36 +5859,35 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.3.12", + "version": "v5.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f53025cd1d91b1af85d6d9e17eefa98e31ee953b" + "reference": "49f40347228c773688a0488feea0175aa7f4d268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f53025cd1d91b1af85d6d9e17eefa98e31ee953b", - "reference": "f53025cd1d91b1af85d6d9e17eefa98e31ee953b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/49f40347228c773688a0488feea0175aa7f4d268", + "reference": "49f40347228c773688a0488feea0175aa7f4d268", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0", - "symfony/event-dispatcher": "^5.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^5.3.7", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.3.7|^6.0", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/browser-kit": "<4.4", + "symfony/browser-kit": "<5.4", "symfony/cache": "<5.0", "symfony/config": "<5.0", "symfony/console": "<4.4", @@ -5992,19 +5907,20 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/config": "^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^5.3", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -6039,7 +5955,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.3.12" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.4" }, "funding": [ { @@ -6055,25 +5971,25 @@ "type": "tidelift" } ], - "time": "2021-11-24T08:46:46+00:00" + "time": "2022-01-29T18:08:07+00:00" }, { "name": "symfony/mime", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "dffc0684f10526db12c52fcd6238c64695426d61" + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/dffc0684f10526db12c52fcd6238c64695426d61", - "reference": "dffc0684f10526db12c52fcd6238c64695426d61", + "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16" @@ -6087,10 +6003,10 @@ "require-dev": { "egulias/email-validator": "^2.1.10|^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.2|^6.0" }, "type": "library", "autoload": { @@ -6122,7 +6038,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.11" + "source": "https://github.com/symfony/mime/tree/v5.4.3" }, "funding": [ { @@ -6138,25 +6054,28 @@ "type": "tidelift" } ], - "time": "2021-11-20T16:42:42+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -6201,7 +6120,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -6217,25 +6136,28 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-iconv": "*" + }, "suggest": { "ext-iconv": "For best performance" }, @@ -6250,12 +6172,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6281,7 +6203,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0" }, "funding": [ { @@ -6297,20 +6219,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-01-04T09:04:05+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -6330,12 +6252,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6362,7 +6284,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" }, "funding": [ { @@ -6378,20 +6300,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", "shasum": "" }, "require": { @@ -6413,12 +6335,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6449,7 +6371,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" }, "funding": [ { @@ -6465,11 +6387,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-09-14T14:02:44+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -6498,12 +6420,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6533,7 +6455,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" }, "funding": [ { @@ -6553,21 +6475,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -6582,12 +6507,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6613,7 +6538,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" }, "funding": [ { @@ -6629,11 +6554,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -6659,12 +6584,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6689,7 +6614,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" }, "funding": [ { @@ -6709,16 +6634,16 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { @@ -6735,12 +6660,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6768,7 +6693,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" }, "funding": [ { @@ -6784,20 +6709,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-06-05T21:20:04+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -6814,12 +6739,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6851,7 +6776,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -6867,20 +6792,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -6897,12 +6822,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6930,7 +6855,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -6946,20 +6871,20 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/process", - "version": "v5.3.12", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e498803a6e95ede78e9d5646ad32a2255c033a6a" + "reference": "553f50487389a977eb31cf6b37faae56da00f753" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e498803a6e95ede78e9d5646ad32a2255c033a6a", - "reference": "e498803a6e95ede78e9d5646ad32a2255c033a6a", + "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", + "reference": "553f50487389a977eb31cf6b37faae56da00f753", "shasum": "" }, "require": { @@ -6992,7 +6917,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.12" + "source": "https://github.com/symfony/process/tree/v5.4.3" }, "funding": [ { @@ -7008,25 +6933,25 @@ "type": "tidelift" } ], - "time": "2021-11-22T22:39:13+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/routing", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "fcbc2b81d55984f04bb704c2269755fa5aaf5cca" + "reference": "44b29c7a94e867ccde1da604792f11a469958981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/fcbc2b81d55984f04bb704c2269755fa5aaf5cca", - "reference": "fcbc2b81d55984f04bb704c2269755fa5aaf5cca", + "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", + "reference": "44b29c7a94e867ccde1da604792f11a469958981", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16" }, "conflict": { @@ -7038,11 +6963,11 @@ "require-dev": { "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/config": "For using the all-in-one router or any loader", @@ -7082,7 +7007,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.11" + "source": "https://github.com/symfony/routing/tree/v5.4.3" }, "funding": [ { @@ -7098,26 +7023,25 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "d664541b99d6fb0247ec5ff32e87238582236204" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", + "reference": "d664541b99d6fb0247ec5ff32e87238582236204", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "psr/container": "^1.1" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -7128,7 +7052,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7165,7 +7089,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" }, "funding": [ { @@ -7181,35 +7105,37 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2021-11-04T16:37:19+00:00" }, { "name": "symfony/string", - "version": "v5.3.10", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c" + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", - "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "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" + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" }, "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" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -7248,7 +7174,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.10" + "source": "https://github.com/symfony/string/tree/v6.0.3" }, "funding": [ { @@ -7264,50 +7190,50 @@ "type": "tidelift" } ], - "time": "2021-10-27T18:21:46+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/translation", - "version": "v5.3.11", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "17a965c8f3b1b348cf15d903ac53942984561f8a" + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/17a965c8f3b1b348cf15d903ac53942984561f8a", - "reference": "17a965c8f3b1b348cf15d903ac53942984561f8a", + "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -7343,7 +7269,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.11" + "source": "https://github.com/symfony/translation/tree/v6.0.3" }, "funding": [ { @@ -7359,24 +7285,24 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2022-01-07T00:29:03+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "suggest": { "symfony/translation-implementation": "" @@ -7384,7 +7310,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -7421,7 +7347,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" }, "funding": [ { @@ -7437,20 +7363,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2021-09-07T12:43:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a029b3a11b757f9cc8693040339153b4745a913f" + "reference": "970a01f208bf895c5f327ba40b72288da43adec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a029b3a11b757f9cc8693040339153b4745a913f", - "reference": "a029b3a11b757f9cc8693040339153b4745a913f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/970a01f208bf895c5f327ba40b72288da43adec4", + "reference": "970a01f208bf895c5f327ba40b72288da43adec4", "shasum": "" }, "require": { @@ -7464,8 +7390,9 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -7509,7 +7436,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.11" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.3" }, "funding": [ { @@ -7525,7 +7452,7 @@ "type": "tidelift" } ], - "time": "2021-11-12T11:38:27+00:00" + "time": "2022-01-17T16:30:37+00:00" }, { "name": "theseer/tokenizer", @@ -7579,26 +7506,26 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" }, "type": "library", "extra": { @@ -7626,9 +7553,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" }, - "time": "2020-07-13T06:12:54+00:00" + "time": "2021-12-08T09:12:39+00:00" }, { "name": "tobytwigger/form-schema-generator", @@ -7661,12 +7588,12 @@ } }, "autoload": { - "psr-4": { - "FormSchema\\": "src/" - }, "files": [ "src/helpers/helpers.php" - ] + ], + "psr-4": { + "FormSchema\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7687,21 +7614,21 @@ }, { "name": "venturecraft/revisionable", - "version": "1.38.0", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/VentureCraft/revisionable.git", - "reference": "7dd938dd3b4abe0ff1bbd7aaf8245f3d66dce205" + "reference": "24ef304dfe7fe64362cc815faab0fc80030d0c59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/VentureCraft/revisionable/zipball/7dd938dd3b4abe0ff1bbd7aaf8245f3d66dce205", - "reference": "7dd938dd3b4abe0ff1bbd7aaf8245f3d66dce205", + "url": "https://api.github.com/repos/VentureCraft/revisionable/zipball/24ef304dfe7fe64362cc815faab0fc80030d0c59", + "reference": "24ef304dfe7fe64362cc815faab0fc80030d0c59", "shasum": "" }, "require": { - "illuminate/support": "~4.0|~5.0|~5.1|^6.0|^7.0|^8.0", - "laravel/framework": "~5.4|^6.0|^7.0|^8.0", + "illuminate/support": "~4.0|~5.0|~5.1|^6.0|^7.0|^8.0|^9.0", + "laravel/framework": "~5.4|^6.0|^7.0|^8.0|^9.0", "php": ">=5.4.0" }, "require-dev": { @@ -7716,12 +7643,12 @@ } }, "autoload": { - "classmap": [ - "src/migrations" - ], "psr-0": { "Venturecraft\\Revisionable": "src/" - } + }, + "classmap": [ + "src/migrations" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7747,20 +7674,20 @@ "issues": "https://github.com/VentureCraft/revisionable/issues", "source": "https://github.com/VentureCraft/revisionable" }, - "time": "2021-03-31T00:15:38+00:00" + "time": "2022-01-20T05:56:12+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403" + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/d4394d044ed69a8f244f3445bcedf8a0d7fe2403", - "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", "shasum": "" }, "require": { @@ -7798,11 +7725,13 @@ "authors": [ { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { "name": "Vance Lucas", - "email": "vance@vancelucas.com" + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -7813,7 +7742,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" }, "funding": [ { @@ -7825,20 +7754,20 @@ "type": "tidelift" } ], - "time": "2021-11-10T01:08:39+00:00" + "time": "2021-12-12T23:22:04+00:00" }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -7875,7 +7804,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { @@ -7899,7 +7828,7 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:55:24+00:00" }, { "name": "webmozart/assert", @@ -7963,16 +7892,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.3.3", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "a448f456921719fdf8a2c0f6d1e2e8f63c085ffa" + "reference": "5123a31dbf0b5deeaec17b00c0c5f31732c14483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/a448f456921719fdf8a2c0f6d1e2e8f63c085ffa", - "reference": "a448f456921719fdf8a2c0f6d1e2e8f63c085ffa", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/5123a31dbf0b5deeaec17b00c0c5f31732c14483", + "reference": "5123a31dbf0b5deeaec17b00c0c5f31732c14483", "shasum": "" }, "require": { @@ -7981,28 +7910,22 @@ "ext-reflection": "*", "ext-simplexml": "*", "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.7", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.11", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.10", + "phpunit/phpunit": "^9.5.14", "sebastian/environment": "^5.1.3", - "symfony/console": "^4.4.30 || ^5.3.7", - "symfony/process": "^4.4.30 || ^5.3.7" + "symfony/console": "^5.4.0 || ^6.0.0", + "symfony/process": "^5.4.0 || ^6.0.0" }, "require-dev": { "doctrine/coding-standard": "^9.0.0", - "ekino/phpstan-banned-code": "^0.5.0", - "ergebnis/phpstan-rules": "^0.15.3", "ext-posix": "*", - "infection/infection": "^0.25.3", - "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", - "squizlabs/php_codesniffer": "^3.6.0", - "symfony/filesystem": "^5.3.4", - "thecodingmachine/phpstan-strict-rules": "^0.12.1", - "vimeo/psalm": "^4.10.0" + "infection/infection": "^0.26.5", + "malukenho/mcbumpface": "^1.1.5", + "squizlabs/php_codesniffer": "^3.6.2", + "symfony/filesystem": "^v5.4.0 || ^6.0.0", + "vimeo/psalm": "^4.20.0" }, "bin": [ "bin/paratest" @@ -8041,7 +7964,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.3.3" + "source": "https://github.com/paratestphp/paratest/tree/v6.4.3" }, "funding": [ { @@ -8053,7 +7976,7 @@ "type": "paypal" } ], - "time": "2021-11-19T07:41:55+00:00" + "time": "2022-02-18T13:23:47+00:00" }, { "name": "bristol-su/portal-pipeline", @@ -8104,16 +8027,16 @@ }, { "name": "composer/package-versions-deprecated", - "version": "1.11.99.4", + "version": "1.11.99.5", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b174585d1fe49ceed21928a945138948cb394600" + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", - "reference": "b174585d1fe49ceed21928a945138948cb394600", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", "shasum": "" }, "require": { @@ -8157,7 +8080,7 @@ "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" + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" }, "funding": [ { @@ -8173,27 +8096,27 @@ "type": "tidelift" } ], - "time": "2021-09-13T08:41:34+00:00" + "time": "2022-01-17T14:14:24+00:00" }, { "name": "composer/semver", - "version": "3.2.6", + "version": "3.2.9", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "83e511e247de329283478496f7a1e114c9517506" + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", - "reference": "83e511e247de329283478496f7a1e114c9517506", + "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^1.4", "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", @@ -8238,7 +8161,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.6" + "source": "https://github.com/composer/semver/tree/3.2.9" }, "funding": [ { @@ -8254,7 +8177,7 @@ "type": "tidelift" } ], - "time": "2021-10-25T11:34:17+00:00" + "time": "2022-02-04T13:58:43+00:00" }, { "name": "composer/xdebug-handler", @@ -8343,12 +8266,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Stringy\\": "src/" - }, "files": [ "src/Create.php" - ] + ], + "psr-4": { + "Stringy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8454,32 +8377,34 @@ }, { "name": "fakerphp/faker", - "version": "v1.16.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "271d384d216e5e5c468a6b28feedf95d49f83b35" + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/271d384d216e5e5c468a6b28feedf95d49f83b35", - "reference": "271d384d216e5e5c468a6b28feedf95d49f83b35", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2" + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "conflict": { "fzaninotto/faker": "*" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", "symfony/phpunit-bridge": "^4.4 || ^5.2" }, "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", "ext-curl": "Required by Faker\\Provider\\Image to download images.", "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", @@ -8488,7 +8413,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.16-dev" + "dev-main": "v1.19-dev" } }, "autoload": { @@ -8513,9 +8438,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.16.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" }, - "time": "2021-09-06T14:53:37+00:00" + "time": "2022-02-02T17:38:57+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -8734,16 +8659,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.4", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346" + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e01123a0e847d52d186c5eb4b9bf58b0c6d00346", - "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", "shasum": "" }, "require": { @@ -8800,22 +8725,22 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.4.4" + "source": "https://github.com/mockery/mockery/tree/1.5.0" }, - "time": "2021-09-13T15:28:59+00:00" + "time": "2022-01-20T13:18:17+00:00" }, { "name": "nette/finder", - "version": "v2.5.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/nette/finder.git", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50" + "reference": "64dc25b7929b731e72a1bc84a9e57727f5d5d3e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/4ad2c298eb8c687dd0e74ae84206a4186eeaed50", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50", + "url": "https://api.github.com/repos/nette/finder/zipball/64dc25b7929b731e72a1bc84a9e57727f5d5d3e8", + "reference": "64dc25b7929b731e72a1bc84a9e57727f5d5d3e8", "shasum": "" }, "require": { @@ -8844,8 +8769,8 @@ "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { @@ -8867,9 +8792,9 @@ ], "support": { "issues": "https://github.com/nette/finder/issues", - "source": "https://github.com/nette/finder/tree/v2.5.2" + "source": "https://github.com/nette/finder/tree/v2.5.3" }, - "time": "2020-01-03T20:35:40+00:00" + "time": "2021-12-12T17:43:24+00:00" }, { "name": "nette/neon", @@ -9008,25 +8933,25 @@ }, { "name": "orchestra/testbench", - "version": "v6.23.0", + "version": "v6.24.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "94cf6e34cd3fbab07d02f6171bc7a350821c48c2" + "reference": "7b6a225851f6c148a80e241af5cbd833c83e572c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/94cf6e34cd3fbab07d02f6171bc7a350821c48c2", - "reference": "94cf6e34cd3fbab07d02f6171bc7a350821c48c2", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/7b6a225851f6c148a80e241af5cbd833c83e572c", + "reference": "7b6a225851f6c148a80e241af5cbd833c83e572c", "shasum": "" }, "require": { - "laravel/framework": "^8.67", + "laravel/framework": "^8.75", "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", + "orchestra/testbench-core": "^6.28.1", "php": "^7.3 || ^8.0", "phpunit/phpunit": "^8.5.21 || ^9.5.10", - "spatie/laravel-ray": "^1.18" + "spatie/laravel-ray": "^1.26.2" }, "type": "library", "extra": { @@ -9057,7 +8982,7 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v6.23.0" + "source": "https://github.com/orchestral/testbench/tree/v6.24.1" }, "funding": [ { @@ -9069,20 +8994,20 @@ "type": "liberapay" } ], - "time": "2021-11-09T23:05:41+00:00" + "time": "2022-02-08T12:57:17+00:00" }, { "name": "orchestra/testbench-core", - "version": "v6.27.1", + "version": "v6.28.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "d0e98c101bc57e8bb0121603bb84aff7c800a44e" + "reference": "e66074e825e21b40b3433703dc3f76f2bfebebe0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/d0e98c101bc57e8bb0121603bb84aff7c800a44e", - "reference": "d0e98c101bc57e8bb0121603bb84aff7c800a44e", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/e66074e825e21b40b3433703dc3f76f2bfebebe0", + "reference": "e66074e825e21b40b3433703dc3f76f2bfebebe0", "shasum": "" }, "require": { @@ -9092,7 +9017,7 @@ "vlucas/phpdotenv": "^5.1" }, "require-dev": { - "laravel/framework": "^8.67", + "laravel/framework": "^8.75", "laravel/laravel": "8.x-dev", "mockery/mockery": "^1.4.4", "orchestra/canvas": "^6.1", @@ -9101,7 +9026,7 @@ "symfony/process": "^5.0" }, "suggest": { - "laravel/framework": "Required for testing (^8.67).", + "laravel/framework": "Required for testing (^8.75).", "mockery/mockery": "Allow using Mockery for testing (^1.4.4).", "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^6.0).", "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^6.0).", @@ -9117,12 +9042,12 @@ } }, "autoload": { - "psr-4": { - "Orchestra\\Testbench\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9159,7 +9084,7 @@ "type": "liberapay" } ], - "time": "2021-11-17T02:37:48+00:00" + "time": "2022-02-08T12:50:35+00:00" }, { "name": "php-cs-fixer/diff", @@ -9565,66 +9490,13 @@ "rules/restoration/tests/Rector/Use_/RestoreFullyQualifiedNameRector/Source/ShortClassOnly.php" ], "psr-4": { - "Rector\\Testing\\": "packages/testing/src", - "Rector\\Comments\\": "packages/comments/src", - "Rector\\Architecture\\": "rules/architecture/src", - "Rector\\AttributeAwarePhpDoc\\": "packages/attribute-aware-php-doc/src", - "Rector\\Autodiscovery\\": "rules/autodiscovery/src", - "Rector\\BetterPhpDocParser\\": "packages/better-php-doc-parser/src", - "Rector\\Caching\\": "packages/caching/src", - "Rector\\CakePHP\\": "rules/cakephp/src", - "Rector\\ChangesReporting\\": "packages/changes-reporting/src", - "Rector\\CodeQuality\\": "rules/code-quality/src", - "Rector\\CodingStyle\\": "rules/coding-style/src", - "Rector\\Composer\\": "rules/composer/src", - "Rector\\ConsoleDiffer\\": "packages/console-differ/src", - "Rector\\Core\\": "src", - "Rector\\DeadCode\\": "rules/dead-code/src", - "Rector\\DependencyInjection\\": "rules/dependency-injection/src", - "Rector\\EarlyReturn\\": "rules/early-return/src", - "Rector\\DeadDocBlock\\": "rules/dead-doc-block/src", - "Rector\\DoctrineAnnotationGenerated\\": "packages/doctrine-annotation-generated/src", - "Rector\\DoctrineCodeQuality\\": "rules/doctrine-code-quality/src", - "Rector\\DoctrineGedmoToKnplabs\\": "rules/doctrine-gedmo-to-knplabs/src", - "Rector\\Doctrine\\": "rules/doctrine/src", - "Rector\\DowngradePhp70\\": "rules/downgrade-php70/src", - "Rector\\DowngradePhp71\\": "rules/downgrade-php71/src", - "Rector\\DowngradePhp72\\": "rules/downgrade-php72/src", - "Rector\\DowngradePhp73\\": "rules/downgrade-php73/src", - "Rector\\ReadWrite\\": "packages/read-write/src", - "Rector\\DowngradePhp74\\": "rules/downgrade-php74/src", - "Rector\\DowngradePhp80\\": "rules/downgrade-php80/src", - "Rector\\FamilyTree\\": "packages/family-tree/src", - "Rector\\FileSystemRector\\": "packages/file-system-rector/src", - "Rector\\Generic\\": "rules/generic/src", "Rector\\JMS\\": "rules/jms/src", - "Rector\\Laravel\\": "rules/laravel/src", - "Rector\\Legacy\\": "rules/legacy/src", - "Rector\\MagicDisclosure\\": "rules/magic-disclosure/src", - "Rector\\MockeryToProphecy\\": "rules/mockery-to-prophecy/src", - "Rector\\MockistaToMockery\\": "rules/mockista-to-mockery/src", - "Rector\\MysqlToMysqli\\": "rules/mysql-to-mysqli/src", - "Rector\\Naming\\": "rules/naming/src", - "Rector\\NetteCodeQuality\\": "rules/nette-code-quality/src", - "Rector\\NetteKdyby\\": "rules/nette-kdyby/src", - "Rector\\NetteTesterToPHPUnit\\": "rules/nette-tester-to-phpunit/src", - "Rector\\NetteToSymfony\\": "rules/nette-to-symfony/src", - "Rector\\NetteUtilsCodeQuality\\": "rules/nette-utils-code-quality/src", + "Rector\\Set\\": "packages/set/src", + "Rector\\Core\\": "src", + "Rector\\PSR4\\": "rules/psr4/src", + "Rector\\Twig\\": "rules/twig/src", "Rector\\Nette\\": "rules/nette/src", - "Rector\\Defluent\\": "rules/defluent/src", - "Rector\\NodeCollector\\": "packages/node-collector/src", - "Rector\\NodeNameResolver\\": "packages/node-name-resolver/src", - "Rector\\NodeNestingScope\\": "packages/node-nesting-scope/src", - "Rector\\NodeRemoval\\": "packages/node-removal/src", - "Rector\\NodeTypeResolver\\": "packages/node-type-resolver/src", "Rector\\Order\\": "rules/order/src", - "Rector\\PHPOffice\\": "rules/php-office/src", - "Rector\\PHPStanStaticTypeMapper\\": "packages/phpstan-static-type-mapper/src", - "Rector\\PHPUnitSymfony\\": "rules/phpunit-symfony/src", - "Rector\\PHPUnit\\": "rules/phpunit/src", - "Rector\\PSR4\\": "rules/psr4/src", - "Rector\\Performance\\": "rules/performance/src", - "Rector\\Phalcon\\": "rules/phalcon/src", "Rector\\Php52\\": "rules/php52/src", "Rector\\Php53\\": "rules/php53/src", "Rector\\Php54\\": "rules/php54/src", @@ -9636,33 +9508,86 @@ "Rector\\Php73\\": "rules/php73/src", "Rector\\Php74\\": "rules/php74/src", "Rector\\Php80\\": "rules/php80/src", - "Rector\\PhpAttribute\\": "packages/php-attribute/src", - "Rector\\PhpSpecToPHPUnit\\": "rules/php-spec-to-phpunit/src", - "Rector\\Polyfill\\": "rules/polyfill/src", - "Rector\\Compiler\\": "utils/compiler/src", - "Rector\\PostRector\\": "packages/post-rector/src", - "Rector\\Privatization\\": "rules/privatization/src", - "Rector\\RectorGenerator\\": "packages/rector-generator/src", - "Rector\\RemovingStatic\\": "rules/removing-static/src", - "Rector\\Renaming\\": "rules/renaming/src", - "Rector\\Restoration\\": "rules/restoration/src", + "Rector\\Carbon\\": "rules/carbon/src", + "Rector\\Legacy\\": "rules/legacy/src", + "Rector\\Naming\\": "rules/naming/src", "Rector\\Sensio\\": "rules/sensio/src", - "Rector\\Set\\": "packages/set/src", - "Rector\\StaticTypeMapper\\": "packages/static-type-mapper/src", - "Rector\\CodeQualityStrict\\": "rules/code-quality-strict/src", - "Rector\\SymfonyCodeQuality\\": "rules/symfony-code-quality/src", - "Rector\\SymfonyPHPUnit\\": "rules/symfony-phpunit/src", - "Rector\\SymfonyPhpConfig\\": "rules/symfony-php-config/src", + "Rector\\Caching\\": "packages/caching/src", + "Rector\\CakePHP\\": "rules/cakephp/src", + "Rector\\Generic\\": "rules/generic/src", + "Rector\\Laravel\\": "rules/laravel/src", + "Rector\\PHPUnit\\": "rules/phpunit/src", + "Rector\\Phalcon\\": "rules/phalcon/src", "Rector\\Symfony\\": "rules/symfony/src", + "Rector\\Testing\\": "packages/testing/src", + "Rector\\Comments\\": "packages/comments/src", + "Rector\\Compiler\\": "utils/compiler/src", + "Rector\\Composer\\": "rules/composer/src", + "Rector\\DeadCode\\": "rules/dead-code/src", + "Rector\\Defluent\\": "rules/defluent/src", + "Rector\\Doctrine\\": "rules/doctrine/src", + "Rector\\Polyfill\\": "rules/polyfill/src", + "Rector\\Renaming\\": "rules/renaming/src", "Rector\\Symfony2\\": "rules/symfony2/src", "Rector\\Symfony3\\": "rules/symfony3/src", "Rector\\Symfony4\\": "rules/symfony4/src", "Rector\\Symfony5\\": "rules/symfony5/src", + "Rector\\PHPOffice\\": "rules/php-office/src", + "Rector\\ReadWrite\\": "packages/read-write/src", "Rector\\Transform\\": "rules/transform/src", - "Rector\\Twig\\": "rules/twig/src", - "Rector\\TypeDeclaration\\": "rules/type-declaration/src", + "Rector\\FamilyTree\\": "packages/family-tree/src", + "Rector\\NetteKdyby\\": "rules/nette-kdyby/src", + "Rector\\PostRector\\": "packages/post-rector/src", + "Rector\\CodeQuality\\": "rules/code-quality/src", + "Rector\\CodingStyle\\": "rules/coding-style/src", + "Rector\\EarlyReturn\\": "rules/early-return/src", + "Rector\\NodeRemoval\\": "packages/node-removal/src", + "Rector\\Performance\\": "rules/performance/src", + "Rector\\Restoration\\": "rules/restoration/src", + "Rector\\Architecture\\": "rules/architecture/src", + "Rector\\DeadDocBlock\\": "rules/dead-doc-block/src", + "Rector\\PhpAttribute\\": "packages/php-attribute/src", "Rector\\VendorLocker\\": "packages/vendor-locker/src", - "Rector\\Carbon\\": "rules/carbon/src" + "Rector\\Autodiscovery\\": "rules/autodiscovery/src", + "Rector\\ConsoleDiffer\\": "packages/console-differ/src", + "Rector\\MysqlToMysqli\\": "rules/mysql-to-mysqli/src", + "Rector\\NodeCollector\\": "packages/node-collector/src", + "Rector\\Privatization\\": "rules/privatization/src", + "Rector\\DowngradePhp70\\": "rules/downgrade-php70/src", + "Rector\\DowngradePhp71\\": "rules/downgrade-php71/src", + "Rector\\DowngradePhp72\\": "rules/downgrade-php72/src", + "Rector\\DowngradePhp73\\": "rules/downgrade-php73/src", + "Rector\\DowngradePhp74\\": "rules/downgrade-php74/src", + "Rector\\DowngradePhp80\\": "rules/downgrade-php80/src", + "Rector\\NetteToSymfony\\": "rules/nette-to-symfony/src", + "Rector\\PHPUnitSymfony\\": "rules/phpunit-symfony/src", + "Rector\\RemovingStatic\\": "rules/removing-static/src", + "Rector\\SymfonyPHPUnit\\": "rules/symfony-phpunit/src", + "Rector\\MagicDisclosure\\": "rules/magic-disclosure/src", + "Rector\\RectorGenerator\\": "packages/rector-generator/src", + "Rector\\TypeDeclaration\\": "rules/type-declaration/src", + "Rector\\ChangesReporting\\": "packages/changes-reporting/src", + "Rector\\FileSystemRector\\": "packages/file-system-rector/src", + "Rector\\NetteCodeQuality\\": "rules/nette-code-quality/src", + "Rector\\NodeNameResolver\\": "packages/node-name-resolver/src", + "Rector\\NodeNestingScope\\": "packages/node-nesting-scope/src", + "Rector\\NodeTypeResolver\\": "packages/node-type-resolver/src", + "Rector\\PhpSpecToPHPUnit\\": "rules/php-spec-to-phpunit/src", + "Rector\\StaticTypeMapper\\": "packages/static-type-mapper/src", + "Rector\\SymfonyPhpConfig\\": "rules/symfony-php-config/src", + "Rector\\CodeQualityStrict\\": "rules/code-quality-strict/src", + "Rector\\MockeryToProphecy\\": "rules/mockery-to-prophecy/src", + "Rector\\MockistaToMockery\\": "rules/mockista-to-mockery/src", + "Rector\\BetterPhpDocParser\\": "packages/better-php-doc-parser/src", + "Rector\\SymfonyCodeQuality\\": "rules/symfony-code-quality/src", + "Rector\\DependencyInjection\\": "rules/dependency-injection/src", + "Rector\\DoctrineCodeQuality\\": "rules/doctrine-code-quality/src", + "Rector\\AttributeAwarePhpDoc\\": "packages/attribute-aware-php-doc/src", + "Rector\\NetteTesterToPHPUnit\\": "rules/nette-tester-to-phpunit/src", + "Rector\\NetteUtilsCodeQuality\\": "rules/nette-utils-code-quality/src", + "Rector\\DoctrineGedmoToKnplabs\\": "rules/doctrine-gedmo-to-knplabs/src", + "Rector\\PHPStanStaticTypeMapper\\": "packages/phpstan-static-type-mapper/src", + "Rector\\DoctrineAnnotationGenerated\\": "packages/doctrine-annotation-generated/src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9765,41 +9690,43 @@ }, { "name": "spatie/laravel-ray", - "version": "1.26.3", + "version": "1.29.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "ec971959bc8e513cbfa1163e6af030cdaa5ce7bf" + "reference": "3cace74c812469e6e569dacffc46653457f9c2cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/ec971959bc8e513cbfa1163e6af030cdaa5ce7bf", - "reference": "ec971959bc8e513cbfa1163e6af030cdaa5ce7bf", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/3cace74c812469e6e569dacffc46653457f9c2cc", + "reference": "3cace74c812469e6e569dacffc46653457f9c2cc", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19", - "illuminate/database": "^7.20|^8.19", - "illuminate/queue": "^7.20|^8.19", - "illuminate/support": "^7.20|^8.19", + "illuminate/contracts": "^7.20|^8.19|^9.0", + "illuminate/database": "^7.20|^8.19|^9.0", + "illuminate/queue": "^7.20|^8.19|^9.0", + "illuminate/support": "^7.20|^8.19|^9.0", "php": "^7.3|^8.0", "spatie/backtrace": "^1.0", - "spatie/ray": "^1.27.1", - "symfony/stopwatch": "4.2|^5.1", + "spatie/ray": "^1.33", + "symfony/stopwatch": "4.2|^5.1|^6.0", "zbateson/mail-mime-parser": "^1.3.1|^2.0" }, "require-dev": { - "facade/ignition": "^2.5", "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19", - "orchestra/testbench-core": "^5.0|^6.0", + "laravel/framework": "^7.20|^8.19|^9.0", + "orchestra/testbench-core": "^5.0|^6.0|^7.0", "phpstan/phpstan": "^0.12.93", "phpunit/phpunit": "^9.3", "spatie/phpunit-snapshot-assertions": "^4.2" }, "type": "library", "extra": { + "branch-alias": { + "dev-main": "1.29.x-dev" + }, "laravel": { "providers": [ "Spatie\\LaravelRay\\RayServiceProvider" @@ -9831,7 +9758,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.26.3" + "source": "https://github.com/spatie/laravel-ray/tree/1.29.4" }, "funding": [ { @@ -9843,7 +9770,7 @@ "type": "other" } ], - "time": "2021-11-22T15:57:41+00:00" + "time": "2022-02-22T15:18:57+00:00" }, { "name": "spatie/macroable", @@ -9897,16 +9824,16 @@ }, { "name": "spatie/ray", - "version": "1.31.0", + "version": "1.33.2", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "e5374378f00ee2419dae70f95bb640d1782e3c03" + "reference": "28f6bd88e2db0fada88a7999c8ee0aad69f56192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/e5374378f00ee2419dae70f95bb640d1782e3c03", - "reference": "e5374378f00ee2419dae70f95bb640d1782e3c03", + "url": "https://api.github.com/repos/spatie/ray/zipball/28f6bd88e2db0fada88a7999c8ee0aad69f56192", + "reference": "28f6bd88e2db0fada88a7999c8ee0aad69f56192", "shasum": "" }, "require": { @@ -9916,11 +9843,11 @@ "ramsey/uuid": "^3.0|^4.1", "spatie/backtrace": "^1.1", "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1", - "symfony/var-dumper": "^4.2|^5.1" + "symfony/stopwatch": "^4.0|^5.1|^6.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0" }, "require-dev": { - "illuminate/support": "6.x|^8.18", + "illuminate/support": "6.x|^8.18|^9.0", "nesbot/carbon": "^2.43", "phpstan/phpstan": "^0.12.92", "phpunit/phpunit": "^9.5", @@ -9929,12 +9856,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Spatie\\Ray\\": "src" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Spatie\\Ray\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9956,7 +9883,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.31.0" + "source": "https://github.com/spatie/ray/tree/1.33.2" }, "funding": [ { @@ -9968,20 +9895,20 @@ "type": "other" } ], - "time": "2021-11-17T11:59:32+00:00" + "time": "2022-02-02T15:16:13+00:00" }, { "name": "symfony/cache", - "version": "v5.3.12", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "fe05bcb21c1287401d96d066ada7ed881418c6a1" + "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/fe05bcb21c1287401d96d066ada7ed881418c6a1", - "reference": "fe05bcb21c1287401d96d066ada7ed881418c6a1", + "url": "https://api.github.com/repos/symfony/cache/zipball/4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", + "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", "shasum": "" }, "require": { @@ -9989,14 +9916,14 @@ "psr/cache": "^1.0|^2.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "conflict": { - "doctrine/dbal": "<2.10", + "doctrine/dbal": "<2.13.1", "symfony/dependency-injection": "<4.4", "symfony/http-kernel": "<4.4", "symfony/var-dumper": "<4.4" @@ -10009,15 +9936,15 @@ "require-dev": { "cache/integration-tests": "dev-master", "doctrine/cache": "^1.6|^2.0", - "doctrine/dbal": "^2.10|^3.0", + "doctrine/dbal": "^2.13.1|^3.0", "predis/predis": "^1.1", "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/filesystem": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -10049,7 +9976,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.3.12" + "source": "https://github.com/symfony/cache/tree/v5.4.3" }, "funding": [ { @@ -10065,7 +9992,7 @@ "type": "tidelift" } ], - "time": "2021-11-23T18:33:50+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/cache-contracts", @@ -10148,22 +10075,22 @@ }, { "name": "symfony/config", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "f080af00c441f1df40cf5c269707fdebe5740557" + "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/f080af00c441f1df40cf5c269707fdebe5740557", - "reference": "f080af00c441f1df40cf5c269707fdebe5740557", + "url": "https://api.github.com/repos/symfony/config/zipball/d65e1bd990c740e31feb07d2b0927b8d4df9956f", + "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-php80": "^1.16", "symfony/polyfill-php81": "^1.22" @@ -10172,11 +10099,11 @@ "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" + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -10207,7 +10134,7 @@ "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.11" + "source": "https://github.com/symfony/config/tree/v5.4.3" }, "funding": [ { @@ -10223,27 +10150,28 @@ "type": "tidelift" } ], - "time": "2021-10-29T16:05:40+00:00" + "time": "2022-01-03T09:50:52+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "3793617321eb39b2e8e708f6fd61f875ec5f0ed6" + "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3793617321eb39b2e8e708f6fd61f875ec5f0ed6", - "reference": "3793617321eb39b2e8e708f6fd61f875ec5f0ed6", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/974580fd67f14d65b045c11b09eb149cd4b13df5", + "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { @@ -10258,9 +10186,9 @@ "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.3", - "symfony/expression-language": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/config": "", @@ -10295,7 +10223,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.3.11" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.3" }, "funding": [ { @@ -10311,25 +10239,26 @@ "type": "tidelift" } ], - "time": "2021-11-17T12:16:12+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/filesystem", - "version": "v5.3.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" + "reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f0c4bf1840420f4aef3f32044a9dbb24682731b", + "reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -10358,7 +10287,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.4" + "source": "https://github.com/symfony/filesystem/tree/v5.4.3" }, "funding": [ { @@ -10374,25 +10303,25 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:40:44+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.3.7", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e" + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4b78e55b179003a42523a362cc0e8327f7a69b5e", - "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php73": "~1.0", "symfony/polyfill-php80": "^1.16" }, @@ -10427,7 +10356,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.3.7" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" }, "funding": [ { @@ -10443,7 +10372,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-php70", @@ -10515,21 +10444,21 @@ }, { "name": "symfony/stopwatch", - "version": "v5.3.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "b24c6a92c6db316fee69e38c80591e080e41536c" + "reference": "395220730edceb6bd745236ccb5c9125c748f779" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b24c6a92c6db316fee69e38c80591e080e41536c", - "reference": "b24c6a92c6db316fee69e38c80591e080e41536c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/395220730edceb6bd745236ccb5c9125c748f779", + "reference": "395220730edceb6bd745236ccb5c9125c748f779", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/service-contracts": "^1.0|^2" + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -10557,7 +10486,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.3.4" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.3" }, "funding": [ { @@ -10573,28 +10502,27 @@ "type": "tidelift" } ], - "time": "2021-07-10T08:58:57+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.3.11", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "b16fcf355b810bcbccc2c6eac1d016725dbf9002" + "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b16fcf355b810bcbccc2c6eac1d016725dbf9002", - "reference": "b16fcf355b810bcbccc2c6eac1d016725dbf9002", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1261b2d4a23081cb2b59a4caa311a5ac43b845b6", + "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9" + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -10630,7 +10558,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.3.11" + "source": "https://github.com/symfony/var-exporter/tree/v6.0.3" }, "funding": [ { @@ -10646,32 +10574,32 @@ "type": "tidelift" } ], - "time": "2021-11-22T10:43:59+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.11", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a" + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/226638aa877bc4104e619a15f27d8141cd6b4e4a", - "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -10705,7 +10633,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.11" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -10721,34 +10649,34 @@ "type": "tidelift" } ], - "time": "2021-11-20T16:42:42+00:00" + "time": "2022-01-26T16:32:32+00:00" }, { "name": "symplify/astral", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/astral.git", - "reference": "12e5964fde89300b0bb92c2e50609b6eb695cdf6" + "reference": "6b0a7c63b534ecc663ede26158ab5b39ed9f52ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/astral/zipball/12e5964fde89300b0bb92c2e50609b6eb695cdf6", - "reference": "12e5964fde89300b0bb92c2e50609b6eb695cdf6", + "url": "https://api.github.com/repos/symplify/astral/zipball/6b0a7c63b534ecc663ede26158ab5b39ed9f52ec", + "reference": "6b0a7c63b534ecc663ede26158ab5b39ed9f52ec", "shasum": "" }, "require": { "nette/utils": "^3.2", "nikic/php-parser": "^4.11", "php": ">=8.0", - "symfony/dependency-injection": "^5.3", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/http-kernel": "^5.3", - "symplify/autowire-array-parameter": "^9.4.16", - "symplify/package-builder": "^9.4.16" + "symplify/autowire-array-parameter": "^9.4.24", + "symplify/package-builder": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5", - "symplify/easy-testing": "^9.4.16" + "symplify/easy-testing": "^9.4.24" }, "type": "library", "extra": { @@ -10767,7 +10695,7 @@ ], "description": "Toolking for smart daily work with AST", "support": { - "source": "https://github.com/symplify/astral/tree/9.4.16" + "source": "https://github.com/symplify/astral/tree/9.4.24" }, "funding": [ { @@ -10779,27 +10707,27 @@ "type": "github" } ], - "time": "2021-07-10T00:53:11+00:00" + "time": "2021-08-02T17:04:24+00:00" }, { "name": "symplify/autowire-array-parameter", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/autowire-array-parameter.git", - "reference": "f160724f05db839f316423ba8d2aa1160710627b" + "reference": "5e4a49a36acd2a6f45faaedcdc06121555193c90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/f160724f05db839f316423ba8d2aa1160710627b", - "reference": "f160724f05db839f316423ba8d2aa1160710627b", + "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/5e4a49a36acd2a6f45faaedcdc06121555193c90", + "reference": "5e4a49a36acd2a6f45faaedcdc06121555193c90", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", - "symfony/dependency-injection": "^5.3", - "symplify/package-builder": "^9.4.16" + "symfony/dependency-injection": "^5.3.x-dev", + "symplify/package-builder": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -10821,7 +10749,7 @@ ], "description": "Autowire array parameters for your Symfony applications", "support": { - "source": "https://github.com/symplify/autowire-array-parameter/tree/9.4.16" + "source": "https://github.com/symplify/autowire-array-parameter/tree/9.4.24" }, "funding": [ { @@ -10833,31 +10761,31 @@ "type": "github" } ], - "time": "2021-07-10T00:53:10+00:00" + "time": "2021-08-02T17:04:30+00:00" }, { "name": "symplify/composer-json-manipulator", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/composer-json-manipulator.git", - "reference": "5859cccd0727a68e9ae5c38945fad27d85f15dfe" + "reference": "d635d1da456b2fe942f97e24f0e6303f9cd2f6bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/5859cccd0727a68e9ae5c38945fad27d85f15dfe", - "reference": "5859cccd0727a68e9ae5c38945fad27d85f15dfe", + "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/d635d1da456b2fe942f97e24f0e6303f9cd2f6bb", + "reference": "d635d1da456b2fe942f97e24f0e6303f9cd2f6bb", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", "symfony/config": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/filesystem": "^5.3", "symfony/http-kernel": "^5.3", - "symplify/package-builder": "^9.4.16", - "symplify/smart-file-system": "^9.4.16" + "symplify/package-builder": "^9.4.24", + "symplify/smart-file-system": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -10879,7 +10807,7 @@ ], "description": "Package to load, merge and save composer.json file(s)", "support": { - "source": "https://github.com/symplify/composer-json-manipulator/tree/9.4.16" + "source": "https://github.com/symplify/composer-json-manipulator/tree/9.4.24" }, "funding": [ { @@ -10891,30 +10819,30 @@ "type": "github" } ], - "time": "2021-07-10T00:53:19+00:00" + "time": "2021-08-02T17:04:43+00:00" }, { "name": "symplify/console-color-diff", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/console-color-diff.git", - "reference": "e63f10451a293e95b950b4bf852507b7772d65c2" + "reference": "569802566c4115903122d2e459675ec7b47ad3aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/console-color-diff/zipball/e63f10451a293e95b950b4bf852507b7772d65c2", - "reference": "e63f10451a293e95b950b4bf852507b7772d65c2", + "url": "https://api.github.com/repos/symplify/console-color-diff/zipball/569802566c4115903122d2e459675ec7b47ad3aa", + "reference": "569802566c4115903122d2e459675ec7b47ad3aa", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", "sebastian/diff": "^4.0", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/http-kernel": "^5.3", - "symplify/package-builder": "^9.4.16" + "symplify/package-builder": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -10936,7 +10864,7 @@ ], "description": "Package to print diffs in console with colors", "support": { - "source": "https://github.com/symplify/console-color-diff/tree/9.4.16" + "source": "https://github.com/symplify/console-color-diff/tree/9.4.24" }, "funding": [ { @@ -10948,32 +10876,33 @@ "type": "github" } ], - "time": "2021-07-10T00:53:21+00:00" + "abandoned": "symplify/package-builder", + "time": "2021-08-02T17:04:40+00:00" }, { "name": "symplify/console-package-builder", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/console-package-builder.git", - "reference": "d86e46c68c625664a418bf9d8b171091fafecd9c" + "reference": "a0be08f1cf0f4d4b3183fbf771a4db42f3052775" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/d86e46c68c625664a418bf9d8b171091fafecd9c", - "reference": "d86e46c68c625664a418bf9d8b171091fafecd9c", + "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/a0be08f1cf0f4d4b3183fbf771a4db42f3052775", + "reference": "a0be08f1cf0f4d4b3183fbf771a4db42f3052775", "shasum": "" }, "require": { "php": ">=8.0", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", - "symplify/symplify-kernel": "^9.4.16" + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5", "symfony/http-kernel": "^5.3", - "symplify/package-builder": "^9.4.16" + "symplify/package-builder": "^9.4.24" }, "type": "library", "extra": { @@ -10992,36 +10921,36 @@ ], "description": "Package to speed up building command line applications", "support": { - "source": "https://github.com/symplify/console-package-builder/tree/9.4.16" + "source": "https://github.com/symplify/console-package-builder/tree/9.4.24" }, "abandoned": "symplify/package-builder", - "time": "2021-07-10T00:53:43+00:00" + "time": "2021-08-02T17:04:41+00:00" }, { "name": "symplify/easy-testing", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/easy-testing.git", - "reference": "61fc8f10fedf1d9b57b7f8705a18011c46cc4656" + "reference": "a4303c6d598684164d74cdd4d38a7613b692ce1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/easy-testing/zipball/61fc8f10fedf1d9b57b7f8705a18011c46cc4656", - "reference": "61fc8f10fedf1d9b57b7f8705a18011c46cc4656", + "url": "https://api.github.com/repos/symplify/easy-testing/zipball/a4303c6d598684164d74cdd4d38a7613b692ce1d", + "reference": "a4303c6d598684164d74cdd4d38a7613b692ce1d", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/finder": "^5.3", "symfony/http-kernel": "^5.3", - "symplify/console-package-builder": "^9.4.16", - "symplify/package-builder": "^9.4.16", - "symplify/smart-file-system": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symplify/console-package-builder": "^9.4.24", + "symplify/package-builder": "^9.4.24", + "symplify/smart-file-system": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -11046,7 +10975,7 @@ ], "description": "Testing made easy", "support": { - "source": "https://github.com/symplify/easy-testing/tree/9.4.16" + "source": "https://github.com/symplify/easy-testing/tree/9.4.24" }, "funding": [ { @@ -11058,29 +10987,29 @@ "type": "github" } ], - "time": "2021-07-10T00:53:55+00:00" + "time": "2021-08-02T17:05:00+00:00" }, { "name": "symplify/markdown-diff", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/markdown-diff.git", - "reference": "e8b24d57d8e94c2dbe082e674bd36961a63406f4" + "reference": "c88cb4272bc64abcdaa8d62fb43a7855dd0cdca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/markdown-diff/zipball/e8b24d57d8e94c2dbe082e674bd36961a63406f4", - "reference": "e8b24d57d8e94c2dbe082e674bd36961a63406f4", + "url": "https://api.github.com/repos/symplify/markdown-diff/zipball/c88cb4272bc64abcdaa8d62fb43a7855dd0cdca0", + "reference": "c88cb4272bc64abcdaa8d62fb43a7855dd0cdca0", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", "sebastian/diff": "^4.0", - "symfony/dependency-injection": "^5.3", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/http-kernel": "^5.3", - "symplify/package-builder": "^9.4.16" + "symplify/package-builder": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -11102,7 +11031,7 @@ ], "description": "Package to print diffs for Markdown", "support": { - "source": "https://github.com/symplify/markdown-diff/tree/9.4.16" + "source": "https://github.com/symplify/markdown-diff/tree/9.4.24" }, "funding": [ { @@ -11114,20 +11043,20 @@ "type": "github" } ], - "time": "2021-07-10T00:53:58+00:00" + "time": "2021-08-02T17:05:16+00:00" }, { "name": "symplify/package-builder", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/package-builder.git", - "reference": "b01f55031483953daf9786c02a8720dad99d6508" + "reference": "12cb6effeac6868e556c179d908114c980be3d11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/package-builder/zipball/b01f55031483953daf9786c02a8720dad99d6508", - "reference": "b01f55031483953daf9786c02a8720dad99d6508", + "url": "https://api.github.com/repos/symplify/package-builder/zipball/12cb6effeac6868e556c179d908114c980be3d11", + "reference": "12cb6effeac6868e556c179d908114c980be3d11", "shasum": "" }, "require": { @@ -11135,12 +11064,12 @@ "nette/utils": "^3.2", "php": ">=8.0", "symfony/config": "^5.3", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/finder": "^5.3", "symfony/http-kernel": "^5.3", - "symplify/easy-testing": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symplify/easy-testing": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -11162,7 +11091,7 @@ ], "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", "support": { - "source": "https://github.com/symplify/package-builder/tree/9.4.16" + "source": "https://github.com/symplify/package-builder/tree/9.4.24" }, "funding": [ { @@ -11174,20 +11103,20 @@ "type": "github" } ], - "time": "2021-07-10T00:54:16+00:00" + "time": "2021-08-02T17:05:23+00:00" }, { "name": "symplify/php-config-printer", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/php-config-printer.git", - "reference": "2521e3b99dc5680a0736597115e0f1a60ea19c24" + "reference": "1da40e09be6fe5cbe18c92d20e40d8a0d5270bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/php-config-printer/zipball/2521e3b99dc5680a0736597115e0f1a60ea19c24", - "reference": "2521e3b99dc5680a0736597115e0f1a60ea19c24", + "url": "https://api.github.com/repos/symplify/php-config-printer/zipball/1da40e09be6fe5cbe18c92d20e40d8a0d5270bbb", + "reference": "1da40e09be6fe5cbe18c92d20e40d8a0d5270bbb", "shasum": "" }, "require": { @@ -11196,12 +11125,12 @@ "php": ">=8.0", "symfony/http-kernel": "^5.3", "symfony/yaml": "^5.3", - "symplify/astral": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symplify/astral": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5", - "symplify/easy-testing": "^9.4.16" + "symplify/easy-testing": "^9.4.24" }, "type": "library", "extra": { @@ -11221,36 +11150,36 @@ "description": "Print Symfony services array with configuration to to plain PHP file format thanks to this simple php-parser wrapper", "support": { "issues": "https://github.com/symplify/php-config-printer/issues", - "source": "https://github.com/symplify/php-config-printer/tree/9.4.16" + "source": "https://github.com/symplify/php-config-printer/tree/9.4.24" }, - "time": "2021-07-10T00:54:17+00:00" + "time": "2021-08-02T17:05:28+00:00" }, { "name": "symplify/rule-doc-generator", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/rule-doc-generator.git", - "reference": "bfb0e0b7408fb177bf7458d7826345af3ff1a69c" + "reference": "e76acd2e9864f484e6c2a587800a9e7750834fce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/rule-doc-generator/zipball/bfb0e0b7408fb177bf7458d7826345af3ff1a69c", - "reference": "bfb0e0b7408fb177bf7458d7826345af3ff1a69c", + "url": "https://api.github.com/repos/symplify/rule-doc-generator/zipball/e76acd2e9864f484e6c2a587800a9e7750834fce", + "reference": "e76acd2e9864f484e6c2a587800a9e7750834fce", "shasum": "" }, "require": { "nette/neon": "^3.2", "nette/robot-loader": "^3.4", "php": ">=8.0", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", - "symplify/markdown-diff": "^9.4.16", - "symplify/package-builder": "^9.4.16", - "symplify/php-config-printer": "^9.4.16", - "symplify/rule-doc-generator-contracts": "^9.4.16", - "symplify/smart-file-system": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", + "symplify/markdown-diff": "^9.4.24", + "symplify/package-builder": "^9.4.24", + "symplify/php-config-printer": "^9.4.24", + "symplify/rule-doc-generator-contracts": "^9.4.24", + "symplify/smart-file-system": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.0", @@ -11277,7 +11206,7 @@ ], "description": "Documentation generator for coding standard or static analysis rules", "support": { - "source": "https://github.com/symplify/rule-doc-generator/tree/9.4.16" + "source": "https://github.com/symplify/rule-doc-generator/tree/9.4.24" }, "funding": [ { @@ -11289,7 +11218,7 @@ "type": "github" } ], - "time": "2021-07-10T00:54:36+00:00" + "time": "2021-08-02T17:05:59+00:00" }, { "name": "symplify/rule-doc-generator-contracts", @@ -11456,32 +11385,33 @@ "type": "github" } ], + "abandoned": "symplify/astral", "time": "2021-03-15T12:29:48+00:00" }, { "name": "symplify/skipper", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/skipper.git", - "reference": "da0e623cc770c2153fd67d2c2e846a870ed59144" + "reference": "049ae99703f041641568facc0e7c70f210c4efdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/skipper/zipball/da0e623cc770c2153fd67d2c2e846a870ed59144", - "reference": "da0e623cc770c2153fd67d2c2e846a870ed59144", + "url": "https://api.github.com/repos/symplify/skipper/zipball/049ae99703f041641568facc0e7c70f210c4efdd", + "reference": "049ae99703f041641568facc0e7c70f210c4efdd", "shasum": "" }, "require": { "nette/utils": "^3.2", "php": ">=8.0", "symfony/config": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/filesystem": "^5.3", "symfony/finder": "^5.3", - "symplify/package-builder": "^9.4.16", - "symplify/smart-file-system": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symplify/package-builder": "^9.4.24", + "symplify/smart-file-system": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -11503,7 +11433,7 @@ ], "description": "Skip files by rule class, directory, file or fnmatch", "support": { - "source": "https://github.com/symplify/skipper/tree/9.4.16" + "source": "https://github.com/symplify/skipper/tree/9.4.24" }, "funding": [ { @@ -11515,7 +11445,7 @@ "type": "github" } ], - "time": "2021-07-10T00:54:56+00:00" + "time": "2021-08-02T17:06:20+00:00" }, { "name": "symplify/smart-file-system", @@ -11574,23 +11504,23 @@ }, { "name": "symplify/symfony-php-config", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/symfony-php-config.git", - "reference": "29870064d009427715a73e86a3d597f42665f2b1" + "reference": "5a03073f8f32dc0b6be81cad23c508b0534e5153" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/symfony-php-config/zipball/29870064d009427715a73e86a3d597f42665f2b1", - "reference": "29870064d009427715a73e86a3d597f42665f2b1", + "url": "https://api.github.com/repos/symplify/symfony-php-config/zipball/5a03073f8f32dc0b6be81cad23c508b0534e5153", + "reference": "5a03073f8f32dc0b6be81cad23c508b0534e5153", "shasum": "" }, "require": { "php": ">=8.0", - "symfony/dependency-injection": "^5.3", - "symplify/package-builder": "^9.4.16", - "symplify/symplify-kernel": "^9.4.16" + "symfony/dependency-injection": "^5.3.x-dev", + "symplify/package-builder": "^9.4.24", + "symplify/symplify-kernel": "^9.4.24" }, "require-dev": { "phpstan/phpstan": "^0.12.91", @@ -11614,33 +11544,34 @@ ], "description": "Tools that easy work with Symfony PHP Configs", "support": { - "source": "https://github.com/symplify/symfony-php-config/tree/9.4.16" + "source": "https://github.com/symplify/symfony-php-config/tree/9.4.24" }, - "time": "2021-07-10T00:55:04+00:00" + "abandoned": "symplify/package-builder", + "time": "2021-08-02T17:06:27+00:00" }, { "name": "symplify/symplify-kernel", - "version": "9.4.16", + "version": "9.4.24", "source": { "type": "git", "url": "https://github.com/symplify/symplify-kernel.git", - "reference": "62b54c9af6c50c1aa46a8246a1252756c237a0e5" + "reference": "8385527edaadedadcb05d06a7455cfda405305ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/62b54c9af6c50c1aa46a8246a1252756c237a0e5", - "reference": "62b54c9af6c50c1aa46a8246a1252756c237a0e5", + "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/8385527edaadedadcb05d06a7455cfda405305ca", + "reference": "8385527edaadedadcb05d06a7455cfda405305ca", "shasum": "" }, "require": { "php": ">=8.0", - "symfony/console": "^5.3", - "symfony/dependency-injection": "^5.3", + "symfony/console": "^5.3.x-dev", + "symfony/dependency-injection": "^5.3.x-dev", "symfony/http-kernel": "^5.3", - "symplify/autowire-array-parameter": "^9.4.16", - "symplify/composer-json-manipulator": "^9.4.16", - "symplify/package-builder": "^9.4.16", - "symplify/smart-file-system": "^9.4.16" + "symplify/autowire-array-parameter": "^9.4.24", + "symplify/composer-json-manipulator": "^9.4.24", + "symplify/package-builder": "^9.4.24", + "symplify/smart-file-system": "^9.4.24" }, "require-dev": { "phpunit/phpunit": "^9.5" @@ -11662,22 +11593,22 @@ ], "description": "Internal Kernel for Symplify packages", "support": { - "source": "https://github.com/symplify/symplify-kernel/tree/9.4.16" + "source": "https://github.com/symplify/symplify-kernel/tree/9.4.24" }, - "time": "2021-07-10T00:55:07+00:00" + "time": "2021-08-02T17:06:33+00:00" }, { "name": "zbateson/mail-mime-parser", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "0ef2d7de2577ea0a339d34720451c8ba8cd9dbb4" + "reference": "038d5043a54ee198ed96ab5fd39f16231272b32e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/0ef2d7de2577ea0a339d34720451c8ba8cd9dbb4", - "reference": "0ef2d7de2577ea0a339d34720451c8ba8cd9dbb4", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/038d5043a54ee198ed96ab5fd39f16231272b32e", + "reference": "038d5043a54ee198ed96ab5fd39f16231272b32e", "shasum": "" }, "require": { @@ -11737,7 +11668,7 @@ "type": "github" } ], - "time": "2021-11-09T18:24:41+00:00" + "time": "2022-01-25T18:18:17+00:00" }, { "name": "zbateson/mb-wrapper", @@ -11878,5 +11809,5 @@ "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.2.0" } diff --git a/database/migrations/2021_12_06_154208_alter_table_action_instance_fields_make_action_value_nullable.php b/database/migrations/2021_12_06_154208_alter_table_action_instance_fields_make_action_value_nullable.php new file mode 100644 index 000000000..85a652898 --- /dev/null +++ b/database/migrations/2021_12_06_154208_alter_table_action_instance_fields_make_action_value_nullable.php @@ -0,0 +1,30 @@ +text('action_value')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + */ + public function down() + { + Schema::table('action_instance_fields', function(Blueprint $table) { + $table->string('action_value')->change(); + }); + } +} diff --git a/database/migrations/2022_03_24_000808_add_indexes_to_logic_results_table.php b/database/migrations/2022_03_24_000808_add_indexes_to_logic_results_table.php new file mode 100644 index 000000000..1858f592c --- /dev/null +++ b/database/migrations/2022_03_24_000808_add_indexes_to_logic_results_table.php @@ -0,0 +1,53 @@ +index(['logic_id']); +// $table->index(['user_id']); +// $table->index(['group_id']); +// $table->index(['role_id']); +// $table->index(['result']); +// $table->index(['logic_id', 'user_id']); +// $table->index(['logic_id', 'user_id', 'group_id']); +// $table->index(['logic_id', 'result']); +// $table->index(['logic_id', 'user_id', 'result']); +// $table->index(['logic_id', 'user_id', 'group_id', 'result']); +// $table->index(['logic_id', 'user_id', 'group_id', 'role_id', 'result'], 'logic_results_lugr_results_index'); + }); + + } + + /** + * Reverse the migrations. + * + */ + public function down() + { + Schema::table('logic_results', function(Blueprint $table) { +// $table->dropIndex(['logic_id']); +// $table->dropIndex(['user_id']); +// $table->dropIndex(['group_id']); +// $table->dropIndex(['role_id']); +// $table->dropIndex(['result']); +// +// $table->dropIndex(['logic_id', 'user_id']); +// $table->dropIndex(['logic_id', 'user_id', 'group_id']); +// $table->dropIndex(['logic_id', 'result']); +// +// $table->dropIndex(['logic_id', 'user_id', 'result']); +// $table->dropIndex(['logic_id', 'user_id', 'group_id', 'result']); +// $table->dropIndex(['logic_id', 'user_id', 'group_id', 'role_id', 'result']); + }); + } +} diff --git a/database/migrations/2022_03_29_000808_add_indexes_to_logic_results_again_table.php b/database/migrations/2022_03_29_000808_add_indexes_to_logic_results_again_table.php new file mode 100644 index 000000000..d6499b0f8 --- /dev/null +++ b/database/migrations/2022_03_29_000808_add_indexes_to_logic_results_again_table.php @@ -0,0 +1,37 @@ +index(['logic_id', 'result'], 'log_res_logic_res_index'); + $table->index(['logic_id', 'user_id', 'result'], 'log_res_logic_res_user_index'); + $table->index(['logic_id', 'user_id', 'group_id', 'result'], 'log_res_logic_res_user_grp_index'); + $table->index(['logic_id', 'user_id', 'group_id', 'role_id', 'result'], 'logic_results_lugr_results_index'); + }); + + } + + /** + * Reverse the migrations. + * + */ + public function down() + { + Schema::table('logic_results', function(Blueprint $table) { + $table->dropIndex('log_res_logic_res_index'); + $table->dropIndex('log_res_logic_res_user_index'); + $table->dropIndex('log_res_logic_res_user_grp_index'); + $table->dropIndex('logic_results_lugr_results_index'); + }); + } +} diff --git a/database/migrations/2022_05_23_000808_add_single_indexes_to_logic_results_table.php b/database/migrations/2022_05_23_000808_add_single_indexes_to_logic_results_table.php new file mode 100644 index 000000000..ca15b91d0 --- /dev/null +++ b/database/migrations/2022_05_23_000808_add_single_indexes_to_logic_results_table.php @@ -0,0 +1,35 @@ +index(['user_id'], 'log_res_user_index'); + $table->index(['group_id'], 'log_res_grp_index'); + $table->index(['role_id'], 'log_res_role_index'); + }); + + } + + /** + * Reverse the migrations. + * + */ + public function down() + { + Schema::table('logic_results', function(Blueprint $table) { + $table->dropIndex('log_res_user_index'); + $table->dropIndex('log_res_grp_index'); + $table->dropIndex('log_res_role_index'); + }); + } +} diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index 707c71c5b..0783746b8 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -14,6 +14,7 @@ @componentFirst(['partials.components.head', 'bristolsu::partials.components.head']) @stack('meta-tags') @includeFirst(['partials.javascript', 'bristolsu::partials.javascript']) + @includeFirst(['partials.analytics', 'bristolsu::partials.analytics']) @yield('title-prefix', '')@yield('title', 'Portal') @stack('fonts') @stack('styles') diff --git a/src/Action/ActionBuilder.php b/src/Action/ActionBuilder.php index 25b2a991c..12c64a2bf 100644 --- a/src/Action/ActionBuilder.php +++ b/src/Action/ActionBuilder.php @@ -71,11 +71,20 @@ private function mapFields($fields, array $data) foreach ($fields as $field) { $actionValue = $field->action_value; foreach ($data as $key => $value) { - $actionValue = str_replace(sprintf('{{event:%s}}', $key), $value, $actionValue); + $actionValue = $this->replaceField($actionValue, $key, $value); } $actionFields[$field->action_field] = $actionValue; } return $actionFields; } + + private function replaceField(string|array $data, string $key, ?string $value) + { + if (is_string($data)) { + return str_replace(sprintf('{{event:%s}}', $key), $value ?? '', $data); + } + + return array_map(fn ($dataElement) => $this->replaceField($dataElement, $key, $value), $data); + } } diff --git a/src/Action/ActionInstance.php b/src/Action/ActionInstance.php index c2157eddb..def744c98 100644 --- a/src/Action/ActionInstance.php +++ b/src/Action/ActionInstance.php @@ -5,9 +5,9 @@ use BristolSU\ControlDB\Contracts\Repositories\User; use BristolSU\Support\Action\History\ActionHistory; use BristolSU\Support\Authentication\Contracts\Authentication; +use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use BristolSU\Support\ModuleInstance\ModuleInstance; use BristolSU\Support\Revision\HasRevisions; -use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use Database\Factories\ActionInstanceFactory; use Dyrynda\Database\Support\CascadeSoftDeletes; use FormSchema\Transformers\Transformer; diff --git a/src/Action/ActionInstanceField.php b/src/Action/ActionInstanceField.php index 225db9002..10144c123 100644 --- a/src/Action/ActionInstanceField.php +++ b/src/Action/ActionInstanceField.php @@ -24,6 +24,24 @@ class ActionInstanceField extends Model 'action_value', 'action_field', 'action_instance_id' ]; + public function getActionValueAttribute($value) + { + $json = json_decode($value, true); + if (json_last_error() === JSON_ERROR_NONE) { + return $json; + } + + return $value; + } + + public function setActionValueAttribute($value) + { + if (is_array($value)) { + $value = json_encode($value); + } + $this->attributes['action_value'] = $value; + } + /** * The action instance relationship. * diff --git a/src/Activity/Activity.php b/src/Activity/Activity.php index c9fd32a20..4de9b5ad4 100644 --- a/src/Activity/Activity.php +++ b/src/Activity/Activity.php @@ -5,11 +5,11 @@ use BristolSU\ControlDB\Contracts\Repositories\User; use BristolSU\Support\ActivityInstance\ActivityInstance; use BristolSU\Support\Authentication\Contracts\Authentication; +use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use BristolSU\Support\Logic\Logic; use BristolSU\Support\ModuleInstance\ModuleInstance; use BristolSU\Support\ModuleInstance\ModuleInstanceGrouping; use BristolSU\Support\Revision\HasRevisions; -use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use Carbon\Carbon; use Database\Factories\ActivityFactory; use Dyrynda\Database\Support\CascadeSoftDeletes; diff --git a/src/ActivityInstance/ActivityInstance.php b/src/ActivityInstance/ActivityInstance.php index fdbefd4b8..7a081c06c 100644 --- a/src/ActivityInstance/ActivityInstance.php +++ b/src/ActivityInstance/ActivityInstance.php @@ -5,6 +5,9 @@ use BristolSU\ControlDB\Contracts\Repositories\Group as GroupRepository; use BristolSU\ControlDB\Contracts\Repositories\Role as RoleRepository; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; +use BristolSU\ControlDB\Models\Dummy\GroupDummy; +use BristolSU\ControlDB\Models\Dummy\RoleDummy; +use BristolSU\ControlDB\Models\Dummy\UserDummy; use BristolSU\ControlDB\Models\Group; use BristolSU\ControlDB\Models\Role; use BristolSU\ControlDB\Models\User; @@ -17,9 +20,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\ModelNotFoundException; -use BristolSU\ControlDB\Models\Dummy\UserDummy; -use BristolSU\ControlDB\Models\Dummy\GroupDummy; -use BristolSU\ControlDB\Models\Dummy\RoleDummy; use Illuminate\Database\Eloquent\SoftDeletes; /** diff --git a/src/Connection/Client/CachedClientDecorator.php b/src/Connection/Client/CachedClientDecorator.php index 0e360285e..2fd10b277 100644 --- a/src/Connection/Client/CachedClientDecorator.php +++ b/src/Connection/Client/CachedClientDecorator.php @@ -51,7 +51,7 @@ public function request($method, $uri, array $options = []) $this->cache->remember( $this->getKey($method, $uri, $options), 7200, - fn() => $this->toCacheArray( + fn () => $this->toCacheArray( $this->forwardCall($method, $uri, $options) ) ) diff --git a/src/Eloquent/CascadeRestoreDeletes.php b/src/Eloquent/CascadeRestoreDeletes.php index fbdb23a45..1234e5dbc 100644 --- a/src/Eloquent/CascadeRestoreDeletes.php +++ b/src/Eloquent/CascadeRestoreDeletes.php @@ -5,11 +5,11 @@ use BristolSU\Support\Eloquent\Exceptions\CascadeRestoreDeletesException; use Illuminate\Database\Eloquent\Relations\Relation; -trait CascadeRestoreDeletes { - +trait CascadeRestoreDeletes +{ protected static function bootCascadeRestoreDeletes() { - static::restoring(function($model) { + static::restoring(function ($model) { $model->validateRestoringRelationships(); $model->runCascadingRestores(); @@ -22,7 +22,7 @@ protected function validateRestoringRelationships() throw CascadeRestoreDeletesException::softDeleteNotImplemented(get_called_class()); } - if($invalidCascadingRelationships = $this->hasInvalidCascadingRestoreRelationships()) { + if ($invalidCascadingRelationships = $this->hasInvalidCascadingRestoreRelationships()) { throw CascadeRestoreDeletesException::invalidRelationships($invalidCascadingRelationships); } } @@ -55,7 +55,7 @@ protected function runCascadingRestores() protected function cascadeRestore($relationship) { - foreach($this->{$relationship}()->withTrashed()->where('deleted_at', '>=', $this->deleted_at)->get() as $model) { + foreach ($this->{$relationship}()->withTrashed()->where('deleted_at', '>=', $this->deleted_at)->get() as $model) { $model->restore(); } } diff --git a/src/Eloquent/Exceptions/CascadeRestoreDeletesException.php b/src/Eloquent/Exceptions/CascadeRestoreDeletesException.php index 65853eed0..57e5f0b1e 100644 --- a/src/Eloquent/Exceptions/CascadeRestoreDeletesException.php +++ b/src/Eloquent/Exceptions/CascadeRestoreDeletesException.php @@ -12,7 +12,6 @@ public static function softDeleteNotImplemented($class) return new static(sprintf('%s does not implement Illuminate\Database\Eloquent\SoftDeletes', $class)); } - public static function invalidRelationships($relationships) { return new static(sprintf( diff --git a/src/Filters/Events/AudienceChanged.php b/src/Filters/Events/AudienceChanged.php index e72464878..e3c9fb696 100644 --- a/src/Filters/Events/AudienceChanged.php +++ b/src/Filters/Events/AudienceChanged.php @@ -2,9 +2,9 @@ namespace BristolSU\Support\Filters\Events; +use BristolSU\ControlDB\Contracts\Models\Group; use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\ControlDB\Contracts\Models\User; -use BristolSU\ControlDB\Contracts\Models\Group; use BristolSU\Support\Filters\FilterInstance; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; @@ -17,6 +17,7 @@ class AudienceChanged * @var array|FilterInstance[] */ public array $filterInstances; + public User|Group|Role|null $model; /** @@ -30,5 +31,4 @@ public function __construct(array $filterInstances, User|Group|Role|null $model $this->filterInstances = $filterInstances; $this->model = $model; } - } diff --git a/src/Filters/FilterInstance.php b/src/Filters/FilterInstance.php index 2be0ae33a..9d784585f 100644 --- a/src/Filters/FilterInstance.php +++ b/src/Filters/FilterInstance.php @@ -16,7 +16,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use function Illuminate\Events\queueable; /** * Represents a filter instance. @@ -58,12 +57,12 @@ protected static function booted() AudienceChanged::dispatch([$filterInstance]); }); static::created(function (FilterInstance $filterInstance) { - if($filterInstance->logic_id) { + if ($filterInstance->logic_id) { AudienceChanged::dispatch([$filterInstance]); } }); static::updated(function (FilterInstance $filterInstance) { - if($filterInstance->isDirty(['settings', 'logic_id', 'logic_type'])) { + if ($filterInstance->isDirty(['settings', 'logic_id', 'logic_type'])) { AudienceChanged::dispatch([$filterInstance]); } }); diff --git a/src/Filters/FilterManagerEventRegistrationDecorator.php b/src/Filters/FilterManagerEventRegistrationDecorator.php index 4e60f5266..93ff9ac66 100644 --- a/src/Filters/FilterManagerEventRegistrationDecorator.php +++ b/src/Filters/FilterManagerEventRegistrationDecorator.php @@ -11,7 +11,6 @@ */ class FilterManagerEventRegistrationDecorator implements FilterManagerContract { - private FilterManagerContract $baseFilterManager; public function __construct(FilterManagerContract $baseFilterManager) @@ -19,7 +18,6 @@ public function __construct(FilterManagerContract $baseFilterManager) $this->baseFilterManager = $baseFilterManager; } - /** * Register a new filter. * diff --git a/src/Filters/FilterServiceProvider.php b/src/Filters/FilterServiceProvider.php index 0fa788df2..9bf839c25 100644 --- a/src/Filters/FilterServiceProvider.php +++ b/src/Filters/FilterServiceProvider.php @@ -38,7 +38,7 @@ public function register() $this->app->bind(FilterInstanceContract::class, FilterInstance::class); $this->app->bind(FilterInstanceRepositoryContract::class, FilterInstanceRepository::class); $this->app->singleton(FilterManagerContract::class, FilterManager::class); - $this->app->extend(FilterManagerContract::class, fn(FilterManagerContract $filterManager) => new FilterManagerEventRegistrationDecorator($filterManager)); + $this->app->extend(FilterManagerContract::class, fn (FilterManagerContract $filterManager) => new FilterManagerEventRegistrationDecorator($filterManager)); } /** diff --git a/src/Filters/Filters/Group/GroupNameIs.php b/src/Filters/Filters/Group/GroupNameIs.php index 1a4aec3d5..36895746f 100644 --- a/src/Filters/Filters/Group/GroupNameIs.php +++ b/src/Filters/Filters/Group/GroupNameIs.php @@ -75,7 +75,7 @@ public function alias() public static function clearOn(): array { return [ - DataGroupUpdated::class => fn(DataGroupUpdated $event) => app(GroupRepository::class)->getByDataProviderId($event->dataGroup->id())->id() + DataGroupUpdated::class => fn (DataGroupUpdated $event) => app(GroupRepository::class)->getByDataProviderId($event->dataGroup->id())->id() ]; } } diff --git a/src/Filters/Filters/Group/GroupTagged.php b/src/Filters/Filters/Group/GroupTagged.php index fe132dd0a..78d42440f 100644 --- a/src/Filters/Filters/Group/GroupTagged.php +++ b/src/Filters/Filters/Group/GroupTagged.php @@ -3,12 +3,12 @@ namespace BristolSU\Support\Filters\Filters\Group; -use BristolSU\ControlDB\Contracts\Repositories\Tags\GroupTag as GroupTagRepositoryContract; use BristolSU\ControlDB\Contracts\Models\Tags\GroupTag; -use BristolSU\Support\Filters\Contracts\Filters\GroupFilter; -use FormSchema\Schema\Form; +use BristolSU\ControlDB\Contracts\Repositories\Tags\GroupTag as GroupTagRepositoryContract; use BristolSU\ControlDB\Events\Pivots\Tags\GroupGroupTag\GroupTagged as GroupTaggedEvent; use BristolSU\ControlDB\Events\Pivots\Tags\GroupGroupTag\GroupUntagged as GroupUntaggedEvent; +use BristolSU\Support\Filters\Contracts\Filters\GroupFilter; +use FormSchema\Schema\Form; /** * Is the group tagged with a tag? @@ -65,7 +65,8 @@ public function evaluate(array $settings): bool public function options(): Form { $field = \FormSchema\Generator\Field::select('tag')->setLabel('Group Name')->setRequired(true); - $this->groupTagRepository->all()->each(fn(GroupTag $tag) => $field->withOption($tag->fullReference(), sprintf('%s (%s)', $tag->name(), $tag->fullReference()), $tag->category()->name())); + $this->groupTagRepository->all()->each(fn (GroupTag $tag) => $field->withOption($tag->fullReference(), sprintf('%s (%s)', $tag->name(), $tag->fullReference()), $tag->category()->name())); + return \FormSchema\Generator\Form::make()->withField($field)->getSchema(); } @@ -102,8 +103,8 @@ public function alias() public static function clearOn(): array { return [ - GroupTaggedEvent::class => fn(GroupTaggedEvent $event) => $event->group->id(), - GroupUntaggedEvent::class => fn(GroupUntaggedEvent $event) => $event->group->id(), + GroupTaggedEvent::class => fn (GroupTaggedEvent $event) => $event->group->id(), + GroupUntaggedEvent::class => fn (GroupUntaggedEvent $event) => $event->group->id(), ]; } } diff --git a/src/Filters/Filters/Role/RoleHasPosition.php b/src/Filters/Filters/Role/RoleHasPosition.php index a32362f7c..73afb74e9 100644 --- a/src/Filters/Filters/Role/RoleHasPosition.php +++ b/src/Filters/Filters/Role/RoleHasPosition.php @@ -57,7 +57,8 @@ public function evaluate(array $settings): bool public function options(): Form { $field = \FormSchema\Generator\Field::select('position')->setLabel('Position')->setRequired(true); - $this->positionRepository->all()->each(fn(PositionModel $position) => $field->withOption($position->id(), $position->data()->name())); + $this->positionRepository->all()->each(fn (PositionModel $position) => $field->withOption($position->id(), $position->data()->name())); + return \FormSchema\Generator\Form::make()->withField($field)->getSchema(); } @@ -94,7 +95,7 @@ public function alias() public static function clearOn(): array { return [ - RoleUpdated::class => fn(RoleUpdated $event) => array_key_exists('position_id', $event->updatedData) ? $event->role->id() : false + RoleUpdated::class => fn (RoleUpdated $event) => array_key_exists('position_id', $event->updatedData) ? $event->role->id() : false ]; } } diff --git a/src/Filters/Filters/Role/RoleTagged.php b/src/Filters/Filters/Role/RoleTagged.php index fa940a345..a96cbab68 100644 --- a/src/Filters/Filters/Role/RoleTagged.php +++ b/src/Filters/Filters/Role/RoleTagged.php @@ -5,10 +5,10 @@ use BristolSU\ControlDB\Contracts\Models\Tags\RoleTag; use BristolSU\ControlDB\Contracts\Repositories\Tags\RoleTag as RoleTagRepositoryContract; -use BristolSU\Support\Filters\Contracts\Filters\RoleFilter; -use FormSchema\Schema\Form; use BristolSU\ControlDB\Events\Pivots\Tags\RoleRoleTag\RoleTagged as RoleTaggedEvent; use BristolSU\ControlDB\Events\Pivots\Tags\RoleRoleTag\RoleUntagged as RoleUntaggedEvent; +use BristolSU\Support\Filters\Contracts\Filters\RoleFilter; +use FormSchema\Schema\Form; /** * Is the role tagged with a tag? @@ -65,7 +65,8 @@ public function evaluate(array $settings): bool public function options(): Form { $field = \FormSchema\Generator\Field::select('tag')->setLabel('Role Name')->setRequired(true); - $this->roleTagRepository->all()->each(fn(RoleTag $roleTag) => $field->withOption($roleTag->fullReference(), sprintf('%s (%s)', $roleTag->name(), $roleTag->fullReference()), $roleTag->category()->name())); + $this->roleTagRepository->all()->each(fn (RoleTag $roleTag) => $field->withOption($roleTag->fullReference(), sprintf('%s (%s)', $roleTag->name(), $roleTag->fullReference()), $roleTag->category()->name())); + return \FormSchema\Generator\Form::make()->withField($field)->getSchema(); } @@ -102,8 +103,8 @@ public function alias() public static function clearOn(): array { return [ - RoleTaggedEvent::class => fn(RoleTaggedEvent $event) => $event->role->id(), - RoleUntaggedEvent::class => fn(RoleUntaggedEvent $event) => $event->role->id(), + RoleTaggedEvent::class => fn (RoleTaggedEvent $event) => $event->role->id(), + RoleUntaggedEvent::class => fn (RoleUntaggedEvent $event) => $event->role->id(), ]; } } diff --git a/src/Filters/Filters/User/UserEmailIs.php b/src/Filters/Filters/User/UserEmailIs.php index 7e0b92f3c..fda66916a 100644 --- a/src/Filters/Filters/User/UserEmailIs.php +++ b/src/Filters/Filters/User/UserEmailIs.php @@ -2,12 +2,11 @@ namespace BristolSU\Support\Filters\Filters\User; -use BristolSU\ControlDB\Events\DataUser\DataUserUpdated; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; +use BristolSU\ControlDB\Events\DataUser\DataUserUpdated; use BristolSU\Support\Filters\Contracts\Filters\UserFilter; use FormSchema\Generator\Field; use FormSchema\Schema\Form; -use BristolSU\ControlDB\Events\User\UserUpdated; /** * Does the user have the given email? @@ -80,7 +79,7 @@ public function alias() public static function clearOn(): array { return [ - DataUserUpdated::class => fn(DataUserUpdated $event) => app(UserRepository::class)->getByDataProviderId($event->dataUser->id())->id() + DataUserUpdated::class => fn (DataUserUpdated $event) => app(UserRepository::class)->getByDataProviderId($event->dataUser->id())->id() ]; } } diff --git a/src/Filters/Filters/User/UserTagged.php b/src/Filters/Filters/User/UserTagged.php index e756c6bd0..1e7e4d4d6 100644 --- a/src/Filters/Filters/User/UserTagged.php +++ b/src/Filters/Filters/User/UserTagged.php @@ -65,7 +65,8 @@ public function evaluate(array $settings): bool public function options(): Form { $field = \FormSchema\Generator\Field::select('tag')->setLabel('User Name')->setRequired(true); - $this->userTagRepository->all()->each(fn(UserTag $userTag) => $field->withOption($userTag->fullReference(), sprintf('%s (%s)', $userTag->name(), $userTag->fullReference()), $userTag->category()->name())); + $this->userTagRepository->all()->each(fn (UserTag $userTag) => $field->withOption($userTag->fullReference(), sprintf('%s (%s)', $userTag->name(), $userTag->fullReference()), $userTag->category()->name())); + return \FormSchema\Generator\Form::make()->withField($field)->getSchema(); } @@ -102,8 +103,8 @@ public function alias() public static function clearOn(): array { return [ - UserTaggedEvent::class => fn(UserTaggedEvent $event) => $event->user->id(), - UserUntaggedEvent::class => fn(UserUntaggedEvent $event) => $event->user->id(), + UserTaggedEvent::class => fn (UserTaggedEvent $event) => $event->user->id(), + UserUntaggedEvent::class => fn (UserUntaggedEvent $event) => $event->user->id(), ]; } } diff --git a/src/Filters/Listeners/RefreshFilterResults.php b/src/Filters/Listeners/RefreshFilterResults.php index c9aef7fbd..6becb21cd 100644 --- a/src/Filters/Listeners/RefreshFilterResults.php +++ b/src/Filters/Listeners/RefreshFilterResults.php @@ -5,7 +5,6 @@ use BristolSU\ControlDB\Contracts\Repositories\Group as GroupRepository; use BristolSU\ControlDB\Contracts\Repositories\Role as RoleRepository; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; -use BristolSU\ControlDB\Models\Role; use BristolSU\Support\Filters\Contracts\FilterInstance; use BristolSU\Support\Filters\Contracts\FilterInstanceRepository; use BristolSU\Support\Filters\Contracts\FilterRepository; @@ -22,14 +21,16 @@ use Illuminate\Foundation\Bus\Dispatchable; /** - * A listener that binds to any events listened to by filters, and starts the process of clearing the logic cache + * A listener that binds to any events listened to by filters, and starts the process of clearing the logic cache. */ class RefreshFilterResults implements ShouldQueue { use Queueable, Dispatchable; private FilterRepository $filterRepository; + private FilterInstanceRepository $filterInstanceRepository; + private FilterTester $filterTester; /** @@ -42,19 +43,19 @@ public function __construct(FilterRepository $filterRepository, FilterInstanceRe { $this->filterRepository = $filterRepository; $this->filterInstanceRepository = $filterInstanceRepository; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } /** * Handle the event. * - * @return void + * @param mixed $event */ public function handle($event) { // Get all filters that listen to this event, and fire a RefreshFilterResult job with the event and the filter affected $audienceChangedEvents = collect($this->filterRepository->getAll()) - ->filter(fn(Filter $filter) => array_key_exists(get_class($event), $filter::clearOn())) + ->filter(fn (Filter $filter) => array_key_exists(get_class($event), $filter::clearOn())) ->map(function (Filter $filter) use ($event) { // Get the control model affected by the event. @@ -69,11 +70,12 @@ public function handle($event) // Return an AudienceChanged event for each filter instance affected return new AudienceChanged( $this->filterInstanceRepository->all() - ->filter(fn(FilterInstance $filterInstance) => $filterInstance->alias() === $filter->alias()) + ->filter(fn (FilterInstance $filterInstance) => $filterInstance->alias() === $filter->alias()) ->all(), $model ); } + return null; }) ->filter(); @@ -82,5 +84,4 @@ public function handle($event) event($audienceChangedEvent); } } - } diff --git a/src/Http/Controllers/ModuleInstanceRedirectController.php b/src/Http/Controllers/ModuleInstanceRedirectController.php index 43a5e478d..36b88e975 100644 --- a/src/Http/Controllers/ModuleInstanceRedirectController.php +++ b/src/Http/Controllers/ModuleInstanceRedirectController.php @@ -30,3 +30,4 @@ public function index(Request $request, Activity $activity, ModuleInstance $modu return redirect()->to($url); } } + diff --git a/src/Logic/Audience/Audience.php b/src/Logic/Audience/Audience.php index 0ecfe8eaa..41770dff6 100644 --- a/src/Logic/Audience/Audience.php +++ b/src/Logic/Audience/Audience.php @@ -10,7 +10,7 @@ use Illuminate\Support\Facades\Facade; /** - * Create audience members, which are useful for analysing the roles a user can be in , and in relation to logic groups + * Create audience members, which are useful for analysing the roles a user can be in , and in relation to logic groups. * * @method static AudienceMember fromUser(User $user) Create an audience member from a user. * @method static Collection withAccessToResource(User|Role|Group $resource) Audience members who have access to a given resource in some way. @@ -23,10 +23,8 @@ */ class Audience extends Facade { - protected static function getFacadeAccessor() { return \BristolSU\Support\Logic\Contracts\Audience\AudienceMemberFactory::class; } - } diff --git a/src/Logic/Audience/AudienceMember.php b/src/Logic/Audience/AudienceMember.php index 9968b3bb5..0976bf3dd 100644 --- a/src/Logic/Audience/AudienceMember.php +++ b/src/Logic/Audience/AudienceMember.php @@ -3,9 +3,7 @@ namespace BristolSU\Support\Logic\Audience; use BristolSU\ControlDB\Contracts\Models\Group; -use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\ControlDB\Contracts\Models\User; -use BristolSU\Support\Logic\Facade\LogicTester; use BristolSU\Support\Logic\Logic; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Jsonable; diff --git a/src/Logic/Audience/AudienceMemberFactory.php b/src/Logic/Audience/AudienceMemberFactory.php index c23e21c2d..04c9a4013 100644 --- a/src/Logic/Audience/AudienceMemberFactory.php +++ b/src/Logic/Audience/AudienceMemberFactory.php @@ -52,6 +52,7 @@ public function withAccessToResource(User|Role|Group $resource): Collection return $this->fromUser($user); }); } + return $resource->users()->map(function ($user) { return $this->fromUser($user); }); @@ -80,13 +81,13 @@ public function audience(Logic $logic, ?User $user = null, ?Group $group = null, $audienceMembers = collect(); $logicResults = LogicResult::forLogic($logic)->where($conditions)->get()->groupBy('user_id'); - foreach($logicResults as $userId => $userLogicResults) { + foreach ($logicResults as $userId => $userLogicResults) { $audienceMember = new AudienceMember($user ?? LazyUser::load($userId)); $audienceMember->setCanBeUser(false); $groups = collect(); $roles = collect(); - foreach($userLogicResults as $userLogicResult) { - if($userLogicResult->hasRole()) { + foreach ($userLogicResults as $userLogicResult) { + if ($userLogicResult->hasRole()) { $roles->push(LazyRole::load($userLogicResult->getRoleId())); } elseif ($userLogicResult->hasGroup()) { $groups->push(LazyGroup::load($userLogicResult->getGroupId())); @@ -98,7 +99,7 @@ public function audience(Logic $logic, ?User $user = null, ?Group $group = null, $audienceMember->setGroups($groups); $audienceMember->setRoles($roles); - if($audienceMember->hasAudience()) { + if ($audienceMember->hasAudience()) { $audienceMembers->push($audienceMember); } } @@ -107,7 +108,7 @@ public function audience(Logic $logic, ?User $user = null, ?Group $group = null, } /** - * Return all users that have access to the logic group + * Return all users that have access to the logic group. * @param Logic $logic * @return Collection */ @@ -120,11 +121,11 @@ public function getUsersInLogicGroup(Logic $logic): Collection ->distinct() ->get(); - return $userIds->map(fn(LogicResult $logicResult) => LazyUser::load($logicResult->user_id)); + return $userIds->map(fn (LogicResult $logicResult) => LazyUser::load($logicResult->user_id)); } /** - * Return all groups that have access to the logic group + * Return all groups that have access to the logic group. * @param Logic $logic * @return Collection */ @@ -137,11 +138,11 @@ public function getGroupsInLogicGroup(Logic $logic): Collection ->distinct() ->get(); - return $groupIds->map(fn(LogicResult $logicResult) => LazyGroup::load($logicResult->getGroupId())); + return $groupIds->map(fn (LogicResult $logicResult) => LazyGroup::load($logicResult->getGroupId())); } /** - * Return all roles that have access to the logic group + * Return all roles that have access to the logic group. * @param Logic $logic * @return Collection */ @@ -154,7 +155,6 @@ public function getRolesInLogicGroup(Logic $logic): Collection ->distinct() ->get(); - return $roleIds->map(fn(LogicResult $logicResult) => LazyRole::load($logicResult->getRoleId())); + return $roleIds->map(fn (LogicResult $logicResult) => LazyRole::load($logicResult->getRoleId())); } - } diff --git a/src/Logic/Commands/CacheLogicCommand.php b/src/Logic/Commands/CacheLogicCommand.php index d91db3b01..2031f4507 100644 --- a/src/Logic/Commands/CacheLogicCommand.php +++ b/src/Logic/Commands/CacheLogicCommand.php @@ -3,13 +3,9 @@ namespace BristolSU\Support\Logic\Commands; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; -use BristolSU\ControlDB\Export\RunExport; use BristolSU\Support\Logic\Contracts\LogicRepository; use BristolSU\Support\Logic\Jobs\CacheLogic; -use BristolSU\Support\Logic\Jobs\CacheLogicForUser; use Illuminate\Console\Command; -use Illuminate\Contracts\Bus\Dispatcher; -use Illuminate\Support\Arr; /** * Command to cache the result of all filters. @@ -37,11 +33,11 @@ class CacheLogicCommand extends Command * * @param UserRepository $userRepository Repository to get all users from */ - public function handle(LogicRepository $logicRepository) { - + public function handle(LogicRepository $logicRepository) + { $logics = $this->argument('logic') ? [$logicRepository->getById($this->argument('logic'))] : $logicRepository->all(); - foreach($logics as $logic) { + foreach ($logics as $logic) { CacheLogic::dispatch($logic); } } diff --git a/src/Logic/Commands/CacheStatusCommand.php b/src/Logic/Commands/CacheStatusCommand.php index 7fb6a951d..f8032306c 100644 --- a/src/Logic/Commands/CacheStatusCommand.php +++ b/src/Logic/Commands/CacheStatusCommand.php @@ -2,16 +2,11 @@ namespace BristolSU\Support\Logic\Commands; -use BristolSU\ControlDB\Contracts\Models\Group; -use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; -use BristolSU\Support\Filters\Contracts\FilterInstance; -use BristolSU\Support\Filters\Jobs\CacheFilter; use BristolSU\Support\Logic\Audience\Audience; use BristolSU\Support\Logic\Contracts\LogicRepository; use BristolSU\Support\Logic\DatabaseDecorator\LogicResult; use Illuminate\Console\Command; -use Illuminate\Support\Collection; /** * Command to cache the result of all filters. @@ -43,8 +38,7 @@ class CacheStatusCommand extends Command public function handle( LogicRepository $logicRepository, UserRepository $userRepository - ) - { + ) { $users = collect($userRepository->all()); $combinations = 0; @@ -75,7 +69,6 @@ public function handle( $this->table([ 'ID', 'Name', 'Cached' ], $results); - } private function getLogics(LogicRepository $logicRepository): array @@ -83,6 +76,7 @@ private function getLogics(LogicRepository $logicRepository): array if ($this->argument('logic') !== null) { return [$logicRepository->getById($this->argument('logic'))]; } + return collect($logicRepository->all())->all(); } } diff --git a/src/Logic/Contracts/Audience/AudienceMemberFactory.php b/src/Logic/Contracts/Audience/AudienceMemberFactory.php index 96cb9678f..d121d9d52 100644 --- a/src/Logic/Contracts/Audience/AudienceMemberFactory.php +++ b/src/Logic/Contracts/Audience/AudienceMemberFactory.php @@ -6,10 +6,8 @@ use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\Support\Logic\Audience\AudienceMember; -use BristolSU\Support\Logic\DatabaseDecorator\LogicResult; use BristolSU\Support\Logic\Logic; use Illuminate\Support\Collection; -use JetBrains\PhpStorm\Pure; /** * Create an audience member. @@ -47,21 +45,21 @@ public function withAccessToResource(User|Role|Group $resource): Collection; public function audience(Logic $logic, ?User $user = null, ?Group $group = null, ?Role $role = null): Collection; /** - * Return all users that have access to the logic group + * Return all users that have access to the logic group. * @param Logic $logic * @return Collection */ public function getUsersInLogicGroup(Logic $logic): Collection; /** - * Return all groups that have access to the logic group + * Return all groups that have access to the logic group. * @param Logic $logic * @return Collection */ public function getGroupsInLogicGroup(Logic $logic): Collection; /** - * Return all roles that have access to the logic group + * Return all roles that have access to the logic group. * @param Logic $logic * @return Collection */ diff --git a/src/Logic/DatabaseDecorator/LogicDatabaseDecorator.php b/src/Logic/DatabaseDecorator/LogicDatabaseDecorator.php index 798d0e715..634165cf9 100644 --- a/src/Logic/DatabaseDecorator/LogicDatabaseDecorator.php +++ b/src/Logic/DatabaseDecorator/LogicDatabaseDecorator.php @@ -4,11 +4,10 @@ use BristolSU\Support\Logic\Contracts\LogicTester; use BristolSU\Support\Logic\Logic; -use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\DB; class LogicDatabaseDecorator implements LogicTester { - private LogicTester $baseTester; public function __construct(LogicTester $baseTester) @@ -18,7 +17,7 @@ public function __construct(LogicTester $baseTester) public function evaluate(Logic $logic, $userModel = null, $groupModel = null, $roleModel = null): bool { - if($userModel === null) { + if ($userModel === null) { return false; } @@ -28,13 +27,16 @@ public function evaluate(Logic $logic, $userModel = null, $groupModel = null, $r return $logicResult->getResult(); } $result = $this->baseTester->evaluate($logic, $userModel, $groupModel, $roleModel); - LogicResult::create([ + DB::transaction(fn () => LogicResult::updateOrCreate([ 'logic_id' => $logic->id, 'user_id' => $userModel?->id(), 'group_id' => $groupModel?->id(), - 'role_id' => $roleModel?->id(), + 'role_id' => $roleModel?->id() + ], [ 'result' => $result - ]); + ]), 5); + + return $result; } } diff --git a/src/Logic/DatabaseDecorator/LogicResult.php b/src/Logic/DatabaseDecorator/LogicResult.php index 0cb2ad097..2485b6c5e 100644 --- a/src/Logic/DatabaseDecorator/LogicResult.php +++ b/src/Logic/DatabaseDecorator/LogicResult.php @@ -2,9 +2,9 @@ namespace BristolSU\Support\Logic\DatabaseDecorator; -use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\ControlDB\Contracts\Models\Group; use BristolSU\ControlDB\Contracts\Models\Role; +use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\Support\Logic\Logic; use Database\Factories\LogicResultFactory; use Illuminate\Database\Eloquent\Builder; diff --git a/src/Logic/Jobs/CacheLogic.php b/src/Logic/Jobs/CacheLogic.php index 6fbccfd2d..a1e660391 100644 --- a/src/Logic/Jobs/CacheLogic.php +++ b/src/Logic/Jobs/CacheLogic.php @@ -3,13 +3,10 @@ namespace BristolSU\Support\Logic\Jobs; use BristolSU\ControlDB\Contracts\Repositories\User; -use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; use BristolSU\Support\Logic\Logic; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Artisan; /** * Job to cache a filter result. @@ -23,12 +20,13 @@ class CacheLogic implements ShouldQueue public function __construct(Logic $logic) { $this->logic = $logic; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } public function handle() { - foreach($this->pages() as $page) { + $pages = $this->pages(); + foreach ($pages as $page) { CacheLogicsForUser::dispatch($this->logic, $page); } } @@ -37,9 +35,10 @@ private function pages(): array { $count = app(User::class)->count(); - if($count > 0) { + if ($count > 0) { return range(1, ceil($count/200)); } + return []; } } diff --git a/src/Logic/Jobs/CacheLogicForGroup.php b/src/Logic/Jobs/CacheLogicForGroup.php index 55e9a3055..fffc3d070 100644 --- a/src/Logic/Jobs/CacheLogicForGroup.php +++ b/src/Logic/Jobs/CacheLogicForGroup.php @@ -29,14 +29,18 @@ class CacheLogicForGroup implements ShouldQueue public ?int $logicId = null; + private array $params = []; + /** * @param Group[]|array $groups The group to cache logic for */ public function __construct(array $groups, ?int $logicId = null) { + $this->params = func_get_args(); + $this->groups = collect($groups); $this->logicId = $logicId; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } /** @@ -46,20 +50,25 @@ public function __construct(array $groups, ?int $logicId = null) */ public function handle() { - foreach($this->groups as $group) { + foreach ($this->groups as $group) { /** @var AudienceMember[] $groupAudience */ $groupAudience = Audience::withAccessToResource($group); - foreach($groupAudience as $audience) { + foreach ($groupAudience as $audience) { $audience->roles()->each( - fn(Role $role) => $this->cacheLogic($this->logicId, $audience->user(), $role->group(), $role) + fn (Role $role) => $this->cacheLogic($this->logicId, $audience->user(), $role->group(), $role) ); $audience->groups()->each( - fn(Group $groupAudience) => $this->cacheLogic($this->logicId, $audience->user(), $groupAudience) + fn (Group $groupAudience) => $this->cacheLogic($this->logicId, $audience->user(), $groupAudience) ); - if($audience->canBeUser()) { + if ($audience->canBeUser()) { $this->cacheLogic($this->logicId, $audience->user()); } } } } + + public function redispatchJob(int $timeout) + { +// $this->dispatch(...$this->params)->onConnection($this->connection)->onQueue($this->queue)->delay($timeout); + } } diff --git a/src/Logic/Jobs/CacheLogicForRole.php b/src/Logic/Jobs/CacheLogicForRole.php index 16e7e0a05..8ebb324c9 100644 --- a/src/Logic/Jobs/CacheLogicForRole.php +++ b/src/Logic/Jobs/CacheLogicForRole.php @@ -2,8 +2,8 @@ namespace BristolSU\Support\Logic\Jobs; -use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\ControlDB\Contracts\Models\Group; +use BristolSU\ControlDB\Contracts\Models\Role; use BristolSU\Support\Logic\Audience\Audience; use BristolSU\Support\Logic\Audience\AudienceMember; use BristolSU\Support\Logic\Traits\CachesLogic; @@ -30,14 +30,17 @@ class CacheLogicForRole implements ShouldQueue public ?int $logicId = null; + private array $params = []; + /** * @param array|Role[] $roles The role to cache logic for */ public function __construct(array $roles, ?int $logicId = null) { + $this->params = func_get_args(); $this->roles = collect($roles); $this->logicId = $logicId; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } /** @@ -47,20 +50,25 @@ public function __construct(array $roles, ?int $logicId = null) */ public function handle() { - foreach($this->roles as $role) { + foreach ($this->roles as $role) { /** @var AudienceMember[] $roleAudience */ $roleAudience = Audience::withAccessToResource($role); - foreach($roleAudience as $audience) { + foreach ($roleAudience as $audience) { $audience->roles()->each( - fn(Role $audienceRole) => $this->cacheLogic($this->logicId, $audience->user(), $audienceRole->group(), $audienceRole) + fn (Role $audienceRole) => $this->cacheLogic($this->logicId, $audience->user(), $audienceRole->group(), $audienceRole) ); $audience->groups()->each( - fn(Group $group) => $this->cacheLogic($this->logicId, $audience->user(), $group) + fn (Group $group) => $this->cacheLogic($this->logicId, $audience->user(), $group) ); - if($audience->canBeUser()) { + if ($audience->canBeUser()) { $this->cacheLogic($this->logicId, $audience->user()); } } } } + + public function redispatchJob(int $timeout) + { +// $this->dispatch(...$this->params)->onConnection($this->connection)->onQueue($this->queue)->delay($timeout); + } } diff --git a/src/Logic/Jobs/CacheLogicForSingleCombination.php b/src/Logic/Jobs/CacheLogicForSingleCombination.php index eaaed50a9..e3b6e5fcf 100644 --- a/src/Logic/Jobs/CacheLogicForSingleCombination.php +++ b/src/Logic/Jobs/CacheLogicForSingleCombination.php @@ -19,10 +19,15 @@ class CacheLogicForSingleCombination implements ShouldQueue use Queueable, CachesLogic, Dispatchable, SerializesModels; public ?int $logicId = null; + public User $user; + public ?Group $group = null; + public ?Role $role = null; + private array $params = []; + /** * @param int|null $logicId * @param User $user @@ -31,11 +36,12 @@ class CacheLogicForSingleCombination implements ShouldQueue */ public function __construct(int|null $logicId, User $user, ?Group $group = null, ?Role $role = null) { + $this->params = func_get_args(); $this->logicId = $logicId; $this->user = $user; $this->group = $group; $this->role = $role; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } /** @@ -47,4 +53,9 @@ public function handle() { $this->cacheLogic($this->logicId, $this->user, $this->group, $this->role); } + + public function redispatchJob(int $timeout) + { +// $this->dispatch(...$this->params)->onConnection($this->connection)->onQueue($this->queue)->delay($timeout); + } } diff --git a/src/Logic/Jobs/CacheLogicForUser.php b/src/Logic/Jobs/CacheLogicForUser.php index 4018be4e6..54afdd9bc 100644 --- a/src/Logic/Jobs/CacheLogicForUser.php +++ b/src/Logic/Jobs/CacheLogicForUser.php @@ -3,8 +3,8 @@ namespace BristolSU\Support\Logic\Jobs; use BristolSU\ControlDB\Contracts\Models\Group; -use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\ControlDB\Contracts\Models\Role; +use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\Support\Logic\Audience\Audience; use BristolSU\Support\Logic\Traits\CachesLogic; use Illuminate\Bus\Queueable; @@ -29,14 +29,18 @@ class CacheLogicForUser implements ShouldQueue public ?int $logicId = null; + private array $params = []; + /** * @param array|User[] $users The user to cache logic for */ public function __construct(array $users, ?int $logicId = null) { + $this->params = func_get_args(); + $this->users = collect($users); $this->logicId = $logicId; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } /** @@ -46,18 +50,22 @@ public function __construct(array $users, ?int $logicId = null) */ public function handle() { - foreach($this->users as $user) { + foreach ($this->users as $user) { $audience = Audience::fromUser($user); $audience->roles()->each( - fn(Role $role) => $this->cacheLogic($this->logicId, $user, $role->group(), $role) + fn (Role $role) => $this->cacheLogic($this->logicId, $user, $role->group(), $role) ); $audience->groups()->each( - fn(Group $group) => $this->cacheLogic($this->logicId, $user, $group) + fn (Group $group) => $this->cacheLogic($this->logicId, $user, $group) ); - if($audience->canBeUser()) { + if ($audience->canBeUser()) { $this->cacheLogic($this->logicId, $user); } } } + public function redispatchJob(int $timeout) + { +// $this->dispatch(...$this->params)->onConnection($this->connection)->onQueue($this->queue)->delay($timeout); + } } diff --git a/src/Logic/Jobs/CacheLogicsForUser.php b/src/Logic/Jobs/CacheLogicsForUser.php index a1fd57f6d..bda8ac6b9 100644 --- a/src/Logic/Jobs/CacheLogicsForUser.php +++ b/src/Logic/Jobs/CacheLogicsForUser.php @@ -2,14 +2,12 @@ namespace BristolSU\Support\Logic\Jobs; -use BristolSU\ControlDB\Contracts\Repositories\User; use BristolSU\ControlDB\Contracts\Repositories\User as UserRepository; use BristolSU\Support\Logic\Logic; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Artisan; /** * Job to cache a filter result. @@ -26,13 +24,13 @@ public function __construct(Logic $logic, $page = 1) { $this->logic = $logic; $this->page = $page; - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } public function handle(UserRepository $userRepository) { $allUsers = $userRepository->paginate($this->page, 200); - foreach($allUsers->chunk(20) as $users) { + foreach ($allUsers->chunk(20) as $users) { CacheLogicForUser::dispatch($users->all(), $this->logic->id); } } diff --git a/src/Logic/Listeners/RefreshLogicResult.php b/src/Logic/Listeners/RefreshLogicResult.php index 09407165a..77eaffc98 100644 --- a/src/Logic/Listeners/RefreshLogicResult.php +++ b/src/Logic/Listeners/RefreshLogicResult.php @@ -2,11 +2,10 @@ namespace BristolSU\Support\Logic\Listeners; -use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\ControlDB\Contracts\Models\Group; use BristolSU\ControlDB\Contracts\Models\Role; +use BristolSU\ControlDB\Contracts\Models\User; use BristolSU\Support\Filters\Events\AudienceChanged; -use BristolSU\Support\Filters\FilterInstance; use BristolSU\Support\Logic\Jobs\CacheLogic; use BristolSU\Support\Logic\Jobs\CacheLogicForGroup; use BristolSU\Support\Logic\Jobs\CacheLogicForRole; @@ -17,7 +16,7 @@ use Illuminate\Foundation\Bus\Dispatchable; /** - * Handles an audience changed event, by clearing the logic cache + * Handles an audience changed event, by clearing the logic cache. */ class RefreshLogicResult implements ShouldQueue { @@ -25,15 +24,15 @@ class RefreshLogicResult implements ShouldQueue public function __construct() { - $this->onQueue('logic'); + $this->onQueue(sprintf('logic_%s', config('app.env'))); } public function handle(AudienceChanged $audienceChanged) { - foreach($audienceChanged->filterInstances as $filterInstance) { + foreach ($audienceChanged->filterInstances as $filterInstance) { $logic = $filterInstance->logic; // Only continue if the filter instance is attached to a logic - if($logic === null) { + if ($logic === null) { continue; } $this->refreshFilterResult($logic, $audienceChanged->model); @@ -42,22 +41,21 @@ public function handle(AudienceChanged $audienceChanged) public function refreshFilterResult(Logic $logic, User|Group|Role|null $model) { - if($model === null) { + if ($model === null) { // Cache the whole logic since we're not limited to a specific model dispatch(new CacheLogic($logic)); } - if($model instanceof User) { + if ($model instanceof User) { dispatch(new CacheLogicForUser([$model], $logic->id)); } - if($model instanceof Group) { + if ($model instanceof Group) { dispatch(new CacheLogicForGroup([$model], $logic->id)); } - if($model instanceof Role) { + if ($model instanceof Role) { dispatch(new CacheLogicForRole([$model], $logic->id)); } - } } diff --git a/src/Logic/LogicServiceProvider.php b/src/Logic/LogicServiceProvider.php index dc9042c19..2834af51a 100644 --- a/src/Logic/LogicServiceProvider.php +++ b/src/Logic/LogicServiceProvider.php @@ -12,13 +12,13 @@ use BristolSU\ControlDB\Events\Role\RoleDeleted; use BristolSU\ControlDB\Events\User\UserCreated; use BristolSU\ControlDB\Events\User\UserDeleted; -use BristolSU\Support\Logic\Commands\CacheStatusCommand; use BristolSU\Support\Filters\Events\AudienceChanged; use BristolSU\Support\Logic\Audience\AudienceMemberFactory; +use BristolSU\Support\Logic\Commands\CacheLogicCommand; +use BristolSU\Support\Logic\Commands\CacheStatusCommand; use BristolSU\Support\Logic\Contracts\Audience\AudienceMemberFactory as AudienceFactoryContract; use BristolSU\Support\Logic\Contracts\LogicRepository as LogicRepositoryContract; use BristolSU\Support\Logic\Contracts\LogicTester as LogicTesterContract; -use BristolSU\Support\Logic\Commands\CacheLogicCommand; use BristolSU\Support\Logic\DatabaseDecorator\LogicDatabaseDecorator; use BristolSU\Support\Logic\DatabaseDecorator\LogicResult; use BristolSU\Support\Logic\Jobs\CacheLogicForGroup; @@ -45,8 +45,7 @@ public function register() $this->app->bind(LogicRepositoryContract::class, LogicRepository::class); $this->app->bind(LogicTesterContract::class, LogicTester::class); $this->app->bind(AudienceFactoryContract::class, AudienceMemberFactory::class); - $this->app->extend(LogicTesterContract::class, fn(LogicTesterContract $logicTester) => new LogicDatabaseDecorator($logicTester)); - + $this->app->extend(LogicTesterContract::class, fn (LogicTesterContract $logicTester) => new LogicDatabaseDecorator($logicTester)); } public function boot() @@ -54,28 +53,27 @@ public function boot() $this->commands([CacheLogicCommand::class, CacheStatusCommand::class]); Event::listen(AudienceChanged::class, RefreshLogicResult::class); - Event::listen(UserDeleted::class, fn(UserDeleted $event) => LogicResult::where('user_id', $event->user->id())->delete()); - Event::listen(GroupDeleted::class, fn(GroupDeleted $event) => LogicResult::where('group_id', $event->group->id())->delete()); - Event::listen(RoleDeleted::class, fn(RoleDeleted $event) => LogicResult::where('role_id', $event->role->id())->delete()); - Event::listen(UserCreated::class, fn(UserCreated $event) => dispatch(new CacheLogicForUser([$event->user]))); - Event::listen(GroupCreated::class, fn(GroupCreated $event) => dispatch(new CacheLogicForGroup([$event->group]))); - Event::listen(RoleCreated::class, fn(RoleCreated $event) => dispatch(new CacheLogicForRole([$event->role]))); - Event::listen(UserAddedToRole::class, fn(UserAddedToRole $event) => dispatch( + Event::listen(UserDeleted::class, fn (UserDeleted $event) => LogicResult::where('user_id', $event->user->id())->delete()); + Event::listen(GroupDeleted::class, fn (GroupDeleted $event) => LogicResult::where('group_id', $event->group->id())->delete()); + Event::listen(RoleDeleted::class, fn (RoleDeleted $event) => LogicResult::where('role_id', $event->role->id())->delete()); + Event::listen(UserCreated::class, fn (UserCreated $event) => dispatch(new CacheLogicForUser([$event->user]))); + Event::listen(GroupCreated::class, fn (GroupCreated $event) => dispatch(new CacheLogicForGroup([$event->group]))); + Event::listen(RoleCreated::class, fn (RoleCreated $event) => dispatch(new CacheLogicForRole([$event->role]))); + Event::listen(UserAddedToRole::class, fn (UserAddedToRole $event) => dispatch( new CacheLogicForSingleCombination(null, $event->user, $event->role->group(), $event->role) )); - Event::listen(UserRemovedFromRole::class, fn(UserRemovedFromRole $event) => LogicResult::where([ + Event::listen(UserRemovedFromRole::class, fn (UserRemovedFromRole $event) => LogicResult::where([ 'user_id' => $event->user->id(), 'group_id' => $event->role->group()->id(), 'role_id' => $event->role->id() ])->delete()); - Event::listen(UserAddedToGroup::class, fn(UserAddedToGroup $event) => dispatch( + Event::listen(UserAddedToGroup::class, fn (UserAddedToGroup $event) => dispatch( new CacheLogicForSingleCombination(null, $event->user, $event->group, null) )); - Event::listen(UserRemovedFromGroup::class, fn(UserRemovedFromGroup $event) => LogicResult::where([ + Event::listen(UserRemovedFromGroup::class, fn (UserRemovedFromGroup $event) => LogicResult::where([ 'user_id' => $event->user->id(), 'group_id' => $event->group->id(), 'role_id' => null ])->delete()); - } } diff --git a/src/Logic/Traits/CachesLogic.php b/src/Logic/Traits/CachesLogic.php index bafa78ba5..8fe9bbefe 100644 --- a/src/Logic/Traits/CachesLogic.php +++ b/src/Logic/Traits/CachesLogic.php @@ -14,27 +14,47 @@ trait CachesLogic protected function cacheLogic(int|null $logicId, User $user, ?Group $group = null, ?Role $role = null) { if ($logicId !== null) { - LogicResult::where([ - 'logic_id' => $logicId, - 'user_id' => $user->id(), - 'group_id' => $group?->id(), - 'role_id' => $role?->id() - ])->first()?->delete(); - - app(LogicTester::class)->evaluate( - app(LogicRepository::class)->getById($logicId), - $user, $group, $role - ); - } else { - foreach (app(LogicRepository::class)->all() as $logic) { + $cacheKey = sprintf('is-processing-result-%s-%s-%s-%s', $logicId ?? 'none', $user->id(), $group?->id() ?? 'none', $role?->id() ?? 'none'); + $this->waitUntilReady($cacheKey, function() use ($logicId, $user, $group, $role) { LogicResult::where([ - 'logic_id' => $logic->id, + 'logic_id' => $logicId, 'user_id' => $user->id(), 'group_id' => $group?->id(), 'role_id' => $role?->id() ])->first()?->delete(); - app(LogicTester::class)->evaluate($logic, $user, $group, $role); + + app(LogicTester::class)->evaluate( + app(LogicRepository::class)->getById($logicId), + $user, + $group, + $role + ); + }); + + } else { + foreach (app(LogicRepository::class)->all() as $logic) { + $cacheKey = sprintf('is-processing-result-%s-%s-%s-%s', $logic->id, $user->id(), $group?->id() ?? 'none', $role?->id() ?? 'none'); + $this->waitUntilReady($cacheKey, function() use ($logic, $user, $group, $role) { + LogicResult::where([ + 'logic_id' => $logic->id, + 'user_id' => $user->id(), + 'group_id' => $group?->id(), + 'role_id' => $role?->id() + ])->first()?->delete(); + app(LogicTester::class)->evaluate($logic, $user, $group, $role); + }); } } } + + private function waitUntilReady(string $key, \Closure $callback) { + if(cache()->has($key)) { + $this->redispatchJob(20); + } + cache()->put($key, true, 35); + $callback(); + cache()->forget($key); + } + + abstract public function redispatchJob(int $timeout); } diff --git a/src/ModuleInstance/Evaluator/ModuleInstanceCacheEvaluator.php b/src/ModuleInstance/Evaluator/ModuleInstanceCacheEvaluator.php new file mode 100644 index 000000000..ee3f2544c --- /dev/null +++ b/src/ModuleInstance/Evaluator/ModuleInstanceCacheEvaluator.php @@ -0,0 +1,81 @@ +moduleInstanceEvaluator = $moduleInstanceEvaluator; + } + + /** + * Evaluate a module instance for a given administrator. + * + * @param ModuleInstance $moduleInstance Module instance to evaluate + * @param User|null $user User to evaluate for + * @param Group|null $group Group to evaluate for + * @param Role|null $role Role to evaluate for + * @return EvaluationContract + */ + public function evaluateAdministrator(ModuleInstance $moduleInstance, ?User $user = null, ?Group $group = null, ?Role $role = null): EvaluationContract + { + return $this->moduleInstanceEvaluator->evaluateAdministrator($moduleInstance, $user, $group, $role); + } + + /** + * Evaluate a module instance for a given participant. + * + * @param ActivityInstance $activityInstance Activity instance to evaluate + * @param ModuleInstance $moduleInstance Module instance to evaluate + * @param User|null $user User to evaluate for + * @param Group|null $group Group to evaluate for + * @param Role|null $role Role to evaluate for + * @return EvaluationContract + */ + public function evaluateParticipant(ActivityInstance $activityInstance, ModuleInstance $moduleInstance, ?User $user = null, ?Group $group = null, ?Role $role = null): EvaluationContract + { + return $this->moduleInstanceEvaluator->evaluateParticipant($activityInstance, $moduleInstance, $user, $group, $role); + } + + /** + * Evaluate the module instance for all participants of the activity instance. + * + * This method, unlike the admin or participant methods, does not accept a user/group/role. Instead, it evaluates the + * module instance as a whole for a general overview of how the resource (i.e. the model associated to the activity instance) + * is doing. + * + * @param ActivityInstance $activityInstance + * @param ModuleInstance $moduleInstance + * @return Evaluation + */ + public function evaluateResource(ActivityInstance $activityInstance, ModuleInstance $moduleInstance): EvaluationContract + { + return unserialize(cache()->remember( + sprintf('%s@evaluateResource:%u,%u', static::class, $activityInstance->id, $moduleInstance->id), + 300, + fn() => serialize($this->moduleInstanceEvaluator->evaluateResource($activityInstance, $moduleInstance)) + )); + } + +} diff --git a/src/ModuleInstance/ModuleInstance.php b/src/ModuleInstance/ModuleInstance.php index 8eea1affb..87522ed10 100644 --- a/src/ModuleInstance/ModuleInstance.php +++ b/src/ModuleInstance/ModuleInstance.php @@ -7,6 +7,7 @@ use BristolSU\Support\Activity\Activity; use BristolSU\Support\Authentication\Contracts\Authentication; use BristolSU\Support\Completion\CompletionConditionInstance; +use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use BristolSU\Support\Logic\Logic; use BristolSU\Support\ModuleInstance\Connection\ModuleInstanceService; use BristolSU\Support\ModuleInstance\Contracts\ModuleInstance as ModuleInstanceContract; @@ -14,7 +15,6 @@ use BristolSU\Support\Permissions\Models\ModuleInstancePermission; use BristolSU\Support\Progress\Handlers\Database\Models\ModuleInstanceProgress; use BristolSU\Support\Revision\HasRevisions; -use BristolSU\Support\Eloquent\CascadeRestoreDeletes; use Database\Factories\ModuleInstanceFactory; use Dyrynda\Database\Support\CascadeSoftDeletes; use Illuminate\Database\Eloquent\Builder; diff --git a/src/ModuleInstance/ModuleInstanceGrouping.php b/src/ModuleInstance/ModuleInstanceGrouping.php index 487c374e9..9df33f397 100644 --- a/src/ModuleInstance/ModuleInstanceGrouping.php +++ b/src/ModuleInstance/ModuleInstanceGrouping.php @@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; use Spatie\EloquentSortable\Sortable; use Spatie\EloquentSortable\SortableTrait; -use Illuminate\Database\Eloquent\SoftDeletes; class ModuleInstanceGrouping extends Model implements Sortable { diff --git a/src/ModuleInstance/ModuleInstanceServiceProvider.php b/src/ModuleInstance/ModuleInstanceServiceProvider.php index 01239c190..03e45dca1 100644 --- a/src/ModuleInstance/ModuleInstanceServiceProvider.php +++ b/src/ModuleInstance/ModuleInstanceServiceProvider.php @@ -13,6 +13,7 @@ use BristolSU\Support\ModuleInstance\Contracts\Settings\ModuleSettingsStore as ModuleSettingsStoreContract; use BristolSU\Support\ModuleInstance\Evaluator\ActivityInstanceEvaluator; use BristolSU\Support\ModuleInstance\Evaluator\Evaluation; +use BristolSU\Support\ModuleInstance\Evaluator\ModuleInstanceCacheEvaluator; use BristolSU\Support\ModuleInstance\Evaluator\ModuleInstanceEvaluator; use BristolSU\Support\ModuleInstance\Middleware\InjectModuleInstance; use BristolSU\Support\ModuleInstance\Scheduler\CommandStore; @@ -38,6 +39,9 @@ public function register() $this->app->bind(ModuleInstanceRepositoryContract::class, ModuleInstanceRepository::class); $this->app->bind(ActivityEvaluatorContract::class, ActivityInstanceEvaluator::class); $this->app->bind(ModuleInstanceEvaluatorContract::class, ModuleInstanceEvaluator::class); + $this->app->extend(ModuleInstanceEvaluatorContract::class, function(ModuleInstanceEvaluatorContract $service) { + return new ModuleInstanceCacheEvaluator($service); + }); $this->app->bind(EvaluationContract::class, Evaluation::class); $this->app->bind(ModuleInstanceServiceRepositoryContract::class, ModuleInstanceServiceRepository::class); $this->app->singleton(ModuleSettingsStoreContract::class, ModuleSettingsStore::class); diff --git a/src/Progress/Commands/UpdateProgressForSingleGroupAndActivity.php b/src/Progress/Commands/UpdateProgressForSingleGroupAndActivity.php new file mode 100644 index 000000000..cb5f0a484 --- /dev/null +++ b/src/Progress/Commands/UpdateProgressForSingleGroupAndActivity.php @@ -0,0 +1,59 @@ +activities() as $activity) { + dispatch($this->newJob($activity)); + } + } + + /** + * Get all activities. + * + * @return Collection|Activity[] + */ + private function activities(): Collection + { + $repository = app(Repository::class); + if ($this->argument('activity') !== null) { + return collect([$repository->getById($this->argument('activity'))]); + } + + return $repository->all(); + } + + public function newJob($activity) + { + $activityInstance = app(ActivityInstanceRepository::class)->firstFor($activity->id, 'group', (int) $this->argument('group')); + return new UpdateProgressForGivenActivityInstances([$activityInstance], $this->option('exporter')); + } +} diff --git a/src/Progress/Jobs/UpdateProgress.php b/src/Progress/Jobs/UpdateProgress.php index f20101b45..e3d64d0e0 100644 --- a/src/Progress/Jobs/UpdateProgress.php +++ b/src/Progress/Jobs/UpdateProgress.php @@ -27,19 +27,21 @@ class UpdateProgress implements ShouldQueue /** * @var int */ - const CHUNK_SIZE = 2; + const CHUNK_SIZE = 1; public function __construct(Activity $activity, string $driver = 'database') { $this->activity = $activity; $this->driver = $driver; - $this->onQueue('progress'); + $this->onQueue(sprintf('progress_%s', config('app.env'))); } public function handle(ActivityInstanceRepository $activityInstanceRepository) { - foreach ($activityInstanceRepository->allForActivity($this->activity->id)->chunk(static::CHUNK_SIZE) as $activityInstances) { + $activityInstanceArray = $activityInstanceRepository->allForActivity($this->activity->id)->chunk(static::CHUNK_SIZE); + foreach ($activityInstanceArray as $activityInstances) { UpdateProgressForGivenActivityInstances::dispatch($activityInstances->values()->all(), $this->driver); } } + } diff --git a/src/Progress/Jobs/UpdateProgressForGivenActivityInstances.php b/src/Progress/Jobs/UpdateProgressForGivenActivityInstances.php index e7f3e25ca..23e858166 100644 --- a/src/Progress/Jobs/UpdateProgressForGivenActivityInstances.php +++ b/src/Progress/Jobs/UpdateProgressForGivenActivityInstances.php @@ -7,17 +7,20 @@ use BristolSU\Support\Progress\ProgressExport; use BristolSU\Support\Progress\Snapshot; use Illuminate\Bus\Queueable; +use Illuminate\Cache\Lock; +use Illuminate\Container\Container; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\Middleware\WithoutOverlapping; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; class UpdateProgressForGivenActivityInstances implements ShouldQueue { - use Dispatchable; - use Queueable; - use SerializesModels; + use Dispatchable, Queueable, SerializesModels, InteractsWithQueue; /** * @var ActivityInstance[] @@ -35,7 +38,7 @@ public function __construct(array|Collection $activityInstances, string $driver { $this->activityInstances = $activityInstances; $this->driver = $driver; - $this->onQueue('progress'); + $this->onQueue(sprintf('progress_%s', config('app.env'))); } public function handle(Snapshot $snapshot) @@ -47,8 +50,24 @@ public function handle(Snapshot $snapshot) $filteredProgresses = array_values(array_filter($progresses)); + if ($filteredProgresses) { + Log::info('Ready to export progress with ' . count($filteredProgresses) . ' progresses.'); ProgressExport::driver($this->driver)->saveMany($filteredProgresses); } } + +// public function middleware() +// { +// $middleware = new WithoutOverlapping(expiresAfter: 360); +// /** @var Lock $lock */ +// $lock = Container::getInstance()->make(Cache::class)->lock( +// $middleware->getLockKey($this), 180 +// ); +// Log::info('Accquiring the cache lock: ' . $lock->get(function() { +// Log::info('doing callback'); +// }) ? 'got it' : 'failed'); +// +// return [$middleware]; +// } } diff --git a/src/Progress/ProgressServiceProvider.php b/src/Progress/ProgressServiceProvider.php index c9b88767b..c500fe6bc 100644 --- a/src/Progress/ProgressServiceProvider.php +++ b/src/Progress/ProgressServiceProvider.php @@ -4,6 +4,7 @@ namespace BristolSU\Support\Progress; use BristolSU\Support\Progress\Commands\UpdateProgress; +use BristolSU\Support\Progress\Commands\UpdateProgressForSingleGroupAndActivity; use BristolSU\Support\Progress\Contracts\ProgressUpdateContract; use Illuminate\Support\ServiceProvider; @@ -21,7 +22,8 @@ public function register() public function boot() { $this->commands([ - UpdateProgress::class + UpdateProgress::class, + UpdateProgressForSingleGroupAndActivity::class ]); } } diff --git a/src/Progress/Snapshot.php b/src/Progress/Snapshot.php index b32789a08..3e1d9b3e6 100644 --- a/src/Progress/Snapshot.php +++ b/src/Progress/Snapshot.php @@ -3,14 +3,12 @@ namespace BristolSU\Support\Progress; -use BristolSU\ControlDB\Export\RunExport; use BristolSU\Support\Activity\Activity; use BristolSU\Support\ActivityInstance\ActivityInstance; use BristolSU\Support\ActivityInstance\Contracts\ActivityInstanceRepository; use BristolSU\Support\ModuleInstance\Facade\ModuleInstanceEvaluator; use BristolSU\Support\Progress\Contracts\ProgressUpdateContract; use Carbon\Carbon; -use Illuminate\Support\Facades\Log; class Snapshot { diff --git a/src/SupportServiceProvider.php b/src/SupportServiceProvider.php index 07f4472c7..3c4149414 100644 --- a/src/SupportServiceProvider.php +++ b/src/SupportServiceProvider.php @@ -63,7 +63,7 @@ public function register() $this->registerViews(); $this->registerRoutes(); - $this->app->singleton(Transformer::class, PortalUiKitTransformer::class); + $this->app->singleton(Transformer::class, PortalUiKitTransformer::class); } public function registerProviders() diff --git a/tests/Action/ActionBuilderTest.php b/tests/Action/ActionBuilderTest.php index 506a45f92..ecc1194e9 100644 --- a/tests/Action/ActionBuilderTest.php +++ b/tests/Action/ActionBuilderTest.php @@ -70,6 +70,28 @@ public function build_replaces_event_fields_with_the_correct_value() $builder->build($actionInstance, (new ActionBuilderDummyEvent())->getFields()); } + /** @test */ + public function build_replaces_array_element_event_fields_with_the_correct_value() + { + $app = $this->prophesize(Application::class); + $app->make(ActionBuilderDummyAction::class, ['data' => ['action1' => ['key' => 'field1value with an event field of field1valueFromEvent', 'key2' => ['{{event:name}}' => 'field2valueFromEvent testing']]]])->shouldBeCalled()->willReturn(new ActionBuilderDummyAction([])); + + $actionInstance = ActionInstance::factory()->create([ + 'action' => ActionBuilderDummyAction::class, + 'event' => ActionBuilderDummyEvent::class + ]); + + $actionInstanceField = ActionInstanceField::factory()->create([ + 'action_value' => ['key' => 'field1value with an event field of {{event:field1}}', 'key2' => ['{{event:name}}' => '{{event:field2}} testing']], + 'action_field' => 'action1', + 'action_instance_id' => $actionInstance->id + ]); + + $builder = new ActionBuilder($app->reveal()); + $builder->build($actionInstance, (new ActionBuilderDummyEvent())->getFields()); + } + + /** @test */ public function build_replaces_all_event_fields_with_the_correct_value() { @@ -160,6 +182,46 @@ public function it_sets_the_correct_information_for_history() $builder = new ActionBuilder($app->reveal()); $action = $builder->build($actionInstance, ['key' => 'val1']); } + + /** @test */ + public function it_allows_null_data_in_event_fields(){ + $app = $this->prophesize(Application::class); + $app->make(ActionBuilderDummyAction::class, ['data' => ['action1' => 'field1value with field2valueFromEvent an event field of field1valueFromEvent field1valueFromEvent, not to mention a value which is null.']])->shouldBeCalled()->willReturn(new ActionBuilderDummyAction([])); + + $actionInstance = ActionInstance::factory()->create([ + 'action' => ActionBuilderDummyAction::class, + 'event' => ActionBuilderDummyEvent::class + ]); + + $actionInstanceField = ActionInstanceField::factory()->create([ + 'action_value' => 'field1value with {{event:field2}} an event field of {{event:field1}} {{event:field1}}, not to mention a value {{event:field3}} which is null.', + 'action_field' => 'action1', + 'action_instance_id' => $actionInstance->id + ]); + + $builder = new ActionBuilder($app->reveal()); + $builder->build($actionInstance, array_merge((new ActionBuilderDummyEvent())->getFields(), ['field3' => null])); + } + + /** @test */ + public function it_allows_missing_array_keys_in_event_data(){ + $app = $this->prophesize(Application::class); + $app->make(ActionBuilderDummyAction::class, ['data' => ['action1' => 'field1value with field2valueFromEvent an event field of field1valueFromEvent field1valueFromEvent, not to mention a value {{event:field4}} which should be empty.']])->shouldBeCalled()->willReturn(new ActionBuilderDummyAction([])); + + $actionInstance = ActionInstance::factory()->create([ + 'action' => ActionBuilderDummyAction::class, + 'event' => ActionBuilderDummyEvent::class + ]); + + $actionInstanceField = ActionInstanceField::factory()->create([ + 'action_value' => 'field1value with {{event:field2}} an event field of {{event:field1}} {{event:field1}}, not to mention a value {{event:field4}} which should be empty.', + 'action_field' => 'action1', + 'action_instance_id' => $actionInstance->id + ]); + + $builder = new ActionBuilder($app->reveal()); + $builder->build($actionInstance, (new ActionBuilderDummyEvent())->getFields()); + } } class ActionBuilderDummyAction extends Action diff --git a/tests/Action/ActionInstanceFieldTest.php b/tests/Action/ActionInstanceFieldTest.php index f3e4ad414..338563af0 100644 --- a/tests/Action/ActionInstanceFieldTest.php +++ b/tests/Action/ActionInstanceFieldTest.php @@ -37,4 +37,16 @@ public function revisions_are_saved() $this->assertEquals(1, $actionInstanceField->revisionHistory->first()->old_value); $this->assertEquals(2, $actionInstanceField->revisionHistory->first()->new_value); } + + /** @test */ + public function action_instances_can_support_arrays(){ + $value = ['some' => ['multi' => 'array']]; + $actionInstanceField = ActionInstanceField::factory()->create([ + 'action_value' => $value + ]); + $this->assertEquals($value, $actionInstanceField->action_value); + $this->assertDatabaseHas('action_instance_fields', [ + 'action_value' => json_encode($value) + ]); + } } diff --git a/tests/Progress/Jobs/UpdateProgressTest.php b/tests/Progress/Jobs/UpdateProgressTest.php index c748428ee..b3405e610 100644 --- a/tests/Progress/Jobs/UpdateProgressTest.php +++ b/tests/Progress/Jobs/UpdateProgressTest.php @@ -26,6 +26,6 @@ public function it_dispatches_chunks_of_activity_instances() $job = new UpdateProgress($activity, 'fake-setup'); $job->handle($activityInstanceRepository->reveal()); - Bus::assertDispatchedTimes(UpdateProgressForGivenActivityInstances::class, 5); + Bus::assertDispatchedTimes(UpdateProgressForGivenActivityInstances::class, 42); } }