diff --git a/README.md b/README.md index 4908bb86..3d2ea905 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ The plugin integrates card component (Secured Fields) using Adyen Checkout for a - Twint - Vipps - WeChat Pay + - Open Banking / Pay by Bank ## API Library This module is using the Adyen APIs Library for PHP for all (API) connections to Adyen. diff --git a/composer.json b/composer.json index 7e0dbbdc..6bdc9d9a 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ } ], "description": "Official Shopware 6 Plugin to connect to Payment Service Provider Adyen", - "version": "3.10.0", + "version": "3.10.1", "type": "shopware-platform-plugin", "license": "MIT", "require": { diff --git a/composer.lock b/composer.lock index 80bc73b4..9a05a71e 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": "341e41ebb141071a74a398bb0f6f0f09", + "content-hash": "42425a40bd20f2aed01b1cb5027f0945", "packages": [ { "name": "adyen/php-api-library", @@ -152,16 +152,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.258.10", + "version": "3.261.5", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337" + "reference": "1fb31e97fa4da90935a87e321c07662a5827ee2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337", - "reference": "e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1fb31e97fa4da90935a87e321c07662a5827ee2d", + "reference": "1fb31e97fa4da90935a87e321c07662a5827ee2d", "shasum": "" }, "require": { @@ -240,9 +240,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.258.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.261.5" }, - "time": "2023-02-14T19:21:16+00:00" + "time": "2023-03-06T19:20:40+00:00" }, { "name": "brick/math", @@ -4045,16 +4045,16 @@ }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", "shasum": "" }, "require": { @@ -4069,7 +4069,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "graylog2/gelf-php": "^1.4.2", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -4131,7 +4131,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" }, "funding": [ { @@ -4143,7 +4143,7 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" + "time": "2022-07-24T11:55:47+00:00" }, { "name": "mtdowling/jmespath.php", @@ -5583,20 +5583,20 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v6.2.9", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135" + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/dcfac94d6bdcf95c126e8ccac2104917c7c8f135", - "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", + "doctrine/annotations": "^1.0|^2.0", "php": ">=7.2.5", "symfony/config": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", @@ -5654,11 +5654,10 @@ "controllers" ], "support": { - "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.9" + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" }, "abandoned": "Symfony", - "time": "2022-11-01T17:17:13+00:00" + "time": "2023-02-24T14:57:12+00:00" }, { "name": "setasign/fpdi", @@ -5765,16 +5764,16 @@ }, { "name": "shopware/core", - "version": "6.4.19.0", + "version": "6.4.20.0", "source": { "type": "git", "url": "https://github.com/shopware/core.git", - "reference": "0dd2bab7c80520fd5c489281b0cd3dadf45fae3b" + "reference": "d5bd15a56b0f08e867f273d2c624871534195850" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shopware/core/zipball/0dd2bab7c80520fd5c489281b0cd3dadf45fae3b", - "reference": "0dd2bab7c80520fd5c489281b0cd3dadf45fae3b", + "url": "https://api.github.com/repos/shopware/core/zipball/d5bd15a56b0f08e867f273d2c624871534195850", + "reference": "d5bd15a56b0f08e867f273d2c624871534195850", "shasum": "" }, "require": { @@ -5816,6 +5815,7 @@ "league/flysystem-memory": "~1.0.2", "league/oauth2-server": "~8.3.2", "marc1706/fast-image-size": "1.1.6", + "monolog/monolog": "~2.8.0", "nyholm/psr7": "1.4.0", "php": "^7.4.3 || ^8.0", "psr/cache": "1.0.1", @@ -5882,7 +5882,6 @@ "zircote/swagger-php": "~3.3.6" }, "require-dev": { - "bheller/images-generator": "~1.0.1", "brianium/paratest": "^6.2", "dms/phpunit-arraysubset-asserts": "^0.2.1", "ext-tokenizer": "*", @@ -5936,23 +5935,23 @@ "docs": "https://developer.shopware.com", "forum": "https://forum.shopware.com", "issues": "https://issues.shopware.com", - "source": "https://github.com/shopware/core/tree/v6.4.19.0", + "source": "https://github.com/shopware/core/tree/v6.4.20.0", "wiki": "https://developer.shopware.com" }, - "time": "2023-02-07T09:31:47+00:00" + "time": "2023-02-22T03:09:31+00:00" }, { "name": "shopware/storefront", - "version": "6.4.19.0", + "version": "6.4.20.0", "source": { "type": "git", "url": "https://github.com/shopware/storefront.git", - "reference": "56e582417ff69936687bcba0fdce83885966f13f" + "reference": "bf6af57de93e63a73bc73c7825b6112c6e262c75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shopware/storefront/zipball/56e582417ff69936687bcba0fdce83885966f13f", - "reference": "56e582417ff69936687bcba0fdce83885966f13f", + "url": "https://api.github.com/repos/shopware/storefront/zipball/bf6af57de93e63a73bc73c7825b6112c6e262c75", + "reference": "bf6af57de93e63a73bc73c7825b6112c6e262c75", "shasum": "" }, "require": { @@ -5962,7 +5961,7 @@ "padaliyajay/php-autoprefixer": "1.3", "php": "^7.4.3 || ^8.0", "scssphp/scssphp": "v1.11.0", - "shopware/core": "v6.4.19.0", + "shopware/core": "v6.4.20.0", "symfony/cache": "~5.4.0", "symfony/cache-contracts": "v2.5.2", "symfony/config": "~5.4.0", @@ -6014,10 +6013,10 @@ "docs": "https://developer.shopware.com", "forum": "https://forum.shopware.com", "issues": "https://issues.shopware.com", - "source": "https://github.com/shopware/storefront/tree/v6.4.19.0", + "source": "https://github.com/shopware/storefront/tree/v6.4.20.0", "wiki": "https://developer.shopware.com" }, - "time": "2023-02-07T09:31:52+00:00" + "time": "2023-02-22T03:09:35+00:00" }, { "name": "shopwarelabs/dompdf", @@ -6268,16 +6267,16 @@ }, { "name": "symfony/amqp-messenger", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/amqp-messenger.git", - "reference": "a233116e6f01b94e83ea05d413d6894cde007b85" + "reference": "35257385cfc0b1478fcc09471a9c25cacbcf59ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/a233116e6f01b94e83ea05d413d6894cde007b85", - "reference": "a233116e6f01b94e83ea05d413d6894cde007b85", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/35257385cfc0b1478fcc09471a9c25cacbcf59ab", + "reference": "35257385cfc0b1478fcc09471a9c25cacbcf59ab", "shasum": "" }, "require": { @@ -6317,7 +6316,7 @@ "description": "Symfony AMQP extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/amqp-messenger/tree/v5.4.19" + "source": "https://github.com/symfony/amqp-messenger/tree/v5.4.21" }, "funding": [ { @@ -6333,20 +6332,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/asset", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "64738384c91e25ad59a66e42b3b0dc0967ca03e3" + "reference": "1504b6773c6b90118f9871e90a67833b5d1dca3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/64738384c91e25ad59a66e42b3b0dc0967ca03e3", - "reference": "64738384c91e25ad59a66e42b3b0dc0967ca03e3", + "url": "https://api.github.com/repos/symfony/asset/zipball/1504b6773c6b90118f9871e90a67833b5d1dca3c", + "reference": "1504b6773c6b90118f9871e90a67833b5d1dca3c", "shasum": "" }, "require": { @@ -6391,7 +6390,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v5.4.19" + "source": "https://github.com/symfony/asset/tree/v5.4.21" }, "funding": [ { @@ -6407,20 +6406,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/cache", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e9147c89fdfdc5d5ef798bb7193f23726ad609f5" + "reference": "32cab695bf99c63aff7d27ac67919944c00530ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e9147c89fdfdc5d5ef798bb7193f23726ad609f5", - "reference": "e9147c89fdfdc5d5ef798bb7193f23726ad609f5", + "url": "https://api.github.com/repos/symfony/cache/zipball/32cab695bf99c63aff7d27ac67919944c00530ed", + "reference": "32cab695bf99c63aff7d27ac67919944c00530ed", "shasum": "" }, "require": { @@ -6488,7 +6487,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.19" + "source": "https://github.com/symfony/cache/tree/v5.4.21" }, "funding": [ { @@ -6504,7 +6503,7 @@ "type": "tidelift" } ], - "time": "2023-01-19T09:49:58+00:00" + "time": "2023-02-21T12:11:13+00:00" }, { "name": "symfony/cache-contracts", @@ -6587,16 +6586,16 @@ }, { "name": "symfony/config", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179" + "reference": "2a6b1111d038adfa15d52c0871e540f3b352d1e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9bd60843443cda9638efdca7c41eb82ed0026179", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179", + "url": "https://api.github.com/repos/symfony/config/zipball/2a6b1111d038adfa15d52c0871e540f3b352d1e4", + "reference": "2a6b1111d038adfa15d52c0871e540f3b352d1e4", "shasum": "" }, "require": { @@ -6646,7 +6645,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.19" + "source": "https://github.com/symfony/config/tree/v5.4.21" }, "funding": [ { @@ -6662,20 +6661,20 @@ "type": "tidelift" } ], - "time": "2023-01-08T13:23:55+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/console", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", + "url": "https://api.github.com/repos/symfony/console/zipball/c77433ddc6cdc689caf48065d9ea22ca0853fbd9", + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9", "shasum": "" }, "require": { @@ -6745,7 +6744,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.19" + "source": "https://github.com/symfony/console/tree/v5.4.21" }, "funding": [ { @@ -6761,20 +6760,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-25T16:59:41+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "40e9ffe230aed8518c80816da27c80433ec220c7" + "reference": "8b4360bf8ce9a917ef8796c5e6065a185d8722bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/40e9ffe230aed8518c80816da27c80433ec220c7", - "reference": "40e9ffe230aed8518c80816da27c80433ec220c7", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/8b4360bf8ce9a917ef8796c5e6065a185d8722bd", + "reference": "8b4360bf8ce9a917ef8796c5e6065a185d8722bd", "shasum": "" }, "require": { @@ -6824,7 +6823,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v5.4.19" + "source": "https://github.com/symfony/debug-bundle/tree/v5.4.21" }, "funding": [ { @@ -6840,20 +6839,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.20", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8185ed0df129005a26715902f1a53bad0fe67102" + "reference": "5bc403d96622cf0091abd92c939eadecd4d07f94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8185ed0df129005a26715902f1a53bad0fe67102", - "reference": "8185ed0df129005a26715902f1a53bad0fe67102", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5bc403d96622cf0091abd92c939eadecd4d07f94", + "reference": "5bc403d96622cf0091abd92c939eadecd4d07f94", "shasum": "" }, "require": { @@ -6913,7 +6912,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.20" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.21" }, "funding": [ { @@ -6929,7 +6928,7 @@ "type": "tidelift" } ], - "time": "2023-01-27T11:08:11+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -7000,16 +6999,16 @@ }, { "name": "symfony/doctrine-messenger", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "11c4291794bd4996babb06975af3425d0bf61dbc" + "reference": "29aa49b02542503bbcc978c73625d05a9e4ffe4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/11c4291794bd4996babb06975af3425d0bf61dbc", - "reference": "11c4291794bd4996babb06975af3425d0bf61dbc", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/29aa49b02542503bbcc978c73625d05a9e4ffe4a", + "reference": "29aa49b02542503bbcc978c73625d05a9e4ffe4a", "shasum": "" }, "require": { @@ -7053,7 +7052,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.19" + "source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.21" }, "funding": [ { @@ -7069,20 +7068,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/dotenv", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "38190ba62566afa26ca723a795d0a004e061bd2a" + "reference": "c45210b1c43d2d24e263eefe72e8162754dd4c9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/38190ba62566afa26ca723a795d0a004e061bd2a", - "reference": "38190ba62566afa26ca723a795d0a004e061bd2a", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/c45210b1c43d2d24e263eefe72e8162754dd4c9f", + "reference": "c45210b1c43d2d24e263eefe72e8162754dd4c9f", "shasum": "" }, "require": { @@ -7124,7 +7123,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.4.19" + "source": "https://github.com/symfony/dotenv/tree/v5.4.21" }, "funding": [ { @@ -7140,20 +7139,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "438ef3e5e6481244785da3ce8cf8f4e74e7f2822" + "reference": "56a94aa8cb5a5fbc411551d8d014a296b5456549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/438ef3e5e6481244785da3ce8cf8f4e74e7f2822", - "reference": "438ef3e5e6481244785da3ce8cf8f4e74e7f2822", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/56a94aa8cb5a5fbc411551d8d014a296b5456549", + "reference": "56a94aa8cb5a5fbc411551d8d014a296b5456549", "shasum": "" }, "require": { @@ -7195,7 +7194,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.19" + "source": "https://github.com/symfony/error-handler/tree/v5.4.21" }, "funding": [ { @@ -7211,20 +7210,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c" + "reference": "f0ae1383a8285dfc6752b8d8602790953118ff5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abf49cc084c087d94b4cb939c3f3672971784e0c", - "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f0ae1383a8285dfc6752b8d8602790953118ff5a", + "reference": "f0ae1383a8285dfc6752b8d8602790953118ff5a", "shasum": "" }, "require": { @@ -7280,7 +7279,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.19" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.21" }, "funding": [ { @@ -7296,7 +7295,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -7379,16 +7378,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8" + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/648bfaca6a494f3e22378123bcee2894045dc9d8", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", "shasum": "" }, "require": { @@ -7423,7 +7422,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.19" + "source": "https://github.com/symfony/filesystem/tree/v5.4.21" }, "funding": [ { @@ -7439,20 +7438,20 @@ "type": "tidelift" } ], - "time": "2023-01-14T19:14:44+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/finder", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6071aebf810ad13fe8200c224f36103abb37cf1f" + "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6071aebf810ad13fe8200c224f36103abb37cf1f", - "reference": "6071aebf810ad13fe8200c224f36103abb37cf1f", + "url": "https://api.github.com/repos/symfony/finder/zipball/078e9a5e1871fcfe6a5ce421b539344c21afef19", + "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19", "shasum": "" }, "require": { @@ -7486,7 +7485,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.19" + "source": "https://github.com/symfony/finder/tree/v5.4.21" }, "funding": [ { @@ -7502,20 +7501,20 @@ "type": "tidelift" } ], - "time": "2023-01-14T19:14:44+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "a208ee578000f9dedcb50a9784ec7ff8706a7bf1" + "reference": "87623353dea3044c9d34382ffc4c5729cf676c90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a208ee578000f9dedcb50a9784ec7ff8706a7bf1", - "reference": "a208ee578000f9dedcb50a9784ec7ff8706a7bf1", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/87623353dea3044c9d34382ffc4c5729cf676c90", + "reference": "87623353dea3044c9d34382ffc4c5729cf676c90", "shasum": "" }, "require": { @@ -7637,7 +7636,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v5.4.19" + "source": "https://github.com/symfony/framework-bundle/tree/v5.4.21" }, "funding": [ { @@ -7653,20 +7652,20 @@ "type": "tidelift" } ], - "time": "2023-01-10T17:40:25+00:00" + "time": "2023-02-23T09:17:25+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.20", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0435363362a47c14e9cf50663cb8ffbf491875a" + "reference": "3bb6ee5582366c4176d5ce596b380117c8200bbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0435363362a47c14e9cf50663cb8ffbf491875a", - "reference": "d0435363362a47c14e9cf50663cb8ffbf491875a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3bb6ee5582366c4176d5ce596b380117c8200bbf", + "reference": "3bb6ee5582366c4176d5ce596b380117c8200bbf", "shasum": "" }, "require": { @@ -7713,7 +7712,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.20" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.21" }, "funding": [ { @@ -7729,20 +7728,20 @@ "type": "tidelift" } ], - "time": "2023-01-29T11:11:52+00:00" + "time": "2023-02-17T21:35:35+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.20", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "aaeec341582d3c160cc9ecfa8b2419ba6c69954e" + "reference": "09c19fc7e4218fbcf73fe0330eea38d66064b775" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aaeec341582d3c160cc9ecfa8b2419ba6c69954e", - "reference": "aaeec341582d3c160cc9ecfa8b2419ba6c69954e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/09c19fc7e4218fbcf73fe0330eea38d66064b775", + "reference": "09c19fc7e4218fbcf73fe0330eea38d66064b775", "shasum": "" }, "require": { @@ -7751,7 +7750,7 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^4.4|^5.0|^6.0", "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16" @@ -7825,7 +7824,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.20" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.21" }, "funding": [ { @@ -7841,20 +7840,20 @@ "type": "tidelift" } ], - "time": "2023-02-01T08:18:48+00:00" + "time": "2023-02-28T13:19:09+00:00" }, { "name": "symfony/inflector", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "dee369ae64c7a29427e1600695067dfd90a65ca1" + "reference": "d56964e2b19253ba331a829c20d911dd27aa61b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/dee369ae64c7a29427e1600695067dfd90a65ca1", - "reference": "dee369ae64c7a29427e1600695067dfd90a65ca1", + "url": "https://api.github.com/repos/symfony/inflector/zipball/d56964e2b19253ba331a829c20d911dd27aa61b6", + "reference": "d56964e2b19253ba331a829c20d911dd27aa61b6", "shasum": "" }, "require": { @@ -7897,7 +7896,7 @@ "words" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.4.19" + "source": "https://github.com/symfony/inflector/tree/v5.4.21" }, "funding": [ { @@ -7914,20 +7913,20 @@ } ], "abandoned": "EnglishInflector from the String component", - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/intl", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "f378eb62448dfea67071f9f43529d3a6ad7e0bc8" + "reference": "32c2d958b88f5c7f0b080774d7d15d4c87769bc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/f378eb62448dfea67071f9f43529d3a6ad7e0bc8", - "reference": "f378eb62448dfea67071f9f43529d3a6ad7e0bc8", + "url": "https://api.github.com/repos/symfony/intl/zipball/32c2d958b88f5c7f0b080774d7d15d4c87769bc8", + "reference": "32c2d958b88f5c7f0b080774d7d15d4c87769bc8", "shasum": "" }, "require": { @@ -7986,7 +7985,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v5.4.19" + "source": "https://github.com/symfony/intl/tree/v5.4.21" }, "funding": [ { @@ -8002,20 +8001,20 @@ "type": "tidelift" } ], - "time": "2023-01-11T13:51:47+00:00" + "time": "2023-02-17T21:35:35+00:00" }, { "name": "symfony/lock", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "14b8dfe4df7c3e59e2d3e6a0dd50bb2101eced08" + "reference": "963767e0a2d9caf150e7713fbf19806edaa5a80a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/14b8dfe4df7c3e59e2d3e6a0dd50bb2101eced08", - "reference": "14b8dfe4df7c3e59e2d3e6a0dd50bb2101eced08", + "url": "https://api.github.com/repos/symfony/lock/zipball/963767e0a2d9caf150e7713fbf19806edaa5a80a", + "reference": "963767e0a2d9caf150e7713fbf19806edaa5a80a", "shasum": "" }, "require": { @@ -8065,7 +8064,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v5.4.19" + "source": "https://github.com/symfony/lock/tree/v5.4.21" }, "funding": [ { @@ -8081,20 +8080,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "66081dc01cfc04fdea08bbd253f44627ec5591dd" + "reference": "60c5f5a29399ff591fadd99da345a4a8bf048c41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/66081dc01cfc04fdea08bbd253f44627ec5591dd", - "reference": "66081dc01cfc04fdea08bbd253f44627ec5591dd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/60c5f5a29399ff591fadd99da345a4a8bf048c41", + "reference": "60c5f5a29399ff591fadd99da345a4a8bf048c41", "shasum": "" }, "require": { @@ -8112,7 +8111,7 @@ "symfony/http-kernel": "<4.4" }, "require-dev": { - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client": "^4.4|^5.0|^6.0", "symfony/messenger": "^4.4|^5.0|^6.0" }, "type": "library", @@ -8141,7 +8140,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.4.19" + "source": "https://github.com/symfony/mailer/tree/v5.4.21" }, "funding": [ { @@ -8157,20 +8156,20 @@ "type": "tidelift" } ], - "time": "2023-01-09T05:43:46+00:00" + "time": "2023-02-21T10:48:16+00:00" }, { "name": "symfony/messenger", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "47859baa5f47cb9d52aff4409ba40b24b17c5f52" + "reference": "e6cc4c91b93b1969ba81b64e2f0cc4c9bfdbb3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/47859baa5f47cb9d52aff4409ba40b24b17c5f52", - "reference": "47859baa5f47cb9d52aff4409ba40b24b17c5f52", + "url": "https://api.github.com/repos/symfony/messenger/zipball/e6cc4c91b93b1969ba81b64e2f0cc4c9bfdbb3cf", + "reference": "e6cc4c91b93b1969ba81b64e2f0cc4c9bfdbb3cf", "shasum": "" }, "require": { @@ -8231,7 +8230,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v5.4.19" + "source": "https://github.com/symfony/messenger/tree/v5.4.21" }, "funding": [ { @@ -8247,20 +8246,20 @@ "type": "tidelift" } ], - "time": "2023-01-14T19:14:44+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/mime", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "a858429a9c704edc53fe057228cf9ca282ba48eb" + "reference": "ef57d9fb9cdd5e6b2ffc567d109865d10b6920cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/a858429a9c704edc53fe057228cf9ca282ba48eb", - "reference": "a858429a9c704edc53fe057228cf9ca282ba48eb", + "url": "https://api.github.com/repos/symfony/mime/zipball/ef57d9fb9cdd5e6b2ffc567d109865d10b6920cd", + "reference": "ef57d9fb9cdd5e6b2ffc567d109865d10b6920cd", "shasum": "" }, "require": { @@ -8315,7 +8314,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.19" + "source": "https://github.com/symfony/mime/tree/v5.4.21" }, "funding": [ { @@ -8331,20 +8330,20 @@ "type": "tidelift" } ], - "time": "2023-01-09T05:43:46+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "6b2732feb1335d588a902ca744cae9812cc0e7d3" + "reference": "f765276590bfe7b119e1494129fde9aa2a0c3058" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/6b2732feb1335d588a902ca744cae9812cc0e7d3", - "reference": "6b2732feb1335d588a902ca744cae9812cc0e7d3", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/f765276590bfe7b119e1494129fde9aa2a0c3058", + "reference": "f765276590bfe7b119e1494129fde9aa2a0c3058", "shasum": "" }, "require": { @@ -8399,7 +8398,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.19" + "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.21" }, "funding": [ { @@ -8415,7 +8414,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-21T12:28:57+00:00" }, { "name": "symfony/monolog-bundle", @@ -8500,16 +8499,16 @@ }, { "name": "symfony/options-resolver", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b03c99236445492f20c61666e8f7e5d388b078e5" + "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b03c99236445492f20c61666e8f7e5d388b078e5", - "reference": "b03c99236445492f20c61666e8f7e5d388b078e5", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", + "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", "shasum": "" }, "require": { @@ -8549,7 +8548,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.19" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.21" }, "funding": [ { @@ -8565,20 +8564,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/password-hasher", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "51b4b4d9e368fa6e31daa24866499781848c77d3" + "reference": "7ce4529b2b2ea7de3b6f344a1a41f58201999180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/51b4b4d9e368fa6e31daa24866499781848c77d3", - "reference": "51b4b4d9e368fa6e31daa24866499781848c77d3", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/7ce4529b2b2ea7de3b6f344a1a41f58201999180", + "reference": "7ce4529b2b2ea7de3b6f344a1a41f58201999180", "shasum": "" }, "require": { @@ -8622,7 +8621,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v5.4.19" + "source": "https://github.com/symfony/password-hasher/tree/v5.4.21" }, "funding": [ { @@ -8638,7 +8637,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/polyfill-ctype", @@ -9376,16 +9375,16 @@ }, { "name": "symfony/process", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1" + "reference": "d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ba874c9b636dbccf761e22ce750e88ec3f55e1", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1", + "url": "https://api.github.com/repos/symfony/process/zipball/d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd", + "reference": "d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd", "shasum": "" }, "require": { @@ -9418,7 +9417,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.19" + "source": "https://github.com/symfony/process/tree/v5.4.21" }, "funding": [ { @@ -9434,20 +9433,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/property-access", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "20fcf370aed6b2b4a2d8170fa23d2d07250e94ab" + "reference": "bbd4442bfbdf3992550772539ba743d6d834534f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/20fcf370aed6b2b4a2d8170fa23d2d07250e94ab", - "reference": "20fcf370aed6b2b4a2d8170fa23d2d07250e94ab", + "url": "https://api.github.com/repos/symfony/property-access/zipball/bbd4442bfbdf3992550772539ba743d6d834534f", + "reference": "bbd4442bfbdf3992550772539ba743d6d834534f", "shasum": "" }, "require": { @@ -9499,7 +9498,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.19" + "source": "https://github.com/symfony/property-access/tree/v5.4.21" }, "funding": [ { @@ -9515,20 +9514,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/property-info", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "8ccf54bce2e2edbface1e99cb5a2560a290c9e2d" + "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/8ccf54bce2e2edbface1e99cb5a2560a290c9e2d", - "reference": "8ccf54bce2e2edbface1e99cb5a2560a290c9e2d", + "url": "https://api.github.com/repos/symfony/property-info/zipball/722737086d76b4edabfc2d50a48cebd4b8cd5546", + "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546", "shasum": "" }, "require": { @@ -9590,7 +9589,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v5.4.19" + "source": "https://github.com/symfony/property-info/tree/v5.4.21" }, "funding": [ { @@ -9606,20 +9605,20 @@ "type": "tidelift" } ], - "time": "2023-01-14T11:26:56+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "02dea4937f05236483ebc3ff97b91bb414111344" + "reference": "a4cf96f3acfa252503a216bea877478f9621c7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/02dea4937f05236483ebc3ff97b91bb414111344", - "reference": "02dea4937f05236483ebc3ff97b91bb414111344", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a4cf96f3acfa252503a216bea877478f9621c7c0", + "reference": "a4cf96f3acfa252503a216bea877478f9621c7c0", "shasum": "" }, "require": { @@ -9657,7 +9656,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.19" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.21" }, "funding": [ { @@ -9673,7 +9672,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9765,16 +9764,16 @@ }, { "name": "symfony/rate-limiter", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "0518d49441e74c89d30d1a40ab3af850533cd775" + "reference": "342acb2d23f6012f6150e7a8b167bf9cd931c0f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/0518d49441e74c89d30d1a40ab3af850533cd775", - "reference": "0518d49441e74c89d30d1a40ab3af850533cd775", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/342acb2d23f6012f6150e7a8b167bf9cd931c0f8", + "reference": "342acb2d23f6012f6150e7a8b167bf9cd931c0f8", "shasum": "" }, "require": { @@ -9815,7 +9814,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v5.4.19" + "source": "https://github.com/symfony/rate-limiter/tree/v5.4.21" }, "funding": [ { @@ -9831,20 +9830,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/redis-messenger", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/redis-messenger.git", - "reference": "b1334723b4bd1967a2405f35cc4f01bec0798b84" + "reference": "2de190754550d9243ec6998b1db6edf7fd88cddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/b1334723b4bd1967a2405f35cc4f01bec0798b84", - "reference": "b1334723b4bd1967a2405f35cc4f01bec0798b84", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/2de190754550d9243ec6998b1db6edf7fd88cddd", + "reference": "2de190754550d9243ec6998b1db6edf7fd88cddd", "shasum": "" }, "require": { @@ -9882,7 +9881,7 @@ "description": "Symfony Redis extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/redis-messenger/tree/v5.4.19" + "source": "https://github.com/symfony/redis-messenger/tree/v5.4.21" }, "funding": [ { @@ -9898,20 +9897,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/routing", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "df1b28f37c8e78912213c58ef6ab2f2037bbfdc5" + "reference": "2ea0f3049076e8ef96eab203a809d6b2332f0361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/df1b28f37c8e78912213c58ef6ab2f2037bbfdc5", - "reference": "df1b28f37c8e78912213c58ef6ab2f2037bbfdc5", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ea0f3049076e8ef96eab203a809d6b2332f0361", + "reference": "2ea0f3049076e8ef96eab203a809d6b2332f0361", "shasum": "" }, "require": { @@ -9972,7 +9971,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.19" + "source": "https://github.com/symfony/routing/tree/v5.4.21" }, "funding": [ { @@ -9988,20 +9987,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/security-core", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "76fe5a7c62a3f23a5d7b72a55529e94ae2c1ae07" + "reference": "aeb333053b9fca8554cdbdb00d451986d3e4386a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/76fe5a7c62a3f23a5d7b72a55529e94ae2c1ae07", - "reference": "76fe5a7c62a3f23a5d7b72a55529e94ae2c1ae07", + "url": "https://api.github.com/repos/symfony/security-core/zipball/aeb333053b9fca8554cdbdb00d451986d3e4386a", + "reference": "aeb333053b9fca8554cdbdb00d451986d3e4386a", "shasum": "" }, "require": { @@ -10065,7 +10064,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v5.4.19" + "source": "https://github.com/symfony/security-core/tree/v5.4.21" }, "funding": [ { @@ -10081,20 +10080,20 @@ "type": "tidelift" } ], - "time": "2023-01-24T10:56:59+00:00" + "time": "2023-02-17T10:07:35+00:00" }, { "name": "symfony/security-csrf", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "892dc11b003c0d3da377264bb3d5f178cb894944" + "reference": "776a538e5f20fb560a182f790979c71455694203" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/892dc11b003c0d3da377264bb3d5f178cb894944", - "reference": "892dc11b003c0d3da377264bb3d5f178cb894944", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/776a538e5f20fb560a182f790979c71455694203", + "reference": "776a538e5f20fb560a182f790979c71455694203", "shasum": "" }, "require": { @@ -10137,7 +10136,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v5.4.19" + "source": "https://github.com/symfony/security-csrf/tree/v5.4.21" }, "funding": [ { @@ -10153,20 +10152,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/serializer", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "2139fa01c19a764af81191d635b2b9302f4bafd8" + "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/2139fa01c19a764af81191d635b2b9302f4bafd8", - "reference": "2139fa01c19a764af81191d635b2b9302f4bafd8", + "url": "https://api.github.com/repos/symfony/serializer/zipball/e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", + "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", "shasum": "" }, "require": { @@ -10240,7 +10239,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v5.4.19" + "source": "https://github.com/symfony/serializer/tree/v5.4.21" }, "funding": [ { @@ -10256,7 +10255,7 @@ "type": "tidelift" } ], - "time": "2023-01-14T08:18:46+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/service-contracts", @@ -10339,16 +10338,16 @@ }, { "name": "symfony/stopwatch", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "bd2b066090fd6a67039371098fa25a84cb2679ec" + "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bd2b066090fd6a67039371098fa25a84cb2679ec", - "reference": "bd2b066090fd6a67039371098fa25a84cb2679ec", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f83692cd869a6f2391691d40a01e8acb89e76fee", + "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee", "shasum": "" }, "require": { @@ -10381,7 +10380,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.19" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.21" }, "funding": [ { @@ -10397,20 +10396,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/string", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb" + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb", + "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", "shasum": "" }, "require": { @@ -10467,7 +10466,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.19" + "source": "https://github.com/symfony/string/tree/v5.4.21" }, "funding": [ { @@ -10483,20 +10482,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-22T08:00:55+00:00" }, { "name": "symfony/translation", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "83d487b13b7fb4c0a6ad079f4e4c9b4525e1b695" + "reference": "6996affeea65705086939894b77110e9a7f80874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/83d487b13b7fb4c0a6ad079f4e4c9b4525e1b695", - "reference": "83d487b13b7fb4c0a6ad079f4e4c9b4525e1b695", + "url": "https://api.github.com/repos/symfony/translation/zipball/6996affeea65705086939894b77110e9a7f80874", + "reference": "6996affeea65705086939894b77110e9a7f80874", "shasum": "" }, "require": { @@ -10564,7 +10563,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.19" + "source": "https://github.com/symfony/translation/tree/v5.4.21" }, "funding": [ { @@ -10580,7 +10579,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/translation-contracts", @@ -10662,16 +10661,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "0526188cb886be64351454826fecc6d35356eaf1" + "reference": "bd1cad2b2fea04e24966c8b1f2b00710ebf26008" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/0526188cb886be64351454826fecc6d35356eaf1", - "reference": "0526188cb886be64351454826fecc6d35356eaf1", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bd1cad2b2fea04e24966c8b1f2b00710ebf26008", + "reference": "bd1cad2b2fea04e24966c8b1f2b00710ebf26008", "shasum": "" }, "require": { @@ -10684,7 +10683,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/console": "<5.3", - "symfony/form": "<5.3", + "symfony/form": "<5.4.21|>=6,<6.2.7", "symfony/http-foundation": "<5.3", "symfony/http-kernel": "<4.4", "symfony/translation": "<5.2", @@ -10699,7 +10698,7 @@ "symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^5.3|^6.0", + "symfony/form": "^5.4.21|^6.2.7", "symfony/http-foundation": "^5.3|^6.0", "symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/intl": "^4.4|^5.0|^6.0", @@ -10763,7 +10762,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v5.4.19" + "source": "https://github.com/symfony/twig-bridge/tree/v5.4.21" }, "funding": [ { @@ -10779,20 +10778,20 @@ "type": "tidelift" } ], - "time": "2023-01-09T05:43:46+00:00" + "time": "2023-02-23T17:08:09+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "286bd9e38b9bcb142f1eda0a75b0bbeb49ff34bd" + "reference": "875d0edfc8df7505c1993419882c4071fc28c477" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/286bd9e38b9bcb142f1eda0a75b0bbeb49ff34bd", - "reference": "286bd9e38b9bcb142f1eda0a75b0bbeb49ff34bd", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/875d0edfc8df7505c1993419882c4071fc28c477", + "reference": "875d0edfc8df7505c1993419882c4071fc28c477", "shasum": "" }, "require": { @@ -10852,7 +10851,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v5.4.19" + "source": "https://github.com/symfony/twig-bundle/tree/v5.4.21" }, "funding": [ { @@ -10868,20 +10867,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/validator", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "98582557a107e2db3a4e95e6dea0df8016dc246c" + "reference": "0ba987d705962a4f6571d31a8e1aed18ad2c9f55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/98582557a107e2db3a4e95e6dea0df8016dc246c", - "reference": "98582557a107e2db3a4e95e6dea0df8016dc246c", + "url": "https://api.github.com/repos/symfony/validator/zipball/0ba987d705962a4f6571d31a8e1aed18ad2c9f55", + "reference": "0ba987d705962a4f6571d31a8e1aed18ad2c9f55", "shasum": "" }, "require": { @@ -10965,7 +10964,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.4.19" + "source": "https://github.com/symfony/validator/tree/v5.4.21" }, "funding": [ { @@ -10981,20 +10980,20 @@ "type": "tidelift" } ], - "time": "2023-01-15T15:23:36+00:00" + "time": "2023-02-22T19:16:45+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b" + "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b", - "reference": "2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6c5ac3a1be8b849d59a1a77877ee110e1b55eb74", + "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74", "shasum": "" }, "require": { @@ -11054,7 +11053,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.19" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.21" }, "funding": [ { @@ -11070,20 +11069,20 @@ "type": "tidelift" } ], - "time": "2023-01-16T10:52:33+00:00" + "time": "2023-02-23T10:00:28+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6" + "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6", - "reference": "2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be74908a6942fdd331554b3cec27ff41b45ccad4", + "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4", "shasum": "" }, "require": { @@ -11127,7 +11126,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.19" + "source": "https://github.com/symfony/var-exporter/tree/v5.4.21" }, "funding": [ { @@ -11143,20 +11142,20 @@ "type": "tidelift" } ], - "time": "2023-01-12T16:39:29+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5" + "reference": "3713e20d93e46e681e51605d213027e48dab3469" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3713e20d93e46e681e51605d213027e48dab3469", + "reference": "3713e20d93e46e681e51605d213027e48dab3469", "shasum": "" }, "require": { @@ -11202,7 +11201,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.19" + "source": "https://github.com/symfony/yaml/tree/v5.4.21" }, "funding": [ { @@ -11218,7 +11217,7 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:51:14+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { "name": "tecnickcom/tcpdf", @@ -11766,16 +11765,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -11816,9 +11815,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "phar-io/manifest", @@ -11933,23 +11932,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.24", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -11964,8 +11963,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -11998,7 +11997,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -12006,7 +12005,7 @@ "type": "github" } ], - "time": "2023-01-26T08:26:55+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -12251,16 +12250,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.3", + "version": "9.6.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", "shasum": "" }, "require": { @@ -12333,7 +12332,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" }, "funding": [ { @@ -12349,7 +12348,7 @@ "type": "tidelift" } ], - "time": "2023-02-04T13:37:15+00:00" + "time": "2023-02-27T13:06:37+00:00" }, { "name": "sebastian/cli-parser", @@ -13317,16 +13316,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", "shasum": "" }, "require": { @@ -13362,14 +13361,15 @@ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "time": "2023-02-22T23:07:41+00:00" }, { "name": "theseer/tokenizer", diff --git a/src/Controller/StoreApi/Donate/DonateController.php b/src/Controller/StoreApi/Donate/DonateController.php index 412d26ec..1fc09a03 100644 --- a/src/Controller/StoreApi/Donate/DonateController.php +++ b/src/Controller/StoreApi/Donate/DonateController.php @@ -99,7 +99,7 @@ public function donate( Request $request, SalesChannelContext $salesChannelContext ): JsonResponse { - $payload = $request->get('payload'); + $payload = $request->request->get('payload'); $orderId = $payload['orderId']; $currency = $payload['amount']['currency']; diff --git a/src/Controller/StoreApi/Payment/PaymentController.php b/src/Controller/StoreApi/Payment/PaymentController.php index 33f78d97..53b86479 100644 --- a/src/Controller/StoreApi/Payment/PaymentController.php +++ b/src/Controller/StoreApi/Payment/PaymentController.php @@ -33,9 +33,11 @@ use Adyen\Shopware\Service\PaymentResponseService; use Adyen\Shopware\Service\PaymentStatusService; use Adyen\Shopware\Service\Repository\OrderRepository; +use Petstore30\Order; use Psr\Log\LoggerInterface; use Shopware\Core\Checkout\Cart\Price\Struct\CalculatedPrice; use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionDefinition; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler; use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStates; use Shopware\Core\Checkout\Order\OrderEntity; use Shopware\Core\Checkout\Order\SalesChannel\OrderService; @@ -108,6 +110,10 @@ class PaymentController * @var ConfigurationService */ private $configurationService; + /** + * @var OrderTransactionStateHandler + */ + private $orderTransactionStateHandler; /** * StoreApiController constructor. @@ -137,7 +143,8 @@ public function __construct( StateMachineRegistry $stateMachineRegistry, LoggerInterface $logger, EntityRepositoryInterface $orderTransactionRepository, - ConfigurationService $configurationService + ConfigurationService $configurationService, + OrderTransactionStateHandler $orderTransactionStateHandler ) { $this->paymentMethodsService = $paymentMethodsService; $this->paymentDetailsService = $paymentDetailsService; @@ -151,6 +158,7 @@ public function __construct( $this->logger = $logger; $this->orderTransactionRepository = $orderTransactionRepository; $this->configurationService = $configurationService; + $this->orderTransactionStateHandler = $orderTransactionStateHandler; } /** @@ -265,7 +273,7 @@ function (Context $context) use ($orderTransactionId, $customFields) { */ public function getPaymentStatus(Request $request, SalesChannelContext $context): JsonResponse { - $orderId = $request->get('orderId'); + $orderId = $request->request->get('orderId'); if (empty($orderId)) { return new JsonResponse('Order ID not provided', 400); } @@ -315,7 +323,11 @@ public function getPaymentStatus(Request $request, SalesChannelContext $context) */ public function updatePaymentMethod(Request $request, SalesChannelContext $context): SetPaymentOrderRouteResponse { - $this->setPaymentMethod($request->get('paymentMethodId'), $request->get('orderId'), $context); + $this->setPaymentMethod( + $request->request->get('paymentMethodId'), + $request->request->get('orderId'), + $context + ); return new SetPaymentOrderRouteResponse(); } @@ -337,10 +349,8 @@ function () use ($order, $initialState, $orderId, $paymentMethodId, $context): v foreach ($order->getTransactions() as $transaction) { if ($transaction->getStateMachineState()->getTechnicalName() !== OrderTransactionStates::STATE_CANCELLED) { - $this->orderService->orderTransactionStateTransition( + $this->orderTransactionStateHandler->cancel( $transaction->getId(), - 'cancel', - new ParameterBag(), $context ); } @@ -385,7 +395,7 @@ public function cancelOrderTransaction( SalesChannelContext $salesChannelContext ): JsonResponse { $context = $salesChannelContext->getContext(); - $orderId = $request->get('orderId'); + $orderId = $request->request->get('orderId'); $order = $this->orderRepository->getOrder($orderId, $context, ['transactions']); $transaction = $order->getTransactions()->filterByState(OrderTransactionStates::STATE_IN_PROGRESS)->first(); diff --git a/src/Entity/Notification/NotificationEntity.php b/src/Entity/Notification/NotificationEntity.php index ad14ecf5..fa8ac264 100644 --- a/src/Entity/Notification/NotificationEntity.php +++ b/src/Entity/Notification/NotificationEntity.php @@ -24,6 +24,7 @@ namespace Adyen\Shopware\Entity\Notification; +use DateTimeInterface; use Shopware\Core\Framework\DataAbstractionLayer\Entity; use Shopware\Core\Framework\DataAbstractionLayer\EntityIdTrait; @@ -35,89 +36,89 @@ class NotificationEntity extends Entity public const NOTIFICATION_STATUS_PROCESSED = 'PROCESSED'; /** - * @var string + * @var string|null */ - protected $pspreference; + protected ?string $pspreference; /** - * @var string + * @var string|null */ - protected $originalReference; + protected ?string $originalReference; /** - * @var string + * @var string|null */ - protected $merchantReference; + protected ?string $merchantReference; /** - * @var string + * @var string|null */ - protected $eventCode; + protected ?string $eventCode; /** - * @var bool + * @var bool|null */ - protected $success; + protected ?bool $success; /** - * @var string + * @var string|null */ - protected $paymentMethod; + protected ?string $paymentMethod; /** - * @var string + * @var string|null */ - protected $amountValue; + protected ?string $amountValue; /** - * @var string + * @var string|null */ - protected $amountCurrency; + protected ?string $amountCurrency; /** - * @var string + * @var string|null */ - protected $reason; + protected ?string $reason; /** - * @var bool + * @var bool|null */ - protected $live; + protected ?bool $live; /** - * @var string + * @var string|null */ - protected $additionalData; + protected ?string $additionalData; /** * @var bool */ - protected $done; + protected bool $done; /** - * @var bool + * @var bool|null */ - protected $processing; + protected ?bool $processing; /** - * @var \DateTimeInterface|null + * @var DateTimeInterface|null */ - protected $scheduledProcessingTime; + protected ?DateTimeInterface $scheduledProcessingTime; /** * @var int|null */ - protected $errorCount; + protected ?int $errorCount; /** - * @var string + * @var string|null */ - protected $errorMessage; + protected ?string $errorMessage; /** - * @return string + * @return string|null */ - public function getPspreference(): string + public function getPspreference(): ?string { return $this->pspreference; } @@ -147,9 +148,9 @@ public function setOriginalReference(string $originalReference): void } /** - * @return string + * @return string|null */ - public function getMerchantReference(): string + public function getMerchantReference(): ?string { return $this->merchantReference; } @@ -163,9 +164,9 @@ public function setMerchantReference(string $merchantReference): void } /** - * @return string + * @return string|null */ - public function getEventCode(): string + public function getEventCode(): ?string { return $this->eventCode; } @@ -179,9 +180,9 @@ public function setEventCode(string $eventCode): void } /** - * @return bool + * @return bool|null */ - public function isSuccess(): bool + public function isSuccess(): ?bool { return $this->success; } @@ -195,9 +196,9 @@ public function setSuccess(bool $success): void } /** - * @return string + * @return string|null */ - public function getPaymentMethod(): string + public function getPaymentMethod(): ?string { return $this->paymentMethod; } @@ -211,9 +212,9 @@ public function setPaymentMethod(string $paymentMethod): void } /** - * @return string + * @return string|null */ - public function getAmountValue(): string + public function getAmountValue(): ?string { return $this->amountValue; } @@ -227,9 +228,9 @@ public function setAmountValue(string $amountValue): void } /** - * @return string + * @return string|null */ - public function getAmountCurrency(): string + public function getAmountCurrency(): ?string { return $this->amountCurrency; } @@ -243,9 +244,9 @@ public function setAmountCurrency(string $amountCurrency): void } /** - * @return string + * @return string|null */ - public function getReason(): string + public function getReason(): ?string { return $this->reason; } @@ -259,9 +260,9 @@ public function setReason(string $reason): void } /** - * @return bool + * @return bool|null */ - public function isLive(): bool + public function isLive(): ?bool { return $this->live; } @@ -275,9 +276,9 @@ public function setLive(bool $live): void } /** - * @return string + * @return string|null */ - public function getAdditionalData(): string + public function getAdditionalData(): ?string { return $this->additionalData; } @@ -307,9 +308,9 @@ public function setDone(bool $done): void } /** - * @return bool + * @return bool|null */ - public function getProcessing(): bool + public function getProcessing(): ?bool { return $this->processing; } @@ -323,17 +324,17 @@ public function setProcessing(bool $processing): void } /** - * @return \DateTimeInterface|null + * @return DateTimeInterface|null */ - public function getScheduledProcessingTime(): ?\DateTimeInterface + public function getScheduledProcessingTime(): ?DateTimeInterface { return $this->scheduledProcessingTime; } /** - * @param \DateTimeInterface $scheduleProcessingTime + * @param DateTimeInterface $scheduleProcessingTime */ - public function setScheduledProcessingTime(\DateTimeInterface $scheduleProcessingTime): void + public function setScheduledProcessingTime(DateTimeInterface $scheduleProcessingTime): void { $this->scheduledProcessingTime = $scheduleProcessingTime; } @@ -347,15 +348,15 @@ public function getErrorCount(): ?int } /** - * @param string $errorCount + * @param int $errorCount */ - public function setErrorCount(string $errorCount): void + public function setErrorCount(int $errorCount): void { $this->errorCount = $errorCount; } /** - * @return string + * @return string|null */ public function getErrorMessage(): ?string { diff --git a/src/Handlers/AbstractPaymentMethodHandler.php b/src/Handlers/AbstractPaymentMethodHandler.php index d65efd36..aa0a1ea6 100644 --- a/src/Handlers/AbstractPaymentMethodHandler.php +++ b/src/Handlers/AbstractPaymentMethodHandler.php @@ -59,6 +59,8 @@ use Shopware\Core\System\Currency\CurrencyCollection; use Shopware\Core\System\Currency\CurrencyEntity; use Adyen\Shopware\Exception\CurrencyNotFoundException; +use Shopware\Core\System\SalesChannel\Context\SalesChannelContextService; +use Shopware\Core\System\SalesChannel\SalesChannel\AbstractContextSwitchRoute; use Shopware\Core\System\SalesChannel\SalesChannelContext; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -183,6 +185,11 @@ abstract class AbstractPaymentMethodHandler implements AsynchronousPaymentHandle */ protected $session; + /** + * @var AbstractContextSwitchRoute + */ + private $contextSwitchRoute; + private $checkoutService; private $paymentResults = []; @@ -214,6 +221,7 @@ abstract class AbstractPaymentMethodHandler implements AsynchronousPaymentHandle * @param EntityRepositoryInterface $currencyRepository * @param EntityRepositoryInterface $productRepository * @param LoggerInterface $logger + * @param AbstractContextSwitchRoute $contextSwitchRoute */ public function __construct( ConfigurationService $configurationService, @@ -235,6 +243,7 @@ public function __construct( Session $session, EntityRepositoryInterface $currencyRepository, EntityRepositoryInterface $productRepository, + AbstractContextSwitchRoute $contextSwitchRoute, LoggerInterface $logger ) { $this->clientService = $clientService; @@ -257,6 +266,7 @@ public function __construct( $this->session = $session; $this->currencyRepository = $currencyRepository; $this->productRepository = $productRepository; + $this->contextSwitchRoute = $contextSwitchRoute; } abstract public static function getPaymentMethodCode(); @@ -350,6 +360,19 @@ public function pay( throw new AsyncPaymentFinalizeException($transactionId, $exception->getMessage()); } + /* + * Removes the giftcard payment method from the databag + * if the previous order was completed with a giftcard. + */ + $this->contextSwitchRoute->switchContext( + new RequestDataBag( + [ + SalesChannelContextService::PAYMENT_METHOD_ID => null + ] + ), + $salesChannelContext + ); + // Payment had no error, continue the process return new RedirectResponse($this->getAdyenReturnUrl($transaction, $salesChannelContext)); } @@ -606,10 +629,13 @@ protected function preparePaymentsRequest( $this->getProduct($orderLine->getProductId(), $salesChannelContext->getContext()) : null; - if (isset($product) && !is_null($product->getSeoUrls())) { - $hostname = $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl(); - $productPath = $product->getSeoUrls()->first()->getPathInfo(); - $productUrl = str_replace('//', '/', $hostname . $productPath); + // Add url for only real product and not for the custom cart items. + if (!is_null($product->getId())) { + $productUrl = sprintf( + "%s/detail/%s", + $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl(), + $product->getId() + ); } else { $productUrl = null; } @@ -741,7 +767,6 @@ private function getProduct(string $productId, Context $context): ProductEntity { $criteria = new Criteria([$productId]); - $criteria->addAssociation('seoUrls'); $criteria->addAssociation('cover'); $criteria->addAssociation('categories'); diff --git a/src/Resources/config/services/payment-handlers.xml b/src/Resources/config/services/payment-handlers.xml index 5ed8a435..dd71c542 100644 --- a/src/Resources/config/services/payment-handlers.xml +++ b/src/Resources/config/services/payment-handlers.xml @@ -25,6 +25,7 @@ + + + diff --git a/src/Resources/public/administration/js/adyen-payment-shopware6.js b/src/Resources/public/administration/js/adyen-payment-shopware6.js index 1fa25a05..595b823a 100644 --- a/src/Resources/public/administration/js/adyen-payment-shopware6.js +++ b/src/Resources/public/administration/js/adyen-payment-shopware6.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/bundles/adyenpaymentshopware6/",n(n.s="RgpO")}({"6MJt":function(e,t,n){},Fxip:function(e,t,n){var r=n("xIYV");r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);(0,n("SZ7m").default)("3299a05e",r,!0,{})},MTTW:function(e,t){var n=Shopware.Component,r=Shopware.Data.Criteria;n.extend("sw-entity-single-select-override","sw-entity-single-select",{props:{criteria:{type:Object,required:!1,default:function(){var e=new r(1,this.resultLimit);return e.addFilter(r.equals("stateMachine.technicalName","order_delivery.state")),e}}}})},RgpO:function(e,t,n){"use strict";n.r(t);n("UvA/");var r=Shopware,o=r.Component,i=r.Mixin;o.register("adyen-config-check-button",{template:'\n',inject:["adyenService"],mixins:[i.getByName("notification")],data:function(){return{isLoading:!1,isSaveSuccessful:!1}},computed:{pluginConfig:function(){for(var e=this.$parent;!e.hasOwnProperty("actualConfigData");)e=e.$parent;var t=e.currentSalesChannelId,n=e.actualConfigData;return Object.assign({},n.null,n[t])}},methods:{saveFinish:function(){this.isSaveSuccessful=!1},check:function(){var e=this;this.isLoading=!0,this.adyenService.check(this.pluginConfig).then((function(t){t.success?(e.isSaveSuccessful=!0,e.createNotificationSuccess({title:e.$tc("adyen.configTestTitle"),message:e.$tc("adyen.configTestSuccess")})):e.createNotificationError({title:e.$tc("adyen.configTestTitle"),message:e.$tc(t.message?t.message:"adyen.configTestFail")}),e.isLoading=!1}))}}});n("hnQ+");var a=Shopware,s=a.Component,c=a.Mixin;s.register("adyen-payment-capture",{template:'\n
\n
\n
\n {{ $tc(\'adyen.noCaptureRequests\') }}\n
\n
\n \n {{ $tc(\'adyen.sendCaptureRequest\') }}\n \n
\n \n \n \n
\n \n \n
\n
\n {{ $tc(\'adyen.error\') }}\n
\n
\n',inject:["adyenService","systemConfigApiService"],mixins:[c.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],showModal:!1,captureRequests:[],allowCapture:!0,captureEnabled:!1,errorOccurred:!1,isLoading:!0,showWidget:!1}},created:function(){this.createdComponent()},methods:{createdComponent:function(){var e=this;return this.systemConfigApiService.getValues("AdyenPaymentShopware6.config").then((function(t){e.captureEnabled=t["AdyenPaymentShopware6.config.manualCaptureEnabled"]||null})).finally((function(){e.isLoading=!1,e.showWidget=e.adyenService.isAdyenOrder(e.order)&&e.captureEnabled}))},openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onSubmitCapture:function(){var e=this;this.isLoading=!0,this.adyenService.capture(this.order.id).then((function(t){t.success?(e.fetchCaptureRequests(),e.createNotificationSuccess({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.captureSuccessful")})):e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoading=!1,e.showModal=!1}))},fetchCaptureRequests:function(){var e=this;this.isLoading=!0,this.adyenService.getCaptureRequests(this.order.id).then((function(t){e.captureRequests=t,e.isCaptureAllowed()})).catch((function(){e.errorOccurred=!0,e.captureRequests=[]})).finally((function(){e.isLoading=!1}))},isCaptureAllowed:function(){var e=this.getAuthorizedAdyenOrderTransaction(),t=this.captureRequests.filter((function(e){return"Pending Webhook"===e.status}));this.allowCapture=e.length>0&&0===t.length},getAuthorizedAdyenOrderTransaction:function(){return this.order.transactions.filter((function(e){var t="originalPspReference"in e.customFields,n="Authorized"===e.stateMachineState.name;return t&&n}))}},beforeMount:function(){this.fetchCaptureRequests()}});n("Fxip");function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n\n
\n
\n
\n {{ $tc(\'adyen.noRefundsCreated\') }}\n
\n
\n \n {{ $tc(\'sw-order.documentCard.labelCreateNew\') }}\n \n
\n \n
\n \n
\n \n
\n
\n \n \n
\n
\n {{ $tc(\'adyen.refundFetchError\') }}\n
\n \n{% endblock %}\n',inject:["adyenService"],mixins:[p.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],refundAmount:0,showModal:!1,refunds:[],allowRefund:!0,isLoadingTable:!0,errorOccurred:!1,isLoadingRefund:!1,showWidget:!0}},methods:{openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onRefund:function(){var e=this;this.isLoadingRefund=!0,this.adyenService.postRefund(this.order.id,this.refundAmount).then((function(t){t.success?(e.fetchRefunds(),e.createNotificationSuccess({title:e.$tc("adyen.refundTitle"),message:e.$tc("adyen.refundSuccessful")})):e.createNotificationError({title:e.$tc("adyen.refundTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.refundTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoadingRefund=!1,e.showModal=!1}))},fetchRefunds:function(){var e=this;this.isLoadingTable=!0,this.adyenService.getRefunds(this.order.id).then((function(t){e.refunds=t,e.isRefundAllowed()})).catch((function(){e.errorOccurred=!0,e.refunds=[]})).finally((function(){e.isLoadingTable=!1}))},isRefundAllowed:function(){var e,t=0,n=u(this.refunds);try{for(n.s();!(e=n.n()).done;){var r=e.value;"Failed"!==r.status&&(t+=r.rawAmount)}}catch(e){n.e(e)}finally{n.f()}this.allowRefund=this.order.amountTotal>t/100},isAdyenOrder:function(){for(var e=this.order.transactions,t=!1,n=0;n\n \n \n {% block sw_data_grid_body_columns %}\n {% block sw_data_grid_column_actions %}\n \n {% endblock %}\n {% endblock %}\n \n

{{ $tc(\'adyen.noNotificationsReceived\') }}

\n
\n\n',inject:["adyenService"],mixins:[m.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{notifications:[],columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"eventCode",label:this.$tc("adyen.columnHeaders.event")},{property:"success",label:this.$tc("adyen.columnHeaders.success")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")},{property:"errorCount",label:this.$tc("adyen.columnHeaders.errorCount")},{property:"errorMessage",label:this.$tc("adyen.columnHeaders.errorMessage")}],showWidget:!1}},methods:{fetchNotifications:function(){var e=this;this.adyenService.fetchNotifications(this.order.id).then((function(t){e.notifications=t}))},onReschedule:function(e){var t=this;this.adyenService.rescheduleNotification(e.notificationId).then((function(e){t.createNotificationSuccess({title:t.$tc("adyen.reprocessNotification"),message:t.$tc("adyen.notificationRescheduleSuccess")}),t.fetchNotifications()}))}},beforeMount:function(){this.showWidget=this.adyenService.isAdyenOrder(this.order),this.showWidget&&this.fetchNotifications()}});Shopware.Component.override("sw-order-detail-base",{template:'{% block sw_order_detail_base_custom_fields %}\n {% parent %}\n \n \n \n{% endblock %}\n'});n("MTTW");var g=n("bY4/");Shopware.Locale.extend("en-GB",g)},SZ7m:function(e,t,n){"use strict";function r(e,t){for(var n=[],r={},o=0;on.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;o2&&void 0!==arguments[2]?arguments[2]:"adyen";return r(this,d),(n=c.call(this,e,t,o)).headers=n.getBasicHeaders({}),n}return t=d,(n=[{key:"check",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.post("_action/".concat(this.getApiBasePath(),"/verify"),e,{headers:t}).then((function(e){return u.handleResponse(e)}))}},{key:"capture",value:function(e){return this.httpClient.post(this.getApiBasePath()+"/capture",{orderId:e},{headers:this.headers}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getCaptureRequests",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/captures",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getRefunds",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/refunds",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during refunds request: "+e.message),e}))}},{key:"postRefund",value:function(e,t){var n=this.getBasicHeaders({});return this.httpClient.post(this.getApiBasePath()+"/refunds",{orderId:e,refundAmount:t},{headers:n}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during post refund request: "+e.message),e}))}},{key:"fetchNotifications",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/notifications",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"rescheduleNotification",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/reschedule-notification/"+e,{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"isAdyenOrder",value:function(e){for(var t=e.transactions,n=!1,r=0;r\n Test Configuration\n\n',inject:["adyenService"],mixins:[i.getByName("notification")],data:function(){return{isLoading:!1,isSaveSuccessful:!1}},computed:{pluginConfig:function(){for(var e=this.$parent;!e.hasOwnProperty("actualConfigData");)e=e.$parent;var t=e.currentSalesChannelId,n=e.actualConfigData;return Object.assign({},n.null,n[t])}},methods:{saveFinish:function(){this.isSaveSuccessful=!1},check:function(){var e=this;this.isLoading=!0,this.adyenService.check(this.pluginConfig).then((function(t){t.success?(e.isSaveSuccessful=!0,e.createNotificationSuccess({title:e.$tc("adyen.configTestTitle"),message:e.$tc("adyen.configTestSuccess")})):e.createNotificationError({title:e.$tc("adyen.configTestTitle"),message:e.$tc(t.message?t.message:"adyen.configTestFail")}),e.isLoading=!1}))}}});n("hnQ+");var a=Shopware,s=a.Component,c=a.Mixin;s.register("adyen-payment-capture",{template:'\n
\n
\n
\n {{ $tc(\'adyen.noCaptureRequests\') }}\n
\n
\n \n {{ $tc(\'adyen.sendCaptureRequest\') }}\n \n
\n \n \n \n
\n \n \n
\n
\n {{ $tc(\'adyen.error\') }}\n
\n
\n',inject:["adyenService","systemConfigApiService"],mixins:[c.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],showModal:!1,captureRequests:[],allowCapture:!0,captureEnabled:!1,errorOccurred:!1,isLoading:!0,showWidget:!1}},created:function(){this.createdComponent()},methods:{createdComponent:function(){var e=this;return this.systemConfigApiService.getValues("AdyenPaymentShopware6.config").then((function(t){e.captureEnabled=t["AdyenPaymentShopware6.config.manualCaptureEnabled"]||null})).finally((function(){e.isLoading=!1,e.showWidget=e.adyenService.isAdyenOrder(e.order)&&e.captureEnabled}))},openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onSubmitCapture:function(){var e=this;this.isLoading=!0,this.adyenService.capture(this.order.id).then((function(t){t.success?(e.fetchCaptureRequests(),e.createNotificationSuccess({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.captureSuccessful")})):e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoading=!1,e.showModal=!1}))},fetchCaptureRequests:function(){var e=this;this.isLoading=!0,this.adyenService.getCaptureRequests(this.order.id).then((function(t){e.captureRequests=t,e.isCaptureAllowed()})).catch((function(){e.errorOccurred=!0,e.captureRequests=[]})).finally((function(){e.isLoading=!1}))},isCaptureAllowed:function(){var e=this.getAuthorizedAdyenOrderTransaction(),t=this.captureRequests.filter((function(e){return"Pending Webhook"===e.status}));this.allowCapture=e.length>0&&0===t.length},getAuthorizedAdyenOrderTransaction:function(){return this.order.transactions.filter((function(e){var t="originalPspReference"in e.customFields,n="Authorized"===e.stateMachineState.name;return t&&n}))}},beforeMount:function(){this.fetchCaptureRequests()}});n("Fxip");function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n\n
\n
\n
\n {{ $tc(\'adyen.noRefundsCreated\') }}\n
\n
\n \n {{ $tc(\'sw-order.documentCard.labelCreateNew\') }}\n \n
\n \n
\n \n
\n \n
\n
\n \n \n
\n
\n {{ $tc(\'adyen.refundFetchError\') }}\n
\n \n{% endblock %}\n',inject:["adyenService"],mixins:[p.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],refundAmount:0,showModal:!1,refunds:[],allowRefund:!0,isLoadingTable:!0,errorOccurred:!1,isLoadingRefund:!1,showWidget:!0}},methods:{openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onRefund:function(){var e=this;this.isLoadingRefund=!0,this.adyenService.postRefund(this.order.id,this.refundAmount).then((function(t){t.success?(e.fetchRefunds(),e.createNotificationSuccess({title:e.$tc("adyen.refundTitle"),message:e.$tc("adyen.refundSuccessful")})):e.createNotificationError({title:e.$tc("adyen.refundTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.refundTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoadingRefund=!1,e.showModal=!1}))},fetchRefunds:function(){var e=this;this.isLoadingTable=!0,this.adyenService.getRefunds(this.order.id).then((function(t){e.refunds=t,e.isRefundAllowed()})).catch((function(){e.errorOccurred=!0,e.refunds=[]})).finally((function(){e.isLoadingTable=!1}))},isRefundAllowed:function(){var e,t=0,n=u(this.refunds);try{for(n.s();!(e=n.n()).done;){var r=e.value;"Failed"!==r.status&&(t+=r.rawAmount)}}catch(e){n.e(e)}finally{n.f()}this.allowRefund=this.order.amountTotal>t/100},isAdyenOrder:function(){for(var e=this.order.transactions,t=!1,n=0;n\n \n \n {% block sw_data_grid_body_columns %}\n {% block sw_data_grid_column_actions %}\n \n {% endblock %}\n {% endblock %}\n \n

{{ $tc(\'adyen.noNotificationsReceived\') }}

\n
\n\n',inject:["adyenService"],mixins:[m.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{notifications:[],columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"eventCode",label:this.$tc("adyen.columnHeaders.event")},{property:"success",label:this.$tc("adyen.columnHeaders.success")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")},{property:"errorCount",label:this.$tc("adyen.columnHeaders.errorCount")},{property:"errorMessage",label:this.$tc("adyen.columnHeaders.errorMessage")}],showWidget:!1}},methods:{fetchNotifications:function(){var e=this;this.adyenService.fetchNotifications(this.order.id).then((function(t){e.notifications=t}))},onReschedule:function(e){var t=this;this.adyenService.rescheduleNotification(e.notificationId).then((function(e){t.createNotificationSuccess({title:t.$tc("adyen.reprocessNotification"),message:t.$tc("adyen.notificationRescheduleSuccess")}),t.fetchNotifications()}))}},beforeMount:function(){this.showWidget=this.adyenService.isAdyenOrder(this.order),this.showWidget&&this.fetchNotifications()}});Shopware.Component.override("sw-order-detail-base",{template:'{% block sw_order_detail_base_custom_fields %}\n {% parent %}\n \n \n \n{% endblock %}\n'});n("MTTW");var g=n("bY4/");Shopware.Locale.extend("en-GB",g)},SZ7m:function(e,t,n){"use strict";function r(e,t){for(var n=[],r={},o=0;on.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;o2&&void 0!==arguments[2]?arguments[2]:"adyen";return r(this,d),(n=c.call(this,e,t,o)).headers=n.getBasicHeaders({}),n}return t=d,(n=[{key:"check",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.post("_action/".concat(this.getApiBasePath(),"/verify"),e,{headers:t}).then((function(e){return u.handleResponse(e)}))}},{key:"capture",value:function(e){return this.httpClient.post(this.getApiBasePath()+"/capture",{orderId:e},{headers:this.headers}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getCaptureRequests",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/captures",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getRefunds",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/refunds",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during refunds request: "+e.message),e}))}},{key:"postRefund",value:function(e,t){var n=this.getBasicHeaders({});return this.httpClient.post(this.getApiBasePath()+"/refunds",{orderId:e,refundAmount:t},{headers:n}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during post refund request: "+e.message),e}))}},{key:"fetchNotifications",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/notifications",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"rescheduleNotification",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/reschedule-notification/"+e,{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"isAdyenOrder",value:function(e){for(var t=e.transactions,n=!1,r=0;rnotificationService->getScheduledUnprocessedNotifications(); foreach ($notifications->getElements() as $notification) { - /** @var NotificationEntity $notification */ - $logContext = ['eventCode' => $notification->getEventCode()]; - $this->markAsProcessing($notification->getId(), $notification->getMerchantReference()); + try { + /** @var NotificationEntity $notification */ + $logContext = ['eventCode' => $notification->getEventCode()]; - $order = $this->getOrder($notification, $context, $logContext); - if (is_null($order)) { - continue; - } + /* + * Before processing any notification, factory should be created first. + * It checks the supported EventCode to use related class in the factory. + * If the EventCode is not supported, factory will throw an InvalidDataException. + */ + $webhookHandler = self::$webhookHandlerFactory::create($notification->getEventCode()); - $logContext['orderId'] = $order->getId(); - $logContext['orderNumber'] = $order->getOrderNumber(); + $this->markAsProcessing($notification->getId(), $notification->getMerchantReference()); - $orderTransaction = $this->getOrderTransaction($order, $notification, $logContext); - if (is_null($orderTransaction)) { - continue; - } + $order = $this->getOrder($notification, $context, $logContext); + if (is_null($order)) { + continue; + } - $currentTransactionState = $this->getCurrentTransactionState($orderTransaction, $notification); - if (is_null($currentTransactionState)) { - continue; - } + $logContext['orderId'] = $order->getId(); + $logContext['orderNumber'] = $order->getOrderNumber(); - $processor = $this->createProcessor($notification, $currentTransactionState); - if (is_null($processor)) { - continue; - } + $orderTransaction = $this->getOrderTransaction($order, $notification, $logContext); + if (is_null($orderTransaction)) { + continue; + } + + $currentTransactionState = $this->getCurrentTransactionState($orderTransaction, $notification); + if (is_null($currentTransactionState)) { + continue; + } - $state = $processor->process(); + $processor = $this->createProcessor($notification, $currentTransactionState); + if (is_null($processor)) { + continue; + } + + $state = $processor->process(); - try { - $webhookHandler = self::$webhookHandlerFactory::create($notification->getEventCode()); $webhookHandler->handleWebhook( $orderTransaction, $notification, @@ -237,12 +247,14 @@ public function run(): void } /** - * @param $notification - * @param $currentTransactionState - * @return \Adyen\Webhook\Processor\ProcessorInterface|null + * @param NotificationEntity $notification + * @param string $currentTransactionState + * @return ProcessorInterface|null */ - private function createProcessor($notification, $currentTransactionState) - { + private function createProcessor( + NotificationEntity $notification, + string $currentTransactionState + ): ?ProcessorInterface { try { $notificationItem = Notification::createItem([ 'eventCode' => $notification->getEventCode(), @@ -266,12 +278,14 @@ private function createProcessor($notification, $currentTransactionState) } /** - * @param $orderTransaction - * @param $notification - * @return mixed|string|null + * @param OrderTransactionEntity $orderTransaction + * @param NotificationEntity $notification + * @return string|null */ - private function getCurrentTransactionState($orderTransaction, $notification) - { + private function getCurrentTransactionState( + OrderTransactionEntity $orderTransaction, + NotificationEntity $notification + ): ?string { $currentTransactionState = self::WEBHOOK_MODULE_STATE_MAPPING[ $orderTransaction->getStateMachineState()->getTechnicalName() ] ?? ''; @@ -290,13 +304,16 @@ private function getCurrentTransactionState($orderTransaction, $notification) } /** - * @param $order - * @param $notification - * @param $logContext - * @return \Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity|null + * @param OrderEntity $order + * @param NotificationEntity $notification + * @param array $logContext + * @return OrderTransactionEntity|null */ - private function getOrderTransaction($order, $notification, $logContext) - { + private function getOrderTransaction( + OrderEntity $order, + NotificationEntity $notification, + array $logContext + ): ?OrderTransactionEntity { $orderTransaction = $this->orderTransactionRepository->getFirstAdyenOrderTransactionByStates( $order->getId(), self::WEBHOOK_TRANSACTION_STATES @@ -321,10 +338,13 @@ private function getOrderTransaction($order, $notification, $logContext) * @param NotificationEntity $notification * @param Context $context * @param array $logContext - * @return \Shopware\Core\Checkout\Order\OrderEntity|null + * @return OrderEntity|null */ - private function getOrder(NotificationEntity $notification, Context $context, array $logContext) - { + private function getOrder( + NotificationEntity $notification, + Context $context, + array $logContext + ): ?OrderEntity { if ($notification->getEventCode() === EventCodes::ORDER_CLOSED) { // get merchant reference from adyen_payment table $merchantOrderReference = $notification->getMerchantReference(); @@ -357,7 +377,7 @@ private function getOrder(NotificationEntity $notification, Context $context, ar * @param string $merchantReference * @return void */ - private function markAsProcessing(string $notificationId, string $merchantReference) + private function markAsProcessing(string $notificationId, string $merchantReference): void { $this->notificationService->changeNotificationState($notificationId, 'processing', true); $this->logger->debug("Payment notification for order {$merchantReference} marked as processing."); @@ -365,30 +385,30 @@ private function markAsProcessing(string $notificationId, string $merchantRefere /** * @param string $notificationId - * @param string $merchantReference + * @param string|null $merchantReference * @return void */ - private function markAsDone(string $notificationId, string $merchantReference) + private function markAsDone(string $notificationId, ?string $merchantReference = null): void { $this->notificationService->changeNotificationState($notificationId, 'processing', false); $this->notificationService->changeNotificationState($notificationId, 'done', true); - $this->logger->debug("Payment notification for order {$merchantReference} marked as done."); + $this->logger->debug("Payment notification {$notificationId} for order {$merchantReference} marked as done."); } /** * @param string $notificationId - * @param string $merchantReference + * @param string|null $merchantReference * @param \DateTime|null $dateTime * @return void */ private function rescheduleNotification( string $notificationId, - string $merchantReference, + ?string $merchantReference = null, ?\DateTime $dateTime = null ) { $this->notificationService->changeNotificationState($notificationId, 'processing', false); $this->notificationService->setNotificationSchedule($notificationId, $dateTime ?? new \DateTime()); - $this->logger->debug("Payment notification for order {$merchantReference} rescheduled."); + $this->logger->debug("Payment notification {$notificationId} for order {$merchantReference} rescheduled."); } /** @@ -397,7 +417,7 @@ private function rescheduleNotification( * @param string $errorMessage * @return void */ - private function logNotificationFailure(NotificationEntity $notification, string $errorMessage) + private function logNotificationFailure(NotificationEntity $notification, string $errorMessage): void { $errorCount = (int) $notification->getErrorCount(); $this->notificationService diff --git a/src/Service/NotificationReceiverService.php b/src/Service/NotificationReceiverService.php index 5b152915..8aa0afc7 100644 --- a/src/Service/NotificationReceiverService.php +++ b/src/Service/NotificationReceiverService.php @@ -24,14 +24,14 @@ namespace Adyen\Shopware\Service; +use Adyen\Webhook\Exception\HMACKeyValidationException; +use Adyen\Webhook\Exception\InvalidDataException; +use Adyen\Webhook\Exception\MerchantAccountCodeException; use Adyen\Webhook\Receiver\NotificationReceiver; use Adyen\Shopware\Exception\AuthenticationException; -use Adyen\Shopware\Exception\HMACKeyValidationException; use Adyen\Shopware\Exception\ValidationException; -use Adyen\Shopware\Exception\MerchantAccountCodeException; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\JsonResponse; -use Adyen\AdyenException; use Symfony\Component\HttpFoundation\Request; class NotificationReceiverService @@ -39,22 +39,22 @@ class NotificationReceiverService /** * @var ConfigurationService */ - private $configurationService; + private ConfigurationService $configurationService; /** * @var NotificationService */ - private $notificationService; + private NotificationService $notificationService; /** * @var NotificationReceiver */ - private $notificationReceiver; + private NotificationReceiver $notificationReceiver; /** * @var LoggerInterface */ - private $logger; + private LoggerInterface $logger; /** * NotificationReceiverService constructor. @@ -77,15 +77,16 @@ public function __construct( } /** - * @param $notificationItems + * @param Request $requestObject * @return string|JsonResponse - * @throws AdyenException * @throws AuthenticationException + * @throws InvalidDataException + * @throws ValidationException + * @throws \Adyen\Webhook\Exception\AuthenticationException * @throws HMACKeyValidationException * @throws MerchantAccountCodeException - * @throws ValidationException */ - public function process(Request $requestObject) + public function process(Request $requestObject): JsonResponse { $request = $requestObject->request->all(); $salesChannelId = $requestObject->attributes->get('sw-sales-channel-id'); @@ -149,12 +150,10 @@ public function process(Request $requestObject) * @param $notificationItem * @param $salesChannelId * @return bool - * @throws AdyenException - * @throws AuthenticationException * @throws HMACKeyValidationException - * @throws MerchantAccountCodeException + * @throws InvalidDataException */ - private function processNotificationItem($notificationItem, $salesChannelId) + private function processNotificationItem($notificationItem, $salesChannelId): bool { $hmacKey = $this->configurationService->getHmacKey($salesChannelId); @@ -164,13 +163,6 @@ private function processNotificationItem($notificationItem, $salesChannelId) $this->logger->info('The content of the notification item is: ' . print_r($notificationItem, true)); - // skip report notifications - if ($this->notificationReceiver->isReportNotification($notificationItem['eventCode'])) { - $this->logger->info('Notification is a REPORT notification from ' . - 'Adyen Customer Area'); - return true; - } - // check if notification already exists if (!$this->notificationService->isDuplicateNotification($notificationItem)) { try { diff --git a/src/Service/PaymentRequestService.php b/src/Service/PaymentRequestService.php index f2b14625..ea75e8c6 100644 --- a/src/Service/PaymentRequestService.php +++ b/src/Service/PaymentRequestService.php @@ -375,11 +375,13 @@ public function getLineItems( $item['imageUrl'] = $product->getCover()->getMedia()->getUrl(); } - if (!is_null($product->getSeoUrls())) { - $hostname = $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl(); - $productPath = $product->getSeoUrls()->first()->getPathInfo(); - - $item['productUrl'] = str_replace('//', '/', $hostname . $productPath); + // Add url for only real product and not for the custom cart items. + if (!is_null($product->getId())) { + $item['productUrl'] = sprintf( + "%s/detail/%s", + $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl(), + $product->getId() + ); } //Building open invoice line @@ -448,7 +450,6 @@ public function getProduct(string $productId, Context $context): ProductEntity { $criteria = new Criteria([$productId]); - $criteria->addAssociation('seoUrls'); $criteria->addAssociation('cover'); /** @var ProductCollection $productCollection */ diff --git a/src/Service/Repository/SalesChannelRepository.php b/src/Service/Repository/SalesChannelRepository.php index 75808378..edb47665 100644 --- a/src/Service/Repository/SalesChannelRepository.php +++ b/src/Service/Repository/SalesChannelRepository.php @@ -2,11 +2,8 @@ namespace Adyen\Shopware\Service\Repository; -use Shopware\Core\Checkout\Payment\Cart\AsyncPaymentTransactionStruct; use Shopware\Core\Content\Newsletter\Exception\SalesChannelDomainNotFoundException; -use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; -use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; use Shopware\Core\System\SalesChannel\SalesChannelContext; @@ -30,20 +27,28 @@ class SalesChannelRepository */ private $configurationService; + /** + * @var EntityRepositoryInterface + */ + private $languageRepository; + /** * SalesChannelRepository constructor. * @param EntityRepositoryInterface $domainRepository * @param EntityRepositoryInterface $salesChannelRepository * @param ConfigurationService $configurationService + * @param EntityRepositoryInterface $languageRepository */ public function __construct( EntityRepositoryInterface $domainRepository, EntityRepositoryInterface $salesChannelRepository, - ConfigurationService $configurationService + ConfigurationService $configurationService, + EntityRepositoryInterface $languageRepository ) { $this->domainRepository = $domainRepository; $this->salesChannelRepository = $salesChannelRepository; $this->configurationService = $configurationService; + $this->languageRepository = $languageRepository; } /** @@ -93,4 +98,20 @@ public function getSalesChannelAssoc(SalesChannelContext $context, array $associ return $this->salesChannelRepository->search($criteria, $context->getContext())->first(); } + + /** + * @param SalesChannelContext $salesChannelContext + * @return string + */ + public function getSalesChannelLocale(SalesChannelContext $salesChannelContext): string + { + $criteria = new Criteria(); + + $criteria->addFilter(new EqualsFilter('id', $salesChannelContext->getLanguageId())); + $criteria->addAssociation('locale'); + + $languageEntity = $this->languageRepository->search($criteria, $salesChannelContext->getContext())->first(); + + return $languageEntity->getLocale()->getCode(); + } } diff --git a/src/Subscriber/PaymentSubscriber.php b/src/Subscriber/PaymentSubscriber.php index d6589970..0b1171b6 100644 --- a/src/Subscriber/PaymentSubscriber.php +++ b/src/Subscriber/PaymentSubscriber.php @@ -48,6 +48,7 @@ use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent; use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPage; use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPageLoadedEvent; +use Shopware\Storefront\Page\Checkout\Register\CheckoutRegisterPageLoadedEvent; use Shopware\Storefront\Page\PageLoadedEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -177,6 +178,7 @@ public static function getSubscribedEvents(): array return [ CheckoutCartPageLoadedEvent::class => 'onShoppingCartLoaded', OffcanvasCartPageLoadedEvent::class => 'onShoppingCartLoaded', + CheckoutRegisterPageLoadedEvent::class => 'onShoppingCartLoaded', CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmLoaded', AccountEditOrderPageLoadedEvent::class => 'onCheckoutConfirmLoaded', RequestEvent::class => 'onKernelRequest', @@ -189,9 +191,7 @@ private function getComponentData(SalesChannelContext $salesChannelContext): arr return [ 'clientKey' => $this->configurationService->getClientKey($salesChannelId), - 'locale' => $this->salesChannelRepository - ->getSalesChannelAssoc($salesChannelContext, ['language.locale']) - ->getLanguage()->getLocale()->getCode(), + 'locale' => $this->salesChannelRepository->getSalesChannelLocale($salesChannelContext), 'environment' => $this->configurationService->getEnvironment($salesChannelId), ]; } @@ -424,7 +424,7 @@ public function onKernelRequest(RequestEvent $event) $this->contextSwitchRoute->switchContext( new RequestDataBag( [ - SalesChannelContextService::PAYMENT_METHOD_ID => $request->get('paymentMethodId'), + SalesChannelContextService::PAYMENT_METHOD_ID => $request->request->get('paymentMethodId'), 'adyenStateData' => $request->request->get('adyenStateData'), 'adyenOrigin' => $request->request->get('adyenOrigin'), ]