From 073df565080894aefb4a6cebb57189187b6925a7 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Fri, 14 Oct 2022 14:41:49 +0200 Subject: [PATCH 01/88] Make the setLogger method on the API class adhere to the LoggerAwareInterface --- lib/Api/Api.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 01b3825f..c7973fac 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -121,14 +121,10 @@ public function getLogger() /** * Sets a logger. - * - * @return $this */ - public function setLogger(LoggerInterface $logger) + public function setLogger(LoggerInterface $logger): void { $this->logger = $logger; - - return $this; } /** From 4904d6f58c51f723fc88d7c3fcc47b8862b4b760 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Fri, 14 Oct 2022 14:42:56 +0200 Subject: [PATCH 02/88] Change assertion in test to always fail when validation fails --- tests/Api/MauticApiTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index b15c4f51..e5d8bb76 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,7 +43,7 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->assertTrue($authorized, 'Authorization failed. Check credentials in local.config.php.'); + $this->assertTrue(false, 'Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); From 931e15eb0fbeab7c5e95a2602e2773f0d737f3d0 Mon Sep 17 00:00:00 2001 From: Marinus van Velzen Date: Mon, 17 Oct 2022 13:41:31 +0200 Subject: [PATCH 03/88] Change assertion to fail method Co-authored-by: John Linhart --- tests/Api/MauticApiTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index e5d8bb76..d50cd207 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,7 +43,7 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->assertTrue(false, 'Authorization failed. Check credentials in local.config.php.'); + $this->fail( 'Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); From 0de5ac05675a69b13027f27af50d7256267f3ba1 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Mon, 17 Oct 2022 15:52:54 +0200 Subject: [PATCH 04/88] Fix assertions --- tests/Api/MauticApiTestCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index d50cd207..d4cdfc33 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,12 +43,12 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->fail( 'Authorization failed. Check credentials in local.config.php.'); + $this->fail('Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); } catch (\Exception $e) { - $this->assertTrue(false, $e->getMessage()); + $this->fail($e->getMessage()); } if ($auth->accessTokenUpdated()) { From bea5b68aec92f90be232fba4cd09319d2360b9a2 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 18:52:02 +0200 Subject: [PATCH 05/88] Update project to support to php8 --- composer.json | 4 +- composer.lock | 1289 ++++++++++++++++++------------------------------- 2 files changed, 464 insertions(+), 829 deletions(-) diff --git a/composer.json b/composer.json index 795b35a9..7cdd8dfc 100644 --- a/composer.json +++ b/composer.json @@ -14,14 +14,14 @@ } }, "require": { - "php": ">=7.2.0", + "php": ">=8.0", "ext-curl": "*", "ext-json": "*", "psr/log": "~1.0 || ~2.0 || ~3.0" }, "require-dev": { "kint-php/kint": "^4.1", - "friendsofphp/php-cs-fixer": "~2.16.1", + "friendsofphp/php-cs-fixer": "~3.12.0", "phpunit/phpunit": "~9.5.0", "brianium/paratest": "^6.2" }, diff --git a/composer.lock b/composer.lock index 168754c6..8d7892ea 100644 --- a/composer.lock +++ b/composer.lock @@ -4,34 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f0a1c55665367db1d432c91dbb1d8ca6", + "content-hash": "dc4a2abe45289b6de968d6188ef3d48b", "packages": [ { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -52,24 +52,24 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" } ], "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.4.4", + "version": "v6.6.4", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da" + "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/589cdb23728b2a19872945580b95d8aa2c6619da", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4ce800dc32fd0292a4f05c00f347142dce1ecdda", + "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda", "shasum": "" }, "require": { @@ -77,26 +77,30 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", + "jean85/pretty-package-versions": "^2.0.5", "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.11", + "phpunit/php-code-coverage": "^9.2.17", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.14", - "sebastian/environment": "^5.1.3", - "symfony/console": "^5.4.0 || ^6.0.0", - "symfony/process": "^5.4.0 || ^6.0.0" + "phpunit/phpunit": "^9.5.24", + "sebastian/environment": "^5.1.4", + "symfony/console": "^5.4.12 || ^6.1.4", + "symfony/process": "^5.4.11 || ^6.1.3" }, "require-dev": { - "doctrine/coding-standard": "^9.0.0", + "doctrine/coding-standard": "^10.0.0", + "ext-pcov": "*", "ext-posix": "*", - "infection/infection": "^0.26.5", + "infection/infection": "^0.26.14", "malukenho/mcbumpface": "^1.1.5", - "squizlabs/php_codesniffer": "^3.6.2", - "symfony/filesystem": "^v5.4.0 || ^6.0.0", - "vimeo/psalm": "^4.20.0" + "squizlabs/php_codesniffer": "^3.7.1", + "symfony/filesystem": "^5.4.12 || ^6.1.4", + "vimeo/psalm": "^4.27.0" }, "bin": [ - "bin/paratest" + "bin/paratest", + "bin/paratest.bat", + "bin/paratest_for_phpstorm" ], "type": "library", "autoload": { @@ -132,7 +136,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.4.4" + "source": "https://github.com/paratestphp/paratest/tree/v6.6.4" }, "funding": [ { @@ -144,7 +148,78 @@ "type": "paypal" } ], - "time": "2022-03-28T07:55:11+00:00" + "time": "2022-09-13T10:47:01+00:00" + }, + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T20:21:48+00:00" }, { "name": "composer/semver", @@ -229,25 +304,27 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.6", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { @@ -273,7 +350,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -289,20 +366,20 @@ "type": "tidelift" } ], - "time": "2021-03-25T17:01:18+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "doctrine/annotations", - "version": "1.13.2", + "version": "1.13.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + "reference": "648b0343343565c4a056bfc8392201385e8d89f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0", "shasum": "" }, "require": { @@ -314,9 +391,10 @@ "require-dev": { "doctrine/cache": "^1.11 || ^2.0", "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", + "phpstan/phpstan": "^1.4.10 || ^1.8.0", "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "symfony/cache": "^4.4 || ^5.2", + "vimeo/psalm": "^4.10" }, "type": "library", "autoload": { @@ -359,9 +437,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" + "source": "https://github.com/doctrine/annotations/tree/1.13.3" }, - "time": "2021-08-05T19:00:23+00:00" + "time": "2022-07-02T10:48:51+00:00" }, { "name": "doctrine/instantiator", @@ -511,59 +589,56 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.16.10", + "version": "v3.12.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "7dd27dde4852270de8f672636a0855ce7de47bf0" + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7dd27dde4852270de8f672636a0855ce7de47bf0", - "reference": "7dd27dde4852270de8f672636a0855ce7de47bf0", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/eae11d945e2885d86e1c080eec1bb30a2aa27998", + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998", "shasum": "" }, "require": { - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.2", - "doctrine/annotations": "^1.2", + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || ^7.0", - "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", - "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0", - "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", - "symfony/polyfill-php70": "^1.0", - "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0 || ^5.0", - "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", - "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4.1", - "php-cs-fixer/accessible-object": "^1.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.4.4 <9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", - "symfony/phpunit-bridge": "^5.1", - "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters.", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", - "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" @@ -572,19 +647,7 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - }, - "classmap": [ - "tests/Test/AbstractFixerTestCase.php", - "tests/Test/AbstractIntegrationCaseFactory.php", - "tests/Test/AbstractIntegrationTestCase.php", - "tests/Test/Assert/AssertTokensTrait.php", - "tests/Test/IntegrationCase.php", - "tests/Test/IntegrationCaseFactory.php", - "tests/Test/IntegrationCaseFactoryInterface.php", - "tests/Test/InternalIntegrationCaseFactory.php", - "tests/Test/IsIdenticalConstraint.php", - "tests/TestCase.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -603,7 +666,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.16.10" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.12.0" }, "funding": [ { @@ -611,20 +674,79 @@ "type": "github" } ], - "time": "2020-12-17T16:34:40+00:00" + "time": "2022-10-12T14:20:51+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.17", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^0.12.66", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" + }, + "time": "2021-10-08T21:21:46+00:00" }, { "name": "kint-php/kint", - "version": "4.1.2", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/kint-php/kint.git", - "reference": "fa53c4333cda79dc9cb002cfa029abe994d0ae00" + "reference": "7601bfd95ccc50a1b903c2764b31d00919e8edd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kint-php/kint/zipball/fa53c4333cda79dc9cb002cfa029abe994d0ae00", - "reference": "fa53c4333cda79dc9cb002cfa029abe994d0ae00", + "url": "https://api.github.com/repos/kint-php/kint/zipball/7601bfd95ccc50a1b903c2764b31d00919e8edd9", + "reference": "7601bfd95ccc50a1b903c2764b31d00919e8edd9", "shasum": "" }, "require": { @@ -674,9 +796,9 @@ ], "support": { "issues": "https://github.com/kint-php/kint/issues", - "source": "https://github.com/kint-php/kint/tree/4.1.2" + "source": "https://github.com/kint-php/kint/tree/4.2.3" }, - "time": "2022-02-22T20:32:24+00:00" + "time": "2022-10-01T20:16:33+00:00" }, { "name": "myclabs/deep-copy", @@ -739,16 +861,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -789,9 +911,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "phar-io/manifest", @@ -904,307 +1026,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "SpacePossum" - } - ], - "description": "sebastian/diff v2 backport support for PHP5.6", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" - }, - "time": "2020-10-14T08:39:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1253,7 +1093,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, "funding": [ { @@ -1261,7 +1101,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-08-30T12:24:04+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1506,16 +1346,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "9.5.25", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", "shasum": "" }, "require": { @@ -1530,7 +1370,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -1538,20 +1377,16 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -1593,7 +1428,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" }, "funding": [ { @@ -1603,26 +1438,30 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2022-09-25T03:44:45+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -1642,7 +1481,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -1652,28 +1491,33 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1700,9 +1544,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -1923,16 +1767,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -1985,7 +1829,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -1993,7 +1837,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -2183,16 +2027,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -2248,7 +2092,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -2256,7 +2100,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -2611,16 +2455,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -2632,7 +2476,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2655,7 +2499,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -2663,7 +2507,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -2720,46 +2564,43 @@ }, { "name": "symfony/console", - "version": "v5.4.7", + "version": "v6.1.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6" + "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6", - "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6", + "url": "https://api.github.com/repos/symfony/console/zipball/7fa3b9cf17363468795e539231a5c91b02b608fc", + "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2799,7 +2640,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.7" + "source": "https://github.com/symfony/console/tree/v6.1.6" }, "funding": [ { @@ -2815,29 +2656,29 @@ "type": "tidelift" } ], - "time": "2022-03-31T17:09:19+00:00" + "time": "2022-10-07T08:04:03+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -2866,7 +2707,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" }, "funding": [ { @@ -2882,44 +2723,42 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2951,7 +2790,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" }, "funding": [ { @@ -2967,24 +2806,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-05T16:51:07+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.1", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -2993,7 +2832,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -3030,7 +2869,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" }, "funding": [ { @@ -3046,27 +2885,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.7", + "version": "v6.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f" + "reference": "4d216a2beef096edf040a070117c39ca2abce307" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f", - "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d216a2beef096edf040a070117c39ca2abce307", + "reference": "4d216a2beef096edf040a070117c39ca2abce307", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -3094,7 +2932,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.7" + "source": "https://github.com/symfony/filesystem/tree/v6.1.5" }, "funding": [ { @@ -3110,26 +2948,27 @@ "type": "tidelift" } ], - "time": "2022-04-01T12:33:59+00:00" + "time": "2022-09-21T20:29:40+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v6.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -3157,7 +2996,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v6.1.3" }, "funding": [ { @@ -3173,27 +3012,25 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-07-29T07:42:06+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", + "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", "autoload": { @@ -3226,7 +3063,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" }, "funding": [ { @@ -3242,20 +3079,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -3270,7 +3107,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3308,7 +3145,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3324,20 +3161,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -3349,7 +3186,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3389,7 +3226,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -3405,20 +3242,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -3430,7 +3267,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3473,7 +3310,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -3489,20 +3326,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -3517,7 +3354,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3556,151 +3393,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-11-30T18:21:41+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -3716,20 +3409,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.25.0", + "name": "symfony/polyfill-php80", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -3738,7 +3431,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3750,7 +3443,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -3761,6 +3454,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3770,7 +3467,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3779,7 +3476,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -3795,20 +3492,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "name": "symfony/polyfill-php81", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -3817,7 +3514,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3829,7 +3526,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -3840,10 +3537,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3853,7 +3546,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3862,7 +3555,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -3878,25 +3571,24 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.4.7", + "version": "v6.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb" + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb", - "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb", + "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -3924,7 +3616,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.7" + "source": "https://github.com/symfony/process/tree/v6.1.3" }, "funding": [ { @@ -3940,26 +3632,25 @@ "type": "tidelift" } ], - "time": "2022-03-18T16:18:52+00:00" + "time": "2022-06-27T17:24:16+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -3970,7 +3661,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -3980,7 +3671,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4007,7 +3701,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" }, "funding": [ { @@ -4023,24 +3717,24 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2022-05-30T19:18:58+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.5", + "version": "v6.1.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/266636bb8f3fbdccc302491df7b3a1b9a8c238a7", + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -4069,7 +3763,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.1.5" }, "funding": [ { @@ -4085,38 +3779,37 @@ "type": "tidelift" } ], - "time": "2022-02-18T16:06:09+00:00" + "time": "2022-09-28T16:00:52+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v6.1.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/7e7e0ff180d4c5a6636eaad57b65092014b61864", + "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -4155,7 +3848,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v6.1.6" }, "funding": [ { @@ -4171,7 +3864,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-10-10T09:34:31+00:00" }, { "name": "theseer/tokenizer", @@ -4222,64 +3915,6 @@ } ], "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], @@ -4288,10 +3923,10 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.2.0", + "php": ">=8.0", "ext-curl": "*", "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } From a28aa424684647b8f4a879dc24fef573fe932e68 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 20:12:56 +0200 Subject: [PATCH 06/88] Update upgrade readme with changes from this PR --- UPGRADE-3.0.md | 12 ------------ UPGRADE-4.0.md | 5 +++++ 2 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 UPGRADE-3.0.md create mode 100644 UPGRADE-4.0.md diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md deleted file mode 100644 index c266ce61..00000000 --- a/UPGRADE-3.0.md +++ /dev/null @@ -1,12 +0,0 @@ -# Dependencies -* PHP 7.2.0 is the now the minimum - -# Contacts -* \Mautic\Api\Contacts::getEvents has been removed. Use \Mautic\Api\Contacts::getActivityForContact instead. - -# Leads -* \Mautic\Api\Leads has been removed. Use \Mautic\Api\Contacts instead. - -# Lists -* The \Mautic\Api\Lists has been removed. Use \Mautic\Api\Segments instead. - diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md new file mode 100644 index 00000000..3a157bba --- /dev/null +++ b/UPGRADE-4.0.md @@ -0,0 +1,5 @@ +# Dependencies +* PHP 8.0 is the now the minimum + +# Api +* \Mautic\Api\Api::getLogger now returns void as the LoggerAwareInterface dictates From 3912e79810bf1ea94f38d6290c3416bb80c0acde Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 20:18:14 +0200 Subject: [PATCH 07/88] Update testing ddev file to use PHP 8.0 --- .ddev/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ddev/config.yaml b/.ddev/config.yaml index 38e86f82..7a7180e1 100644 --- a/.ddev/config.yaml +++ b/.ddev/config.yaml @@ -1,7 +1,7 @@ name: api-library type: php docroot: "" -php_version: "7.4" +php_version: "8.0" webserver_type: apache-fpm router_http_port: "80" router_https_port: "443" @@ -13,7 +13,7 @@ mysql_version: "" provider: default use_dns_when_possible: true composer_version: "2" -webimage_extra_packages: [php7.4-imap] +webimage_extra_packages: [php8.0-imap] hooks: post-start: - exec: "./.ddev/mautic-setup.sh" From 4b5f9c1dd3b57b7e5300d16de48b51b5dd3a13be Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 20:19:34 +0200 Subject: [PATCH 08/88] Update github workflows with PHP 8 --- .github/workflows/tests.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d852acf1..3dadf815 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,7 +34,7 @@ jobs: image: mailhog/mailhog:latest ports: - 1025:1025 - + redis: image: redis:6 ports: @@ -49,7 +49,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 7.4 + php-version: 8.0 ini-values: session.save_handler=redis, session.save_path="tcp://127.0.0.1:6379" extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql coverage: pcov @@ -63,12 +63,12 @@ jobs: run: | sudo add-apt-repository ppa:ondrej/php -y sudo add-apt-repository ppa:ondrej/apache2 -y - sudo apt-get install apache2 libapache2-mod-php7.4 + sudo apt-get install apache2 libapache2-mod-php8.0 sudo a2enmod rewrite - sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/7.4/apache2/php.ini - sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/7.4/apache2/php.ini + sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.0/apache2/php.ini + sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.0/apache2/php.ini sudo service apache2 restart - cat /etc/php/7.4/apache2/php.ini | grep session + cat /etc/php/8.0/apache2/php.ini | grep session - name: Install dependencies run: | @@ -115,13 +115,13 @@ jobs: - name: Set correct ownership so Apache can access the files run: sudo chown -R www-data:www-data /var/www/html - + - name: Run tests run: vendor/bin/paratest -p 3 --coverage-clover coverage.xml - name: Upload code coverage run: bash <(curl -s https://codecov.io/bash) - + - name: Upload logs as artifacts uses: actions/upload-artifact@v2 if: always() @@ -146,7 +146,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 7.4 + php-version: 8.0 extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql - name: Install dependencies From 53855dbbcf30cc662d15769f9d93b4d35248aa40 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 21:18:20 +0200 Subject: [PATCH 09/88] Update Readme to have PHP 8.0 as the minimum requirement --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d0322cb..a23c253b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # Using the Mautic API Library ## Requirements -* PHP 7.2 or newer +* PHP 8.0 or newer * cURL support ## Installing the API Library From 3b87cc83772b826be390024bb5dd9b4229a69139 Mon Sep 17 00:00:00 2001 From: Martina Scholz <64533137+LadySolveig@users.noreply.github.com> Date: Mon, 10 Apr 2023 20:02:40 +0200 Subject: [PATCH 10/88] Fix - Deprecated PHP 8.1 Fix for Deprecated : strlen(): Passing null to parameter #1 ($string) of type string is deprecated in api-library/lib/Auth/OAuth.php on - line 388 - line 395 - line 637 --- lib/Auth/OAuth.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Auth/OAuth.php b/lib/Auth/OAuth.php index 1ea8ca9a..312baecd 100755 --- a/lib/Auth/OAuth.php +++ b/lib/Auth/OAuth.php @@ -385,14 +385,14 @@ public function validateAccessToken($redirect = true) } //Check for existing access token - if (strlen($this->_access_token) > 0) { + if ($this->_access_token && strlen($this->_access_token) > 0) { $this->log('has access token'); return true; } //Reauthorize if no token was found - if (0 == strlen($this->_access_token)) { + if (!$this->_access_token || 0 == strlen($this->_access_token)) { $this->log('access token empty so authorize'); //OAuth flows @@ -634,7 +634,7 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res $parameters['code'] = $_GET['code']; } - if (strlen($this->_refresh_token) > 0) { + if ($this->_refresh_token && strlen($this->_refresh_token) > 0) { $this->log('Using refresh token'); $parameters['grant_type'] = 'refresh_token'; $parameters['refresh_token'] = $this->_refresh_token; From 1078e2c8e1de54f2c918749adb0f3b3ed3dbaee3 Mon Sep 17 00:00:00 2001 From: Martina Scholz <64533137+LadySolveig@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:48:59 +0200 Subject: [PATCH 11/88] Simplified Version deleted strlen() completely from lines --- lib/Auth/OAuth.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Auth/OAuth.php b/lib/Auth/OAuth.php index 312baecd..bcd5aadd 100755 --- a/lib/Auth/OAuth.php +++ b/lib/Auth/OAuth.php @@ -385,14 +385,14 @@ public function validateAccessToken($redirect = true) } //Check for existing access token - if ($this->_access_token && strlen($this->_access_token) > 0) { + if ($this->_access_token) { $this->log('has access token'); return true; } //Reauthorize if no token was found - if (!$this->_access_token || 0 == strlen($this->_access_token)) { + if (!$this->_access_token) { $this->log('access token empty so authorize'); //OAuth flows @@ -522,7 +522,7 @@ protected function getQueryParameters($isPost, $parameters) */ protected function isOauth1() { - return !empty($this->_request_token_url) && strlen($this->_request_token_url) > 0; + return !empty($this->_request_token_url); } /** @@ -634,7 +634,7 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res $parameters['code'] = $_GET['code']; } - if ($this->_refresh_token && strlen($this->_refresh_token) > 0) { + if ($this->_refresh_token) { $this->log('Using refresh token'); $parameters['grant_type'] = 'refresh_token'; $parameters['refresh_token'] = $this->_refresh_token; From 525c734a5aa6415d932105b6f536f27cf851e73a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:10:31 +0000 Subject: [PATCH 12/88] docs: update README.md [skip ci] --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0d0322cb..74b7c4a8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![codecov](https://codecov.io/gh/mautic/api-library/branch/master/graph/badge.svg)](https://codecov.io/gh/mautic/api-library) [![Latest Stable Version](https://poser.pugx.org/mautic/api-library/v)](//packagist.org/packages/mautic/api-library) [![Total Downloads](https://poser.pugx.org/mautic/api-library/downloads)](//packagist.org/packages/mautic/api-library) [![Latest Unstable Version](https://poser.pugx.org/mautic/api-library/v/unstable)](//packagist.org/packages/mautic/api-library) [![License](https://poser.pugx.org/mautic/api-library/license)](//packagist.org/packages/mautic/api-library) -[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-) # Using the Mautic API Library @@ -271,9 +271,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - - - + + + +

Zdeno Kuzmany

💻

dlopez-akalam

💻

mollux

💻
Zdeno Kuzmany
Zdeno Kuzmany

💻
dlopez-akalam
dlopez-akalam

💻
mollux
mollux

💻
Martina  Scholz
Martina Scholz

💻
From b6ddeb76923a2e0b43b5c2c7e0a7bd7b056d8fd4 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:10:32 +0000 Subject: [PATCH 13/88] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 41f8ba6f..9105032e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -31,6 +31,15 @@ "contributions": [ "code" ] + }, + { + "login": "LadySolveig", + "name": "Martina Scholz", + "avatar_url": "https://avatars.githubusercontent.com/u/64533137?v=4", + "profile": "https://github.com/LadySolveig", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, @@ -38,5 +47,6 @@ "projectOwner": "mautic", "repoType": "github", "repoHost": "https://github.com", - "skipCi": true + "skipCi": true, + "commitConvention": "angular" } From 8deabb2835143aea649573d5fe29288e0944f0f1 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:11:08 +0000 Subject: [PATCH 14/88] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 74b7c4a8..c830e825 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![codecov](https://codecov.io/gh/mautic/api-library/branch/master/graph/badge.svg)](https://codecov.io/gh/mautic/api-library) [![Latest Stable Version](https://poser.pugx.org/mautic/api-library/v)](//packagist.org/packages/mautic/api-library) [![Total Downloads](https://poser.pugx.org/mautic/api-library/downloads)](//packagist.org/packages/mautic/api-library) [![Latest Unstable Version](https://poser.pugx.org/mautic/api-library/v/unstable)](//packagist.org/packages/mautic/api-library) [![License](https://poser.pugx.org/mautic/api-library/license)](//packagist.org/packages/mautic/api-library) -[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) # Using the Mautic API Library @@ -275,6 +275,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d dlopez-akalam
dlopez-akalam

💻 mollux
mollux

💻 Martina  Scholz
Martina Scholz

💻 + John Linhart
John Linhart

👀 From 28c38c282ece0a8aab853cc77acc47a42a89606e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:11:09 +0000 Subject: [PATCH 15/88] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9105032e..2e03b001 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -40,6 +40,15 @@ "contributions": [ "code" ] + }, + { + "login": "escopecz", + "name": "John Linhart", + "avatar_url": "https://avatars.githubusercontent.com/u/1235442?v=4", + "profile": "http://johnlinhart.com", + "contributions": [ + "review" + ] } ], "contributorsPerLine": 7, From 73a92ddc259ca696ce7a6932b127529447e82d17 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Fri, 14 Oct 2022 14:41:49 +0200 Subject: [PATCH 16/88] Make the setLogger method on the API class adhere to the LoggerAwareInterface --- lib/Api/Api.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 01b3825f..c7973fac 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -121,14 +121,10 @@ public function getLogger() /** * Sets a logger. - * - * @return $this */ - public function setLogger(LoggerInterface $logger) + public function setLogger(LoggerInterface $logger): void { $this->logger = $logger; - - return $this; } /** From 223b1bfcfe03b491eb9838f78a5c66e6d96baa85 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Fri, 14 Oct 2022 14:42:56 +0200 Subject: [PATCH 17/88] Change assertion in test to always fail when validation fails --- tests/Api/MauticApiTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index 4b330fb3..8273ebac 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,7 +43,7 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->assertTrue($authorized, 'Authorization failed. Check credentials in local.config.php.'); + $this->assertTrue(false, 'Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); From 10f4a3654aa7117358f5939d1b7ca6126850daca Mon Sep 17 00:00:00 2001 From: Marinus van Velzen Date: Mon, 17 Oct 2022 13:41:31 +0200 Subject: [PATCH 18/88] Change assertion to fail method Co-authored-by: John Linhart --- tests/Api/MauticApiTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index 8273ebac..6a947908 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,7 +43,7 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->assertTrue(false, 'Authorization failed. Check credentials in local.config.php.'); + $this->fail( 'Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); From 9db9a69c69de4f1b34bcdfc6f10e97e4413f1a01 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Mon, 17 Oct 2022 15:52:54 +0200 Subject: [PATCH 19/88] Fix assertions --- tests/Api/MauticApiTestCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index 6a947908..2745f053 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -43,12 +43,12 @@ protected function getAuth() $auth = $apiAuth->newAuth($this->config, $authMethod); if ('BasicAuth' != $authMethod) { if (empty($this->config['refreshToken']) && !$auth->isAuthorized()) { - $this->fail( 'Authorization failed. Check credentials in local.config.php.'); + $this->fail('Authorization failed. Check credentials in local.config.php.'); } else { try { $auth->validateAccessToken(); } catch (\Exception $e) { - $this->assertTrue(false, $e->getMessage()); + $this->fail($e->getMessage()); } if ($auth->accessTokenUpdated()) { From 56f87991d6e81f1c6063f23401c80eb100eba4c7 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 18:52:02 +0200 Subject: [PATCH 20/88] Update project to support to php8 --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6fbb18f4..7cdd8dfc 100644 --- a/composer.json +++ b/composer.json @@ -14,14 +14,14 @@ } }, "require": { - "php": ">=7.2.0", + "php": ">=8.0", "ext-curl": "*", "ext-json": "*", "psr/log": "~1.0 || ~2.0 || ~3.0" }, "require-dev": { "kint-php/kint": "^4.1", - "friendsofphp/php-cs-fixer": "^2.19.3", + "friendsofphp/php-cs-fixer": "~3.12.0", "phpunit/phpunit": "~9.5.0", "brianium/paratest": "^6.2" }, From 0d3400e192ac1210f0b95dc7a5be5971d25765c6 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 20:12:56 +0200 Subject: [PATCH 21/88] Update upgrade readme with changes from this PR --- UPGRADE-3.0.md | 12 ------------ UPGRADE-4.0.md | 5 +++++ 2 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 UPGRADE-3.0.md create mode 100644 UPGRADE-4.0.md diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md deleted file mode 100644 index c266ce61..00000000 --- a/UPGRADE-3.0.md +++ /dev/null @@ -1,12 +0,0 @@ -# Dependencies -* PHP 7.2.0 is the now the minimum - -# Contacts -* \Mautic\Api\Contacts::getEvents has been removed. Use \Mautic\Api\Contacts::getActivityForContact instead. - -# Leads -* \Mautic\Api\Leads has been removed. Use \Mautic\Api\Contacts instead. - -# Lists -* The \Mautic\Api\Lists has been removed. Use \Mautic\Api\Segments instead. - diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md new file mode 100644 index 00000000..3a157bba --- /dev/null +++ b/UPGRADE-4.0.md @@ -0,0 +1,5 @@ +# Dependencies +* PHP 8.0 is the now the minimum + +# Api +* \Mautic\Api\Api::getLogger now returns void as the LoggerAwareInterface dictates From 390f339b3e9dc8c502006b1a9aa1fd700fd781cd Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 20:19:34 +0200 Subject: [PATCH 22/88] Update github workflows with PHP 8 --- .github/workflows/tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8e5a4bb1..be679208 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,7 +34,7 @@ jobs: image: mailhog/mailhog:latest ports: - 1025:1025 - + redis: image: redis:6 ports: @@ -115,13 +115,13 @@ jobs: - name: Set correct ownership so Apache can access the files run: sudo chown -R www-data:www-data /var/www/html - + - name: Run tests run: vendor/bin/paratest -p 3 --coverage-clover coverage.xml - name: Upload code coverage run: bash <(curl -s https://codecov.io/bash) - + - name: Upload logs as artifacts uses: actions/upload-artifact@v2 if: always() From 921f057aa46255c6164e0a810ef2c69ee3d2372a Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 20 Oct 2022 21:18:20 +0200 Subject: [PATCH 23/88] Update Readme to have PHP 8.0 as the minimum requirement --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c830e825..df2d48aa 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # Using the Mautic API Library ## Requirements -* PHP 7.2 or newer +* PHP 8.0 or newer * cURL support ## Installing the API Library From 403c39baabb56dbb344dcc90b6f137b689ca6f71 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Wed, 12 Apr 2023 17:07:23 +0200 Subject: [PATCH 24/88] Update composer.lock --- composer.lock | 803 ++++++++++++++++++-------------------------------- 1 file changed, 291 insertions(+), 512 deletions(-) diff --git a/composer.lock b/composer.lock index 6347dae6..4d3a4083 100644 --- a/composer.lock +++ b/composer.lock @@ -4,34 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "786e116622ff75904afc35a26f231705", + "content-hash": "dc4a2abe45289b6de968d6188ef3d48b", "packages": [ { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -52,24 +52,24 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" } ], "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.8.0", + "version": "v6.8.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "4b70abf4c2ffa08c64e2e89c7b5b7e43cdf26d52" + "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4b70abf4c2ffa08c64e2e89c7b5b7e43cdf26d52", - "reference": "4b70abf4c2ffa08c64e2e89c7b5b7e43cdf26d52", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", + "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", "shasum": "" }, "require": { @@ -83,7 +83,7 @@ "phpunit/php-code-coverage": "^9.2.23", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.27", + "phpunit/phpunit": "^9.5.28", "sebastian/environment": "^5.1.4", "symfony/console": "^5.4.16 || ^6.2.3", "symfony/process": "^5.4.11 || ^6.2" @@ -136,7 +136,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.8.0" + "source": "https://github.com/paratestphp/paratest/tree/v6.8.1" }, "funding": [ { @@ -148,34 +148,34 @@ "type": "paypal" } ], - "time": "2022-12-29T09:42:35+00:00" + "time": "2023-01-17T10:08:49+00:00" }, { "name": "composer/pcre", - "version": "1.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.3", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -203,7 +203,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -219,7 +219,7 @@ "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", @@ -304,27 +304,27 @@ }, { "name": "composer/xdebug-handler", - "version": "2.0.5", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "composer/pcre": "^1", - "php": "^5.3.2 || ^7.0 || ^8.0", + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { @@ -350,7 +350,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -366,20 +366,20 @@ "type": "tidelift" } ], - "time": "2022-02-24T20:20:32+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "doctrine/annotations", - "version": "1.14.2", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { @@ -440,9 +440,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.2" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2022-12-15T06:48:22+00:00" + "time": "2023-02-01T09:20:38+00:00" }, { "name": "doctrine/deprecations", @@ -489,30 +489,30 @@ }, { "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": { @@ -539,7 +539,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": [ { @@ -555,7 +555,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/lexer", @@ -698,85 +698,65 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.19.3", + "version": "v3.12.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/eae11d945e2885d86e1c080eec1bb30a2aa27998", + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998", "shasum": "" }, "require": { - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.2 || ^2.0", - "doctrine/annotations": "^1.2", + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || ^7.0 || ^8.0", - "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", - "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0", - "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", - "symfony/polyfill-php70": "^1.0", - "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0 || ^5.0", - "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4.2", - "php-cs-fixer/accessible-object": "^1.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", - "symfony/phpunit-bridge": "^5.2.1", - "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters.", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", - "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" ], "type": "application", - "extra": { - "branch-alias": { - "dev-master": "2.19-dev" - } - }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - }, - "classmap": [ - "tests/Test/AbstractFixerTestCase.php", - "tests/Test/AbstractIntegrationCaseFactory.php", - "tests/Test/AbstractIntegrationTestCase.php", - "tests/Test/Assert/AssertTokensTrait.php", - "tests/Test/IntegrationCase.php", - "tests/Test/IntegrationCaseFactory.php", - "tests/Test/IntegrationCaseFactoryInterface.php", - "tests/Test/InternalIntegrationCaseFactory.php", - "tests/Test/IsIdenticalConstraint.php", - "tests/Test/TokensWithObservedTransformers.php", - "tests/TestCase.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -795,7 +775,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.12.0" }, "funding": [ { @@ -803,7 +783,7 @@ "type": "github" } ], - "time": "2021-11-15T17:17:55+00:00" + "time": "2022-10-12T14:20:51+00:00" }, { "name": "jean85/pretty-package-versions", @@ -931,16 +911,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -978,7 +958,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -986,20 +966,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.2", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -1040,9 +1020,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2022-11-12T15:38:23+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "phar-io/manifest", @@ -1155,81 +1135,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "SpacePossum" - } - ], - "description": "sebastian/diff v2 backport support for PHP5.6", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" - }, - "abandoned": true, - "time": "2020-10-14T08:39:05+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.23", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c", - "reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1244,8 +1168,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -1278,7 +1202,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.23" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -1286,7 +1210,7 @@ "type": "github" } ], - "time": "2022-12-28T12:41:10+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1633,20 +1557,20 @@ }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -1666,7 +1590,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -1676,28 +1600,33 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1724,9 +1653,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -2144,16 +2073,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -2195,7 +2124,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -2203,7 +2132,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -2517,16 +2446,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -2565,10 +2494,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2576,7 +2505,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -2635,16 +2564,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -2679,7 +2608,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2687,7 +2616,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2744,46 +2673,43 @@ }, { "name": "symfony/console", - "version": "v5.4.17", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f" + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", + "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2818,12 +2744,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.17" + "source": "https://github.com/symfony/console/tree/v6.2.8" }, "funding": [ { @@ -2839,29 +2765,29 @@ "type": "tidelift" } ], - "time": "2022-12-28T14:15:31+00:00" + "time": "2023-03-29T21:42:15+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -2890,7 +2816,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -2906,44 +2832,42 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-03-01T10:25:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.17", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9" + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e18a9d559eb8ebc2220588f1faa726a2fcd31c9", - "reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2975,7 +2899,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.17" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" }, "funding": [ { @@ -2991,24 +2915,24 @@ "type": "tidelift" } ], - "time": "2022-12-12T15:54:21+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -3017,7 +2941,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -3054,7 +2978,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" }, "funding": [ { @@ -3070,27 +2994,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.13", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" + "reference": "82b6c62b959f642d000456f08c6d219d749215b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", - "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -3118,7 +3041,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.13" + "source": "https://github.com/symfony/filesystem/tree/v6.2.7" }, "funding": [ { @@ -3134,26 +3057,27 @@ "type": "tidelift" } ], - "time": "2022-09-21T19:53:16+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/finder", - "version": "v5.4.17", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "40c08632019838dfb3350f18cf5563b8080055fc" + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/40c08632019838dfb3350f18cf5563b8080055fc", - "reference": "40c08632019838dfb3350f18cf5563b8080055fc", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -3181,7 +3105,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.17" + "source": "https://github.com/symfony/finder/tree/v6.2.7" }, "funding": [ { @@ -3197,27 +3121,25 @@ "type": "tidelift" } ], - "time": "2022-12-22T10:31:03+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.11", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", "autoload": { @@ -3250,7 +3172,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" }, "funding": [ { @@ -3266,7 +3188,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3599,161 +3521,17 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php73", + "name": "symfony/polyfill-php80", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -3774,7 +3552,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -3785,6 +3563,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3794,7 +3576,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3803,7 +3585,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -3822,17 +3604,17 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php80", + "name": "symfony/polyfill-php81", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -3853,7 +3635,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -3864,10 +3646,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3877,7 +3655,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3886,7 +3664,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -3906,21 +3684,20 @@ }, { "name": "symfony/process", - "version": "v5.4.11", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/symfony/process/zipball/75ed64103df4f6615e15a7fe38b8111099f47416", + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -3948,7 +3725,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" + "source": "https://github.com/symfony/process/tree/v6.2.8" }, "funding": [ { @@ -3964,26 +3741,25 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2023-03-09T16:20:02+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -3994,7 +3770,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -4004,7 +3780,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4031,7 +3810,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -4047,24 +3826,24 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.13", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69" + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6df7a3effde34d81717bbef4591e5ffe32226d69", - "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -4093,7 +3872,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.13" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" }, "funding": [ { @@ -4109,38 +3888,38 @@ "type": "tidelift" } ], - "time": "2022-09-28T13:19:49+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/string", - "version": "v5.4.17", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b" + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/55733a8664b8853b003e70251c58bc8cb2d82a6b", - "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -4179,7 +3958,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.17" + "source": "https://github.com/symfony/string/tree/v6.2.8" }, "funding": [ { @@ -4195,7 +3974,7 @@ "type": "tidelift" } ], - "time": "2022-12-12T15:54:21+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "theseer/tokenizer", @@ -4254,10 +4033,10 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.2.0", + "php": ">=8.0", "ext-curl": "*", "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } From a4e8788335bae60af95f3013be138ec0f6745d92 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Wed, 12 Apr 2023 17:08:36 +0200 Subject: [PATCH 25/88] Update composer.lock --- composer.lock | 534 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 322 insertions(+), 212 deletions(-) diff --git a/composer.lock b/composer.lock index 8d7892ea..4d3a4083 100644 --- a/composer.lock +++ b/composer.lock @@ -60,16 +60,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.6.4", + "version": "v6.8.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda" + "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4ce800dc32fd0292a4f05c00f347142dce1ecdda", - "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", + "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", "shasum": "" }, "require": { @@ -77,25 +77,25 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", + "fidry/cpu-core-counter": "^0.4.1", "jean85/pretty-package-versions": "^2.0.5", "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.17", + "phpunit/php-code-coverage": "^9.2.23", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.24", + "phpunit/phpunit": "^9.5.28", "sebastian/environment": "^5.1.4", - "symfony/console": "^5.4.12 || ^6.1.4", - "symfony/process": "^5.4.11 || ^6.1.3" + "symfony/console": "^5.4.16 || ^6.2.3", + "symfony/process": "^5.4.11 || ^6.2" }, "require-dev": { "doctrine/coding-standard": "^10.0.0", "ext-pcov": "*", "ext-posix": "*", - "infection/infection": "^0.26.14", - "malukenho/mcbumpface": "^1.1.5", + "infection/infection": "^0.26.16", "squizlabs/php_codesniffer": "^3.7.1", - "symfony/filesystem": "^5.4.12 || ^6.1.4", - "vimeo/psalm": "^4.27.0" + "symfony/filesystem": "^5.4.13 || ^6.2", + "vimeo/psalm": "^5.4" }, "bin": [ "bin/paratest", @@ -136,7 +136,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.6.4" + "source": "https://github.com/paratestphp/paratest/tree/v6.8.1" }, "funding": [ { @@ -148,20 +148,20 @@ "type": "paypal" } ], - "time": "2022-09-13T10:47:01+00:00" + "time": "2023-01-17T10:08:49+00:00" }, { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { @@ -203,7 +203,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -219,7 +219,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", @@ -370,32 +370,35 @@ }, { "name": "doctrine/annotations", - "version": "1.13.3", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", "vimeo/psalm": "^4.10" }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, "type": "library", "autoload": { "psr-4": { @@ -437,36 +440,79 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.3" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2022-07-02T10:48:51+00:00" + "time": "2023-02-01T09:20:38+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "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", + "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.22" + "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": { @@ -493,7 +539,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -509,35 +555,37 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -569,7 +617,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -585,7 +633,68 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-14T08:49:07+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "0.4.1", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/79261cc280aded96d098e1b0e0ba0c4881b432c2", + "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.26 || ^8.5.31", + "theofidry/php-cs-fixer-config": "^1.0", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/0.4.1" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2022-12-16T22:01:02+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -802,16 +911,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -849,7 +958,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -857,20 +966,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -911,9 +1020,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "phar-io/manifest", @@ -1028,23 +1137,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1059,8 +1168,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -1093,7 +1202,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -1101,7 +1210,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1346,20 +1455,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.25", + "version": "9.5.28", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1428,7 +1537,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" }, "funding": [ { @@ -1444,7 +1553,7 @@ "type": "tidelift" } ], - "time": "2022-09-25T03:44:45+00:00" + "time": "2023-01-14T12:32:24+00:00" }, { "name": "psr/cache", @@ -1964,16 +2073,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -2015,7 +2124,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -2023,7 +2132,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -2337,16 +2446,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -2385,10 +2494,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2396,7 +2505,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -2455,16 +2564,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -2499,7 +2608,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2507,7 +2616,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2564,16 +2673,16 @@ }, { "name": "symfony/console", - "version": "v6.1.6", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc" + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7fa3b9cf17363468795e539231a5c91b02b608fc", - "reference": "7fa3b9cf17363468795e539231a5c91b02b608fc", + "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", "shasum": "" }, "require": { @@ -2635,12 +2744,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.6" + "source": "https://github.com/symfony/console/tree/v6.2.8" }, "funding": [ { @@ -2656,20 +2765,20 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:04:03+00:00" + "time": "2023-03-29T21:42:15+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { @@ -2678,7 +2787,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -2707,7 +2816,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -2723,20 +2832,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-03-01T10:25:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.1.0", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", "shasum": "" }, "require": { @@ -2790,7 +2899,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" }, "funding": [ { @@ -2806,20 +2915,20 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:51:07+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", "shasum": "" }, "require": { @@ -2832,7 +2941,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -2869,7 +2978,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" }, "funding": [ { @@ -2885,20 +2994,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/filesystem", - "version": "v6.1.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d216a2beef096edf040a070117c39ca2abce307" + "reference": "82b6c62b959f642d000456f08c6d219d749215b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d216a2beef096edf040a070117c39ca2abce307", - "reference": "4d216a2beef096edf040a070117c39ca2abce307", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3", "shasum": "" }, "require": { @@ -2932,7 +3041,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.1.5" + "source": "https://github.com/symfony/filesystem/tree/v6.2.7" }, "funding": [ { @@ -2948,20 +3057,20 @@ "type": "tidelift" } ], - "time": "2022-09-21T20:29:40+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/finder", - "version": "v6.1.3", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", "shasum": "" }, "require": { @@ -2996,7 +3105,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.3" + "source": "https://github.com/symfony/finder/tree/v6.2.7" }, "funding": [ { @@ -3012,20 +3121,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.1.0", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", "shasum": "" }, "require": { @@ -3063,7 +3172,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" }, "funding": [ { @@ -3079,20 +3188,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -3107,7 +3216,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3145,7 +3254,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -3161,20 +3270,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -3186,7 +3295,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3226,7 +3335,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -3242,20 +3351,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -3267,7 +3376,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3310,7 +3419,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -3326,20 +3435,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -3354,7 +3463,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3393,7 +3502,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -3409,20 +3518,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -3431,7 +3540,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3476,7 +3585,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -3492,20 +3601,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -3514,7 +3623,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3555,7 +3664,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -3571,20 +3680,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.1.3", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "url": "https://api.github.com/repos/symfony/process/zipball/75ed64103df4f6615e15a7fe38b8111099f47416", + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416", "shasum": "" }, "require": { @@ -3616,7 +3725,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.3" + "source": "https://github.com/symfony/process/tree/v6.2.8" }, "funding": [ { @@ -3632,20 +3741,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2023-03-09T16:20:02+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { @@ -3661,7 +3770,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -3701,7 +3810,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -3717,20 +3826,20 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:18:58+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.1.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7" + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/266636bb8f3fbdccc302491df7b3a1b9a8c238a7", - "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", "shasum": "" }, "require": { @@ -3763,7 +3872,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.1.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" }, "funding": [ { @@ -3779,20 +3888,20 @@ "type": "tidelift" } ], - "time": "2022-09-28T16:00:52+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/string", - "version": "v6.1.6", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864" + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/7e7e0ff180d4c5a6636eaad57b65092014b61864", - "reference": "7e7e0ff180d4c5a6636eaad57b65092014b61864", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", "shasum": "" }, "require": { @@ -3808,6 +3917,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -3848,7 +3958,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.6" + "source": "https://github.com/symfony/string/tree/v6.2.8" }, "funding": [ { @@ -3864,7 +3974,7 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:31+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "theseer/tokenizer", From af80f6a7031d5e5d76ffef61ad08d957fafaf484 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Wed, 12 Apr 2023 18:02:54 +0200 Subject: [PATCH 26/88] Update composer.lock for use with php8.0 --- composer.lock | 358 ++++++++++++++++---------------------------------- 1 file changed, 113 insertions(+), 245 deletions(-) diff --git a/composer.lock b/composer.lock index 4d3a4083..6e8d802b 100644 --- a/composer.lock +++ b/composer.lock @@ -60,16 +60,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.8.1", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582" + "reference": "589cdb23728b2a19872945580b95d8aa2c6619da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", - "reference": "168c1cfdf79e5b19b57cb03060fc9a6a79c5f582", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/589cdb23728b2a19872945580b95d8aa2c6619da", + "reference": "589cdb23728b2a19872945580b95d8aa2c6619da", "shasum": "" }, "require": { @@ -77,30 +77,26 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", - "fidry/cpu-core-counter": "^0.4.1", - "jean85/pretty-package-versions": "^2.0.5", "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.23", + "phpunit/php-code-coverage": "^9.2.11", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.28", - "sebastian/environment": "^5.1.4", - "symfony/console": "^5.4.16 || ^6.2.3", - "symfony/process": "^5.4.11 || ^6.2" + "phpunit/phpunit": "^9.5.14", + "sebastian/environment": "^5.1.3", + "symfony/console": "^5.4.0 || ^6.0.0", + "symfony/process": "^5.4.0 || ^6.0.0" }, "require-dev": { - "doctrine/coding-standard": "^10.0.0", - "ext-pcov": "*", + "doctrine/coding-standard": "^9.0.0", "ext-posix": "*", - "infection/infection": "^0.26.16", - "squizlabs/php_codesniffer": "^3.7.1", - "symfony/filesystem": "^5.4.13 || ^6.2", - "vimeo/psalm": "^5.4" + "infection/infection": "^0.26.5", + "malukenho/mcbumpface": "^1.1.5", + "squizlabs/php_codesniffer": "^3.6.2", + "symfony/filesystem": "^v5.4.0 || ^6.0.0", + "vimeo/psalm": "^4.20.0" }, "bin": [ - "bin/paratest", - "bin/paratest.bat", - "bin/paratest_for_phpstorm" + "bin/paratest" ], "type": "library", "autoload": { @@ -136,7 +132,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.8.1" + "source": "https://github.com/paratestphp/paratest/tree/v6.4.4" }, "funding": [ { @@ -148,7 +144,7 @@ "type": "paypal" } ], - "time": "2023-01-17T10:08:49+00:00" + "time": "2022-03-28T07:55:11+00:00" }, { "name": "composer/pcre", @@ -489,30 +485,30 @@ }, { "name": "doctrine/instantiator", - "version": "2.0.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" + "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" }, "type": "library", "autoload": { @@ -539,7 +535,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -555,7 +551,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "doctrine/lexer", @@ -635,67 +631,6 @@ ], "time": "2022-12-14T08:49:07+00:00" }, - { - "name": "fidry/cpu-core-counter", - "version": "0.4.1", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/79261cc280aded96d098e1b0e0ba0c4881b432c2", - "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.26 || ^8.5.31", - "theofidry/php-cs-fixer-config": "^1.0", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/0.4.1" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2022-12-16T22:01:02+00:00" - }, { "name": "friendsofphp/php-cs-fixer", "version": "v3.12.0", @@ -785,65 +720,6 @@ ], "time": "2022-10-12T14:20:51+00:00" }, - { - "name": "jean85/pretty-package-versions", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.17", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^0.12.66", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" - }, - "time": "2021-10-08T21:21:46+00:00" - }, { "name": "kint-php/kint", "version": "4.2.3", @@ -2673,21 +2549,20 @@ }, { "name": "symfony/console", - "version": "v6.2.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", - "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", + "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^1.1|^2|^3", "symfony/string": "^5.4|^6.0" @@ -2744,12 +2619,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command-line", + "command line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.8" + "source": "https://github.com/symfony/console/tree/v6.0.19" }, "funding": [ { @@ -2765,29 +2640,29 @@ "type": "tidelift" } ], - "time": "2023-03-29T21:42:15+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -2816,7 +2691,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" }, "funding": [ { @@ -2832,24 +2707,24 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:25:55+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { @@ -2899,7 +2774,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" }, "funding": [ { @@ -2915,24 +2790,24 @@ "type": "tidelift" } ], - "time": "2023-03-20T16:06:02+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -2941,7 +2816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -2978,7 +2853,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" }, "funding": [ { @@ -2994,24 +2869,24 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.7", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3" + "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", + "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -3041,7 +2916,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.7" + "source": "https://github.com/symfony/filesystem/tree/v6.0.19" }, "funding": [ { @@ -3057,27 +2932,24 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/finder", - "version": "v6.2.7", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -3105,7 +2977,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.7" + "source": "https://github.com/symfony/finder/tree/v6.0.19" }, "funding": [ { @@ -3121,24 +2993,24 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.7", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" + "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", + "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", @@ -3172,7 +3044,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" + "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" }, "funding": [ { @@ -3188,7 +3060,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3684,20 +3556,20 @@ }, { "name": "symfony/process", - "version": "v6.2.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "75ed64103df4f6615e15a7fe38b8111099f47416" + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/75ed64103df4f6615e15a7fe38b8111099f47416", - "reference": "75ed64103df4f6615e15a7fe38b8111099f47416", + "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -3725,7 +3597,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.8" + "source": "https://github.com/symfony/process/tree/v6.0.19" }, "funding": [ { @@ -3741,24 +3613,24 @@ "type": "tidelift" } ], - "time": "2023-03-09T16:20:02+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "psr/container": "^2.0" }, "conflict": { @@ -3770,7 +3642,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -3780,10 +3652,7 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3810,7 +3679,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" }, "funding": [ { @@ -3826,24 +3695,24 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2022-05-30T19:17:58+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.7", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", + "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -3872,7 +3741,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" }, "funding": [ { @@ -3888,24 +3757,24 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/string", - "version": "v6.2.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -3917,7 +3786,6 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -3958,7 +3826,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.8" + "source": "https://github.com/symfony/string/tree/v6.0.19" }, "funding": [ { @@ -3974,7 +3842,7 @@ "type": "tidelift" } ], - "time": "2023-03-20T16:06:02+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "theseer/tokenizer", From 8e280e2b6bb4ca7d47d6deafc566b4d8f6ea6eab Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 16:19:53 +0000 Subject: [PATCH 27/88] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c830e825..1a52351d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![codecov](https://codecov.io/gh/mautic/api-library/branch/master/graph/badge.svg)](https://codecov.io/gh/mautic/api-library) [![Latest Stable Version](https://poser.pugx.org/mautic/api-library/v)](//packagist.org/packages/mautic/api-library) [![Total Downloads](https://poser.pugx.org/mautic/api-library/downloads)](//packagist.org/packages/mautic/api-library) [![Latest Unstable Version](https://poser.pugx.org/mautic/api-library/v/unstable)](//packagist.org/packages/mautic/api-library) [![License](https://poser.pugx.org/mautic/api-library/license)](//packagist.org/packages/mautic/api-library) -[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-) # Using the Mautic API Library @@ -276,6 +276,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d mollux
mollux

💻 Martina  Scholz
Martina Scholz

💻 John Linhart
John Linhart

👀 + Marinus van Velzen
Marinus van Velzen

💻 From 3a022ea16fc346384b2683b2e1d02ed11e85b6be Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 16:19:54 +0000 Subject: [PATCH 28/88] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2e03b001..f9802cce 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -49,6 +49,15 @@ "contributions": [ "review" ] + }, + { + "login": "Rocksheep", + "name": "Marinus van Velzen", + "avatar_url": "https://avatars.githubusercontent.com/u/1311371?v=4", + "profile": "https://github.com/Rocksheep", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From cce4efbc96c3d9c8db41799136bcca26aadd376b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 16:20:49 +0000 Subject: [PATCH 29/88] docs: update README.md [skip ci] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a52351d..add03718 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![codecov](https://codecov.io/gh/mautic/api-library/branch/master/graph/badge.svg)](https://codecov.io/gh/mautic/api-library) [![Latest Stable Version](https://poser.pugx.org/mautic/api-library/v)](//packagist.org/packages/mautic/api-library) [![Total Downloads](https://poser.pugx.org/mautic/api-library/downloads)](//packagist.org/packages/mautic/api-library) [![Latest Unstable Version](https://poser.pugx.org/mautic/api-library/v/unstable)](//packagist.org/packages/mautic/api-library) [![License](https://poser.pugx.org/mautic/api-library/license)](//packagist.org/packages/mautic/api-library) -[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors-) # Using the Mautic API Library @@ -277,6 +277,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Martina  Scholz
Martina Scholz

💻 John Linhart
John Linhart

👀 Marinus van Velzen
Marinus van Velzen

💻 + Pierre Ammeloot
Pierre Ammeloot

📓 From 03d0723100a680a65bd64699d8c19832afd0beb6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 16:20:50 +0000 Subject: [PATCH 30/88] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index f9802cce..62240e2b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -58,6 +58,15 @@ "contributions": [ "code" ] + }, + { + "login": "PierreAmmeloot", + "name": "Pierre Ammeloot", + "avatar_url": "https://avatars.githubusercontent.com/u/4603318?v=4", + "profile": "https://pierre.ammeloot.fr", + "contributions": [ + "userTesting" + ] } ], "contributorsPerLine": 7, From a94e8f986a7e7938f0428f03beb4be7560da3464 Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Wed, 12 Apr 2023 20:01:44 +0200 Subject: [PATCH 31/88] Update php-cs-fixer config --- .php_cs => .php-cs-fixer.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) rename .php_cs => .php-cs-fixer.php (64%) diff --git a/.php_cs b/.php-cs-fixer.php similarity index 64% rename from .php_cs rename to .php-cs-fixer.php index d3b6865b..3d497cb4 100644 --- a/.php_cs +++ b/.php-cs-fixer.php @@ -4,12 +4,16 @@ ->in(__DIR__.'/lib') ->in(__DIR__.'/tests'); -return PhpCsFixer\Config::create() +$config = new PhpCsFixer\Config(); + +return $config ->setRules([ '@Symfony' => true, 'binary_operator_spaces' => [ - 'align_double_arrow' => true, - 'align_equals' => true + 'operators' => [ + '=' => 'align', + '=>' => 'align', + ], ], 'ordered_imports' => true, 'array_syntax' => [ @@ -17,4 +21,4 @@ ], 'no_unused_imports' => false, ]) - ->setFinder($finder); \ No newline at end of file + ->setFinder($finder); From 9594325c178e71d894f772c23505719042893f6a Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 13 Apr 2023 10:21:22 +0200 Subject: [PATCH 32/88] Update action to use new php-cs-fixer configuration --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index be679208..168d53e1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -155,4 +155,4 @@ jobs: composer install --prefer-dist --no-progress - name: Run CS tests - run: vendor/bin/php-cs-fixer fix --config=.php_cs -v --dry-run --using-cache=no --show-progress=dots --diff $(git diff -- '*.php' --name-only --diff-filter=ACMRTUXB "HEAD~..HEAD") + run: vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --using-cache=no --show-progress=dots --diff $(git diff -- '*.php' --name-only --diff-filter=ACMRTUXB "HEAD~..HEAD") From 0995283642c72290476f845c07e8c7652f2d465e Mon Sep 17 00:00:00 2001 From: rvanvelzen Date: Thu, 13 Apr 2023 10:21:49 +0200 Subject: [PATCH 33/88] Fix style issues --- lib/Api/Api.php | 12 +-- lib/Api/CampaignEvents.php | 11 +-- lib/Api/Contacts.php | 12 +-- lib/Auth/AbstractAuth.php | 28 +++--- lib/Auth/BasicAuth.php | 8 +- lib/Auth/OAuth.php | 94 +++++++++---------- lib/Exception/AbstractApiException.php | 2 +- lib/Exception/ActionNotSupportedException.php | 2 +- lib/Exception/ContextNotFoundException.php | 2 +- .../IncorrectParametersReturnedException.php | 2 +- .../RequiredParameterMissingException.php | 2 +- .../UnexpectedResponseFormatException.php | 2 +- lib/QueryBuilder/QueryBuilder.php | 4 +- lib/QueryBuilder/WhereBuilder.php | 66 ++++++------- tests/Api/AssetsTest.php | 2 +- tests/Api/CampaignsTest.php | 8 +- tests/Api/ContactsTest.php | 10 +- tests/Api/DataTest.php | 2 +- tests/Api/EmailsTest.php | 6 +- tests/Api/ExceptionsTest.php | 2 +- tests/Api/FilesTest.php | 2 +- tests/Api/FormsTest.php | 10 +- tests/Api/MauticApiTestCase.php | 4 +- tests/Api/PointTriggersTest.php | 4 +- tests/Api/SegmentsTest.php | 6 +- tests/Api/StatsTest.php | 14 +-- 26 files changed, 157 insertions(+), 160 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index c7973fac..4857cff9 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -194,7 +194,7 @@ public function setBaseUrl($url) /** * Make the API request. * - * @param $endpoint + * @param string $endpoint * @param string $method * * @return array @@ -259,7 +259,7 @@ public function makeRequest($endpoint, array $parameters = [], $method = 'GET') if (!is_array($response)) { $this->getLogger()->warning($response); - //assume an error + // assume an error $error = [ 'code' => 500, 'message' => $response, @@ -354,7 +354,7 @@ public function get($id) } /** - * @param $id + * @param int $id * * @return array|bool */ @@ -492,7 +492,7 @@ public function editBatch(array $parameters, $createIfNotExists = false) /** * Delete an item. * - * @param $id + * @param int $id * * @return array|mixed */ @@ -506,8 +506,6 @@ public function delete($id) /** * Delete a batch of items. * - * @param $ids - * * @return array|mixed */ public function deleteBatch(array $ids) @@ -539,7 +537,7 @@ protected function actionNotSupported($action) /** * Verify that a default endpoint is supported by the API. * - * @param $action + * @param string $action * * @return bool */ diff --git a/lib/Api/CampaignEvents.php b/lib/Api/CampaignEvents.php index b78ba962..7ee91ec9 100644 --- a/lib/Api/CampaignEvents.php +++ b/lib/Api/CampaignEvents.php @@ -41,7 +41,7 @@ class CampaignEvents extends Api /** * Get contact events across all campaigns. * - * @param $contactId + * @param int $contactId * @param string $search * @param int $start * @param int $limit @@ -68,8 +68,8 @@ public function getContactEvents($contactId, $search = '', $start = 0, $limit = /** * Get contact events for a single campaign. * - * @param $campaignId - * @param $contactId + * @param int $campaignId + * @param int $contactId * @param string $search * @param int $start * @param int $limit @@ -96,9 +96,8 @@ public function getContactCampaignEvents($campaignId, $contactId, $search = '', /** * Edit or schedule a campaign event for a specific contact. * - * @param $contactId - * @param $eventId - * @param $parameters + * @param int $contactId + * @param int $eventId * * @return array|mixed */ diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 7bf4db9a..14265ea4 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -18,17 +18,17 @@ class Contacts extends Api /** * Contact unsubscribed themselves. */ - const UNSUBSCRIBED = 1; + public const UNSUBSCRIBED = 1; /** * Contact was unsubscribed due to an unsuccessful send. */ - const BOUNCED = 2; + public const BOUNCED = 2; /** * Contact was manually unsubscribed by user. */ - const MANUAL = 3; + public const MANUAL = 3; /** * {@inheritdoc} @@ -276,7 +276,7 @@ public function getContactDevices($id, $search = '', $start = 0, $limit = 0, $or /** * Get a list of smart segments the contact is in. * - * @param $id + * @param int $id * * @return array|mixed */ @@ -288,7 +288,7 @@ public function getContactSegments($id) /** * Get a list of companies the contact is in. * - * @param $id + * @param int $id * * @return array|mixed */ @@ -300,7 +300,7 @@ public function getContactCompanies($id) /** * Get a list of campaigns the contact is in. * - * @param $id + * @param int $id * * @return array|mixed */ diff --git a/lib/Auth/AbstractAuth.php b/lib/Auth/AbstractAuth.php index eb8eaf46..9753ef0b 100644 --- a/lib/Auth/AbstractAuth.php +++ b/lib/Auth/AbstractAuth.php @@ -48,8 +48,8 @@ abstract class AbstractAuth implements AuthInterface protected $_curlTimeout = null; /** - * @param $url - * @param $method + * @param string $url + * @param string $method * * @return mixed */ @@ -108,13 +108,13 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array list($url, $parameters) = $this->separateUrlParams($url, $parameters); - //make sure $method is capitalized for congruency + // make sure $method is capitalized for congruency $method = strtoupper($method); $headers = (isset($settings['headers']) && is_array($settings['headers'])) ? $settings['headers'] : []; list($headers, $parameters) = $this->prepareRequest($url, $headers, $parameters, $method, $settings); - //Set default CURL options + // Set default CURL options $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, @@ -128,12 +128,12 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array // CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set $options[CURLOPT_FOLLOWLOCATION] = (ini_get('open_basedir')) ? false : true; - //Set custom REST method if not GET or POST + // Set custom REST method if not GET or POST if (!in_array($method, ['GET', 'POST'])) { $options[CURLOPT_CUSTOMREQUEST] = $method; } - //Set post fields for POST/PUT/PATCH requests + // Set post fields for POST/PUT/PATCH requests $isPost = false; if (in_array($method, ['POST', 'PUT', 'PATCH'])) { $isPost = true; @@ -158,7 +158,7 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array $query = $this->getQueryParameters($isPost, $parameters); $this->log('Query parameters = '.print_r($query, true)); - //Create a query string for GET/DELETE requests + // Create a query string for GET/DELETE requests if (count($query) > 0) { $queryGlue = false === strpos($url, '?') ? '?' : '&'; $url = $url.$queryGlue.http_build_query($query, '', '&'); @@ -171,7 +171,7 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array $headers[] = 'Accept: application/json'; $options[CURLOPT_HTTPHEADER] = $headers; - //Make CURL request + // Make CURL request $curl = curl_init(); curl_setopt_array($curl, $options); @@ -201,7 +201,7 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array /** * @deprecated 2.6.0 to be removed in 3.0; use createCurlFile instead * - * @param $filename + * @param string $filename * @param string $mimetype * @param string $postname * @@ -235,8 +235,8 @@ protected function createCurlFile($filename, $mimetype = '', $postname = '') } /** - * @param $isPost - * @param $parameters + * @param bool $isPost + * @param array $parameters * * @return array */ @@ -272,7 +272,7 @@ protected function parseHeaders($headersStr) if (false === $pos) { $headersArr[] = trim($header); } else { - $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, ($pos + 1))); + $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, $pos + 1)); } } @@ -282,8 +282,8 @@ protected function parseHeaders($headersStr) /** * Separates parameters from base URL. * - * @param $url - * @param $params + * @param string $url + * @param array $params * * @return array */ diff --git a/lib/Auth/BasicAuth.php b/lib/Auth/BasicAuth.php index 781aff05..4ea94321 100644 --- a/lib/Auth/BasicAuth.php +++ b/lib/Auth/BasicAuth.php @@ -97,7 +97,7 @@ public function setup($userName, $password) $password = trim($password); if (empty($userName) || empty($password)) { - //Throw exception if the required parameters were not found + // Throw exception if the required parameters were not found $this->log('parameters did not include username and/or password'); throw new RequiredParameterMissingException('One or more required parameters was not supplied. Both userName and password required!'); } @@ -107,14 +107,14 @@ public function setup($userName, $password) } /** - * @param $url - * @param $method + * @param string $url + * @param string $method * * @return array */ protected function prepareRequest($url, array $headers, array $parameters, $method, array $settings) { - //Set Basic Auth parameters/headers + // Set Basic Auth parameters/headers $headers = array_merge($headers, [$this->buildAuthorizationHeader(), 'Expect:']); return [$headers, $parameters]; diff --git a/lib/Auth/OAuth.php b/lib/Auth/OAuth.php index bcd5aadd..72d205b7 100755 --- a/lib/Auth/OAuth.php +++ b/lib/Auth/OAuth.php @@ -180,14 +180,14 @@ public function getResponseInfo() */ public function isAuthorized() { - //Check for existing access token + // Check for existing access token if (!empty($this->_request_token_url)) { if (strlen($this->_access_token) > 0 && strlen($this->_access_token_secret) > 0) { return true; } } - //Check to see if token in session has expired + // Check to see if token in session has expired if (!empty($this->_expires) && $this->_expires < time()) { return false; } @@ -217,7 +217,7 @@ public function setAccessTokenDetails(array $accessTokenDetails) /** * Set access token URL. * - * @param $url + * @param string $url * * @return $this */ @@ -231,7 +231,7 @@ public function setAccessTokenUrl($url) /** * Set authorization URL. * - * @param $url + * @param string $url * * @return $this */ @@ -245,7 +245,7 @@ public function setAuthorizeUrl($url) /** * Set redirect type for OAuth2. * - * @param $type + * @param string $type * * @return $this */ @@ -259,7 +259,7 @@ public function setRedirectType($type) /** * Set request token URL. * - * @param $url + * @param string $url * * @return $this */ @@ -369,50 +369,50 @@ public function validateAccessToken($redirect = true) $this->_do_not_redirect = !$redirect; $this->log('validateAccessToken()'); - //Check to see if token in session has expired + // Check to see if token in session has expired if (!empty($this->_expires) && $this->_expires < time()) { $this->log('access token expired so reauthorize'); if (strlen($this->_refresh_token) > 0) { - //use a refresh token to get a new token + // use a refresh token to get a new token return $this->requestAccessToken(); } - //Reauthorize + // Reauthorize $this->authorize($this->_scope); return false; } - //Check for existing access token + // Check for existing access token if ($this->_access_token) { $this->log('has access token'); return true; } - //Reauthorize if no token was found + // Reauthorize if no token was found if (!$this->_access_token) { $this->log('access token empty so authorize'); - //OAuth flows + // OAuth flows if ($this->isOauth1()) { - //OAuth 1.0 + // OAuth 1.0 $this->log('authorizing with OAuth1.0a spec'); - //Request token and authorize app + // Request token and authorize app if (!isset($_GET['oauth_token']) && !isset($_GET['oauth_verifier'])) { $this->log('initializing authorization'); - //Request token + // Request token $this->requestToken(); - //Authorize token + // Authorize token $this->authorize(); return false; } - //Request access token + // Request access token if ($_GET['oauth_token'] != $_SESSION['oauth']['token']) { unset($_SESSION['oauth']['token'], $_SESSION['oauth']['token_secret']); @@ -425,10 +425,10 @@ public function validateAccessToken($redirect = true) return true; } - //OAuth 2.0 + // OAuth 2.0 $this->log('authorizing with OAuth2 spec'); - //Authorize app + // Authorize app if (!isset($_GET['state']) && !isset($_GET['code'])) { $this->authorize($this->_scope); @@ -439,7 +439,7 @@ public function validateAccessToken($redirect = true) $_SESSION['oauth']['debug']['received_state'] = $_GET['state']; } - //Request an access token + // Request an access token if ($_GET['state'] != $_SESSION['oauth']['state']) { unset($_SESSION['oauth']['state']); @@ -467,16 +467,16 @@ protected function authorize(array $scope = [], $scope_separator = ',', $attach { $authUrl = $this->_authorize_url; - //Build authorization URL + // Build authorization URL if ($this->isOauth1()) { - //OAuth 1.0 + // OAuth 1.0 $authUrl .= '?oauth_token='.$_SESSION['oauth']['token']; if (!empty($this->_callback)) { $authUrl .= '&oauth_callback='.urlencode($this->_callback); } } else { - //OAuth 2.0 + // OAuth 2.0 $authUrl .= '?client_id='.$this->_client_id.'&redirect_uri='.urlencode($this->_callback); $state = md5(time().mt_rand()); $_SESSION['oauth']['state'] = $state; @@ -490,7 +490,7 @@ protected function authorize(array $scope = [], $scope_separator = ',', $attach $this->log('redirecting to auth url '.$authUrl); - //Redirect to authorization URL + // Redirect to authorization URL if (!$this->_do_not_redirect) { header('Location: '.$authUrl); exit; @@ -500,8 +500,8 @@ protected function authorize(array $scope = [], $scope_separator = ',', $attach } /** - * @param $isPost - * @param $parameters + * @param bool $isPost + * @param array $parameters * * @return array */ @@ -542,7 +542,7 @@ protected function parseHeaders($headersStr) if (false === $pos) { $headersArr[] = trim($header); } else { - $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, ($pos + 1))); + $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, $pos + 1)); } } @@ -550,8 +550,8 @@ protected function parseHeaders($headersStr) } /** - * @param $url - * @param array $method + * @param string $url + * @param string $method * * @return array */ @@ -560,12 +560,12 @@ protected function prepareRequest($url, array $headers, array $parameters, $meth $includeCallback = (isset($settings['includeCallback'])) ? $settings['includeCallback'] : false; $includeVerifier = (isset($settings['includeVerifier'])) ? $settings['includeVerifier'] : false; - //Set OAuth parameters/headers + // Set OAuth parameters/headers if ($this->isOauth1()) { - //OAuth 1.0 + // OAuth 1.0 $this->log('making request using OAuth1.0a spec'); - //Get standard OAuth headers + // Get standard OAuth headers $oAuthHeaders = $this->getOauthHeaders($includeCallback); if ($includeVerifier && isset($_GET['oauth_verifier'])) { @@ -576,7 +576,7 @@ protected function prepareRequest($url, array $headers, array $parameters, $meth } } - //Add the parameters + // Add the parameters $oAuthHeaders = array_merge($oAuthHeaders, $parameters); $base_info = $this->buildBaseString($url, $method, $oAuthHeaders); $composite_key = $this->getCompositeKey(); @@ -589,7 +589,7 @@ protected function prepareRequest($url, array $headers, array $parameters, $meth $_SESSION['oauth']['debug']['headers'] = $headers; } } else { - //OAuth 2.0 + // OAuth 2.0 $this->log('making request using OAuth2 spec'); $headers[] = 'Authorization: Bearer '.$this->_access_token; @@ -612,15 +612,15 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res { $this->log('requestAccessToken()'); - //Set OAuth flow parameters + // Set OAuth flow parameters if ($this->isOauth1()) { - //OAuth 1.0 + // OAuth 1.0 $this->log('using OAuth1.0a spec'); $parameters = ['oauth_verifier' => $_GET['oauth_verifier']]; $parameters = array_merge($parameters, $params); } else { - //OAuth 2.0 + // OAuth 2.0 $this->log('using OAuth2 spec'); $parameters = [ @@ -643,7 +643,7 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res $parameters = array_merge($parameters, $params); } - //Make the request + // Make the request $settings = [ 'responseType' => $responseType, 'includeCallback' => true, @@ -652,10 +652,10 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res $params = $this->makeRequest($this->_access_token_url, $parameters, $method, $settings); - //Add the token and secret to session + // Add the token and secret to session if (is_array($params)) { if ($this->isOauth1()) { - //OAuth 1.0a + // OAuth 1.0a if (isset($params['oauth_token']) && isset($params['oauth_token_secret'])) { $this->log('access token set as '.$params['oauth_token']); @@ -671,7 +671,7 @@ protected function requestAccessToken($method = 'POST', array $params = [], $res return true; } } else { - //OAuth 2.0 + // OAuth 2.0 if (isset($params['access_token']) && isset($params['expires_in'])) { $this->log('access token set as '.$params['access_token']); @@ -727,7 +727,7 @@ protected function requestToken($responseType = 'flat') { $this->log('requestToken()'); - //Make the request + // Make the request $settings = [ 'responseType' => $responseType, 'includeCallback' => true, @@ -735,7 +735,7 @@ protected function requestToken($responseType = 'flat') ]; $params = $this->makeRequest($this->_request_token_url, [], 'POST', $settings); - //Add token and secret to the session + // Add token and secret to the session if (is_array($params) && isset($params['oauth_token']) && isset($params['oauth_token_secret'])) { $this->log('token set as '.$params['oauth_token']); @@ -747,7 +747,7 @@ protected function requestToken($responseType = 'flat') $_SESSION['oauth']['debug']['token_secret'] = $params['oauth_token_secret']; } } else { - //Throw exception if the required parameters were not found + // Throw exception if the required parameters were not found $this->log('request did not return oauth tokens'); if ($this->_debug) { @@ -771,8 +771,8 @@ protected function requestToken($responseType = 'flat') /** * Separates parameters from base URL. * - * @param $url - * @param $params + * @param string $url + * @param array $params * * @return array */ @@ -797,7 +797,7 @@ protected function separateUrlParams($url, $params) /** * Build header for OAuth 1 authorization. * - * @param $oauth + * @param array $oauth * * @return string */ diff --git a/lib/Exception/AbstractApiException.php b/lib/Exception/AbstractApiException.php index 324b11c3..1fc99bf7 100644 --- a/lib/Exception/AbstractApiException.php +++ b/lib/Exception/AbstractApiException.php @@ -19,7 +19,7 @@ abstract class AbstractApiException extends \Exception * The default message to be used if a specific message is not provided. * Note: Overriden in subclass. */ - const DEFAULT_MESSAGE = 'Unknown Error'; + public const DEFAULT_MESSAGE = 'Unknown Error'; /** * {@inheritdoc} diff --git a/lib/Exception/ActionNotSupportedException.php b/lib/Exception/ActionNotSupportedException.php index 3e061af2..0ab5d9b2 100644 --- a/lib/Exception/ActionNotSupportedException.php +++ b/lib/Exception/ActionNotSupportedException.php @@ -18,5 +18,5 @@ class ActionNotSupportedException extends AbstractApiException /** * {@inheritdoc} */ - const DEFAULT_MESSAGE = 'Action is not supported at this time.'; + public const DEFAULT_MESSAGE = 'Action is not supported at this time.'; } diff --git a/lib/Exception/ContextNotFoundException.php b/lib/Exception/ContextNotFoundException.php index d05999cb..b2764313 100644 --- a/lib/Exception/ContextNotFoundException.php +++ b/lib/Exception/ContextNotFoundException.php @@ -18,5 +18,5 @@ class ContextNotFoundException extends AbstractApiException /** * {@inheritdoc} */ - const DEFAULT_MESSAGE = 'Context not found.'; + public const DEFAULT_MESSAGE = 'Context not found.'; } diff --git a/lib/Exception/IncorrectParametersReturnedException.php b/lib/Exception/IncorrectParametersReturnedException.php index e5864426..1c354f6a 100644 --- a/lib/Exception/IncorrectParametersReturnedException.php +++ b/lib/Exception/IncorrectParametersReturnedException.php @@ -18,5 +18,5 @@ class IncorrectParametersReturnedException extends AbstractApiException /** * {@inheritdoc} */ - const DEFAULT_MESSAGE = 'Incorrect parameters returned.'; + public const DEFAULT_MESSAGE = 'Incorrect parameters returned.'; } diff --git a/lib/Exception/RequiredParameterMissingException.php b/lib/Exception/RequiredParameterMissingException.php index 6f46ee05..4d2a30ec 100644 --- a/lib/Exception/RequiredParameterMissingException.php +++ b/lib/Exception/RequiredParameterMissingException.php @@ -18,5 +18,5 @@ class RequiredParameterMissingException extends AbstractApiException /** * {@inheritdoc} */ - const DEFAULT_MESSAGE = 'Required Parameter is missing.'; + public const DEFAULT_MESSAGE = 'Required Parameter is missing.'; } diff --git a/lib/Exception/UnexpectedResponseFormatException.php b/lib/Exception/UnexpectedResponseFormatException.php index 44958a4f..6177d543 100644 --- a/lib/Exception/UnexpectedResponseFormatException.php +++ b/lib/Exception/UnexpectedResponseFormatException.php @@ -20,7 +20,7 @@ class UnexpectedResponseFormatException extends AbstractApiException /** * {@inheritdoc} */ - const DEFAULT_MESSAGE = 'The response returned is in an unexpected format.'; + public const DEFAULT_MESSAGE = 'The response returned is in an unexpected format.'; /** * @var Response diff --git a/lib/QueryBuilder/QueryBuilder.php b/lib/QueryBuilder/QueryBuilder.php index dc7c04cc..9c708b83 100644 --- a/lib/QueryBuilder/QueryBuilder.php +++ b/lib/QueryBuilder/QueryBuilder.php @@ -34,7 +34,7 @@ class QueryBuilder protected static $whereBuilder; /** - * @param $column + * @param string $column */ public function addSelect($column) { @@ -42,7 +42,7 @@ public function addSelect($column) } /** - * @param $column + * @param string $column * @param string $dir */ public function addOrder($column, $dir = 'asc') diff --git a/lib/QueryBuilder/WhereBuilder.php b/lib/QueryBuilder/WhereBuilder.php index 1aa90a94..500af339 100644 --- a/lib/QueryBuilder/WhereBuilder.php +++ b/lib/QueryBuilder/WhereBuilder.php @@ -45,8 +45,8 @@ public function getClauses() } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -58,8 +58,8 @@ public function eq($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -71,8 +71,8 @@ public function neq($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -84,8 +84,8 @@ public function lt($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -97,8 +97,8 @@ public function lte($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -110,8 +110,8 @@ public function gt($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -123,8 +123,8 @@ public function gte($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -136,8 +136,8 @@ public function like($col, $val) } /** - * @param $col - * @param $val + * @param string $col + * @param mixed $val * * @return $this */ @@ -149,7 +149,7 @@ public function notLike($col, $val) } /** - * @param $col + * @param string $col * * @return $this */ @@ -161,7 +161,7 @@ public function in($col, array $val) } /** - * @param $col + * @param string $col * * @return $this */ @@ -173,9 +173,9 @@ public function notIn($col, array $val) } /** - * @param $col - * @param $val1 - * @param $val2 + * @param string $col + * @param mixed $val1 + * @param mixed $val2 * * @return $this */ @@ -187,9 +187,9 @@ public function between($col, $val1, $val2) } /** - * @param $col - * @param $val1 - * @param $val2 + * @param string $col + * @param mixed $val1 + * @param mixed $val2 * * @return $this */ @@ -201,7 +201,7 @@ public function notBetween($col, $val1, $val2) } /** - * @param $col + * @param string $col * * @return $this */ @@ -213,7 +213,7 @@ public function isNull($col) } /** - * @param $col + * @param string $col * * @return $this */ @@ -225,7 +225,7 @@ public function isNotNull($col) } /** - * @param $col + * @param string $col * * @return $this */ @@ -237,7 +237,7 @@ public function isEmpty($col) } /** - * @param $col + * @param string $col * * @return $this */ @@ -298,9 +298,9 @@ public function getComposite() } /** - * @param $col - * @param $expr - * @param null $val + * @param string $col + * @param string $expr + * @param null $val */ private function addClause($col, $expr, $val = null) { @@ -312,8 +312,8 @@ private function addClause($col, $expr, $val = null) } /** - * @param $composite - * @param $clauses + * @param string $composite + * @param array $clauses * * @return $this|WhereBuilder */ diff --git a/tests/Api/AssetsTest.php b/tests/Api/AssetsTest.php index 05757bfe..de843aad 100644 --- a/tests/Api/AssetsTest.php +++ b/tests/Api/AssetsTest.php @@ -40,7 +40,7 @@ public function testCreateWithLocalFileGetAndDelete() $this->apiFiles = $this->getContext('files'); $this->apiFiles->setFolder('assets'); $fileRequest = [ - 'file' => dirname(__DIR__).'/'.'mauticlogo.png', + 'file' => dirname(__DIR__).'/mauticlogo.png', ]; $response = $this->apiFiles->create($fileRequest); $this->assertErrors($response); diff --git a/tests/Api/CampaignsTest.php b/tests/Api/CampaignsTest.php index 143055ac..42d68ed2 100644 --- a/tests/Api/CampaignsTest.php +++ b/tests/Api/CampaignsTest.php @@ -157,7 +157,7 @@ public function setUp(): void ], ], [ - 'sourceId' => 'new_43', /// Event ID will be replaced on /new + 'sourceId' => 'new_43', // / Event ID will be replaced on /new 'targetId' => 'new_44', // Event ID will be replaced on /new 'anchors' => [ 'source' => 'yes', @@ -224,7 +224,7 @@ public function testEditPatch() { $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the campaign shouldn't exist + // there should be an error as the campaign shouldn't exist $this->assertTrue(isset($response['errors']), $response['errors'][0]['message']); $this->setUpPayloadClass(); @@ -246,7 +246,7 @@ public function testEditPatch() $this->assertEquals($event['name'], 'Event Name Modified'); } - //now delete the campaign + // now delete the campaign $response = $this->api->delete($campaign['id']); $this->assertErrors($response); $this->clearPayloadItems(); @@ -351,7 +351,7 @@ public function testEventAndSourceDeleteViaPut() $this->assertEquals($response[$this->api->itemName()]['lists'][0]['id'], $newSegmentsArray[0]['id']); $this->assertEquals($response[$this->api->itemName()]['lists'][0]['name'], $newSegmentsArray[0]['name']); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); $this->clearPayloadItems(); diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index 4cc1aabc..ed4aeaee 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -325,7 +325,7 @@ public function testEditPatch() $pointsSet = 5; $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the contact shouldn't exist + // there should be an error as the contact shouldn't exist $this->assertTrue(isset($response['errors'][0]), $response['errors'][0]['message']); $response = $this->api->create($this->testPayload); @@ -343,7 +343,7 @@ public function testEditPatch() $this->assertErrors($response); $this->assertSame($response[$this->api->itemName()]['points'], $pointsSet, 'Points were not set correctly'); - //now delete the contact + // now delete the contact $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -360,7 +360,7 @@ public function testEditPatchFormError() ] ); - //there should be an error as the country does not exist + // there should be an error as the country does not exist $this->assertTrue(isset($response['errors'][0]), $response['errors'][0]['message']); } @@ -394,7 +394,7 @@ public function testAddPoints() $response = $this->api->get($contact['id']); $this->assertErrors($response); - $this->assertSame($response[$this->api->itemName()]['points'], ($contact['points'] + $pointToAdd), 'Points were not added correctly'); + $this->assertSame($response[$this->api->itemName()]['points'], $contact['points'] + $pointToAdd, 'Points were not added correctly'); $response = $this->api->delete($contact['id']); $this->assertErrors($response); @@ -414,7 +414,7 @@ public function testSubtractPoints() $response = $this->api->get($contact['id']); $this->assertErrors($response); - $this->assertSame($response[$this->api->itemName()]['points'], ($contact['points'] - $pointToSub), 'Points were not subtracted correctly'); + $this->assertSame($response[$this->api->itemName()]['points'], $contact['points'] - $pointToSub, 'Points were not subtracted correctly'); $response = $this->api->delete($contact['id']); $this->assertErrors($response); diff --git a/tests/Api/DataTest.php b/tests/Api/DataTest.php index e2a63472..96e49873 100644 --- a/tests/Api/DataTest.php +++ b/tests/Api/DataTest.php @@ -137,7 +137,7 @@ public function testGetListData() $this->assertTrue(!empty($response['types']), 'Check "types" exists in Array'); $this->assertPayload($response); // Types contains 10 elements when test written - $this->assertTrue((count($response[$this->api->listName()])) >= 10, 'Should contain 10 or more elements'); + $this->assertTrue(count($response[$this->api->listName()]) >= 10, 'Should contain 10 or more elements'); // test all currently known types exist foreach ($this->dataToTest as $key => $data) { diff --git a/tests/Api/EmailsTest.php b/tests/Api/EmailsTest.php index 005f36a4..fada4f70 100644 --- a/tests/Api/EmailsTest.php +++ b/tests/Api/EmailsTest.php @@ -138,7 +138,7 @@ public function testEditPatch() { $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the email shouldn't exist + // there should be an error as the email shouldn't exist $this->assertTrue(isset($response['errors'][0]), $response['errors'][0]['message']); // Unset the emailType, 'template' must be the default value @@ -158,7 +158,7 @@ public function testEditPatch() $this->assertErrors($response); - //now delete the email + // now delete the email $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -187,7 +187,7 @@ public function testEditPut() $this->assertSame($response[$this->api->itemName()]['lists'][0]['id'], $segment2['id']); $this->assertequals(count($response[$this->api->itemName()]['lists']), 1); - //now delete the email + // now delete the email $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); $response = $segmentApi->delete($segment1['id']); diff --git a/tests/Api/ExceptionsTest.php b/tests/Api/ExceptionsTest.php index 63970c33..e6aa6d4a 100644 --- a/tests/Api/ExceptionsTest.php +++ b/tests/Api/ExceptionsTest.php @@ -34,7 +34,7 @@ class ExceptionsTest extends MauticApiTestCase { - const CUSTOM_ERROR_MESSAGE = 'This is a Custom Error Exception'; + public const CUSTOM_ERROR_MESSAGE = 'This is a Custom Error Exception'; public function testContextNotFoundException() { diff --git a/tests/Api/FilesTest.php b/tests/Api/FilesTest.php index 6d3e5077..551b73b1 100644 --- a/tests/Api/FilesTest.php +++ b/tests/Api/FilesTest.php @@ -15,7 +15,7 @@ class FilesTest extends MauticApiTestCase public function setUp(): void { $this->api = $this->getContext('files'); - $this->testPayload['file'] = dirname(__DIR__).'/'.'mauticlogo.png'; + $this->testPayload['file'] = dirname(__DIR__).'/mauticlogo.png'; $this->assertTrue(file_exists($this->testPayload['file']), 'A file for test at '.$this->testPayload['file'].' does not exist.'); } diff --git a/tests/Api/FormsTest.php b/tests/Api/FormsTest.php index a56005d2..ec986365 100644 --- a/tests/Api/FormsTest.php +++ b/tests/Api/FormsTest.php @@ -96,7 +96,7 @@ public function testDeleteFields() $this->assertErrors($response); $this->assertTrue(empty($response[$this->api->itemName()]['fields']), 'Fields were not deleted'); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -115,7 +115,7 @@ public function testDeleteActions() $this->assertErrors($response); $this->assertTrue(empty($response[$this->api->itemName()]['actions']), 'Actions were not deleted'); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -124,7 +124,7 @@ public function testEditPatch() { $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the form shouldn't exist + // there should be an error as the form shouldn't exist $this->assertTrue(isset($response['errors']), $response['errors'][0]['message']); $response = $this->api->create($this->testPayload); @@ -157,7 +157,7 @@ public function testEditPatch() $this->assertSame($lastField['label'], 'edited field'); $this->assertSame($lastAction['name'], 'edited action'); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -188,7 +188,7 @@ public function testFieldAndActionDeleteViaPut() $this->assertTrue(empty($response[$this->api->itemName()]['fields']), 'Fields were not deleted via PUT request'); $this->assertTrue(empty($response[$this->api->itemName()]['actions']), 'Actions were not deleted via PUT request'); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index 2745f053..e46cb7bd 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -302,7 +302,7 @@ public function standardTestEditPatch(array $editTo) { $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the item shouldn't exist + // there should be an error as the item shouldn't exist $this->assertTrue(isset($response['errors'][0]), $response['errors'][0]['message']); $response = $this->api->create($this->testPayload); @@ -320,7 +320,7 @@ public function standardTestEditPut() $response = $this->api->edit(10000, $this->testPayload, true); $this->assertPayload($response); - //now delete the entity + // now delete the entity $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } diff --git a/tests/Api/PointTriggersTest.php b/tests/Api/PointTriggersTest.php index e7379e94..37a5caa8 100644 --- a/tests/Api/PointTriggersTest.php +++ b/tests/Api/PointTriggersTest.php @@ -112,7 +112,7 @@ public function testEventDeleteViaPut() $this->assertErrors($response); $this->assertTrue(empty($response[$this->api->itemName()]['events']), 'Trigger events were not deleted via PUT request'); - //now delete the form + // now delete the form $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -131,7 +131,7 @@ public function testDeleteEvents() $this->assertErrors($response); $this->assertTrue(empty($response[$this->api->itemName()]['events']), 'Events were not deleted'); - //now delete the trigger + // now delete the trigger $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } diff --git a/tests/Api/SegmentsTest.php b/tests/Api/SegmentsTest.php index 2266554b..06a03033 100644 --- a/tests/Api/SegmentsTest.php +++ b/tests/Api/SegmentsTest.php @@ -96,7 +96,7 @@ public function testEditPatch() { $response = $this->api->edit(10000, $this->testPayload); - //there should be an error as the segment shouldn't exist + // there should be an error as the segment shouldn't exist $this->assertTrue(isset($response['errors'][0]), $response['errors'][0]['message']); $response = $this->api->create($this->testPayload); @@ -109,7 +109,7 @@ public function testEditPatch() $response = $this->api->edit($response[$this->api->itemName()]['id'], $update); $this->assertPayload($response, $update); - //now delete the segment + // now delete the segment $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } @@ -119,7 +119,7 @@ public function testEditPut() $response = $this->api->edit(10000, $this->testPayload, true); $this->assertPayload($response); - //now delete the segment + // now delete the segment $response = $this->api->delete($response[$this->api->itemName()]['id']); $this->assertErrors($response); } diff --git a/tests/Api/StatsTest.php b/tests/Api/StatsTest.php index 8d1ae0e6..a98228fe 100644 --- a/tests/Api/StatsTest.php +++ b/tests/Api/StatsTest.php @@ -118,7 +118,7 @@ public function testGetStartLimit() foreach ($this->getTableList() as $table) { $response = $this->api->get($table, 1, 2); $this->assertPayload($response); - $this->assertTrue((count($response[$this->api->listName()])) <= 2); + $this->assertTrue(count($response[$this->api->listName()]) <= 2); } } @@ -127,7 +127,7 @@ public function testGetOrderSimple() list($tables, $columns) = $this->getTableList(true); foreach ($tables as $table) { - $hasId = (in_array('id', $columns[$table])); + $hasId = in_array('id', $columns[$table]); $response = $this->api->get( $table, @@ -152,7 +152,7 @@ public function testGetOrderAsc() list($tables, $columns) = $this->getTableList(true); foreach ($tables as $table) { - $hasId = (in_array('id', $columns[$table])); + $hasId = in_array('id', $columns[$table]); $response = $this->api->get( $table, 0, @@ -177,7 +177,7 @@ public function testGetOrderDesc() list($tables, $columns) = $this->getTableList(true); foreach ($tables as $table) { - $hasId = (in_array('id', $columns[$table])); + $hasId = in_array('id', $columns[$table]); $response = $this->api->get( $table, @@ -217,10 +217,10 @@ public function testGetWhereEqual() $response = $this->api->get($table, 0, 2, [], $where); $this->assertPayload($response); - $this->assertTrue((count($response[$this->api->listName()])) <= 1); + $this->assertTrue(count($response[$this->api->listName()]) <= 1); // The record might not exist in the database, but in case it does... - if (1 === (count($response[$this->api->listName()]))) { + if (1 === count($response[$this->api->listName()])) { $this->assertSame((int) $response[$this->api->listName()][0]['id'], $where[0]['val']); } } @@ -246,7 +246,7 @@ public function testGetWhereGreaterThan() $this->assertPayload($response); // The record might not exist in the database, but in case it does... - if ((count($response[$this->api->listName()])) > 0) { + if (count($response[$this->api->listName()]) > 0) { $this->assertGreaterThan($where[0]['val'], (int) $response[$this->api->listName()][0]['id']); } } From 40213ff78781b1d5ce1938534bd60ca52137b8ae Mon Sep 17 00:00:00 2001 From: Jasper Zonneveld Date: Fri, 14 Apr 2023 10:09:44 +0200 Subject: [PATCH 34/88] build: add .php-cs-fixer.cache to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c847cd4a..54e92aa1 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ /tests/phpunit.phar /vendor .DS_Store +/.php-cs-fixer.cache .phpunit.result.cache /.ddev/mautic-preference /mautic From 7c049d7b98e9f07cbd1dc702ba02f2ad9ba94e4f Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Tue, 18 Apr 2023 09:00:54 +0200 Subject: [PATCH 35/88] make the test flow compatible with removed email step --- .ddev/mautic-local.php.dist | 5 +++++ .ddev/mautic-setup.sh | 4 +--- .github/ci-files/local.php | 5 +++++ .github/workflows/tests.yml | 4 +--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.ddev/mautic-local.php.dist b/.ddev/mautic-local.php.dist index 72f0206f..4afef178 100644 --- a/.ddev/mautic-local.php.dist +++ b/.ddev/mautic-local.php.dist @@ -14,4 +14,9 @@ $parameters = [ 'db_password' => 'db', 'admin_email' => 'mautic@ddev.local', 'admin_password' => 'mautic', + 'mailer_from_name' => 'DDEV', + 'mailer_from_email' => 'mautic@ddev.local', + 'mailer_transport' => 'smtp', + 'mailer_host' => 'localhost', + 'mailer_port' => '1025', ]; diff --git a/.ddev/mautic-setup.sh b/.ddev/mautic-setup.sh index 265697e3..ae7b8f2c 100755 --- a/.ddev/mautic-setup.sh +++ b/.ddev/mautic-setup.sh @@ -11,9 +11,7 @@ setup_mautic() { cp ../.ddev/mautic-local.php.dist ./app/config/local.php printf "Installing Mautic...\n" - php bin/console mautic:install --force http://localhost/mautic \ - --mailer_from_name="DDEV" --mailer_from_email="mautic@ddev.local" \ - --mailer_transport="smtp" --mailer_host="localhost" --mailer_port="1025" + php bin/console mautic:install --force http://localhost/mautic php bin/console cache:warmup --no-interaction --env=dev printf "Enabling Twilio plugin for tests...\n" diff --git a/.github/ci-files/local.php b/.github/ci-files/local.php index 0fc13904..c5d5f30b 100644 --- a/.github/ci-files/local.php +++ b/.github/ci-files/local.php @@ -14,4 +14,9 @@ 'db_password' => '', 'admin_email' => 'github-actions@mautic.org', 'admin_password' => 'mautic', + 'mailer_from_name' => 'GitHub Actions', + 'mailer_from_email' => 'github-actions@mautic.org', + 'mailer_transport' => 'smtp', + 'mailer_host' => 'localhost', + 'mailer_port' => '1025', ]; diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 168d53e1..e2e04ce9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -100,9 +100,7 @@ jobs: run: | composer install --prefer-dist --no-progress cp $GITHUB_WORKSPACE/.github/ci-files/local.php ./app/config/local.php - php bin/console mautic:install http://localhost/ \ - --force --mailer_from_name="GitHub Actions" --mailer_from_email="github-actions@mautic.org" \ - --mailer_transport="smtp" --mailer_host="localhost" --mailer_port="1025" --env=dev + php bin/console mautic:install http://localhost/ --force --env=dev php bin/console cache:warmup --no-interaction --env=dev working-directory: /var/www/html/ From 83a65f762c90c9a76a561e9693ad79bf0482c363 Mon Sep 17 00:00:00 2001 From: Jasper Zonneveld Date: Fri, 14 Apr 2023 19:20:36 +0200 Subject: [PATCH 36/88] build: remove composer.lock --- .gitignore | 1 + composer.lock | 3910 ------------------------------------------------- 2 files changed, 1 insertion(+), 3910 deletions(-) delete mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 54e92aa1..a327be75 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ /tests/local.config.php_* /tests/local.tokens.php /tests/phpunit.phar +/composer.lock /vendor .DS_Store /.php-cs-fixer.cache diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 6e8d802b..00000000 --- a/composer.lock +++ /dev/null @@ -1,3910 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "dc4a2abe45289b6de968d6188ef3d48b", - "packages": [ - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - } - ], - "packages-dev": [ - { - "name": "brianium/paratest", - "version": "v6.4.4", - "source": { - "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/589cdb23728b2a19872945580b95d8aa2c6619da", - "reference": "589cdb23728b2a19872945580b95d8aa2c6619da", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.11", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.14", - "sebastian/environment": "^5.1.3", - "symfony/console": "^5.4.0 || ^6.0.0", - "symfony/process": "^5.4.0 || ^6.0.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0.0", - "ext-posix": "*", - "infection/infection": "^0.26.5", - "malukenho/mcbumpface": "^1.1.5", - "squizlabs/php_codesniffer": "^3.6.2", - "symfony/filesystem": "^v5.4.0 || ^6.0.0", - "vimeo/psalm": "^4.20.0" - }, - "bin": [ - "bin/paratest" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" - } - ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.4.4" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2022-03-28T07:55:11+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.14.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" - }, - "time": "2023-02-01T09:20:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^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" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" - }, - { - "name": "doctrine/lexer", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-14T08:49:07+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.12.0", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/eae11d945e2885d86e1c080eec1bb30a2aa27998", - "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998", - "shasum": "" - }, - "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.12.0" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2022-10-12T14:20:51+00:00" - }, - { - "name": "kint-php/kint", - "version": "4.2.3", - "source": { - "type": "git", - "url": "https://github.com/kint-php/kint.git", - "reference": "7601bfd95ccc50a1b903c2764b31d00919e8edd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kint-php/kint/zipball/7601bfd95ccc50a1b903c2764b31d00919e8edd9", - "reference": "7601bfd95ccc50a1b903c2764b31d00919e8edd9", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "phpspec/prophecy-phpunit": "^2", - "phpunit/phpunit": "^9.0", - "seld/phar-utils": "^1.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0", - "vimeo/psalm": "^4.0" - }, - "suggest": { - "kint-php/kint-helpers": "Provides extra helper functions", - "kint-php/kint-twig": "Provides d() and s() functions in twig templates" - }, - "type": "library", - "autoload": { - "files": [ - "init.php" - ], - "psr-4": { - "Kint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Vollebregt", - "homepage": "https://github.com/jnvsor" - }, - { - "name": "Contributors", - "homepage": "https://github.com/kint-php/kint/graphs/contributors" - } - ], - "description": "Kint - debugging tool for PHP developers", - "homepage": "https://kint-php.github.io/kint/", - "keywords": [ - "debug", - "kint", - "php" - ], - "support": { - "issues": "https://github.com/kint-php/kint/issues", - "source": "https://github.com/kint-php/kint/tree/4.2.3" - }, - "time": "2022-10-01T20:16:33+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.15.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" - }, - "time": "2023-03-05T19:49:14+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.26", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-03-06T12:58:08+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.28", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2023-01-14T12:32:24+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:03:37+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/console", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:44:14+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:44:14+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/container": "^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-30T19:17:58+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/string", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=8.0", - "ext-curl": "*", - "ext-json": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} From c6c108aae1e0d1b096357766175c40a2db2d720d Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Wed, 19 Apr 2023 08:37:20 +0200 Subject: [PATCH 37/88] bump memory limit to ensure Mautic in dev mode can handle it --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e2e04ce9..f002ca35 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -67,6 +67,7 @@ jobs: sudo a2enmod rewrite sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.0/apache2/php.ini sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.0/apache2/php.ini + sudo sed -i 's,^memory_limit =.*$,memory_limit = 256M,' /etc/php/8.0/apache2/php.ini sudo service apache2 restart cat /etc/php/8.0/apache2/php.ini | grep session From 7b8446bb379fa8822f60ea848e97e3ec9311d40b Mon Sep 17 00:00:00 2001 From: Moongazer <1685510+Moongazer@users.noreply.github.com> Date: Sat, 6 May 2023 10:18:57 +0200 Subject: [PATCH 38/88] Fix getMauticVersion() accessing always lower-case headers as array-key (addresses issue #233) --- lib/Api/Api.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 4857cff9..3af5db76 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -332,10 +332,10 @@ public function getResponseHeaders() */ public function getMauticVersion() { - $headers = $this->auth->getResponseHeaders(); + $headers = array_change_key_case($this->auth->getResponseHeaders(), CASE_LOWER); - if (isset($headers['Mautic-Version'])) { - return $headers['Mautic-Version']; + if (isset($headers['mautic-version'])) { + return $headers['mautic-version']; } return null; From 55a6dbb626b65e4334f96c38542e21109647fbc2 Mon Sep 17 00:00:00 2001 From: Mohammad Abu Musa Date: Wed, 10 May 2023 14:18:35 +0300 Subject: [PATCH 39/88] replace with index.php --- .ddev/local.config.php.dist | 4 ++-- .github/ci-files/local.config.php | 4 ++-- tests/ResponseTest.php | 6 +++--- tests/local.config.php.dist | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.ddev/local.config.php.dist b/.ddev/local.config.php.dist index c145ba34..fbf689e4 100644 --- a/.ddev/local.config.php.dist +++ b/.ddev/local.config.php.dist @@ -52,10 +52,10 @@ return [ 'version' => 'OAuth1a', // Required for OAuth1a and OAuth2 - 'baseUrl' => 'http://localhost/mautic/index_dev.php', + 'baseUrl' => 'http://localhost/mautic/index.php', // Required for All tests - 'apiUrl' => 'http://localhost/mautic/index_dev.php/api/', + 'apiUrl' => 'http://localhost/mautic/index.php/api/', // Required for EmailsTest 'testEmail' => 'notexisting@email.com', diff --git a/.github/ci-files/local.config.php b/.github/ci-files/local.config.php index d9213085..95be23aa 100644 --- a/.github/ci-files/local.config.php +++ b/.github/ci-files/local.config.php @@ -52,10 +52,10 @@ 'version' => 'OAuth1a', // Required for OAuth1a and OAuth2 - 'baseUrl' => 'http://localhost/index_dev.php', + 'baseUrl' => 'http://localhost/index.php', // Required for All tests - 'apiUrl' => 'http://localhost/index_dev.php/api/', + 'apiUrl' => 'http://localhost/index.php/api/', // Required for EmailsTest 'testEmail' => 'notexisting@email.com', diff --git a/tests/ResponseTest.php b/tests/ResponseTest.php index 68a3a2a5..90953b93 100644 --- a/tests/ResponseTest.php +++ b/tests/ResponseTest.php @@ -22,7 +22,7 @@ class ResponseTest extends TestCase X-Powered-By: PHP/7.0.15 Set-Cookie: 9743595cf0a472cb3ec0272949ffe7e8=4ocah9itj45lmnhv4ub25ml1b7; path=/; HttpOnly Cache-Control: no-cache -Location: /index_dev.php/s/dashboard +Location: /index.php/s/dashboard Content-Length: 348 Content-Type: text/html; charset=UTF-8 @@ -33,7 +33,7 @@ class ResponseTest extends TestCase X-Powered-By: PHP/7.0.15 Set-Cookie: 9743595cf0a472cb3ec0272949ffe7e8=ahtmrsuem98b5kunm2g162pa85; path=/; HttpOnly Cache-Control: no-cache -Location: http://mautic.dev/index_dev.php/s/login +Location: http://mautic.dev/index.php/s/login Content-Length: 400 Content-Type: text/html; charset=UTF-8 @@ -65,7 +65,7 @@ class ResponseTest extends TestCase private $urlParamBody = 'first=value&arr[]=foo+bar&arr[]=baz'; private $curlInfo = [ - 'url' => 'http://mautic.dev/index_dev.php', + 'url' => 'http://mautic.dev/index.php', 'content_type' => null, 'http_code' => 200, 'header_size' => 0, diff --git a/tests/local.config.php.dist b/tests/local.config.php.dist index 78f2a32a..80be5e0f 100644 --- a/tests/local.config.php.dist +++ b/tests/local.config.php.dist @@ -52,10 +52,10 @@ return [ 'version' => 'OAuth1a', // Required for OAuth1a and OAuth2 - 'baseUrl' => 'http://example.com/index_dev.php', + 'baseUrl' => 'http://example.com/index.php', // Required for All tests - 'apiUrl' => 'http://example.com/index_dev.php/api/', + 'apiUrl' => 'http://example.com/index.php/api/', // Required for EmailsTest 'testEmail' => 'notexisting@email.com', From c8a430fe23e2502c12da4cc4c2d6b8129edce0b8 Mon Sep 17 00:00:00 2001 From: Mohammad Abu Musa Date: Wed, 10 May 2023 14:34:06 +0300 Subject: [PATCH 40/88] fix workflow --- .github/ci-files/.env.local | 16 ++++++++++++++++ .github/workflows/tests.yml | 1 + 2 files changed, 17 insertions(+) create mode 100644 .github/ci-files/.env.local diff --git a/.github/ci-files/.env.local b/.github/ci-files/.env.local new file mode 100644 index 00000000..47a6f2ab --- /dev/null +++ b/.github/ci-files/.env.local @@ -0,0 +1,16 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration +APP_ENV=dev +APP_DEBUG=1 \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f002ca35..80119d61 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -94,6 +94,7 @@ jobs: sudo chown -R www-data:www-data /var/www/html rm -rf /var/www/html/* mv $GITHUB_WORKSPACE/mautic/* /var/www/html/ + cp ./.github/ci-files/.env.local /var/www/html/ - name: Install Mautic env: From 08556a80198f34c1f27909651e5b414f9744d691 Mon Sep 17 00:00:00 2001 From: Mohammad Abu Musa Date: Tue, 30 May 2023 13:29:08 +0300 Subject: [PATCH 41/88] remove citrix --- tests/Api/StatsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Api/StatsTest.php b/tests/Api/StatsTest.php index a98228fe..b076055b 100644 --- a/tests/Api/StatsTest.php +++ b/tests/Api/StatsTest.php @@ -87,7 +87,6 @@ public function testGetTables() 'lead_utmtags', 'page_hits', 'page_redirects', - 'plugin_citrix_events', 'point_lead_action_log', 'point_lead_event_log', 'push_notification_stats', From ec92ebed5be3242f7ad064ecf6e3f63e934891cd Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Wed, 5 Jul 2023 22:19:18 +0200 Subject: [PATCH 42/88] switch to dsn mailer config to ensure mail tests succeed --- .github/ci-files/local.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ci-files/local.php b/.github/ci-files/local.php index c5d5f30b..efbddc6b 100644 --- a/.github/ci-files/local.php +++ b/.github/ci-files/local.php @@ -17,6 +17,5 @@ 'mailer_from_name' => 'GitHub Actions', 'mailer_from_email' => 'github-actions@mautic.org', 'mailer_transport' => 'smtp', - 'mailer_host' => 'localhost', - 'mailer_port' => '1025', + 'mailer_dsn' => 'smtp://localhost:1025', ]; From 66a93111b919e927af0a1cc9769f7e9c3487543e Mon Sep 17 00:00:00 2001 From: Jasper Zonneveld Date: Fri, 21 Oct 2022 09:36:01 +0200 Subject: [PATCH 43/88] Replace cURL with a PSR-18 HTTP Client --- README.md | 41 +++++-- UPGRADE-4.0.md | 18 +++ composer.json | 18 ++- lib/Api/Api.php | 13 +- lib/Auth/AbstractAuth.php | 215 ++++++++++----------------------- lib/Auth/ApiAuth.php | 12 +- lib/Auth/AuthInterface.php | 2 + lib/Auth/OAuth.php | 70 ----------- lib/Response.php | 54 ++++----- tests/Api/ContactsTest.php | 11 +- tests/Api/ExceptionsTest.php | 7 +- tests/Api/ResponseInfoTest.php | 8 +- tests/ResponseTest.php | 119 +++++------------- 13 files changed, 205 insertions(+), 383 deletions(-) diff --git a/README.md b/README.md index dfa8d149..03df5db8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ ## Requirements * PHP 8.0 or newer -* cURL support ## Installing the API Library You can install the API Library with the following command: @@ -16,6 +15,38 @@ You can install the API Library with the following command: composer require mautic/api-library ``` +N.B. Make sure you have installed a PSR-18 HTTP Client before you install this package or install one at the same time e.g. `composer require mautic/api-library guzzlehttp/guzzle:^7.3`. + +### HTTP Client + +We are decoupled from any HTTP messaging client with the help of [PSR-18 HTTP Client](https://www.php-fig.org/psr/psr-18/). This requires an extra package providing [psr/http-client-implementation](https://packagist.org/providers/psr/http-client-implementation). To use Guzzle 7, for example, simply require `guzzlehttp/guzzle`: + +``` bash +composer require guzzlehttp/guzzle:^7.3 +``` + +The installed HTTP Client is auto-discovered using [php-http/discovery](https://packagist.org/providers/php-http/discovery), but you can also provide your own HTTP Client if you like. + +```php + 10, +]); + +// Initiate the auth object +$initAuth = new ApiAuth($httpClient); +$auth = $initAuth->newAuth($settings); +// etc. +``` + ## Mautic Setup The API must be enabled in Mautic. Within Mautic, go to the Configuration page (located in the Settings menu) and under API Settings enable Mautic's API. If you intend to use Basic Authentication, ensure you enable it. You can also choose which OAuth protocol to use here. After saving the configuration, go to the API Credentials page (located in the Settings menu) and create a new client. Enter the callback/redirect URI that the request will be sent from. Click Apply, then copy the Client ID and Client Secret to the application that will be using the API. @@ -131,14 +162,6 @@ $auth = $initAuth->newAuth($settings, 'BasicAuth'); ]; ``` -**Note:** You can also specify a CURLOPT_TIMEOUT in the request (default is set to wait indefinitely): -```php -$initAuth = new ApiAuth(); -$auth = $initAuth->newAuth($settings, 'BasicAuth'); -$timeout = 10; - -$auth->setCurlTimeout($timeout); -``` ## API Requests Now that you have an access token and the auth object, you can make API requests. The API is broken down into contexts. diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index 3a157bba..86c2e28c 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -1,5 +1,23 @@ # Dependencies * PHP 8.0 is the now the minimum +* We are decoupled from any HTTP messaging client with the help of [PSR-18 HTTP Client](https://www.php-fig.org/psr/psr-18/). This requires an extra package providing [psr/http-client-implementation](https://packagist.org/providers/psr/http-client-implementation). To use Guzzle 7, for example, simply require `guzzlehttp/guzzle` in your project. If you do not have an HTTP client installed, `php-http/discovery` will install one if you allow the Composer plugin. # Api * \Mautic\Api\Api::getLogger now returns void as the LoggerAwareInterface dictates +* \Mautic\Api\Api::getResponseInfo and \Mautic\Response::getInfo have been removed, all Auth classes now have a getResponse method to get the PSR-7 response message + +# HTTP +## Timeout +The setCurlTimeout-method (`$auth->setCurlTimeout(10);`) has been removed. If you like to set the timeout, you should configure your HTTP client to do so. For example, with Guzzle 7, you can do this: + +```php +$httpClient = new \GuzzleHttp\Client([ + 'timeout' => 10, +]); +$settings = [ + // ... +]; + +$initAuth = new \Mautic\Auth\ApiAuth($httpClient); +$auth = $initAuth->newAuth($settings); +``` diff --git a/composer.json b/composer.json index 7cdd8dfc..b435e8d4 100644 --- a/composer.json +++ b/composer.json @@ -15,17 +15,29 @@ }, "require": { "php": ">=8.0", - "ext-curl": "*", "ext-json": "*", - "psr/log": "~1.0 || ~2.0 || ~3.0" + "psr/log": "~1.0 || ~2.0 || ~3.0", + "psr/http-client": "^1.0", + "psr/http-client-implementation": "^1.0", + "guzzlehttp/psr7": "^2.4", + "php-http/discovery": "^1.15" }, "require-dev": { "kint-php/kint": "^4.1", "friendsofphp/php-cs-fixer": "~3.12.0", "phpunit/phpunit": "~9.5.0", - "brianium/paratest": "^6.2" + "brianium/paratest": "^6.2", + "guzzlehttp/guzzle": "^7.5" + }, + "suggest": { + "guzzlehttp/guzzle": "A popular HTTP client that implements psr/http-client-implementation." }, "scripts": { "test": "vendor/bin/paratest" + }, + "config": { + "allow-plugins": { + "php-http/discovery": true + } } } diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 3af5db76..2d19b751 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -285,10 +285,9 @@ public function makeRequest($endpoint, array $parameters = [], $method = 'GET') // Ensure a code is present in the error array if (!empty($response['errors'])) { - $info = $this->auth->getResponseInfo(); foreach ($response['errors'] as $key => $error) { if (!isset($response['errors'][$key]['code'])) { - $response['errors'][$key]['code'] = $info['http_code']; + $response['errors'][$key]['code'] = $this->auth->getResponse()->getStatusCode(); } } } @@ -304,16 +303,6 @@ public function makeRequest($endpoint, array $parameters = [], $method = 'GET') return $response; } - /** - * Returns HTTP response info. - * - * @return array - */ - public function getResponseInfo() - { - return $this->auth->getResponseInfo(); - } - /** * Returns HTTP response headers. * diff --git a/lib/Auth/AbstractAuth.php b/lib/Auth/AbstractAuth.php index 9753ef0b..80e62244 100644 --- a/lib/Auth/AbstractAuth.php +++ b/lib/Auth/AbstractAuth.php @@ -11,41 +11,35 @@ namespace Mautic\Auth; +use GuzzleHttp\Psr7\MultipartStream; +use GuzzleHttp\Psr7\Request; +use GuzzleHttp\Psr7\Utils; use Mautic\Exception\UnexpectedResponseFormatException; use Mautic\Response; +use Psr\Http\Client\ClientInterface; +use Psr\Http\Message\ResponseInterface; /** * Class AbstractAuth. */ abstract class AbstractAuth implements AuthInterface { - /** - * If set to true, $_SESSION['debug'] will be populated. - * - * @var bool - */ - protected $_debug = false; + protected ClientInterface $client; /** - * Holds string of HTTP response headers. - * - * @var string + * If set to true, $_SESSION['debug'] will be populated. */ - protected $_httpResponseHeaders; + protected bool $_debug = false; /** - * Holds array of HTTP response CURL info. - * - * @var array + * Holds the HTTP response. */ - protected $_httpResponseInfo; + protected ResponseInterface $_httpResponse; - /** - * Timeout for a cURL request. - * - * @var int - */ - protected $_curlTimeout = null; + public function __construct(ClientInterface $client) + { + $this->client = $client; + } /** * @param string $url @@ -84,17 +78,22 @@ public function getDebugInfo() */ public function getResponseHeaders() { - return $this->parseHeaders($this->_httpResponseHeaders); + return array_map( + static function ($values) { + return $values[0]; + }, + $this->_httpResponse->getHeaders() + ); } /** - * Returns array of HTTP response headers. + * Returns the HTTP response. * - * @return array + * @return \Psr\Http\Message\ResponseInterface */ - public function getResponseInfo() + public function getResponse() { - return $this->_httpResponseInfo; + return $this->_httpResponse; } /** @@ -106,132 +105,76 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array { $this->log('makeRequest('.$url.', '.http_build_query($parameters).', '.$method.',...)'); - list($url, $parameters) = $this->separateUrlParams($url, $parameters); + [$url, $parameters] = $this->separateUrlParams($url, $parameters); - // make sure $method is capitalized for congruency + // Make sure $method is capitalized for congruency $method = strtoupper($method); $headers = (isset($settings['headers']) && is_array($settings['headers'])) ? $settings['headers'] : []; - list($headers, $parameters) = $this->prepareRequest($url, $headers, $parameters, $method, $settings); - - // Set default CURL options - $options = [ - CURLOPT_RETURNTRANSFER => true, - CURLOPT_SSL_VERIFYPEER => false, - CURLOPT_HEADER => true, - ]; + [$headers, $parameters] = $this->prepareRequest($url, $headers, $parameters, $method, $settings); - if (null !== $this->_curlTimeout) { - $options[CURLOPT_TIMEOUT] = $this->_curlTimeout; - } - - // CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set - $options[CURLOPT_FOLLOWLOCATION] = (ini_get('open_basedir')) ? false : true; - - // Set custom REST method if not GET or POST - if (!in_array($method, ['GET', 'POST'])) { - $options[CURLOPT_CUSTOMREQUEST] = $method; - } - - // Set post fields for POST/PUT/PATCH requests - $isPost = false; + // Prepare parameters/body + $body = null; if (in_array($method, ['POST', 'PUT', 'PATCH'])) { - $isPost = true; - // Set file to upload - // Sending file data requires an array to set - // the Content-Type header to multipart/form-data if (!empty($parameters['file']) && file_exists($parameters['file'])) { - $options[CURLOPT_INFILESIZE] = filesize($parameters['file']); - $parameters['file'] = $this->createCurlFile($parameters['file']); - $headers[] = 'Content-Type: multipart/form-data'; + $elements = []; + foreach ($parameters as $key => $value) { + $elements[] = [ + 'name' => $key, + 'contents' => 'file' === $key ? Utils::tryFopen($value, 'r+') : $value, + ]; + } + + $body = new MultipartStream($elements); + $headers[] = 'Content-Type: multipart/form-data; boundary='.$body->getBoundary(); } else { - $parameters = json_encode($parameters); - $headers[] = 'Content-Type: application/json'; + $body = Utils::streamFor(json_encode($parameters)); + $headers[] = 'Content-Type: application/json'; } - $options[CURLOPT_POST] = true; - $options[CURLOPT_POSTFIELDS] = $parameters; - $this->log('Posted parameters = '.print_r($parameters, true)); } - $query = $this->getQueryParameters($isPost, $parameters); + $query = $this->getQueryParameters(null !== $body, $parameters); $this->log('Query parameters = '.print_r($query, true)); // Create a query string for GET/DELETE requests if (count($query) > 0) { $queryGlue = false === strpos($url, '?') ? '?' : '&'; - $url = $url.$queryGlue.http_build_query($query, '', '&'); + $url .= $queryGlue.http_build_query($query, '', '&'); $this->log('URL updated to '.$url); } - // Set the URL - $options[CURLOPT_URL] = $url; - - $headers[] = 'Accept: application/json'; - $options[CURLOPT_HTTPHEADER] = $headers; - - // Make CURL request - $curl = curl_init(); - curl_setopt_array($curl, $options); + $headers[] = 'Accept: application/json'; - $response = new Response(curl_exec($curl), curl_getinfo($curl)); + // Build request + $request = new Request($method, $url); + foreach ($headers as $header) { + [$name, $value] = explode(':', $header, 2); + $request = $request->withHeader(trim($name), trim($value)); + } + if ($body) { + $request = $request->withBody($body); + } - $this->_httpResponseHeaders = $response->getHeaders(); - $this->_httpResponseInfo = $response->getInfo(); + // Send request + $this->_httpResponse = $this->client->sendRequest($request); - curl_close($curl); + // Parse response + $response = new Response($this->_httpResponse); if ($this->_debug) { - $_SESSION['oauth']['debug']['info'] = $response->getInfo(); - $_SESSION['oauth']['debug']['returnedHeaders'] = $response->getHeaders(); - $_SESSION['oauth']['debug']['returnedBody'] = $response->getBody(); + $_SESSION['oauth']['debug']['returnedStatusCode'] = $response->getStatusCode(); + $_SESSION['oauth']['debug']['returnedHeaders'] = $response->getHeaders(); + $_SESSION['oauth']['debug']['returnedBody'] = $response->getBody(); } // Handle zip file response if ($response->isZip()) { - $temporaryFilePath = isset($settings['temporaryFilePath']) ? $settings['temporaryFilePath'] : sys_get_temp_dir(); - - return $response->saveToFile($temporaryFilePath); - } else { - return $response->getDecodedBody(); - } - } - - /** - * @deprecated 2.6.0 to be removed in 3.0; use createCurlFile instead - * - * @param string $filename - * @param string $mimetype - * @param string $postname - * - * @return \CURLFile|string - */ - protected function crateCurlFile($filename, $mimetype = '', $postname = '') - { - return $this->createCurlFile($filename, $mimetype, $postname); - } - - /** - * Build the CURL file based on PHP version. - * - * @param string $filename - * @param string $mimetype - * @param string $postname - * - * @return string|\CURLFile - */ - protected function createCurlFile($filename, $mimetype = '', $postname = '') - { - if (!function_exists('curl_file_create')) { - // For PHP < 5.5 - return "@$filename;filename=" - .($postname ?: basename($filename)) - .($mimetype ? ";type=$mimetype" : ''); + return $response->saveToFile($settings['temporaryFilePath'] ?? sys_get_temp_dir()); } - // For PHP >= 5.5 - return curl_file_create($filename, $mimetype, $postname); + return $response->getDecodedBody(); } /** @@ -255,30 +198,6 @@ protected function log($message) } } - /** - * Build the HTTP response array out of the headers string. - * - * @param string $headersStr - * - * @return array - */ - protected function parseHeaders($headersStr) - { - $headersArr = []; - $headersHlpr = explode("\r\n", $headersStr); - - foreach ($headersHlpr as $header) { - $pos = strpos($header, ':'); - if (false === $pos) { - $headersArr[] = trim($header); - } else { - $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, $pos + 1)); - } - } - - return $headersArr; - } - /** * Separates parameters from base URL. * @@ -304,14 +223,4 @@ protected function separateUrlParams($url, $params) return [$url, $params]; } - - /** - * Set the timeout for a cURL request. - * - * @param int $timeout - */ - public function setCurlTimeout($timeout) - { - $this->_curlTimeout = $timeout; - } } diff --git a/lib/Auth/ApiAuth.php b/lib/Auth/ApiAuth.php index 3c55dd43..f50521e0 100644 --- a/lib/Auth/ApiAuth.php +++ b/lib/Auth/ApiAuth.php @@ -11,11 +11,21 @@ namespace Mautic\Auth; +use Http\Discovery\Psr18ClientDiscovery; +use Psr\Http\Client\ClientInterface; + /** * OAuth Client modified from https://code.google.com/p/simple-php-oauth/. */ class ApiAuth { + protected ClientInterface $client; + + public function __construct(ClientInterface $client = null) + { + $this->client = $client ?: Psr18ClientDiscovery::find(); + } + /** * Get an API Auth object. * @@ -44,7 +54,7 @@ public static function initiate($parameters = [], $authMethod = 'OAuth') public function newAuth($parameters = [], $authMethod = 'OAuth') { $class = 'Mautic\\Auth\\'.$authMethod; - $authObject = new $class(); + $authObject = new $class($this->client); $reflection = new \ReflectionMethod($class, 'setup'); $pass = []; diff --git a/lib/Auth/AuthInterface.php b/lib/Auth/AuthInterface.php index 92f72af4..4924f8f4 100644 --- a/lib/Auth/AuthInterface.php +++ b/lib/Auth/AuthInterface.php @@ -11,6 +11,8 @@ namespace Mautic\Auth; +use Psr\Http\Client\ClientInterface; + interface AuthInterface { /** diff --git a/lib/Auth/OAuth.php b/lib/Auth/OAuth.php index 72d205b7..5df7c598 100755 --- a/lib/Auth/OAuth.php +++ b/lib/Auth/OAuth.php @@ -155,26 +155,6 @@ public function getAccessTokenData() ]; } - /** - * Returns array of HTTP response headers. - * - * @return array - */ - public function getResponseHeaders() - { - return $this->parseHeaders($this->_httpResponseHeaders); - } - - /** - * Returns array of HTTP response headers. - * - * @return array - */ - public function getResponseInfo() - { - return $this->_httpResponseInfo; - } - /** * {@inheritdoc} */ @@ -525,30 +505,6 @@ protected function isOauth1() return !empty($this->_request_token_url); } - /** - * Build the HTTP response array out of the headers string. - * - * @param string $headersStr - * - * @return array - */ - protected function parseHeaders($headersStr) - { - $headersArr = []; - $headersHlpr = explode("\r\n", $headersStr); - - foreach ($headersHlpr as $header) { - $pos = strpos($header, ':'); - if (false === $pos) { - $headersArr[] = trim($header); - } else { - $headersArr[trim(substr($header, 0, $pos))] = trim(substr($header, $pos + 1)); - } - } - - return $headersArr; - } - /** * @param string $url * @param string $method @@ -768,32 +724,6 @@ protected function requestToken($responseType = 'flat') } } - /** - * Separates parameters from base URL. - * - * @param string $url - * @param array $params - * - * @return array - */ - protected function separateUrlParams($url, $params) - { - $a = parse_url($url); - - if (!empty($a['query'])) { - parse_str($a['query'], $qparts); - $cleanParams = []; - foreach ($qparts as $k => $v) { - $cleanParams[$k] = $v ? $v : ''; - } - $params = array_merge($params, $cleanParams); - $urlParts = explode('?', $url, 2); - $url = $urlParts[0]; - } - - return [$url, $params]; - } - /** * Build header for OAuth 1 authorization. * diff --git a/lib/Response.php b/lib/Response.php index 64e6e016..19d799ac 100644 --- a/lib/Response.php +++ b/lib/Response.php @@ -11,32 +11,44 @@ namespace Mautic; use Mautic\Exception\UnexpectedResponseFormatException; +use Psr\Http\Message\ResponseInterface; /** * Class helping with API responses. */ class Response { - private $headers; - private $body; - private $info; + /** + * @var \Psr\Http\Message\ResponseInterface + */ + private $response; /** - * @param string $response + * @var string */ - public function __construct($response, array $info) + private $body; + + public function __construct(ResponseInterface $response) { - $this->info = $info; - $this->parseResponse($response); + $this->response = $response; + $this->body = (string) $this->response->getBody(); $this->validate(); } + /** + * @return int + */ + public function getStatusCode() + { + return $this->response->getStatusCode(); + } + /** * @return array */ public function getHeaders() { - return $this->headers; + return $this->response->getHeaders(); } /** @@ -95,20 +107,12 @@ public function decodeFromUrlParams() return $parsed; } - /** - * @return array - */ - public function getInfo() - { - return $this->info; - } - /** * @return bool */ public function isZip() { - return !empty($this->info['content_type']) && 'application/zip' === $this->info['content_type']; + return $this->response->hasHeader('Content-Type') && 'application/zip' === $this->response->getHeader('Content-Type')[0]; } /** @@ -152,24 +156,14 @@ public function saveToFile($path) ]; } - /** - * @param string $response - */ - private function parseResponse($response) - { - $exploded = explode("\r\n\r\n", $response); - $this->body = array_pop($exploded); - $this->headers = implode("\r\n\r\n", $exploded); - } - /** * @throws UnexpectedResponseFormatException */ private function validate() { - if (!in_array($this->info['http_code'], [200, 201])) { - $message = 'The response has unexpected status code ('.$this->info['http_code'].').'; - throw new UnexpectedResponseFormatException($this, $message, $this->info['http_code']); + if (!in_array($this->response->getStatusCode(), [200, 201])) { + $message = 'The response has unexpected status code ('.$this->response->getStatusCode().').'; + throw new UnexpectedResponseFormatException($this, $message, $this->response->getStatusCode()); } if ($this->isHtml()) { diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index ed4aeaee..91a505c6 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -10,6 +10,8 @@ namespace Mautic\Tests\Api; +use GuzzleHttp\Client; +use GuzzleHttp\Psr7\Request; use Mautic\Api\Contacts; use Mautic\QueryBuilder\QueryBuilder; @@ -193,12 +195,9 @@ public function testGetActivity() public function testGetActivityAdvanced() { // Ensure a page hit exists - $curl = curl_init(); - curl_setopt($curl, CURLOPT_URL, $this->config['baseUrl'].'/mtracking.gif?url='.urlencode('http://mautic.org')); - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - - curl_exec($curl); + $client = new Client(['verify' => false]); + $request = new Request('GET', $this->config['baseUrl'].'/mtracking.gif?url='.urlencode('http://mautic.org')); + $client->send($request); $response = $this->api->getActivity('', ['page.hit']); $this->assertEventResponse($response, ['page.hit']); diff --git a/tests/Api/ExceptionsTest.php b/tests/Api/ExceptionsTest.php index e6aa6d4a..28c3f065 100644 --- a/tests/Api/ExceptionsTest.php +++ b/tests/Api/ExceptionsTest.php @@ -25,6 +25,7 @@ namespace Mautic\Tests\Api; +use GuzzleHttp\Psr7\Response as HttpResponse; use Mautic\Exception\ActionNotSupportedException; use Mautic\Exception\ContextNotFoundException; use Mautic\Exception\IncorrectParametersReturnedException; @@ -69,7 +70,7 @@ public function testActionNotSupportedExceptionCustomMessage() public function testUnexpectedResponseFormatException() { $expected = 'The response returned is in an unexpected format.'."\n\nResponse: "; - $exception = new UnexpectedResponseFormatException(new Response('', ['http_code' => 200])); + $exception = new UnexpectedResponseFormatException(new Response(new HttpResponse())); $this->assertEquals($expected, $exception->getMessage(), 'This should return "'.$expected.'"'); $this->assertEquals(500, $exception->getCode()); } @@ -77,14 +78,14 @@ public function testUnexpectedResponseFormatException() public function testUnexpectedResponseFormatExceptionCustomMessage() { $expected = self::CUSTOM_ERROR_MESSAGE."\n\nResponse: "; - $exception = new UnexpectedResponseFormatException(new Response('', ['http_code' => 200]), self::CUSTOM_ERROR_MESSAGE); + $exception = new UnexpectedResponseFormatException(new Response(new HttpResponse()), self::CUSTOM_ERROR_MESSAGE); $this->assertEquals($expected, $exception->getMessage(), 'This should return "'.$expected.'"'); $this->assertEquals(500, $exception->getCode()); } public function testUnexpectedResponseFormatExceptionCustomCode() { - $exception = new UnexpectedResponseFormatException(new Response('', ['http_code' => 200]), null, 404); + $exception = new UnexpectedResponseFormatException(new Response(new HttpResponse()), null, 404); $this->assertEquals(404, $exception->getCode()); } diff --git a/tests/Api/ResponseInfoTest.php b/tests/Api/ResponseInfoTest.php index ab79487d..7e198a0e 100644 --- a/tests/Api/ResponseInfoTest.php +++ b/tests/Api/ResponseInfoTest.php @@ -25,15 +25,9 @@ public function testGetVersion() $this->assertMatchesRegularExpression("/^(\d+\.)?(\d+\.)?(.+|\d+)$/", $version); } - public function testResponseInfo() - { - $info = $this->api->getResponseInfo(); - $this->assertEquals($info['content_type'], 'application/json'); - } - public function testResponseHeaders() { $headers = $this->api->getResponseHeaders(); - $this->assertEquals($headers[0], 'HTTP/1.1 200 OK'); + $this->assertEquals($headers['Content-Type'], 'application/json'); } } diff --git a/tests/ResponseTest.php b/tests/ResponseTest.php index 90953b93..341aff16 100644 --- a/tests/ResponseTest.php +++ b/tests/ResponseTest.php @@ -10,43 +10,21 @@ namespace Mautic\Tests; +use GuzzleHttp\Psr7\Response as HttpResponse; use Mautic\Exception\UnexpectedResponseFormatException; use Mautic\Response; use PHPUnit\Framework\TestCase; class ResponseTest extends TestCase { - private $headersWithRedirects = 'HTTP/1.1 302 Found -Date: Fri, 17 Nov 2017 14:09:31 GMT -Server: Apache/2.4.25 (Unix) OpenSSL/0.9.8zh PHP/7.0.15 -X-Powered-By: PHP/7.0.15 -Set-Cookie: 9743595cf0a472cb3ec0272949ffe7e8=4ocah9itj45lmnhv4ub25ml1b7; path=/; HttpOnly -Cache-Control: no-cache -Location: /index.php/s/dashboard -Content-Length: 348 - -Content-Type: text/html; charset=UTF-8 - -HTTP/1.1 302 Found -Date: Fri, 17 Nov 2017 14:09:31 GMT -Server: Apache/2.4.25 (Unix) OpenSSL/0.9.8zh PHP/7.0.15 -X-Powered-By: PHP/7.0.15 -Set-Cookie: 9743595cf0a472cb3ec0272949ffe7e8=ahtmrsuem98b5kunm2g162pa85; path=/; HttpOnly -Cache-Control: no-cache -Location: http://mautic.dev/index.php/s/login -Content-Length: 400 -Content-Type: text/html; charset=UTF-8 - -HTTP/1.1 200 OK -Date: Fri, 17 Nov 2017 14:09:31 GMT -Server: Apache/2.4.25 (Unix) OpenSSL/0.9.8zh PHP/7.0.15 -X-Powered-By: PHP/7.0.15 -Set-Cookie: 9743595cf0a472cb3ec0272949ffe7e8=psh2rh9cam538t1u3e1gd3d8l3; path=/; HttpOnly -Cache-Control: no-cache -Transfer-Encoding: chunked -Content-Type: text/html; charset=UTF-8'; - - private $space = "\r\n\r\n"; + private $headers = [ + 'Date' => ['Fri, 17 Nov 2017 14:09:31 GMT'], + 'Server' => ['Apache/2.4.25 (Unix) OpenSSL/0.9.8zh PHP/7.0.15'], + 'X-Powered-By' => ['PHP/7.0.15'], + 'Set-Cookie' => ['9743595cf0a472cb3ec0272949ffe7e8=psh2rh9cam538t1u3e1gd3d8l3; path=/; HttpOnly'], + 'Transfer-Encoding' => ['chunked'], + 'Content-Type' => ['text/html; charset=UTF-8'], + ]; private $htmlBody = ' @@ -64,76 +42,39 @@ class ResponseTest extends TestCase private $urlParamBody = 'first=value&arr[]=foo+bar&arr[]=baz'; - private $curlInfo = [ - 'url' => 'http://mautic.dev/index.php', - 'content_type' => null, - 'http_code' => 200, - 'header_size' => 0, - 'request_size' => 0, - 'filetime' => -1, - 'ssl_verify_result' => 0, - 'redirect_count' => 0, - 'total_time' => 0, - 'namelookup_time' => 0, - 'connect_time' => 0, - 'pretransfer_time' => 0, - 'size_upload' => 0, - 'size_download' => 0, - 'speed_download' => 0, - 'speed_upload' => 0, - 'download_content_length' => -1, - 'upload_content_length' => -1, - 'starttransfer_time' => 0, - 'redirect_time' => 0, - 'redirect_url' => null, - 'primary_ip' => null, - 'certinfo' => [], - 'primary_port' => 0, - 'local_ip' => null, - 'local_port' => 0, - ]; - - private function getHtmlResponse() + private function getHtmlResponse($code = 200) { - return $this->headersWithRedirects.$this->space.$this->htmlBody; + return new HttpResponse($code, $this->headers, $this->htmlBody); } - private function getJsonResponse() + private function getJsonResponse($code = 200) { - return $this->headersWithRedirects.$this->space.$this->jsonBody; + return new HttpResponse($code, $this->headers, $this->jsonBody); } - private function getUrlParamResponse() + private function getUrlParamResponse($code = 200) { - return $this->headersWithRedirects.$this->space.$this->urlParamBody; - } - - private function getInfo($code = 200) - { - $info = $this->curlInfo; - $info['http_code'] = $code; - - return $info; + return new HttpResponse($code, $this->headers, $this->urlParamBody); } public function testParseResponse() { - $response = new Response($this->getJsonResponse(), $this->getInfo()); - $this->assertSame($this->headersWithRedirects, $response->getHeaders()); + $response = new Response($this->getJsonResponse()); + $this->assertSame(200, $response->getStatusCode()); + $this->assertSame($this->headers, $response->getHeaders()); $this->assertSame($this->jsonBody, $response->getBody()); - $this->assertSame($this->getInfo(), $response->getInfo()); } public function testValidation() { $this->expectException(UnexpectedResponseFormatException::class); - $response = new Response($this->getHtmlResponse(), $this->getInfo(500)); + $response = new Response($this->getHtmlResponse(500)); } public function testValidation404() { try { - $response = new Response($this->getHtmlResponse(), $this->getInfo(404)); + $response = new Response($this->getHtmlResponse(404)); } catch (UnexpectedResponseFormatException $e) { $this->assertSame(404, $e->getCode()); } @@ -141,56 +82,56 @@ public function testValidation404() public function testDecodeFromUrlParamsWithParams() { - $response = new Response($this->getUrlParamResponse(), $this->getInfo()); + $response = new Response($this->getUrlParamResponse()); $responseParams = $response->decodeFromUrlParams(); $this->assertSame('value', $responseParams['first']); } public function testDecodeFromUrlParamsWithNoParams() { - $response = new Response($this->headersWithRedirects.$this->space, $this->getInfo()); + $response = new Response(new HttpResponse(200, $this->headers)); $this->expectException(UnexpectedResponseFormatException::class); $response->decodeFromUrlParams(); } public function testDecodeFromJsonWithJson() { - $response = new Response($this->getJsonResponse(), $this->getInfo()); + $response = new Response($this->getJsonResponse()); $json = $response->decodeFromJson(); $this->assertSame('world', $json['hello']); } public function testDecodeFromJsonWithEmptyJson() { - $response = new Response($this->headersWithRedirects.$this->space, $this->getInfo()); + $response = new Response(new HttpResponse(200, $this->headers)); $this->expectException(UnexpectedResponseFormatException::class); $response->decodeFromUrlParams(); } public function testGetDecodedBodyWithJson() { - $response = new Response($this->getJsonResponse(), $this->getInfo()); + $response = new Response($this->getJsonResponse()); $body = $response->getDecodedBody(); $this->assertSame('world', $body['hello']); } public function testDecodeFromJsonWithEmptyResponse() { - $response = new Response($this->headersWithRedirects.$this->space, $this->getInfo()); + $response = new Response(new HttpResponse(200, $this->headers)); $this->expectException(UnexpectedResponseFormatException::class); $body = $response->getDecodedBody(); } public function testDecodeFromJsonWithTextResponse() { - $response = new Response($this->headersWithRedirects.$this->space.'OK', $this->getInfo()); + $response = new Response(new HttpResponse(200, $this->headers, 'OK')); $this->expectException(UnexpectedResponseFormatException::class); $body = $response->getDecodedBody(); } public function testSaveToFile() { - $response = new Response($this->getJsonResponse(), $this->getInfo()); + $response = new Response($this->getJsonResponse()); $result = $response->saveToFile(sys_get_temp_dir()); $this->assertFalse(empty($result['file'])); $this->assertTrue(file_exists($result['file'])); @@ -200,13 +141,13 @@ public function testSaveToFile() public function testIsZip() { - $response = new Response($this->getJsonResponse(), ['http_code' => 200, 'content_type' => 'application/zip']); + $response = new Response($this->getJsonResponse()->withHeader('Content-Type', 'application/zip')); $this->assertTrue($response->isZip()); } public function testIsNotZip() { - $response = new Response($this->getJsonResponse(), ['http_code' => 200, 'content_type' => 'application/json']); + $response = new Response($this->getJsonResponse()->withHeader('Content-Type', 'application/json')); $this->assertFalse($response->isZip()); } } From caa08a744ed2539f961d4f2d21db986d39d873d0 Mon Sep 17 00:00:00 2001 From: Jasper Zonneveld Date: Tue, 11 Jul 2023 12:22:50 +0200 Subject: [PATCH 44/88] Provide HTTP Client in AbstractAuthTest --- tests/Api/Auth/AbstractAuthTest.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Api/Auth/AbstractAuthTest.php b/tests/Api/Auth/AbstractAuthTest.php index 7e2ef118..48c19e80 100644 --- a/tests/Api/Auth/AbstractAuthTest.php +++ b/tests/Api/Auth/AbstractAuthTest.php @@ -10,6 +10,7 @@ namespace Mautic\Tests\Api\Auth; +use GuzzleHttp\Client; use Mautic\Auth\AbstractAuth; use Mautic\Exception\UnexpectedResponseFormatException; use PHPUnit\Framework\TestCase; @@ -25,21 +26,21 @@ public function setUp(): void public function test404Response() { - $auth = $this->getMockForAbstractClass(AbstractAuth::class); + $auth = $this->getMockForAbstractClass(AbstractAuth::class, [new Client()]); $this->expectException(UnexpectedResponseFormatException::class); $auth->makeRequest('https://github.com/mautic/api-library/this-page-does-not-exist'); } public function testHtmlResponse() { - $auth = $this->getMockForAbstractClass(AbstractAuth::class); + $auth = $this->getMockForAbstractClass(AbstractAuth::class, [new Client()]); $this->expectException(UnexpectedResponseFormatException::class); $auth->makeRequest($this->config['baseUrl']); } public function testJsonResponse() { - $auth = $this->getMockForAbstractClass(AbstractAuth::class); + $auth = $this->getMockForAbstractClass(AbstractAuth::class, [new Client()]); try { $response = $auth->makeRequest($this->config['apiUrl'].'contacts'); $this->assertTrue(is_array($response)); From 24f4fca13084f9bb662ea0d6ae52fa6d47df20b8 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Thu, 27 Jul 2023 17:29:49 +0200 Subject: [PATCH 45/88] switch to the correct folder for uploads --- tests/Api/AssetsTest.php | 2 +- tests/Api/FilesTest.php | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tests/Api/AssetsTest.php b/tests/Api/AssetsTest.php index de843aad..f4a515cd 100644 --- a/tests/Api/AssetsTest.php +++ b/tests/Api/AssetsTest.php @@ -38,7 +38,7 @@ public function testCreateWithLocalFileGetAndDelete() { // Upload a testing file $this->apiFiles = $this->getContext('files'); - $this->apiFiles->setFolder('assets'); + $this->apiFiles->setFolder('media'); $fileRequest = [ 'file' => dirname(__DIR__).'/mauticlogo.png', ]; diff --git a/tests/Api/FilesTest.php b/tests/Api/FilesTest.php index 551b73b1..ee55b2ff 100644 --- a/tests/Api/FilesTest.php +++ b/tests/Api/FilesTest.php @@ -34,15 +34,19 @@ public function testGetList() public function testGetListSubdir() { - $this->api->setFolder('images/flags'); + $this->api->setFolder('images/test_api_dir'); + $createResponse = $this->api->create($this->testPayload); + $response = $this->api->getList(); $this->assertTrue(isset($response['files'])); $this->assertErrors($response); + + $this->api->delete($createResponse['file']['name']); } - public function testGetListAssetFiles() + public function testGetListMediaFiles() { - $this->api->setFolder('assets'); + $this->api->setFolder('media'); $response = $this->api->getList(); $this->assertErrors($response); } @@ -80,9 +84,9 @@ public function testCreateAndDeleteImageInSubdir() $this->assertSuccess($response); } - public function testCreateAndDeleteAsset() + public function testCreateAndDeleteMedia() { - $this->api->setFolder('assets'); + $this->api->setFolder('media'); $response = $this->api->create($this->testPayload); $this->assertPayload($response); From 2738b68f891957f02d782568c5eb11728b05e2b3 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Thu, 27 Jul 2023 22:42:42 +0200 Subject: [PATCH 46/88] use mautic in test mode to speed it up --- .github/ci-files/{.env.local => .env} | 16 ++++++++++++++-- .github/workflows/tests.yml | 10 ++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) rename .github/ci-files/{.env.local => .env} (76%) diff --git a/.github/ci-files/.env.local b/.github/ci-files/.env similarity index 76% rename from .github/ci-files/.env.local rename to .github/ci-files/.env index 47a6f2ab..ad4a26e6 100644 --- a/.github/ci-files/.env.local +++ b/.github/ci-files/.env @@ -12,5 +12,17 @@ # # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration -APP_ENV=dev -APP_DEBUG=1 \ No newline at end of file +APP_ENV=test +APP_DEBUG=0 + +DB_HOST=127.0.0.1 +DB_NAME=mautictest +DB_USER=root +DB_PORT=3306 +DB_PASSWD= +MAUTIC_DB_PREFIX= +MAUTIC_TABLE_PREFIX= +MAUTIC_ENV=test +MAUTIC_ADMIN_USERNAME=admin +MAUTIC_ADMIN_PASSWORD=mautic +MAUTIC_DB_DRIVER=pdo_mysql diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 80119d61..907af1a3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -94,7 +94,9 @@ jobs: sudo chown -R www-data:www-data /var/www/html rm -rf /var/www/html/* mv $GITHUB_WORKSPACE/mautic/* /var/www/html/ - cp ./.github/ci-files/.env.local /var/www/html/ + cp ./.github/ci-files/.env /var/www/html/ + sed -i 's/DB_PORT=3306/DB_PORT=${{ job.services.mysql.ports[3306] }}/g' /var/www/html/.env + rm /var/www/html/.env.test - name: Install Mautic env: @@ -102,15 +104,15 @@ jobs: run: | composer install --prefer-dist --no-progress cp $GITHUB_WORKSPACE/.github/ci-files/local.php ./app/config/local.php - php bin/console mautic:install http://localhost/ --force --env=dev - php bin/console cache:warmup --no-interaction --env=dev + php bin/console mautic:install http://localhost/ --force --env=test + php bin/console cache:warmup --no-interaction --env=test working-directory: /var/www/html/ # Enable Twilio plugin with random credentials (needed for MessagesTest to function, doesn't actually contact Twilio API). - name: Enable Twilio plugin run: | mysql -uroot -P${{ job.services.mysql.ports[3306] }} -h127.0.0.1 -e "USE mautictest; INSERT INTO plugin_integration_settings (plugin_id, name, is_published, supported_features, api_keys, feature_settings) VALUES (NULL, 'Twilio', 1, 'a:0:{}', 'a:2:{s:8:\"username\";s:169:\"bzFmNlIydWRSZXlIN2lQVkdpanJ4aTQ2NUh6RVdDbHlLRVhsWGZ4b0kyZVNxLzYrQ1J6V1RvMnlhVEp0c245TEp6eStQekx5ZVhLWjB1YVdoR3RnR2dHQ3k1emVVdGt5NzZKUmtjUnJ3c1E9|L8tbZRIYhwatT7Mq+HAdYA==\";s:8:\"password\";s:169:\"T2d2cFpXQWE5YVZnNFFianJSYURRYUtGRHBNZGZjM1VETXg2Wm5Va3NheW43MjVWUlJhTVlCL2pYMDBpbElONStiVVBNbEM3M3BaeGJMNkFKNUFEN1pTNldSRjc4bUM4SDh1SE9OY1k5MTg9|TeuSvfx4XSUOvp0O7T49Cg==\";}', 'a:4:{s:20:\"sending_phone_number\";N;s:22:\"disable_trackable_urls\";i:0;s:16:\"frequency_number\";N;s:14:\"frequency_time\";N;}');" - php bin/console mautic:plugins:reload --env=dev + php bin/console mautic:plugins:reload --env=test working-directory: /var/www/html - name: Set correct ownership so Apache can access the files From e0bd5ada1739815c3613bd8d415d5cb4f7d11fe0 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Tue, 1 Aug 2023 11:45:45 +0200 Subject: [PATCH 47/88] ensure delete doesn't fail for non-existent files --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 907af1a3..1e804e62 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -96,7 +96,7 @@ jobs: mv $GITHUB_WORKSPACE/mautic/* /var/www/html/ cp ./.github/ci-files/.env /var/www/html/ sed -i 's/DB_PORT=3306/DB_PORT=${{ job.services.mysql.ports[3306] }}/g' /var/www/html/.env - rm /var/www/html/.env.test + rm -f /var/www/html/.env.test - name: Install Mautic env: From b92bda2334ab11fa7d014b66bec9887e4c958ebc Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Tue, 1 Aug 2023 12:20:13 +0200 Subject: [PATCH 48/88] ensure 5.x and 4.4 can use the same logic --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1e804e62..9635ae9b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -96,6 +96,7 @@ jobs: mv $GITHUB_WORKSPACE/mautic/* /var/www/html/ cp ./.github/ci-files/.env /var/www/html/ sed -i 's/DB_PORT=3306/DB_PORT=${{ job.services.mysql.ports[3306] }}/g' /var/www/html/.env + cp /var/www/html/.env /var/www/html/.env.dist rm -f /var/www/html/.env.test - name: Install Mautic From b04de81f76f5c91a9690fe931cd8e2745fb12a47 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Tue, 1 Aug 2023 13:43:09 +0200 Subject: [PATCH 49/88] seperate config file and install procedure --- .github/ci-files/local_4.php | 20 ++++++++++++++++++++ .github/ci-files/{local.php => local_5.php} | 0 .github/workflows/tests.yml | 12 +++++++++--- 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 .github/ci-files/local_4.php rename .github/ci-files/{local.php => local_5.php} (100%) diff --git a/.github/ci-files/local_4.php b/.github/ci-files/local_4.php new file mode 100644 index 00000000..a207e534 --- /dev/null +++ b/.github/ci-files/local_4.php @@ -0,0 +1,20 @@ + true, + 'api_enable_basic_auth' => true, + 'db_driver' => 'pdo_mysql', + 'db_host' => '127.0.0.1', + 'db_table_prefix' => null, + 'db_port' => getenv('DB_PORT'), + 'db_name' => 'mautictest', + 'db_user' => 'root', + 'db_password' => '', + 'admin_email' => 'github-actions@mautic.org', + 'admin_password' => 'mautic', + 'mailer_transport' => 'smtp', + 'mailer_host' => 'localhost', + 'mailer_port' => '1025', +]; diff --git a/.github/ci-files/local.php b/.github/ci-files/local_5.php similarity index 100% rename from .github/ci-files/local.php rename to .github/ci-files/local_5.php diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9635ae9b..e73b1848 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -96,7 +96,6 @@ jobs: mv $GITHUB_WORKSPACE/mautic/* /var/www/html/ cp ./.github/ci-files/.env /var/www/html/ sed -i 's/DB_PORT=3306/DB_PORT=${{ job.services.mysql.ports[3306] }}/g' /var/www/html/.env - cp /var/www/html/.env /var/www/html/.env.dist rm -f /var/www/html/.env.test - name: Install Mautic @@ -104,8 +103,15 @@ jobs: DB_PORT: ${{ job.services.mysql.ports[3306] }} run: | composer install --prefer-dist --no-progress - cp $GITHUB_WORKSPACE/.github/ci-files/local.php ./app/config/local.php - php bin/console mautic:install http://localhost/ --force --env=test + if [[ "$(jq -r '.version | .[0:1]' app/release_metadata.json)" == "4" ]]; then + cp $GITHUB_WORKSPACE/.github/ci-files/local_4.php ./app/config/local.php + php bin/console mautic:install http://localhost/ --force --env=test --mailer_from_name="GitHub Actions" --mailer_from_email="github-actions@mautic.org" + sed -i "s/('prod',/('test',/g" ./index.php + else + cp $GITHUB_WORKSPACE/.github/ci-files/local_5.php ./app/config/local.php + php bin/console mautic:install http://localhost/ --force --env=test + fi + php bin/console cache:warmup --no-interaction --env=test working-directory: /var/www/html/ From cad7ed44807ec8b60fd6d1cdfdfb23c31b496256 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Tue, 1 Aug 2023 14:26:14 +0200 Subject: [PATCH 50/88] lower parallel tests --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e73b1848..3046273d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -126,7 +126,7 @@ jobs: run: sudo chown -R www-data:www-data /var/www/html - name: Run tests - run: vendor/bin/paratest -p 3 --coverage-clover coverage.xml + run: vendor/bin/paratest -p 2 --coverage-clover coverage.xml - name: Upload code coverage run: bash <(curl -s https://codecov.io/bash) From bb0e1073cd4fe05948af499ab1418cd07e6db149 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Sun, 20 Aug 2023 21:29:25 +0200 Subject: [PATCH 51/88] add support for testing Mautic 4 --- .github/workflows/tests.yml | 6 +++++- phpunit.xml.dist | 3 +++ tests/Api/AssetsTest.php | 8 +++++++- tests/Api/FilesTest.php | 11 +++++++++-- tests/Api/MauticApiTestCase.php | 3 +++ tests/Api/StatsTest.php | 6 ++++++ 6 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3046273d..0e7f34a0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -107,9 +107,11 @@ jobs: cp $GITHUB_WORKSPACE/.github/ci-files/local_4.php ./app/config/local.php php bin/console mautic:install http://localhost/ --force --env=test --mailer_from_name="GitHub Actions" --mailer_from_email="github-actions@mautic.org" sed -i "s/('prod',/('test',/g" ./index.php + echo "MAUTIC_VERSION=4" >> $GITHUB_ENV else cp $GITHUB_WORKSPACE/.github/ci-files/local_5.php ./app/config/local.php php bin/console mautic:install http://localhost/ --force --env=test + echo "MAUTIC_VERSION=5" >> $GITHUB_ENV fi php bin/console cache:warmup --no-interaction --env=test @@ -126,7 +128,9 @@ jobs: run: sudo chown -R www-data:www-data /var/www/html - name: Run tests - run: vendor/bin/paratest -p 2 --coverage-clover coverage.xml + run: | + sed -i 's/env name="MAUTIC_VERSION" value="5"/env name="MAUTIC_VERSION" value="${{ env.MAUTIC_VERSION }}"/g' ./phpunit.xml.dist + vendor/bin/paratest -p 2 --coverage-clover coverage.xml - name: Upload code coverage run: bash <(curl -s https://codecov.io/bash) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 64811a6b..dead1160 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -10,4 +10,7 @@ tests + + + diff --git a/tests/Api/AssetsTest.php b/tests/Api/AssetsTest.php index f4a515cd..5fb00418 100644 --- a/tests/Api/AssetsTest.php +++ b/tests/Api/AssetsTest.php @@ -14,6 +14,8 @@ class AssetsTest extends MauticApiTestCase { protected $skipPayloadAssertion = ['file']; + protected $mediaFolder = 'media'; + public function setUp(): void { $this->api = $this->getContext('assets'); @@ -22,6 +24,10 @@ public function setUp(): void 'storageLocation' => 'remote', 'file' => 'https://www.mautic.org/media/logos/logo/Mautic_Logo_DB.pdf', ]; + + if ('4' == $this->mauticVersion) { + $this->mediaFolder = 'assets'; + } } public function testGetList() @@ -38,7 +44,7 @@ public function testCreateWithLocalFileGetAndDelete() { // Upload a testing file $this->apiFiles = $this->getContext('files'); - $this->apiFiles->setFolder('media'); + $this->apiFiles->setFolder($this->mediaFolder); $fileRequest = [ 'file' => dirname(__DIR__).'/mauticlogo.png', ]; diff --git a/tests/Api/FilesTest.php b/tests/Api/FilesTest.php index ee55b2ff..50089023 100644 --- a/tests/Api/FilesTest.php +++ b/tests/Api/FilesTest.php @@ -12,10 +12,17 @@ class FilesTest extends MauticApiTestCase { + protected $mediaFolder = 'media'; + public function setUp(): void { $this->api = $this->getContext('files'); $this->testPayload['file'] = dirname(__DIR__).'/mauticlogo.png'; + + if ('4' == $this->mauticVersion) { + $this->mediaFolder = 'assets'; + } + $this->assertTrue(file_exists($this->testPayload['file']), 'A file for test at '.$this->testPayload['file'].' does not exist.'); } @@ -46,7 +53,7 @@ public function testGetListSubdir() public function testGetListMediaFiles() { - $this->api->setFolder('media'); + $this->api->setFolder($this->mediaFolder); $response = $this->api->getList(); $this->assertErrors($response); } @@ -86,7 +93,7 @@ public function testCreateAndDeleteImageInSubdir() public function testCreateAndDeleteMedia() { - $this->api->setFolder('media'); + $this->api->setFolder($this->mediaFolder); $response = $this->api->create($this->testPayload); $this->assertPayload($response); diff --git a/tests/Api/MauticApiTestCase.php b/tests/Api/MauticApiTestCase.php index e46cb7bd..c4249aa3 100644 --- a/tests/Api/MauticApiTestCase.php +++ b/tests/Api/MauticApiTestCase.php @@ -22,6 +22,8 @@ abstract class MauticApiTestCase extends TestCase protected $skipPayloadAssertion = []; protected $testPayload = []; + protected $mauticVersion = null; + /** @var Api */ protected $api; @@ -67,6 +69,7 @@ protected function getAuth() protected function getContext($context) { + $this->mauticVersion = $_ENV['MAUTIC_VERSION'] ?? '5'; list($auth, $apiUrl) = $this->getAuth(); $api = new MauticApi(); diff --git a/tests/Api/StatsTest.php b/tests/Api/StatsTest.php index b076055b..36a27bb8 100644 --- a/tests/Api/StatsTest.php +++ b/tests/Api/StatsTest.php @@ -96,6 +96,12 @@ public function testGetTables() 'video_hits', 'webhook_logs', ]; + + if ('4' == $this->mauticVersion) { + $expectedTables[] = 'plugin_citrix_events'; + sort($expectedTables); + } + $tables = $this->getTableList(); $this->assertTrue(!empty($tables)); $this->assertSame( From 9a45170f992253f5458ed31dd3422dff7ada768d Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Mon, 21 Aug 2023 08:40:58 +0200 Subject: [PATCH 52/88] use phpunit instead of paratest as the speedup doesn't require this anymore --- .github/workflows/tests.yml | 2 +- composer.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0e7f34a0..232df7dd 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -130,7 +130,7 @@ jobs: - name: Run tests run: | sed -i 's/env name="MAUTIC_VERSION" value="5"/env name="MAUTIC_VERSION" value="${{ env.MAUTIC_VERSION }}"/g' ./phpunit.xml.dist - vendor/bin/paratest -p 2 --coverage-clover coverage.xml + vendor/bin/phpunit --coverage-clover coverage.xml - name: Upload code coverage run: bash <(curl -s https://codecov.io/bash) diff --git a/composer.json b/composer.json index b435e8d4..8673eae7 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,6 @@ "kint-php/kint": "^4.1", "friendsofphp/php-cs-fixer": "~3.12.0", "phpunit/phpunit": "~9.5.0", - "brianium/paratest": "^6.2", "guzzlehttp/guzzle": "^7.5" }, "suggest": { From 8a319b37b48d82d5fb9eef8aea0c7116999b44cc Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Fri, 13 Oct 2023 12:59:55 +0200 Subject: [PATCH 53/88] Fix config file location after config split-up in Mautic --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 232df7dd..fef23ad7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -109,7 +109,7 @@ jobs: sed -i "s/('prod',/('test',/g" ./index.php echo "MAUTIC_VERSION=4" >> $GITHUB_ENV else - cp $GITHUB_WORKSPACE/.github/ci-files/local_5.php ./app/config/local.php + cp $GITHUB_WORKSPACE/.github/ci-files/local_5.php ./config/local.php php bin/console mautic:install http://localhost/ --force --env=test echo "MAUTIC_VERSION=5" >> $GITHUB_ENV fi From 2ae4d4d0b32c3d6e4a6fe8c82144bf06dc2b1568 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Sat, 14 Oct 2023 17:21:08 +0200 Subject: [PATCH 54/88] fix for apache not being installable during tests --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fef23ad7..478e574e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -63,6 +63,7 @@ jobs: run: | sudo add-apt-repository ppa:ondrej/php -y sudo add-apt-repository ppa:ondrej/apache2 -y + sudu apt-get update sudo apt-get install apache2 libapache2-mod-php8.0 sudo a2enmod rewrite sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.0/apache2/php.ini From 1e06399524b4263303fa469973e883beadbba1df Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Sat, 14 Oct 2023 17:28:45 +0200 Subject: [PATCH 55/88] remove apache PPA as it's not working --- .github/workflows/tests.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 478e574e..62296b65 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -62,8 +62,7 @@ jobs: # NOTE: update the PHP version below as well if you're updating PHP! run: | sudo add-apt-repository ppa:ondrej/php -y - sudo add-apt-repository ppa:ondrej/apache2 -y - sudu apt-get update + sudo apt-get update sudo apt-get install apache2 libapache2-mod-php8.0 sudo a2enmod rewrite sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.0/apache2/php.ini From 587568fb09aea352979d3d126fbdd4c93e96fa85 Mon Sep 17 00:00:00 2001 From: Mattias Michaux Date: Sun, 18 Feb 2024 15:31:56 +0100 Subject: [PATCH 56/88] add the correct command for the test script --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 8673eae7..26aabceb 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "guzzlehttp/guzzle": "A popular HTTP client that implements psr/http-client-implementation." }, "scripts": { - "test": "vendor/bin/paratest" + "test": "vendor/bin/phpunit" }, "config": { "allow-plugins": { From 572ec07f7e35aa9fa91e28740cacd933623f686b Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Tue, 5 Mar 2024 10:10:44 +0100 Subject: [PATCH 57/88] feat: [DPMMA-2550] point groups api --- lib/Api/PointGroups.php | 41 +++++++++++++++++++++++++ tests/Api/PointGroupsTest.php | 56 +++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 lib/Api/PointGroups.php create mode 100644 tests/Api/PointGroupsTest.php diff --git a/lib/Api/PointGroups.php b/lib/Api/PointGroups.php new file mode 100644 index 00000000..72195f0c --- /dev/null +++ b/lib/Api/PointGroups.php @@ -0,0 +1,41 @@ +api = $this->getContext('pointGroups'); + $this->testPayload = [ + 'name' => 'New Point Group', + 'description' => 'Description of the new point group', + ]; + } + + public function testGetList() + { + $this->standardTestGetList(); + } + + public function testGetListOfSpecificIds() + { + $this->standardTestGetListOfSpecificIds(); + } + + public function testCreateGetAndDelete() + { + $this->standardTestCreateGetAndDelete(); + } + + public function testEditPatch() + { + $editTo = [ + 'name' => 'Updated Point Group Name', + ]; + $this->standardTestEditPatch($editTo); + } + + public function testEditPut() + { + $this->standardTestEditPut(); + } + + public function testBatchEndpoints() + { + $this->standardTestBatchEndpoints(); + } +} From dfce6409017cc2c88363733d91c175c0c757c3a4 Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Tue, 5 Mar 2024 10:44:18 +0100 Subject: [PATCH 58/88] feat: [DPMMA-2550] contact point groups score api --- lib/Api/Contacts.php | 101 +++++++++++++++++++++++++++++++++++++ tests/Api/ContactsTest.php | 101 +++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+) diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 14265ea4..12a1ecc8 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -337,6 +337,107 @@ public function subtractPoints($id, $points, array $parameters = []) return $this->makeRequest('contacts/'.$id.'/points/minus/'.$points, $parameters, 'POST'); } + /** + * Get all point group scores associated with contact. + * + * @param int $contactId + * @param int $groupId + * + * @return array|mixed + */ + public function getPointGroupScores(int $contactId) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups'); + } + + /** + * Get the contact score for a specified point group. + * + * @param int $contactId + * @param int $groupId + * + * @return array|mixed + */ + public function getPointGroupScore(int $contactId, int $groupId) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId); + } + + /** + * Increase the score of the contact point group. + * + * @param int $contactId + * @param int $groupId + * @param int $points + * @param array $parameters 'eventName' and 'actionName' + * + * @return mixed + */ + public function addPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/plus/'.$points, $parameters, 'POST'); + } + + /** + * Decrease the score of the contact point group. + * + * @param int $contactId + * @param int $groupId + * @param int $points + * @param array $parameters 'eventName' and 'actionName' + * + * @return mixed + */ + public function subtractPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/minus/'.$points, $parameters, 'POST'); + } + + /** + * Multiply the score of the contact point group. + * + * @param int $contactId + * @param int $groupId + * @param int $value + * @param array $parameters 'eventName' and 'actionName' + * + * @return mixed + */ + public function multiplyPointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/times/'.$value, $parameters, 'POST'); + } + + /** + * Divide the score of the contact point group. + * + * @param int $contactId + * @param int $groupId + * @param int $value + * @param array $parameters 'eventName' and 'actionName' + * + * @return mixed + */ + public function dividePointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/divide/'.$value, $parameters, 'POST'); + } + + /** + * Set the score of the contact point group. + * + * @param int $contactId + * @param int $groupId + * @param int $points + * @param array $parameters 'eventName' and 'actionName' + * + * @return mixed + */ + public function setPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + { + return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/set/'.$points, $parameters, 'POST'); + } + /** * Adds Do Not Contact. * diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index 91a505c6..38792a45 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -419,6 +419,107 @@ public function testSubtractPoints() $this->assertErrors($response); } + public function testAddPointGroupScore() + { + $pointsToAdd = 5; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group A']); + $pointGroup = $response[$pointGroupApi->itemName()]; + + $response = $this->api->create($this->testPayload); + $this->assertErrors($response); + $contact = $response[$this->api->itemName()]; + + $response = $this->api->addPointGroupScore($contact['id'], $pointGroup['id'], $pointsToAdd); + $this->assertErrors($response); + $this->assertTrue(!empty($response['groupScore']), 'Adding point group score to a contact with ID ='.$contact['id'].' was not successful'); + + $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); + $this->assertErrors($response); + $this->assertSame($response['groupScore']['score'], $pointsToAdd, 'Point group score was not added accurately'); + + $response = $this->api->delete($contact['id']); + $this->assertErrors($response); + } + + public function testSubtractPointGroupScore() + { + $pointsToSubtract = 3; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group B']); + $pointGroup = $response[$pointGroupApi->itemName()]; + + $response = $this->api->create($this->testPayload); + $this->assertErrors($response); + $contact = $response[$this->api->itemName()]; + + $response = $this->api->setPointGroupScore($contact['id'], $pointGroup['id'], 10); + $this->assertErrors($response); + + $response = $this->api->subtractPointGroupScore($contact['id'], $pointGroup['id'], $pointsToSubtract); + $this->assertErrors($response); + $this->assertTrue(!empty($response['groupScore']), 'Subtracting point group score from a contact with ID =' . $contact['id'] . ' was not successful'); + + $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); + $this->assertErrors($response); + $this->assertSame($response['groupScore']['score'], 10 - $pointsToSubtract, 'Point group score was not subtracted accurately'); + + $response = $this->api->delete($contact['id']); + $this->assertErrors($response); + } + + public function testMultiplyPointGroupScore() + { + $multiplier = 2; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group C']); + $pointGroup = $response[$pointGroupApi->itemName()]; + + $response = $this->api->create($this->testPayload); + $this->assertErrors($response); + $contact = $response[$this->api->itemName()]; + + $response = $this->api->setPointGroupScore($contact['id'], $pointGroup['id'], 5); + $this->assertErrors($response); + + $response = $this->api->multiplyPointGroupScore($contact['id'], $pointGroup['id'], $multiplier); + $this->assertErrors($response); + $this->assertTrue(!empty($response['groupScore']), 'Multiplying point group score for a contact with ID =' . $contact['id'] . ' was not successful'); + + $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); + $this->assertErrors($response); + $this->assertSame($response['groupScore']['score'], 5 * $multiplier, 'Point group score was not multiplied accurately'); + + $response = $this->api->delete($contact['id']); + $this->assertErrors($response); + } + + public function testDividePointGroupScore() + { + $divisor = 4; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group D']); + $pointGroup = $response[$pointGroupApi->itemName()]; + + $response = $this->api->create($this->testPayload); + $this->assertErrors($response); + $contact = $response[$this->api->itemName()]; + + $response = $this->api->setPointGroupScore($contact['id'], $pointGroup['id'], 20); + $this->assertErrors($response); + + $response = $this->api->dividePointGroupScore($contact['id'], $pointGroup['id'], $divisor); + $this->assertErrors($response); + $this->assertTrue(!empty($response['groupScore']), 'Dividing point group score for a contact with ID =' . $contact['id'] . ' was not successful'); + + $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); + $this->assertErrors($response); + $this->assertSame($response['groupScore']['score'], 20 / $divisor, 'Point group score was not divided accurately'); + + $response = $this->api->delete($contact['id']); + $this->assertErrors($response); + } + public function testBatchEndpoints() { $contact1 = $this->testPayload; From 5460af8b7574245c7612260a003fb6d16fd8b1de Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Tue, 5 Mar 2024 11:04:12 +0100 Subject: [PATCH 59/88] fix: [DPMMA-2550] csfixer for contact point group score --- lib/Api/Contacts.php | 21 +-------------------- tests/Api/ContactsTest.php | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 12a1ecc8..27afa332 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -340,8 +340,7 @@ public function subtractPoints($id, $points, array $parameters = []) /** * Get all point group scores associated with contact. * - * @param int $contactId - * @param int $groupId + * @param int $groupId * * @return array|mixed */ @@ -353,9 +352,6 @@ public function getPointGroupScores(int $contactId) /** * Get the contact score for a specified point group. * - * @param int $contactId - * @param int $groupId - * * @return array|mixed */ public function getPointGroupScore(int $contactId, int $groupId) @@ -366,9 +362,6 @@ public function getPointGroupScore(int $contactId, int $groupId) /** * Increase the score of the contact point group. * - * @param int $contactId - * @param int $groupId - * @param int $points * @param array $parameters 'eventName' and 'actionName' * * @return mixed @@ -381,9 +374,6 @@ public function addPointGroupScore(int $contactId, int $groupId, int $points, ar /** * Decrease the score of the contact point group. * - * @param int $contactId - * @param int $groupId - * @param int $points * @param array $parameters 'eventName' and 'actionName' * * @return mixed @@ -396,9 +386,6 @@ public function subtractPointGroupScore(int $contactId, int $groupId, int $point /** * Multiply the score of the contact point group. * - * @param int $contactId - * @param int $groupId - * @param int $value * @param array $parameters 'eventName' and 'actionName' * * @return mixed @@ -411,9 +398,6 @@ public function multiplyPointGroupScore(int $contactId, int $groupId, int $value /** * Divide the score of the contact point group. * - * @param int $contactId - * @param int $groupId - * @param int $value * @param array $parameters 'eventName' and 'actionName' * * @return mixed @@ -426,9 +410,6 @@ public function dividePointGroupScore(int $contactId, int $groupId, int $value, /** * Set the score of the contact point group. * - * @param int $contactId - * @param int $groupId - * @param int $points * @param array $parameters 'eventName' and 'actionName' * * @return mixed diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index 38792a45..c7c1bda8 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -421,10 +421,10 @@ public function testSubtractPoints() public function testAddPointGroupScore() { - $pointsToAdd = 5; + $pointsToAdd = 5; $pointGroupApi = $this->getContext('pointGroups'); - $response = $pointGroupApi->create(['name' => 'Group A']); - $pointGroup = $response[$pointGroupApi->itemName()]; + $response = $pointGroupApi->create(['name' => 'Group A']); + $pointGroup = $response[$pointGroupApi->itemName()]; $response = $this->api->create($this->testPayload); $this->assertErrors($response); @@ -445,9 +445,9 @@ public function testAddPointGroupScore() public function testSubtractPointGroupScore() { $pointsToSubtract = 3; - $pointGroupApi = $this->getContext('pointGroups'); - $response = $pointGroupApi->create(['name' => 'Group B']); - $pointGroup = $response[$pointGroupApi->itemName()]; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group B']); + $pointGroup = $response[$pointGroupApi->itemName()]; $response = $this->api->create($this->testPayload); $this->assertErrors($response); @@ -458,7 +458,7 @@ public function testSubtractPointGroupScore() $response = $this->api->subtractPointGroupScore($contact['id'], $pointGroup['id'], $pointsToSubtract); $this->assertErrors($response); - $this->assertTrue(!empty($response['groupScore']), 'Subtracting point group score from a contact with ID =' . $contact['id'] . ' was not successful'); + $this->assertTrue(!empty($response['groupScore']), 'Subtracting point group score from a contact with ID ='.$contact['id'].' was not successful'); $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); $this->assertErrors($response); @@ -470,10 +470,10 @@ public function testSubtractPointGroupScore() public function testMultiplyPointGroupScore() { - $multiplier = 2; + $multiplier = 2; $pointGroupApi = $this->getContext('pointGroups'); - $response = $pointGroupApi->create(['name' => 'Group C']); - $pointGroup = $response[$pointGroupApi->itemName()]; + $response = $pointGroupApi->create(['name' => 'Group C']); + $pointGroup = $response[$pointGroupApi->itemName()]; $response = $this->api->create($this->testPayload); $this->assertErrors($response); @@ -484,7 +484,7 @@ public function testMultiplyPointGroupScore() $response = $this->api->multiplyPointGroupScore($contact['id'], $pointGroup['id'], $multiplier); $this->assertErrors($response); - $this->assertTrue(!empty($response['groupScore']), 'Multiplying point group score for a contact with ID =' . $contact['id'] . ' was not successful'); + $this->assertTrue(!empty($response['groupScore']), 'Multiplying point group score for a contact with ID ='.$contact['id'].' was not successful'); $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); $this->assertErrors($response); @@ -496,10 +496,10 @@ public function testMultiplyPointGroupScore() public function testDividePointGroupScore() { - $divisor = 4; + $divisor = 4; $pointGroupApi = $this->getContext('pointGroups'); - $response = $pointGroupApi->create(['name' => 'Group D']); - $pointGroup = $response[$pointGroupApi->itemName()]; + $response = $pointGroupApi->create(['name' => 'Group D']); + $pointGroup = $response[$pointGroupApi->itemName()]; $response = $this->api->create($this->testPayload); $this->assertErrors($response); @@ -510,7 +510,7 @@ public function testDividePointGroupScore() $response = $this->api->dividePointGroupScore($contact['id'], $pointGroup['id'], $divisor); $this->assertErrors($response); - $this->assertTrue(!empty($response['groupScore']), 'Dividing point group score for a contact with ID =' . $contact['id'] . ' was not successful'); + $this->assertTrue(!empty($response['groupScore']), 'Dividing point group score for a contact with ID ='.$contact['id'].' was not successful'); $response = $this->api->getPointGroupScore($contact['id'], $pointGroup['id']); $this->assertErrors($response); From 08f7382494e5bfb3badedd6680156321d96752de Mon Sep 17 00:00:00 2001 From: John Linhart Date: Fri, 26 Apr 2024 14:52:08 +0200 Subject: [PATCH 60/88] An empty DEC filter shouldn't have any value. It will be null-ed in the response --- tests/Api/EmailsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/EmailsTest.php b/tests/Api/EmailsTest.php index fada4f70..27089c9d 100644 --- a/tests/Api/EmailsTest.php +++ b/tests/Api/EmailsTest.php @@ -48,7 +48,7 @@ public function setUp(): void 'field' => 'email', 'object' => 'lead', 'type' => 'email', - 'filter' => 'Prague', + 'filter' => null, 'display' => null, 'operator' => '!empty', ], From 574d1cbafbeb596bb4e6757d68225e6375dff260 Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Mon, 29 Apr 2024 14:13:24 +0200 Subject: [PATCH 61/88] fix: [DPMMA-2550] extra test and type definitions --- lib/Api/Contacts.php | 30 ++++++----------------- tests/Api/ContactsTest.php | 45 +++++++++++++++++++++++++++++++---- tests/Api/PointGroupsTest.php | 22 +++++++---------- 3 files changed, 56 insertions(+), 41 deletions(-) diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 27afa332..e222255a 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -339,22 +339,16 @@ public function subtractPoints($id, $points, array $parameters = []) /** * Get all point group scores associated with contact. - * - * @param int $groupId - * - * @return array|mixed */ - public function getPointGroupScores(int $contactId) + public function getPointGroupScores(int $contactId): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups'); } /** * Get the contact score for a specified point group. - * - * @return array|mixed */ - public function getPointGroupScore(int $contactId, int $groupId) + public function getPointGroupScore(int $contactId, int $groupId): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId); } @@ -363,10 +357,8 @@ public function getPointGroupScore(int $contactId, int $groupId) * Increase the score of the contact point group. * * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ - public function addPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + public function addPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/plus/'.$points, $parameters, 'POST'); } @@ -375,10 +367,8 @@ public function addPointGroupScore(int $contactId, int $groupId, int $points, ar * Decrease the score of the contact point group. * * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ - public function subtractPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + public function subtractPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/minus/'.$points, $parameters, 'POST'); } @@ -387,10 +377,8 @@ public function subtractPointGroupScore(int $contactId, int $groupId, int $point * Multiply the score of the contact point group. * * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ - public function multiplyPointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []) + public function multiplyPointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/times/'.$value, $parameters, 'POST'); } @@ -399,10 +387,8 @@ public function multiplyPointGroupScore(int $contactId, int $groupId, int $value * Divide the score of the contact point group. * * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ - public function dividePointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []) + public function dividePointGroupScore(int $contactId, int $groupId, int $value, array $parameters = []): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/divide/'.$value, $parameters, 'POST'); } @@ -411,10 +397,8 @@ public function dividePointGroupScore(int $contactId, int $groupId, int $value, * Set the score of the contact point group. * * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ - public function setPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []) + public function setPointGroupScore(int $contactId, int $groupId, int $points, array $parameters = []): array { return $this->makeRequest('contacts/'.$contactId.'/points/groups/'.$groupId.'/set/'.$points, $parameters, 'POST'); } diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index c7c1bda8..f4d03d19 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -419,7 +419,44 @@ public function testSubtractPoints() $this->assertErrors($response); } - public function testAddPointGroupScore() + public function testGetPointGroupScores(): void + { + $response = $this->api->create($this->testPayload); + $this->assertErrors($response); + $contact = $response[$this->api->itemName()]; + + // test empty group points list + $response = $this->api->getPointGroupScores($contact['id']); + $this->assertErrors($response); + $this->assertSame(0, $response['total']); + $this->assertIsArray($response['groupScores']); + $this->assertEmpty(0, $response['groupScores']); + + // add score + $pointsToAdd = 5; + $pointGroupApi = $this->getContext('pointGroups'); + $response = $pointGroupApi->create(['name' => 'Group A']); + $pointGroup = $response[$pointGroupApi->itemName()]; + $response = $this->api->addPointGroupScore($contact['id'], $pointGroup['id'], $pointsToAdd); + $this->assertErrors($response); + $this->assertNotEmpty($response['groupScore'], 'Adding point group score to a contact with ID =' . $contact['id'] . ' was not successful'); + + // test get point group scores list + $response = $this->api->getPointGroupScores($contact['id']); + $this->assertErrors($response); + $this->assertSame(1, $response['total']); + $this->assertIsArray($response['groupScores']); + $this->assertCount(1, $response['groupScores']); + $this->assertSame(5, $response['groupScores'][0]['score']); + $this->assertSame($pointGroup['id'], $response['groupScores'][0]['group']['id']); + $this->assertSame($pointGroup['name'], $response['groupScores'][0]['group']['name']); + $this->assertSame($pointGroup['description'], $response['groupScores'][0]['group']['description']); + + $response = $this->api->delete($contact['id']); + $this->assertErrors($response); + } + + public function testAddPointGroupScore(): void { $pointsToAdd = 5; $pointGroupApi = $this->getContext('pointGroups'); @@ -442,7 +479,7 @@ public function testAddPointGroupScore() $this->assertErrors($response); } - public function testSubtractPointGroupScore() + public function testSubtractPointGroupScore(): void { $pointsToSubtract = 3; $pointGroupApi = $this->getContext('pointGroups'); @@ -468,7 +505,7 @@ public function testSubtractPointGroupScore() $this->assertErrors($response); } - public function testMultiplyPointGroupScore() + public function testMultiplyPointGroupScore(): void { $multiplier = 2; $pointGroupApi = $this->getContext('pointGroups'); @@ -494,7 +531,7 @@ public function testMultiplyPointGroupScore() $this->assertErrors($response); } - public function testDividePointGroupScore() + public function testDividePointGroupScore(): void { $divisor = 4; $pointGroupApi = $this->getContext('pointGroups'); diff --git a/tests/Api/PointGroupsTest.php b/tests/Api/PointGroupsTest.php index 4ed480e5..50541c5b 100644 --- a/tests/Api/PointGroupsTest.php +++ b/tests/Api/PointGroupsTest.php @@ -1,12 +1,6 @@ standardTestGetList(); } - public function testGetListOfSpecificIds() + public function testGetListOfSpecificIds(): void { $this->standardTestGetListOfSpecificIds(); } - public function testCreateGetAndDelete() + public function testCreateGetAndDelete(): void { $this->standardTestCreateGetAndDelete(); } - public function testEditPatch() + public function testEditPatch(): void { $editTo = [ 'name' => 'Updated Point Group Name', @@ -44,12 +38,12 @@ public function testEditPatch() $this->standardTestEditPatch($editTo); } - public function testEditPut() + public function testEditPut(): void { $this->standardTestEditPut(); } - public function testBatchEndpoints() + public function testBatchEndpoints(): void { $this->standardTestBatchEndpoints(); } From d26c02d26e2e2e73bc3aa77d80405ce13562e570 Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Mon, 29 Apr 2024 14:28:59 +0200 Subject: [PATCH 62/88] fix: [DPMMA-2550] csfixer and fixed test --- tests/Api/ContactsTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index f4d03d19..d0d55377 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -430,7 +430,7 @@ public function testGetPointGroupScores(): void $this->assertErrors($response); $this->assertSame(0, $response['total']); $this->assertIsArray($response['groupScores']); - $this->assertEmpty(0, $response['groupScores']); + $this->assertEmpty($response['groupScores']); // add score $pointsToAdd = 5; @@ -439,7 +439,7 @@ public function testGetPointGroupScores(): void $pointGroup = $response[$pointGroupApi->itemName()]; $response = $this->api->addPointGroupScore($contact['id'], $pointGroup['id'], $pointsToAdd); $this->assertErrors($response); - $this->assertNotEmpty($response['groupScore'], 'Adding point group score to a contact with ID =' . $contact['id'] . ' was not successful'); + $this->assertNotEmpty($response['groupScore'], 'Adding point group score to a contact with ID ='.$contact['id'].' was not successful'); // test get point group scores list $response = $this->api->getPointGroupScores($contact['id']); From 9b0639ecd5ef534bd662b1a622ef7ca067bafa04 Mon Sep 17 00:00:00 2001 From: Patryk Gruszka Date: Mon, 29 Apr 2024 14:37:40 +0200 Subject: [PATCH 63/88] fix: [DPMMA-2550] fixed test --- tests/Api/ContactsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Api/ContactsTest.php b/tests/Api/ContactsTest.php index d0d55377..062f83a5 100644 --- a/tests/Api/ContactsTest.php +++ b/tests/Api/ContactsTest.php @@ -450,7 +450,6 @@ public function testGetPointGroupScores(): void $this->assertSame(5, $response['groupScores'][0]['score']); $this->assertSame($pointGroup['id'], $response['groupScores'][0]['group']['id']); $this->assertSame($pointGroup['name'], $response['groupScores'][0]['group']['name']); - $this->assertSame($pointGroup['description'], $response['groupScores'][0]['group']['description']); $response = $this->api->delete($contact['id']); $this->assertErrors($response); From cf5c2053bd158935378be5f92f1987881d1fe598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Thu, 18 Jul 2024 17:33:48 +0300 Subject: [PATCH 64/88] setup phpstan and add to tests workflow --- .github/workflows/tests.yml | 7 +++++-- composer.json | 6 ++++-- phpstan.neon | 5 +++++ 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 phpstan.neon diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 62296b65..6ec3ff3b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -149,9 +149,9 @@ jobs: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} SLACK_MESSAGE: 'The daily API library tests against mautic/mautic have failed. Most likely a PR was merged recently which introduced a regression of some sort.' - cs: + tests: runs-on: ubuntu-20.04 - name: CS tests + name: CS & PHPSTAN tests steps: - uses: actions/checkout@v3 @@ -169,3 +169,6 @@ jobs: - name: Run CS tests run: vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --using-cache=no --show-progress=dots --diff $(git diff -- '*.php' --name-only --diff-filter=ACMRTUXB "HEAD~..HEAD") + + - name: Run PHPSTAN tests + run: composer phpstan \ No newline at end of file diff --git a/composer.json b/composer.json index 26aabceb..ba85d5a8 100644 --- a/composer.json +++ b/composer.json @@ -26,13 +26,15 @@ "kint-php/kint": "^4.1", "friendsofphp/php-cs-fixer": "~3.12.0", "phpunit/phpunit": "~9.5.0", - "guzzlehttp/guzzle": "^7.5" + "guzzlehttp/guzzle": "^7.5", + "phpstan/phpstan": "^1.11" }, "suggest": { "guzzlehttp/guzzle": "A popular HTTP client that implements psr/http-client-implementation." }, "scripts": { - "test": "vendor/bin/phpunit" + "test": "vendor/bin/phpunit", + "phpstan": "vendor/bin/phpstan analyse" }, "config": { "allow-plugins": { diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 00000000..6c4b2eb1 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +parameters: + level: 1 + paths: + - lib + - tests \ No newline at end of file From 1c0c2ca8704c6dc33062a901750ed3fe407443e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Thu, 18 Jul 2024 17:35:08 +0300 Subject: [PATCH 65/88] fix errors based on phpstan analysis --- lib/MauticApi.php | 2 +- tests/Api/AssetsTest.php | 6 +++--- tests/Api/CampaignsTest.php | 2 +- tests/Api/FormsTest.php | 5 +++++ tests/Api/UtmTagsTest.php | 8 ++++++-- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/MauticApi.php b/lib/MauticApi.php index 15c44ba8..b7bd04c9 100644 --- a/lib/MauticApi.php +++ b/lib/MauticApi.php @@ -37,7 +37,7 @@ public static function getContext($apiContext, AuthInterface $auth, $baseUrl = ' $apiContext = ucfirst($apiContext); - if (!isset($context[$apiContext])) { + if (!isset($contexts[$apiContext])) { $class = 'Mautic\\Api\\'.$apiContext; if (!class_exists($class)) { diff --git a/tests/Api/AssetsTest.php b/tests/Api/AssetsTest.php index 5fb00418..1b425ab6 100644 --- a/tests/Api/AssetsTest.php +++ b/tests/Api/AssetsTest.php @@ -43,12 +43,12 @@ public function testGetListOfSpecificIds() public function testCreateWithLocalFileGetAndDelete() { // Upload a testing file - $this->apiFiles = $this->getContext('files'); - $this->apiFiles->setFolder($this->mediaFolder); + $apiFiles = $this->getContext('files'); + $apiFiles->setFolder('assets'); $fileRequest = [ 'file' => dirname(__DIR__).'/mauticlogo.png', ]; - $response = $this->apiFiles->create($fileRequest); + $response = $apiFiles->create($fileRequest); $this->assertErrors($response); $file = $response['file']; diff --git a/tests/Api/CampaignsTest.php b/tests/Api/CampaignsTest.php index 42d68ed2..79729ac0 100644 --- a/tests/Api/CampaignsTest.php +++ b/tests/Api/CampaignsTest.php @@ -471,7 +471,7 @@ public function testCampaignContactEditEvent() $date = new \DateTime($log['triggerDate'], new \DateTimeZone('UTC')); $this->assertEquals($log['triggerDate'], $date->format('c')); } else { - $this->assertFalse(false, 'Event ID not recognized in the log.', var_export($event, true)); + $this->fail('Event ID not recognized in the log.'.var_export($event, true)); } } diff --git a/tests/Api/FormsTest.php b/tests/Api/FormsTest.php index ec986365..814b87a2 100644 --- a/tests/Api/FormsTest.php +++ b/tests/Api/FormsTest.php @@ -218,10 +218,15 @@ public function testFormSubmissions() $response = $this->api->getSubmissions($formId); $this->assertErrors($response); + $submissions = $response['submissions']; + $this->assertTrue(count($submissions) > 0, 'Expected at least one form submission'); + foreach ($response['submissions'] as $submission) { $this->assertSubmission($submission, $formId); } + $submission = end($submissions); + // Try to fetch the last submission $response = $this->api->getSubmission($formId, $submission['id']); $this->assertErrors($response); diff --git a/tests/Api/UtmTagsTest.php b/tests/Api/UtmTagsTest.php index eadffe41..8eca4be8 100644 --- a/tests/Api/UtmTagsTest.php +++ b/tests/Api/UtmTagsTest.php @@ -99,7 +99,7 @@ public function testAddCheckActiveDateAndDelete() $utmIds = $this->addUtmTags(); // check the date; Should be empty - $this->assertTrue(empty($response[$this->api->itemName()]['lastActive'])); + $this->assertTrue(empty($utmIds[$this->api->itemName()]['lastActive'])); // Now add the payload with a known date $this->testPayload['lastActive'] = '2017-01-17T00:30:08+00:00'; @@ -150,7 +150,11 @@ protected function removeUtmTags($utmIds) } } - $this->assertSame(0, count($response[$this->api->itemName()]['utmtags']), 'Should be no more items'); + if (!empty($response)) { + $this->assertSame(0, count($response[$this->api->itemName()]['utmtags']), 'Should be no more items'); + } else { + $this->fail('Expected a response object'); + } } protected function addUtmTags() From c00a6ea9d54ef57422680d19a07bc6da68d1ea4d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:09:23 +0000 Subject: [PATCH 66/88] docs: update README.md [skip ci] --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03df5db8..6eabaa1b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![codecov](https://codecov.io/gh/mautic/api-library/branch/master/graph/badge.svg)](https://codecov.io/gh/mautic/api-library) [![Latest Stable Version](https://poser.pugx.org/mautic/api-library/v)](//packagist.org/packages/mautic/api-library) [![Total Downloads](https://poser.pugx.org/mautic/api-library/downloads)](//packagist.org/packages/mautic/api-library) [![Latest Unstable Version](https://poser.pugx.org/mautic/api-library/v/unstable)](//packagist.org/packages/mautic/api-library) [![License](https://poser.pugx.org/mautic/api-library/license)](//packagist.org/packages/mautic/api-library) -[![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-) # Using the Mautic API Library @@ -302,6 +302,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Marinus van Velzen
Marinus van Velzen

