From 957fdc9d24babc05e2b725dcf796e74dcac74cd3 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 24 Apr 2019 13:26:53 +0200 Subject: [PATCH] Version bump to 1.1.0: adds support for different installments plans --- CHANGELOG.md | 7 + .../Alma/Installments/Block/PaymentForm.php | 56 + .../Alma/Installments/Helper/Config.php | 27 + .../Alma/Installments/Helper/Data.php | 29 + .../Alma/Installments/Model/PaymentMethod.php | 13 +- .../Config/Backend/PnXAmountBoundary.php | 51 + .../System/Config/Backend/PnXMaxAmount.php | 28 + .../System/Config/Backend/PnXMinAmount.php | 28 + .../Alma/Installments/etc/config.xml | 6 +- .../Alma/Installments/etc/system.xml | 265 ++- .../default/template/alma/payment_form.phtml | 30 + app/locale/fr_FR/Alma_Installments.csv | 14 + composer.json | 2 +- composer.lock | 13 +- .../alma/alma-php-client/.gitignore | 4 +- .../alma/alma-php-client/CHANGELOG.md | 13 + .../alma/alma-php-client/composer.json | 3 +- .../alma/alma-php-client/composer.lock | 1769 +++++++++++++++-- .../alma/alma-php-client/phpunit.xml | 19 + .../alma/alma-php-client/src/Client.php | 2 +- .../src/Endpoints/Payments.php | 40 +- .../alma-php-client/src/Entities/Merchant.php | 1 + .../alma/alma-php-client/src/Request.php | 15 +- .../tests/endpoints/PaymentsTest.php | 106 + lib/Alma_Installments/composer/installed.json | 13 +- 25 files changed, 2317 insertions(+), 237 deletions(-) create mode 100644 app/code/community/Alma/Installments/Block/PaymentForm.php create mode 100644 app/code/community/Alma/Installments/Model/System/Config/Backend/PnXAmountBoundary.php create mode 100644 app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMaxAmount.php create mode 100644 app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMinAmount.php create mode 100644 app/design/frontend/base/default/template/alma/payment_form.phtml create mode 100644 lib/Alma_Installments/alma/alma-php-client/phpunit.xml create mode 100644 lib/Alma_Installments/alma/alma-php-client/tests/endpoints/PaymentsTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 55a6cde..d99995c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +v1.1.0 +------ + +* Dependencies update +* Adds support for different installments plans: 2-, 3- and 4-installment plans, configurable in the Payment Methods + settings. + v1.0.1 ------ diff --git a/app/code/community/Alma/Installments/Block/PaymentForm.php b/app/code/community/Alma/Installments/Block/PaymentForm.php new file mode 100644 index 0000000..9ca2bd4 --- /dev/null +++ b/app/code/community/Alma/Installments/Block/PaymentForm.php @@ -0,0 +1,56 @@ + + * @copyright 2018-2019 Alma SAS + * @license https://opensource.org/licenses/MIT The MIT License + */ + + +class Alma_Installments_Block_PaymentForm extends Mage_Payment_Block_Form +{ + /** + * @var Alma_Installments_Helper_Config + */ + private $config; + + protected function _construct() + { + parent::_construct(); + $this->setTemplate('alma/payment_form.phtml'); + + $this->config = Mage::helper('alma/config'); + } + + public function displayPnX($n) + { + if (!$this->config->isPnXEnabled($n)) { + return false; + } + + /** @var Mage_Sales_Model_Quote $quote */ + $quote = Mage::helper('checkout/cart')->getQuote(); + if(!$quote) { + return false; + } + + $cartTotal = Alma_Installments_Helper_Functions::priceToCents((float)$quote->getGrandTotal()); + return $cartTotal >= $this->config->pnxMinAmount($n) && $cartTotal < $this->config->pnxMaxAmount($n); + } +} diff --git a/app/code/community/Alma/Installments/Helper/Config.php b/app/code/community/Alma/Installments/Helper/Config.php index 18a03f9..5954f1f 100644 --- a/app/code/community/Alma/Installments/Helper/Config.php +++ b/app/code/community/Alma/Installments/Helper/Config.php @@ -39,6 +39,11 @@ class Alma_Installments_Helper_Config extends Mage_Core_Helper_Abstract const CONFIG_EXCLUDED_PRODUCT_TYPES = 'payment/alma_installments/excluded_product_types'; const CONFIG_EXCLUDED_PRODUCTS_MESSAGE = 'payment/alma_installments/excluded_products_message'; + const CONFIG_PNX_ENABLED = 'payment/alma_installments/p%dx_enabled'; + const CONFIG_PNX_MIN_AMOUNT = 'payment/alma_installments/p%dx_min_amount'; + const CONFIG_PNX_MAX_AMOUNT = 'payment/alma_installments/p%dx_max_amount'; + const CONFIG_PNX_MAX_N = 'payment/alma_installments/pnx_max_n'; + const CONFIG_FULLY_CONFIGURED = 'payment/alma_installments/fully_configured'; public function get($field, $default = null, $storeId = null) @@ -132,4 +137,26 @@ public function isFullyConfigured() { return !$this->needsAPIKeys() && (bool)(int)$this->get(self::CONFIG_FULLY_CONFIGURED, false); } + + public function isPnXEnabled($n) + { + return (bool)(int)$this->get(sprintf(self::CONFIG_PNX_ENABLED, $n), $n == 3); + } + + public function pnxMinAmount($n, $merchant = null) + { + $min = $merchant ? $merchant->minimum_purchase_amount : 10000; + return (int)$this->get(sprintf(self::CONFIG_PNX_MIN_AMOUNT, $n), $min); + } + + public function pnxMaxAmount($n, $merchant = null) + { + $max = $merchant ? $merchant->maximum_purchase_amount : 100000; + return (int)$this->get(sprintf(self::CONFIG_PNX_MAX_AMOUNT, $n), $max); + } + + public function pnxMaxN() + { + return (int)$this->get(self::CONFIG_PNX_MAX_N, 3); + } } diff --git a/app/code/community/Alma/Installments/Helper/Data.php b/app/code/community/Alma/Installments/Helper/Data.php index f8ff965..aab0eaa 100644 --- a/app/code/community/Alma/Installments/Helper/Data.php +++ b/app/code/community/Alma/Installments/Helper/Data.php @@ -25,4 +25,33 @@ class Alma_Installments_Helper_Data extends Mage_Core_Helper_Abstract { + /** @var \Alma\API\Entities\Merchant */ + private $merchant = null; + /** @var \Alma\API\Client $alma */ + private $alma; + /** @var \Psr\Log\LoggerInterface $logger */ + private $logger; + + public function __construct() + { + $this->alma = Mage::helper('alma/AlmaClient')->getDefaultClient(); + $this->logger = Mage::helper('alma/Logger')->getLogger(); + } + + /** + * @param bool $force + * @return \Alma\API\Entities\Merchant + */ + public function getMerchant($force = false) + { + if (!$this->merchant || $force) { + try { + $this->merchant = $this->alma->merchants->me(); + } catch (\Exception $e) { + $this->logger->warning('Could not fetch merchant information for PNX min/max amounts'); + } + } + + return $this->merchant; + } } diff --git a/app/code/community/Alma/Installments/Model/PaymentMethod.php b/app/code/community/Alma/Installments/Model/PaymentMethod.php index 839775d..9013238 100644 --- a/app/code/community/Alma/Installments/Model/PaymentMethod.php +++ b/app/code/community/Alma/Installments/Model/PaymentMethod.php @@ -31,6 +31,8 @@ class Alma_Installments_Model_PaymentMethod extends Mage_Payment_Model_Method_Ab protected $_canManageRecurringProfiles = false; protected $_isInitializeNeeded = true; + protected $_formBlockType = 'alma/PaymentForm'; + /** @var AlmaLogger */ private $logger; /** @var \Alma\API\Client */ @@ -42,6 +44,12 @@ public function __construct() $this->alma = Mage::helper('alma/AlmaClient')->getDefaultClient(); } + public function assignData($data) + { + $this->getInfoInstance()->setAdditionalInformation('installments_count', $data->getData('installments_count')); + return parent::assignData($data); + } + public function canUseForCurrency($currencyCode) { return $currencyCode == 'EUR'; @@ -72,6 +80,7 @@ public function initialize($paymentAction, $stateObject) $data = array( "payment" => array( "return_url" => Mage::getUrl('alma/payment/return'), + "installments_count" => (int)$payment->getAdditionalInformation('installments_count'), "ipn_callback_url" => Mage::getUrl('alma/payment/ipn'), "customer_cancel_url" => Mage::getUrl('alma/payment/cancel'), "purchase_amount" => Alma_Installments_Helper_Functions::priceToCents((float)$order->getTotalDue()), @@ -96,7 +105,7 @@ public function initialize($paymentAction, $stateObject) ); try { - $almaPayment = $this->alma->payments->createPayment($data); + $almaPayment = $this->alma->payments->create($data); } catch (\Alma\API\RequestError $e) { $this->logger->error("Error creating payment: {$e->getMessage()}"); $this->_cancelOrder(); @@ -143,6 +152,8 @@ public function isAvailable($quote = null) $available = Mage::helper('alma/availability')->isAvailable(); $eligible = Mage::helper('alma/eligibility')->checkEligibility(); + $this->toto = 'yay'; + $isAvailable = $available && $eligible; } diff --git a/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXAmountBoundary.php b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXAmountBoundary.php new file mode 100644 index 0000000..53ac80a --- /dev/null +++ b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXAmountBoundary.php @@ -0,0 +1,51 @@ + + * @copyright 2018-2019 Alma SAS + * @license https://opensource.org/licenses/MIT The MIT License + */ + +class Alma_Installments_Model_System_Config_Backend_PnXAmountBoundary extends Mage_Core_Model_Config_Data +{ + protected $boundary = null; + + public function _afterLoad() + { + /** @var \Alma\API\Entities\Merchant $merchant */ + $merchant = Mage::helper('alma/Data')->getMerchant(); + + $defaults = array( + "min" => $merchant ? $merchant->minimum_purchase_amount : 10000, + "max" => $merchant ? $merchant->maximum_purchase_amount : 100000 + ); + $value = $this->getValue(); + + if (empty($value)) { + $value = $defaults[$this->boundary]; + } + + $this->setValue(Alma_Installments_Helper_Functions::priceFromCents($value)); + } + + public function _beforeSave() + { + $this->setValue(Alma_Installments_Helper_Functions::priceToCents($this->getValue())); + } +} diff --git a/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMaxAmount.php b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMaxAmount.php new file mode 100644 index 0000000..46b0b07 --- /dev/null +++ b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMaxAmount.php @@ -0,0 +1,28 @@ + + * @copyright 2018-2019 Alma SAS + * @license https://opensource.org/licenses/MIT The MIT License + */ + +class Alma_Installments_Model_System_Config_Backend_PnXMaxAmount extends Alma_Installments_Model_System_Config_Backend_PnXAmountBoundary +{ + protected $boundary = 'max'; +} diff --git a/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMinAmount.php b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMinAmount.php new file mode 100644 index 0000000..a7e3cc6 --- /dev/null +++ b/app/code/community/Alma/Installments/Model/System/Config/Backend/PnXMinAmount.php @@ -0,0 +1,28 @@ + + * @copyright 2018-2019 Alma SAS + * @license https://opensource.org/licenses/MIT The MIT License + */ + +class Alma_Installments_Model_System_Config_Backend_PnXMinAmount extends Alma_Installments_Model_System_Config_Backend_PnXAmountBoundary +{ + protected $boundary = 'min'; +} diff --git a/app/code/community/Alma/Installments/etc/config.xml b/app/code/community/Alma/Installments/etc/config.xml index 50ad49b..4952706 100644 --- a/app/code/community/Alma/Installments/etc/config.xml +++ b/app/code/community/Alma/Installments/etc/config.xml @@ -28,7 +28,7 @@ - 1.0.1 + 1.1.0 @@ -58,6 +58,10 @@ Monthly Payments with Alma Pay in 3 monthly payments with your credit card. + + 0 + 1 + 0 diff --git a/app/code/community/Alma/Installments/etc/system.xml b/app/code/community/Alma/Installments/etc/system.xml index 93db817..8427259 100644 --- a/app/code/community/Alma/Installments/etc/system.xml +++ b/app/code/community/Alma/Installments/etc/system.xml @@ -43,7 +43,7 @@ 3 1 1 - 0 + 1 @@ -53,7 +53,7 @@ 0 1 1 - 0 + 1 @@ -64,7 +64,7 @@ 1 1 1 - 0 + 1 payment/alma_installments/sort_order @@ -74,7 +74,7 @@ 2 1 1 - 0 + 1 payment/alma_installments/logging @@ -85,7 +85,7 @@ 3 1 1 - 0 + 1 @@ -96,7 +96,7 @@ 4 1 1 - 0 + 1 @@ -107,65 +107,20 @@ 5 1 1 - 0 + 1 - - 1 - - your Alma dashboard]]> - text - 10 - 1 - 1 - 0 - - - - payment/alma_installments/live_api_key - alma/system_config_backend_LiveAPIKeyValue - - text - 11 - 1 - 1 - 0 - - - - payment/alma_installments/test_api_key - alma/system_config_backend_TestAPIKeyValue - - text - 12 - 1 - 1 - 0 - - - - payment/alma_installments/api_mode - - select - alma/System_Config_Source_APIModes - 13 - 1 - 1 - 0 - - - - + 1 A message can be displayed in the cart and minicart to indicate the order eligibility for monthly payments text 100 1 1 - 0 + 1 @@ -176,7 +131,7 @@ 101 1 1 - 0 + 1 @@ -186,7 +141,7 @@ 102 1 1 - 0 + 1 @@ -196,18 +151,19 @@ 103 1 1 - 0 + 1 + 1 text 200 1 1 - 0 + 1 @@ -217,20 +173,191 @@ <sort_order>201</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> - <show_in_store>0</show_in_store> + <show_in_store>1</show_in_store> - - - - - - - - - - + + + 1 + + text + 300 + 1 + 1 + 1 + + + + + label + 301 + 1 + 1 + 1 + + + payment/alma_installments/p2x_enabled + + select + adminhtml/system_config_source_yesno + 302 + 1 + 1 + 1 + + + payment/alma_installments/p2x_min_amount + + Minimum purchase amount to activate this plan + text + alma/system_config_backend_PnXMinAmount + 303 + 1 + 1 + 1 + + + payment/alma_installments/p2x_max_amount + + Maximum purchase amount to activate this plan + text + alma/system_config_backend_PnXMaxAmount + 304 + 1 + 1 + 1 + + + + + label + 305 + 1 + 1 + 1 + + + payment/alma_installments/p3x_enabled + + select + adminhtml/system_config_source_yesno + 306 + 1 + 1 + 1 + + + payment/alma_installments/p3x_min_amount + + Minimum purchase amount to activate this plan + text + alma/system_config_backend_PnXMinAmount + 307 + 1 + 1 + 1 + + + payment/alma_installments/p3x_max_amount + + Maximum purchase amount to activate this plan + text + alma/system_config_backend_PnXMaxAmount + 308 + 1 + 1 + 1 + + + + + label + 309 + 1 + 1 + 1 + + + payment/alma_installments/p4x_enabled + + select + adminhtml/system_config_source_yesno + 310 + 1 + 1 + 1 + + + payment/alma_installments/p4x_min_amount + + Minimum purchase amount to activate this plan + text + alma/system_config_backend_PnXMinAmount + 311 + 1 + 1 + 1 + + + payment/alma_installments/p4x_max_amount + + Maximum purchase amount to activate this plan + text + alma/system_config_backend_PnXMaxAmount + 312 + 1 + 1 + 1 + + + + + + 1 + + your Alma dashboard]]> + text + 400 + 1 + 1 + 1 + + + + payment/alma_installments/live_api_key + alma/system_config_backend_LiveAPIKeyValue + + text + 401 + 1 + 1 + 1 + + + + payment/alma_installments/test_api_key + alma/system_config_backend_TestAPIKeyValue + + text + 402 + 1 + 1 + 1 + + + + payment/alma_installments/api_mode + + select + alma/System_Config_Source_APIModes + 403 + 1 + 1 + 1 + + + diff --git a/app/design/frontend/base/default/template/alma/payment_form.phtml b/app/design/frontend/base/default/template/alma/payment_form.phtml new file mode 100644 index 0000000..1c0ee45 --- /dev/null +++ b/app/design/frontend/base/default/template/alma/payment_form.phtml @@ -0,0 +1,30 @@ + diff --git a/app/locale/fr_FR/Alma_Installments.csv b/app/locale/fr_FR/Alma_Installments.csv index c49266d..c140ef2 100644 --- a/app/locale/fr_FR/Alma_Installments.csv +++ b/app/locale/fr_FR/Alma_Installments.csv @@ -30,3 +30,17 @@ "Not eligible for monthly payments", "Non éligible au paiement en plusieurs fois" "Monthly Payments with Alma", "Payez en plusieurs fois avec Alma" "Pay in 3 monthly payments with your credit card.", "Payez en 3 fois avec votre carte bancaire" +"Error while processing your order: %s", "Erreur lors du traitement de votre commande : %s" +"There was an error processing your order. Please try again later or contact us if the problem persists", "Une erreur est survenue lors du traitement de votre commande. Veuillez réessayer, ou nous contacter si le problème persiste." +"Pay in %d installments", "Payer en %d fois" +"Installments plans", "Échéanciers" +"2-installment payments", "Paiement en 2 fois" +"3-installment payments", "Paiement en 3 fois" +"4-installment payments", "Paiement en 4 fois" +"Enable", "Activer" +"Yes", "Oui" +"No", "Non" +"Minimum amount (€)", "Montant minimum (€)" +"Maximum amount (€)", "Montant maximum (€)" +"Minimum purchase amount to activate this plan", "Montant d'achat minimum pour activer cet échéancier" +"Maximum purchase amount to activate this plan", "Montant d'achat maximum pour activer cet échéancier" diff --git a/composer.json b/composer.json index 8f4c3c2..78a638e 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "alma/alma-installments-magento1", "description": "Integrates Alma Monthly Installments into Magento 1", - "version": "1.0.1", + "version": "1.1.0", "require": { "alma/alma-php-client": "*", "psr/log": "^1.1" diff --git a/composer.lock b/composer.lock index 79f13b9..59e0966 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f5e007ce43191b1cfbf4e1f6f97773be", + "content-hash": "eaaac25bf1de8bd991027e4b722472a7", "packages": [ { "name": "alma/alma-php-client", - "version": "v1.0.0", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/alma/alma-php-client.git", - "reference": "4dbb769661e759bb31420494568ce4f29bf32eab" + "reference": "ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alma/alma-php-client/zipball/4dbb769661e759bb31420494568ce4f29bf32eab", - "reference": "4dbb769661e759bb31420494568ce4f29bf32eab", + "url": "https://api.github.com/repos/alma/alma-php-client/zipball/ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf", + "reference": "ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf", "shasum": "" }, "require": { @@ -26,6 +26,7 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", "phpcompatibility/php-compatibility": "^9.0", + "phpunit/phpunit": "^8", "roave/security-advisories": "@dev", "squizlabs/php_codesniffer": "^3.3" }, @@ -49,7 +50,7 @@ } ], "description": "PHP API client for the Alma payments API", - "time": "2019-03-01T14:36:50+00:00" + "time": "2019-04-16T11:44:06+00:00" }, { "name": "psr/log", diff --git a/lib/Alma_Installments/alma/alma-php-client/.gitignore b/lib/Alma_Installments/alma/alma-php-client/.gitignore index 630ca50..4f72e49 100644 --- a/lib/Alma_Installments/alma/alma-php-client/.gitignore +++ b/lib/Alma_Installments/alma/alma-php-client/.gitignore @@ -1,3 +1,5 @@ +/vendor/ + .php_cs.cache +.phpunit.result.cache -/vendor/ diff --git a/lib/Alma_Installments/alma/alma-php-client/CHANGELOG.md b/lib/Alma_Installments/alma/alma-php-client/CHANGELOG.md index 0ef28fb..f62c993 100644 --- a/lib/Alma_Installments/alma/alma-php-client/CHANGELOG.md +++ b/lib/Alma_Installments/alma/alma-php-client/CHANGELOG.md @@ -1,6 +1,19 @@ CHANGELOG ========= +v1.0.2 +------ + +* Bug fix: Always include a body for POST requests to prevent HTTP 411 error + +v1.0.1 +------ + +* Adds `fee_plans` attribute to the `Merchant` entity +* Deprecate `Payments::createPayment` in favor of `Payments::create` +* Adds the `Payments::refund` endpoint to partially or totally refund a payment +* [Adds PHPUnit and a few unit tests, but nothing big just yet] + v1.0.0 ------ diff --git a/lib/Alma_Installments/alma/alma-php-client/composer.json b/lib/Alma_Installments/alma/alma-php-client/composer.json index 967cc23..7436cb6 100644 --- a/lib/Alma_Installments/alma/alma-php-client/composer.json +++ b/lib/Alma_Installments/alma/alma-php-client/composer.json @@ -6,7 +6,8 @@ "phpcompatibility/php-compatibility": "^9.0", "squizlabs/php_codesniffer": "^3.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "roave/security-advisories": "@dev" + "roave/security-advisories": "@dev", + "phpunit/phpunit": "^8" }, "license": "MIT", "authors": [ diff --git a/lib/Alma_Installments/alma/alma-php-client/composer.lock b/lib/Alma_Installments/alma/alma-php-client/composer.lock index 9d1a1ea..0813d24 100644 --- a/lib/Alma_Installments/alma/alma-php-client/composer.lock +++ b/lib/Alma_Installments/alma/alma-php-client/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b635806c989a66616796720b3c753295", + "content-hash": "7451f3db94d851b76ebfa758110d7da4", "packages": [ { "name": "psr/log", @@ -121,6 +121,212 @@ ], "time": "2018-10-26T13:21:45+00:00" }, + { + "name": "doctrine/instantiator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "a2c590166b2133a4633738648b6b064edae0814a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "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": "http://ocramius.github.com/" + } + ], + "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" + ], + "time": "2019-03-17T17:37:11+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2018-06-11T23:09:50+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.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", + "time": "2018-07-08T19:19:57+00:00" + }, { "name": "phpcompatibility/php-compatibility", "version": "9.0.0", @@ -180,153 +386,702 @@ "time": "2018-10-07T17:38:02+00:00" }, { - "name": "roave/security-advisories", - "version": "dev-master", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2", - "reference": "e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, - "conflict": { - "3f/pygmentize": "<1.2", - "adodb/adodb-php": "<5.20.12", - "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", - "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", - "aws/aws-sdk-php": ">=3,<3.2.1", - "brightlocal/phpwhois": "<=4.2.5", - "bugsnag/bugsnag-laravel": ">=2,<2.0.2", - "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4|>=3.4,<3.4.14|>=3.5,<3.5.17|>=3.6,<3.6.4", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", - "codeigniter/framework": "<=3.0.6", - "composer/composer": "<=1.0.0-alpha11", - "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/core": ">=2,<3.5.35", - "contao/core-bundle": ">=4,<4.4.18|>=4.5,<4.5.8", - "contao/listing-bundle": ">=4,<4.4.8", - "contao/newsletter-bundle": ">=4,<4.1", - "david-garcia/phpwhois": "<=4.3.1", - "doctrine/annotations": ">=1,<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", - "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", - "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", - "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", - "drupal/drupal": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", - "erusev/parsedown": "<1.7", - "ezsystems/ezplatform": "<1.7.8.1|>=1.8,<1.13.4.1|>=2,<2.2.3.1|>=2.3,<2.3.2.1", - "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", - "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.12.3|>=2011,<2017.12.4.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1", - "ezyang/htmlpurifier": "<4.1.1", - "firebase/php-jwt": "<2", - "fooman/tcpdf": "<6.2.22", - "fossar/tcpdf-parser": "<6.2.22", - "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", - "fuel/core": "<1.8.1", - "gree/jose": "<=2.2", - "gregwar/rst": "<1.0.3", - "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", - "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", - "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", - "ivankristianto/phpwhois": "<=4.3", - "james-heinrich/getid3": "<1.9.9", - "joomla/session": "<1.3.1", - "jsmitty12/phpwhois": "<5.1", - "kazist/phpwhois": "<=4.2.6", - "kreait/firebase-php": ">=3.2,<3.8.1", - "la-haute-societe/tcpdf": "<6.2.22", - "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", - "magento/magento1ce": "<1.9.3.9", - "magento/magento1ee": ">=1.9,<1.14.3.2", - "magento/product-community-edition": ">=2,<2.2.6", - "monolog/monolog": ">=1.8,<1.12", - "namshi/jose": "<2.2", - "onelogin/php-saml": "<2.10.4", - "openid/php-openid": "<2.3", - "oro/crm": ">=1.7,<1.7.4", - "oro/platform": ">=1.7,<1.7.4", - "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", - "paragonie/random_compat": "<2", - "paypal/merchant-sdk-php": "<3.12", - "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", - "phpoffice/phpexcel": "<=1.8.1", - "phpoffice/phpspreadsheet": "<=1.5", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", - "phpwhois/phpwhois": "<=4.2.5", - "phpxmlrpc/extras": "<0.6.1", - "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", - "propel/propel1": ">=1,<=1.7.1", - "pusher/pusher-php-server": "<2.2.1", - "robrichards/xmlseclibs": ">=1,<3.0.2", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "sensiolabs/connect": "<4.2.3", - "serluck/phpwhois": "<=4.2.6", - "shopware/shopware": "<5.3.7", - "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", - "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": ">=3,<3.3", - "silverstripe/userforms": "<3", - "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", - "simplesamlphp/simplesamlphp": "<1.15.2", - "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", - "slim/slim": "<2.6", - "smarty/smarty": "<3.1.33", - "socalnick/scn-social-auth": "<1.15.2", - "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "stormpath/sdk": ">=0,<9.9.99", - "swiftmailer/swiftmailer": ">=4,<5.4.5", - "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "sylius/sylius": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "symfony/dependency-injection": ">=2,<2.0.17", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2", - "symfony/http-foundation": ">=2,<2.7.49|>=2.8,<2.8.44|>=3,<3.3.18|>=3.4,<3.4.14|>=4,<4.0.14|>=4.1,<4.1.3", - "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8", - "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", - "symfony/polyfill": ">=1,<1.10", - "symfony/polyfill-php55": ">=1,<1.10", - "symfony/routing": ">=2,<2.0.19", - "symfony/security": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7", - "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/serializer": ">=2,<2.0.11", - "symfony/symfony": ">=2,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/translation": ">=2,<2.0.17", - "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "tecnickcom/tcpdf": "<6.2.22", - "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", - "theonedemon/phpwhois": "<=4.2.5", - "titon/framework": ">=0,<9.9.99", - "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.20", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.30|>=8,<8.7.17|>=9,<9.3.2", + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "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" + ], + "time": "2018-08-05T17:53:17+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "0317a769a81845c390e19684d9ba25d7f6aa4707" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0317a769a81845c390e19684d9ba25d7f6aa4707", + "reference": "0317a769a81845c390e19684d9ba25d7f6aa4707", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.1", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-xdebug": "^2.6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.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 provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2019-02-26T07:38:26+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "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": "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" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.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", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b389aebe1b8b0578430bda0c7c95a829608e059", + "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-02-20T10:12:59+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.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": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2018-10-30T05:52:18+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "8.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "925109f8bbe6dae28fbc7bb07446a53abd3b1c25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/925109f8bbe6dae28fbc7bb07446a53abd3b1c25", + "reference": "925109f8bbe6dae28fbc7bb07446a53abd3b1c25", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.2", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^7.0", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^3.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.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": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2019-03-26T14:00:24+00:00" + }, + { + "name": "roave/security-advisories", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2", + "reference": "e1c50ad6aac15aa5c76762f39fb6926b5f7fc1d2", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "adodb/adodb-php": "<5.20.12", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<1.0.1", + "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", + "aws/aws-sdk-php": ">=3,<3.2.1", + "brightlocal/phpwhois": "<=4.2.5", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4|>=3.4,<3.4.14|>=3.5,<3.5.17|>=3.6,<3.6.4", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "codeigniter/framework": "<=3.0.6", + "composer/composer": "<=1.0.0-alpha11", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/core": ">=2,<3.5.35", + "contao/core-bundle": ">=4,<4.4.18|>=4.5,<4.5.8", + "contao/listing-bundle": ">=4,<4.4.8", + "contao/newsletter-bundle": ">=4,<4.1", + "david-garcia/phpwhois": "<=4.3.1", + "doctrine/annotations": ">=1,<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<=0.7.1", + "doctrine/mongodb-odm": ">=1,<1.0.2", + "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", + "dompdf/dompdf": ">=0.6,<0.6.2", + "drupal/core": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", + "drupal/drupal": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", + "erusev/parsedown": "<1.7", + "ezsystems/ezplatform": "<1.7.8.1|>=1.8,<1.13.4.1|>=2,<2.2.3.1|>=2.3,<2.3.2.1", + "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", + "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.12.3|>=2011,<2017.12.4.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1", + "ezyang/htmlpurifier": "<4.1.1", + "firebase/php-jwt": "<2", + "fooman/tcpdf": "<6.2.22", + "fossar/tcpdf-parser": "<6.2.22", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "fuel/core": "<1.8.1", + "gree/jose": "<=2.2", + "gregwar/rst": "<1.0.3", + "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1", + "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", + "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", + "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "ivankristianto/phpwhois": "<=4.3", + "james-heinrich/getid3": "<1.9.9", + "joomla/session": "<1.3.1", + "jsmitty12/phpwhois": "<5.1", + "kazist/phpwhois": "<=4.2.6", + "kreait/firebase-php": ">=3.2,<3.8.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", + "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "magento/magento1ce": "<1.9.3.9", + "magento/magento1ee": ">=1.9,<1.14.3.2", + "magento/product-community-edition": ">=2,<2.2.6", + "monolog/monolog": ">=1.8,<1.12", + "namshi/jose": "<2.2", + "onelogin/php-saml": "<2.10.4", + "openid/php-openid": "<2.3", + "oro/crm": ">=1.7,<1.7.4", + "oro/platform": ">=1.7,<1.7.4", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": ">=0,<3", + "paragonie/random_compat": "<2", + "paypal/merchant-sdk-php": "<3.12", + "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", + "phpoffice/phpexcel": "<=1.8.1", + "phpoffice/phpspreadsheet": "<=1.5", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pusher/pusher-php-server": "<2.2.1", + "robrichards/xmlseclibs": ">=1,<3.0.2", + "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "shopware/shopware": "<5.3.7", + "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": ">=3,<3.3", + "silverstripe/userforms": "<3", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/simplesamlphp": "<1.15.2", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "slim/slim": "<2.6", + "smarty/smarty": "<3.1.33", + "socalnick/scn-social-auth": "<1.15.2", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "stormpath/sdk": ">=0,<9.9.99", + "swiftmailer/swiftmailer": ">=4,<5.4.5", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/sylius": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "symfony/dependency-injection": ">=2,<2.0.17", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2", + "symfony/http-foundation": ">=2,<2.7.49|>=2.8,<2.8.44|>=3,<3.3.18|>=3.4,<3.4.14|>=4,<4.0.14|>=4.1,<4.1.3", + "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/serializer": ">=2,<2.0.11", + "symfony/symfony": ">=2,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/translation": ">=2,<2.0.17", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", + "tecnickcom/tcpdf": "<6.2.22", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", + "theonedemon/phpwhois": "<=4.2.5", + "titon/framework": ">=0,<9.9.99", + "truckersmp/phpwhois": "<=4.3.1", + "twig/twig": "<1.20", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.30|>=8,<8.7.17|>=9,<9.3.2", "typo3/cms-core": ">=8,<8.7.17|>=9,<9.3.2", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", @@ -365,20 +1120,589 @@ "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2" }, - "type": "metapackage", + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "time": "2018-12-07T09:18:50+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-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/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "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": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "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": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6fda8ce1974b62b14935adc02a9ed38252eca656", + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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" + ], + "time": "2019-02-01T05:27:49+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" + }, + { + "name": "sebastian/global-state", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "shasum": "" + }, + "require": { + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "role": "maintainer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2018-12-07T09:18:50+00:00" + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-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/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-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/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "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": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "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": "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", + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -430,6 +1754,155 @@ "standards" ], "time": "2018-09-23T23:08:17+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "82ebae02209c21113908c229e9883c419720738a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "backendtea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.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", + "time": "2017-04-07T12:08:54+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-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" + ], + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], diff --git a/lib/Alma_Installments/alma/alma-php-client/phpunit.xml b/lib/Alma_Installments/alma/alma-php-client/phpunit.xml new file mode 100644 index 0000000..a174c65 --- /dev/null +++ b/lib/Alma_Installments/alma/alma-php-client/phpunit.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/lib/Alma_Installments/alma/alma-php-client/src/Client.php b/lib/Alma_Installments/alma/alma-php-client/src/Client.php index acd95a6..ba3f081 100644 --- a/lib/Alma_Installments/alma/alma-php-client/src/Client.php +++ b/lib/Alma_Installments/alma/alma-php-client/src/Client.php @@ -45,7 +45,7 @@ class DependenciesError extends \Exception class Client implements LoggerAwareInterface { - const VERSION = '1.0.0'; + const VERSION = '1.0.2'; const LIVE_API_URL = 'https://api.getalma.eu'; const SANDBOX_API_URL = 'https://api.sandbox.getalma.eu'; diff --git a/lib/Alma_Installments/alma/alma-php-client/src/Endpoints/Payments.php b/lib/Alma_Installments/alma/alma-php-client/src/Endpoints/Payments.php index 0c54c51..4ee5a8d 100644 --- a/lib/Alma_Installments/alma/alma-php-client/src/Endpoints/Payments.php +++ b/lib/Alma_Installments/alma/alma-php-client/src/Endpoints/Payments.php @@ -60,7 +60,7 @@ public function eligibility($orderData) * @return Payment * @throws RequestError */ - public function createPayment($data) + public function create($data) { $res = $this->request(self::PAYMENTS_PATH)->setRequestBody($data)->post(); @@ -71,6 +71,19 @@ public function createPayment($data) return new Payment($res->json); } + /** + * @param $data + * + * @return Payment + * @throws RequestError + * @deprecated Use Payments::create() instead + */ + public function createPayment($data) + { + return $this->create($data); + } + + /** * @param $id string The external ID for the payment to fetch * @@ -110,4 +123,29 @@ public function flagAsPotentialFraud($id, $reason=null) return true; } + + /** + * @param string $id ID of the payment to be refunded + * @param bool $totalRefund Should the payment be completely refunded? In this case, $amount is not required as the + * API will automatically compute the amount to refund, including possible customer fees + * @param int $amount Amount that should be refunded, for a partial refund. Must be expressed as a cents + * integer + * @return Payment + * @throws RequestError + */ + public function refund($id, $totalRefund = true, $amount = null) + { + $req = $this->request(self::PAYMENTS_PATH . "/$id/refund"); + + if (!$totalRefund) { + $req->setRequestBody(array("amount" => $amount)); + } + + $res = $req->post(); + if ($res->isError()) { + throw new RequestError($res->errorMessage, $req, $res); + } + + return new Payment($res->json); + } } diff --git a/lib/Alma_Installments/alma/alma-php-client/src/Entities/Merchant.php b/lib/Alma_Installments/alma/alma-php-client/src/Entities/Merchant.php index d519403..7f38b2b 100644 --- a/lib/Alma_Installments/alma/alma-php-client/src/Entities/Merchant.php +++ b/lib/Alma_Installments/alma/alma-php-client/src/Entities/Merchant.php @@ -34,4 +34,5 @@ class Merchant extends Base public $can_create_payments; public $minimum_purchase_amount; public $maximum_purchase_amount; + public $fee_plans; } diff --git a/lib/Alma_Installments/alma/alma-php-client/src/Request.php b/lib/Alma_Installments/alma/alma-php-client/src/Request.php index 3a786d5..a76c13c 100644 --- a/lib/Alma_Installments/alma/alma-php-client/src/Request.php +++ b/lib/Alma_Installments/alma/alma-php-client/src/Request.php @@ -54,6 +54,7 @@ class Request private $curlHandle; private $queryParams = array(); private $headers = array(); + private $hasData; /** * @param $context ClientContext The current client context @@ -75,6 +76,7 @@ public function __construct($context, $url) { $this->context = $context; $this->url = $url; + $this->hasData = false; $this->initCurl(); } @@ -172,8 +174,14 @@ private function exec() public function setRequestBody($data = array()) { $body = $data ? json_encode($data) : ''; + curl_setopt($this->curlHandle, CURLOPT_POSTFIELDS, $body); - $this->headers[] = 'Content-type: application/json'; + + if ($body) { + $this->headers[] = 'Content-type: application/json'; + $this->hasData = true; + } + return $this; } @@ -208,6 +216,11 @@ public function get() */ public function post() { + // If no data was set, force an empty body to make sure we don't get a 411 error from some servers + if (!$this->hasData) { + $this->setRequestBody(null); + } + curl_setopt_array($this->curlHandle, array( CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPGET => false, diff --git a/lib/Alma_Installments/alma/alma-php-client/tests/endpoints/PaymentsTest.php b/lib/Alma_Installments/alma/alma-php-client/tests/endpoints/PaymentsTest.php new file mode 100644 index 0000000..a5acc8d --- /dev/null +++ b/lib/Alma_Installments/alma/alma-php-client/tests/endpoints/PaymentsTest.php @@ -0,0 +1,106 @@ + 'test', 'api_root' => $_ENV['ALMA_API_ROOT'], 'force_tls' => false] + ); + } + + + private static function paymentData(int $amount): Array + { + return [ + 'payment' => [ + 'purchase_amount' => $amount, + 'shipping_address' => [ + 'first_name' => 'Jane', + 'last_name' => 'Doe', + 'line1' => '2 rue de la rue', + 'city' => 'Paris', + 'postal_code' => '75002', + 'country' => 'FR', + ] + ] + ]; + } + + private static function createPayment(int $amount): Payment + { + return self::$almaClient->payments->create(self::paymentData($amount)); + } + + + private static function _testEligibility(int $amount, bool $eligible): void + { + $eligibility = self::$almaClient->payments->eligibility(self::paymentData($amount)); + self::assertEquals($eligible, $eligibility->isEligible); + + if (!$eligible) { + self::assertArrayHasKey('purchase_amount', $eligibility->reasons); + self::assertEquals('invalid_value', $eligibility->reasons['purchase_amount']); + + self::assertArrayHasKey('purchase_amount', $eligibility->constraints); + self::assertArrayHasKey('minimum', $eligibility->constraints['purchase_amount']); + self::assertArrayHasKey('maximum', $eligibility->constraints['purchase_amount']); + } else { + + } + } + + public static function testCanCheckEligibility(): void + { + self::_testEligibility(1, false); + self::_testEligibility(20000, true); + self::_testEligibility(500000, false); + } + + public function testCanCreateAPayment(): void + { + $payment = self::createPayment(26300); + self::assertEquals(26300, $payment->purchase_amount); + } + + public static function testCanFetchAPayment() + { + $p1 = self::createPayment(26300); + $p2 = self::$almaClient->payments->fetch($p1->id); + + self::assertEquals($p1->id, $p2->id); + } + + // TODO: This test will fail until we have a way to mark a payment as paid from the outside, which is not trivial + public static function testCanTotallyRefundAPayment() + { + $payment = self::createPayment(30000); + + $refundedPayment = self::$almaClient->payments->refund($payment->id); + self::assertEquals($payment->id, $refundedPayment->id); + + foreach ($refundedPayment->payment_plan as $installment) { + var_dump($installment); + self::assertEquals(Instalment::STATE_PAID, $installment->state); + } + } + + // TODO: This test will fail until we have a way to mark a payment as paid from the outside, which is not trivial + public static function testCanPartiallyRefundAPayment() + { + $payment = self::createPayment(30000); + + $refundedPayment = self::$almaClient->payments->refund($payment->id, false, 10000); + self::assertEquals($payment->id, $refundedPayment->id); + self::assertEquals(Instalment::STATE_PAID, $refundedPayment->payment_plan[2]->state); + } +} diff --git a/lib/Alma_Installments/composer/installed.json b/lib/Alma_Installments/composer/installed.json index 9c92e00..ec48d06 100644 --- a/lib/Alma_Installments/composer/installed.json +++ b/lib/Alma_Installments/composer/installed.json @@ -1,17 +1,17 @@ [ { "name": "alma/alma-php-client", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", + "version": "v1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/alma/alma-php-client.git", - "reference": "4dbb769661e759bb31420494568ce4f29bf32eab" + "reference": "ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alma/alma-php-client/zipball/4dbb769661e759bb31420494568ce4f29bf32eab", - "reference": "4dbb769661e759bb31420494568ce4f29bf32eab", + "url": "https://api.github.com/repos/alma/alma-php-client/zipball/ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf", + "reference": "ce9a6dbb982c3449d73e9a6d31c02765f83cc9bf", "shasum": "" }, "require": { @@ -20,10 +20,11 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", "phpcompatibility/php-compatibility": "^9.0", + "phpunit/phpunit": "^8", "roave/security-advisories": "@dev", "squizlabs/php_codesniffer": "^3.3" }, - "time": "2019-03-01T14:36:50+00:00", + "time": "2019-04-16T11:44:06+00:00", "type": "library", "installation-source": "dist", "autoload": {