From aff44c554629e5ab673e8abd02070131ae719313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 19 Apr 2022 12:13:45 -0300 Subject: [PATCH 01/18] TR-57: [Woocommerce] - bug-admin-js-error-on-toggle-credentials --- assets/admin/js/globalpayments-admin.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/admin/js/globalpayments-admin.js b/assets/admin/js/globalpayments-admin.js index 8db6fee..fc312de 100644 --- a/assets/admin/js/globalpayments-admin.js +++ b/assets/admin/js/globalpayments-admin.js @@ -4,9 +4,13 @@ $, globalpayments_admin_params ) { + var digitalWallet = [ 'globalpayments_googlepay', 'globalpayments_applepay' ]; + function GlobalPaymentsAdmin( globalpayments_admin_params ) { this.id = globalpayments_admin_params.gateway_id; - this.toggleCredentialsSettings(); + if ( !digitalWallet.includes(globalpayments_admin_params.gateway_id) ) { + this.toggleCredentialsSettings(); + } this.attachEventHandlers(); }; GlobalPaymentsAdmin.prototype = { @@ -93,4 +97,4 @@ * @type {any} */ (window).globalpayments_admin_params || {}, -)); \ No newline at end of file +)); From d12d7f80918ec143ef3e5fb6c770c385aea0205d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 19 Apr 2022 16:30:00 -0300 Subject: [PATCH 02/18] TR-58: [Woocommerce] - Change gateway name to Unified Payments --- src/Gateways/GpApiGateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gateways/GpApiGateway.php b/src/Gateways/GpApiGateway.php index 9d78f1a..01e900d 100644 --- a/src/Gateways/GpApiGateway.php +++ b/src/Gateways/GpApiGateway.php @@ -84,7 +84,7 @@ class GpApiGateway extends AbstractGateway { public function configure_method_settings() { $this->id = self::GATEWAY_ID; - $this->method_title = __( 'Unified Commerce Platform', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_title = __( 'Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); $this->method_description = __( 'Connect to the Global Payments Unified Commerce Platform', 'globalpayments-gateway-provider-for-woocommerce' ); } From b752dbc22b7e690b9e518db59566fe6b0e1bc6ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Thu, 21 Apr 2022 09:39:44 -0300 Subject: [PATCH 03/18] TR-57: [Woocommerce] - refactor - bug-admin-js-error-on-toggle-credentials --- assets/admin/js/globalpayments-admin.js | 4 +--- src/Gateways/AbstractGateway.php | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/assets/admin/js/globalpayments-admin.js b/assets/admin/js/globalpayments-admin.js index fc312de..bcf33ec 100644 --- a/assets/admin/js/globalpayments-admin.js +++ b/assets/admin/js/globalpayments-admin.js @@ -4,11 +4,9 @@ $, globalpayments_admin_params ) { - var digitalWallet = [ 'globalpayments_googlepay', 'globalpayments_applepay' ]; - function GlobalPaymentsAdmin( globalpayments_admin_params ) { this.id = globalpayments_admin_params.gateway_id; - if ( !digitalWallet.includes(globalpayments_admin_params.gateway_id) ) { + if ( 1 != globalpayments_admin_params.is_digital_wallet) { this.toggleCredentialsSettings(); } this.attachEventHandlers(); diff --git a/src/Gateways/AbstractGateway.php b/src/Gateways/AbstractGateway.php index d29536c..2a262e2 100644 --- a/src/Gateways/AbstractGateway.php +++ b/src/Gateways/AbstractGateway.php @@ -1162,6 +1162,9 @@ public function admin_enqueue_scripts( $hook_suffix ) { if ( false === strpos( $section, 'globalpayments_' ) ) { return; } + if ( $this->id != $section ) { + return; + } wp_enqueue_script( 'globalpayments-admin', Plugin::get_url( '/assets/admin/js/globalpayments-admin.js' ), @@ -1174,6 +1177,8 @@ public function admin_enqueue_scripts( $hook_suffix ) { 'globalpayments_admin_params', array( 'gateway_id' => $section, + 'gateway' => $this->id, + 'is_digital_wallet' => $this->is_digital_wallet ) ); wp_enqueue_style( From 212680fc16ff109a0867cce5d224fd9ea51e28d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Thu, 21 Apr 2022 09:46:48 -0300 Subject: [PATCH 04/18] TR-58: [Woocommerce] - Change gateway name to Unified Payments --- src/Gateways/GpApiGateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gateways/GpApiGateway.php b/src/Gateways/GpApiGateway.php index 01e900d..8bb7ea3 100644 --- a/src/Gateways/GpApiGateway.php +++ b/src/Gateways/GpApiGateway.php @@ -85,7 +85,7 @@ class GpApiGateway extends AbstractGateway { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Global Payments Unified Commerce Platform', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_first_line_support_email() { From f14c17124f5afcafb9c9ae23d7f906e31777c00c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 26 Apr 2022 12:19:03 -0300 Subject: [PATCH 05/18] TR-57: [Woocommerce] - refactor - bug-admin-js-error-on-toggle-credentia --- assets/admin/js/globalpayments-admin.js | 4 +- src/Gateways/AbstractGateway.php | 52 +++++++++++++------------ 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/assets/admin/js/globalpayments-admin.js b/assets/admin/js/globalpayments-admin.js index bcf33ec..f339e01 100644 --- a/assets/admin/js/globalpayments-admin.js +++ b/assets/admin/js/globalpayments-admin.js @@ -6,9 +6,7 @@ ) { function GlobalPaymentsAdmin( globalpayments_admin_params ) { this.id = globalpayments_admin_params.gateway_id; - if ( 1 != globalpayments_admin_params.is_digital_wallet) { - this.toggleCredentialsSettings(); - } + this.toggleCredentialsSettings(); this.attachEventHandlers(); }; GlobalPaymentsAdmin.prototype = { diff --git a/src/Gateways/AbstractGateway.php b/src/Gateways/AbstractGateway.php index 2a262e2..8e4eb8d 100644 --- a/src/Gateways/AbstractGateway.php +++ b/src/Gateways/AbstractGateway.php @@ -1159,34 +1159,36 @@ public function admin_enqueue_scripts( $hook_suffix ) { return; } $section = sanitize_text_field( wp_unslash( $_GET['section'] ) ); - if ( false === strpos( $section, 'globalpayments_' ) ) { - return; - } + if ( $this->id != $section ) { return; } - wp_enqueue_script( - 'globalpayments-admin', - Plugin::get_url( '/assets/admin/js/globalpayments-admin.js' ), - array(), - WC()->version, - true - ); - wp_localize_script( - 'globalpayments-admin', - 'globalpayments_admin_params', - array( - 'gateway_id' => $section, - 'gateway' => $this->id, - 'is_digital_wallet' => $this->is_digital_wallet - ) - ); - wp_enqueue_style( - 'globalpayments-admin', - Plugin::get_url( '/assets/admin/css/globalpayments-admin.css' ), - array(), - WC()->version - ); + if ( !$this->is_digital_wallet) { + wp_enqueue_script( + 'globalpayments-admin', + Plugin::get_url( '/assets/admin/js/globalpayments-admin.js' ), + array(), + WC()->version, + true + ); + wp_localize_script( + 'globalpayments-admin', + 'globalpayments_admin_params', + array( + 'gateway_id' => $section, + ) + ); + } + + if ( $this->is_digital_wallet ) { + wp_enqueue_style( + 'globalpayments-admin', + Plugin::get_url( '/assets/admin/css/globalpayments-admin.css' ), + array(), + WC()->version + ); + } + } } From 5fdf3e5f0f48bed650735caf5bb5fd71894bf6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 26 Apr 2022 12:28:42 -0300 Subject: [PATCH 06/18] TR-58: [Woocommerce] - change name to Unified Payments --- readme.txt | 14 +++++++++----- src/Gateways/ApplePayGateway.php | 2 +- src/Gateways/GooglePayGateway.php | 2 +- src/Plugin.php | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/readme.txt b/readme.txt index 93add82..13b572d 100644 --- a/readme.txt +++ b/readme.txt @@ -1,9 +1,9 @@ === GlobalPayments WooCommerce === Contributors: globalpayments -Tags: woocommerce, woo, unified, commerce, platform, global, payments, ucp, heartland, payment, systems, tsys, genius, 3DS, gateway, token, tokenize, save cards +Tags: woocommerce, woo, unified, commerce, platform, global, payments, heartland, payment, systems, tsys, genius, 3DS, gateway, token, tokenize, save cards Requires at least: 5.4 Tested up to: 5.9.3 -Stable tag: 1.2.0 +Stable tag: 1.2.1 License: MIT License URI: https://github.com/globalpayments/globalpayments-woocommerce/blob/main/LICENSE @@ -14,7 +14,7 @@ This extension allows WooCommerce to use the available Global Payments payment g - Heartland Portico gateway - TSYS Genius gateway - TSYS TransIT gateway with TSEP -- Unified Commerce Platform (UCP) +- Unified Payments - Credit Cards - Integrates with Woocommerce - Sale transactions (automatic capture or separate capture action later) @@ -37,8 +37,8 @@ After you have installed and configured the main WooCommerce plugin use the foll 2. Click Install, once installed click Activate 3. Configure and Enable gateways in WooCommerce by adding your public and secret Api Keys -== UCP Sandbox credentials == -Access to our Unified Commerce Platform (UCP) requires sandbox credentials which you can retrieve yourself via our Developer Portal: +== Unified Payments Sandbox credentials == +Access to our Unified Payments requires sandbox credentials which you can retrieve yourself via our Developer Portal: 1. First go to the Developer Portal and make sure the green GP-API button is selected in the top right corner. 2. Click on the icon in the top right and click Register. @@ -47,6 +47,10 @@ Access to our Unified Commerce Platform (UCP) requires sandbox credentials which == Changelog == += 1.2.1 = +* Renamed Unified Commerce Platform (UCP) to Unified Payments +* Bug fix - Live mode toggle in Digital Wallets javascript + = 1.2.0 = * Added Digital Wallets - Google Pay * Added Digital Wallets - Apple Pay diff --git a/src/Gateways/ApplePayGateway.php b/src/Gateways/ApplePayGateway.php index 4766cb2..8dd1478 100644 --- a/src/Gateways/ApplePayGateway.php +++ b/src/Gateways/ApplePayGateway.php @@ -94,7 +94,7 @@ public function __construct() { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'GlobalPayments - Apple Pay', 'globalpayments-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Apple Pay gateway via UCP', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Apple Pay gateway via Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_first_line_support_email() { diff --git a/src/Gateways/GooglePayGateway.php b/src/Gateways/GooglePayGateway.php index 4313e47..ff092b5 100644 --- a/src/Gateways/GooglePayGateway.php +++ b/src/Gateways/GooglePayGateway.php @@ -81,7 +81,7 @@ public function get_first_line_support_email() { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'GlobalPayments - Google Pay', 'googlepay-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Google Pay gateway via UCP', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Google Pay gateway via Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_frontend_gateway_options() { diff --git a/src/Plugin.php b/src/Plugin.php index 3c56f99..8d6d00c 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -18,7 +18,7 @@ class Plugin { * * @var string */ - const VERSION = '1.2.0'; + const VERSION = '1.2.1'; /** * Init the package. From 8f220b60db89cf52cf0b5371956c5f383880db16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 26 Apr 2022 12:54:42 -0300 Subject: [PATCH 07/18] TR-59: [Woocommerce] Improvement card validation --- assets/frontend/js/globalpayments-secure-payment-fields.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/frontend/js/globalpayments-secure-payment-fields.js b/assets/frontend/js/globalpayments-secure-payment-fields.js index 260828e..124a211 100644 --- a/assets/frontend/js/globalpayments-secure-payment-fields.js +++ b/assets/frontend/js/globalpayments-secure-payment-fields.js @@ -525,6 +525,11 @@ this.showValidationError( 'card-expiration' ); break; } + var n = reason.message.search("card.number"); + if (n >= 0) { + this.showValidationError('card-number'); + break; + } case 'SYSTEM_ERROR_DOWNSTREAM': var n = reason.message.search( "card expdate" ); if ( n>=0 ) { From 65c1ca3d2674e2527940e9b6e0a5ef7031cfd31a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Mon, 2 May 2022 12:17:59 -0300 Subject: [PATCH 08/18] TR-58: [Woocommerce] - Change gateway name to Unified Payments --- src/Gateways/ApplePayGateway.php | 2 +- src/Gateways/GooglePayGateway.php | 2 +- src/Gateways/GpApiGateway.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Gateways/ApplePayGateway.php b/src/Gateways/ApplePayGateway.php index 8dd1478..a62f986 100644 --- a/src/Gateways/ApplePayGateway.php +++ b/src/Gateways/ApplePayGateway.php @@ -94,7 +94,7 @@ public function __construct() { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'GlobalPayments - Apple Pay', 'globalpayments-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Apple Pay gateway via Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Apple Pay gateway via Unified Payments Gateway', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_first_line_support_email() { diff --git a/src/Gateways/GooglePayGateway.php b/src/Gateways/GooglePayGateway.php index ff092b5..326045c 100644 --- a/src/Gateways/GooglePayGateway.php +++ b/src/Gateways/GooglePayGateway.php @@ -81,7 +81,7 @@ public function get_first_line_support_email() { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'GlobalPayments - Google Pay', 'googlepay-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Google Pay gateway via Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Google Pay gateway via Unified Payments Gateway', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_frontend_gateway_options() { diff --git a/src/Gateways/GpApiGateway.php b/src/Gateways/GpApiGateway.php index 8bb7ea3..e49067c 100644 --- a/src/Gateways/GpApiGateway.php +++ b/src/Gateways/GpApiGateway.php @@ -85,7 +85,7 @@ class GpApiGateway extends AbstractGateway { public function configure_method_settings() { $this->id = self::GATEWAY_ID; $this->method_title = __( 'Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); - $this->method_description = __( 'Connect to the Unified Payments', 'globalpayments-gateway-provider-for-woocommerce' ); + $this->method_description = __( 'Connect to the Unified Payments Gateway', 'globalpayments-gateway-provider-for-woocommerce' ); } public function get_first_line_support_email() { From a6d126bb10aa7724e5b2b9a298be0d74acac0f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Mon, 2 May 2022 12:44:00 -0300 Subject: [PATCH 09/18] TR-62: [Woocommerce] shopping-cart-documentation-update-user-guides-and-instructions --- readme.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.txt b/readme.txt index 13b572d..a107fb3 100644 --- a/readme.txt +++ b/readme.txt @@ -40,10 +40,10 @@ After you have installed and configured the main WooCommerce plugin use the foll == Unified Payments Sandbox credentials == Access to our Unified Payments requires sandbox credentials which you can retrieve yourself via our Developer Portal: -1. First go to the Developer Portal and make sure the green GP-API button is selected in the top right corner. -2. Click on the icon in the top right and click Register. -3. Once registered, click on the same icon in top right corner and click GP API Apps. Here we are going to create an app which is a set of GP API credentials used to access the API and generate access tokens. -4. Click ‘Create +1. First go to the Developer Portal. +2. Click on the person icon in the top-right corner and select Log In or Register. +3. Once registered, click on the person icon again and select Unified Payments Apps. +4. Click ‘Create a New App’. An app is a set of credentials used to access the API and generate access tokens. == Changelog == From ae1a82666b7905412bbb03388ca1102b1d590805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Mon, 2 May 2022 13:27:54 -0300 Subject: [PATCH 10/18] TR-60: [Woocommerce] Update SDK to 3.0.5 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 3fd028a..f25584e 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ } }, "require": { - "globalpayments/php-sdk": "3.0.2", + "globalpayments/php-sdk": "3.0.5", "psr/log": "^1.1" }, "require-dev": { From b3e3feb0fd7cd953cc982f74a5db9e4a05862ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 3 May 2022 10:29:07 -0300 Subject: [PATCH 11/18] TR-60: [Woocommerce] Update SDK to 3.0.5 --- globalpayments-gateway-provider-for-woocommerce.php | 2 +- readme.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/globalpayments-gateway-provider-for-woocommerce.php b/globalpayments-gateway-provider-for-woocommerce.php index 8fd2c2f..6ab9a79 100644 --- a/globalpayments-gateway-provider-for-woocommerce.php +++ b/globalpayments-gateway-provider-for-woocommerce.php @@ -3,7 +3,7 @@ * Plugin Name: GlobalPayments WooCommerce * Plugin URI: https://github.com/globalpayments/globalpayments-woocommerce * Description: This extension allows WooCommerce to use the available Global Payments payment gateways. All card data is tokenized using the respective gateway's tokenization service. - * Version: 1.2.0 + * Version: 1.2.1 * Requires PHP: 5.5.9 * WC tested up to: 6.3.1 * Author: Global Payments diff --git a/readme.txt b/readme.txt index a107fb3..aace708 100644 --- a/readme.txt +++ b/readme.txt @@ -50,6 +50,7 @@ Access to our Unified Payments requires sandbox credentials which you can retrie = 1.2.1 = * Renamed Unified Commerce Platform (UCP) to Unified Payments * Bug fix - Live mode toggle in Digital Wallets javascript +* Update PHP-SDK to v3.0.5 = 1.2.0 = * Added Digital Wallets - Google Pay From 20270182ae658eba1f4f8b1bf4eacef206151df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Tue, 3 May 2022 13:09:17 -0300 Subject: [PATCH 12/18] Add composer.lock file --- composer.lock | 2339 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2339 insertions(+) create mode 100644 composer.lock diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..327284e --- /dev/null +++ b/composer.lock @@ -0,0 +1,2339 @@ +{ + "_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": "7ae5f65598b227e0bea3335cb103fc36", + "packages": [ + { + "name": "globalpayments/php-sdk", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/globalpayments/php-sdk.git", + "reference": "d7e63ea28acbceb5863fe0aa485f4af3420b6f4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/globalpayments/php-sdk/zipball/d7e63ea28acbceb5863fe0aa485f4af3420b6f4e", + "reference": "d7e63ea28acbceb5863fe0aa485f4af3420b6f4e", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-openssl": "*", + "ext-zlib": "*", + "php": ">= 5.5.9" + }, + "require-dev": { + "brianium/paratest": "0.15.0", + "phpstan/phpstan-shim": "^0.8.4", + "phpunit/phpunit": "~5.0", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "GlobalPayments\\Api\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Heartland Payment Systems" + } + ], + "description": "PHP SDK for processing payments with Global Payments, including Heartland Payment Systems and Realex Payments", + "homepage": "https://developer.heartlandpaymentsystems.com/documentation", + "support": { + "issues": "https://github.com/globalpayments/php-sdk/issues", + "source": "https://github.com/globalpayments/php-sdk/tree/3.0.5" + }, + "time": "2022-04-21T12:12:24+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "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/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "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-03-03T08:28:38+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "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.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+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": "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": "phpstan/phpstan", + "version": "0.12.99", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7", + "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.99" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2021-09-12T20:09:55+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+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.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.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.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "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.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "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.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "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.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+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.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "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": "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.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+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": "squizlabs/php_codesniffer", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2021-12-12T21:44:58+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "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.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-10-20T20:35:02+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.0.0" +} From c8f652ad19c6aa2882733420607c89d8a1973ab6 Mon Sep 17 00:00:00 2001 From: Andrei Humulescu Date: Thu, 2 Jun 2022 17:07:33 +0300 Subject: [PATCH 13/18] TR-66: [WooCommerce]: Fixed a bug where 3DS amount would not update when a customer added/removed a coupon --- .../globalpayments-secure-payment-fields.js | 12 ++++++++++-- readme.txt | 3 +++ src/Gateways/AbstractGateway.php | 7 ++----- src/Gateways/GpApiGateway.php | 19 +++++++++++++++++++ src/Plugin.php | 2 +- 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/assets/frontend/js/globalpayments-secure-payment-fields.js b/assets/frontend/js/globalpayments-secure-payment-fields.js index 124a211..f9cbdde 100644 --- a/assets/frontend/js/globalpayments-secure-payment-fields.js +++ b/assets/frontend/js/globalpayments-secure-payment-fields.js @@ -57,7 +57,7 @@ /** * Order info */ - this.order = threeDSecureOptions.order; + this.order = {}; /** * @@ -134,7 +134,15 @@ .done( function( result ) { if ( -1 !== result.messages.indexOf( self.id + '_checkout_validated' ) ) { helper.createInputElement( self.id, 'checkout_validated', 1 ); - self.threeDSecure(); + + $.get( self.threedsecure.orderInfoUrl ) + .done( function( result ) { + self.order = result.message; + self.threeDSecure(); + }) + .fail( function( jqXHR, textStatus, errorThrown ) { + console.log( errorThrown ); + }); } else { self.showPaymentError( result.messages ); } diff --git a/readme.txt b/readme.txt index aace708..d3822a0 100644 --- a/readme.txt +++ b/readme.txt @@ -47,6 +47,9 @@ Access to our Unified Payments requires sandbox credentials which you can retrie == Changelog == += 1.2.2 = +* Bug fix - 3DS amount not updated when a customer added/removed a coupon + = 1.2.1 = * Renamed Unified Commerce Platform (UCP) to Unified Payments * Bug fix - Live mode toggle in Digital Wallets javascript diff --git a/src/Gateways/AbstractGateway.php b/src/Gateways/AbstractGateway.php index 8e4eb8d..8dab7c9 100644 --- a/src/Gateways/AbstractGateway.php +++ b/src/Gateways/AbstractGateway.php @@ -365,12 +365,9 @@ public function tokenization_script() { 'challengeNotificationUrl' => WC()->api_request_url( 'globalpayments_threedsecure_challengenotification' ), 'checkEnrollmentUrl' => WC()->api_request_url( 'globalpayments_threedsecure_checkenrollment' ), 'initiateAuthenticationUrl' => WC()->api_request_url( 'globalpayments_threedsecure_initiateauthentication' ), + 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_threedsecure_order_info' ), 'ajaxCheckoutUrl' => \WC_AJAX::get_endpoint( 'checkout' ), - ), - 'order' => array( - 'amount' => $this->get_session_amount(), - 'currency' => get_woocommerce_currency(), - ), + ) ) ); } diff --git a/src/Gateways/GpApiGateway.php b/src/Gateways/GpApiGateway.php index e49067c..b6edce3 100644 --- a/src/Gateways/GpApiGateway.php +++ b/src/Gateways/GpApiGateway.php @@ -236,6 +236,10 @@ protected function add_hooks() { $this, 'process_threeDSecure_challengeNotification' ) ); + add_action( 'woocommerce_api_globalpayments_threedsecure_order_info', array( + $this, + 'get_threeDSecure_order_info' + ) ); } public function woocommerce_globalpayments_gpapi_settings( $settings ) { @@ -382,6 +386,21 @@ public function process_threeDSecure_challengeNotification() { } } + public function get_threeDSecure_order_info() { + if ( ( 'GET' !== $_SERVER['REQUEST_METHOD'] ) ) { + return; + } + + $response = new \stdClass(); + $response->amount = $this->get_session_amount(); + $response->currency = get_woocommerce_currency(); + + wp_send_json( [ + 'error' => false, + 'message' => $response, + ] ); + } + protected function get_session_amount() { $cart_totals = WC()->session->get( 'cart_totals' ); diff --git a/src/Plugin.php b/src/Plugin.php index 8d6d00c..dd5aeb1 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -18,7 +18,7 @@ class Plugin { * * @var string */ - const VERSION = '1.2.1'; + const VERSION = '1.2.2'; /** * Init the package. From 434758e230a5028c02d369d61da90f06bbd5373c Mon Sep 17 00:00:00 2001 From: Andrei Humulescu Date: Fri, 3 Jun 2022 10:24:47 +0300 Subject: [PATCH 14/18] TR-66: [WooCommerce]: Refactored the code so it also includes Digital Wallets --- assets/frontend/js/globalpayments-applepay.js | 11 ++- .../frontend/js/globalpayments-googlepay.js | 13 ++- assets/frontend/js/globalpayments-helper.js | 87 +++++++++++++++++-- .../globalpayments-secure-payment-fields.js | 54 ++---------- readme.txt | 2 +- src/Gateways/AbstractGateway.php | 35 +++++++- src/Gateways/ApplePayGateway.php | 15 ---- src/Gateways/GooglePayGateway.php | 15 ---- src/Gateways/GpApiGateway.php | 25 ------ 9 files changed, 135 insertions(+), 122 deletions(-) diff --git a/assets/frontend/js/globalpayments-applepay.js b/assets/frontend/js/globalpayments-applepay.js index 28d3fe9..5fb0f5d 100644 --- a/assets/frontend/js/globalpayments-applepay.js +++ b/assets/frontend/js/globalpayments-applepay.js @@ -1,10 +1,9 @@ ( function ( $, globalpayments_applepay_params, - globalpayments_order, helper ) { - function ApplePayWoocommerce ( options, order ) { + function ApplePayWoocommerce ( options ) { /** * Payment gateway id * @@ -17,7 +16,7 @@ * * @type {object} */ - this.order = order; + this.order = {}; /** * Payment gateway options @@ -78,6 +77,7 @@ createApplePaySession: function () { var self = this; + this.order = helper.order; try { var applePaySession = new ApplePaySession( 1, self.getPaymentRequest() ); @@ -153,7 +153,7 @@ supportedNetworks: this.getAllowedCardNetworks(), total: { label: this.getDisplayName(), - amount: this.order.amount + amount: this.order.amount.toString() }, }; }, @@ -185,10 +185,9 @@ }, } - new ApplePayWoocommerce( globalpayments_applepay_params, globalpayments_order ); + new ApplePayWoocommerce( globalpayments_applepay_params ); }( ( window ).jQuery, ( window ).globalpayments_applepay_params || {}, - ( window ).globalpayments_order || {}, ( window ).GlobalPaymentsHelper )); diff --git a/assets/frontend/js/globalpayments-googlepay.js b/assets/frontend/js/globalpayments-googlepay.js index 415fda9..4437263 100644 --- a/assets/frontend/js/globalpayments-googlepay.js +++ b/assets/frontend/js/globalpayments-googlepay.js @@ -1,10 +1,9 @@ ( function ( $, globalpayments_googlepay_params, - globalpayments_order, helper ) { - function GooglePayWoocommerce ( options, order ) { + function GooglePayWoocommerce ( options ) { /** * Payment gateway id * @@ -17,7 +16,7 @@ * * @type {object} */ - this.order = order; + this.order = {}; /** * Payment gateway options @@ -156,7 +155,7 @@ getGoogleTransactionInfo: function () { return { totalPriceStatus: 'FINAL', - totalPrice: this.order.amount, + totalPrice: this.order.amount.toString(), currencyCode: this.order.currency }; }, @@ -191,7 +190,8 @@ }, onGooglePaymentButtonClicked: function () { - var self = this + var self = this; + this.order = helper.order; var paymentDataRequest = this.getGooglePaymentDataRequest(); paymentDataRequest.transactionInfo = this.getGoogleTransactionInfo(); @@ -211,10 +211,9 @@ }, } - new GooglePayWoocommerce( globalpayments_googlepay_params, globalpayments_order ); + new GooglePayWoocommerce( globalpayments_googlepay_params ); }( ( window ).jQuery, ( window ).globalpayments_googlepay_params || {}, - ( window ).globalpayments_order || {}, ( window ).GlobalPaymentsHelper ) ); diff --git a/assets/frontend/js/globalpayments-helper.js b/assets/frontend/js/globalpayments-helper.js index 75853af..689afd3 100644 --- a/assets/frontend/js/globalpayments-helper.js +++ b/assets/frontend/js/globalpayments-helper.js @@ -1,9 +1,52 @@ (function ( - $ + $, + globalpayments_helper_params ) { - function Helper() {}; + function Helper( options ) { + /** + * Helper options + * + * @type {object} + */ + this.helperOptions = options; + + /** + * The current order + * + * @type {object} + */ + this.order = {}; + + this.attachEventHandlers(); + }; Helper.prototype = { + /** + * Add important event handlers for controlling the payment experience during checkout + * + * @returns + */ + attachEventHandlers: function () { + var self = this; + + $( document.body ).on( + 'updated_checkout', + function () { + self.blockOnSubmit(); + + $.get( self.helperOptions.orderInfoUrl ) + .done( function( result ) { + self.order = result.message; + }) + .fail( function( jqXHR, textStatus, errorThrown ) { + console.log(errorThrown); + }) + .always( function() { + self.unblockOnError(); + }); + } + ); + }, /** * Convenience function to get CSS selector for the built-in 'Place Order' button * @@ -147,11 +190,45 @@ } $( this.getForm() ).submit(); }, + + /** + * Blocks checkout UI + * + * Implementation pulled from `woocommerce/assets/js/frontend/checkout.js` + * + * @returns + */ + blockOnSubmit: function () { + var $form = $( this.getForm() ); + var form_data = $form.data(); + if ( 1 !== form_data['blockUI.isBlocked'] ) { + $form.block( + { + message: null, + overlayCSS: { + background: '#fff', + opacity: 0.6 + } + } + ); + } + }, + + /** + * Unblocks checkout UI + * + * @returns + */ + unblockOnError: function () { + var $form = $( this.getForm() ); + $form.unblock(); + } }; if ( ! window.GlobalPaymentsHelper ) { - window.GlobalPaymentsHelper = new Helper(); + window.GlobalPaymentsHelper = new Helper( globalpayments_helper_params ); } } ( - ( window ).jQuery -) ); \ No newline at end of file + ( window ).jQuery, + ( window ).globalpayments_helper_params || {} +) ); diff --git a/assets/frontend/js/globalpayments-secure-payment-fields.js b/assets/frontend/js/globalpayments-secure-payment-fields.js index f9cbdde..05499c8 100644 --- a/assets/frontend/js/globalpayments-secure-payment-fields.js +++ b/assets/frontend/js/globalpayments-secure-payment-fields.js @@ -122,7 +122,7 @@ */ initThreeDSecure: function ( e ) { e.preventDefault; - this.blockOnSubmit(); + helper.blockOnSubmit(); var self = this; @@ -134,15 +134,8 @@ .done( function( result ) { if ( -1 !== result.messages.indexOf( self.id + '_checkout_validated' ) ) { helper.createInputElement( self.id, 'checkout_validated', 1 ); - - $.get( self.threedsecure.orderInfoUrl ) - .done( function( result ) { - self.order = result.message; - self.threeDSecure(); - }) - .fail( function( jqXHR, textStatus, errorThrown ) { - console.log( errorThrown ); - }); + self.order = helper.order; + self.threeDSecure(); } else { self.showPaymentError( result.messages ); } @@ -225,7 +218,7 @@ styles: this.getStyleConfiguration() } ); - this.cardForm.on( 'submit', 'click', this.blockOnSubmit.bind( this ) ); + this.cardForm.on( 'submit', 'click', helper.blockOnSubmit.bind( this ) ); this.cardForm.on( 'token-success', this.handleResponse.bind( this ) ); this.cardForm.on( 'token-error', this.handleErrors.bind( this ) ); this.cardForm.on( 'error', this.handleErrors.bind( this ) ); @@ -292,7 +285,7 @@ * 3DS Process */ threeDSecure: function () { - this.blockOnSubmit(); + helper.blockOnSubmit(); var self = this; var _form = helper.getForm(); @@ -433,7 +426,7 @@ showValidationError: function (fieldType) { $( '.' + this.id + '.' + fieldType + ' .woocommerce-globalpayments-validation-error' ).show(); - this.unblockOnError(); + helper.unblockOnError(); }, /** @@ -458,7 +451,7 @@ scrollTop: ( $form.offset().top - 100 ) }, 1000 ); - this.unblockOnError(); + helper.unblockOnError(); $( document.body ).trigger( 'checkout_error' ); }, @@ -597,39 +590,6 @@ */ getSubmitButtonText: function () { return $( '#place_order' ).data( 'value' ) || $( '#place_order' ).attr( 'value' ); - }, - - /** - * Blocks checkout UI - * - * Implementation pulled from `woocommerce/assets/js/frontend/checkout.js` - * - * @returns - */ - blockOnSubmit: function () { - var $form = $( helper.getForm() ); - var form_data = $form.data(); - if ( 1 !== form_data['blockUI.isBlocked'] ) { - $form.block( - { - message: null, - overlayCSS: { - background: '#fff', - opacity: 0.6 - } - } - ); - } - }, - - /** - * Unblocks checkout UI - * - * @returns - */ - unblockOnError: function () { - var $form = $( helper.getForm() ); - $form.unblock(); } }; diff --git a/readme.txt b/readme.txt index d3822a0..0e441c4 100644 --- a/readme.txt +++ b/readme.txt @@ -48,7 +48,7 @@ Access to our Unified Payments requires sandbox credentials which you can retrie == Changelog == = 1.2.2 = -* Bug fix - 3DS amount not updated when a customer added/removed a coupon +* Bug fix - 3DS/Digital Wallets amount not updated when a customer added/removed a coupon = 1.2.1 = * Renamed Unified Commerce Platform (UCP) to Unified Payments diff --git a/src/Gateways/AbstractGateway.php b/src/Gateways/AbstractGateway.php index 8dab7c9..b10dc21 100644 --- a/src/Gateways/AbstractGateway.php +++ b/src/Gateways/AbstractGateway.php @@ -315,6 +315,14 @@ public function tokenization_script() { WC()->version, true ); + + wp_localize_script( + 'globalpayments-helper', + 'globalpayments_helper_params', + array( + 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_order_info' ), + ) + ); // Global Payments scripts for handling client-side tokenization wp_enqueue_script( @@ -365,7 +373,6 @@ public function tokenization_script() { 'challengeNotificationUrl' => WC()->api_request_url( 'globalpayments_threedsecure_challengenotification' ), 'checkEnrollmentUrl' => WC()->api_request_url( 'globalpayments_threedsecure_checkenrollment' ), 'initiateAuthenticationUrl' => WC()->api_request_url( 'globalpayments_threedsecure_initiateauthentication' ), - 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_threedsecure_order_info' ), 'ajaxCheckoutUrl' => \WC_AJAX::get_endpoint( 'checkout' ), ) ) @@ -744,6 +751,11 @@ protected function add_hooks() { add_filter( 'woocommerce_credit_card_form_fields', array( $this, 'woocommerce_credit_card_form_fields' ) ); } + add_action( 'woocommerce_api_globalpayments_order_info', array( + $this, + 'get_order_info' + ) ); + if ( is_add_payment_method_page() ) { if ( ! $this->is_digital_wallet ) { add_action( 'wp_enqueue_scripts', array( $this, 'tokenization_script' ) ); @@ -1051,6 +1063,27 @@ public static function addCaptureOrderAction( $actions ) { return $actions; } + public function get_order_info() { + if ( ( 'GET' !== $_SERVER['REQUEST_METHOD'] ) ) { + return; + } + + $response = new \stdClass(); + $response->amount = $this->get_session_amount(); + $response->currency = get_woocommerce_currency(); + + wp_send_json( [ + 'error' => false, + 'message' => $response, + ] ); + } + + public function get_session_amount() { + $cart_totals = WC()->session->get( 'cart_totals' ); + + return round( $cart_totals['total'], 2 ); + } + /** * Disable adding new cards via 'My Account', if a Digital Wallet or "Allow Card Saving" option not checked in admin. * diff --git a/src/Gateways/ApplePayGateway.php b/src/Gateways/ApplePayGateway.php index a62f986..9da851a 100644 --- a/src/Gateways/ApplePayGateway.php +++ b/src/Gateways/ApplePayGateway.php @@ -210,12 +210,6 @@ public function payment_fields() { } } - protected function get_session_amount() { - $cart_totals = WC()->session->get( 'cart_totals' ); - - return round( $cart_totals['total'], 2 ); - } - public function validate_merchant() { $responseValidationUrl = json_decode( file_get_contents( 'php://input' ) ); if ( empty($responseValidationUrl) ) { @@ -315,15 +309,6 @@ public function tokenization_script() { ) ); - wp_localize_script( - 'globalpayments-wc-applepay', - 'globalpayments_order', - array( - 'amount' => (string) $this->get_session_amount(), - 'currency' => get_woocommerce_currency(), - ) - ); - wp_enqueue_style( 'globalpayments-applepay', Plugin::get_url( '/assets/frontend/css/globalpayments-applepay.css' ), diff --git a/src/Gateways/GooglePayGateway.php b/src/Gateways/GooglePayGateway.php index 326045c..a950ddd 100644 --- a/src/Gateways/GooglePayGateway.php +++ b/src/Gateways/GooglePayGateway.php @@ -206,15 +206,6 @@ public function tokenization_script() { 'gateway_options' => $this->get_frontend_gateway_options(), ) ); - - wp_localize_script( - 'globalpayments-wc-googlepay', - 'globalpayments_order', - array( - 'amount' => (string) $this->get_session_amount(), - 'currency' => get_woocommerce_currency(), - ) - ); } public function payment_fields() { @@ -224,12 +215,6 @@ public function payment_fields() { } } - protected function get_session_amount() { - $cart_totals = WC()->session->get( 'cart_totals' ); - - return round( $cart_totals['total'], 2 ); - } - public function mapResponseCodeToFriendlyMessage( $responseCode ) { if ( 'DECLINED' === $responseCode ) { return __( 'Your card has been declined by the bank.', 'globalpayments-gateway-provider-for-woocommerce' ); diff --git a/src/Gateways/GpApiGateway.php b/src/Gateways/GpApiGateway.php index b6edce3..8d86778 100644 --- a/src/Gateways/GpApiGateway.php +++ b/src/Gateways/GpApiGateway.php @@ -236,10 +236,6 @@ protected function add_hooks() { $this, 'process_threeDSecure_challengeNotification' ) ); - add_action( 'woocommerce_api_globalpayments_threedsecure_order_info', array( - $this, - 'get_threeDSecure_order_info' - ) ); } public function woocommerce_globalpayments_gpapi_settings( $settings ) { @@ -385,25 +381,4 @@ public function process_threeDSecure_challengeNotification() { ] ); } } - - public function get_threeDSecure_order_info() { - if ( ( 'GET' !== $_SERVER['REQUEST_METHOD'] ) ) { - return; - } - - $response = new \stdClass(); - $response->amount = $this->get_session_amount(); - $response->currency = get_woocommerce_currency(); - - wp_send_json( [ - 'error' => false, - 'message' => $response, - ] ); - } - - protected function get_session_amount() { - $cart_totals = WC()->session->get( 'cart_totals' ); - - return round( $cart_totals['total'], 2 ); - } } From 23ad249d7afde88dbcc1d99681987a25462a9988 Mon Sep 17 00:00:00 2001 From: Andrei Humulescu Date: Fri, 3 Jun 2022 11:36:32 +0300 Subject: [PATCH 15/18] TR-66: [WooCommerce]: Added default value for order --- assets/frontend/js/globalpayments-helper.js | 2 +- src/Gateways/AbstractGateway.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/frontend/js/globalpayments-helper.js b/assets/frontend/js/globalpayments-helper.js index 689afd3..2bea7ff 100644 --- a/assets/frontend/js/globalpayments-helper.js +++ b/assets/frontend/js/globalpayments-helper.js @@ -15,7 +15,7 @@ * * @type {object} */ - this.order = {}; + this.order = options.order; this.attachEventHandlers(); }; diff --git a/src/Gateways/AbstractGateway.php b/src/Gateways/AbstractGateway.php index b10dc21..4586eae 100644 --- a/src/Gateways/AbstractGateway.php +++ b/src/Gateways/AbstractGateway.php @@ -321,6 +321,10 @@ public function tokenization_script() { 'globalpayments_helper_params', array( 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_order_info' ), + 'order' => array( + 'amount' => $this->get_session_amount(), + 'currency' => get_woocommerce_currency(), + ) ) ); From 7475c3a1a2ddd0d6eebc7f40e653727604214042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mart=C3=ADn=20Cracogna?= Date: Mon, 6 Jun 2022 12:03:25 -0300 Subject: [PATCH 16/18] Change version to 1.2.2 --- globalpayments-gateway-provider-for-woocommerce.php | 2 +- readme.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/globalpayments-gateway-provider-for-woocommerce.php b/globalpayments-gateway-provider-for-woocommerce.php index 6ab9a79..5ef85dc 100644 --- a/globalpayments-gateway-provider-for-woocommerce.php +++ b/globalpayments-gateway-provider-for-woocommerce.php @@ -3,7 +3,7 @@ * Plugin Name: GlobalPayments WooCommerce * Plugin URI: https://github.com/globalpayments/globalpayments-woocommerce * Description: This extension allows WooCommerce to use the available Global Payments payment gateways. All card data is tokenized using the respective gateway's tokenization service. - * Version: 1.2.1 + * Version: 1.2.2 * Requires PHP: 5.5.9 * WC tested up to: 6.3.1 * Author: Global Payments diff --git a/readme.txt b/readme.txt index 0e441c4..5a01aef 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: globalpayments Tags: woocommerce, woo, unified, commerce, platform, global, payments, heartland, payment, systems, tsys, genius, 3DS, gateway, token, tokenize, save cards Requires at least: 5.4 Tested up to: 5.9.3 -Stable tag: 1.2.1 +Stable tag: 1.2.2 License: MIT License URI: https://github.com/globalpayments/globalpayments-woocommerce/blob/main/LICENSE @@ -48,7 +48,7 @@ Access to our Unified Payments requires sandbox credentials which you can retrie == Changelog == = 1.2.2 = -* Bug fix - 3DS/Digital Wallets amount not updated when a customer added/removed a coupon +* Bug fix - 3DS/Digital Wallets amount not updated when a customer added/removed a coupon = 1.2.1 = * Renamed Unified Commerce Platform (UCP) to Unified Payments From 3ba7e4c119f65606f5f3102791bf352f31d53d08 Mon Sep 17 00:00:00 2001 From: Andrei Humulescu Date: Wed, 8 Jun 2022 12:21:10 +0300 Subject: [PATCH 17/18] TR-66: [WooCommerce]: Updated the events for the helper --- assets/frontend/js/globalpayments-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/frontend/js/globalpayments-helper.js b/assets/frontend/js/globalpayments-helper.js index 2bea7ff..bcb58d5 100644 --- a/assets/frontend/js/globalpayments-helper.js +++ b/assets/frontend/js/globalpayments-helper.js @@ -30,7 +30,7 @@ var self = this; $( document.body ).on( - 'updated_checkout', + 'applied_coupon_in_checkout removed_coupon_in_checkout', function () { self.blockOnSubmit(); From 70d1dd43e7f5e17c5fae1c6c119c6d8451807ae7 Mon Sep 17 00:00:00 2001 From: Andrei Humulescu Date: Wed, 8 Jun 2022 12:35:12 +0300 Subject: [PATCH 18/18] TR-66: [WooCommerce]: Added Helper params for Google Pay and Apple Pay --- src/Gateways/ApplePayGateway.php | 12 ++++++++++++ src/Gateways/GooglePayGateway.php | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/Gateways/ApplePayGateway.php b/src/Gateways/ApplePayGateway.php index 9da851a..bb3302c 100644 --- a/src/Gateways/ApplePayGateway.php +++ b/src/Gateways/ApplePayGateway.php @@ -292,6 +292,18 @@ public function tokenization_script() { true ); + wp_localize_script( + 'globalpayments-helper', + 'globalpayments_helper_params', + array( + 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_order_info' ), + 'order' => array( + 'amount' => $this->get_session_amount(), + 'currency' => get_woocommerce_currency(), + ) + ) + ); + wp_enqueue_script( 'globalpayments-wc-applepay', Plugin::get_url( '/assets/frontend/js/globalpayments-applepay.js' ), diff --git a/src/Gateways/GooglePayGateway.php b/src/Gateways/GooglePayGateway.php index a950ddd..dbca869 100644 --- a/src/Gateways/GooglePayGateway.php +++ b/src/Gateways/GooglePayGateway.php @@ -190,6 +190,18 @@ public function tokenization_script() { true ); + wp_localize_script( + 'globalpayments-helper', + 'globalpayments_helper_params', + array( + 'orderInfoUrl' => WC()->api_request_url( 'globalpayments_order_info' ), + 'order' => array( + 'amount' => $this->get_session_amount(), + 'currency' => get_woocommerce_currency(), + ) + ) + ); + wp_enqueue_script( 'globalpayments-wc-googlepay', Plugin::get_url( '/assets/frontend/js/globalpayments-googlepay.js' ),