💻 Pierre Ammeloot
Pierre Ammeloot

📓 + + Martin Vooremäe
Martin Vooremäe

💻 ⚠️ + From ce08a7a54a754205116c3d38ce2fd116ae23d94e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:09:24 +0000 Subject: [PATCH 67/88] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 62240e2b..174060f4 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -67,6 +67,16 @@ "contributions": [ "userTesting" ] + }, + { + "login": "matbcvo", + "name": "Martin Vooremäe", + "avatar_url": "https://avatars.githubusercontent.com/u/1006437?v=4", + "profile": "https://matbcvo.github.io", + "contributions": [ + "code", + "test" + ] } ], "contributorsPerLine": 7, @@ -75,5 +85,6 @@ "repoType": "github", "repoHost": "https://github.com", "skipCi": true, - "commitConvention": "angular" + "commitConvention": "angular", + "commitType": "docs" } From d945dee8135920cad5b0d2f948272a684fc812a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Thu, 18 Jul 2024 18:32:40 +0300 Subject: [PATCH 68/88] use mediaFolder variable for setFolder --- tests/Api/AssetsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Api/AssetsTest.php b/tests/Api/AssetsTest.php index 1b425ab6..112e0044 100644 --- a/tests/Api/AssetsTest.php +++ b/tests/Api/AssetsTest.php @@ -44,7 +44,7 @@ public function testCreateWithLocalFileGetAndDelete() { // Upload a testing file $apiFiles = $this->getContext('files'); - $apiFiles->setFolder('assets'); + $apiFiles->setFolder($this->mediaFolder); $fileRequest = [ 'file' => dirname(__DIR__).'/mauticlogo.png', ]; From a448f0cadb22d88b1f5255b2818d9afae56d7a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Thu, 18 Jul 2024 21:06:05 +0300 Subject: [PATCH 69/88] use LoggerAwareTrait from Psr/Log --- lib/Api/Api.php | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 2d19b751..079250a0 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -14,6 +14,7 @@ use Mautic\Auth\AuthInterface; use Mautic\QueryBuilder\QueryBuilder; use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerAwareTrait; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; @@ -22,6 +23,8 @@ */ class Api implements LoggerAwareInterface { + use LoggerAwareTrait; + /** * Used by unit testing to force use of BC endpoints. * @@ -90,11 +93,6 @@ class Api implements LoggerAwareInterface */ private $auth; - /** - * @var LoggerInterface - */ - private $logger; - /** * @param string $baseUrl */ @@ -119,14 +117,6 @@ public function getLogger() return $this->logger; } - /** - * Sets a logger. - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - /** * Get the array of available search commands. * From c219a403d92c7e2e450d400d3ee7384253d42496 Mon Sep 17 00:00:00 2001 From: John Linhart Date: Fri, 30 Aug 2024 12:23:05 +0200 Subject: [PATCH 70/88] Run tests on PHP 8.1 as Mautci 5.2 dropps support for 8.0 --- .github/workflows/tests.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6ec3ff3b..4b64585c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -49,7 +49,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.0 + php-version: 8.1 ini-values: session.save_handler=redis, session.save_path="tcp://127.0.0.1:6379" extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql coverage: pcov @@ -63,13 +63,13 @@ jobs: run: | sudo add-apt-repository ppa:ondrej/php -y sudo apt-get update - sudo apt-get install apache2 libapache2-mod-php8.0 + sudo apt-get install apache2 libapache2-mod-php8.1 sudo a2enmod rewrite - sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.0/apache2/php.ini - sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.0/apache2/php.ini - sudo sed -i 's,^memory_limit =.*$,memory_limit = 256M,' /etc/php/8.0/apache2/php.ini + sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.1/apache2/php.ini + sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.1/apache2/php.ini + sudo sed -i 's,^memory_limit =.*$,memory_limit = 256M,' /etc/php/8.1/apache2/php.ini sudo service apache2 restart - cat /etc/php/8.0/apache2/php.ini | grep session + cat /etc/php/8.1/apache2/php.ini | grep session - name: Install dependencies run: | From 9506c099f58d6417b11e61635e99b7eddd3cd68d Mon Sep 17 00:00:00 2001 From: John Linhart Date: Wed, 18 Sep 2024 15:23:05 +0200 Subject: [PATCH 71/88] Tests are failing with `This request has been automatically failed because it uses a deprecated version of `actions/upload-artifact: v2` --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4b64585c..d8d76de5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -136,7 +136,7 @@ jobs: run: bash <(curl -s https://codecov.io/bash) - name: Upload logs as artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 if: always() with: name: mautic-logs From 57165fc164775863df8403c35027e94e589d28d7 Mon Sep 17 00:00:00 2001 From: Ruth Cheesley Date: Sat, 26 Oct 2024 16:51:57 +0100 Subject: [PATCH 72/88] Create funding-manifest-urls --- .well-known/funding-manifest-urls | 1 + 1 file changed, 1 insertion(+) create mode 100644 .well-known/funding-manifest-urls diff --git a/.well-known/funding-manifest-urls b/.well-known/funding-manifest-urls new file mode 100644 index 00000000..1f60e471 --- /dev/null +++ b/.well-known/funding-manifest-urls @@ -0,0 +1 @@ +https://github.com/mautic/mautic/blob/5.x/funding.json From 92628c4c40c9dfe98e3f632ab4de8ab58bbe3689 Mon Sep 17 00:00:00 2001 From: Artem Lopata Date: Wed, 30 Oct 2024 01:28:48 +0100 Subject: [PATCH 73/88] If authentications fails - mark it as such. --- tests/Api/Auth/AbstractAuthTest.php | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tests/Api/Auth/AbstractAuthTest.php b/tests/Api/Auth/AbstractAuthTest.php index 48c19e80..f36b9c22 100644 --- a/tests/Api/Auth/AbstractAuthTest.php +++ b/tests/Api/Auth/AbstractAuthTest.php @@ -42,13 +42,21 @@ public function testJsonResponse() { $auth = $this->getMockForAbstractClass(AbstractAuth::class, [new Client()]); try { - $response = $auth->makeRequest($this->config['apiUrl'].'contacts'); - $this->assertTrue(is_array($response)); - $this->assertFalse(empty($response)); + $auth->makeRequest($this->config['apiUrl'].'contacts'); + self::fail('This should not happen, as the API does not have the authentication.'); } catch (UnexpectedResponseFormatException $exception) { - $response = json_decode($exception->getResponse()->getBody(), true); - $this->assertTrue(is_array($response)); - $this->assertFalse(empty($response)); + $body = $exception->getResponse()->getBody(); + try { + $response = json_decode($body, true, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + if ('' === $body) { + $body = '(empty string)'; + } + + self::fail('Mautic returned wrong json response: '.$body.'. JSON exception: '.$e->getMessage()); + } + $this->assertIsArray($response, $body); + $this->assertGreaterThan(0, count($response)); } } } From cff8d0c5b8ad08a9d24176f838c0a3ae7c6d5d03 Mon Sep 17 00:00:00 2001 From: Artem Lopata Date: Fri, 6 Dec 2024 08:41:29 +0100 Subject: [PATCH 74/88] Authentication requires stronger password. --- .github/ci-files/local.config.php | 2 +- .github/ci-files/local_5.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ci-files/local.config.php b/.github/ci-files/local.config.php index 95be23aa..a61f0b97 100644 --- a/.github/ci-files/local.config.php +++ b/.github/ci-files/local.config.php @@ -34,7 +34,7 @@ | */ 'userName' => 'admin', - 'password' => 'mautic', + 'password' => 'Maut1cR0cks!', /* |-------------------------------------------------------------------------- diff --git a/.github/ci-files/local_5.php b/.github/ci-files/local_5.php index efbddc6b..5c5371e5 100644 --- a/.github/ci-files/local_5.php +++ b/.github/ci-files/local_5.php @@ -13,7 +13,7 @@ 'db_user' => 'root', 'db_password' => '', 'admin_email' => 'github-actions@mautic.org', - 'admin_password' => 'mautic', + 'admin_password' => 'Maut1cR0cks!', 'mailer_from_name' => 'GitHub Actions', 'mailer_from_email' => 'github-actions@mautic.org', 'mailer_transport' => 'smtp', From 6ef9746ab919d186d796d3ea6de1107b69a0ad7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Tue, 18 Feb 2025 10:53:58 +0200 Subject: [PATCH 75/88] update tests.yml --- .github/workflows/tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d8d76de5..e986e334 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ on: jobs: phpunit: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 name: PHPUnit tests services: @@ -150,7 +150,7 @@ jobs: SLACK_MESSAGE: 'The daily API library tests against mautic/mautic have failed. Most likely a PR was merged recently which introduced a regression of some sort.' tests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 name: CS & PHPSTAN tests steps: @@ -159,7 +159,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.0 + php-version: 8.1 extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql - name: Install dependencies From 0e38f5ad9174509c752dcb5ed4a20ca1723ea345 Mon Sep 17 00:00:00 2001 From: John Linhart Date: Thu, 27 Mar 2025 11:22:28 +0100 Subject: [PATCH 76/88] Bumping PHP from 8.1 to 8.3 in the CI --- .github/workflows/tests.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e986e334..bf6a5f23 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -49,7 +49,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.3 ini-values: session.save_handler=redis, session.save_path="tcp://127.0.0.1:6379" extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql coverage: pcov @@ -63,13 +63,13 @@ jobs: run: | sudo add-apt-repository ppa:ondrej/php -y sudo apt-get update - sudo apt-get install apache2 libapache2-mod-php8.1 + sudo apt-get install apache2 libapache2-mod-php8.3 sudo a2enmod rewrite - sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.1/apache2/php.ini - sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.1/apache2/php.ini - sudo sed -i 's,^memory_limit =.*$,memory_limit = 256M,' /etc/php/8.1/apache2/php.ini + sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.3/apache2/php.ini + sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.3/apache2/php.ini + sudo sed -i 's,^memory_limit =.*$,memory_limit = 256M,' /etc/php/8.3/apache2/php.ini sudo service apache2 restart - cat /etc/php/8.1/apache2/php.ini | grep session + cat /etc/php/8.3/apache2/php.ini | grep session - name: Install dependencies run: | @@ -159,7 +159,7 @@ jobs: - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.3 extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql - name: Install dependencies From acbfa0a24f896543a6d5da05180958e1011db19d Mon Sep 17 00:00:00 2001 From: John Linhart Date: Thu, 27 Mar 2025 11:31:05 +0100 Subject: [PATCH 77/88] Updating PHP CS Fixer as it doesn't work on PHP 8.2+ --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index ba85d5a8..783515b5 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ }, "require-dev": { "kint-php/kint": "^4.1", - "friendsofphp/php-cs-fixer": "~3.12.0", + "friendsofphp/php-cs-fixer": "^3.73", "phpunit/phpunit": "~9.5.0", "guzzlehttp/guzzle": "^7.5", "phpstan/phpstan": "^1.11" From e73ec1fe25cbfd946fb63799ad4b1dd78aac23d1 Mon Sep 17 00:00:00 2001 From: John Linhart Date: Thu, 27 Mar 2025 11:31:45 +0100 Subject: [PATCH 78/88] Running `vendor/bin/php-cs-fixer fix` after the CS fixer update --- lib/Api/Api.php | 29 ++++---- lib/Api/Assets.php | 13 +--- lib/Api/CampaignEvents.php | 10 +-- lib/Api/Campaigns.php | 13 +--- lib/Api/Categories.php | 13 +--- lib/Api/Companies.php | 13 +--- lib/Api/CompanyFields.php | 10 +-- lib/Api/ContactFields.php | 10 +-- lib/Api/Contacts.php | 69 ++++++------------- lib/Api/Data.php | 22 +----- lib/Api/Devices.php | 10 +-- lib/Api/DynamicContents.php | 13 +--- lib/Api/Emails.php | 13 +--- lib/Api/Files.php | 22 +----- lib/Api/Focus.php | 13 +--- lib/Api/Forms.php | 13 +--- lib/Api/Messages.php | 10 +-- lib/Api/Notes.php | 13 +--- lib/Api/Notifications.php | 13 +--- lib/Api/Pages.php | 13 +--- lib/Api/PointGroups.php | 13 +--- lib/Api/PointTriggers.php | 13 +--- lib/Api/Points.php | 13 +--- lib/Api/Reports.php | 15 +--- lib/Api/Roles.php | 13 +--- lib/Api/Segments.php | 10 +-- lib/Api/Smses.php | 13 +--- lib/Api/Stages.php | 13 +--- lib/Api/Stats.php | 22 +----- lib/Api/Tags.php | 10 +-- lib/Api/Themes.php | 24 +------ lib/Api/Tweets.php | 13 +--- lib/Api/Users.php | 13 +--- lib/Api/Webhooks.php | 13 +--- lib/Auth/AbstractAuth.php | 6 +- lib/Auth/ApiAuth.php | 2 +- lib/Auth/BasicAuth.php | 3 - lib/Auth/OAuth.php | 5 +- lib/Exception/AbstractApiException.php | 6 +- lib/Exception/ActionNotSupportedException.php | 1 + .../AuthorizationRequiredException.php | 4 +- lib/Exception/ContextNotFoundException.php | 1 + .../IncorrectParametersReturnedException.php | 1 + .../RequiredParameterMissingException.php | 1 + .../UnexpectedResponseFormatException.php | 6 +- lib/MauticApi.php | 1 + lib/QueryBuilder/QueryBuilder.php | 5 +- lib/QueryBuilder/WhereBuilder.php | 14 +--- lib/Response.php | 3 +- tests/Api/AssetsTest.php | 1 + tests/Api/Auth/AbstractAuthTest.php | 1 + tests/Api/Auth/BasicAuthTest.php | 1 + tests/Api/CampaignsTest.php | 1 + tests/Api/CategoriesTest.php | 1 + tests/Api/CompaniesTest.php | 1 + tests/Api/CompanyFieldTest.php | 1 + tests/Api/ContactFieldsTest.php | 1 + tests/Api/ContactsTest.php | 1 + tests/Api/DataTest.php | 13 ++-- tests/Api/DevicesTest.php | 1 + tests/Api/DynamicContentsTest.php | 1 + tests/Api/EmailsTest.php | 1 + tests/Api/ExceptionsTest.php | 1 + tests/Api/FilesTest.php | 1 + tests/Api/FocusTest.php | 19 ++--- tests/Api/FormsTest.php | 1 + tests/Api/MauticApiTestCase.php | 11 +-- tests/Api/MessagesTest.php | 1 + tests/Api/NotesTest.php | 1 + tests/Api/NotificationsTest.php | 1 + tests/Api/PagesTest.php | 1 + tests/Api/PointTriggersTest.php | 1 + tests/Api/PointsTest.php | 1 + tests/Api/ReportsTest.php | 1 + tests/Api/ResponseInfoTest.php | 1 + tests/Api/RolesTest.php | 1 + tests/Api/SegmentsTest.php | 1 + tests/Api/SmsesTest.php | 1 + tests/Api/StagesTest.php | 1 + tests/Api/StatsTest.php | 1 + tests/Api/TagsTest.php | 1 + tests/Api/ThemesTest.php | 1 + tests/Api/TweetsTest.php | 1 + tests/Api/UsersTest.php | 1 + tests/Api/UtmTagsTest.php | 1 + tests/Api/WebhooksTest.php | 1 + tests/ResponseTest.php | 1 + 87 files changed, 146 insertions(+), 524 deletions(-) diff --git a/lib/Api/Api.php b/lib/Api/Api.php index 079250a0..ed351c51 100644 --- a/lib/Api/Api.php +++ b/lib/Api/Api.php @@ -1,4 +1,5 @@ 500, - 'message' => sprintf( - 'URL is incomplete. Please use %s, set the base URL as the third argument to $MauticApi->newApi(), or make $endpoint a complete URL.', - __CLASS__.'setBaseUrl()' - ), - ]; + 'code' => 500, + 'message' => sprintf( + 'URL is incomplete. Please use %s, set the base URL as the third argument to $MauticApi->newApi(), or make $endpoint a complete URL.', + __CLASS__.'setBaseUrl()' + ), + ]; } else { try { $settings = []; @@ -251,24 +252,24 @@ public function makeRequest($endpoint, array $parameters = [], $method = 'GET') // assume an error $error = [ - 'code' => 500, - 'message' => $response, - ]; + 'code' => 500, + 'message' => $response, + ]; } } catch (\Exception $e) { $this->getLogger()->error('Failed connecting to Mautic API: '.$e->getMessage(), ['trace' => $e->getTraceAsString()]); $error = [ - 'code' => $e->getCode(), - 'message' => $e->getMessage(), - ]; + 'code' => $e->getCode(), + 'message' => $e->getMessage(), + ]; } } if (!empty($error)) { return [ - 'errors' => [$error], - ]; + 'errors' => [$error], + ]; } elseif (!empty($response['errors'])) { $this->getLogger()->error('Mautic API returned errors: '.var_export($response['errors'], true)); } diff --git a/lib/Api/Assets.php b/lib/Api/Assets.php index 3a7e5285..baffe5d9 100644 --- a/lib/Api/Assets.php +++ b/lib/Api/Assets.php @@ -1,4 +1,5 @@ 'campaigns/$1/contact/remove/$2', // 2.6.0 ]; - /** - * {@inheritdoc} - */ protected $searchCommands = [ 'ids', 'is:published', diff --git a/lib/Api/Categories.php b/lib/Api/Categories.php index bcf9cebc..5660a698 100644 --- a/lib/Api/Categories.php +++ b/lib/Api/Categories.php @@ -1,4 +1,5 @@ 'companies/$1/contact/remove/$2', // 2.6.0 ]; - /** - * {@inheritdoc} - */ protected $searchCommands = [ 'ids', 'is:mine', diff --git a/lib/Api/CompanyFields.php b/lib/Api/CompanyFields.php index 9fcd39ce..2c479905 100644 --- a/lib/Api/CompanyFields.php +++ b/lib/Api/CompanyFields.php @@ -1,4 +1,5 @@ 'contacts/$1/dnc/remove/$2', // 2.6.0 ]; - /** - * {@inheritdoc} - */ protected $searchCommands = [ 'ids', 'is:anonymous', @@ -121,13 +110,11 @@ public function getSegments() /** * Get a list of contact activity events for all contacts. * - * @param int $id Contact ID - * @param string $search - * @param string $orderBy - * @param string $orderByDir - * @param int $page - * @param \DateTime $dateFrom - * @param \DateTime $dateTo + * @param int $id Contact ID + * @param string $search + * @param string $orderBy + * @param string $orderByDir + * @param int $page * * @return array|mixed */ @@ -139,8 +126,8 @@ public function getActivityForContact( $orderBy = '', $orderByDir = 'ASC', $page = 1, - \DateTime $dateFrom = null, - \DateTime $dateTo = null + ?\DateTime $dateFrom = null, + ?\DateTime $dateTo = null, ) { return $this->fetchActivity('/'.$id.'/activity', $search, $includeEvents, $excludeEvents, $orderBy, $orderByDir, $page, $dateFrom, $dateTo); } @@ -149,12 +136,10 @@ public function getActivityForContact( * Get a list of contact engagement events. * Not related to a specific contact ID. * - * @param string $search - * @param string $orderBy - * @param string $orderByDir - * @param int $page - * @param \DateTime $dateFrom - * @param \DateTime $dateTo + * @param string $search + * @param string $orderBy + * @param string $orderByDir + * @param int $page * * @return array|mixed */ @@ -165,8 +150,8 @@ public function getActivity( $orderBy = '', $orderByDir = 'ASC', $page = 1, - \DateTime $dateFrom = null, - \DateTime $dateTo = null + ?\DateTime $dateFrom = null, + ?\DateTime $dateTo = null, ) { return $this->fetchActivity('/activity', $search, $includeEvents, $excludeEvents, $orderBy, $orderByDir, $page, $dateFrom, $dateTo); } @@ -174,13 +159,11 @@ public function getActivity( /** * Get a list of contact activity events for all contacts. * - * @param string $path of the URL after the endpoint - * @param string $search - * @param string $orderBy - * @param string $orderByDir - * @param int $page - * @param \DateTime $dateFrom - * @param \DateTime $dateTo + * @param string $path of the URL after the endpoint + * @param string $search + * @param string $orderBy + * @param string $orderByDir + * @param int $page * * @return array|mixed */ @@ -192,8 +175,8 @@ protected function fetchActivity( $orderBy = '', $orderByDir = 'ASC', $page = 1, - \DateTime $dateFrom = null, - \DateTime $dateTo = null + ?\DateTime $dateFrom = null, + ?\DateTime $dateTo = null, ) { $parameters = [ 'filters' => [ @@ -315,8 +298,6 @@ public function getContactCampaigns($id) * @param int $id * @param int $points * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ public function addPoints($id, $points, array $parameters = []) { @@ -329,8 +310,6 @@ public function addPoints($id, $points, array $parameters = []) * @param int $id * @param int $points * @param array $parameters 'eventName' and 'actionName' - * - * @return mixed */ public function subtractPoints($id, $points, array $parameters = []) { @@ -432,8 +411,6 @@ public function addDnc($id, $channel = 'email', $reason = Contacts::MANUAL, $cha * * @param int $id * @param string $channel - * - * @return mixed */ public function removeDnc($id, $channel = 'email') { @@ -449,8 +426,6 @@ public function removeDnc($id, $channel = 'email') * * @param int $id * @param array $utmTags - * - * @return mixed */ public function addUtm($id, $utmTags) { @@ -466,8 +441,6 @@ public function addUtm($id, $utmTags) * * @param int $id * @param int $utmId - * - * @return mixed */ public function removeUtm($id, $utmId) { diff --git a/lib/Api/Data.php b/lib/Api/Data.php index b1959b77..5d21504f 100644 --- a/lib/Api/Data.php +++ b/lib/Api/Data.php @@ -1,4 +1,5 @@ makeRequest("{$this->endpoint}/$id", $options); } - /** - * {@inheritdoc} - */ public function getPublishedList($search = '', $start = 0, $limit = 0, $orderBy = '', $orderByDir = 'ASC') { return $this->actionNotSupported(__FUNCTION__); } - /** - * {@inheritdoc} - */ public function create(array $parameters) { return $this->actionNotSupported(__FUNCTION__); } - /** - * {@inheritdoc} - */ public function edit($id, array $parameters, $createIfNotExists = false) { return $this->actionNotSupported(__FUNCTION__); } - /** - * {@inheritdoc} - */ public function delete($id) { return $this->actionNotSupported(__FUNCTION__); diff --git a/lib/Api/Devices.php b/lib/Api/Devices.php index a7af1266..b14a990a 100644 --- a/lib/Api/Devices.php +++ b/lib/Api/Devices.php @@ -1,4 +1,5 @@ 'emails/$1/send/contact/$2', // 2.6.0 ]; - /** - * {@inheritdoc} - */ protected $searchCommands = [ 'ids', 'is:published', diff --git a/lib/Api/Files.php b/lib/Api/Files.php index d22ad01e..f97e25c8 100644 --- a/lib/Api/Files.php +++ b/lib/Api/Files.php @@ -1,4 +1,5 @@ endpoint = 'files/'.$folder; } - /** - * {@inheritdoc} - */ public function edit($id, array $parameters, $createIfNotExists = false) { return $this->actionNotSupported('edit'); @@ -61,25 +50,16 @@ public function create(array $parameters) return parent::create($parameters); } - /** - * {@inheritdoc} - */ public function createBatch(array $parameters) { return $this->actionNotSupported('createBatch'); } - /** - * {@inheritdoc} - */ public function editBatch(array $parameters, $createIfNotExists = false) { return $this->actionNotSupported('editBatch'); } - /** - * {@inheritdoc} - */ public function deleteBatch(array $ids) { return $this->actionNotSupported('deleteBatch'); diff --git a/lib/Api/Focus.php b/lib/Api/Focus.php index e09ac8a7..7258c74e 100644 --- a/lib/Api/Focus.php +++ b/lib/Api/Focus.php @@ -1,4 +1,5 @@ 'stages/$1/contact/remove/$2', // 2.6.0 ]; - /** - * {@inheritdoc} - */ protected $searchCommands = [ 'ids', ]; diff --git a/lib/Api/Stats.php b/lib/Api/Stats.php index d1576c24..ee48218c 100644 --- a/lib/Api/Stats.php +++ b/lib/Api/Stats.php @@ -1,4 +1,5 @@ makeRequest($endpoint, $parameters); } - /** - * {@inheritdoc} - */ public function delete($id) { return $this->actionNotSupported('delete'); } - /** - * {@inheritdoc} - */ public function getList($search = '', $start = 0, $limit = 0, $orderBy = '', $orderByDir = 'ASC', $publishedOnly = false, $minimal = false) { return $this->actionNotSupported('getList'); } - /** - * {@inheritdoc} - */ public function create(array $parameters) { return $this->actionNotSupported('create'); } - /** - * {@inheritdoc} - */ public function getPublishedList($search = '', $start = 0, $limit = 0, $orderBy = '', $orderByDir = 'ASC') { return $this->actionNotSupported('getPublishedList'); } - /** - * {@inheritdoc} - */ public function edit($id, array $parameters, $createIfNotExists = false) { return $this->actionNotSupported('edit'); diff --git a/lib/Api/Tags.php b/lib/Api/Tags.php index 9267ec36..fa99bdaa 100644 --- a/lib/Api/Tags.php +++ b/lib/Api/Tags.php @@ -1,4 +1,5 @@ actionNotSupported('edit'); @@ -52,25 +41,16 @@ public function create(array $parameters) return parent::create($parameters); } - /** - * {@inheritdoc} - */ public function createBatch(array $parameters) { return $this->actionNotSupported('createBatch'); } - /** - * {@inheritdoc} - */ public function editBatch(array $parameters, $createIfNotExists = false) { return $this->actionNotSupported('editBatch'); } - /** - * {@inheritdoc} - */ public function deleteBatch(array $ids) { return $this->actionNotSupported('deleteBatch'); diff --git a/lib/Api/Tweets.php b/lib/Api/Tweets.php index 23bcb26f..c80660cd 100644 --- a/lib/Api/Tweets.php +++ b/lib/Api/Tweets.php @@ -1,4 +1,5 @@ client = $client ?: Psr18ClientDiscovery::find(); } diff --git a/lib/Auth/BasicAuth.php b/lib/Auth/BasicAuth.php index 4ea94321..b7d6f6f1 100644 --- a/lib/Auth/BasicAuth.php +++ b/lib/Auth/BasicAuth.php @@ -74,9 +74,6 @@ class BasicAuth extends AbstractAuth */ private $userName; - /** - * {@inheritdoc} - */ public function isAuthorized() { return !empty($this->userName) && !empty($this->password); diff --git a/lib/Auth/OAuth.php b/lib/Auth/OAuth.php index 5df7c598..36d30899 100755 --- a/lib/Auth/OAuth.php +++ b/lib/Auth/OAuth.php @@ -155,9 +155,6 @@ public function getAccessTokenData() ]; } - /** - * {@inheritdoc} - */ public function isAuthorized() { // Check for existing access token @@ -290,7 +287,7 @@ public function setup( $accessTokenExpires = null, $callback = null, $scope = null, - $refreshToken = null + $refreshToken = null, ) { $this->_client_id = $clientKey; $this->_client_secret = $clientSecret; diff --git a/lib/Exception/AbstractApiException.php b/lib/Exception/AbstractApiException.php index 1fc99bf7..ee4b99e5 100644 --- a/lib/Exception/AbstractApiException.php +++ b/lib/Exception/AbstractApiException.php @@ -1,4 +1,5 @@ authUrl = $authUrl; diff --git a/lib/Exception/ContextNotFoundException.php b/lib/Exception/ContextNotFoundException.php index b2764313..13dc0658 100644 --- a/lib/Exception/ContextNotFoundException.php +++ b/lib/Exception/ContextNotFoundException.php @@ -1,4 +1,5 @@ response = $response; diff --git a/lib/MauticApi.php b/lib/MauticApi.php index b7bd04c9..cf464c3b 100644 --- a/lib/MauticApi.php +++ b/lib/MauticApi.php @@ -1,4 +1,5 @@ [ 'recent.activity' => 'Recent Activity', - ], + ], 'Asset Widgets' => [ 'asset.downloads.in.time' => 'Downloads in time', 'unique.vs.repetitive.downloads' => 'Unique vs repetitive downloads', 'popular.assets' => 'Popular assets', 'created.assets' => 'Created assets', - ], + ], 'Campaign Widgets' => [ 'events.in.time' => 'Events triggered in time', 'leads.added.in.time' => 'Leads added in time', - ], + ], 'Email Widgets' => [ 'emails.in.time' => 'Emails in time', 'ignored.vs.read.emails' => 'Ignored vs read', @@ -37,13 +38,13 @@ class DataTest extends MauticApiTestCase 'most.read.emails' => 'Most read emails', 'created.emails' => 'Created emails', 'device.granularity.email' => 'Devices for emails read', - ], + ], 'Form Widgets' => [ 'submissions.in.time' => 'Submissions in time', 'top.submission.referrers' => 'Top submission referrers', 'top.submitters' => 'Top submitters', 'created.forms' => 'Created forms', - ], + ], 'Contact Widgets' => [ 'created.leads.in.time' => 'Created contacts in time', 'anonymous.vs.identified.leads' => 'Anonymous vs identified contacts', @@ -122,7 +123,7 @@ public function testUnsupportedFeatures() 'create' => function () { return $this->api->create([]); }, 'edit' => function () { return $this->api->edit('x', []); }, 'delete' => function () { return $this->api->delete('x'); }, - ]; + ]; foreach ($notSupported as $key => $closure) { $response = $closure(); $this->assertTrue(!empty($response['errors']), 'Should contain Error element'); diff --git a/tests/Api/DevicesTest.php b/tests/Api/DevicesTest.php index 78dd8ecb..af3defc7 100644 --- a/tests/Api/DevicesTest.php +++ b/tests/Api/DevicesTest.php @@ -1,4 +1,5 @@ '
html mode enabled
', 'properties' => [ 'bar' => [ - 'allow_hide' => 1, - 'sticky' => 1, - 'size' => 'large', - 'placement' => 'top', - ], + 'allow_hide' => 1, + 'sticky' => 1, + 'size' => 'large', + 'placement' => 'top', + ], 'modal' => [ - 'placement' => 'top', - ], + 'placement' => 'top', + ], 'notification' => [ - 'placement' => 'top_left', - ], + 'placement' => 'top_left', + ], 'animate' => 1, 'link_activation' => 1, 'colors' => [ diff --git a/tests/Api/FormsTest.php b/tests/Api/FormsTest.php index 814b87a2..536e0f17 100644 --- a/tests/Api/FormsTest.php +++ b/tests/Api/FormsTest.php @@ -1,4 +1,5 @@ assertErrors($response); @@ -229,7 +230,7 @@ protected function standardTestGetList() } } - protected function standardTestCreateGetAndDelete(array $payload = null) + protected function standardTestCreateGetAndDelete(?array $payload = null) { if (empty($payload)) { $payload = $this->testPayload; @@ -250,7 +251,7 @@ protected function standardTestCreateGetAndDelete(array $payload = null) $this->assertErrors($response); } - protected function standardTestBatchEndpoints(array $batch = null, $callback = null) + protected function standardTestBatchEndpoints(?array $batch = null, $callback = null) { if (method_exists($this, 'setUpPayloadClass')) { $this->setUpPayloadClass(); diff --git a/tests/Api/MessagesTest.php b/tests/Api/MessagesTest.php index 18614777..67004e45 100644 --- a/tests/Api/MessagesTest.php +++ b/tests/Api/MessagesTest.php @@ -1,4 +1,5 @@ Date: Mon, 7 Apr 2025 13:11:05 +0300 Subject: [PATCH 79/88] Bump MySQL version to 8.4 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bf6a5f23..5fa26ffa 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,7 @@ jobs: services: mysql: - image: mysql:5.7 + image: mysql:8.4 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: mautictest From f680449a31e1666323d7a9bc1319564ae28e3472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Tue, 15 Apr 2025 17:15:41 +0300 Subject: [PATCH 80/88] fix conflicting GPG key and PPA installation errors in the Install Apache step --- .github/workflows/tests.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5fa26ffa..2222c566 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,9 +61,17 @@ jobs: # We need the sed command at the bottom to set the PHP session save path to a directory that's writable for PHP # NOTE: update the PHP version below as well if you're updating PHP! run: | - sudo add-apt-repository ppa:ondrej/php -y + # Required for managing PPAs + sudo apt-get install software-properties-common -y + + # Add PPA with UTF-8 locale to prevent locale issues + sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/apache2 -y + + # Update and install packages sudo apt-get update - sudo apt-get install apache2 libapache2-mod-php8.3 + sudo apt-get install apache2 libapache2-mod-php8.3 -y + + # Configure Apache and PHP sudo a2enmod rewrite sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.3/apache2/php.ini sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.3/apache2/php.ini From 47d8f41bc4bcf9c6c4c24291396d22b32a283cc4 Mon Sep 17 00:00:00 2001 From: Ruth Cheesley Date: Thu, 19 Jun 2025 17:22:53 +0100 Subject: [PATCH 81/88] Create SECURITY.md --- SECURITY.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..93962af2 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,86 @@ +# Security Policy + +Goals of the Mautic Security Team +--------------------------------- + +* Resolve reported security issues in a Security Advisory +* Provide documentation on how to write secure code +* Provide documentation on securing your Mautic instance +* Help the infrastructure team to keep the \*.mautic.org infrastructure secure + +Scope of the Mautic Security Team +--------------------------------- + +The Mautic Security Team operates with a limited scope and only directly responds to issues with Mautic core, officially supported plugins and resources, and the \*.mautic.org network of websites. The team does not directly handle potential vulnerabilities with third party plugins or individual Mautic instances. + +Which Mautic releases get Security Advisories? +---------------------------------------------- + +Check the [Releases page](https://www.mautic.org/mautic-releases) to find which are the currently supported releases. + +Security advisories are only made for issues affecting stable releases in the supported major version branches. That means there will be no security advisories for development releases, alphas, betas or release candidates. + +Which API Library releases get Security Advisories? +--------------------------------------------------- +At this time, Mautic's security team supports the current stable version and the previous major version of the API library. For example, when 4.0 is released, security advisories will be made for 4.x and 3.x. + +How to report a potential security issue +---------------------------------------- + +If you discover or learn about a potential error, weakness, or threat that can compromise the security of Mautic and is covered by the [Security Advisory Policy](https://www.mautic.org/mautic-security-team/mautic-security-advisory-policy), we ask you to keep it confidential and submit your concern to the Mautic security team. + +To make your report please submit it as a private disclosure at [https://github.com/mautic/api-library/security](https://github.com/mautic/api-library/security). You can also create a private fork to provide a fix, if you're able to do so. See the documentation from GitHub on [privately reporting a security issue](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability). + +Do not post it in GitHub as an issue or a Pull Request, on the forums, or discuss it in Slack. + +[Read more: How to report a security issue with Mautic](https://www.mautic.org/mautic-security-team/how-to-report-a-security-issue) + +How are security issues resolved? +--------------------------------- + +The Mautic Security Team are responsible for triaging incoming security issues relating to Mautic core and officially supported plugins and resources, and for releasing fixes in a timely manner. + +[Read more: How are security issues triaged and resolved by the Mautic Security Team?](https://www.mautic.org/mautic-security-team/triaging-and-resolving-security-issues) + +How are security fixes announced and released? +---------------------------------------------- + +The Security Team coordinates security announcements in release cycles and evaluates whether security issues are ready for release several days in advance. + +The team may deem it necessary to make an out-of-sequence release, in which case at least two weeks’ notice will be provided to ensure that Mautic users are made aware of a security release being made on an unscheduled basis. + +[Read more: Security fix announcements and releases](https://www.mautic.org/mautic-security-team/triaging-and-resolving-security-issues) + +What is a Security Advisory? +---------------------------- + +A security advisory is a public announcement managed by the Mautic Security Team which informs Mautic users about a reported security problem in Mautic core or officially supported plugins and resources, and the steps Mautic users should take to address it. (Usually this involves updating to a new release of the code that fixes the security problem.) + +[Read more: Mautic Security Advisory Policy](https://www.mautic.org/mautic-security-team/mautic-security-advisory-policy) + +What is the disclosure policy of the Mautic Security Team? +---------------------------------------------------------- + +The security team follows a Coordinated Disclosure policy: we keep issues private until there is a fix. Public announcements are made when the threat has been addressed and a secure version is available. + +When reporting a security issue, observe the same policy. **Do not** share your knowledge of security issues with others. + +How do I join the Mautic Security Team? +--------------------------------------- + +As membership in the team gives the individual access to potentially destructive information, membership is limited to people who have a proven track record in the Mautic community. + +Team members are expected to work at least a few hours every month. Exceptions to that can be made for short periods to accommodate other priorities, but people who can't maintain some level of involvement will be asked to reconsider their membership on the team. + +[Read more: How do I join the Mautic Security Team?](https://www.mautic.org/mautic-security-team/join-the-team) + +Who are the Mautic Security Team members? +----------------------------------------- + +You can meet the Mautic Security Team on the page below. + +[Read more: Meet the Mautic Security Team](https://www.mautic.org/meet-the-mautic-security-team) + +Resources and guidance from the [Drupal](https://www.drupal.org/security), [Joomla](https://developer.joomla.org/security.html) and [Mozilla](https://www.mozilla.org/en-US/security/) projects have been drawn from to create these documents and develop our processes/workflows. + +Always [report the issue to the team](https://www.mautic.org/mautic-security-team/how-to-report-a-security-issue) and let them make the decision on whether to handle it in public or private. From 26b84c15537394d3bf0b10b259e280b4349ba934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Voorem=C3=A4e?= Date: Sat, 27 Sep 2025 17:42:18 +0300 Subject: [PATCH 82/88] Install Apache without PPA on ubuntu-24.04 --- .github/workflows/tests.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2222c566..a89bffcc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,17 +61,9 @@ jobs: # We need the sed command at the bottom to set the PHP session save path to a directory that's writable for PHP # NOTE: update the PHP version below as well if you're updating PHP! run: | - # Required for managing PPAs - sudo apt-get install software-properties-common -y - - # Add PPA with UTF-8 locale to prevent locale issues - sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/apache2 -y - - # Update and install packages - sudo apt-get update - sudo apt-get install apache2 libapache2-mod-php8.3 -y - - # Configure Apache and PHP + sudo apt-get update -o Acquire::Retries=3 + sudo apt-get install -y --no-install-recommends apache2 libapache2-mod-php8.3 + sudo a2enmod rewrite sudo sed -i 's,^session.save_handler =.*$,session.save_handler = redis,' /etc/php/8.3/apache2/php.ini sudo sed -i 's,^;session.save_path =.*$,session.save_path = "tcp://127.0.0.1:6379",' /etc/php/8.3/apache2/php.ini From e8b85a56b2c74af89ea11e5ec4e1afc974686eda Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Mon, 8 Dec 2025 13:43:52 +0100 Subject: [PATCH 83/88] Add Webmecanik custom features on top of Mautic 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Features added: - TwoLeggedOAuth2: Client credentials OAuth2 authentication (PSR-18 compatible) - sendCustomToContact: Send custom emails to contacts (from PR #241) - Contacts::create/createBatch: Optional query arguments for Custom Objects support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- README.md | 42 ++++++ lib/Api/Contacts.php | 42 ++++++ lib/Api/Emails.php | 16 +++ lib/Auth/TwoLeggedOAuth2.php | 271 +++++++++++++++++++++++++++++++++++ 4 files changed, 371 insertions(+) create mode 100644 lib/Auth/TwoLeggedOAuth2.php diff --git a/README.md b/README.md index 6eabaa1b..d02dc45d 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,48 @@ $auth = $initAuth->newAuth($settings, 'BasicAuth'); ``` +### Using 2-Legged OAuth2 (Client Credentials) + +The Client Credentials grant is used when applications request an access token to access their own resources, not on behalf of a user. This is ideal for server-to-server communication (cron jobs, background processes, etc.). + +**Note:** This requires Mautic 4.0+ with the client_credentials grant type enabled. + +```php + 'TwoLeggedOAuth2', + 'baseUrl' => 'https://your-mautic.com', + 'clientKey' => '', // Client ID from Mautic API credentials + 'clientSecret' => '', // Client Secret from Mautic API credentials +]; + +// If you have a stored access token, you can pass it to avoid requesting a new one +// $settings['accessToken'] = 'your_stored_access_token'; +// $settings['accessTokenExpires'] = 1234567890; // Unix timestamp + +$initAuth = new ApiAuth(); +$auth = $initAuth->newAuth($settings, $settings['AuthMethod']); + +// Request a new access token if needed +if (!$auth->isAuthorized()) { + $auth->requestAccessToken(); +} + +// Check if token was updated (for caching purposes) +if ($auth->accessTokenUpdated()) { + $tokenData = $auth->getAccessTokenData(); + // Store $tokenData['access_token'] and $tokenData['expires'] for future use +} + +// The auth object is now ready to use with API contexts +``` + ## API Requests Now that you have an access token and the auth object, you can make API requests. The API is broken down into contexts. diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 9540f1c0..ee231118 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -450,4 +450,46 @@ public function removeUtm($id, $utmId) 'POST' ); } + + /** + * Create a new contact. + * + * Overrides parent to support additional query arguments for plugins + * like Custom Objects (e.g., ['includeCustomObjects' => true]). + * + * @param array $parameters Contact data + * @param array $queryArguments Optional query parameters (e.g., for Custom Objects) + * + * @return array|mixed + */ + public function create(array $parameters, array $queryArguments = []) + { + $supported = $this->isSupported('create'); + $queryAppend = [] !== $queryArguments ? '?'.http_build_query($queryArguments) : ''; + + return (true === $supported) + ? $this->makeRequest($this->endpoint.'/new'.$queryAppend, $parameters, 'POST') + : $supported; + } + + /** + * Create a batch of new contacts. + * + * Overrides parent to support additional query arguments for plugins + * like Custom Objects (e.g., ['includeCustomObjects' => true]). + * + * @param array $parameters Array of contact data + * @param array $queryArguments Optional query parameters (e.g., for Custom Objects) + * + * @return array|mixed + */ + public function createBatch(array $parameters, array $queryArguments = []) + { + $supported = $this->isSupported('createBatch'); + $queryAppend = [] !== $queryArguments ? '?'.http_build_query($queryArguments) : ''; + + return (true === $supported) + ? $this->makeRequest($this->endpoint.'/batch/new'.$queryAppend, $parameters, 'POST') + : $supported; + } } diff --git a/lib/Api/Emails.php b/lib/Api/Emails.php index b050c32a..5e553e72 100644 --- a/lib/Api/Emails.php +++ b/lib/Api/Emails.php @@ -78,4 +78,20 @@ public function sendToLead($id, $leadId) { return $this->sendToContact($id, $leadId); } + + /** + * Send a custom email to a specific contact. + * + * This allows sending an email with custom content (subject, body, etc.) + * directly to a contact without using a pre-defined email template. + * + * @param int $contactId The ID of the contact to send the email to + * @param array $data Email data (subject, body, etc.) + * + * @see https://developer.mautic.org/#send-email-to-contact (custom email section) + */ + public function sendCustomToContact(int $contactId, array $data = []): array + { + return $this->makeRequest($this->endpoint.'/contact/'.$contactId.'/send/custom', $data, 'POST'); + } } diff --git a/lib/Auth/TwoLeggedOAuth2.php b/lib/Auth/TwoLeggedOAuth2.php new file mode 100644 index 00000000..5c70fae8 --- /dev/null +++ b/lib/Auth/TwoLeggedOAuth2.php @@ -0,0 +1,271 @@ +log('isAuthorized()'); + + return $this->validateAccessToken(); + } + + /** + * Setup the authentication credentials. + * + * @param string|null $baseUrl URL of the Mautic instance + * @param string|null $clientKey Client ID from Mautic API credentials + * @param string|null $clientSecret Client Secret from Mautic API credentials + * @param string|null $accessToken Previously stored access token (optional) + * @param int|null $accessTokenExpires Unix timestamp when token expires (optional) + * + * @throws RequiredParameterMissingException + */ + public function setup( + ?string $baseUrl = null, + ?string $clientKey = null, + ?string $clientSecret = null, + ?string $accessToken = null, + ?int $accessTokenExpires = null, + ): void { + if (empty($clientKey) || empty($clientSecret)) { + $this->log('parameters did not include clientKey and/or clientSecret'); + throw new RequiredParameterMissingException('One or more required parameters was not supplied. Both clientKey and clientSecret required!'); + } + + if (empty($baseUrl)) { + $this->log('parameters did not include baseUrl'); + throw new RequiredParameterMissingException('One or more required parameters was not supplied. baseUrl required!'); + } + + $this->_client_id = trim($clientKey); + $this->_client_secret = trim($clientSecret); + $this->_access_token_url = rtrim($baseUrl, '/').'/oauth/v2/token'; + + if (!empty($accessToken)) { + $this->setAccessTokenDetails([ + 'access_token' => $accessToken, + 'expires' => $accessTokenExpires, + ]); + } + } + + /** + * Check if the access token was updated during the last request. + */ + public function accessTokenUpdated(): bool + { + return $this->_access_token_updated; + } + + /** + * Get the current access token data. + * + * @return array{access_token: string|null, expires: int|null, token_type: string} + */ + public function getAccessTokenData(): array + { + return [ + 'access_token' => $this->_access_token, + 'expires' => $this->_expires, + 'token_type' => $this->_token_type, + ]; + } + + /** + * Set access token details from stored data. + * + * @param array{access_token?: string|null, expires?: int|null, token_type?: string} $accessTokenDetails + * + * @return $this + */ + public function setAccessTokenDetails(array $accessTokenDetails): static + { + $this->_access_token = $accessTokenDetails['access_token'] ?? null; + $this->_expires = isset($accessTokenDetails['expires']) + ? (int) $accessTokenDetails['expires'] + : null; + + if (isset($accessTokenDetails['token_type'])) { + $this->_token_type = $accessTokenDetails['token_type']; + } + + return $this; + } + + /** + * Validate if the current access token is still valid. + */ + public function validateAccessToken(): bool + { + $this->log('validateAccessToken()'); + + // Check if token is expired (with 10 second buffer) + if (!empty($this->_access_token) && !empty($this->_expires) + && $this->_expires < (time() + 10)) { + $this->log('access token expired'); + + return false; + } + + if (!empty($this->_access_token)) { + $this->log('has valid access token'); + + return true; + } + + $this->log('no access token'); + + return false; + } + + /** + * Request a new access token using client credentials. + * + * @throws IncorrectParametersReturnedException + */ + public function requestAccessToken(): bool + { + $this->log('requestAccessToken()'); + + $parameters = [ + 'client_id' => $this->_client_id, + 'client_secret' => $this->_client_secret, + 'grant_type' => 'client_credentials', + ]; + + $params = $this->makeRequest($this->_access_token_url, $parameters, 'POST'); + + if (is_array($params)) { + if (isset($params['access_token']) && isset($params['expires_in'])) { + $this->log('access token set as '.$params['access_token']); + + $this->_access_token = $params['access_token']; + $this->_expires = time() + (int) $params['expires_in']; + $this->_token_type = $params['token_type'] ?? 'bearer'; + $this->_access_token_updated = true; + + if ($this->_debug) { + $_SESSION['oauth']['debug']['tokens']['access_token'] = $params['access_token']; + $_SESSION['oauth']['debug']['tokens']['expires_in'] = $params['expires_in']; + $_SESSION['oauth']['debug']['tokens']['token_type'] = $params['token_type'] ?? null; + } + + return true; + } + } + + $this->log('response did not have an access token'); + + if ($this->_debug) { + $_SESSION['oauth']['debug']['response'] = $params; + } + + if (isset($params['errors'])) { + $errors = []; + foreach ($params['errors'] as $error) { + $errors[] = $error['message']; + } + $response = implode('; ', $errors); + } else { + $response = print_r($params, true); + } + + throw new IncorrectParametersReturnedException('Incorrect access token parameters returned: '.$response); + } + + /** + * Get the access token, requesting a new one if necessary. + * + * @throws IncorrectParametersReturnedException + */ + public function getAccessToken(): string + { + if (!$this->validateAccessToken()) { + $this->requestAccessToken(); + } + + return $this->_access_token; + } + + protected function prepareRequest($url, array $headers, array $parameters, $method, array $settings): array + { + if (!empty($this->_access_token)) { + $headers = array_merge($headers, ['Authorization: Bearer '.$this->_access_token]); + } + + return [$headers, $parameters]; + } + + protected function getQueryParameters($isPost, $parameters): array + { + $query = parent::getQueryParameters($isPost, $parameters); + + // Support for file uploads - pass access token as query parameter + if (isset($parameters['file'])) { + $query['access_token'] = $this->_access_token; + } + + return $query; + } +} From 90b039d06fc70f54b0ee92b5baeff8ee17743565 Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Mon, 8 Dec 2025 13:49:04 +0100 Subject: [PATCH 84/88] Update UPGRADE-4.0.md with Webmecanik migration notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Installation changes (PSR-18 HTTP client) - TwoLeggedOAuth2 method changes - New features documentation - Version compatibility table 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- UPGRADE-4.0.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index 86c2e28c..6d23b5fa 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -1,7 +1,16 @@ # Dependencies -* PHP 8.0 is the now the minimum +* PHP 8.0 is now the minimum (was PHP 7.2 in 3.x) * We are decoupled from any HTTP messaging client with the help of [PSR-18 HTTP Client](https://www.php-fig.org/psr/psr-18/). This requires an extra package providing [psr/http-client-implementation](https://packagist.org/providers/psr/http-client-implementation). To use Guzzle 7, for example, simply require `guzzlehttp/guzzle` in your project. If you do not have an HTTP client installed, `php-http/discovery` will install one if you allow the Composer plugin. +## Installation Change +```bash +# Old (3.x) - cURL was built-in +composer require webmecanik/api-library + +# New (4.x) - HTTP client required +composer require webmecanik/api-library guzzlehttp/guzzle:^7.3 +``` + # Api * \Mautic\Api\Api::getLogger now returns void as the LoggerAwareInterface dictates * \Mautic\Api\Api::getResponseInfo and \Mautic\Response::getInfo have been removed, all Auth classes now have a getResponse method to get the PSR-7 response message @@ -21,3 +30,55 @@ $settings = [ $initAuth = new \Mautic\Auth\ApiAuth($httpClient); $auth = $initAuth->newAuth($settings); ``` + +# TwoLeggedOAuth2 (Client Credentials) + +The TwoLeggedOAuth2 authentication has been updated for PSR-18 compatibility. + +## Method Changes +* `getAccessToken()` now automatically calls `requestAccessToken()` if token is missing/expired +* New method `requestAccessToken()` explicitly requests a new token +* New method `validateAccessToken()` checks if current token is valid +* New method `getAccessTokenData()` returns token data for caching +* New method `accessTokenUpdated()` indicates if token was refreshed + +## Usage Change +```php +// Old (3.x) +$auth = $initAuth->newAuth($settings, 'TwoLeggedOAuth2'); +$token = $auth->getAccessToken(); // Always made HTTP request + +// New (4.x) +$auth = $initAuth->newAuth($settings, 'TwoLeggedOAuth2'); +if (!$auth->isAuthorized()) { + $auth->requestAccessToken(); +} +// Or simply: +$token = $auth->getAccessToken(); // Only requests if needed +``` + +# New Features in 4.x + +## Point Groups API (Mautic 5.x) +New `PointGroups` context and contact methods for point group scoring: +```php +$contactApi->getPointGroupScores($contactId); +$contactApi->addPointGroupScore($contactId, $groupId, $points); +$contactApi->subtractPointGroupScore($contactId, $groupId, $points); +``` + +## Send Custom Email to Contact +New method to send custom emails without pre-defined templates: +```php +$emailApi->sendCustomToContact($contactId, [ + 'subject' => 'Hello', + 'body' => '

Custom content

', +]); +``` + +# Version Compatibility + +| Library Version | PHP | Mautic | +|-----------------|-----|--------| +| 3.x | 7.2+ | 3.x, 4.x | +| 4.x | 8.0+ | 4.x, 5.x | From 7438bda8351f42bcd6b960120be837290e2cf44a Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Mon, 8 Dec 2025 13:56:04 +0100 Subject: [PATCH 85/88] Add CLAUDE.md to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a327be75..574b2f92 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ .phpunit.result.cache /.ddev/mautic-preference /mautic +CLAUDE.md From dd087098697d291129487e4f9f222928a75715bf Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Tue, 9 Dec 2025 08:57:32 +0100 Subject: [PATCH 86/88] Fix duplicate create/createBatch methods in Contacts.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The merge caused duplicate method definitions. Removed the first set and kept the well-documented versions with Custom Objects support. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- lib/Api/Contacts.php | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/lib/Api/Contacts.php b/lib/Api/Contacts.php index 3395d126..ee231118 100644 --- a/lib/Api/Contacts.php +++ b/lib/Api/Contacts.php @@ -436,36 +436,6 @@ public function addUtm($id, $utmTags) ); } - /** - * Create a new item (if supported). - * - * @return array|mixed - */ - public function create(array $parameters, array $queryArguments = []) - { - $supported = $this->isSupported('create'); - $queryAppend = [] !== $queryArguments ? '?'.http_build_query($queryArguments) : ''; - - return (true === $supported) - ? $this->makeRequest($this->endpoint.'/new'.$queryAppend, $parameters, 'POST') - : $supported; - } - - /** - * Create a batch of new items. - * - * @return array|mixed - */ - public function createBatch(array $parameters, array $queryArguments = []) - { - $supported = $this->isSupported('createBatch'); - $queryAppend = [] !== $queryArguments ? '?'.http_build_query($queryArguments) : ''; - - return (true === $supported) - ? $this->makeRequest($this->endpoint.'/batch/new'.$queryAppend, $parameters, 'POST') - : $supported; - } - /** * Remove UTM Tags from a Contact. * From e1ba63a50d605436fe3e6328cb9a6f68d65bfafe Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Tue, 9 Dec 2025 09:07:15 +0100 Subject: [PATCH 87/88] Apply PHP CS Fixer - use Yoda style comparison MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- lib/Auth/AbstractAuth.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Auth/AbstractAuth.php b/lib/Auth/AbstractAuth.php index 9f924d6e..00ddee19 100644 --- a/lib/Auth/AbstractAuth.php +++ b/lib/Auth/AbstractAuth.php @@ -101,7 +101,7 @@ public function makeRequest($url, array $parameters = [], $method = 'GET', array { $this->log('makeRequest('.$url.', '.http_build_query($parameters).', '.$method.',...)'); - if ($method === 'GET') { // We want to keep get arguments for non-GET requests + if ('GET' === $method) { // We want to keep get arguments for non-GET requests [$url, $parameters] = $this->separateUrlParams($url, $parameters); } From b5fd7937a26c1dd71e93486fe4919ea0e6939f46 Mon Sep 17 00:00:00 2001 From: Hugo Prossaird Date: Tue, 9 Dec 2025 09:49:05 +0100 Subject: [PATCH 88/88] Update sendCustomToContact documentation with correct parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Document correct Mautic API parameters: fromEmail, subject, content - Add note about Mautic PR #12854 requirement - Update UPGRADE-4.0.md with complete example 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- UPGRADE-4.0.md | 9 +++++++-- lib/Api/Emails.php | 20 ++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index 6d23b5fa..e05dd13b 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -71,11 +71,16 @@ $contactApi->subtractPointGroupScore($contactId, $groupId, $points); New method to send custom emails without pre-defined templates: ```php $emailApi->sendCustomToContact($contactId, [ - 'subject' => 'Hello', - 'body' => '

Custom content

', + 'fromEmail' => 'noreply@example.com', + 'fromName' => 'My App', // optional + 'subject' => 'Hello', + 'content' => '

Custom HTML content with {{contactfield=firstname}}

', ]); ``` +**Note:** This feature requires Mautic with [PR #12854](https://github.com/mautic/mautic/pull/12854) merged. +It is not available in standard Mautic 5.x releases. + # Version Compatibility | Library Version | PHP | Mautic | diff --git a/lib/Api/Emails.php b/lib/Api/Emails.php index 5e553e72..c0fcacf8 100644 --- a/lib/Api/Emails.php +++ b/lib/Api/Emails.php @@ -82,13 +82,25 @@ public function sendToLead($id, $leadId) /** * Send a custom email to a specific contact. * - * This allows sending an email with custom content (subject, body, etc.) - * directly to a contact without using a pre-defined email template. + * This allows sending an email with custom content directly to a contact + * without using a pre-defined email template. + * + * Required data parameters: + * - fromEmail: Sender email address + * - subject: Email subject + * - content: Email body (HTML) + * + * Optional data parameters: + * - fromName: Sender name + * - replyToEmail: Reply-to email address + * - replyToName: Reply-to name + * + * Note: This endpoint requires Mautic with PR #12854 merged (not in standard Mautic 5.x). * * @param int $contactId The ID of the contact to send the email to - * @param array $data Email data (subject, body, etc.) + * @param array $data email data array with keys: fromEmail, subject, content, etc * - * @see https://developer.mautic.org/#send-email-to-contact (custom email section) + * @return array Response with 'success' and 'trackingHash' on success */ public function sendCustomToContact(int $contactId, array $data = []): array {