From 11f1ba4b2e686808bce4582df4b77f20fcf4bf30 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Sat, 30 Dec 2023 14:51:14 +0100 Subject: [PATCH 01/18] Improved tests --- composer.json | 3 +- tests/Integration/BluemGenericTestCase.php | 4 +- tests/Integration/BluemMainTest.php | 2 +- tests/Integration/IPAPITest.php | 2 +- tests/Integration/IdentityRequestTest.php | 3 +- tests/Integration/MandateRequestTest.php | 3 +- tests/Integration/PaymentRequestTest.php | 3 +- tests/Integration/WebhookTest.php | 5 +- tests/Unit/BluemConfigurationTest.php | 74 ++++++++++++++++++++++ tests/Unit/BluemTest.php | 73 ++++++++++++++++----- 10 files changed, 141 insertions(+), 31 deletions(-) create mode 100644 tests/Unit/BluemConfigurationTest.php diff --git a/composer.json b/composer.json index 1d3cdf3..b9753fc 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,8 @@ }, "autoload": { "psr-4": { - "Bluem\\BluemPHP\\": "src/" + "Bluem\\BluemPHP\\": "src/", + "Bluem\\BluemPHP\\Tests": "tests/" } }, "require-dev": { diff --git a/tests/Integration/BluemGenericTestCase.php b/tests/Integration/BluemGenericTestCase.php index 8e339e7..ee13710 100644 --- a/tests/Integration/BluemGenericTestCase.php +++ b/tests/Integration/BluemGenericTestCase.php @@ -6,15 +6,15 @@ * with this source code in the file LICENSE. */ -namespace Integration; +namespace Bluem\BluemPHP\Tests\Integration; use Bluem\BluemPHP\Bluem; use Bluem\BluemPHP\Interfaces\BluemRequestInterface; +use Bluem\BluemPHP\Responses\ErrorBluemResponse; use Dotenv\Dotenv; use Exception; use PHPUnit\Framework\TestCase; use stdClass; -use Bluem\BluemPHP\Responses\ErrorBluemResponse; /** * Abstract base class for all BluemPHP unit tests. diff --git a/tests/Integration/BluemMainTest.php b/tests/Integration/BluemMainTest.php index 0337266..9a74b40 100644 --- a/tests/Integration/BluemMainTest.php +++ b/tests/Integration/BluemMainTest.php @@ -1,5 +1,5 @@ getValidConfig(); + + $bluemConfig = new BluemConfiguration($configData); + + $this->assertInstanceOf(BluemConfiguration::class, $bluemConfig); + $this->assertEquals('test', $bluemConfig->environment); + // Add other assertions for different properties... + } + + public function testConstructorWithInvalidData(): void + { + $this->expectException(InvalidBluemConfigurationException::class); + $invalidConfigData = new stdclass(); + + new BluemConfiguration($invalidConfigData); + } + + public function testSetBrandId(): void + { + $configData = $this->getValidConfig(); + + $bluemConfig = new BluemConfiguration($configData); + $bluemConfig->setBrandId('NewBrand'); + + $this->assertEquals('NewBrand', $bluemConfig->brandID); + } + + private function getValidConfig(): stdClass + { + $bluem_config = new stdClass(); + $bluem_config->environment = 'test'; + $bluem_config->senderID = 'S12345'; + + $bluem_config->brandID = 'BLUEM_BRANDID'; + $bluem_config->test_accessToken = 'BLUEM_TEST_ACCESS_TOKEN'; + $bluem_config->IDINBrandID = 'BLUEM_BRANDID'; + $bluem_config->merchantID = 'BLUEM_MERCHANTID'; + $bluem_config->merchantReturnURLBase = 'BLUEM_MERCHANTRETURNURLBASE'; + + $bluem_config->production_accessToken = ""; + $bluem_config->expectedReturnStatus = "success"; + $bluem_config->eMandateReason = "eMandateReason"; + $bluem_config->sequenceType = "OOFF"; + $bluem_config->localInstrumentCode = "B2B"; + return $bluem_config; + } +} + diff --git a/tests/Unit/BluemTest.php b/tests/Unit/BluemTest.php index 8fd67c0..9742fe0 100644 --- a/tests/Unit/BluemTest.php +++ b/tests/Unit/BluemTest.php @@ -6,44 +6,85 @@ * with this source code in the file LICENSE. */ -namespace Unit; +namespace Bluem\BluemPHP\Tests\Unit; use Bluem\BluemPHP\Bluem; +use Bluem\BluemPHP\Contexts\IdentityContext; use Bluem\BluemPHP\Exceptions\InvalidBluemConfigurationException; -use Exception; +use Bluem\BluemPHP\Interfaces\BluemResponseInterface; +use Bluem\BluemPHP\Requests\BluemRequest; +use Bluem\BluemPHP\Responses\ErrorBluemResponse; use PHPUnit\Framework\TestCase; +use RuntimeException; use stdClass; class BluemTest extends TestCase { private Bluem $bluem; + /** + * @throws InvalidBluemConfigurationException + */ protected function setUp(): void { - parent::setUp(); + // Mock the configuration as needed + $mockedConfig = $this->getConfig(); + $this->bluem = new Bluem($mockedConfig); + } + - $bluem_config = $this->getConfig(); - try { - $this->bluem = new Bluem( - $bluem_config - ); - } catch (Exception $e) { - $this->fail($e->getMessage()); - } + public function testConstructorWithValidConfig(): void + { + $this->assertInstanceOf(Bluem::class, $this->bluem); + } + + public function testConstructorWithInvalidConfig(): void + { + $this->expectException(InvalidBluemConfigurationException::class); + new Bluem(null); } - protected function tearDown(): void + + public function testMandateWithValidParameters(): void { - //$this->bluem = Bluem; + // Mock the expected response + $mockedResponse = $this->createMock(BluemResponseInterface::class); + + // Test the Mandate method with valid parameters + $response = $this->bluem->Mandate('customer_id', 'order_id', 'mandate_id'); + + // Assertions + $this->assertInstanceOf(BluemResponseInterface::class, $response); } - public function testMandateRequest() + public function testMandateWithException(): void + { + $this->expectException(RuntimeException::class); + $this->bluem->Mandate('', '', ''); + } + public function testCreateMandateID(): void + { + $mandateID = $this->bluem->CreateMandateID('order_id', 'customer_id'); + $this->assertIsString($mandateID); + } + public function testPerformRequestWithInvalidXml(): void { - $result = true; - $this->assertEquals(true, $result); + // Mock a request that would generate invalid XML + $mockBluemRequest = $this->createMock(BluemRequest::class); + + $mockBluemRequest->method('XmlString') + ->willReturn('Some invalid aaXML String'); + + $mockBluemRequest->method('HttpRequestURL') + ->willReturn('https://example.com/api/request'); + $mockBluemRequest->method('RequestContext')->willReturn(new IdentityContext()); + + $result = $this->bluem->PerformRequest($mockBluemRequest); + $this->assertInstanceOf(ErrorBluemResponse::class, $result); } + // helper classes private function getConfig(): stdClass { $bluem_config = new stdClass; From acd613b4d1a01820463ad2ff5a224b2f1294aa9d Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 5 Jan 2024 12:12:48 +0100 Subject: [PATCH 02/18] Fix problem in composer autoload --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b9753fc..201e5b7 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "autoload": { "psr-4": { "Bluem\\BluemPHP\\": "src/", - "Bluem\\BluemPHP\\Tests": "tests/" + "Bluem\\BluemPHP\\Tests\\": "tests/" } }, "require-dev": { From ccd8838a1945f7727b909fa73b6935964d524f94 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Thu, 11 Apr 2024 21:22:09 +0200 Subject: [PATCH 03/18] Add Dependabot --- .github/dependabot.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/dependabot.yaml diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..921c11d --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 From c244926af19b6bc546766ed066e61ecda51f4784 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Thu, 11 Apr 2024 21:34:05 +0200 Subject: [PATCH 04/18] Fallback to PHP Unit 9.0 & php 8.1 composer settings --- composer.json | 3 +- composer.lock | 1179 +++++++++++-------------------------------------- 2 files changed, 264 insertions(+), 918 deletions(-) diff --git a/composer.json b/composer.json index 201e5b7..4813572 100644 --- a/composer.json +++ b/composer.json @@ -31,10 +31,9 @@ } }, "require-dev": { - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.0", "phpspec/prophecy": "~1.0", "vlucas/phpdotenv": "^5.4", - "roave/security-advisories": "dev-latest", "rector/rector": "^0.15.10", "squizlabs/php_codesniffer": "^3.7", "magento/magento-coding-standard": "^31.0", diff --git a/composer.lock b/composer.lock index 21064a1..210158d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,31 +4,31 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "48c42aa13be174ca13f0c70933f78e00", + "content-hash": "f8d436a0e1ee8d487796958789238686", "packages": [ { "name": "selective/xmldsig", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/selective-php/xmldsig.git", - "reference": "fb9cdf2ecfcf4b65931db8796c7336a43b607d73" + "reference": "adfa81bc744a29f808a5216bf73e0cb2bcd7af91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/selective-php/xmldsig/zipball/fb9cdf2ecfcf4b65931db8796c7336a43b607d73", - "reference": "fb9cdf2ecfcf4b65931db8796c7336a43b607d73", + "url": "https://api.github.com/repos/selective-php/xmldsig/zipball/adfa81bc744a29f808a5216bf73e0cb2bcd7af91", + "reference": "adfa81bc744a29f808a5216bf73e0cb2bcd7af91", "shasum": "" }, "require": { "ext-dom": "*", "ext-openssl": "*", - "php": "~8.0 || ~8.1 || ~8.2" + "php": "~8.1 || ~8.2" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3", "phpstan/phpstan": "^1", - "phpunit/phpunit": "^9 || ^10", + "phpunit/phpunit": "^10", "squizlabs/php_codesniffer": "^3", "starkbank/ecdsa": "^2.0" }, @@ -52,25 +52,25 @@ ], "support": { "issues": "https://github.com/selective-php/xmldsig/issues", - "source": "https://github.com/selective-php/xmldsig/tree/3.0.0" + "source": "https://github.com/selective-php/xmldsig/tree/3.1.0" }, "abandoned": "robrichards/xmlseclibs", - "time": "2023-01-28T18:17:36+00:00" + "time": "2023-09-09T22:17:11+00:00" } ], "packages-dev": [ { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -102,36 +102,36 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2023-09-27T20:04:15+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -158,7 +158,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -174,28 +174,28 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -224,7 +224,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -236,7 +236,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { "name": "magento/magento-coding-standard", @@ -347,25 +347,27 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -373,7 +375,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -397,26 +399,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -457,9 +460,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -629,28 +638,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "298d2febfe79d03fe714eb871d5538da55205b1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a", + "reference": "298d2febfe79d03fe714eb871d5538da55205b1a", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" }, "type": "library", "extra": { @@ -674,33 +690,33 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2024-04-09T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", "phpstan/phpdoc-parser": "^1.13" }, @@ -738,22 +754,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { @@ -761,7 +777,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -803,7 +819,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -815,33 +831,33 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.17.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2" + "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/15873c65b207b07765dbc3c95d20fdf4a320cbe2", - "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87", + "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2 || ^2.0", - "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*", "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { "phpspec/phpspec": "^6.0 || ^7.0", "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" }, "type": "library", "extra": { @@ -874,6 +890,7 @@ "keywords": [ "Double", "Dummy", + "dev", "fake", "mock", "spy", @@ -881,22 +898,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.17.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.19.0" }, - "time": "2023-02-02T15:41:36+00:00" + "time": "2024-02-29T11:52:51+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.2", + "version": "1.28.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", "shasum": "" }, "require": { @@ -928,22 +945,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" }, - "time": "2023-09-26T12:28:12+00:00" + "time": "2024-04-03T18:51:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.38", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -992,27 +1009,27 @@ "type": "tidelift" } ], - "time": "2023-10-06T14:19:14+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1062,7 +1079,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -1070,7 +1087,7 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1315,16 +1332,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.13", + "version": "9.6.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "shasum": "" }, "require": { @@ -1398,7 +1415,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" }, "funding": [ { @@ -1414,7 +1431,7 @@ "type": "tidelift" } ], - "time": "2023-09-19T05:39:22+00:00" + "time": "2024-04-05T04:35:58+00:00" }, { "name": "rector/rector", @@ -1477,699 +1494,18 @@ ], "time": "2023-04-20T16:07:39+00:00" }, - { - "name": "roave/security-advisories", - "version": "dev-latest", - "source": { - "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "efd339340c840237fad050f3ea6fd8bbbbfc7ed6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/efd339340c840237fad050f3ea6fd8bbbbfc7ed6", - "reference": "efd339340c840237fad050f3ea6fd8bbbbfc7ed6", - "shasum": "" - }, - "conflict": { - "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.2.11", - "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", - "aheinze/cockpit": "<2.2", - "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", - "akaunting/akaunting": "<2.1.13", - "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<1.5", - "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", - "amazing/media2click": ">=1,<1.3.3", - "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", - "amphp/http-client": ">=4,<4.4", - "anchorcms/anchor-cms": "<=0.12.7", - "andreapollastri/cipi": "<=3.1.15", - "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", - "apache-solr-for-typo3/solr": "<2.8.3", - "apereo/phpcas": "<1.6", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", - "appwrite/server-ce": "<=1.2.1", - "arc/web": "<3", - "area17/twill": "<1.2.5|>=2,<2.5.3", - "artesaos/seotools": "<0.17.2", - "asymmetricrypt/asymmetricrypt": "<9.9.99", - "athlon1600/php-proxy": "<=5.1", - "athlon1600/php-proxy-app": "<=3", - "austintoddj/canvas": "<=3.4.2", - "automad/automad": "<1.8", - "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": ">=3,<3.2.1", - "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.24.2", - "backpack/crud": "<3.4.9", - "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", - "barrelstrength/sprout-base-email": "<1.2.7", - "barrelstrength/sprout-forms": "<3.9", - "barryvdh/laravel-translation-manager": "<0.6.2", - "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.7.5", - "bassjobsen/bootstrap-3-typeahead": ">4.0.2", - "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<=2.9.2", - "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", - "bmarshall511/wordpress_zero_spam": "<5.2.13", - "bolt/bolt": "<3.7.2", - "bolt/core": "<=4.2", - "bottelet/flarepoint": "<2.2.1", - "brightlocal/phpwhois": "<=4.2.5", - "brotkrueml/codehighlight": "<2.7", - "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", - "brotkrueml/typo3-matomo-integration": "<1.3.2", - "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": "<2.0.2", - "bytefury/crater": "<6.0.2", - "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", - "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", - "cardgate/magento2": "<2.0.33", - "cardgate/woocommerce": "<=3.1.15", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", - "catfan/medoo": "<1.7.5", - "cecil/cecil": "<7.47.1", - "centreon/centreon": "<22.10.0.0-beta1", - "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "chriskacerguis/codeigniter-restserver": "<=2.7.1", - "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", - "cockpit-hq/cockpit": "<=2.6.3", - "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<4.3.5", - "codeigniter4/shield": "<1.0.0.0-beta4", - "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.27|>=2,<2.2.22|>=2.3,<2.6.4", - "concrete5/concrete5": "<=9.2.1", - "concrete5/core": "<8.5.8|>=9,<9.1", - "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", - "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10", - "contao/listing-bundle": ">=4,<4.4.8", - "contao/managed-edition": "<=1.5", - "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.4.14", - "croogo/croogo": "<4", - "cuyz/valinor": "<0.12", - "czproject/git-php": "<4.0.3", - "darylldoyle/safe-svg": "<1.9.10", - "datadog/dd-trace": ">=0.30,<0.30.2", - "datatables/datatables": "<1.10.10", - "david-garcia/phpwhois": "<=4.3.1", - "dbrisinajumi/d2files": "<1", - "dcat/laravel-admin": "<=2.1.3.0-beta", - "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", - "desperado/xml-bundle": "<=0.1.7", - "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", - "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", - "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<18", - "dompdf/dompdf": "<2.0.2|==2.0.2", - "drupal/core": "<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", - "drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", - "dweeves/magmi": "<=0.7.24", - "ecodev/newsletter": "<=4", - "ectouch/ectouch": "<=2.7.2", - "elefant/cms": "<2.0.7", - "elgg/elgg": "<3.3.24|>=4,<4.0.5", - "encore/laravel-admin": "<=1.8.19", - "endroid/qr-code-bundle": "<3.4.2", - "enshrined/svg-sanitize": "<0.15", - "erusev/parsedown": "<1.7.2", - "ether/logs": "<3.0.4", - "exceedone/exment": "<4.4.3|>=5,<5.0.3", - "exceedone/laravel-admin": "<2.2.3|==3", - "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", - "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", - "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.26", - "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", - "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", - "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", - "ezyang/htmlpurifier": "<4.1.1", - "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.08", - "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=2.1.1", - "fenom/fenom": "<=2.12.1", - "filegator/filegator": "<7.8", - "firebase/php-jwt": "<6", - "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", - "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8", - "flarum/framework": "<1.8", - "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", - "flarum/tags": "<=0.1.0.0-beta13", - "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", - "fof/upload": "<1.2.3", - "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<5.11.1", - "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<11", - "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", - "friendsofsymfony/oauth2-php": "<1.3", - "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", - "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", - "froxlor/froxlor": "<2.1", - "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", - "gaoming13/wechat-php-sdk": "<=1.10.2", - "genix/cms": "<=1.1.11", - "getgrav/grav": "<=1.7.42.1", - "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", - "getkirby/kirby": "<=2.5.12", - "getkirby/panel": "<2.5.14", - "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.11.4", - "gleez/cms": "<=1.2|==2", - "globalpayments/php-sdk": "<2", - "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.15", - "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", - "gree/jose": "<2.2.1", - "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6", - "gugoan/economizzer": "<=0.9.0.0-beta1", - "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", - "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", - "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", - "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "<=2.31", - "hhxsv5/laravel-s": "<3.7.36", - "hillelcoren/invoice-ninja": "<5.3.35", - "himiklab/yii2-jqgrid-widget": "<1.0.8", - "hjue/justwriting": "<=1", - "hov/jobfair": "<1.0.13|>=2,<2.0.2", - "httpsoft/http-message": "<1.0.12", - "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", - "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", - "ibexa/user": ">=4,<4.4.3", - "icecoder/icecoder": "<=8.1", - "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", - "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", - "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", - "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.5", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.2", - "in2code/ipandlanguageredirect": "<5.1.2", - "in2code/lux": "<17.6.1|>=18,<24.0.2", - "innologi/typo3-appointments": "<2.0.6", - "intelliants/subrion": "<4.2.2", - "islandora/islandora": ">=2,<2.4.1", - "ivankristianto/phpwhois": "<=4.3", - "jackalope/jackalope-doctrine-dbal": "<1.7.4", - "james-heinrich/getid3": "<1.9.21", - "james-heinrich/phpthumb": "<1.7.12", - "jasig/phpcas": "<1.3.3", - "jcbrand/converse.js": "<3.3.3", - "joomla/application": "<1.0.13", - "joomla/archive": "<1.1.12|>=2,<2.0.1", - "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", - "joomla/framework": ">=2.5.4,<=3.8.12", - "joomla/input": ">=2,<2.0.2", - "joomla/joomla-cms": ">=2.5,<3.9.12", - "joomla/session": "<1.3.1", - "joyqi/hyper-down": "<=2.4.27", - "jsdecena/laracom": "<2.0.9", - "jsmitty12/phpwhois": "<5.1", - "kazist/phpwhois": "<=4.2.6", - "kelvinmo/simplexrd": "<3.1.1", - "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<1.1", - "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", - "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<=1.4.2", - "kohana/core": "<3.3.3", - "krayin/laravel-crm": "<1.2.2", - "kreait/firebase-php": ">=3.2,<3.8.1", - "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", - "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", - "laminas/laminas-http": "<2.14.2", - "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", - "latte/latte": "<2.10.8", - "lavalite/cms": "<=9", - "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", - "league/flysystem": "<1.1.4|>=2,<2.1.1", - "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", - "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<2017.08.18", - "liftkit/database": "<2.13.2", - "limesurvey/limesurvey": "<3.27.19", - "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", - "lms/routes": "<2.1.1", - "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", - "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": "<=2.4", - "magento/magento1ce": "<1.9.4.3-dev", - "magento/magento1ee": ">=1,<1.14.4.3-dev", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", - "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.5", - "marcwillmann/turn": "<0.3.3", - "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", - "mediawiki/matomo": "<2.4.3", - "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", - "melisplatform/melis-front": "<5.0.1", - "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", - "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<=1.3.4", - "miniorange/miniorange-saml": "<1.4.3", - "mittwald/typo3_forum": "<1.2.1", - "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<=2.8.3.0-patch", - "mojo42/jirafeau": "<4.4", - "mongodb/mongodb": ">=1,<1.9.2", - "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2", - "movim/moxl": ">=0.8,<=0.10", - "mpdf/mpdf": "<=7.1.7", - "mustache/mustache": ">=2,<2.14.1", - "namshi/jose": "<2.2", - "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.04", - "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", - "neos/neos-ui": "<=8.3.3", - "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", - "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", - "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.10", - "notrinos/notrinos-erp": "<=0.7", - "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.5.02", - "nyholm/psr7": "<1.6.1", - "nystudio107/craft-seomatic": "<3.4.12", - "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", - "october/backend": "<1.1.2", - "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<=3.4.4", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", - "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", - "openid/php-openid": "<2.3", - "openmage/magento-lts": "<=19.5|>=20,<=20.1", - "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", - "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", - "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", - "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", - "oxid-esales/oxideshop-ce": "<4.5", - "packbackbooks/lti-1-3-php-library": "<5", - "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": "<3", - "pagekit/pagekit": "<=1.0.18", - "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<2.11", - "paypal/merchant-sdk-php": "<3.12", - "pear/archive_tar": "<1.4.14", - "pear/crypt_gpg": "<1.6.7", - "pear/pear": "<=1.10.1", - "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", - "personnummer/personnummer": "<3.0.2", - "phanan/koel": "<5.1.4", - "php-mod/curl": "<2.3.2", - "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", - "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", - "phpmailer/phpmailer": "<6.5", - "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", - "phpoffice/phpexcel": "<1.8", - "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", - "phpservermon/phpservermon": "<3.6", - "phpsysinfo/phpsysinfo": "<3.2.5", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", - "phpwhois/phpwhois": "<=4.2.5", - "phpxmlrpc/extras": "<0.6.1", - "phpxmlrpc/phpxmlrpc": "<4.9.2", - "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.1.2", - "pimcore/customer-management-framework-bundle": "<3.4.2", - "pimcore/data-hub": "<1.2.4", - "pimcore/demo": "<10.3", - "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<10.6.8", - "pixelfed/pixelfed": "<=0.11.4", - "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", - "pressbooks/pressbooks": "<5.18", - "prestashop/autoupgrade": ">=4,<4.10.1", - "prestashop/blockwishlist": ">=2,<2.1.1", - "prestashop/contactform": ">=1.0.1,<4.3", - "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.2", - "prestashop/productcomments": "<5.0.2", - "prestashop/ps_emailsubscription": "<2.6.1", - "prestashop/ps_facetedsearch": "<3.4.1", - "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", - "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", - "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.7", - "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", - "ptrofimov/beanstalk_console": "<1.7.14", - "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6.0-beta", - "pyrocms/pyrocms": "<=3.9.1", - "rainlab/blog-plugin": "<1.4.1", - "rainlab/debugbar-plugin": "<3.1", - "rainlab/user-plugin": "<=1.4.5", - "rankmath/seo-by-rank-math": "<=1.0.95", - "rap2hpoutre/laravel-log-viewer": "<0.13", - "react/http": ">=0.7,<1.9", - "really-simple-plugins/complianz-gdpr": "<6.4.2", - "remdex/livehelperchat": "<3.99", - "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", - "roots/soil": "<4.1", - "rudloff/alltube": "<3.0.3", - "s-cart/core": "<6.9", - "s-cart/s-cart": "<6.9", - "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": "<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": "<3.26|>=4,<4.11", - "sensiolabs/connect": "<4.2.3", - "serluck/phpwhois": "<=4.2.6", - "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<=1.2", - "shopware/core": "<=6.4.20", - "shopware/platform": "<=6.4.20", - "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17", - "shopware/storefront": "<=6.4.8.1", - "shopxo/shopxo": "<2.2.6", - "showdoc/showdoc": "<2.10.4", - "silverstripe-australia/advancedreports": ">=1,<=2", - "silverstripe/admin": "<1.13.6", - "silverstripe/assets": ">=1,<1.11.1", - "silverstripe/cms": "<4.11.3", - "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", - "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.13.14|>=5,<5.0.13", - "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3", - "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", - "silverstripe/recipe-cms": ">=4.5,<4.5.3", - "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", - "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", - "silverstripe/subsites": ">=2,<2.6.1", - "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3", - "silverstripe/versioned-admin": ">=1,<1.11.1", - "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4", - "simplesamlphp/simplesamlphp": "<1.18.6", - "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", - "simplesamlphp/simplesamlphp-module-openid": "<1", - "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", - "simplito/elliptic-php": "<1.0.6", - "sitegeist/fluid-components": "<3.5", - "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", - "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", - "slim/slim": "<2.6", - "slub/slub-events": "<3.0.3", - "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.2.2", - "socalnick/scn-social-auth": "<1.15.2", - "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", - "spipu/html2pdf": "<5.2.8", - "spoon/library": "<1.4.1", - "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.10", - "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<2.1.62", - "subhh/libconnect": "<7.0.8|>=8,<8.1", - "sukohi/surpass": "<1", - "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", - "sumocoders/framework-user-bundle": "<1.4", - "swag/paypal": "<5.4.4", - "swiftmailer/swiftmailer": ">=4,<5.4.5", - "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/grid-bundle": "<1.10.1", - "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", - "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", - "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", - "symbiote/silverstripe-seed": "<6.0.3", - "symbiote/silverstripe-versionedfiles": "<=2.0.3", - "symfont/process": ">=0", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", - "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", - "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", - "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", - "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", - "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", - "symfony/polyfill-php55": ">=1,<1.10", - "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", - "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", - "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/translation": ">=2,<2.0.17", - "symfony/ux-autocomplete": "<2.11.2", - "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", - "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": "<0.11.5|>=2.2,<2.6.2", - "t3g/svg-sanitizer": "<1.0.3", - "tastyigniter/tastyigniter": "<3.3", - "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<6.2.22", - "terminal42/contao-tablelookupwizard": "<3.3.5", - "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1,<2.1.3", - "theonedemon/phpwhois": "<=4.2.5", - "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.2.0.0-beta2", - "tikiwiki/tiki-manager": "<=17.1", - "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", - "tinymighty/wiki-seo": "<1.2.2", - "titon/framework": "<9.9.99", - "tobiasbg/tablepress": "<=2.0.0.0-RC1", - "topthink/framework": "<6.0.14", - "topthink/think": "<=6.1.1", - "topthink/thinkphp": "<=3.2.3", - "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<=9.4.59197", - "truckersmp/phpwhois": "<=4.3.1", - "ttskch/pagination-service-provider": "<1", - "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", - "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<8.7.51|>=9,<9.5.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4", - "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<1.5.1|>=2,<2.1.2", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", - "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", - "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", - "ua-parser/uap-php": "<3.8", - "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<=2.5.1", - "userfrosting/userfrosting": ">=0.3.1,<4.6.3", - "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", - "uvdesk/community-skeleton": "<=1.1.1", - "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", - "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<4.8.1", - "waldhacker/hcaptcha": "<2.1.2", - "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.6.7", - "wanglelecc/laracms": "<=1.0.3", - "web-auth/webauthn-framework": ">=3.3,<3.3.4", - "webbuilders-group/silverstripe-kapost-bridge": "<0.4", - "webcoast/deferred-image-processing": "<1.0.2", - "webklex/laravel-imap": "<5.3", - "webklex/php-imap": "<5.3", - "webpa/webpa": "<3.1.2", - "wikibase/wikibase": "<=1.39.3", - "wikimedia/parsoid": "<0.12.2", - "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.2.3", - "woocommerce/woocommerce": "<6.6", - "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<=1.14.5", - "wpanel/wpanel4-cms": "<=4.3.1", - "wpcloud/wp-stateless": "<3.2", - "wwbn/avideo": "<=12.4", - "xataface/xataface": "<3", - "xpressengine/xpressengine": "<3.0.15", - "yeswiki/yeswiki": "<4.1", - "yetiforce/yetiforce-crm": "<=6.4", - "yidashi/yii2cmf": "<=2", - "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.27", - "yiisoft/yii2": "<2.0.38", - "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.43", - "yiisoft/yii2-elasticsearch": "<2.0.5", - "yiisoft/yii2-gii": "<=2.2.4", - "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.8", - "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", - "yoast-seo-for-typo3/yoast_seo": "<7.2.3", - "yourls/yourls": "<=1.8.2", - "zencart/zencart": "<=1.5.7.0-beta", - "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", - "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", - "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", - "zendframework/zend-diactoros": "<1.8.4", - "zendframework/zend-feed": "<2.10.3", - "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-http": "<2.8.1", - "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", - "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", - "zendframework/zend-validator": ">=2.3,<2.3.6", - "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zendframework": "<=3", - "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": "<2.0.2", - "zendframework/zendrest": "<2.0.2", - "zendframework/zendservice-amazon": "<2.0.3", - "zendframework/zendservice-api": "<1", - "zendframework/zendservice-audioscrobbler": "<2.0.2", - "zendframework/zendservice-nirvanix": "<2.0.2", - "zendframework/zendservice-slideshare": "<2.0.2", - "zendframework/zendservice-technorati": "<2.0.2", - "zendframework/zendservice-windowsazure": "<2.0.2", - "zendframework/zendxml": "<1.0.1", - "zenstruck/collection": "<0.2.1", - "zetacomponents/mail": "<1.8.2", - "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", - "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" - }, - "default-branch": true, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "role": "maintainer" - }, - { - "name": "Ilya Tribusean", - "email": "slash3b@gmail.com", - "role": "maintainer" - } - ], - "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "keywords": [ - "dev" - ], - "support": { - "issues": "https://github.com/Roave/SecurityAdvisories/issues", - "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", - "type": "tidelift" - } - ], - "time": "2023-10-11T21:04:21+00:00" - }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -2204,7 +1540,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -2212,7 +1548,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -2401,20 +1737,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2446,7 +1782,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -2454,20 +1790,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -2512,7 +1848,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -2520,7 +1856,7 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -2587,16 +1923,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -2652,7 +1988,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -2660,20 +1996,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -2716,7 +2052,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -2724,24 +2060,24 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2773,7 +2109,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -2781,7 +2117,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -2960,16 +2296,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -2981,7 +2317,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3002,8 +2338,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -3011,7 +2346,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -3124,16 +2459,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.9.1", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", "shasum": "" }, "require": { @@ -3143,11 +2478,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -3162,35 +2497,58 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "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" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-03-31T21:03:09+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -3204,9 +2562,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3243,7 +2598,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -3259,20 +2614,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -3286,9 +2641,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3326,7 +2678,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -3342,20 +2694,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -3363,9 +2715,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3409,7 +2758,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -3425,20 +2774,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -3467,7 +2816,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -3475,35 +2824,35 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -3515,7 +2864,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -3547,7 +2896,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -3559,7 +2908,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "webmozart/assert", @@ -3621,16 +2970,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.7.0", + "version": "v15.11.1", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "44ff70977ee020c0b24bfdfaf947be56943de505" + "reference": "ab4ff2719b101dc3bfc3aaaf800edc21a98c56dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/44ff70977ee020c0b24bfdfaf947be56943de505", - "reference": "44ff70977ee020c0b24bfdfaf947be56943de505", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/ab4ff2719b101dc3bfc3aaaf800edc21a98c56dc", + "reference": "ab4ff2719b101dc3bfc3aaaf800edc21a98c56dc", "shasum": "" }, "require": { @@ -3643,21 +2992,21 @@ "amphp/http-server": "^2.1", "dms/phpunit-arraysubset-asserts": "dev-master", "ergebnis/composer-normalize": "^2.28", - "friendsofphp/php-cs-fixer": "3.30.0", + "friendsofphp/php-cs-fixer": "3.51.0", "mll-lab/php-cs-fixer-config": "^5", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.10.37", - "phpstan/phpstan-phpunit": "1.3.14", - "phpstan/phpstan-strict-rules": "1.5.1", + "phpstan/phpstan": "1.10.59", + "phpstan/phpstan-phpunit": "1.3.16", + "phpstan/phpstan-strict-rules": "1.5.2", "phpunit/phpunit": "^9.5 || ^10", "psr/http-message": "^1 || ^2", "react/http": "^1.6", - "react/promise": "^2.9", - "rector/rector": "^0.18", + "react/promise": "^2.0 || ^3.0", + "rector/rector": "^1.0", "symfony/polyfill-php81": "^1.23", - "symfony/var-exporter": "^5 || ^6", + "symfony/var-exporter": "^5 || ^6 || ^7", "thecodingmachine/safe": "^1.3 || ^2" }, "suggest": { @@ -3683,7 +3032,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.7.0" + "source": "https://github.com/webonyx/graphql-php/tree/v15.11.1" }, "funding": [ { @@ -3691,14 +3040,12 @@ "type": "open_collective" } ], - "time": "2023-10-04T09:10:34+00:00" + "time": "2024-03-11T10:21:05+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "roave/security-advisories": 20 - }, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -3711,5 +3058,5 @@ "ext-openssl": "*" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } From 9fbf9cbba48c760773571955e5e544744a64e18a Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Thu, 11 Apr 2024 21:37:45 +0200 Subject: [PATCH 05/18] Fallback to PHP Unit 9.0 & php 8.1 minimum settings --- .github/workflows/ci.yml | 3 ++- README.md | 4 +++- composer.json | 2 +- composer.lock | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 223976c..4902f03 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,8 +22,9 @@ jobs: uses: php-actions/composer@v5 - name: PHPUnit Tests - uses: php-actions/phpunit@v2 + uses: php-actions/phpunit@v3 with: + version: 9.5 php_version: 8.1 bootstrap: vendor/autoload.php configuration: ./.github/workflows/phpunit.xml diff --git a/README.md b/README.md index 410a027..eae930b 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,9 @@ Utilized by other applications as well: + [List of all supported BICs per context](#list-of-all-supported-bics-per-context) ## Requirements -- Since our release >= 2.3, **PHP 8.0** is the minimum required version for this library. Previous releases requires **PHP 7.4**. +- Update April 2024: Since our release >= 2.4, **PHP 8.1** is the minimum required version for this library. Previous releases requires **PHP 8.0**. +- Update April 2023: Since our release >= 2.3, **PHP 8.0** is the minimum required version for this library. Previous releases requires **PHP 7.4**. + - Please use the [major git releases](https://github.com/bluem-development/bluem-php/releases) for the stable versions of this plugin. - Refer to the `composer.json` requirements for any other dependencies diff --git a/composer.json b/composer.json index 4813572..1f0cb30 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,7 @@ } }, "require-dev": { - "phpunit/phpunit": "^9.0", + "phpunit/phpunit": "^9.5", "phpspec/prophecy": "~1.0", "vlucas/phpdotenv": "^5.4", "rector/rector": "^0.15.10", diff --git a/composer.lock b/composer.lock index 210158d..a894af6 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": "f8d436a0e1ee8d487796958789238686", + "content-hash": "1cd474d4354dafb5533494d852cad5bc", "packages": [ { "name": "selective/xmldsig", @@ -3049,7 +3049,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=8.0", + "php": ">=8.1", "ext-dom": "*", "ext-libxml": "*", "ext-simplexml": "*", From ac8a969a7e04a19977b17233cc1991a0f774f773 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 5 Jan 2024 12:12:48 +0100 Subject: [PATCH 06/18] improved exceptions --- composer.json | 1 - .../InvalidBluemRequestException.php | 17 +++++++ src/Helpers/Now.php | 32 ++++++------ src/Requests/BluemRequest.php | 9 ++-- src/Requests/IdentityBluemRequest.php | 2 +- src/Requests/PaymentBluemRequest.php | 51 +++++++++++-------- 6 files changed, 69 insertions(+), 43 deletions(-) create mode 100644 src/Exceptions/InvalidBluemRequestException.php diff --git a/composer.json b/composer.json index 1f0cb30..d5f06a6 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,6 @@ "squizlabs/php_codesniffer": "^3.7", "magento/magento-coding-standard": "^31.0", "phpcompatibility/php-compatibility": "^9.3" - }, "prefer-stable" : true, "scripts": { diff --git a/src/Exceptions/InvalidBluemRequestException.php b/src/Exceptions/InvalidBluemRequestException.php new file mode 100644 index 0000000..81d6689 --- /dev/null +++ b/src/Exceptions/InvalidBluemRequestException.php @@ -0,0 +1,17 @@ + + * + * This source file is subject to the license that is bundled + * with this source code in the file LICENSE. + */ + + +namespace Bluem\BluemPHP\Exceptions; + +use Exception; + +class InvalidBluemRequestException extends Exception +{ + +} diff --git a/src/Helpers/Now.php b/src/Helpers/Now.php index 684bf07..e9f9228 100644 --- a/src/Helpers/Now.php +++ b/src/Helpers/Now.php @@ -54,29 +54,29 @@ public function addDay(int $days): static $this->dateTime = $this->dateTime->add(new DateInterval("P{$days}D")); return $this; } - + + /** + * @throws Exception + */ public function fromDate(string $dateTimeString): static { - try { - $this->dateTime = new DateTimeImmutable( - datetime: $dateTimeString, - timezone: new DateTimeZone(self::DEFAULT_TIMEZONE) - ); - } catch (Exception $e) { - throw $e; - } + $this->dateTime = new DateTimeImmutable( + datetime: $dateTimeString, + timezone: new DateTimeZone(self::DEFAULT_TIMEZONE) + ); + return $this; } + /** + * @throws Exception + */ public function fromTimestamp(string $timestamp): static { - try { - $this->dateTime = (new DateTimeImmutable()) - ->setTimestamp($timestamp) - ->setTimezone(new DateTimeZone(self::DEFAULT_TIMEZONE)); - } catch (Exception $e) { - throw $e; - } + $this->dateTime = (new DateTimeImmutable()) + ->setTimestamp($timestamp) + ->setTimezone(new DateTimeZone(self::DEFAULT_TIMEZONE)); + return $this; } } diff --git a/src/Requests/BluemRequest.php b/src/Requests/BluemRequest.php index e950459..6e02817 100644 --- a/src/Requests/BluemRequest.php +++ b/src/Requests/BluemRequest.php @@ -8,6 +8,7 @@ namespace Bluem\BluemPHP\Requests; +use Bluem\BluemPHP\Exceptions\InvalidBluemRequestException; use Bluem\BluemPHP\Helpers\BluemConfiguration; use Bluem\BluemPHP\Helpers\Now; use Bluem\BluemPHP\Interfaces\BluemRequestInterface; @@ -81,6 +82,7 @@ class BluemRequest implements BluemRequestInterface private array $_debtorAdditionalData = []; + private const TYPE_IDENTIFIERS = [ 'createTransaction', 'requestStatus' ]; /** * @var string[] */ @@ -108,16 +110,15 @@ class BluemRequest implements BluemRequestInterface * * @param BluemConfiguration|object $config * - * @throws Exception + * @throws InvalidBluemRequestException */ public function __construct( $config, string $entranceCode = "", string $expectedReturn = "" ) { - $possibleTypeIdentifiers = [ 'createTransaction', 'requestStatus' ]; - if (! in_array($this->typeIdentifier, $possibleTypeIdentifiers)) { - throw new Exception("Invalid transaction type called for", 1); + if (!in_array($this->typeIdentifier, self::TYPE_IDENTIFIERS, true)) { + throw new InvalidBluemRequestException("Invalid transaction type called for", 1); } // @todo: move to request validation class? diff --git a/src/Requests/IdentityBluemRequest.php b/src/Requests/IdentityBluemRequest.php index 59601f9..bbe64b1 100644 --- a/src/Requests/IdentityBluemRequest.php +++ b/src/Requests/IdentityBluemRequest.php @@ -168,7 +168,7 @@ public function XmlString(): string } /** - * EntranceCodes for iDIN starting with the prefix 'showConsumerGui, + * EntranceCodes for iDIN starting with the prefix `showConsumerGui`, * will always get to a test status page * of the bank where you can choose which status you want to receive back. * diff --git a/src/Requests/PaymentBluemRequest.php b/src/Requests/PaymentBluemRequest.php index 5e09f0b..535ae3d 100644 --- a/src/Requests/PaymentBluemRequest.php +++ b/src/Requests/PaymentBluemRequest.php @@ -9,6 +9,7 @@ namespace Bluem\BluemPHP\Requests; use Bluem\BluemPHP\Contexts\PaymentsContext; +use Bluem\BluemPHP\Exceptions\InvalidBluemRequestException; use Bluem\BluemPHP\Helpers\BluemConfiguration; use Bluem\BluemPHP\Helpers\Now; use Exception; @@ -34,6 +35,7 @@ class PaymentBluemRequest extends BluemRequest private float $amount; /** + * @throws InvalidBluemRequestException * @throws Exception */ public function __construct( @@ -56,22 +58,7 @@ public function __construct( // Default Currency EUR $this->currency = $this->validateCurrency($currency); - $now = new Now(); - - if ($dueDateTime === null) { - $this->dueDateTime = $now->tomorrow()->getCreateDateTimeForRequest(); - } else { - try { - if (is_int($dueDateTime)) { - $then = ($now->fromTimestamp($dueDateTime)); - } else { - $then = ($now->fromDate($dueDateTime)); - } - } catch (Exception $e) { - throw $e; - } - $this->dueDateTime = $then->getCreateDateTimeForRequest(); - } + $this->dueDateTime = $this->getDueDateTime($dueDateTime); // @todo: validate DebtorReference : [0-9a-zA-Z]{1,35} // $sanitizedDebtorReferenceParts = []; @@ -135,16 +122,16 @@ private function sanitizeTransactionID(string $transactionID): string * * @param $currency * - * @throws Exception + * @return string + * @throws InvalidBluemRequestException */ private function validateCurrency($currency): string { $availableCurrencies = [ "EUR" ]; // @todo: add list of currencies based on if (!in_array($currency, $availableCurrencies, true)) { - throw new Exception( - "Currency not recognized, - should be one of the following available currencies: " . - implode(",", $availableCurrencies) + throw new InvalidBluemRequestException( + "Currency not recognized, should be one of the following available currencies: " . + implode(",", $availableCurrencies) ); } @@ -273,6 +260,28 @@ public function setPaymentMethodToCarteBancaire(): self return $this; } + /** + * @param mixed $dueDateTime + * @return string + * @throws InvalidBluemRequestException + */ + public function getDueDateTime(mixed $dueDateTime): string + { + $now = new Now(); + + if ($dueDateTime === null) { + return $now->tomorrow()->getCreateDateTimeForRequest(); + } + try { + $then = is_int($dueDateTime) + ? ($now->fromTimestamp($dueDateTime)) + : ($now->fromDate($dueDateTime)); + return $then->getCreateDateTimeForRequest(); + } catch (Exception $e) { + throw new InvalidBluemRequestException($e); + } + } + private function addZeroPrefix($number) { if (strlen($number.'') === 1) { From e0d8568a855222fc7d62e12d1c8421d70ffe8537 Mon Sep 17 00:00:00 2001 From: Daan Rijpkema <98814502+daanrijpkemacb@users.noreply.github.com> Date: Thu, 11 Apr 2024 22:07:44 +0200 Subject: [PATCH 07/18] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eae930b..310b0a6 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,12 @@ Utilized by other applications as well: * [Appendices](#appendices) + [List of all supported BICs per context](#list-of-all-supported-bics-per-context) +## 2.4 is coming soon +A new version of the PHP library will be released in the coming 1-2 months. +Starting this release, **PHP 8.1** is the minimum required version for this library. + ## Requirements -- Update April 2024: Since our release >= 2.4, **PHP 8.1** is the minimum required version for this library. Previous releases requires **PHP 8.0**. +- 2024: Starting at our release >= 2.4, **PHP 8.1** is the minimum required version for this library. Previous releases requires **PHP 8.0**. - Update April 2023: Since our release >= 2.3, **PHP 8.0** is the minimum required version for this library. Previous releases requires **PHP 7.4**. - Please use the [major git releases](https://github.com/bluem-development/bluem-php/releases) for the stable versions of this plugin. From ab322685ddcd91d36513c7cb596910c820e20716 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Thu, 11 Apr 2024 22:08:55 +0200 Subject: [PATCH 08/18] remove deprecated config --- .github/workflows/phpunit.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/phpunit.xml b/.github/workflows/phpunit.xml index 7cbfdcd..e8bb9e7 100644 --- a/.github/workflows/phpunit.xml +++ b/.github/workflows/phpunit.xml @@ -1,8 +1,8 @@ - + ../../tests - \ No newline at end of file + From 0c8ff3b3f558475ceb4019ac7be07836f79c6ca3 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Wed, 12 Jun 2024 14:21:04 +0200 Subject: [PATCH 09/18] Updated XSD validation files --- validation/EIdentity.xsd | 55 ++++++--------- validation/EMandate.xsd | 40 +++++------ validation/EPayment.xsd | 143 +++++++++++++-------------------------- validation/IBANCheck.xsd | 27 ++++---- 4 files changed, 101 insertions(+), 164 deletions(-) diff --git a/validation/EIdentity.xsd b/validation/EIdentity.xsd index 87c1dd1..5682a79 100644 --- a/validation/EIdentity.xsd +++ b/validation/EIdentity.xsd @@ -1,5 +1,5 @@ - + @@ -9,8 +9,8 @@ Identity Interface - - 2020-MAY-20 + + 2023-NOVEMBER-03 @@ -44,6 +44,16 @@ + + + + + + + + + + @@ -51,14 +61,6 @@ - - - - - - - - @@ -105,7 +107,7 @@ - + @@ -169,7 +171,7 @@ - + @@ -182,13 +184,6 @@ - - - - - - - @@ -337,7 +332,7 @@ - + @@ -346,7 +341,7 @@ - + @@ -375,7 +370,6 @@ - @@ -496,9 +490,7 @@ - - - + @@ -531,7 +523,7 @@ - + @@ -748,14 +740,7 @@ - - - - - - - - + diff --git a/validation/EMandate.xsd b/validation/EMandate.xsd index fd2fc15..329b720 100644 --- a/validation/EMandate.xsd +++ b/validation/EMandate.xsd @@ -1,5 +1,5 @@ - + @@ -9,8 +9,8 @@ EMandate Interface - - 2020-MAY-20 + + 2022-DECEMBER-12 @@ -48,6 +48,16 @@ + + + + + + + + + + @@ -86,7 +96,7 @@ - + @@ -161,9 +171,6 @@ - - - @@ -184,8 +191,9 @@ - - + + + @@ -561,17 +569,9 @@ - - - - - - - - + + - - - + \ No newline at end of file diff --git a/validation/EPayment.xsd b/validation/EPayment.xsd index 361d7c8..65a8b5c 100644 --- a/validation/EPayment.xsd +++ b/validation/EPayment.xsd @@ -1,5 +1,5 @@ - + @@ -9,8 +9,8 @@ EPayment Interface - - 2020-NOVEMBER-26 + + 2023-JANUARY-10 @@ -129,9 +129,6 @@ - - - @@ -180,14 +177,7 @@ - - - + @@ -288,6 +278,7 @@ + @@ -330,7 +321,10 @@ + + + @@ -468,59 +462,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -528,20 +472,17 @@ - - + - - - + - - - + + + + + + @@ -549,14 +490,13 @@ + + + + - - - - - @@ -566,7 +506,10 @@ + + + @@ -600,15 +543,35 @@ - + + + + + + + + + + + + + + + + + + + + + @@ -721,20 +684,8 @@ - - - - - - + diff --git a/validation/IBANCheck.xsd b/validation/IBANCheck.xsd index e222564..7cdcc5c 100644 --- a/validation/IBANCheck.xsd +++ b/validation/IBANCheck.xsd @@ -52,15 +52,6 @@ - - - - - - - - - @@ -86,7 +77,7 @@ - + @@ -133,7 +124,16 @@ - + + + + + + + + + + @@ -248,7 +248,7 @@ - + @@ -269,7 +269,7 @@ - + @@ -286,6 +286,7 @@ + From 04a376f8dee0afba9bdf44d31b77f892c118331d Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Wed, 12 Jun 2024 14:24:09 +0200 Subject: [PATCH 10/18] Updated CI --- .github/workflows/ci.yml | 5 +++-- .github/workflows/phpunit.xml | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 223976c..7d5f141 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,8 +22,9 @@ jobs: uses: php-actions/composer@v5 - name: PHPUnit Tests - uses: php-actions/phpunit@v2 + uses: php-actions/phpunit@v3 with: + version: 9.5 php_version: 8.1 - bootstrap: vendor/autoload.php + bootstrap: ./vendor/autoload.php configuration: ./.github/workflows/phpunit.xml diff --git a/.github/workflows/phpunit.xml b/.github/workflows/phpunit.xml index 7cbfdcd..bc8631b 100644 --- a/.github/workflows/phpunit.xml +++ b/.github/workflows/phpunit.xml @@ -1,8 +1,13 @@ - + ../../tests - \ No newline at end of file + From 7be9d581d512c5aaf0b2fbc7c9fab2e765b38896 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Wed, 12 Jun 2024 15:00:51 +0200 Subject: [PATCH 11/18] Add Sofort Digital services, bancontact and giropay payment methods to Payments context --- src/Contexts/PaymentsContext.php | 8 +++++++- src/Requests/PaymentBluemRequest.php | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Contexts/PaymentsContext.php b/src/Contexts/PaymentsContext.php index b7d2d12..c7caa5c 100644 --- a/src/Contexts/PaymentsContext.php +++ b/src/Contexts/PaymentsContext.php @@ -18,14 +18,20 @@ class PaymentsContext extends BluemContext public const PAYMENT_METHOD_PAYPAL = 'PayPal'; public const PAYMENT_METHOD_CREDITCARD = 'CreditCard'; public const PAYMENT_METHOD_SOFORT = 'Sofort'; + public const PAYMENT_METHOD_SOFORT_DIGITAL_SERVICES = 'SofortDigitalServices'; public const PAYMENT_METHOD_CARTE_BANCAIRE = 'CarteBancaire'; + public const PAYMENT_METHOD_BANCONTACT = 'Bancontact'; + public const PAYMENT_METHOD_GIROPAY = 'Giropay'; public const PAYMENT_METHODS = [ self::PAYMENT_METHOD_IDEAL, self::PAYMENT_METHOD_PAYPAL, self::PAYMENT_METHOD_CREDITCARD, self::PAYMENT_METHOD_SOFORT, - self::PAYMENT_METHOD_CARTE_BANCAIRE + self::PAYMENT_METHOD_SOFORT_DIGITAL_SERVICES, + self::PAYMENT_METHOD_CARTE_BANCAIRE, + self::PAYMENT_METHOD_BANCONTACT, + self::PAYMENT_METHOD_GIROPAY, ]; public string $debtorWalletElementName = self::PAYMENT_METHOD_IDEAL; diff --git a/src/Requests/PaymentBluemRequest.php b/src/Requests/PaymentBluemRequest.php index 535ae3d..85ee163 100644 --- a/src/Requests/PaymentBluemRequest.php +++ b/src/Requests/PaymentBluemRequest.php @@ -254,11 +254,29 @@ public function setPaymentMethodToSofort(): self return $this; } + public function setPaymentMethodToSofortDigitalServices(): self + { + $this->setPaymentMethod($this->context::PAYMENT_METHOD_SOFORT_DIGITAL_SERVICES); + return $this; + } + public function setPaymentMethodToCarteBancaire(): self { $this->setPaymentMethod($this->context::PAYMENT_METHOD_CARTE_BANCAIRE); return $this; } + + public function setPaymentMethodToBancontact(): self + { + $this->setPaymentMethod($this->context::PAYMENT_METHOD_BANCONTACT); + return $this; + } + + public function setPaymentMethodToGiropay(): self + { + $this->setPaymentMethod($this->context::PAYMENT_METHOD_GIROPAY); + return $this; + } /** * @param mixed $dueDateTime From ae2acf61c2cf565e789e16509a0e059a5b253574 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Wed, 12 Jun 2024 15:35:09 +0200 Subject: [PATCH 12/18] Improved readme, mentioning the new documentation --- README.md | 94 +++++++++---------------------------------------------- 1 file changed, 14 insertions(+), 80 deletions(-) diff --git a/README.md b/README.md index 310b0a6..cf826c0 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,20 @@ Utilized by other applications as well: - [Magento2 module](https://github.com/bluem-development/bluem-magento/), available for Bluem customers. - Several third-party customer applications by Bluem customers. +## Documentation + +> Read our improved documentation [**here**](https://bluem-development.github.io/bluem-docs/bluemphp.html) + +We have several guides available there. They include: +- [Getting started guide](https://bluem-development.github.io/bluem-docs/tutorial-configuration.html) +- [Tutorial on payments](https://bluem-development.github.io/bluem-docs/tutorial-payments.html) +- [Tutorial on webhooks](https://bluem-development.github.io/bluem-docs/tutorial-webhooks.html) +- More are coming soon! + +## Remaining documentation + +Most of this will be migrated into the documentation mentioned above. Note: You might find duplicate information below. + ## Table of Contents * [Requirements](#requirements) * [Getting started:](#getting-started) @@ -238,86 +252,6 @@ The Webhook is only needed for ePayments and eMandates: online stores/portals th Please note that the flow for the IBAN-Name check is shorter: a TransactionRequest is performed. The results return as a TransactionResponse. This is because the end-user is not needed; the call is straight to the Bank Database, that provides in the TransactionResponse the IBAN-Name check results. -## Preselecting a bank for Payment requests using debtorWallet -**Note:** This is relevant for bank-based transactions and services: - -It is possible to preselect a Bank within your own application for Payments, based on an IssuerID (BIC/Swift code) when creating a Mandate, Payment or Identity request. This can be used if you want to user to select the given bank in your own interface and skip the bank selection within the Bluem portal interface. -This reduces the amount of steps required by performing the selection of the bank within your own application and interface by utilizing the preselection feature from the PHP library on the request object as so: - -```php -$BIC = "INGBNL2A"; -$request->selectDebtorWallet($BIC); -``` -Parameter has to be a valid BIC code of a supported bank. An invalid BIC code will trigger an exception. **Please note that supported BICs differ per service as not every bank offers the same services!** The supported BIC codes per service can also be requested from a Bluem object, given the service context. **As appendix to this Documentation file, you can find a full list of all BICs per context.** - -Illustrated here is that a list of BICs per context can also be retrieved programmatically: - -```php -$MandatesBICs = $bluem->retrieveBICsForContext("Mandates"); // also specific to localInstrumentCode, see notes. -$PaymentsBICs = $bluem->retrieveBICsForContext("Payments"); -$IdentityBICs = $bluem->retrieveBICsForContext("Identity"); -``` -Input of a different context will trigger an exception. If valid, the result is an array of `Bluem\BluemPHP\BIC` objects with attributes `IssuerID` and `IssuerName`: the BIC and Bank name respectively. You can use this to populate your user interface. - -Please note that the BIC list will vary when a different `localInstrumentCode` is configured. The localInstrumentCode `CORE` and `B2B` are supported by different banks. Based on your configuration, the right BIC list is loaded from context automatically and used to verify the debtorWallet. - -This method can be used when creating iDIN and when creating iDEAL requests; you could store the selected bank (“Issuer”) on user level and use it when creating a request for your user. -- You can inform the user WHY this is necessary and refer to the new laws and rules, in your own website/application or refer to the news/public announcements. -- You can inform the user about the amount of trouble required: display a piece of text saying that it only takes a minute or two, and that it is stored for your convenience: that it ensures integrity, and a valid webshop experience. - -## Using different Payment transaction methods - -**Important note: ensure you have the right BrandID set up for specific payment methods. Refer to your account manager to retrieve a list of the specific BrandIDs per payment method** - -You can allow the PayPal and Creditcard payment methods by selecting these within the request object before sending it. - -To use iDeal, (default option). A BIC **can** be provided. If left empty, bank selection will occur in the Bluem portal. -```php -$BIC = 'INGBNL2A'; -$request = $request->setPaymentMethodToIDEAL($BIC); -``` - -To use PayPal, give in a PayPal account email address. The email is also not required. -```php -$payPalAccount = 'john.doe@gmail.com'; -$request = $request->setPaymentMethodToPayPal($payPalAccount); -``` - -To use Creditcards, you can set the credit card details as follows (not required) -```php -$request = $request->setPaymentMethodToCreditCard(); -``` -or -```php -$cardNumber = '1234000012340000'; -$name = 'John Doe'; -$securityCode = 123; -$expirationDateMonth = 11; -$expirationDateYear = 2025; - -$request = $request->setPaymentMethodToCreditCard( - $cardNumber, - $name, - $securityCode, - $expirationDateMonth, - $expirationDateYear -); -``` - -To use Sofort, use the following method: -```php -$request = $request->setPaymentMethodToSofort(); -``` - -To use Carte Bancaire, use the following method: -```php -$request = $request->setPaymentMethodToCarteBancaire(); -``` - -These methods will throw an exception if required information is missing. - -Once the request executes, the link to the transaction will send you to the Bluem Portal with the corresponding interface and flow. - ## Webhooks Webhooks exist for Payments, eMandates and Identity. They trigger during requests to the Bluem flow and send data to your application. They are vital to ensure all processes are always completed, even if the customer/user does not reach your regular callback method(s) in your flow. From 6363f45a33aaf44184839d67747e6e62ef84eeef Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Wed, 12 Jun 2024 15:49:50 +0200 Subject: [PATCH 13/18] Add interface for SetPaymentMethod methods --- src/Requests/PaymentBluemRequest.php | 62 +++++++++---------- src/Requests/PaymentMethodSetterInterface.php | 21 +++++++ 2 files changed, 49 insertions(+), 34 deletions(-) create mode 100644 src/Requests/PaymentMethodSetterInterface.php diff --git a/src/Requests/PaymentBluemRequest.php b/src/Requests/PaymentBluemRequest.php index 85ee163..5cdbc1c 100644 --- a/src/Requests/PaymentBluemRequest.php +++ b/src/Requests/PaymentBluemRequest.php @@ -14,7 +14,7 @@ use Bluem\BluemPHP\Helpers\Now; use Exception; -class PaymentBluemRequest extends BluemRequest +class PaymentBluemRequest extends BluemRequest implements PaymentMethodSetterInterface { public $request_url_type = "pr"; public $typeIdentifier = "createTransaction"; @@ -40,17 +40,18 @@ class PaymentBluemRequest extends BluemRequest */ public function __construct( BluemConfiguration $config, - $description, - $debtorReference, - $amount, - $dueDateTime = null, - $currency = null, - $transactionID = null, - $entranceCode = "", - string $expected_return = "none", - $debtorReturnURL = "", - $paymentReference = "" - ) { + $description, + $debtorReference, + $amount, + $dueDateTime = null, + $currency = null, + $transactionID = null, + $entranceCode = "", + string $expected_return = "none", + $debtorReturnURL = "", + $paymentReference = "" + ) + { parent::__construct($config, $entranceCode, $expected_return); $this->description = $this->_sanitizeDescription($description); @@ -101,7 +102,7 @@ public function __construct( private function sanitizeTransactionID(string $transactionID): string { - $sanitizedTransactionIDParts = []; + $sanitizedTransactionIDParts = []; $sanitizedTransactionIDCount = preg_match_all( "/[\da-zA-Z]{1,64}/i", $transactionID, @@ -127,7 +128,7 @@ private function sanitizeTransactionID(string $transactionID): string */ private function validateCurrency($currency): string { - $availableCurrencies = [ "EUR" ]; // @todo: add list of currencies based on + $availableCurrencies = ["EUR"]; // @todo: add list of currencies based on if (!in_array($currency, $availableCurrencies, true)) { throw new InvalidBluemRequestException( "Currency not recognized, should be one of the following available currencies: " . @@ -147,8 +148,8 @@ public function XmlString(): string { $extraOptions = [ 'documentType' => "PayRequest", - 'sendOption' => "none", - 'language' => "nl", + 'sendOption' => "none", + 'language' => "nl", ]; if (!empty($this->brandID)) { @@ -193,7 +194,7 @@ public function setPaymentMethodToIDEAL($BIC = ""): self if (!empty($BIC)) { $this->context->addPaymentMethodDetails( [ - 'BIC'=>$BIC + 'BIC' => $BIC ] ); } @@ -211,7 +212,7 @@ public function setPaymentMethodToPayPal($payPalAccount = ""): self if (!empty($payPalAccount)) { $this->context->addPaymentMethodDetails( [ - 'PayPalAccount'=>$payPalAccount + 'PayPalAccount' => $payPalAccount ] ); } @@ -225,7 +226,8 @@ public function setPaymentMethodToCreditCard( string $securityCode = '', string $expirationDateMonth = '', string $expirationDateYear = '' - ): self { + ): self + { $this->setPaymentMethod($this->context::PAYMENT_METHOD_CREDITCARD); /** @@ -236,11 +238,11 @@ public function setPaymentMethodToCreditCard( ) { $this->context->addPaymentMethodDetails( [ - 'CardNumber'=>$cardNumber, - 'Name'=>$name, - 'SecurityCode'=>$securityCode, - 'ExpirationDateMonth'=>$expirationDateMonth, - 'ExpirationDateYear'=>$expirationDateYear, + 'CardNumber' => $cardNumber, + 'Name' => $name, + 'SecurityCode' => $securityCode, + 'ExpirationDateMonth' => $expirationDateMonth, + 'ExpirationDateYear' => $expirationDateYear, ] ); } @@ -265,7 +267,7 @@ public function setPaymentMethodToCarteBancaire(): self $this->setPaymentMethod($this->context::PAYMENT_METHOD_CARTE_BANCAIRE); return $this; } - + public function setPaymentMethodToBancontact(): self { $this->setPaymentMethod($this->context::PAYMENT_METHOD_BANCONTACT); @@ -300,13 +302,6 @@ public function getDueDateTime(mixed $dueDateTime): string } } - private function addZeroPrefix($number) - { - if (strlen($number.'') === 1) { - return (int) '0'.$number; - } - } - private function XmlWrapDebtorWalletForPaymentMethod(): string { $res = ''; @@ -377,8 +372,7 @@ private function XmlWrapDebtorWalletForPaymentMethod(): string */ public function selectDebtorWallet($BIC) { - - if (! in_array($BIC, $this->context->getBICCodes())) { + if (!in_array($BIC, $this->context->getBICCodes(), true)) { throw new Exception("Invalid BIC code given, should be a valid BIC of a supported bank."); } diff --git a/src/Requests/PaymentMethodSetterInterface.php b/src/Requests/PaymentMethodSetterInterface.php new file mode 100644 index 0000000..1324068 --- /dev/null +++ b/src/Requests/PaymentMethodSetterInterface.php @@ -0,0 +1,21 @@ + Date: Fri, 14 Jun 2024 12:50:05 +0200 Subject: [PATCH 14/18] Add return hints for Bluem Context --- src/Contexts/BluemContext.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Contexts/BluemContext.php b/src/Contexts/BluemContext.php index 77d85da..25dd0ef 100644 --- a/src/Contexts/BluemContext.php +++ b/src/Contexts/BluemContext.php @@ -8,20 +8,23 @@ namespace Bluem\BluemPHP\Contexts; +use Bluem\BluemPHP\Helpers\BIC; use Bluem\BluemPHP\Interfaces\BluemContextInterface; abstract class BluemContext implements BluemContextInterface { - + /** @var BIC[] $BICs */ public function __construct(public array $BICs = []) { } + /** @return BIC[] $BICs */ public function getBICs(): array { return $this->BICs; } + /** @return string[] $codes */ public function getBICCodes(): array { $codes = []; From be6cb9f0bae48446b87776b7c7837727b41b2bdf Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 14 Jun 2024 12:55:14 +0200 Subject: [PATCH 15/18] Append mandateID properly if base already has query string params --- src/Requests/EmandateBluemRequest.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Requests/EmandateBluemRequest.php b/src/Requests/EmandateBluemRequest.php index 70e9989..b89a889 100644 --- a/src/Requests/EmandateBluemRequest.php +++ b/src/Requests/EmandateBluemRequest.php @@ -56,7 +56,17 @@ public function __construct(BluemConfiguration $config, private $debtorReference $this->mandateID = $mandateID; // https - unique return URL for customer - $this->merchantReturnURL = "$this->merchantReturnURLBase?mandateID=$this->mandateID"; + + $urlBase = $this->merchantReturnURLBase; + $hasQueryString = preg_match('/\?.+=.+/', $urlBase); + + if ($hasQueryString) { + $this->merchantReturnURL = "$this->merchantReturnURLBase&mandateID=$this->mandateID"; + } else { + $this->merchantReturnURL = "$this->merchantReturnURLBase?mandateID=$this->mandateID"; + } + + $this->sequenceType = $config->sequenceType ?? "RCUR"; // reason for the mandate; configurable per client $this->eMandateReason = $config->eMandateReason ?? "Incasso machtiging"; From 7193f56968267887d169e13b41de3abe69fd3fc3 Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 14 Jun 2024 13:12:41 +0200 Subject: [PATCH 16/18] Append url params properly if base already has query string params --- src/Requests/BluemRequest.php | 14 ++++++++++++++ src/Requests/EmandateBluemRequest.php | 11 +---------- src/Requests/IdentityBluemRequest.php | 2 +- src/Requests/PaymentBluemRequest.php | 6 +++--- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/Requests/BluemRequest.php b/src/Requests/BluemRequest.php index 6e02817..6a95133 100644 --- a/src/Requests/BluemRequest.php +++ b/src/Requests/BluemRequest.php @@ -453,4 +453,18 @@ public function setBrandId(string $brandID): void { $this->brandID = $brandID; } + + /** + * Use the right separator based on the presence of a query string + */ + protected function appendToUrl(string $urlBase, string $key, $value): string + { + $hasQueryString = preg_match('/\?.+=.+/', $urlBase); + + if ($hasQueryString) { + return "{$urlBase}&{$key}={$value}"; + } + + return "{$urlBase}?{$key}={$value}"; + } } diff --git a/src/Requests/EmandateBluemRequest.php b/src/Requests/EmandateBluemRequest.php index b89a889..d111bc6 100644 --- a/src/Requests/EmandateBluemRequest.php +++ b/src/Requests/EmandateBluemRequest.php @@ -56,16 +56,7 @@ public function __construct(BluemConfiguration $config, private $debtorReference $this->mandateID = $mandateID; // https - unique return URL for customer - - $urlBase = $this->merchantReturnURLBase; - $hasQueryString = preg_match('/\?.+=.+/', $urlBase); - - if ($hasQueryString) { - $this->merchantReturnURL = "$this->merchantReturnURLBase&mandateID=$this->mandateID"; - } else { - $this->merchantReturnURL = "$this->merchantReturnURLBase?mandateID=$this->mandateID"; - } - + $this->merchantReturnURL = $this->appendToUrl($this->merchantReturnURLBase, 'mandateID',$this->mandateID); $this->sequenceType = $config->sequenceType ?? "RCUR"; // reason for the mandate; configurable per client diff --git a/src/Requests/IdentityBluemRequest.php b/src/Requests/IdentityBluemRequest.php index bbe64b1..4ee7c71 100644 --- a/src/Requests/IdentityBluemRequest.php +++ b/src/Requests/IdentityBluemRequest.php @@ -63,7 +63,7 @@ public function __construct( if ($debtorReturnURL == "") { throw new Exception("Debtor return URL is required"); } - $this->debtorReturnURL = $debtorReturnURL . "?debtorReference=$this->debtorReference"; + $this->debtorReturnURL = $this->appendToUrl($debtorReturnURL,"debtorReference",$this->debtorReference); // @todo: make this a configurable setting $this->minAge = $config->minAge ?? BLUEM_DEFAULT_MIN_AGE; diff --git a/src/Requests/PaymentBluemRequest.php b/src/Requests/PaymentBluemRequest.php index 5cdbc1c..4992791 100644 --- a/src/Requests/PaymentBluemRequest.php +++ b/src/Requests/PaymentBluemRequest.php @@ -86,9 +86,9 @@ public function __construct( } else { $this->debtorReturnURL = $config->merchantReturnURLBase; } - $this->debtorReturnURL .= "?entranceCode=$this->entranceCode&transactionID=$this->transactionID"; - $this->debtorReturnURL = str_replace('&', '&', $this->debtorReturnURL); + $this->debtorReturnURL = $this->appendToUrl($this->debtorReturnURL, 'entranceCode', $this->entranceCode); + $this->debtorReturnURL = $this->appendToUrl($this->debtorReturnURL, 'transactionID',$this->transactionID); // Note: different variable name in config // added entranceCode as well, useful. Defined in generic bluem request class. @@ -155,7 +155,7 @@ public function XmlString(): string if (!empty($this->brandID)) { $extraOptions['brandID'] = $this->brandID; } - + return $this->XmlRequestInterfaceWrap( $this->xmlInterfaceName, 'TransactionRequest', From e7da87a3ae65c91145909abfba3d1f3ec9bee4aa Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 14 Jun 2024 14:23:44 +0200 Subject: [PATCH 17/18] Fallback to Merchant return URL base if no debtor Return URL --- src/Requests/IdentityBluemRequest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Requests/IdentityBluemRequest.php b/src/Requests/IdentityBluemRequest.php index 4ee7c71..1f2f73d 100644 --- a/src/Requests/IdentityBluemRequest.php +++ b/src/Requests/IdentityBluemRequest.php @@ -60,9 +60,12 @@ public function __construct( $this->requestCategory = $this->getRequestCategoryElement($requestCategory); $this->description = $this->_sanitizeDescription($description); - if ($debtorReturnURL == "") { - throw new Exception("Debtor return URL is required"); + + + if (!$debtorReturnURL || (string)$debtorReturnURL === "") { + $debtorReturnURL = $config->merchantReturnURLBase; } + $this->debtorReturnURL = $this->appendToUrl($debtorReturnURL,"debtorReference",$this->debtorReference); // @todo: make this a configurable setting From 97168cc707b49bc121f395fb3406fc58b939703b Mon Sep 17 00:00:00 2001 From: "daan.rijpkema" Date: Fri, 14 Jun 2024 15:15:46 +0200 Subject: [PATCH 18/18] Improve brand ID setting for payments --- src/Requests/PaymentStatusBluemRequest.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Requests/PaymentStatusBluemRequest.php b/src/Requests/PaymentStatusBluemRequest.php index 0ebc7f4..8498bb7 100644 --- a/src/Requests/PaymentStatusBluemRequest.php +++ b/src/Requests/PaymentStatusBluemRequest.php @@ -25,12 +25,19 @@ public function __construct( ) { parent::__construct($config, $entranceCode, $expected_return); - if (isset($config->paymentBrandID) + + if(method_exists($config,'setBrandID')) { + if (isset($config->paymentBrandID) + && $config->paymentBrandID !== "" + ) { + $config->setBrandID($config->paymentBrandID); + } else { + $config->setBrandID($config->brandID); + } + } else if (isset($config->paymentBrandID) && $config->paymentBrandID !== "" ) { - $config->setBrandID($config->paymentBrandID); - } else { - $config->setBrandID($config->brandID); + $config->brandID = $config->paymentBrandID; } $this->transactionID = $transactionID;