diff --git a/composer.json b/composer.json index b9b3a2c..b0d9a91 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ } ], "require": { - "php": "^8.0.0", + "php": "^8.1.0", "ext-intl": "~8.0", "twbs/bootstrap": "4.6.0", "yiisoft/yii2": "2.*", diff --git a/composer.lock b/composer.lock index 3db5a45..f131935 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1a78355a6b4833b92796884bd4674b5d", + "content-hash": "c2a9007d78c8c10612d7733a867d2eef", "packages": [ { "name": "bower-asset/bootstrap", @@ -32,7 +32,7 @@ "version": "3.3.11", "source": { "type": "git", - "url": "https://github.com/RobinHerbots/Inputmask.git", + "url": "git@github.com:RobinHerbots/Inputmask.git", "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" }, "dist": { @@ -50,16 +50,16 @@ }, { "name": "bower-asset/jquery", - "version": "3.6.0", + "version": "3.6.1", "source": { "type": "git", "url": "git@github.com:jquery/jquery-dist.git", - "reference": "e786e3d9707ffd9b0dd330ca135b66344dcef85a" + "reference": "3711efedf0ca2e998cd0417324f717f2e0b828ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/e786e3d9707ffd9b0dd330ca135b66344dcef85a", - "reference": "e786e3d9707ffd9b0dd330ca135b66344dcef85a" + "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/3711efedf0ca2e998cd0417324f717f2e0b828ec", + "reference": "3711efedf0ca2e998cd0417324f717f2e0b828ec" }, "type": "bower-asset", "license": [ @@ -71,12 +71,12 @@ "version": "v1.3.2", "source": { "type": "git", - "url": "git@github.com:bestiejs/punycode.js.git", + "url": "https://github.com/mathiasbynens/punycode.js.git", "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", + "url": "https://api.github.com/repos/mathiasbynens/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" }, "type": "bower-asset" @@ -271,32 +271,28 @@ }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "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" @@ -331,7 +327,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.3" }, "funding": [ { @@ -347,20 +343,20 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "egulias/email-validator", - "version": "3.1.2", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697" + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", "shasum": "" }, "require": { @@ -407,7 +403,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.1.2" + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" }, "funding": [ { @@ -415,36 +411,43 @@ "type": "github" } ], - "time": "2021-10-11T09:18:27+00:00" + "time": "2022-06-18T20:57:19+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" }, "type": "library", "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, "files": [ "library/HTMLPurifier.composer.php" ], + "psr-0": { + "HTMLPurifier": "library/" + }, "exclude-from-classmap": [ "/library/HTMLPurifier/Language/" ] @@ -467,40 +470,41 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/master" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" }, - "time": "2020-06-29T00:56:53+00:00" + "time": "2022-09-18T07:06:19+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.3.0", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7008573787b430c1c1f650e3722d9bba59967628" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", - "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7 || ^2.0", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1" + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { "ext-curl": "Required for CURL handler support", @@ -509,36 +513,64 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "7.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, { "name": "Márk Sági-Kazár", "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", @@ -552,7 +584,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -564,28 +596,24 @@ "type": "github" }, { - "url": "https://github.com/alexeyshockov", - "type": "github" - }, - { - "url": "https://github.com/gmponos", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" } ], - "time": "2021-03-23T11:33:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.0", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -601,12 +629,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -640,7 +668,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.0" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -656,20 +684,20 @@ "type": "tidelift" } ], - "time": "2021-10-07T13:05:22+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -683,17 +711,21 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.4-dev" } }, "autoload": { @@ -755,7 +787,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -771,7 +803,7 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "hflabs/dadata", @@ -826,26 +858,26 @@ }, { "name": "imagine/imagine", - "version": "1.2.4", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/php-imagine/Imagine.git", - "reference": "d2e18be6e930ca169e4f921ef73ebfc061bf55d8" + "reference": "ae864f26afbf8859ebd2e2b9df92d77ee175dc13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/d2e18be6e930ca169e4f921ef73ebfc061bf55d8", - "reference": "d2e18be6e930ca169e4f921ef73ebfc061bf55d8", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/ae864f26afbf8859ebd2e2b9df92d77ee175dc13", + "reference": "ae864f26afbf8859ebd2e2b9df92d77ee175dc13", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.5" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.2", "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" }, "suggest": { + "ext-exif": "to read EXIF metadata", "ext-gd": "to use the GD implementation", "ext-gmagick": "to use the Gmagick implementation", "ext-imagick": "to use the Imagick implementation" @@ -853,7 +885,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.7-dev" + "dev-develop": "1.x-dev" } }, "autoload": { @@ -882,35 +914,37 @@ ], "support": { "issues": "https://github.com/php-imagine/Imagine/issues", - "source": "https://github.com/php-imagine/Imagine/tree/1.2.4" + "source": "https://github.com/php-imagine/Imagine/tree/1.3.2" }, - "time": "2020-11-03T22:35:03+00:00" + "time": "2022-04-01T11:58:30+00:00" }, { "name": "maennchen/zipstream-php", - "version": "2.1.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + "reference": "211e9ba1530ea5260b45d90c9ea252f56ec52729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/211e9ba1530ea5260b45d90c9ea252f56ec52729", + "reference": "211e9ba1530ea5260b45d90c9ea252f56ec52729", "shasum": "" }, "require": { "myclabs/php-enum": "^1.5", - "php": ">= 7.1", + "php": "^7.4 || ^8.0", "psr/http-message": "^1.0", "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "ext-zip": "*", - "guzzlehttp/guzzle": ">= 6.3", + "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": ">= 7.5" + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^8.5.8 || ^9.4.2", + "vimeo/psalm": "^4.1" }, "type": "library", "autoload": { @@ -947,7 +981,7 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/master" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.2.1" }, "funding": [ { @@ -955,20 +989,20 @@ "type": "open_collective" } ], - "time": "2020-05-30T13:11:16+00:00" + "time": "2022-05-18T15:52:06+00:00" }, { "name": "markbaker/complex", - "version": "2.0.3", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/MarkBaker/PHPComplex.git", - "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946" + "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/6f724d7e04606fd8adaa4e3bb381c3e9db09c946", - "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/ab8bc271e404909db09ff2d5ffa1e538085c0f22", + "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22", "shasum": "" }, "require": { @@ -984,51 +1018,7 @@ "autoload": { "psr-4": { "Complex\\": "classes/src/" - }, - "files": [ - "classes/src/functions/abs.php", - "classes/src/functions/acos.php", - "classes/src/functions/acosh.php", - "classes/src/functions/acot.php", - "classes/src/functions/acoth.php", - "classes/src/functions/acsc.php", - "classes/src/functions/acsch.php", - "classes/src/functions/argument.php", - "classes/src/functions/asec.php", - "classes/src/functions/asech.php", - "classes/src/functions/asin.php", - "classes/src/functions/asinh.php", - "classes/src/functions/atan.php", - "classes/src/functions/atanh.php", - "classes/src/functions/conjugate.php", - "classes/src/functions/cos.php", - "classes/src/functions/cosh.php", - "classes/src/functions/cot.php", - "classes/src/functions/coth.php", - "classes/src/functions/csc.php", - "classes/src/functions/csch.php", - "classes/src/functions/exp.php", - "classes/src/functions/inverse.php", - "classes/src/functions/ln.php", - "classes/src/functions/log2.php", - "classes/src/functions/log10.php", - "classes/src/functions/negative.php", - "classes/src/functions/pow.php", - "classes/src/functions/rho.php", - "classes/src/functions/sec.php", - "classes/src/functions/sech.php", - "classes/src/functions/sin.php", - "classes/src/functions/sinh.php", - "classes/src/functions/sqrt.php", - "classes/src/functions/tan.php", - "classes/src/functions/tanh.php", - "classes/src/functions/theta.php", - "classes/src/operations/add.php", - "classes/src/operations/subtract.php", - "classes/src/operations/multiply.php", - "classes/src/operations/divideby.php", - "classes/src/operations/divideinto.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1048,22 +1038,22 @@ ], "support": { "issues": "https://github.com/MarkBaker/PHPComplex/issues", - "source": "https://github.com/MarkBaker/PHPComplex/tree/2.0.3" + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.1" }, - "time": "2021-06-02T09:44:11+00:00" + "time": "2021-06-29T15:32:53+00:00" }, { "name": "markbaker/matrix", - "version": "2.1.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/MarkBaker/PHPMatrix.git", - "reference": "174395a901b5ba0925f1d790fa91bab531074b61" + "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/174395a901b5ba0925f1d790fa91bab531074b61", - "reference": "174395a901b5ba0925f1d790fa91bab531074b61", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/c66aefcafb4f6c269510e9ac46b82619a904c576", + "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576", "shasum": "" }, "require": { @@ -1083,25 +1073,7 @@ "autoload": { "psr-4": { "Matrix\\": "classes/src/" - }, - "files": [ - "classes/src/Functions/adjoint.php", - "classes/src/Functions/antidiagonal.php", - "classes/src/Functions/cofactors.php", - "classes/src/Functions/determinant.php", - "classes/src/Functions/diagonal.php", - "classes/src/Functions/identity.php", - "classes/src/Functions/inverse.php", - "classes/src/Functions/minors.php", - "classes/src/Functions/trace.php", - "classes/src/Functions/transpose.php", - "classes/src/Operations/add.php", - "classes/src/Operations/directsum.php", - "classes/src/Operations/subtract.php", - "classes/src/Operations/multiply.php", - "classes/src/Operations/divideby.php", - "classes/src/Operations/divideinto.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1122,9 +1094,9 @@ ], "support": { "issues": "https://github.com/MarkBaker/PHPMatrix/issues", - "source": "https://github.com/MarkBaker/PHPMatrix/tree/2.1.3" + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.0" }, - "time": "2021-05-25T15:42:17+00:00" + "time": "2021-07-01T19:01:15+00:00" }, { "name": "mirzaev/yii2-arangodb", @@ -1271,16 +1243,16 @@ }, { "name": "myclabs/php-enum", - "version": "1.8.3", + "version": "1.8.4", "source": { "type": "git", "url": "https://github.com/myclabs/php-enum.git", - "reference": "b942d263c641ddb5190929ff840c68f78713e937" + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937", - "reference": "b942d263c641ddb5190929ff840c68f78713e937", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", "shasum": "" }, "require": { @@ -1296,7 +1268,10 @@ "autoload": { "psr-4": { "MyCLabs\\Enum\\": "src/" - } + }, + "classmap": [ + "stubs/Stringable.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1315,7 +1290,7 @@ ], "support": { "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.3" + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" }, "funding": [ { @@ -1327,14 +1302,14 @@ "type": "tidelift" } ], - "time": "2021-07-05T08:18:36+00:00" + "time": "2022-08-04T09:53:51+00:00" }, { "name": "npm-asset/jquery", - "version": "3.6.0", + "version": "3.6.1", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz" + "url": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz" }, "type": "npm-asset", "license": [ @@ -1393,16 +1368,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.18.0", + "version": "1.25.2", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c" + "reference": "a317a09e7def49852400a4b3eca4a4b0790ceeb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/418cd304e8e6b417ea79c3b29126a25dc4b1170c", - "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/a317a09e7def49852400a4b3eca4a4b0790ceeb5", + "reference": "a317a09e7def49852400a4b3eca4a4b0790ceeb5", "shasum": "" }, "require": { @@ -1419,33 +1394,34 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", - "ezyang/htmlpurifier": "^4.13", + "ezyang/htmlpurifier": "^4.15", "maennchen/zipstream-php": "^2.1", - "markbaker/complex": "^2.0", - "markbaker/matrix": "^2.0", - "php": "^7.2 || ^8.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.3 || ^8.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0" + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "dompdf/dompdf": "^1.0", - "friendsofphp/php-cs-fixer": "^2.18", - "jpgraph/jpgraph": "^4.0", - "mpdf/mpdf": "^8.0", + "dompdf/dompdf": "^1.0 || ^2.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "10.2.4", + "mpdf/mpdf": "8.1.1", "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^0.12.82", - "phpstan/phpstan-phpunit": "^0.12.18", - "phpunit/phpunit": "^8.5", - "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.3" + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "6.5" }, "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)", - "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)" + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" }, "type": "library", "autoload": { @@ -1491,9 +1467,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.18.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.25.2" }, - "time": "2021-05-31T18:21:15+00:00" + "time": "2022-09-25T17:21:01+00:00" }, { "name": "psr/http-client", @@ -1657,25 +1633,25 @@ }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1690,7 +1666,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -1702,9 +1678,9 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -1752,16 +1728,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { @@ -1773,7 +1749,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.4" }, "suggest": { "ext-intl": "Needed to support internationalized email addresses" @@ -1811,7 +1787,7 @@ ], "support": { "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" }, "funding": [ { @@ -1823,32 +1799,103 @@ "type": "tidelift" } ], - "time": "2021-03-09T12:30:35+00:00" + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.23.0", + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "143f1881e655bebca1312722af8068de235ae5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-iconv": "*" + }, "suggest": { "ext-iconv": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1856,12 +1903,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1887,7 +1934,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -1903,20 +1950,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "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/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -1930,7 +1977,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1938,12 +1985,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1974,7 +2021,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.26.0" }, "funding": [ { @@ -1990,20 +2037,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -2015,7 +2062,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2023,12 +2070,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -2058,7 +2105,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.26.0" }, "funding": [ { @@ -2074,32 +2121,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "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/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2107,12 +2157,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2138,7 +2188,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -2154,20 +2204,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -2176,7 +2226,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2184,12 +2234,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2214,7 +2264,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -2230,7 +2280,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "triagens/arangodb", @@ -2356,16 +2406,16 @@ }, { "name": "yiisoft/yii2", - "version": "2.0.43", + "version": "2.0.46", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "f370955faa3067d9b27879aaf14b0978a805cd59" + "reference": "d73259c3bc886648a6875109f9f09cddeff03708" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/f370955faa3067d9b27879aaf14b0978a805cd59", - "reference": "f370955faa3067d9b27879aaf14b0978a805cd59", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/d73259c3bc886648a6875109f9f09cddeff03708", + "reference": "d73259c3bc886648a6875109f9f09cddeff03708", "shasum": "" }, "require": { @@ -2421,7 +2471,7 @@ { "name": "Carsten Brandt", "email": "mail@cebe.cc", - "homepage": "https://cebe.cc/", + "homepage": "https://www.cebe.cc/", "role": "Core framework development" }, { @@ -2454,11 +2504,11 @@ "yii2" ], "support": { - "forum": "http://www.yiiframework.com/forum/", - "irc": "irc://irc.libera.chat:6697/yii", + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", "issues": "https://github.com/yiisoft/yii2/issues?state=open", "source": "https://github.com/yiisoft/yii2", - "wiki": "http://www.yiiframework.com/wiki/" + "wiki": "https://www.yiiframework.com/wiki" }, "funding": [ { @@ -2474,7 +2524,7 @@ "type": "tidelift" } ], - "time": "2021-08-09T17:38:43+00:00" + "time": "2022-08-18T22:18:45+00:00" }, { "name": "yiisoft/yii2-bootstrap", @@ -2648,16 +2698,16 @@ }, { "name": "yiisoft/yii2-imagine", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-imagine.git", - "reference": "b103b1b1deb786d4d5fe955898ec866dbee5c1b4" + "reference": "7ec4332dc25893aec5a7cf084722b162b3a4d55d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/b103b1b1deb786d4d5fe955898ec866dbee5c1b4", - "reference": "b103b1b1deb786d4d5fe955898ec866dbee5c1b4", + "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/7ec4332dc25893aec5a7cf084722b162b3a4d55d", + "reference": "7ec4332dc25893aec5a7cf084722b162b3a4d55d", "shasum": "" }, "require": { @@ -2727,30 +2777,44 @@ "type": "tidelift" } ], - "time": "2020-12-23T17:16:36+00:00" + "time": "2022-09-04T10:06:40+00:00" }, { "name": "yiisoft/yii2-swiftmailer", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-swiftmailer.git", - "reference": "09659a55959f9e64b8178d842b64a9ffae42b994" + "reference": "7b7ec871b4a63c0abbcd10e1ee3fb5be22f8b340" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/09659a55959f9e64b8178d842b64a9ffae42b994", - "reference": "09659a55959f9e64b8178d842b64a9ffae42b994", + "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/7b7ec871b4a63c0abbcd10e1ee3fb5be22f8b340", + "reference": "7b7ec871b4a63c0abbcd10e1ee3fb5be22f8b340", "shasum": "" }, "require": { "swiftmailer/swiftmailer": "~6.0", "yiisoft/yii2": ">=2.0.4" }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34" + }, "type": "yii2-extension", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" + }, + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + } } }, "autoload": { @@ -2784,775 +2848,54 @@ "source": "https://github.com/yiisoft/yii2-swiftmailer", "wiki": "http://www.yiiframework.com/wiki/" }, - "time": "2018-09-23T22:00:47+00:00" + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-swiftmailer", + "type": "tidelift" + } + ], + "time": "2021-12-30T08:48:48+00:00" } ], "packages-dev": [ - { - "name": "behat/gherkin", - "version": "v4.8.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", - "shasum": "" - }, - "require": { - "php": "~7.2|~8.0" - }, - "require-dev": { - "cucumber/cucumber": "dev-gherkin-16.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/phpunit-bridge": "~3|~4|~5", - "symfony/yaml": "~3|~4|~5" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Gherkin DSL parser for PHP", - "homepage": "http://behat.org/", - "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "support": { - "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" - }, - "time": "2021-02-04T12:44:21+00:00" - }, - { - "name": "codeception/codeception", - "version": "4.1.22", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", - "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", - "shasum": "" - }, - "require": { - "behat/gherkin": "^4.4.0", - "codeception/lib-asserts": "^1.0", - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0", - "codeception/stub": "^2.0 | ^3.0", - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "guzzlehttp/psr7": "^1.4 | ^2.0", - "php": ">=5.6.0 <9.0", - "symfony/console": ">=2.7 <6.0", - "symfony/css-selector": ">=2.7 <6.0", - "symfony/event-dispatcher": ">=2.7 <6.0", - "symfony/finder": ">=2.7 <6.0", - "symfony/yaml": ">=2.7 <6.0" - }, - "require-dev": { - "codeception/module-asserts": "1.*@dev", - "codeception/module-cli": "1.*@dev", - "codeception/module-db": "1.*@dev", - "codeception/module-filesystem": "1.*@dev", - "codeception/module-phpbrowser": "1.*@dev", - "codeception/specify": "~0.3", - "codeception/util-universalframework": "*@dev", - "monolog/monolog": "~1.8", - "squizlabs/php_codesniffer": "~2.0", - "symfony/process": ">=2.7 <6.0", - "vlucas/phpdotenv": "^2.0 | ^3.0 | ^4.0 | ^5.0" - }, - "suggest": { - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "hoa/console": "For interactive console functionality", - "stecman/symfony-console-completion": "For BASH autocompletion", - "symfony/phpunit-bridge": "For phpunit-bridge support" - }, - "bin": [ - "codecept" - ], - "type": "library", - "extra": { - "branch-alias": [] - }, - "autoload": { - "psr-4": { - "Codeception\\": "src/Codeception", - "Codeception\\Extension\\": "ext" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - } - ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", - "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" - ], - "support": { - "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/4.1.22" - }, - "funding": [ - { - "url": "https://opencollective.com/codeception", - "type": "open_collective" - } - ], - "time": "2021-08-06T17:15:34+00:00" - }, - { - "name": "codeception/lib-asserts", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/184231d5eab66bc69afd6b9429344d80c67a33b6", - "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6", - "shasum": "" - }, - "require": { - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3 | ^9.0", - "ext-dom": "*", - "php": ">=5.6.0 <9.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - }, - { - "name": "Gintautas Miselis" - }, - { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" - } - ], - "description": "Assertion methods used by Codeception core and Asserts module", - "homepage": "https://codeception.com/", - "keywords": [ - "codeception" - ], - "support": { - "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/1.13.2" - }, - "time": "2020-10-21T16:26:20+00:00" - }, - { - "name": "codeception/lib-innerbrowser", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/Codeception/lib-innerbrowser.git", - "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2", - "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2", - "shasum": "" - }, - "require": { - "codeception/codeception": "4.*@dev", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": ">=5.6.0 <9.0", - "symfony/browser-kit": ">=2.7 <6.0", - "symfony/dom-crawler": ">=2.7 <6.0" - }, - "conflict": { - "codeception/codeception": "<4.0" - }, - "require-dev": { - "codeception/util-universalframework": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - }, - { - "name": "Gintautas Miselis" - } - ], - "description": "Parent library for all Codeception framework modules and PhpBrowser", - "homepage": "https://codeception.com/", - "keywords": [ - "codeception" - ], - "support": { - "issues": "https://github.com/Codeception/lib-innerbrowser/issues", - "source": "https://github.com/Codeception/lib-innerbrowser/tree/1.5.1" - }, - "time": "2021-08-30T15:21:42+00:00" - }, - { - "name": "codeception/module-asserts", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/Codeception/module-asserts.git", - "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/59374f2fef0cabb9e8ddb53277e85cdca74328de", - "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de", - "shasum": "" - }, - "require": { - "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^1.13.1", - "php": ">=5.6.0 <9.0" - }, - "conflict": { - "codeception/codeception": "<4.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk" - }, - { - "name": "Gintautas Miselis" - }, - { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" - } - ], - "description": "Codeception module containing various assertions", - "homepage": "https://codeception.com/", - "keywords": [ - "assertions", - "asserts", - "codeception" - ], - "support": { - "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/1.3.1" - }, - "time": "2020-10-21T16:48:15+00:00" - }, - { - "name": "codeception/module-filesystem", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/Codeception/module-filesystem.git", - "reference": "781be167fb1557bfc9b61e0a4eac60a32c534ec1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-filesystem/zipball/781be167fb1557bfc9b61e0a4eac60a32c534ec1", - "reference": "781be167fb1557bfc9b61e0a4eac60a32c534ec1", - "shasum": "" - }, - "require": { - "codeception/codeception": "^4.0", - "php": ">=5.6.0 <9.0", - "symfony/finder": ">=2.7 <6.0" - }, - "conflict": { - "codeception/codeception": "<4.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk" - }, - { - "name": "Gintautas Miselis" - } - ], - "description": "Codeception module for testing local filesystem", - "homepage": "http://codeception.com/", - "keywords": [ - "codeception", - "filesystem" - ], - "support": { - "issues": "https://github.com/Codeception/module-filesystem/issues", - "source": "https://github.com/Codeception/module-filesystem/tree/1.0.3" - }, - "time": "2020-10-24T14:46:40+00:00" - }, - { - "name": "codeception/module-webdriver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Codeception/module-webdriver.git", - "reference": "baa18b7bf70aa024012f967b5ce5021e1faa9151" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-webdriver/zipball/baa18b7bf70aa024012f967b5ce5021e1faa9151", - "reference": "baa18b7bf70aa024012f967b5ce5021e1faa9151", - "shasum": "" - }, - "require": { - "codeception/codeception": "^4.0", - "php": ">=5.6.0 <9.0", - "php-webdriver/webdriver": "^1.8.0" - }, - "suggest": { - "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk" - }, - { - "name": "Gintautas Miselis" - }, - { - "name": "Zaahid Bateson" - } - ], - "description": "WebDriver module for Codeception", - "homepage": "http://codeception.com/", - "keywords": [ - "acceptance-testing", - "browser-testing", - "codeception" - ], - "support": { - "issues": "https://github.com/Codeception/module-webdriver/issues", - "source": "https://github.com/Codeception/module-webdriver/tree/1.4.0" - }, - "time": "2021-09-02T12:01:02+00:00" - }, - { - "name": "codeception/module-yii2", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/Codeception/module-yii2.git", - "reference": "09853feb15ad5e80e472c6881793a22f273a9921" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-yii2/zipball/09853feb15ad5e80e472c6881793a22f273a9921", - "reference": "09853feb15ad5e80e472c6881793a22f273a9921", - "shasum": "" - }, - "require": { - "codeception/codeception": "^4.0", - "codeception/lib-innerbrowser": "^1.0", - "php": ">=5.6.0 <8.1" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander Makarov" - }, - { - "name": "Sam Mouse" - }, - { - "name": "Michael Bodnarchuk" - } - ], - "description": "Codeception module for Yii2 framework", - "homepage": "http://codeception.com/", - "keywords": [ - "codeception", - "yii2" - ], - "support": { - "issues": "https://github.com/Codeception/module-yii2/issues", - "source": "https://github.com/Codeception/module-yii2/tree/1.1.3" - }, - "time": "2021-05-24T20:05:32+00:00" - }, - { - "name": "codeception/phpunit-wrapper", - "version": "9.0.6", - "source": { - "type": "git", - "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/b0c06abb3181eedca690170f7ed0fd26a70bfacc", - "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "phpunit/phpunit": "^9.0" - }, - "require-dev": { - "codeception/specify": "*", - "consolidation/robo": "^3.0.0-alpha3", - "vlucas/phpdotenv": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Codeception\\PHPUnit\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Davert", - "email": "davert.php@resend.cc" - }, - { - "name": "Naktibalda" - } - ], - "description": "PHPUnit classes used by Codeception", - "support": { - "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.6" - }, - "time": "2020-12-28T13:59:47+00:00" - }, - { - "name": "codeception/specify", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Specify.git", - "reference": "17ae6d4d6cb201ef5461f6587ecfcff8c177f854" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Specify/zipball/17ae6d4d6cb201ef5461f6587ecfcff8c177f854", - "reference": "17ae6d4d6cb201ef5461f6587ecfcff8c177f854", - "shasum": "" - }, - "require": { - "myclabs/deep-copy": "~1.1", - "php": ">=7.1.0", - "phpunit/phpunit": ">=7.0 <10.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Codeception\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@codeception.com" - }, - { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" - } - ], - "description": "BDD code blocks for PHPUnit and Codeception", - "support": { - "issues": "https://github.com/Codeception/Specify/issues", - "source": "https://github.com/Codeception/Specify/tree/1.4.0" - }, - "time": "2020-08-27T20:17:29+00:00" - }, - { - "name": "codeception/stub", - "version": "3.7.0", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Stub.git", - "reference": "468dd5fe659f131fc997f5196aad87512f9b1304" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/468dd5fe659f131fc997f5196aad87512f9b1304", - "reference": "468dd5fe659f131fc997f5196aad87512f9b1304", - "shasum": "" - }, - "require": { - "phpunit/phpunit": "^8.4 | ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Codeception\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", - "support": { - "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/3.7.0" - }, - "time": "2020-07-03T15:54:43+00:00" - }, - { - "name": "codeception/verify", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Verify.git", - "reference": "1cdac1867c33801ae8e4833015153766ef403c92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Verify/zipball/1cdac1867c33801ae8e4833015153766ef403c92", - "reference": "1cdac1867c33801ae8e4833015153766ef403c92", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "autoload": { - "files": [ - "src/Codeception/bootstrap.php" - ], - "psr-4": { - "Codeception\\": "src\\Codeception" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@codeception.com" - }, - { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" - } - ], - "description": "BDD assertion library for PHPUnit", - "support": { - "issues": "https://github.com/Codeception/Verify/issues", - "source": "https://github.com/Codeception/Verify/tree/2.1.1" - }, - "time": "2020-12-18T16:18:31+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, { "name": "fakerphp/faker", - "version": "v1.16.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "271d384d216e5e5c468a6b28feedf95d49f83b35" + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/271d384d216e5e5c468a6b28feedf95d49f83b35", - "reference": "271d384d216e5e5c468a6b28feedf95d49f83b35", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", "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.", @@ -3561,7 +2904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.16-dev" + "dev-main": "v1.20-dev" } }, "autoload": { @@ -3586,524 +2929,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.20.0" }, - "time": "2021-09-06T14:53:37+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.13.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" - }, - "time": "2021-09-20T12:20:58+00:00" - }, - { - "name": "opis/closure", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" - }, - "time": "2021-04-09T13:42:10+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "php-webdriver/webdriver", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/da16e39968f8dd5cfb7d07eef91dc2b731c69880", - "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.12", - "symfony/process": "^2.8 || ^3.1 || ^4.0 || ^5.0" - }, - "replace": { - "facebook/webdriver": "*" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "ondram/ci-detector": "^2.1 || ^3.5 || ^4.0", - "php-coveralls/php-coveralls": "^2.4", - "php-mock/php-mock-phpunit": "^1.1 || ^2.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^5.7 || ^7 || ^8 || ^9", - "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - }, - "files": [ - "lib/Exception/TimeoutException.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", - "homepage": "https://github.com/php-webdriver/php-webdriver", - "keywords": [ - "Chromedriver", - "geckodriver", - "php", - "selenium", - "webdriver" - ], - "support": { - "issues": "https://github.com/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.11.1" - }, - "time": "2021-05-21T15:12:49+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" - }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-07-20T13:12:54+00:00" }, { "name": "phpspec/php-diff", @@ -4146,512 +2974,29 @@ }, "time": "2020-09-18T13:47:07+00:00" }, - { - "name": "phpspec/prophecy", - "version": "1.14.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" - }, - "time": "2021-09-10T09:02:12+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.12.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-09-17T05:39:03+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-09-25T07:38:51+00:00" - }, { "name": "psr/container", - "version": "1.1.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -4678,2375 +3023,26 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-11T13:31:12+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-15T12:49:02+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/browser-kit", - "version": "v5.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "c1e3f64fcc631c96e2c5843b666db66679ced11c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c1e3f64fcc631c96e2c5843b666db66679ced11c", - "reference": "c1e3f64fcc631c96e2c5843b666db66679ced11c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "symfony/css-selector": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0" - }, - "suggest": { - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:40:44+00:00" - }, - { - "name": "symfony/console", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.3.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-25T20:02:16+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v5.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:38:00+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" - }, - { - "name": "symfony/dom-crawler", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c7eef3a60ccfdd8eafe07f81652e769ac9c7146c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c7eef3a60ccfdd8eafe07f81652e769ac9c7146c", - "reference": "c7eef3a60ccfdd8eafe07f81652e769ac9c7146c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "masterminds/html5": "<2.6" - }, - "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases DOM navigation for HTML and XML documents", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.3.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-29T19:32:13+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "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" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides 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.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-04T21:20:46+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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 dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-04T21:20:46+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-28T13:41:28+00:00" - }, - { - "name": "symfony/process", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967", - "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.3.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-04T21:20:46+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-04-01T10:43:52+00:00" - }, - { - "name": "symfony/string", - "version": "v5.3.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.3.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-08-26T08:00:08+00:00" - }, - { - "name": "symfony/yaml", - "version": "v5.3.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.6" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-29T06:20:01+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "yiisoft/yii2-debug", - "version": "2.1.18", + "version": "2.1.21", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "45bc5d2ef4e3b0ef6f638190d42f04a77ab1df6c" + "reference": "fa9fa02e242c1b744eb68045ee8e9d698134836d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/45bc5d2ef4e3b0ef6f638190d42f04a77ab1df6c", - "reference": "45bc5d2ef4e3b0ef6f638190d42f04a77ab1df6c", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/fa9fa02e242c1b744eb68045ee8e9d698134836d", + "reference": "fa9fa02e242c1b744eb68045ee8e9d698134836d", "shasum": "" }, "require": { "ext-mbstring": "*", - "opis/closure": "^3.3", "php": ">=5.4", "yiisoft/yii2": "~2.0.13" }, @@ -7068,7 +3064,8 @@ }, "phpunit/phpunit": { "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", - "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch", + "Fix PHP 8.1 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php81.patch" } } }, @@ -7118,7 +3115,7 @@ "type": "tidelift" } ], - "time": "2021-08-09T20:57:58+00:00" + "time": "2022-09-06T17:40:08+00:00" }, { "name": "yiisoft/yii2-faker", @@ -7204,16 +3201,16 @@ }, { "name": "yiisoft/yii2-gii", - "version": "2.2.3", + "version": "2.2.5", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-gii.git", - "reference": "eb14e9cc4c9d80a59e1252e5200600b42aa2bfbf" + "reference": "e2f2dcf0f16713e678df6ba70362c99a215a8f72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/eb14e9cc4c9d80a59e1252e5200600b42aa2bfbf", - "reference": "eb14e9cc4c9d80a59e1252e5200600b42aa2bfbf", + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/e2f2dcf0f16713e678df6ba70362c99a215a8f72", + "reference": "e2f2dcf0f16713e678df6ba70362c99a215a8f72", "shasum": "" }, "require": { @@ -7283,7 +3280,7 @@ "type": "tidelift" } ], - "time": "2021-08-09T21:07:34+00:00" + "time": "2022-09-04T10:00:25+00:00" } ], "aliases": [], diff --git a/mirzaev/skillparts/system/commands/DellinController.php b/mirzaev/skillparts/system/commands/DellinController.php index b5248c6..a3cc6c6 100644 --- a/mirzaev/skillparts/system/commands/DellinController.php +++ b/mirzaev/skillparts/system/commands/DellinController.php @@ -24,9 +24,9 @@ class DellinController extends Controller /** * Импортировать терминалы из ДеловыеЛинии */ - public function actionImportTerminals() + public function actionImportTerminals(?int $account = null) { - if (Dellin::importTerminals()) { + if (Dellin::importTerminals($account)) { return ExitCode::OK; } diff --git a/mirzaev/skillparts/system/commands/ImportController.php b/mirzaev/skillparts/system/commands/ImportController.php new file mode 100644 index 0000000..8290142 --- /dev/null +++ b/mirzaev/skillparts/system/commands/ImportController.php @@ -0,0 +1,63 @@ + 0) { + // Найдены файлы + + foreach ($files as $file) { + // Перебор файлов для загрузки + + // Загрузка в базу данных + Supply::loadExcel($file); + } + } + } catch (exception $e) { + return ExitCode::UNSPECIFIED_ERROR; + } + + return ExitCode::OK; + } +} diff --git a/mirzaev/skillparts/system/commands/SuppliesController.php b/mirzaev/skillparts/system/commands/SuppliesController.php new file mode 100644 index 0000000..eceb163 --- /dev/null +++ b/mirzaev/skillparts/system/commands/SuppliesController.php @@ -0,0 +1,24 @@ + true, 'actions' => [ 'file', - 'data' + 'data', + 'restore', + 'generate-password' ] ], [ @@ -38,7 +41,10 @@ class AccountController extends Controller ], [ 'allow' => true, - 'actions' => ['accept', 'decline'], + 'actions' => [ + 'read', + 'accept', + 'decline'], 'matchCallback' => function ($rule, $action): bool { if ( !yii::$app->user->isGuest @@ -352,4 +358,127 @@ class AccountController extends Controller ]; } } + + /** + * Восстановление пароля + * + * @return string + */ + public function actionRestore() + { + // Инициализация + $model = new AccountForm(yii::$app->request->post('AccountForm')); + $type = yii::$app->request->post('type') ?? yii::$app->request->get('type'); + $target = yii::$app->request->post('target') ?? yii::$app->request->get('target'); + + // Фильтрация + $target = match ($target) { + 'panel' => 'panel', + 'main' => 'main', + default => 'main' + }; + + // Рендер для всплывающей панели + $panel = $target === 'panel'; + + if (yii::$app->request->isPost) { + // AJAX-POST-запрос + + // Настройка кода ответа + yii::$app->response->format = Response::FORMAT_JSON; + + if (yii::$app->user->isGuest || $model->validate()) { + // Аккаунт не аутентифицирован и проверка пройдена + + // Отправка запроса на генерацию пароля и запись ответа + $return = [ + 'status' => Account::restoreSend($model->mail), + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + return $return; + } else { + // Аккаунт аутентифицирован + + // Настройка кода ответа + yii::$app->response->statusCode = 400; + + return [ + 'redirect' => '/', + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } + } + } + + /** + * Генерация нового пароля + * + * @return string + */ + public function actionGeneratePassword(string $id, string $key) + { + if ($account = Account::searchById(Account::collectionName() . "/$id")) { + // Найден аккаунт + + if ($account->chpk === $key) { + // Ключи совпадают + + // Инициализация буфера пароля + $old = $account->pswd; + + // Генерация пароля + $account->restoreGenerate(); + + if ($account->pswd !== $old) { + // Успешно сгенерирован новый пароль + + // Инициализация формы аутентификации + $form = new AccountForm; + + // Запись параметров + $form->mail = $account->mail; + $form->pswd = $account->pswd; + + // Аутентификация + $form->authentication(); + } + } + } + + // Перенаправление на главную страницу + $this->redirect('/'); + } + + /** + * Генерация нового пароля + * + * @return string + */ + public function actionRead(int $page = 1): string|array|null + { + if (yii::$app->request->isPost) { + // POST-запрос + + // Инициализация входных параметров + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 20; + $order = yii::$app->request->post('order') ?? yii::$app->request->get('order') ?? ['DESC']; + + // Инициализация cookie + $cookies = yii::$app->response->cookies; + + // Чтение аккаунтов + $accounts = Account::read(limit: $amount, page: $page, order: $order); + + // Запись формата ответа + yii::$app->response->format = Response::FORMAT_JSON; + + return [ + 'accounts' => $this->renderPartial('/account/list', compact('accounts', 'amount', 'page')), + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } + + return false; + } } diff --git a/mirzaev/skillparts/system/controllers/AuthenticationController.php b/mirzaev/skillparts/system/controllers/AuthenticationController.php index e60dbb9..8e0a56f 100644 --- a/mirzaev/skillparts/system/controllers/AuthenticationController.php +++ b/mirzaev/skillparts/system/controllers/AuthenticationController.php @@ -4,6 +4,7 @@ namespace app\controllers; use app\models\AccountForm; use app\models\Order; +use app\models\Notification; use yii; use yii\web\Controller; use yii\web\Response; @@ -61,6 +62,9 @@ class AuthenticationController extends Controller if (!yii::$app->user->isGuest || $model->authentication()) { // Аккаунт аутентифицирован + // Отправка уведомления + Notification::_write('Вы аутентифицированы с устройства ' . $_SERVER['HTTP_USER_AGENT'] . ' ' . $_SERVER['REMOTE_ADDR'], true, yii::$app->user->identity->_key, Notification::TYPE_NOTICE); + // Инициализация $notifications_button = $this->renderPartial('/notification/button'); $notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]); diff --git a/mirzaev/skillparts/system/controllers/CartController.php b/mirzaev/skillparts/system/controllers/CartController.php index ef82ecb..5f76c12 100644 --- a/mirzaev/skillparts/system/controllers/CartController.php +++ b/mirzaev/skillparts/system/controllers/CartController.php @@ -88,7 +88,6 @@ class CartController extends Controller // Поиск корзины (текущего заказа) $data = Order::searchSmart()[0] ?? null; - if (empty($data['order'])) { // Корзина не инициализирована diff --git a/mirzaev/skillparts/system/controllers/OfferController.php b/mirzaev/skillparts/system/controllers/OfferController.php index 9cf748b..47e713c 100644 --- a/mirzaev/skillparts/system/controllers/OfferController.php +++ b/mirzaev/skillparts/system/controllers/OfferController.php @@ -18,10 +18,14 @@ class OfferController extends Controller 'access' => [ 'class' => AccessControl::class, 'rules' => [ + [ + 'allow' => true, + 'actions' => ['index', 'suppliers'], + ], [ 'allow' => true, 'roles' => ['@'], - 'actions' => ['index', 'suppliers', 'accept', 'accept-suppliers'] + 'actions' => ['accept', 'accept-suppliers'] ], [ 'allow' => false, diff --git a/mirzaev/skillparts/system/controllers/OrderController.php b/mirzaev/skillparts/system/controllers/OrderController.php index 728ae1f..40c8c2a 100644 --- a/mirzaev/skillparts/system/controllers/OrderController.php +++ b/mirzaev/skillparts/system/controllers/OrderController.php @@ -56,6 +56,21 @@ class OrderController extends Controller 'supply-edit-comm' ] ], + [ + 'allow' => true, + 'actions' => [ + 'list' + ], + 'matchCallback' => function ($rule, $action): bool { + if ( + !yii::$app->user->isGuest + && (yii::$app->user->identity->type === 'administrator' + || yii::$app->user->identity->type === 'moderator') + ) return true; + + return false; + } + ], [ 'allow' => false, 'roles' => ['?'], @@ -283,51 +298,20 @@ class OrderController extends Controller to: $to, search: $search ); - - // Инициализация панели модератора заказов - if (!yii::$app->user->isGuest && Account::isMinimalAuthorized($account)) { - // Имеет доступ пользователь - - // Инициализация заказов для модератора - $moderator_data = Order::searchSmart(account: '@all', stts: '@all', limit: 10, page: 1, supplies: true); - } else { - // Не имеет доступ пользователь - - // Инициализация заглушки - $moderator_data = null; - } } else if ($window === 'orders_panel_moderation') { // Обработка панели модерации заказов // Инициализация заказов $data = Order::searchSmart( - stts: '@all', + stts: $stts, limit: 10, page: 1, - supplies: true + supplies: true, + from: $from, + to: $to, + search: $search ); - // Инициализация панели модератора заказов - if (!yii::$app->user->isGuest && Account::isMinimalAuthorized($account)) { - // Имеет доступ пользователь - - // Инициализация заказов для модератора - $moderator_data = Order::searchSmart( - account: '@all', - stts: $stts, - limit: 10, - page: 1, - supplies: true, - from: $from, - to: $to, - search: $search - ); - } else { - // Не имеет доступ пользователь - - // Инициализация заглушки - $moderator_data = null; - } } else { // Запрошено неизвестное окно } @@ -343,7 +327,7 @@ class OrderController extends Controller yii::$app->response->format = Response::FORMAT_JSON; return [ - 'main' => $this->renderPartial('/orders/index', compact('data', 'moderator_data', 'account', 'search', 'from', 'to', 'window') + 'main' => $this->renderPartial('/orders/index', compact('data', 'account', 'search', 'from', 'to', 'window') + ['panel' => $this->renderPartial('/orders/search/panel', compact('account') + ['data' => $data] ?? null)]), 'title' => 'Заказы', 'redirect' => '/orders', @@ -351,7 +335,7 @@ class OrderController extends Controller ]; } - return $this->render('/orders/index', compact('data', 'moderator_data', 'account')); + return $this->render('/orders/index', compact('data', 'account')); } /** @@ -822,6 +806,60 @@ class OrderController extends Controller } } + /** + * Список заказов для модерации + * + * @param string $catn Артикул + */ + public function actionList(int $page): array|string|null + { + if (!yii::$app->user->isGuest && Account::isMinimalAuthorized()) { + // Авторизован пользователь + + // Инициализация буфера ответа + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + // Инициализация количества + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 8; + + if ($moderator_data = Order::searchSmart( + account: '@all', + stts: '@all', + limit: (int) $amount, + page: $page, + supplies: true + )) { + // Найдены заказы + + // Генерация списка + $list = trim($this->renderPartial('/orders/moderation', compact('moderator_data'))); + + if (!empty($list)) $return['list'] = $list; + } else { + // Не найдены заказы + + // Запись кода ответа + yii::$app->response->statusCode = 500; + + // Запись в буфер возврата + // $return['alert'] = "Не удалось найти заказы для генерации списка"; + } + + if (yii::$app->request->isPost) { + // POST-запрос + + yii::$app->response->format = Response::FORMAT_JSON; + + return $return; + } + } + + // Переадресация на главную страницу + return $this->redirect("/"); + } + /** * Чтение инстанции поставки в заказе (order_edge_supply) * diff --git a/mirzaev/skillparts/system/controllers/ProductController.php b/mirzaev/skillparts/system/controllers/ProductController.php index 2db8ed4..0664a88 100644 --- a/mirzaev/skillparts/system/controllers/ProductController.php +++ b/mirzaev/skillparts/system/controllers/ProductController.php @@ -33,6 +33,7 @@ class ProductController extends Controller 'allow' => true, 'actions' => [ 'index', + 'analogs' ] ], [ @@ -81,6 +82,36 @@ class ProductController extends Controller ]; } + public function accessDenied() + { + // Инициализация + $cookies = yii::$app->response->cookies; + + // Запись cookie с редиректом, который выполнится после авторизации + $cookies->add(new Cookie([ + 'name' => 'redirect', + 'value' => yii::$app->request->pathInfo + ])); + + if (Yii::$app->request->isPost) { + // POST-запрос + + // Настройка + Yii::$app->response->format = Response::FORMAT_JSON; + + // Генерация ответа + Yii::$app->response->content = json_encode([ + 'main' => $this->renderPartial('/account/index'), + 'redirect' => yii::$app->request->pathInfo, + '_csrf' => Yii::$app->request->getCsrfToken() + ]); + } else if (Yii::$app->request->isGet) { + // GET-запрос + + $this->redirect('/authentication'); + } + } + public function actionIndex(string $prod, string $catn): array|string|null { if ($model = Product::searchByCatnAndProd($catn, $prod)) { @@ -210,34 +241,34 @@ class ProductController extends Controller /** * Чтение товаров * - * @param string $stts Статус + * @param string $type Тип + * @param int $page Страница * * @return string|array|null */ - public function actionRead(string $stts = 'all'): string|array|null + public function actionRead(string $type = 'all', int $page = 1): string|array|null { if (yii::$app->request->isPost) { // POST-запрос // Инициализация входных параметров - $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 50; + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 20; $order = yii::$app->request->post('order') ?? yii::$app->request->get('order') ?? ['DESC']; // Инициализация cookie $cookies = yii::$app->response->cookies; - // Инициализация аккаунта $account ?? $account = Account::initAccount(); // Чтение товаров - $products = Product::read(where: $stts === 'all' || $stts === 'inactive' ? [] : ['stts' => $stts], limit: $amount, order: $order); + $products = Product::read(where: $type === 'all' || $type === 'inactive' ? [] : ['stts' => $type], limit: $amount, page: $page, order: $order); // Запись формата ответа yii::$app->response->format = Response::FORMAT_JSON; return [ - 'products' => $this->renderPartial('/product/list', compact('account', 'products')), + 'products' => $this->renderPartial('/product/list', compact('account', 'products', 'amount', 'page')), '_csrf' => yii::$app->request->getCsrfToken() ]; } @@ -250,15 +281,15 @@ class ProductController extends Controller * * @param string $catn Артикул */ - public function actionDelete(string $catn, string $prod): array|string|null + public function actionDelete(string $prod, string $catn): array|string|null { // Инициализация буфера ответа $return = [ '_csrf' => yii::$app->request->getCsrfToken() ]; - if (empty($catn)) { - // Не получен артикул + if (empty($catn) || empty($prod)) { + // Не получен артикул или производитель // Запись кода ответа yii::$app->response->statusCode = 500; @@ -355,8 +386,8 @@ class ProductController extends Controller '_csrf' => yii::$app->request->getCsrfToken() ]; - if (empty($catn)) { - // Не получен артикул + if (empty($catn) || empty($prod)) { + // Не получен артикул или производитель // Запись кода ответа yii::$app->response->statusCode = 500; @@ -368,49 +399,52 @@ class ProductController extends Controller if ($from = Product::searchByCatnAndProd($catn, $prod)) { // Найден товар - if ($target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn')) { - // Инициализирован артикул товара для связи + if (($target_catn = yii::$app->request->post('catn') ?? yii::$app->request->get('catn')) && + $target_prod = yii::$app->request->post('prod') ?? yii::$app->request->get('prod')) { + // Инициализирован артикул и производитель товара для связи - if ($to = Product::searchByCatn($target)) { - // Существуют товары к которым планируется соединение - } else { - // Не существуют товары к которым планируется соединение + foreach (explode(',', $target_catn, 50) as $analog) { + // Перебор аналогов - // Инициализация товара - if ($to = [Product::writeEmpty((string) $target, $from->prod)]) { - // Удалось записать товар + foreach (explode('/', $analog, 50) as $value) { + // Перебор аналогов (дополнительная фильтрация) - // Запись в буфер возврата - $return['alert'] = "Записан новый товар: $target ($from->prod)"; - } else { - // Не удалось записать товар + if ($to = Product::searchByCatnAndProd($value, $target_prod)) { + // Существуют товары к которым планируется соединение + } else { + // Не существуют товары к которым планируется соединение - // Запись кода ответа - yii::$app->response->statusCode = 500; + // Инициализация товара + if ($to = [Product::writeEmpty($value, $target_prod, true)]) { + // Удалось записать товар + } else { + // Не удалось записать товар - // Запись в буфер возврата - $return['alert'] = "Не удалось записать новый товар: $target ($from->prod)"; + // Запись кода ответа + yii::$app->response->statusCode = 500; - // Переход в конец алгоритма - goto end; + // Запись в буфер возврата + $return['alert'] = "Не удалось записать новый товар: $value ($target_prod)"; + + // Переход в конец алгоритма + goto end; + } + } + + // Инициализация количества созданных рёбер + $writed = 0; + + foreach (is_array($to) ? $to : [$to] as $product) { + // Перебор товаров для записи связи: ТОВАР -> ТОВАР + + // Универсализация данных (приведение к объекту) + if (is_array($product) && !$product = Product::searchByCatnAndProd($product['catn'], $product['prod'])) continue; + + // Запись в группу + if ($from->connect($product)) $writed++; + } } } - - // Инициализация количества созданных рёбер - $writed = 0; - - foreach ($to as $product) { - // Перебор товаров для записи связи: ТОВАР -> ТОВАР - - // Универсализация данных (приведение к объекту) - if (is_array($product) && !$product = Product::searchByCatnAndProd($product['catn'], $product['prod'])) continue; - - // Запись ребра и синхронизация (добавление в группу к остальным аналогам) - if (count($from->synchronization($product)) > 0) $writed++; - } - - // Запись в буфер возврата - $return['alert'] = "Создано $writed связей"; } } else { // Не найден товар @@ -433,6 +467,13 @@ class ProductController extends Controller yii::$app->response->format = Response::FORMAT_JSON; + // Запись в буфер возврата + $return['list'] = $this->renderPartial('analogs', [ + 'page' => 1, + 'amount' => yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 30, + 'model' => $from + ]); + return $return; } @@ -462,7 +503,7 @@ class ProductController extends Controller ]; if (empty($catn) || empty($prod)) { - // Не получен артикул + // Не получен артикул или производитель // Запись кода ответа yii::$app->response->statusCode = 500; @@ -471,35 +512,32 @@ class ProductController extends Controller goto end; } - if ($from = Product::searchByCatnAndProd($catn, $prod)) { + if ($target = Product::searchByCatnAndProd($catn, $prod)) { // Товар найден - // Инициализация цели - $target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn'); + if ($target->disconnect()) { + // Удалено ребро (связь) - if ($from->disconnect($target)) { - // Удалено ребро (связь) + // Запись в буфер возврата + $return['disconnected'] = 1; + } else { + // Не удалено ребро (связь) - // Запись в буфер возврата - $return['alert'] = "Продукты успешно отсоединены"; - } else { - // Не удалено ребро (связь) + // Запись кода ответа + yii::$app->response->statusCode = 500; - // Запись кода ответа - yii::$app->response->statusCode = 500; + // Запись в буфер возврата + $return['alert'] = "Не удалось удалить $catn ($prod) из группы"; - // Запись в буфер возврата - $return['alert'] = "Не удалось отсоединить $target от $catn"; - - // Переход в конец алгоритма - goto end; - } + // Переход в конец алгоритма + goto end; + } } else { // Запись кода ответа yii::$app->response->statusCode = 500; // Запись в буфер возврата - $return['alert'] = "Не удалось найти товар от когорого требуется отсоединение: $catn"; + $return['alert'] = "Не удалось найти товар $catn ($prod)"; // Переход в конец алгоритма goto end; @@ -529,6 +567,64 @@ class ProductController extends Controller } } + /** + * Отключение аналога + * + * @param string $catn Артикул + */ + public function actionAnalogs(string $catn, string $prod, int $page): array|string|null + { + // Инициализация буфера ответа + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + if (empty($catn) || empty($prod)) { + // Не получен артикул или производитель + + // Запись кода ответа + yii::$app->response->statusCode = 500; + + // Переход в конец алгоритма + goto end; + } + + // Инициализация количества + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 30; + + if ($model = Product::searchByCatnAndProd($catn, $prod)) { + // Товар найден + + // Генерация списка + $list = trim($this->renderPartial('analogs', compact('model', 'page', 'amount'))); + + if (!empty($list)) $return['list'] = $list; + } else { + // Запись кода ответа + yii::$app->response->statusCode = 500; + + // Запись в буфер возврата + $return['alert'] = "Не удалось найти товар $catn ($prod) для инициализации аналогов"; + + // Переход в конец алгоритма + goto end; + } + + // Конец алгоритма + end: + + if (yii::$app->request->isPost) { + // POST-запрос + + yii::$app->response->format = Response::FORMAT_JSON; + + return $return; + } + + // Переадресация на главную страницу + return $this->redirect("/"); + } + public function actionEditTitle(string $catn, string $prod): array|string|null { // Инициализация diff --git a/mirzaev/skillparts/system/controllers/ProfileController.php b/mirzaev/skillparts/system/controllers/ProfileController.php index c809bbf..40b9e1c 100644 --- a/mirzaev/skillparts/system/controllers/ProfileController.php +++ b/mirzaev/skillparts/system/controllers/ProfileController.php @@ -50,7 +50,6 @@ class ProfileController extends Controller 'supplies', 'import', 'monitoring', - 'readGroups', 'geolocation-write', 'panel-suppliers-requests-search', 'imports-delete', @@ -428,7 +427,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); // Обработка настроек аккаунта if ($vars = yii::$app->request->post('Warehouse') ?? yii::$app->request->get('Warehouse') and $warehouse = yii::$app->request->post('_key') ?? yii::$app->request->get('_key')) { @@ -461,7 +459,6 @@ class ProfileController extends Controller return [ 'main' => $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )), @@ -472,7 +469,6 @@ class ProfileController extends Controller return $this->render('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -495,7 +491,6 @@ class ProfileController extends Controller $number = yii::$app->request->post('number') ?? yii::$app->request->get('number'); $warehouse = yii::$app->request->post('warehouse') ?? yii::$app->request->get('warehouse'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // AJAX-POST-запрос @@ -540,7 +535,6 @@ class ProfileController extends Controller return [ 'main' => $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )), @@ -566,7 +560,6 @@ class ProfileController extends Controller return [ 'main' => $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )), @@ -581,7 +574,6 @@ class ProfileController extends Controller return [ 'main' => $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )), @@ -589,21 +581,6 @@ class ProfileController extends Controller ]; } - public static function readGroups() - { - // Инициализация - $groups = []; - - foreach (SupplyGroup::read() as $group) { - // Перебор всех групп - - // Генерация [КЛЮЧ => ИМЯ] - $groups[$group->_key] = $group->name; - } - - return $groups; - } - /** * Инициализация данных о геолокации * @@ -887,7 +864,7 @@ class ProfileController extends Controller /** * Поиск заявок на регистрацию */ - public function actionPanelSuppliersRequestsSearch() + public function actionPanelSuppliersRequestsSearch(int $page = 1) { if (Yii::$app->request->isPost) { // POST-запрос @@ -895,11 +872,15 @@ class ProfileController extends Controller if (Account::isAdmin() || Account::isModer()) { // Доступ разрешен + // Инициализация входных параметров + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 3; + $order = yii::$app->request->post('order') ?? yii::$app->request->get('order') ?? ['DESC']; + // Инициализация буфера ответа $response = []; // Поиск заявок на регистрацию - $suppliers = Account::searchSuppliersRequests(); + $suppliers = Account::searchSuppliersRequests($amount, $page, $order); foreach ($suppliers as $account) { // Перебор заявок @@ -1025,7 +1006,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1062,6 +1042,8 @@ class ProfileController extends Controller foreach (Supply::searchByImport($import->readId(), limit: 9999) as $supply) { // Перебор найденных поставок + if (empty($supply)) continue; + if (ImportEdgeSupply::searchBySupply($supply)?->delete()) { // Удалено ребро: ИНСТАНЦИЯ ПОСТАВКИ -> ПОСТАВКА @@ -1071,7 +1053,7 @@ class ProfileController extends Controller } // Отправка уведомления - Notification::_write("Удалено $deleted поставок из инстанции поставки $_key", account: $account->_key); + Notification::_write("Удалено $deleted поставок из инстанции поставки $_key", account: $account->readId()); if ($edge->delete()) { // Удалено ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВКИ @@ -1080,7 +1062,7 @@ class ProfileController extends Controller // Удалена инстанция поставки // Отправка уведомления - Notification::_write("Инстанция поставки $_key была удалена", account: $account->_key); + Notification::_write("Инстанция поставки $_key была удалена", account: $account->readId()); } } } @@ -1088,13 +1070,12 @@ class ProfileController extends Controller // Не найдена инстанция поставки // Отправка уведомления - Notification::_write("Не найдена инстанция поставки $_key", account: $account->_key); + Notification::_write("Не найдена инстанция поставки $_key", account: $account->readId()); } // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -1117,7 +1098,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1137,7 +1117,6 @@ class ProfileController extends Controller // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -1161,7 +1140,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1219,7 +1197,6 @@ class ProfileController extends Controller // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -1245,7 +1222,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1337,7 +1313,6 @@ class ProfileController extends Controller // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -1360,7 +1335,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1411,7 +1385,6 @@ class ProfileController extends Controller // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); @@ -1434,7 +1407,6 @@ class ProfileController extends Controller $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); $sidebar = $this->renderPartial('sidebar'); - $groups = self::readGroups(); if (yii::$app->request->isPost) { // POST-запрос @@ -1485,7 +1457,6 @@ class ProfileController extends Controller // Запись в буфер вывода реинициализированного элемента $return['main'] = $this->renderPartial('supplies', compact( 'supply', - 'groups', 'sidebar', 'panel' )); diff --git a/mirzaev/skillparts/system/controllers/SearchController.php b/mirzaev/skillparts/system/controllers/SearchController.php index 5c13ba3..5114828 100644 --- a/mirzaev/skillparts/system/controllers/SearchController.php +++ b/mirzaev/skillparts/system/controllers/SearchController.php @@ -106,7 +106,7 @@ class SearchController extends Controller $return = [ 'timer' => $timer, - 'panel' => $this->renderPartial('/search/loading'), + 'search_line_window_show' => 1, '_csrf' => yii::$app->request->getCsrfToken() ]; } else { @@ -159,6 +159,7 @@ class SearchController extends Controller // Запись ответа $return = [ 'panel' => $this->renderPartial('/search/panel', compact('response', 'query')), + 'search_line_window_show' => 1, '_csrf' => yii::$app->request->getCsrfToken() ]; @@ -167,7 +168,7 @@ class SearchController extends Controller // Запись ответа $return['main'] = $this->renderPartial('/search/index', compact('response', 'query')); - $return['hide'] = 1; + $return['search_line_window_show'] = 1; $return['redirect'] = '/search?type=product&q=' . $query; } } @@ -189,6 +190,7 @@ class SearchController extends Controller return $return ?? [ 'panel' => $this->renderPartial('/search/panel'), + 'search_line_window_show' => 1, '_csrf' => yii::$app->request->getCsrfToken() ]; } else { diff --git a/mirzaev/skillparts/system/controllers/SupplyController.php b/mirzaev/skillparts/system/controllers/SupplyController.php new file mode 100644 index 0000000..9b63e79 --- /dev/null +++ b/mirzaev/skillparts/system/controllers/SupplyController.php @@ -0,0 +1,101 @@ + [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'actions' => [ + 'index', + ] + ], + [ + 'allow' => true, + 'roles' => ['@'], + 'actions' => [] + ], + [ + 'allow' => true, + 'actions' => [ + 'read' + ], + 'matchCallback' => function ($rule, $action): bool { + if ( + !yii::$app->user->isGuest + && (yii::$app->user->identity->type === 'administrator' + || yii::$app->user->identity->type === 'moderator') + ) return true; + + return false; + } + ], + [ + 'allow' => false, + 'roles' => ['?'], + 'denyCallback' => [$this, 'accessDenied'] + ] + ] + ] + ]; + } + + /** + * Чтение поставок + * + * @param int $page Страница + * + * @return string|array|null + */ + public function actionRead(int $page = 1): string|array|null + { + if (yii::$app->request->isPost) { + // POST-запрос + + // Инициализация входных параметров + $amount = yii::$app->request->post('amount') ?? yii::$app->request->get('amount') ?? 20; + $order = yii::$app->request->post('order') ?? yii::$app->request->get('order') ?? ['DESC']; + + // Инициализация cookie + $cookies = yii::$app->response->cookies; + + // Чтение поставок + $supplies = Supply::read(limit: $amount, page: $page, order: $order); + + // Запись формата ответа + yii::$app->response->format = Response::FORMAT_JSON; + + return [ + 'supplies' => $this->renderPartial('/supply/list', compact('supplies', 'amount', 'page')), + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } + + return false; + } +} diff --git a/mirzaev/skillparts/system/migrations/arangodb/m220808_185553_create_file_collection.php b/mirzaev/skillparts/system/migrations/arangodb/m220808_185553_create_file_collection.php new file mode 100644 index 0000000..04199f3 --- /dev/null +++ b/mirzaev/skillparts/system/migrations/arangodb/m220808_185553_create_file_collection.php @@ -0,0 +1,20 @@ +createCollection('file', ['type' => 2]); + } + + public function down() + { + $this->dropCollection('file'); + } +} diff --git a/mirzaev/skillparts/system/migrations/arangodb/m220817_210350_create_import_edge_file_collection.php b/mirzaev/skillparts/system/migrations/arangodb/m220817_210350_create_import_edge_file_collection.php new file mode 100644 index 0000000..f2ab761 --- /dev/null +++ b/mirzaev/skillparts/system/migrations/arangodb/m220817_210350_create_import_edge_file_collection.php @@ -0,0 +1,20 @@ +createCollection('import_edge_file', ['type' => 3]); + } + + public function down() + { + $this->dropCollection('import_edge_file'); + } +} diff --git a/mirzaev/skillparts/system/models/Account.php b/mirzaev/skillparts/system/models/Account.php index 23c093c..f0f8f91 100644 --- a/mirzaev/skillparts/system/models/Account.php +++ b/mirzaev/skillparts/system/models/Account.php @@ -62,7 +62,8 @@ class Account extends Document implements IdentityInterface, PartnerInterface 'vrfy', 'geol', 'auth', - 'acpt' + 'acpt', + 'chpk' ] ); } @@ -98,7 +99,8 @@ class Account extends Document implements IdentityInterface, PartnerInterface 'vrfy' => 'Статус подтверждения владением почты', 'geol' => 'Геолокация', 'auth' => 'Аутентификационный хеш', - 'acpt' => 'Согласие с офертой' + 'acpt' => 'Согласие с офертой', + 'chpk' => 'Ключ для смены пароля' ] ); } @@ -212,6 +214,59 @@ class Account extends Document implements IdentityInterface, PartnerInterface return false; } + /** + * Отправка сообщения для генерации нового пароля + */ + public static function restoreSend(string $mail): bool + { + if (($account = self::findByMail($mail)) instanceof self) { + // Найден аккаунт + + // Запись ключа для аутентификации + $account->chpk = yii::$app->security->generateRandomString(); + + if ($account->update()) { + // Удалось обновить аккаунт + + // Отправка письма + yii::$app->mail_system->compose() + ->setFrom(yii::$app->params['mail']['system']) + ->setTo($account->mail) + ->setSubject('Подтвердите сброс пароля') + ->setHtmlBody(yii::$app->controller->renderPartial('/mails/restore', ['id' => $account->_key, 'chpk' => $account->chpk])) + ->send(); + + return true; + } + } + + return false; + } + + /** + * Генерация нового пароля + */ + public function restoreGenerate(): void + { + // Удаление ключа + $this->chpk = null; + + // Генерация пароля + $this->pswd = self::passwordGenerate(); + + if ($this->update()) { + // Удалось обновить аккаунт + + // Отправка письма + yii::$app->mail_system->compose() + ->setFrom(yii::$app->params['mail']['system']) + ->setTo($this->mail) + ->setSubject('Генерация пароля') + ->setHtmlBody(yii::$app->controller->renderPartial('/mails/password', ['pswd' => $this->pswd])) + ->send(); + } + } + /** * Чтение полей для экспорта из 1С */ @@ -669,18 +724,15 @@ class Account extends Document implements IdentityInterface, PartnerInterface edge: 'account_edge_supply', direction: 'OUTBOUND', subquery_where: [ - [ - 'account_edge_supply._from == account._id' - ], [ 'account_edge_supply._to == "' . $_id . '"' ] ], subquery_select: 'account', where: 'account_edge_supply[0]._id != null', - limit: 1, - select: 'account_edge_supply[0]' - )[0]; + select: 'account_edge_supply[0]', + limit: 1 + )[0] ?? null; } /** @@ -918,9 +970,9 @@ class Account extends Document implements IdentityInterface, PartnerInterface * * @return array */ - public static function searchSuppliersRequests(): array + public static function searchSuppliersRequests(int $amount = 3, int $page, array $order = ['DESC']): array { - return self::find()->where(['agnt' => true, 'type' => 'requested'])->orderBy(['DESC'])->all(); + return self::find()->where(['agnt' => true, 'type' => 'requested'])->limit($amount)->offset($amount * ($page - 1))->orderBy($order)->all(); } /** @@ -928,12 +980,12 @@ class Account extends Document implements IdentityInterface, PartnerInterface * * @param static|null $account Аккаунт */ - public static function initAccount(Account|int $account = null): ?static + public static function initAccount(Account|string|int $account = null): ?static { if (is_null($account)) { // Данные аккаунта не переданы - if (yii::$app->user->isGuest) { + if (empty(yii::$app->user) || yii::$app->user->isGuest) { // Аккаунт не аутентифицирован } else { // Аккаунт аутентифицирован @@ -955,6 +1007,15 @@ class Account extends Document implements IdentityInterface, PartnerInterface if ($account = Account::searchById(Account::collectionName() . "/$account")) { // Удалось инициализировать аккаунт + return $account; + } + } else if (is_string($account)) { + // Передан идентификатор документа (_id) (подразумевается) + + // Инициализация (поиск в базе данных) + if ($account = Account::searchById($account)) { + // Удалось инициализировать аккаунт + return $account; } } diff --git a/mirzaev/skillparts/system/models/Document.php b/mirzaev/skillparts/system/models/Document.php index 8ae593a..b47ad2b 100644 --- a/mirzaev/skillparts/system/models/Document.php +++ b/mirzaev/skillparts/system/models/Document.php @@ -168,9 +168,9 @@ abstract class Document extends ActiveRecord /** * Чтение записей по максимальному ограничению */ - public static function read(?array $where = [], int $limit = 100, ?array $order = null): array + public static function read(?array $where = [], int $limit = 100, int $page = 1, ?array $order = null): array { - return static::find()->where($where)->orderby($order)->limit($limit)->all(); + return static::find()->where($where)->orderby($order)->limit($limit)->offset(($page - 1) * $limit)->all(); } /** diff --git a/mirzaev/skillparts/system/models/Edge.php b/mirzaev/skillparts/system/models/Edge.php index 3d06e84..761fe65 100644 --- a/mirzaev/skillparts/system/models/Edge.php +++ b/mirzaev/skillparts/system/models/Edge.php @@ -167,7 +167,7 @@ abstract class Edge extends Document /** * Поиск рёбер по направлению */ - public static function searchByDirection(string $_from, string $direction = 'OUTBOUND', string $type = '', array $where = [], int $limit = 1): static|array|null + public static function searchByDirection(string $_from, string $direction = 'OUTBOUND', string $type = '', array $where = [], int $limit = 1, int $page = 1): static|array|null { if (str_contains($direction, 'OUTBOUND')) { // Исходящие рёбра @@ -204,7 +204,7 @@ abstract class Edge extends Document } else if (str_contains($direction, 'ANY')) { // Исходящие и входящие рёбра - return static::searchByDirection(_from: $_from, direction: 'OUTBOUND', type: $type, where: $where, limit: $limit) + static::searchByDirection(_from: $_from, direction: 'INBOUND', type: $type, where: $where, limit: $limit); + return static::searchByDirection(_from: $_from, direction: 'OUTBOUND', type: $type, where: $where, limit: $limit, page: $page) + static::searchByDirection(_from: $_from, direction: 'INBOUND', type: $type, where: $where, limit: $limit, page: $page); } if ($limit < 2) { @@ -214,7 +214,7 @@ abstract class Edge extends Document } else { // Несколько рёбер - return $query->limit($limit)->all(); + return $query->limit($limit)->offset($limit * ($page - 1))->all(); } } } diff --git a/mirzaev/skillparts/system/models/File.php b/mirzaev/skillparts/system/models/File.php new file mode 100644 index 0000000..191b057 --- /dev/null +++ b/mirzaev/skillparts/system/models/File.php @@ -0,0 +1,100 @@ + 'Тип файла', + 'path' => 'Относительный от хранилища путь до файла', + 'name' => 'Название файла', + 'user' => 'Пользователь управляющий файлом', + 'stts' => 'Статус', + 'meta' => 'Метаданные' + ] + ); + } + + /** + * Перед сохранением + * + * @todo Подождать обновление от ебаного Yii2 и добавить + * проверку типов передаваемых параметров + */ + public function beforeSave($data): bool + { + if (parent::beforeSave($data)) { + if ($this->isNewRecord) { + if ($this->type = 'supplies excel') { + // Список поставок + + $this->stts = 'needed to load'; + } + } + + return true; + } + + return false; + } + + public static function searchSuppliesNeededToLoad(int $amount = 3): array + { + return static::find()->where(['stts' => 'needed to load'])->limit($amount)->all(); + } + + + /** + * Поиск по инстанции импорта + * + * @param Import $import Инстанция импорта + */ + public static function searchByImport(Import $import): ?File + { + return new File(self::searchByEdge( + from: 'import', + to: 'file', + subquery_where: [ + [ + 'import._id' => $import->readId() + ] + ], + where: 'import_edge_file[0]._id != null', + select: 'file', + limit: 1 + )[0]) ?? null; + } +} diff --git a/mirzaev/skillparts/system/models/Import.php b/mirzaev/skillparts/system/models/Import.php index 5386640..70f6022 100644 --- a/mirzaev/skillparts/system/models/Import.php +++ b/mirzaev/skillparts/system/models/Import.php @@ -79,9 +79,9 @@ class Import extends Document * @param Warehouse $warehouse Инстанция склада * @param int $limit Ограничение по максимальному количеству * - * @return array Инстанции испортов + * @return array Инстанции импортов */ - public static function searchByWarehouse(Warehouse $warehouse, int $limit = 10): array + public static function searchByWarehouse(Warehouse $warehouse, int $limit = 10): ?array { return self::searchByEdge( from: 'warehouse', @@ -103,9 +103,9 @@ class Import extends Document * @param Supply $supply Поставка * @param int $limit Ограничение по максимальному количеству * - * @return array Инстанции испортов + * @return array Инстанции импортов */ - public static function searchBySupply(Supply $supply, int $limit = 10): array + public static function searchBySupply(Supply $supply, int $limit = 10): ?array { return self::searchByEdge( from: 'supply', @@ -120,4 +120,27 @@ class Import extends Document limit: $limit ); } + + /** + * Поиск по файлу + * + * @param File $file Файл + * + * @return Import|null Инстанция импорта + */ + public static function searchByFile(File $file): ?Import + { + return self::searchByEdge( + from: 'file', + to: 'import', + edge: 'import_edge_file', + direction: 'OUTBOUND', + subquery_where: [ + ['import_edge_file._to' => $file->readId()], + ['import_edge_supply.type' => 'connected'] + ], + where: 'import_edge_supply[0] != null', + limit: 1 + )[0] ?? null; + } } diff --git a/mirzaev/skillparts/system/models/ImportEdgeFile.php b/mirzaev/skillparts/system/models/ImportEdgeFile.php new file mode 100644 index 0000000..9126e78 --- /dev/null +++ b/mirzaev/skillparts/system/models/ImportEdgeFile.php @@ -0,0 +1,80 @@ +where(['_to' => $file->readId(), 'type' => 'connected'])->limit($limit)->all(); + } + + /** + * Поиск по инстанции импорта + * + * @param Import $import Инстанция импорта + * @param int $limit Ограничение по максимальному количеству + */ + public static function searchByImport(Import $import, int $limit = 1): array + { + return static::find()->where(['_from' => $import->readId(), 'type' => 'connected'])->limit($limit)->all(); + } +} diff --git a/mirzaev/skillparts/system/models/ImportEdgeSupply.php b/mirzaev/skillparts/system/models/ImportEdgeSupply.php index a4ef76d..52dca78 100644 --- a/mirzaev/skillparts/system/models/ImportEdgeSupply.php +++ b/mirzaev/skillparts/system/models/ImportEdgeSupply.php @@ -110,6 +110,6 @@ class ImportEdgeSupply extends Edge */ public static function searchBySupply(Supply $supply): ?static { - return static::find()->where(['_to' => $supply->readId()])->one()[0] ?? null; + return static::find()->where(['_to' => $supply->readId()])->one() ?? null; } } diff --git a/mirzaev/skillparts/system/models/Notification.php b/mirzaev/skillparts/system/models/Notification.php index 1358912..e2ad113 100644 --- a/mirzaev/skillparts/system/models/Notification.php +++ b/mirzaev/skillparts/system/models/Notification.php @@ -147,16 +147,16 @@ class Notification extends Document * * @param string $html Содержимое уведомления (HTML или текст) * @param bool|string|null $html Содержимое уведомления (HTML или текст) - * @param string $account Получатель уведомления (_key) + * @param string $account Получатель уведомления (_key или "@...") * @param string $type Тип уведомления * * @todo Намного удобнее будет заменить _key на _id, чтобы из рёбер сразу получать аккаунт без лишних операций */ - public static function _write(string $text, bool|string|null $html = false, string $account = null, string $type = self::TYPE_NOTICE): self|array|null + public static function _write(string $text, bool|string|null $html = false, string $account = '', string $type = self::TYPE_NOTICE): self|array|null { // Инициализация $model = new self; - $account ?? $account = yii::$app->user->identity->_key ?? throw new Exception('Не удалось инициализировать получателя'); + $receiver = Account::initAccount($account)->_key ?? $account ?? throw new Exception('Не удалось инициализировать получателя'); if ((bool) (int) $html) { // Получен текст в формете HTML-кода @@ -176,7 +176,7 @@ class Notification extends Document // Уведомление записано // Инициализация получателей и создание ребра - self::searchReceiverAndConnect($model, $account, $type); + self::searchReceiverAndConnect($model, $receiver, $type); } return null; diff --git a/mirzaev/skillparts/system/models/Order.php b/mirzaev/skillparts/system/models/Order.php index 7f8126c..982cb44 100644 --- a/mirzaev/skillparts/system/models/Order.php +++ b/mirzaev/skillparts/system/models/Order.php @@ -273,7 +273,8 @@ class Order extends Document implements DocumentInterface bool $supplies = false, int|null $from = null, int|null $to = null, - bool $count = false + bool $count = false, + bool $debug = false ): int|array|null { // Инициализация аккаунта if (empty($account)) { @@ -350,9 +351,15 @@ class Order extends Document implements DocumentInterface sort: ['DESC'], select: $select, direction: 'INBOUND', - count: !$supplies && $count + count: !$supplies && $count, + debug: $debug ); + if ($debug) { + var_dump($orders); + die; + } + if (!$supplies && $count) { // Запрошен подсчет заказов @@ -363,7 +370,7 @@ class Order extends Document implements DocumentInterface $return = []; // Инициализация архитектуры буфера вывода - foreach ($orders as $key => $order) { + foreach ($orders ?? [null] as $key => $order) { // Перебор заказов // Запись в буфер возврата @@ -526,6 +533,7 @@ class Order extends Document implements DocumentInterface $buffer['delivery'] = $buffer_connection['data']; } else { // Инициализация инстанции продукта в базе данных (реинициализация под ActiveRecord) + $product = Product::searchByCatnAndProd($buffer['product']['catn'], $buffer['product']['prod']); // Инициализация доставки Dellin (автоматическая) @@ -548,6 +556,7 @@ class Order extends Document implements DocumentInterface $product->update(); } + // Запись цены (цена поставки + цена доставки + наша наценка) $buffer['cost'] = ($supply->cost ?? $supply->onec['Цены']['Цена']['ЦенаЗаЕдиницу'] ?? throw new exception('Не найдена цена товара')) + ($buffer['delivery']['price']['all'] ?? $buffer['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0; } catch (Exception $e) { diff --git a/mirzaev/skillparts/system/models/Product.php b/mirzaev/skillparts/system/models/Product.php index c9ffce3..67f3a13 100644 --- a/mirzaev/skillparts/system/models/Product.php +++ b/mirzaev/skillparts/system/models/Product.php @@ -457,7 +457,7 @@ class Product extends Document where: 'supply_edge_product[0]._id != null', limit: 1, select: 'supply_edge_product[0]' - )[0]; + )[0] ?? null; } /** @@ -606,20 +606,6 @@ class Product extends Document return false; } - /** - * Деактивация - * - * @return bool Статус выполнения - */ - public function deactivate(): bool - { - $this->stts = 'inactive'; - - if ($this->update() > 0) return true; - - return false; - } - /** * Найти товары по группе * @@ -645,4 +631,31 @@ class Product extends Document select: 'product_edge_product_group[0]' )[0]; } + + /** + * Инициализация обложки для товара + * + * Ищет логотип в нужной категории (размере) для выбранного производителя + * + * @param string $prod Производитель + * @param int $size Размерная группа + * + * @return string Относительный путь до изображения от публичной корневой папки + */ + public static function cover(string $prod, int $size = 150): string + { + if ($size === 0) $size = ''; + else $size = "h$size/"; + + // Инициализация пути + $path = "/img/covers/$size" . strtolower($prod); + + // Поиск файла и возврат + if (file_exists(YII_PATH_PUBLIC . DIRECTORY_SEPARATOR . $path . '.jpg')) return $path . '.jpg'; + else if (file_exists(YII_PATH_PUBLIC . DIRECTORY_SEPARATOR . $path . '.jpeg')) return $path . '.jpeg'; + else if (file_exists(YII_PATH_PUBLIC . DIRECTORY_SEPARATOR . $path . '.png')) return $path . '.png'; + + // Возврат изображения по умолчанию + return "/img/covers/$size" . 'product.png'; + } } diff --git a/mirzaev/skillparts/system/models/ProductGroup.php b/mirzaev/skillparts/system/models/ProductGroup.php index 238421d..4d85dbe 100644 --- a/mirzaev/skillparts/system/models/ProductGroup.php +++ b/mirzaev/skillparts/system/models/ProductGroup.php @@ -125,7 +125,7 @@ class ProductGroup extends Document implements GroupInterface public function deleteProduct(Product $product): void { // Удаление товара из группы (подразумевается, что будет только одно) - foreach (ProductEdgeProductGroup::searchByVertex($product->readId(), $this->readId(), filter: ['type' => 'member']) as $edge) $edge->delete; + foreach (ProductEdgeProductGroup::searchByVertex($product->readId(), $this->readId(), filter: ['type' => 'member']) as $edge) $edge->delete(); // Запись в журнал $this->journal('delete member', [ @@ -138,9 +138,9 @@ class ProductGroup extends Document implements GroupInterface * * @param int $limit Ограничение по максимальному количеству */ - public function searchEdges(int $limit = 999): ?array + public function searchEdges(int $limit = 100, int $page = 1): ?array { - return ProductEdgeProductGroup::searchByDirection($this->readId(), 'INBOUND', where: ['type' => 'member'], limit: $limit); + return ProductEdgeProductGroup::searchByDirection($this->readId(), 'INBOUND', where: ['type' => 'member'], limit: $limit, page: $page); } /** @@ -148,12 +148,12 @@ class ProductGroup extends Document implements GroupInterface * * @param int $limit Ограничение по максимальному количеству */ - public function searchProducts(int $limit = 999): ?array + public function searchProducts(int $limit = 100, int $page = 1): ?array { // Инициализация буфера товаров $products = []; - foreach ($this->searchEdges($limit) as $edge) { + foreach ($this->searchEdges($limit, $page) as $edge) { // Перебор рёбер $products[] = Product::searchById($edge->_from); @@ -191,6 +191,20 @@ class ProductGroup extends Document implements GroupInterface return $transfered; } + /** + * Деактивация + * + * @return bool Статус выполнения + */ + public function deactivate(): bool + { + $this->stts = 'inactive'; + + if ($this->update() > 0) return true; + + return false; + } + /** * Запись рёбер групп * diff --git a/mirzaev/skillparts/system/models/Search.php b/mirzaev/skillparts/system/models/Search.php index 0e21f65..da844ec 100644 --- a/mirzaev/skillparts/system/models/Search.php +++ b/mirzaev/skillparts/system/models/Search.php @@ -129,7 +129,7 @@ class Search extends Document // Инициализация буфера вывода $response = $products; - // Генерация сдвига по запрашиваемым данным (пагинация) + // Генерация сдвига по запрашиваемым данным (система страниц) $offset = $limit * ($page - 1); foreach ($response as &$row) { @@ -167,7 +167,7 @@ class Search extends Document // Инициализация буфера $buffer_connections = []; - if (count($connections) === 11) { + if (count($connections) === 100) { // Если в базе данных хранится много поставок // Инициализация @@ -418,7 +418,7 @@ class Search extends Document // Не удалось использовать первое изображение как обложку // Запись обложки по умолчанию - $cover = '/img/covers/h150/product.png'; + $cover = Product::cover($row['prod'], 150); } } diff --git a/mirzaev/skillparts/system/models/Supply.php b/mirzaev/skillparts/system/models/Supply.php index dc86ce1..b9c38ef 100644 --- a/mirzaev/skillparts/system/models/Supply.php +++ b/mirzaev/skillparts/system/models/Supply.php @@ -12,8 +12,10 @@ use app\models\Product; use app\models\SupplyEdgeProduct; use app\models\Settings; use app\models\Import; +use app\models\File; use app\models\ImportEdgeSupply; use app\models\WarehouseEdgeImport; +use app\models\ImportEdgeFile; use carono\exchange1c\interfaces\OfferInterface; use carono\exchange1c\interfaces\ProductInterface; @@ -23,6 +25,8 @@ use moonland\phpexcel\Excel; use DateTime; use DateTimeZone; +use DatePeriod; +use DateInterval; use Exception; @@ -38,13 +42,6 @@ class Supply extends Product implements ProductInterface, OfferInterface { use Xml2Array; - /** - * Количество - * - * Используется при выводе в корзине - */ - public int $amnt = 0; - /** * Имя коллекции */ @@ -101,14 +98,21 @@ class Supply extends Product implements ProductInterface, OfferInterface */ public function afterSave($data, $vars): void { - if (AccountEdgeSupply::searchByVertex(yii::$app->user->id, $this->readId())) { - // Ребро: "АККАУНТ -> ПОСТАВКА" уже существует + // Инициализация + $account = Account::initAccount(); - } else { - // Ребра не существует + if (isset($account)) { + // Инициализирован аккаунт - // Запись ребра: АККАУНТ -> ПОСТАВКА - (new AccountEdgeSupply)->write(yii::$app->user->id, $this->readId(), 'import'); + if (AccountEdgeSupply::searchByVertex($account->readId(), $this->readId())) { + // Ребро: "АККАУНТ -> ПОСТАВКА" уже существует + + } else { + // Ребра не существует + + // Запись ребра: АККАУНТ -> ПОСТАВКА + (new AccountEdgeSupply)->write($account->readId(), $this->readId(), 'import'); + } } } @@ -171,8 +175,13 @@ class Supply extends Product implements ProductInterface, OfferInterface foreach (ImportEdgeSupply::find()->where(['_from' => $id])->limit($limit)->all() as $edge) { // Перебор найденных рёбер - // Поиск поставки и запись в буфер вывода - $supplies[] = static::searchById($edge->_to); + // Поиск поставки + $supply = static::searchById($edge->_to); + + if (empty($supply)) continue; + + // Запись поставки в буфер вывода + $supplies[] = $supply; } return $supplies; @@ -387,20 +396,15 @@ class Supply extends Product implements ProductInterface, OfferInterface } /** - * Запись поставок из excel - * - * На данный момент обрабатывает только импорт из - * файлов с расширением .excel + * Импорт Excel-файла * * @param int $warehouse Идентификатор склада (_key) - * @param Account|int|null $account Аккаунт + * @param Account|int|null $account Аккаунт управляющий файлом и его данными + * @param bool $load Загрузить в базу данных */ public function importExcel(int $warehouse, Account|int|null $account = null): bool { // Инициализация - $data = []; - $created = 0; - $updated = 0; $account = Account::initAccount($account); if ($this->validate()) { @@ -424,10 +428,85 @@ class Supply extends Product implements ProductInterface, OfferInterface if (!file_exists($path)) if (!mkdir($path, 0775, true)) throw new Exception('Не удалось создать директорию', 500); + $this->file_excel->saveAs($path = "$path/" . $this->file_excel->baseName . '.' . $this->file_excel->extension); - $this->file_excel->saveAs($path = "$path/" . $filename = $this->file_excel->baseName . '.' . $this->file_excel->extension); + // Инициализация инстанции файла + $file = new File(); - $data[] = Excel::import($path, [ + // Запись настроек файла + $file->type = 'supplies excel'; + $file->path = $path; + $file->name = $this->file_excel->baseName . '.' . $this->file_excel->extension; + $file->user = (int) $account->_key; + $file->meta = [ + 'warehouse' => $warehouse + ]; + + // Запись в базу данных + $file->save(); + + // Инициализация инстанции импорта + $import = new Import; + + if ($import->save()) { + // Записано в базу данных + + if (ImportEdgeFile::write($import->readId(), $file->readId(), data: ['type' => 'connected'])) { + // Записано ребро: "ИНСТАНЦИЯ ИМПОРТА" -> ФАЙЛ + + // Запись в журнал инстанции импорта + $import->journal('connect_with_file', [ + 'target' => $file->readId() + ]); + } + + if (WarehouseEdgeImport::write(Warehouse::collectionName() . '/' . $file->meta['warehouse'], $import->readId(), data: ['type' => 'loaded'])) { + // Записано ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВОК + + // Запись в журнал инстанции импорта + $import->journal('connect_with_warehouse', [ + 'target' => Warehouse::collectionName() . '/' . $file->meta['warehouse'] + ]); + } + } + + // Макрос действий после импорта + static::afterImportExcel($account, $warehouse); + + return true; + } + + // Запись ошибки + $this->addError('errors', 'Не пройдена проверка параметров'); + + return false; + } + + /** + * Запись поставок из excel + * + * На данный момент обрабатывает только импорт из + * файлов с расширением .excel + * + * @param File $file Инстанция файла + * + * @return bool + */ + public static function loadExcel(File $file): bool { + // Инициализация + $created = 0; + $updated = 0; + $account = Account::initAccount((int) $file->user); + $data = []; + + $supply = new Supply(); + $supply->scenario = $supply::SCENARIO_IMPORT_EXCEL; + $supply->file_excel = $file->path; + + if ($supply->validate()) { + // Пройдена проверка + + $data[] = Excel::import($supply->file_excel, [ 'setFirstRecordAsKeys' => true, 'setIndexSheetByName' => true, ]); @@ -441,7 +520,7 @@ class Supply extends Product implements ProductInterface, OfferInterface if (count($data) < 1) { // Не найдены строки с товарами - $this->addError('errors', 'Не удалось найти данные товаров'); + $supply->addError('errors', 'Не удалось найти данные товаров'); } else { // Найдены строки с товарами @@ -489,10 +568,11 @@ class Supply extends Product implements ProductInterface, OfferInterface if (!$product = Product::searchByCatnAndProd($article, $prod)) $product = Product::writeEmpty($article, $prod, Account::isMinimalAuthorized($account)); // Инициализация группы товаров - if (!$group = ProductGroup::searchByProduct($product)) $group = ProductGroup::writeEmpty(active: true); + // if (!$group = ProductGroup::searchByProduct($product)) $group = ProductGroup::writeEmpty(active: true); // Инициализация функции создания поставки - $create = function (string $_supply, int|null $amount = null) use ($group, $row, $prod, $analogs, &$created, &$updated, &$imported, $account): bool { + // $create = function (string $_supply, int|null $amount = null) use ($group, $row, $prod, $analogs, &$created, &$updated, &$imported, $account): bool { + $create = function (string $_supply, int|null $amount = null) use ($row, $prod, $analogs, &$created, &$updated, &$imported, $account): bool { // Очистка $_supply = trim($_supply); @@ -504,8 +584,272 @@ class Supply extends Product implements ProductInterface, OfferInterface // Запись артикула (каталожного номера) в буфер $_row['catn'] = $_supply; + + // Запись цены в буфер $_row['cost'] = (float) preg_replace('/[^\d\.]+/', '', preg_replace('/\,+/', ' ', (string) ($row['Стоимость'] ?? $row['стоимость'] ?? $row['Цена'] ?? $row['цена'] ?? $row['Cost'] ?? $row['cost'] ?? $row['Price'] ?? $row['price']))) ?? 0; - $_row['prod'] = $prod; + + // Запись производителя в буфер + $_row['prod'] = match($prod = ucwords(strtolower(preg_replace('/[^A-zА-я\s]/', ' ', $prod, 300)))) { + 'Akebono' => 'AKEBONO', + 'Bosch' => 'BOSCH', + 'Brembo' => 'BREMBO', + 'Ctr' => 'CTR', + 'Delphi' => 'DELPHI', + 'Gates' => 'GATES', + 'Hella' => 'HELLA', + 'Kyb' => 'KYB', + 'Mando' => 'MANDO', + 'Mk Kachiyama', 'Mk-kachiyama', 'Mk-Kachiyama' => 'MK KACHIYAMA', + 'Narva' => 'NARVA', + 'Ngk' => 'NGK', + 'Nk' => 'NK', + 'Osram' => 'OSRAM', + 'Philips' => 'PHILIPS', + 'Rancho' => 'RANCHO', + 'Sangsin' => 'SANGSIN', + 'Swag' => 'SWAG', + 'Trw' => 'TRW', + 'Filtron' => 'FILTRON', + 'Ajusa' => 'AJUSA', + 'Denso' => 'DENSO', + 'Dolz' => 'DOLZ', + 'Era' => 'ERA', + 'Febest' => 'FEBEST', + 'Freccia' => 'FRECCIA', + 'Gmb' => 'GMB', + 'Gsp' => 'GSP', + 'Honda' => 'HONDA', + 'Hyundai/kia', 'Hyundai/Kia', 'Hyundai-kia', 'Hyundai-Kia' => 'HYUNDAI/KIA', + 'Knecht/mahle', 'Knecht/Mahle', 'Knecht-mahle', 'Knecht-Mahle' => 'KNECHT/MAHLE', + 'Lynx' => 'LYNX', + 'Mann' => 'MANN', + 'Mitsubishi' => 'MITSUBISHI', + 'Nipparts' => 'NIPPARTS', + 'Nissan' => 'NISSAN', + 'Sasic' => 'SASIC', + 'Snr' => 'SNR', + 'Subaru' => 'SUBARU', + 'Toyota' => 'TOYOTA', + 'Trw_moto', 'Trw_Moto', 'Trw-moto', 'Trw-Moto' => 'TRW_MOTO', + 'Vag' => 'VAG', + 'Wynns' => 'WYNNS', + 'Ert' => 'ERT', + 'Dongil' => 'DONGIL', + 'Febi' => 'FEBI', + 'Ford' => 'FORD', + 'Injin' => 'INJIN', + 'Land Rover' => 'LAND ROVER', + 'Lpr' => 'LPR', + 'Luzar' => 'LUZAR', + 'MercedesBenz', 'Mercedesbenz', 'Mercedes Benz' => 'MERCEDES BENZ', + 'Suzuki' => 'SUZUKI', + 'Teikin' => 'TEIKIN', + 'Blue print' => 'BLUE PRINT', + 'Daihatsu' => 'DAIHATSU', + 'Goodwill' => 'GOODWILL', + 'Ina' => 'INA', + 'Iveco' => 'IVECO', + 'Jp Group' => 'JP GROUP', + 'Mfilter' => 'MFILTER', + 'Moog' => 'MOOG', + 'Nibk' => 'NIBK', + 'Asakashi', 'Js Asakashi' => 'JS Asakashi', + 'Lemforder' => 'LEMFORDER', + 'Man' => 'MAN', + 'Volvo' => 'VOLVO', + 'Ctp', 'Costex Tractor Parts', => 'CTP', + 'Czd' => 'CZD', + 'Lavr' => 'LAVR', + 'Wai' => 'WAI', + 'Asam' => 'ASAM', + 'Bmw' => 'BMW', + 'Brisk' => 'BRISK', + 'Fenox' => 'FENOX', + 'Gm', 'General Motors' => 'GENERAL MOTORS', + 'Idemitsu' => 'IDEMITSU', + 'Krauf' => 'KRAUF', + 'Liqui Moly', 'Lm' => 'LIQUI MOLY', + 'Mazda' => 'MAZDA', + 'Musashi' => 'MUSASHI', + 'Seiken' => 'SEIKEN', + 'Totachi' => 'TOTACHI', + 'Trialli' => 'TRIALLI', + 'Dong Feng', 'Dongfeng', 'Dongfeng Motors', 'Dfm' => 'DONGFENG', + 'Miles' => 'MILES', + 'Sidem' => 'SIDEM', + 'Stellox' => 'STELLOX', + 'Tokico' => 'TOKICO', + 'Phc Valeo', 'Valeo Phc' => 'Valeo PHC', + 'Точка Опоры' => 'ТОЧКА ОПОРЫ', + 'Jikiu' => 'JIKIU', + 'Lada' => 'LADA', + 'Mitasu' => 'MITASU', + 'Neolux' => 'NEOLUX', + 'Pilenga' => 'PILENGA', + 'Renault' => 'RENAULT', + 'Startvolt' => 'STARTVOLT', + 'Zic' => 'ZIC', + 'Автодело' => 'АВТОДЕЛО', + 'Berkut' => 'BERKUT', + 'Fiat' => 'FIAT', + 'Profix' => 'PROFIX', + 'Sampa' => 'SAMPA', + 'Topfils' => 'TOPFILS', + 'Uaz', 'Уаз' => 'UAZ', + 'Тольятти-тза', 'Тольятти-Тза', 'Тольятти Тза', 'Тольяттитза' => 'Тольятти-ТЗА', + 'Aywiparts' => 'AYWIPARTS', + 'Сatterpillar', 'Cat', 'Catterpillar Inc' => 'CAT', + 'Difa', 'Дифа' => 'DIFA', + 'Nisshimbo' => 'NISSHINBO', + 'Ruei' => 'RUEI', + 'Vic' => 'VIC', + 'Auto-gur', 'Auto-Gur', 'Auto Gur' => 'AUTO-GUR', + 'Daejin' => 'DAEJIN', + 'Gbrake' => 'G-brake', + 'Img' => 'IMG', + 'Kortex' => 'KORTEX', + 'Koyo' => 'KOYO', + 'Peugeot/citroen', 'Peugeot/Citroen', 'Peugeot-citroen', 'Peugeot-Citroen' => 'PEUGEOT-CITROEN', + 'Tangde' => 'TANGDE', + 'Double-force', 'Double-Force', 'Doubleforce', 'Double Force' => 'DOUBLE FORCE', + 'Just-drive', 'Just-Drive', 'Just Drive' => 'JUST DRIVE', + 'Quattro-freni', 'Quattro-Freni', 'Quattro Freni' => 'QUATTRO FRENI', + 'Roers Parts', 'Roers-parts', 'Roers-Parts' => 'ROTERS-PARTS', + 'Tixona' => 'TIXONA', + 'Zekkert' => 'ZEKKERT', + 'Horex' => 'HOREX', + 'Zevs', 'Зевс' => 'ZEVS', + 'Aiko' => 'AIKO', + 'Castrol' => 'CASTROL', + 'Deko' => 'DEKO', + 'Hyundai Xteer' => 'HYUNDAI XTEER', + 'Dyg' => 'DYG', + 'Nty' => 'NTY', + 'Skf' => 'SKF', + 'Alfi Parts' => 'ALFI PARTS', + 'Fiestroco' => 'FIESTROCO', + 'Golden Snail' => 'GOLDEN SNAIL', + 'Ti-guar', 'Ti-Guar' => 'Ti-Guar', + 'Cautex' => 'CAUTEX', + 'Bm-motorsport', 'Bm-Motorsport' => 'BM-Motorsport', + 'Маз', 'Maz' => 'MAZ', + 'Брт' => 'БРТ', + 'Гпз' => 'ГПЗ', + 'Rm Terex' => 'Terex', + 'Agm' => 'Agama', + 'Tsn' => 'TSN', + 'Igp', 'Isuzu Genuine Parts' => 'Isuzu', + 'Etp', 'Europe Tractor Parts' => 'ETP', + 'Cum' => 'Cummins', + 'Xcmg' => 'XCMG', + 'Sdlg' => 'SDLG', + 'Xcmg-sdlg', 'Xcmg-Sdlg' => 'XCMG-SDLG', + 'Vilitan' => 'ViliTan', + 'Kato' => 'KATO', + 'Bw' => 'Baldwin', + 'Itr' => 'ITR', + 'Ofm' => 'OFM', + 'Kz' => 'Kezhang Mechanic', + 'Dongfeng Cummins Engine Company', 'Dongfeng Cummins' => 'DCEC', + 'Bomag' => 'BOMAG', + 'Shehwa' => 'SHEHWA', + 'Kmp Brand', 'Kmp' => 'KMP', + 'Jd' => 'John Deere', + 'World Gasket', 'Wg', 'World-gasket', 'World-Gasket' => 'WG', + 'Original Equipment Manufacturer', 'Oem' => 'OEM', + 'Case' => 'CASE', + 'Jf Filtration', 'Jf' => 'JF Filtration', + 'Hp' => 'HP', + 'Ярославский Завод Дизельной Аппаратуры', 'Язда' => 'ЯЗДА', + 'Prc' => 'PRC', + 'Sf', 'Sf Filter' => 'SF Filter', + 'Ga' => 'GA', + 'Kentek' => 'KENTEK', + 'Cgr Ghinassi', 'Gb Group' => 'Ghinassi', + 'Doosan' => 'DOOSAN', + 'Dressta' => 'DRESSTA', + 'Ammann' => 'AMMANN', + 'Blumaq' => 'BLUMAQ', + 'Deutz' => 'DEUTZ', + 'Daewoo' => 'DAEWOO', + 'Furukawa' => 'FURUKAWA', + 'Niipon' => 'NIIPON', + 'Cargo' => 'CARGO', + 'Wps' => 'WPS', + 'Zaufer' => 'ZAUFER', + 'Handok' => 'HANDOK', + 'Fg Wilson', 'F.G.Wilson', 'F.g.wilson' => 'F.G.WILSON', + 'Racor' => 'RACOR', + 'Jcb' => 'JCB', + 'Auger' => 'AUGER', + 'Ekka' => 'EKKA', + 'Berco' => 'BERCO', + 'Bosch Rexroth' => 'BOSCH REXROTH', + 'Byg' => 'BYG', + 'Cgr' => 'CGR', + 'Dayco' => 'DAYCO', + 'Dcf' => 'DCF', + 'Dunlop' => 'DUNLOP', + 'Febi' => 'FeBi', + 'Fleetguard' => 'FLEETGUARD', + 'Foton' => 'FOTON', + 'Getlf' => 'GETLF', + 'Hidromek' => 'HIDROMEK', + 'Mann&Hummel', 'Mann&hummel' => 'MANN&HUMMEL', + 'Niitsu' => 'NIITSU', + 'Nok' => 'NOK', + 'Nsk' => 'NSK', + 'Ntn' => 'NTN', + 'Orme' => 'ORME', + 'Parker-racor', 'Parker-Racor' => 'PARKER-RACOR', + 'Sanz' => 'SANZ', + 'Sem' => 'SEM', + 'Separ' => 'SEPAR', + 'Shaanxi' => 'SHAANXI', + 'Shell' => 'SHELL', + 'Skf' => 'SKF', + 'Ssp' => 'SSP', + 'Sst' => 'SST', + 'Stal' => 'STAL', + 'Steyr' => 'STEYR', + 'Toyota' => 'TOYOTA', + 'Tt' => 'Tesla Technics', + 'Vag' => 'VAG', + 'Wix', 'Wix Filters' => 'WIX', + 'Yuchai' => 'Yuchai', + 'Zexel' => 'ZEXEL', + 'Dongil' => 'DONGIL', + 'Sanlux' => 'SANLUX', + 'Amt' => 'AMT', + 'Dt' => 'DT', + 'Pramo' => 'PRAMO', + 'Haffen' => 'HAFFEN', + 'Mfilter' => 'MFILTER', + 'Hengst' => 'HENGST', + 'Sofima' => 'SOFIMA', + 'Dolz' => 'DOLZ', + 'Element' => 'ELEMENT', + 'Sardes' => 'SARDES', + 'Seintex' => 'SEINTEX', + 'Patron' => 'PATRON', + 'Lpr' => 'LPR', + 'Kaichin' => 'KAICHIN', + 'Union' => 'UNION', + 'Rb-exide', 'Rb-Exide' => 'RB-EXIDE', + 'Kurin' => 'KURIN', + 'Topfils' => 'TOPFILS', + 'Knor' => 'KNOR', + 'Megapower' => 'MEGAPOWER', + 'Red Filter', 'Redfilter' => 'REDFilter', + 'Skania' => 'SKANIA', + 'Sct' => 'SCT', + 'Kolbenschmidt' => 'KOLBENSCHMIDT', + 'Big Filter' => 'BIG Filter', + 'Alco Filter' => 'ALCO Filter', + default => $prod + }; + + // Запись аналогов в буфер $_row['oemn'] = array_walk($analogs, 'trim'); // Инициализация буфера поставки @@ -660,6 +1004,9 @@ class Supply extends Product implements ProductInterface, OfferInterface // Перенос данных в буфер (существующий в базе данных дубликат) $supply->setAttributes($vars, false); + // Запись ребра: АККАУНТ -> ПОСТАВКА + (new AccountEdgeSupply)->write($account->readId(), $supply->readId(), 'import'); + // Перезапись существующего документа $supply->update(); @@ -672,7 +1019,7 @@ class Supply extends Product implements ProductInterface, OfferInterface // Проверка не пройдена // Добавление ошибок - foreach ($supply->errors as $attribute => $error) $this->addError($attribute, $error); + foreach ($supply->errors as $attribute => $error) $supply->addError($attribute, $error); // Запись статуса об ошибке $error = true; @@ -689,7 +1036,7 @@ class Supply extends Product implements ProductInterface, OfferInterface // } // Добавление в группу аналогов - $group->writeProduct($product); + // $group->writeProduct($product); } return !$error; @@ -698,12 +1045,12 @@ class Supply extends Product implements ProductInterface, OfferInterface // Запись поставки $create($article, (int) $amount); - foreach ($analogs as $_supply) { - // Перебор аналогов (если найдены) + // foreach ($analogs as $_supply) { + // // Перебор аналогов (если найдены) - // Запись поставки - $create((string) $_supply); - } + // // Запись поставки + // $create((string) $_supply); + // } } } } @@ -712,26 +1059,14 @@ class Supply extends Product implements ProductInterface, OfferInterface if (count($imported) > 0) { // Успешно записана минимум 1 поставка - // Инициализация инстанции импорта - $import = new Import; + foreach ($imported as $supply) { + // Перебор импортированных поставок - $import->file = $path; - $import->name = $filename; + // Инициализация инстанции импорта + $import = Import::searchByFile($file); - if ($import->save()) { - // Инстанция импорта успешно загружена - - if (WarehouseEdgeImport::write(Warehouse::collectionName() . "/$warehouse", $import->readId(), data: ['type' => 'loaded'])) { - // Записано ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВОК - - // Запись в журнал инстанции импорта - $import->journal('connect_with_warehouse', [ - 'target' => Warehouse::collectionName() . "/$warehouse" - ]); - } - - foreach ($imported as $supply) { - // Перебор импортированных поставок + if (isset($import)) { + // Найдена интанция импорта if (ImportEdgeSupply::write($import->readId(), $supply->readId(), data: ['type' => 'imported', 'vrsn' => ImportEdgeSupply::searchMaxVersion($supply) + 1])) { // Записано ребро: ИНСТАНЦИЯ ПОСТАВОК -> ПОСТАВКА @@ -745,23 +1080,25 @@ class Supply extends Product implements ProductInterface, OfferInterface } } - // Макрос действий после импорта - static::afterImportExcel($created, $updated); + // Запись статуса + $file->stts = 'loaded'; + + if ($file->update() > 0) { + // Удалось записать в базу данных + + // Запись в журнал + $file->journal('loaded'); + } + + // Макрос действий после загрузки + static::afterLoadExcel($account, $created, $updated); // Удаление (важно именно задать null для формы в представлении) - $this->file_excel = null; - - return true; + $supply->file_excel = null; } // Запись ошибки - $this->addError('errors', 'Не пройдена проверка параметров'); - - // Макрос действий после импорта - static::afterImportExcel($created, $updated); - - // Удаление (важно именно задать null для формы в представлении) - $this->file_excel = null; + $supply->addError('errors', 'Не пройдена проверка параметров'); return false; } @@ -974,16 +1311,59 @@ class Supply extends Product implements ProductInterface, OfferInterface } /** - * Вызывается после загрузки поставок из excel-документа + * Вызывается после загрузки excel-документа на сервер * + * @param static|null $account Аккаунт + * @param string|int $warehouse Склад + * + * @return bool Статус выполнения + */ + public static function afterImportExcel(Account|int $account = null, string|int $warehouse = 'неизвестен'): bool + { + // Инициализация аккаунта + $account = Account::initAccount($account); + + // Отправка уведомления о загрузке + $save = Notification::_write("Загружены товары для склада \"$warehouse\"", account: $account->_key); + + // Инициализация периода + $period = new DatePeriod(new DateTime('@' . strtotime("00:00:00")), new DateInterval('PT5M'), new DateTime('@' . strtotime("next day 00:00:00"))); + + foreach($period as $date){ + // Перебор периодов + + if (($converted = $date->format('U')) > $time = time()) { + // Найден интервал из будущего времени (предполагается, что ближайший по причине остановки выполнения далее) + + // Запись даты + $date = (new DateTime('@' . ($converted - $time)))->format('H:i:s'); + + break; + } + } + + if ($date instanceof DateTime) $date = '5:00'; + + // Отправка уведомления об обработке + $handle = Notification::_write("Следующее обновление товаров начнётся через $date", account: $account->_key); + + return $save && $handle; + } + + /** + * Вызывается после загрузки поставок из excel-документа в базу данных + * + * @param static|null $account Аккаунт * @param int $created Количество созданных документов * @param int $updated Количество обновлённых документов + * + * @return bool Статус выполнения */ - public static function afterImportExcel(int $created = 0, int $updated = 0): bool + public static function afterLoadExcel(Account|int $account = null, int $created = 0, int $updated = 0): bool { // Инициализация параметров $model = new Notification; - $account = yii::$app->user->identity; + $account = Account::initAccount($account); // Инициализация часового пояса preg_match_all('/UTC([\+\-0-9:]*)/', $account->zone ?? Settings::searchActive()['timezone_default'] ?? 'UTC+3', $timezone); @@ -993,8 +1373,9 @@ class Supply extends Product implements ProductInterface, OfferInterface $date = (new DateTime('now', new DateTimeZone($timezone)))->format('H:i d.m.Y'); // Настройка - $model->text = yii::$app->controller->renderPartial('@app/views/notification/system/afterImportExcel', compact('created', 'updated', 'date')); + $model->text = yii::$app->controller->renderPartial('@app/views/notification/system/afterLoadExcel', compact('created', 'updated', 'date')); $model->type = $model::TYPE_NOTICE; + $model->account = $account->readId(); // Отправка return (bool) $model->write(); diff --git a/mirzaev/skillparts/system/models/connection/Dellin.php b/mirzaev/skillparts/system/models/connection/Dellin.php index 7baba3d..d0ad2d1 100644 --- a/mirzaev/skillparts/system/models/connection/Dellin.php +++ b/mirzaev/skillparts/system/models/connection/Dellin.php @@ -67,7 +67,7 @@ class Dellin extends Model * * @param int $from Идентификатор терминала Dellin * @param int $to Идентификатор терминала Dellin - * @param int $weight Вес (г) + * @param int $weight Вес (кг) * @param int $x Ширина (cм) * @param int $y Высота (cм) * @param int $z Длинна (cм) @@ -101,9 +101,6 @@ class Dellin extends Model $y /= 100; $z /= 100; - // Конвертация из граммов в килограммы - $weight /= 1000; - // Вычисление самой крупной стороны, так как ДеловыеЛинии имеют ограничения на все три поля и у длинны оно больше всех if ($x > $z && $x > $y) { // "X" больше всех @@ -295,15 +292,19 @@ class Dellin extends Model if (is_null($account)) { // Данные аккаунта не переданы - if (yii::$app->user->isGuest) { - // Аккаунт не аутентифицирован + if (isset(yii::$app->user)) { + if (yii::$app->user->isGuest) { + // Аккаунт не аутентифицирован - return 0; + return 0; + } else { + // Аккаунт аутентифицирован + + // Инициализация + $account = yii::$app->user->identity; + } } else { - // Аккаунт аутентифицирован - - // Инициализация - $account = yii::$app->user->identity; + return 0; } } else { if (is_int($account)) { diff --git a/mirzaev/skillparts/system/views/account/index.php b/mirzaev/skillparts/system/views/account/index.php index 20bab7f..3086d2a 100644 --- a/mirzaev/skillparts/system/views/account/index.php +++ b/mirzaev/skillparts/system/views/account/index.php @@ -70,7 +70,7 @@ use app\models\AccountForm; = $form->field($model, 'mail', ['enableLabel' => false, 'options' => ['class' => 'mb-2'], 'inputOptions' => ['class' => 'form-control button_clean'], 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']])->textInput(['autofocus' => true, 'placeholder' => $model->getAttributeLabel('mail')]) ?> = $form->field($model, 'pswd', ['enableLabel' => false, 'inputOptions' => ['class' => 'form-control button_clean'], 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']])->passwordInput(['placeholder' => $model->getAttributeLabel('pswd')]) ?> -
~$days дн
@@ -21,22 +21,22 @@ $this->title = 'SkillParts';