From b5697966b544956c11a97807c957d716f613e57d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 22 Jul 2021 11:30:16 +1000 Subject: [PATCH 01/38] eway --- app/Models/Gateway.php | 3 + app/PaymentDrivers/Eway/CreditCard.php | 58 ++++++++++ app/PaymentDrivers/EwayPaymentDriver.php | 104 ++++++++++++++++++ app/PaymentDrivers/Sample/CreditCard.php | 72 ++++++++++++ .../PaymentDriver.php} | 7 +- .../Sample/resources/authorize.blade.php | 34 ++++++ .../Sample/resources/pay.blade.php | 64 +++++++++++ composer.json | 1 + composer.lock | 60 +++++++++- ...21_234227_activate_eway_payment_driver.php | 35 ++++++ database/seeders/PaymentLibrariesSeeder.php | 4 +- .../gateways/eway/authorize.blade.php | 34 ++++++ 12 files changed, 468 insertions(+), 8 deletions(-) create mode 100644 app/PaymentDrivers/Eway/CreditCard.php create mode 100644 app/PaymentDrivers/EwayPaymentDriver.php create mode 100644 app/PaymentDrivers/Sample/CreditCard.php rename app/PaymentDrivers/{DriverTemplate.php => Sample/PaymentDriver.php} (89%) create mode 100644 app/PaymentDrivers/Sample/resources/authorize.blade.php create mode 100644 app/PaymentDrivers/Sample/resources/pay.blade.php create mode 100644 database/migrations/2021_07_21_234227_activate_eway_payment_driver.php create mode 100644 resources/views/portal/ninja2020/gateways/eway/authorize.blade.php diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 32fc20999409..a99f27d737e1 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -81,6 +81,9 @@ class Gateway extends StaticModel case 1: return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]];//Authorize.net break; + case 3: + return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]];//eWay + break; case 15: return [GatewayType::PAYPAL => ['refund' => true, 'token_billing' => false]]; //Paypal break; diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php new file mode 100644 index 000000000000..8a4d5a07a248 --- /dev/null +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -0,0 +1,58 @@ +eway = $eway; + } + + public function authorizeView($data) + { + + } + + public function authorizeRequest($request) + { + + } + + public function paymentView($data) + { + + } + + public function processPaymentResponse($request) + { + + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php new file mode 100644 index 000000000000..a96fd503bdaa --- /dev/null +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -0,0 +1,104 @@ + CreditCard::class, //maps GatewayType => Implementation class + ]; + + const SYSTEM_LOG_TYPE = SystemLog::TYPE_STRIPE; //define a constant for your gateway ie TYPE_YOUR_CUSTOM_GATEWAY - set the const in the SystemLog model + + public function init() + { + $apiKey = $this->company_gateway->getConfigField('apiKey'); + $password = $this->company_gateway->getConfigField('password'); + $apiEndpoint = $this->company_gateway->getConfigField('testMode') ? \Eway\Rapid\Client::MODE_SANDBOX : \Eway\Rapid\Client::MODE_PRODUCTION; + $this->eway = \Eway\Rapid::createClient($apiKey, $apiPassword, $apiEndpoint); + + return $this; + } + + /* Returns an array of gateway types for the payment gateway */ + public function gatewayTypes(): array + { + $types = []; + + $types[] = GatewayType::CREDIT_CARD; + + return $types; + } + + /* Sets the payment method initialized */ + public function setPaymentMethod($payment_method_id) + { + $class = self::$methods[$payment_method_id]; + $this->payment_method = new $class($this); + return $this; + } + + public function authorizeView(array $data) + { + return $this->payment_method->authorizeView($data); //this is your custom implementation from here + } + + public function authorizeResponse($request) + { + return $this->payment_method->authorizeResponse($request); //this is your custom implementation from here + } + + public function processPaymentView(array $data) + { + return $this->payment_method->paymentView($data); //this is your custom implementation from here + } + + public function processPaymentResponse($request) + { + return $this->payment_method->paymentResponse($request); //this is your custom implementation from here + } + + public function refund(Payment $payment, $amount, $return_client_response = false) + { + return $this->payment_method->yourRefundImplementationHere(); //this is your custom implementation from here + } + + public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) + { + return $this->payment_method->yourTokenBillingImplmentation(); //this is your custom implementation from here + } + + public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) + { + } +} diff --git a/app/PaymentDrivers/Sample/CreditCard.php b/app/PaymentDrivers/Sample/CreditCard.php new file mode 100644 index 000000000000..12e4d872bfcd --- /dev/null +++ b/app/PaymentDrivers/Sample/CreditCard.php @@ -0,0 +1,72 @@ +driver_class = $driver_class; + } + + public function authorizeView($data) + { + + } + + public function authorizeRequest($request) + { + + } + + public function paymentView($data) + { + + } + + public function processPaymentResponse($request) + { + + } + + + /* Helpers */ + + /* + You will need some helpers to handle successful and unsuccessful responses + + Some considerations after a succesful transaction include: + + Logging of events: success +/- failure + Recording a payment + Notifications + */ + + +} \ No newline at end of file diff --git a/app/PaymentDrivers/DriverTemplate.php b/app/PaymentDrivers/Sample/PaymentDriver.php similarity index 89% rename from app/PaymentDrivers/DriverTemplate.php rename to app/PaymentDrivers/Sample/PaymentDriver.php index 36c0f9bf5b72..401ceec3aed9 100644 --- a/app/PaymentDrivers/DriverTemplate.php +++ b/app/PaymentDrivers/Sample/PaymentDriver.php @@ -17,10 +17,9 @@ use App\Models\GatewayType; use App\Models\Payment; use App\Models\PaymentHash; use App\Models\SystemLog; -use App\PaymentDrivers\Stripe\CreditCard; use App\Utils\Traits\MakesHash; -class DriverTemplate extends BaseDriver +class PaymentDriver extends BaseDriver { use MakesHash; @@ -85,12 +84,12 @@ class DriverTemplate extends BaseDriver public function refund(Payment $payment, $amount, $return_client_response = false) { - return $this->payment_method->yourRefundImplementationHere(); //this is your custom implementation from here + //this is your custom implementation from here } public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) { - return $this->payment_method->yourTokenBillingImplmentation(); //this is your custom implementation from here + //this is your custom implementation from here } public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) diff --git a/app/PaymentDrivers/Sample/resources/authorize.blade.php b/app/PaymentDrivers/Sample/resources/authorize.blade.php new file mode 100644 index 000000000000..74773c67172a --- /dev/null +++ b/app/PaymentDrivers/Sample/resources/authorize.blade.php @@ -0,0 +1,34 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.credit_card')]) + +@section('gateway_head') +@endsection + +@section('gateway_content') +
+ + @if(!Request::isSecure()) +

{{ ctrans('texts.https_required') }}

+ @endif + + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.method')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + +
+ +
+ +
+@endsection + +@section('gateway_footer') + +@endsection diff --git a/app/PaymentDrivers/Sample/resources/pay.blade.php b/app/PaymentDrivers/Sample/resources/pay.blade.php new file mode 100644 index 000000000000..4f8841bca6bb --- /dev/null +++ b/app/PaymentDrivers/Sample/resources/pay.blade.php @@ -0,0 +1,64 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.credit_card')]) + +@section('gateway_head') +@endsection + +@section('gateway_content') +
+ + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.method')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + + @include('portal.ninja2020.gateways.includes.payment_details') + + <-- If there are existing tokens available these are displayed here for you --> + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) + @if(count($tokens) > 0) + @foreach($tokens as $token) + + @endforeach + @endisset + + + @endcomponent + + + @include('portal.ninja2020.gateways.includes.save_card') + + + @include('portal.ninja2020.gateways.wepay.includes.credit_card') + + @include('portal.ninja2020.gateways.includes.pay_now') + +
+@endsection + +@section('gateway_footer') + +@endsection + diff --git a/composer.json b/composer.json index 151dd8239ab6..9eb6220ab516 100644 --- a/composer.json +++ b/composer.json @@ -41,6 +41,7 @@ "codedge/laravel-selfupdater": "^3.2", "composer/composer": "^2", "doctrine/dbal": "^2.10", + "eway/eway-rapid-php": "^1.3", "fakerphp/faker": "^1.14", "fideloper/proxy": "^4.2", "fruitcake/laravel-cors": "^2.0", diff --git a/composer.lock b/composer.lock index 15b58365b9a7..243a75a5c5d6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d2beb37ff5fbee59ad4bb792e944eb10", + "content-hash": "c9f7d76428c6f556ae531570b7761bf5", "packages": [ { "name": "asm/php-ansible", @@ -1964,6 +1964,62 @@ ], "time": "2020-12-29T14:50:06+00:00" }, + { + "name": "eway/eway-rapid-php", + "version": "v1.3.4", + "source": { + "type": "git", + "url": "https://github.com/eWAYPayment/eway-rapid-php.git", + "reference": "5b765d83ef69e1783f391ae85aed48d47dd5f8eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/eWAYPayment/eway-rapid-php/zipball/5b765d83ef69e1783f391ae85aed48d47dd5f8eb", + "reference": "5b765d83ef69e1783f391ae85aed48d47dd5f8eb", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "internations/http-mock": "~0.7", + "jeremeamia/superclosure": "1.0.2", + "phpdocumentor/phpdocumentor": "~2.8", + "phpunit/phpunit": "4.8.*", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Eway\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "eWAY", + "homepage": "https://www.eway.com.au" + } + ], + "description": "eWAY Rapid PHP library", + "homepage": "https://www.eway.com.au", + "keywords": [ + "eway", + "payment processing", + "payments", + "rapid" + ], + "support": { + "issues": "https://github.com/eWAYPayment/eway-rapid-php/issues", + "source": "https://github.com/eWAYPayment/eway-rapid-php/tree/master" + }, + "time": "2016-09-12T05:46:41+00:00" + }, { "name": "fakerphp/faker", "version": "v1.15.0", @@ -14881,5 +14937,5 @@ "platform-dev": { "php": "^7.3|^7.4|^8.0" }, - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.0.0" } diff --git a/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php b/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php new file mode 100644 index 000000000000..18b23cb826d1 --- /dev/null +++ b/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php @@ -0,0 +1,35 @@ +visible = true; + $eway->provider = 'Eway'; + $eway->save(); + } + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index b9ff0f84146f..4a5374beb2d5 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -27,7 +27,7 @@ class PaymentLibrariesSeeder extends Seeder '], ['id' => 2, 'name' => 'CardSave', 'provider' => 'CardSave', 'key' => '46c5c1fed2c43acf4f379bae9c8b9f76', 'fields' => '{"merchantId":"","password":""} '], - ['id' => 3, 'name' => 'Eway Rapid', 'provider' => 'Eway_RapidShared', 'is_offsite' => true, 'key' => '944c20175bbe6b9972c05bcfe294c2c7', 'fields' => '{"apiKey":"","password":"","testMode":false}'], + ['id' => 3, 'name' => 'Eway Rapid', 'provider' => 'Eway', 'is_offsite' => true, 'key' => '944c20175bbe6b9972c05bcfe294c2c7', 'fields' => '{"apiKey":"","password":"","testMode":false}'], ['id' => 4, 'name' => 'FirstData Connect', 'provider' => 'FirstData_Connect', 'key' => '4e0ed0d34552e6cb433506d1ac03a418', 'fields' => '{"storeId":"","sharedSecret":"","testMode":false}'], ['id' => 5, 'name' => 'Migs ThreeParty', 'provider' => 'Migs_ThreeParty', 'key' => '513cdc81444c87c4b07258bc2858d3fa', 'fields' => '{"merchantId":"","merchantAccessCode":"","secureHash":""}'], ['id' => 6, 'name' => 'Migs TwoParty', 'provider' => 'Migs_TwoParty', 'key' => '99c2a271b5088951334d1302e038c01a', 'fields' => '{"merchantId":"","merchantAccessCode":"","secureHash":""}'], @@ -96,7 +96,7 @@ class PaymentLibrariesSeeder extends Seeder Gateway::query()->update(['visible' => 0]); - Gateway::whereIn('id', [1,15,20,39,55,50])->update(['visible' => 1]); + Gateway::whereIn('id', [1,3,15,20,39,55,50])->update(['visible' => 1]); if (Ninja::isHosted()) { Gateway::whereIn('id', [20])->update(['visible' => 0]); diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php new file mode 100644 index 000000000000..74773c67172a --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -0,0 +1,34 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.credit_card')]) + +@section('gateway_head') +@endsection + +@section('gateway_content') +
+ + @if(!Request::isSecure()) +

{{ ctrans('texts.https_required') }}

+ @endif + + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.method')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + +
+ +
+ +
+@endsection + +@section('gateway_footer') + +@endsection From 437bb735d6baf206f8dec3b290d0628feea1c67b Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 22 Jul 2021 16:05:58 +1000 Subject: [PATCH 02/38] Working on eWay --- app/Models/SystemLog.php | 2 +- app/PaymentDrivers/Eway/CreditCard.php | 27 +++++++- app/PaymentDrivers/EwayPaymentDriver.php | 2 +- ...21_234227_activate_eway_payment_driver.php | 5 ++ database/seeders/PaymentLibrariesSeeder.php | 2 +- .../gateways/eway/authorize.blade.php | 69 ++++++++++++++++++- .../eway/includes/credit_card.blade.php | 15 ++++ 7 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 resources/views/portal/ninja2020/gateways/eway/includes/credit_card.blade.php diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index 7614c01ecccc..4e0f739af243 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -68,7 +68,7 @@ class SystemLog extends Model const TYPE_BRAINTREE = 307; const TYPE_WEPAY = 309; const TYPE_PAYFAST = 310; - + const TYPE_EWAY = 311; const TYPE_QUOTA_EXCEEDED = 400; const TYPE_UPSTREAM_FAILURE = 401; diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index 8a4d5a07a248..c4d68ba37af6 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -29,21 +29,42 @@ use Illuminate\Support\Str; class CreditCard { - public $eway; + public $eway_driver; - public function __construct(EwayPaymentDriver $eway) + public function __construct(EwayPaymentDriver $eway_driver) { - $this->eway = $eway; + $this->eway_driver = $eway_driver; } public function authorizeView($data) { + $data['gateway'] = $this->eway_driver; + $data['api_key'] = $this->eway_driver->company_gateway->getConfigField('apiKey'); + $data['public_api_key'] = 'epk-8C1675E6-8E07-4C86-8946-71B3DE390F44'; + + return render('gateways.eway.authorize', $data); + } public function authorizeRequest($request) { + $transaction = [ + 'Title' => 'Mr.', + 'FirstName' => 'John', + 'LastName' => 'Smith', + 'Country' => 'au', + 'Payment' => [ + 'TotalAmount' => 0, + ], + 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, + 'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER, + 'SecuredCardData' => $request->input('SecuredCardData'), + ]; + + $response = $client->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + } public function paymentView($data) diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index a96fd503bdaa..925d1df9589d 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -38,7 +38,7 @@ class EwayPaymentDriver extends BaseDriver GatewayType::CREDIT_CARD => CreditCard::class, //maps GatewayType => Implementation class ]; - const SYSTEM_LOG_TYPE = SystemLog::TYPE_STRIPE; //define a constant for your gateway ie TYPE_YOUR_CUSTOM_GATEWAY - set the const in the SystemLog model + const SYSTEM_LOG_TYPE = SystemLog::TYPE_EWAY; //define a constant for your gateway ie TYPE_YOUR_CUSTOM_GATEWAY - set the const in the SystemLog model public function init() { diff --git a/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php b/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php index 18b23cb826d1..a0fc56152ddd 100644 --- a/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php +++ b/database/migrations/2021_07_21_234227_activate_eway_payment_driver.php @@ -18,6 +18,11 @@ class ActivateEwayPaymentDriver extends Migration { $eway->visible = true; $eway->provider = 'Eway'; + + $fields = json_decode($eway->fields); + $fields->publicApiKey = ''; + $eway->fields = json_encode($fields); + $eway->save(); } diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index 4a5374beb2d5..d90c4692f657 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -27,7 +27,7 @@ class PaymentLibrariesSeeder extends Seeder '], ['id' => 2, 'name' => 'CardSave', 'provider' => 'CardSave', 'key' => '46c5c1fed2c43acf4f379bae9c8b9f76', 'fields' => '{"merchantId":"","password":""} '], - ['id' => 3, 'name' => 'Eway Rapid', 'provider' => 'Eway', 'is_offsite' => true, 'key' => '944c20175bbe6b9972c05bcfe294c2c7', 'fields' => '{"apiKey":"","password":"","testMode":false}'], + ['id' => 3, 'name' => 'Eway Rapid', 'provider' => 'Eway', 'is_offsite' => true, 'key' => '944c20175bbe6b9972c05bcfe294c2c7', 'fields' => '{"apiKey":"","password":"","publicApiKey":"",testMode":false}'], ['id' => 4, 'name' => 'FirstData Connect', 'provider' => 'FirstData_Connect', 'key' => '4e0ed0d34552e6cb433506d1ac03a418', 'fields' => '{"storeId":"","sharedSecret":"","testMode":false}'], ['id' => 5, 'name' => 'Migs ThreeParty', 'provider' => 'Migs_ThreeParty', 'key' => '513cdc81444c87c4b07258bc2858d3fa', 'fields' => '{"merchantId":"","merchantAccessCode":"","secureHash":""}'], ['id' => 6, 'name' => 'Migs TwoParty', 'provider' => 'Migs_TwoParty', 'key' => '99c2a271b5088951334d1302e038c01a', 'fields' => '{"merchantId":"","merchantAccessCode":"","secureHash":""}'], diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php index 74773c67172a..55912ed4724f 100644 --- a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -4,8 +4,10 @@ @endsection @section('gateway_content') -
- + + + + @if(!Request::isSecure())

{{ ctrans('texts.https_required') }}

@endif @@ -17,6 +19,8 @@ {{ ctrans('texts.credit_card') }} @endcomponent + @include('portal.ninja2020.gateways.eway.includes.credit_card') +
-
- -
+ @component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-card']) + {{ ctrans('texts.add_payment_method') }} + @endcomponent + @endsection @section('gateway_footer') - - + + - - + document + .getElementById('authorize-card') + .addEventListener('click', () => { + console.log('Clicked..'); + // document.getElementById('server_response').submit(); + }); + @endsection From 99e9d6d977c7357d3198ee7507c07207024a16bb Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 26 Jul 2021 13:33:03 +1000 Subject: [PATCH 05/38] Change eway implmentation --- app/PaymentDrivers/Eway/CreditCard.php | 23 +- app/PaymentDrivers/EwayPaymentDriver.php | 6 +- .../gateways/eway/authorize.blade.php | 358 +++++++++++++++--- 3 files changed, 326 insertions(+), 61 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index c4d68ba37af6..426b19834a1d 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -41,20 +41,34 @@ class CreditCard $data['gateway'] = $this->eway_driver; $data['api_key'] = $this->eway_driver->company_gateway->getConfigField('apiKey'); - $data['public_api_key'] = 'epk-8C1675E6-8E07-4C86-8946-71B3DE390F44'; + $data['public_api_key'] = $this->eway_driver->company_gateway->getConfigField('publicApiKey'); return render('gateways.eway.authorize', $data); } - public function authorizeRequest($request) + public function authorizeResponse($request) { - $transaction = [ + $this->eway_driver->init(); + + $transaction = [ + 'Reference' => 'A12345', 'Title' => 'Mr.', 'FirstName' => 'John', 'LastName' => 'Smith', + 'CompanyName' => 'Demo Shop 123', + 'JobDescription' => 'PHP Developer', + 'Street1' => 'Level 5', + 'Street2' => '369 Queen Street', + 'City' => 'Sydney', + 'State' => 'NSW', + 'PostalCode' => '2000', 'Country' => 'au', + 'Phone' => '09 889 0986', + 'Mobile' => '09 889 6542', + 'Email' => 'demo@example.org', + "Url" => "http://www.ewaypayments.com", 'Payment' => [ 'TotalAmount' => 0, ], @@ -63,8 +77,9 @@ class CreditCard 'SecuredCardData' => $request->input('SecuredCardData'), ]; - $response = $client->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); +dd($response); } public function paymentView($data) diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 925d1df9589d..7ed47e69e525 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -43,7 +43,7 @@ class EwayPaymentDriver extends BaseDriver public function init() { $apiKey = $this->company_gateway->getConfigField('apiKey'); - $password = $this->company_gateway->getConfigField('password'); + $apiPassword = $this->company_gateway->getConfigField('password'); $apiEndpoint = $this->company_gateway->getConfigField('testMode') ? \Eway\Rapid\Client::MODE_SANDBOX : \Eway\Rapid\Client::MODE_PRODUCTION; $this->eway = \Eway\Rapid::createClient($apiKey, $apiPassword, $apiEndpoint); @@ -70,12 +70,12 @@ class EwayPaymentDriver extends BaseDriver public function authorizeView(array $data) { - return $this->payment_method->authorizeView($data); //this is your custom implementation from here + return $this->payment_method->authorizeView($data); } public function authorizeResponse($request) { - return $this->payment_method->authorizeResponse($request); //this is your custom implementation from here + return $this->payment_method->authorizeResponse($request); } public function processPaymentView(array $data) diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php index 1730abdf596e..1081a9980942 100644 --- a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -7,9 +7,12 @@ ctrans('texts.credit_card')]) @section('gateway_content')
+ @csrf - + + + @if (!Request::isSecure())

{{ ctrans('texts.https_required') }}

@endif @@ -21,7 +24,7 @@ ctrans('texts.credit_card')]) {{ ctrans('texts.credit_card') }} @endcomponent - @include('portal.ninja2020.gateways.eway.includes.credit_card') +
@component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-card']) {{ ctrans('texts.add_payment_method') }} @@ -31,63 +34,310 @@ ctrans('texts.credit_card')]) @section('gateway_footer') - + - +function doneCallback() { + console.log("done callback"); + var form = document.getElementById("payment_form"); + form.submit(); +} + +function saveAndSubmit() { + eWAY.saveAllFields(doneCallback, 2000); + return false; +} + +document +.getElementById('authorize-card') +.addEventListener('click', () => { + + saveAndSubmit(); + +}); + +function getError(k){ + myArr = k.split(" "); + + var str = ""; + + for(error in myArr){ + str = str.concat(map.get(myArr[error])) + '\n'; + } + + return str; +} + +const map = new Map(); +map.set('V6000', 'Validation error'); +map.set('V6001', 'Invalid CustomerIP'); +map.set('V6002', 'Invalid DeviceID'); +map.set('V6003', 'Invalid Request PartnerID'); +map.set('V6004', 'Invalid Request Method'); +map.set('V6010', 'Invalid TransactionType, account not certified for eCome only MOTO or Recurring available'); +map.set('V6011', 'Invalid Payment TotalAmount'); +map.set('V6012', 'Invalid Payment InvoiceDescription'); +map.set('V6013', 'Invalid Payment InvoiceNumber'); +map.set('V6014', 'Invalid Payment InvoiceReference'); +map.set('V6015', 'Invalid Payment CurrencyCode'); +map.set('V6016', 'Payment Required'); +map.set('V6017', 'Payment CurrencyCode Required'); +map.set('V6018', 'Unknown Payment CurrencyCode'); +map.set('V6019', 'Cardholder identity authentication required'); +map.set('V6020', 'Cardholder Input Required'); +map.set('V6021', 'EWAY_CARDHOLDERNAME Required'); +map.set('V6022', 'EWAY_CARDNUMBER Required'); +map.set('V6023', 'EWAY_CARDCVN Required'); +map.set('V6024', 'Cardholder Identity Authentication One Time Password Not Active Yet'); +map.set('V6025', 'PIN Required'); +map.set('V6033', 'Invalid Expiry Date'); +map.set('V6034', 'Invalid Issue Number'); +map.set('V6035', 'Invalid Valid From Date'); +map.set('V6039', 'Invalid Network Token Status'); +map.set('V6040', 'Invalid TokenCustomerID'); +map.set('V6041', 'Customer Required'); +map.set('V6042', 'Customer FirstName Required'); +map.set('V6043', 'Customer LastName Required'); +map.set('V6044', 'Customer CountryCode Required'); +map.set('V6045', 'Customer Title Required'); +map.set('V6046', 'TokenCustomerID Required'); +map.set('V6047', 'RedirectURL Required'); +map.set('V6048', 'CheckoutURL Required when CheckoutPayment specified'); +map.set('V6049', 'nvalid Checkout URL'); +map.set('V6051', 'Invalid Customer FirstName'); +map.set('V6052', 'Invalid Customer LastName'); +map.set('V6053', 'Invalid Customer CountryCode'); +map.set('V6058', 'Invalid Customer Title'); +map.set('V6059', 'Invalid RedirectURL'); +map.set('V6060', 'Invalid TokenCustomerID'); +map.set('V6061', 'Invalid Customer Reference'); +map.set('V6062', 'Invalid Customer CompanyName'); +map.set('V6063', 'Invalid Customer JobDescription'); +map.set('V6064', 'Invalid Customer Street1'); +map.set('V6065', 'Invalid Customer Street2'); +map.set('V6066', 'Invalid Customer City'); +map.set('V6067', 'Invalid Customer State'); +map.set('V6068', 'Invalid Customer PostalCode'); +map.set('V6069', 'Invalid Customer Email'); +map.set('V6070', 'Invalid Customer Phone'); +map.set('V6071', 'Invalid Customer Mobile'); +map.set('V6072', 'Invalid Customer Comments'); +map.set('V6073', 'Invalid Customer Fax'); +map.set('V6074', 'Invalid Customer URL'); +map.set('V6075', 'Invalid ShippingAddress FirstName'); +map.set('V6076', 'Invalid ShippingAddress LastName'); +map.set('V6077', 'Invalid ShippingAddress Street1'); +map.set('V6078', 'Invalid ShippingAddress Street2'); +map.set('V6079', 'Invalid ShippingAddress City'); +map.set('V6080', 'Invalid ShippingAddress State'); +map.set('V6081', 'Invalid ShippingAddress PostalCode'); +map.set('V6082', 'Invalid ShippingAddress Email'); +map.set('V6083', 'Invalid ShippingAddress Phone'); +map.set('V6084', 'Invalid ShippingAddress Country'); +map.set('V6085', 'Invalid ShippingAddress ShippingMethod'); +map.set('V6086', 'Invalid ShippingAddress Fax'); +map.set('V6091', 'Unknown Customer CountryCode'); +map.set('V6092', 'Unknown ShippingAddress CountryCode'); +map.set('V6093', 'Insufficient Address Information'); +map.set('V6100', 'Invalid EWAY_CARDNAME'); +map.set('V6101', 'Invalid EWAY_CARDEXPIRYMONTH'); +map.set('V6102', 'Invalid EWAY_CARDEXPIRYYEAR'); +map.set('V6103', 'Invalid EWAY_CARDSTARTMONTH'); +map.set('V6104', 'Invalid EWAY_CARDSTARTYEAR'); +map.set('V6105', 'Invalid EWAY_CARDISSUENUMBER'); +map.set('V6106', 'Invalid EWAY_CARDCVN'); +map.set('V6107', 'Invalid EWAY_ACCESSCODE'); +map.set('V6108', 'Invalid CustomerHostAddress'); +map.set('V6109', 'Invalid UserAgent'); +map.set('V6110', 'Invalid EWAY_CARDNUMBER'); +map.set('V6111', 'Unauthorised API Access, Account Not PCI Certified'); +map.set('V6112', 'Redundant card details other than expiry year and month'); +map.set('V6113', 'Invalid transaction for refund'); +map.set('V6114', 'Gateway validation error'); +map.set('V6115', 'Invalid DirectRefundRequest, Transaction ID'); +map.set('V6116', 'Invalid card data on original TransactionID'); +map.set('V6117', 'Invalid CreateAccessCodeSharedRequest, FooterText'); +map.set('V6118', 'Invalid CreateAccessCodeSharedRequest, HeaderText'); +map.set('V6119', 'Invalid CreateAccessCodeSharedRequest, Language'); +map.set('V6120', 'Invalid CreateAccessCodeSharedRequest, LogoUrl'); +map.set('V6121', 'Invalid TransactionSearch, Filter Match Type'); +map.set('V6122', 'Invalid TransactionSearch, Non numeric Transaction ID'); +map.set('V6123', 'Invalid TransactionSearch,no TransactionID or AccessCode specified'); +map.set('V6124', 'Invalid Line Items. The line items have been provided however the totals do not match the TotalAmount field'); +map.set('V6125', 'Selected Payment Type not enabled'); +map.set('V6126', 'Invalid encrypted card number, decryption failed'); +map.set('V6127', 'Invalid encrypted cvn, decryption failed'); +map.set('V6128', 'Invalid Method for Payment Type'); +map.set('V6129', 'Transaction has not been authorised for Capture/Cancellation'); +map.set('V6130', 'Generic customer information error'); +map.set('V6131', 'Generic shipping information error'); +map.set('V6132', 'Transaction has already been completed or voided, operation not permitted'); +map.set('V6133', 'Checkout not available for Payment Type'); +map.set('V6134', 'Invalid Auth Transaction ID for Capture/Void'); +map.set('V6135', 'PayPal Error Processing Refund'); +map.set('V6136', 'Original transaction does not exist or state is incorrect'); +map.set('V6140', 'Merchant account is suspended'); +map.set('V6141', 'Invalid PayPal account details or API signature'); +map.set('V6142', 'Authorise not available for Bank/Branch'); +map.set('V6143', 'Invalid Public Key'); +map.set('V6144', 'Method not available with Public API Key Authentication'); +map.set('V6145', 'Credit Card not allow if Token Customer ID is provided with Public API Key Authentication'); +map.set('V6146', 'Client Side Encryption Key Missing or Invalid'); +map.set('V6147', 'Unable to Create One Time Code for Secure Field'); +map.set('V6148', 'Secure Field has Expired'); +map.set('V6149', 'Invalid Secure Field One Time Code'); +map.set('V6150', 'Invalid Refund Amount'); +map.set('V6151', 'Refund amount greater than original transaction'); +map.set('V6152', 'Original transaction already refunded for total amount'); +map.set('V6153', 'Card type not support by merchant'); +map.set('V6154', 'Insufficent Funds Available For Refund'); +map.set('V6155', 'Missing one or more fields in request'); +map.set('V6160', 'Encryption Method Not Supported'); +map.set('V6161', 'Encryption failed, missing or invalid key'); +map.set('V6165', 'Invalid Click-to-Pay (Visa Checkout) data or decryption failed'); +map.set('V6170', 'Invalid TransactionSearch, Invoice Number is not unique'); +map.set('V6171', 'Invalid TransactionSearch, Invoice Number not found'); +map.set('V6220', 'Three domain secure XID invalid'); +map.set('V6221', 'Three domain secure ECI invalid'); +map.set('V6222', 'Three domain secure AVV invalid'); +map.set('V6223', 'Three domain secure XID is required'); +map.set('V6224', 'Three Domain Secure ECI is required'); +map.set('V6225', 'Three Domain Secure AVV is required'); +map.set('V6226', 'Three Domain Secure AuthStatus is required'); +map.set('V6227', 'Three Domain Secure AuthStatus invalid'); +map.set('V6228', 'Three domain secure Version is required'); +map.set('V6230', 'Three domain secure Directory Server Txn ID invalid'); +map.set('V6231', 'Three domain secure Directory Server Txn ID is required'); +map.set('V6232', 'Three domain secure Version is invalid'); +map.set('V6501', 'Invalid Amex InstallementPlan'); +map.set('V6502', 'Invalid Number Of Installements for Amex. Valid values are from 0 to 99 inclusive'); +map.set('V6503', 'Merchant Amex ID required'); +map.set('V6504', 'Invalid Merchant Amex ID'); +map.set('V6505', 'Merchant Terminal ID required'); +map.set('V6506', 'Merchant category code required'); +map.set('V6507', 'Invalid merchant category code'); +map.set('V6508', 'Amex 3D ECI required'); +map.set('V6509', 'Invalid Amex 3D ECI'); +map.set('V6510', 'Invalid Amex 3D verification value'); +map.set('V6511', 'Invalid merchant location data'); +map.set('V6512', 'Invalid merchant street address'); +map.set('V6513', 'Invalid merchant city'); +map.set('V6514', 'Invalid merchant country'); +map.set('V6515', 'Invalid merchant phone'); +map.set('V6516', 'Invalid merchant postcode'); +map.set('V6517', 'Amex connection error'); +map.set('V6518', 'Amex EC Card Details API returned invalid data'); +map.set('V6520', 'Invalid or missing Amex Point Of Sale Data'); +map.set('V6521', 'Invalid or missing Amex transaction date time'); +map.set('V6522', 'Invalid or missing Amex Original transaction date time'); +map.set('V6530', 'Credit Card Number in non Credit Card Field'); + + + + @endsection From c0c9c00c809b7a364481c7a2df8fe367ea1db757 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 26 Jul 2021 13:53:02 +1000 Subject: [PATCH 06/38] eWay error codes --- app/PaymentDrivers/Eway/CreditCard.php | 122 +++++++++++++++++++++---- app/PaymentDrivers/Eway/ErrorCode.php | 94 +++++++++++++++++++ 2 files changed, 196 insertions(+), 20 deletions(-) create mode 100644 app/PaymentDrivers/Eway/ErrorCode.php diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index 426b19834a1d..c340a7db9734 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -47,28 +47,91 @@ class CreditCard } + /* + Eway\Rapid\Model\Response\CreateCustomerResponse {#2374 ▼ + #fillable: array:16 [▶] + #errors: [] + #attributes: array:11 [▼ + "AuthorisationCode" => null + "ResponseCode" => "00" + "ResponseMessage" => "A2000" + "TransactionID" => null + "TransactionStatus" => false + "TransactionType" => "MOTO" + "BeagleScore" => null + "Verification" => Eway\Rapid\Model\Verification {#2553 ▼ + #fillable: array:5 [▶] + #attributes: array:5 [▶] + } + "Customer" => Eway\Rapid\Model\Customer {#2504 ▼ + #fillable: array:38 [▶] + #attributes: array:20 [▼ + "CardDetails" => Eway\Rapid\Model\CardDetails {#2455 ▼ + #fillable: array:8 [▶] + #attributes: array:7 [▼ + "Number" => "411111XXXXXX1111" + "Name" => "Joey Diaz" + "ExpiryMonth" => "10" + "ExpiryYear" => "23" + "StartMonth" => null + "StartYear" => null + "IssueNumber" => null + ] + } + "TokenCustomerID" => 917047257342 + "Reference" => "A12345" + "Title" => "Mr." + "FirstName" => "John" + "LastName" => "Smith" + "CompanyName" => "Demo Shop 123" + "JobDescription" => "PHP Developer" + "Street1" => "Level 5" + "Street2" => "369 Queen Street" + "City" => "Sydney" + "State" => "NSW" + "PostalCode" => "2000" + "Country" => "au" + "Email" => "demo@example.org" + "Phone" => "09 889 0986" + "Mobile" => "09 889 6542" + "Comments" => "" + "Fax" => "" + "Url" => "http://www.ewaypayments.com" + ] + } + "Payment" => Eway\Rapid\Model\Payment {#2564 ▼ + #fillable: array:5 [▶] + #attributes: array:5 [▼ + "TotalAmount" => 0 + "InvoiceNumber" => "" + "InvoiceDescription" => "" + "InvoiceReference" => "" + "CurrencyCode" => "AUD" + ] + } + "Errors" => null + ] +} + */ + public function authorizeResponse($request) { - $this->eway_driver->init(); - - $transaction = [ - 'Reference' => 'A12345', - 'Title' => 'Mr.', - 'FirstName' => 'John', - 'LastName' => 'Smith', - 'CompanyName' => 'Demo Shop 123', - 'JobDescription' => 'PHP Developer', - 'Street1' => 'Level 5', - 'Street2' => '369 Queen Street', - 'City' => 'Sydney', - 'State' => 'NSW', - 'PostalCode' => '2000', - 'Country' => 'au', - 'Phone' => '09 889 0986', - 'Mobile' => '09 889 6542', - 'Email' => 'demo@example.org', - "Url" => "http://www.ewaypayments.com", + $transaction = [ + 'Reference' => $this->eway_driver->client->number, + 'Title' => '', + 'FirstName' => $this->eway_driver->client->primary_contact()->present()->last_name(), + 'LastName' => $this->eway_driver->client->primary_contact()->present()->first_name(), + 'CompanyName' => $this->eway_driver->client->name, + 'Street1' => $this->eway_driver->client->address1, + 'Street2' => $this->eway_driver->client->address2, + 'City' => $this->eway_driver->client->city, + 'State' => $this->eway_driver->client->state, + 'PostalCode' => $this->eway_driver->client->postal_code, + 'Country' => $this->eway_driver->client->country->iso_3166_2, + 'Phone' => $this->eway_driver->client->phone, + 'Email' => $this->eway_driver->client->primary_contact()->email, + "Url" => $this->eway_driver->client->website, 'Payment' => [ 'TotalAmount' => 0, ], @@ -79,7 +142,26 @@ class CreditCard $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); -dd($response); + nlog($response); + + //success + $cgt = []; + $cgt['token'] = $data['token']; + $cgt['payment_method_id'] = GatewayType::CREDIT_CARD; + + $payment_meta = new \stdClass; + $payment_meta->exp_month = 'xx'; + $payment_meta->exp_year = 'xx'; + $payment_meta->brand = 'CC'; + $payment_meta->last4 = 'xxxx'; + $payment_meta->type = GatewayType::CREDIT_CARD; + + $cgt['payment_meta'] = $payment_meta; + + $token = $this->eway_driver->storeGatewayToken($cgt, []); + + return redirect()->route('client.payment_methods.index'); + } public function paymentView($data) diff --git a/app/PaymentDrivers/Eway/ErrorCode.php b/app/PaymentDrivers/Eway/ErrorCode.php new file mode 100644 index 000000000000..71a44fad27bc --- /dev/null +++ b/app/PaymentDrivers/Eway/ErrorCode.php @@ -0,0 +1,94 @@ + "Transaction Approved"], + ["A2008" => "Honour With Identification"], + ["A2010" => "Approved For Partial Amount"], + ["A2011" => "Approved, VIP"], + ["A2016" => "Approved, Update Track 3"], + ], + + public $failure = [ + ["D4401" => "Refer to Issuer"], + ["D4402" => "Refer to Issuer, special"], + ["D4403" => "No Merchant"], + ["D4404" => "Pick Up Card"], + ["D4405" => "Do Not Honour"], + ["D4406" => "Error"], + ["D4407" => "Pick Up Card, Special"], + ["D4409" => "Request In Progress"], + ["D4412" => "Invalid Transaction"], + ["D4413" => "Invalid Amount"], + ["D4414" => "Invalid Card Number"], + ["D4415" => "No Issuer"], + ["D4417" => "3D Secure Error"], + ["D4419" => "Re-enter Last Transaction"], + ["D4421" => "No Action Taken"], + ["D4422" => "Suspected Malfunction"], + ["D4423" => "Unacceptable Transaction Fee"], + ["D4425" => "Unable to Locate Record On File"], + ["D4430" => "Format Error"], + ["D4431" => "Bank Not Supported By Switch"], + ["D4433" => "Expired Card, Capture"], + ["D4434" => "Suspected Fraud, Retain Card"], + ["D4435" => "Card Acceptor, Contact Acquirer, Retain Card"], + ["D4436" => "Restricted Card, Retain Card"], + ["D4437" => "Contact Acquirer Security Department, Retain Card"], + ["D4438" => "PIN Tries Exceeded, Capture"], + ["D4439" => "No Credit Account"], + ["D4440" => "Function Not Supported"], + ["D4441" => "Lost Card"], + ["D4442" => "No Universal Account"], + ["D4443" => "Stolen Card"], + ["D4444" => "No Investment Account"], + ["D4450" => "Click-to-Pay (Visa Checkout) Transaction"], + ["D4451" => "Insufficient Funds"], + ["D4452" => "No Cheque Account"], + ["D4453" => "No Savings Account"], + ["D4454" => "Expired Card"], + ["D4455" => "Incorrect PIN"], + ["D4456" => "No Card Record"], + ["D4457" => "Function Not Permitted to Cardholder"], + ["D4458" => "Function Not Permitted to Terminal"], + ["D4459" => "Suspected Fraud"], + ["D4460" => "Acceptor Contact Acquirer"], + ["D4461" => "Exceeds Withdrawal Limit"], + ["D4462" => "Restricted Card"], + ["D4463" => "Security Violation"], + ["D4464" => "Original Amount Incorrect"], + ["D4466" => "Acceptor Contact Acquirer, Security"], + ["D4467" => "Capture Card"], + ["D4475" => "PIN Tries Exceeded"], + ["D4476" => "Invalidate Txn Reference"], + ["D4481" => "Accumulated Transaction Counter (Amount) Exceeded"], + ["D4482" => "CVV Validation Error"], + ["D4483" => "Acquirer Is Not Accepting Transactions From You At This Time"], + ["D4484" => "Acquirer Is Not Accepting This Transaction"], + ["D4490" => "Cut off In Progress"], + ["D4491" => "Card Issuer Unavailable"], + ["D4492" => "Unable To Route Transaction"], + ["D4493" => "Cannot Complete, Violation Of The Law"], + ["D4494" => "Duplicate Transaction"], + ["D4495" => "Amex Declined"], + ["D4496" => "System Error"], + ["D4497" => "MasterPass Error"], + ["D4498" => "PayPal Create Transaction Error"], + ["D4499" => "Invalid Transaction for Auth/Void"], + ]; + +} \ No newline at end of file From 90198e6b7a7e9be53251559400acf9b5822e3156 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 07:03:33 +1000 Subject: [PATCH 07/38] Minor fixes for entity sent description --- app/Mail/Admin/EntitySentObject.php | 4 ++-- app/Notifications/Admin/EntitySentNotification.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Mail/Admin/EntitySentObject.php b/app/Mail/Admin/EntitySentObject.php index 3b9003e07e59..570c149b1cfe 100644 --- a/app/Mail/Admin/EntitySentObject.php +++ b/app/Mail/Admin/EntitySentObject.php @@ -121,7 +121,7 @@ class EntitySentObject ctrans( $this->template_subject, [ - 'client' => $this->contact->present()->name(), + 'client' => $this->contact->client->present()->name(), 'invoice' => $this->entity->number, ] ); @@ -133,7 +133,7 @@ class EntitySentObject $this->template_body, [ 'amount' => $this->getAmount(), - 'client' => $this->contact->present()->name(), + 'client' => $this->contact->client->present()->name(), 'invoice' => $this->entity->number, ] ); diff --git a/app/Notifications/Admin/EntitySentNotification.php b/app/Notifications/Admin/EntitySentNotification.php index 33a735bce188..4d38c3c083a4 100644 --- a/app/Notifications/Admin/EntitySentNotification.php +++ b/app/Notifications/Admin/EntitySentNotification.php @@ -103,14 +103,14 @@ class EntitySentNotification extends Notification "texts.notification_{$this->entity_name}_sent_subject", [ 'amount' => $amount, - 'client' => $this->contact->present()->name(), + 'client' => $this->contact->client->present()->name(), 'invoice' => $this->entity->number, ] )) ->attachment(function ($attachment) use ($amount) { $attachment->title(ctrans('texts.invoice_number_placeholder', ['invoice' => $this->entity->number]), $this->invitation->getAdminLink()) ->fields([ - ctrans('texts.client') => $this->contact->present()->name(), + ctrans('texts.client') => $this->contact->client->present()->name(), ctrans('texts.amount') => $amount, ]); }); From 8db20c1fcade0168d22cf5a9af58e98003e79589 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 12:49:13 +1000 Subject: [PATCH 08/38] Fixes for eWay --- app/PaymentDrivers/Eway/CreditCard.php | 28 ++-- app/PaymentDrivers/Eway/ErrorCode.php | 159 ++++++++++++----------- app/PaymentDrivers/EwayPaymentDriver.php | 43 ++++++ 3 files changed, 144 insertions(+), 86 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index c340a7db9734..a04aea1a4cfd 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -22,6 +22,7 @@ use App\Models\PaymentHash; use App\Models\PaymentType; use App\Models\SystemLog; use App\PaymentDrivers\EwayPaymentDriver; +use App\PaymentDrivers\Eway\ErrorCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; @@ -120,8 +121,8 @@ class CreditCard $transaction = [ 'Reference' => $this->eway_driver->client->number, 'Title' => '', - 'FirstName' => $this->eway_driver->client->primary_contact()->present()->last_name(), - 'LastName' => $this->eway_driver->client->primary_contact()->present()->first_name(), + 'FirstName' => $this->eway_driver->client->contacts()->first()->present()->last_name(), + 'LastName' => $this->eway_driver->client->contacts()->first()->present()->first_name(), 'CompanyName' => $this->eway_driver->client->name, 'Street1' => $this->eway_driver->client->address1, 'Street2' => $this->eway_driver->client->address2, @@ -130,30 +131,33 @@ class CreditCard 'PostalCode' => $this->eway_driver->client->postal_code, 'Country' => $this->eway_driver->client->country->iso_3166_2, 'Phone' => $this->eway_driver->client->phone, - 'Email' => $this->eway_driver->client->primary_contact()->email, + 'Email' => $this->eway_driver->client->contacts()->first()->email, "Url" => $this->eway_driver->client->website, - 'Payment' => [ - 'TotalAmount' => 0, - ], - 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, + // 'Payment' => [ + // 'TotalAmount' => 0, + // ], + // 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, 'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER, 'SecuredCardData' => $request->input('SecuredCardData'), ]; $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); - nlog($response); + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + if(!$response_status['success']) + throw new PaymentFailed($response_status['message'], 400); //success $cgt = []; - $cgt['token'] = $data['token']; + $cgt['token'] = $response->Customer->TokenCustomerID; $cgt['payment_method_id'] = GatewayType::CREDIT_CARD; $payment_meta = new \stdClass; - $payment_meta->exp_month = 'xx'; - $payment_meta->exp_year = 'xx'; + $payment_meta->exp_month = $response->Customer->CardDetails->ExpiryMonth; + $payment_meta->exp_year = $response->Customer->CardDetails->ExpiryYear; $payment_meta->brand = 'CC'; - $payment_meta->last4 = 'xxxx'; + $payment_meta->last4 = $response->Customer->CardDetails->Number; $payment_meta->type = GatewayType::CREDIT_CARD; $cgt['payment_meta'] = $payment_meta; diff --git a/app/PaymentDrivers/Eway/ErrorCode.php b/app/PaymentDrivers/Eway/ErrorCode.php index 71a44fad27bc..94a0bc138a93 100644 --- a/app/PaymentDrivers/Eway/ErrorCode.php +++ b/app/PaymentDrivers/Eway/ErrorCode.php @@ -15,80 +15,91 @@ namespace App\PaymentDrivers\Eway; class ErrorCode { - public $success = [ - ["A2000" => "Transaction Approved"], - ["A2008" => "Honour With Identification"], - ["A2010" => "Approved For Partial Amount"], - ["A2011" => "Approved, VIP"], - ["A2016" => "Approved, Update Track 3"], - ], - - public $failure = [ - ["D4401" => "Refer to Issuer"], - ["D4402" => "Refer to Issuer, special"], - ["D4403" => "No Merchant"], - ["D4404" => "Pick Up Card"], - ["D4405" => "Do Not Honour"], - ["D4406" => "Error"], - ["D4407" => "Pick Up Card, Special"], - ["D4409" => "Request In Progress"], - ["D4412" => "Invalid Transaction"], - ["D4413" => "Invalid Amount"], - ["D4414" => "Invalid Card Number"], - ["D4415" => "No Issuer"], - ["D4417" => "3D Secure Error"], - ["D4419" => "Re-enter Last Transaction"], - ["D4421" => "No Action Taken"], - ["D4422" => "Suspected Malfunction"], - ["D4423" => "Unacceptable Transaction Fee"], - ["D4425" => "Unable to Locate Record On File"], - ["D4430" => "Format Error"], - ["D4431" => "Bank Not Supported By Switch"], - ["D4433" => "Expired Card, Capture"], - ["D4434" => "Suspected Fraud, Retain Card"], - ["D4435" => "Card Acceptor, Contact Acquirer, Retain Card"], - ["D4436" => "Restricted Card, Retain Card"], - ["D4437" => "Contact Acquirer Security Department, Retain Card"], - ["D4438" => "PIN Tries Exceeded, Capture"], - ["D4439" => "No Credit Account"], - ["D4440" => "Function Not Supported"], - ["D4441" => "Lost Card"], - ["D4442" => "No Universal Account"], - ["D4443" => "Stolen Card"], - ["D4444" => "No Investment Account"], - ["D4450" => "Click-to-Pay (Visa Checkout) Transaction"], - ["D4451" => "Insufficient Funds"], - ["D4452" => "No Cheque Account"], - ["D4453" => "No Savings Account"], - ["D4454" => "Expired Card"], - ["D4455" => "Incorrect PIN"], - ["D4456" => "No Card Record"], - ["D4457" => "Function Not Permitted to Cardholder"], - ["D4458" => "Function Not Permitted to Terminal"], - ["D4459" => "Suspected Fraud"], - ["D4460" => "Acceptor Contact Acquirer"], - ["D4461" => "Exceeds Withdrawal Limit"], - ["D4462" => "Restricted Card"], - ["D4463" => "Security Violation"], - ["D4464" => "Original Amount Incorrect"], - ["D4466" => "Acceptor Contact Acquirer, Security"], - ["D4467" => "Capture Card"], - ["D4475" => "PIN Tries Exceeded"], - ["D4476" => "Invalidate Txn Reference"], - ["D4481" => "Accumulated Transaction Counter (Amount) Exceeded"], - ["D4482" => "CVV Validation Error"], - ["D4483" => "Acquirer Is Not Accepting Transactions From You At This Time"], - ["D4484" => "Acquirer Is Not Accepting This Transaction"], - ["D4490" => "Cut off In Progress"], - ["D4491" => "Card Issuer Unavailable"], - ["D4492" => "Unable To Route Transaction"], - ["D4493" => "Cannot Complete, Violation Of The Law"], - ["D4494" => "Duplicate Transaction"], - ["D4495" => "Amex Declined"], - ["D4496" => "System Error"], - ["D4497" => "MasterPass Error"], - ["D4498" => "PayPal Create Transaction Error"], - ["D4499" => "Invalid Transaction for Auth/Void"], + private static $success = [ + "A2000" => "Transaction Approved", + "A2008" => "Honour With Identification", + "A2010" => "Approved For Partial Amount", + "A2011" => "Approved, VIP", + "A2016" => "Approved, Update Track 3", ]; + private static $failure = [ + "D4401" => "Refer to Issuer", + "D4402" => "Refer to Issuer, special", + "D4403" => "No Merchant", + "D4404" => "Pick Up Card", + "D4405" => "Do Not Honour", + "D4406" => "Error", + "D4407" => "Pick Up Card, Special", + "D4409" => "Request In Progress", + "D4412" => "Invalid Transaction", + "D4413" => "Invalid Amount", + "D4414" => "Invalid Card Number", + "D4415" => "No Issuer", + "D4417" => "3D Secure Error", + "D4419" => "Re-enter Last Transaction", + "D4421" => "No Action Taken", + "D4422" => "Suspected Malfunction", + "D4423" => "Unacceptable Transaction Fee", + "D4425" => "Unable to Locate Record On File", + "D4430" => "Format Error", + "D4431" => "Bank Not Supported By Switch", + "D4433" => "Expired Card, Capture", + "D4434" => "Suspected Fraud, Retain Card", + "D4435" => "Card Acceptor, Contact Acquirer, Retain Card", + "D4436" => "Restricted Card, Retain Card", + "D4437" => "Contact Acquirer Security Department, Retain Card", + "D4438" => "PIN Tries Exceeded, Capture", + "D4439" => "No Credit Account", + "D4440" => "Function Not Supported", + "D4441" => "Lost Card", + "D4442" => "No Universal Account", + "D4443" => "Stolen Card", + "D4444" => "No Investment Account", + "D4450" => "Click-to-Pay (Visa Checkout) Transaction", + "D4451" => "Insufficient Funds", + "D4452" => "No Cheque Account", + "D4453" => "No Savings Account", + "D4454" => "Expired Card", + "D4455" => "Incorrect PIN", + "D4456" => "No Card Record", + "D4457" => "Function Not Permitted to Cardholder", + "D4458" => "Function Not Permitted to Terminal", + "D4459" => "Suspected Fraud", + "D4460" => "Acceptor Contact Acquirer", + "D4461" => "Exceeds Withdrawal Limit", + "D4462" => "Restricted Card", + "D4463" => "Security Violation", + "D4464" => "Original Amount Incorrect", + "D4466" => "Acceptor Contact Acquirer, Security", + "D4467" => "Capture Card", + "D4475" => "PIN Tries Exceeded", + "D4476" => "Invalidate Txn Reference", + "D4481" => "Accumulated Transaction Counter (Amount) Exceeded", + "D4482" => "CVV Validation Error", + "D4483" => "Acquirer Is Not Accepting Transactions From You At This Time", + "D4484" => "Acquirer Is Not Accepting This Transaction", + "D4490" => "Cut off In Progress", + "D4491" => "Card Issuer Unavailable", + "D4492" => "Unable To Route Transaction", + "D4493" => "Cannot Complete, Violation Of The Law", + "D4494" => "Duplicate Transaction", + "D4495" => "Amex Declined", + "D4496" => "System Error", + "D4497" => "MasterPass Error", + "D4498" => "PayPal Create Transaction Error", + "D4499" => "Invalid Transaction for Auth/Void", + ]; + + + public static function getStatus($code) + { + if(array_key_exists($code, self::$success)) + return ['success' => true, 'message' => self::$success[$code]]; + + if(array_key_exists($code, self::$failure)) + return ['success' => false, 'message' => self::$failure[$code]]; + + return ['success' => false, 'message' => "Unknown error message code - {$code}"]; + } } \ No newline at end of file diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 7ed47e69e525..260723172bff 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -101,4 +101,47 @@ class EwayPaymentDriver extends BaseDriver public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) { } + + public function getClientRequiredFields(): array + { + $fields = []; + $fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc']; + $fields[] = ['name' => 'client_country_id', 'label' => ctrans('texts.country'), 'type' => 'text', 'validation' => 'required']; + + if ($this->company_gateway->require_client_name) { + $fields[] = ['name' => 'client_name', 'label' => ctrans('texts.client_name'), 'type' => 'text', 'validation' => 'required']; + } + + // if ($this->company_gateway->require_contact_name) { + // } + + // if ($this->company_gateway->require_contact_email) { + // } + + if ($this->company_gateway->require_client_phone) { + $fields[] = ['name' => 'client_phone', 'label' => ctrans('texts.client_phone'), 'type' => 'tel', 'validation' => 'required']; + } + + if ($this->company_gateway->require_billing_address) { + $fields[] = ['name' => 'client_address_line_1', 'label' => ctrans('texts.address1'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_city', 'label' => ctrans('texts.city'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_state', 'label' => ctrans('texts.state'), 'type' => 'text', 'validation' => 'required']; + } + + if($this->company_gateway->require_postal_code) + $fields[] = ['name' => 'client_postal_code', 'label' => ctrans('texts.postal_code'), 'type' => 'text', 'validation' => 'required']; + + if ($this->company_gateway->require_shipping_address) { + $fields[] = ['name' => 'client_shipping_address_line_1', 'label' => ctrans('texts.shipping_address1'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_city', 'label' => ctrans('texts.shipping_city'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_state', 'label' => ctrans('texts.shipping_state'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_postal_code', 'label' => ctrans('texts.shipping_postal_code'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_country_id', 'label' => ctrans('texts.shipping_country'), 'type' => 'text', 'validation' => 'required']; + } + + + return $fields; + } } From 8040b0a8f99bbab474e163d38df78dee07064f3d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 14:03:04 +1000 Subject: [PATCH 09/38] eWay Process Payment --- app/PaymentDrivers/Eway/CreditCard.php | 7 +- .../gateways/eway/authorize.blade.php | 290 +---------------- .../eway/includes/credit_card.blade.php | 304 +++++++++++++++++- .../ninja2020/gateways/eway/pay.blade.php | 94 ++++++ 4 files changed, 391 insertions(+), 304 deletions(-) create mode 100644 resources/views/portal/ninja2020/gateways/eway/pay.blade.php diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index a04aea1a4cfd..c656ec8b0922 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -157,7 +157,7 @@ class CreditCard $payment_meta->exp_month = $response->Customer->CardDetails->ExpiryMonth; $payment_meta->exp_year = $response->Customer->CardDetails->ExpiryYear; $payment_meta->brand = 'CC'; - $payment_meta->last4 = $response->Customer->CardDetails->Number; + $payment_meta->last4 = substr($response->Customer->CardDetails->Number, -4);; $payment_meta->type = GatewayType::CREDIT_CARD; $cgt['payment_meta'] = $payment_meta; @@ -171,6 +171,11 @@ class CreditCard public function paymentView($data) { + $data['gateway'] = $this->eway_driver; + $data['public_api_key'] = $this->eway_driver->company_gateway->getConfigField('publicApiKey'); + + return render('gateways.eway.pay', $data); + } public function processPaymentResponse($request) diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php index 1081a9980942..cd41a3b9a283 100644 --- a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -36,122 +36,14 @@ ctrans('texts.credit_card')]) +@include('portal.ninja2020.gateways.eway.includes.credt_card') + @endsection diff --git a/resources/views/portal/ninja2020/gateways/eway/includes/credit_card.blade.php b/resources/views/portal/ninja2020/gateways/eway/includes/credit_card.blade.php index e462c5d42fdf..3d2730fcf759 100644 --- a/resources/views/portal/ninja2020/gateways/eway/includes/credit_card.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/includes/credit_card.blade.php @@ -1,15 +1,289 @@ -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/eway/pay.blade.php b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php new file mode 100644 index 000000000000..e58ffcabc759 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php @@ -0,0 +1,94 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.credit_card')]) + +@section('gateway_head') +@endsection + +@section('gateway_content') + + @csrf + + + + + + + + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.payment_type')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + + @include('portal.ninja2020.gateways.includes.payment_details') + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) + @if(count($tokens) > 0) + @foreach($tokens as $token) + + @endforeach + @endisset + + + @endcomponent + +
+ + + @include('portal.ninja2020.gateways.includes.save_card') +
+ + + + @include('portal.ninja2020.gateways.includes.pay_now') +@endsection + +@section('gateway_footer') + + @include('portal.ninja2020.gateways.eway.includes.credit_card') + + + + + +@endsection From b061506091f6b5df761a66bcd7b9c26f787ec7b8 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 15:14:29 +1000 Subject: [PATCH 10/38] Token Payments --- app/PaymentDrivers/Eway/Token.php | 111 +++++++++++++++++++++++ app/PaymentDrivers/EwayPaymentDriver.php | 20 +++- app/PaymentDrivers/Sample/CreditCard.php | 41 +++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 app/PaymentDrivers/Eway/Token.php diff --git a/app/PaymentDrivers/Eway/Token.php b/app/PaymentDrivers/Eway/Token.php new file mode 100644 index 000000000000..1bdbc2ed18a0 --- /dev/null +++ b/app/PaymentDrivers/Eway/Token.php @@ -0,0 +1,111 @@ +eway_driver = $eway_driver; + } + + public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) + { + + $amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total; + + $transaction = [ + 'Customer' => [ + 'TokenCustomerID' => $cgt->token, + ], + 'Payment' => [ + 'TotalAmount' => $this->eway_driver->convertAmount($amount), + ], + 'TransactionType' => \Eway\Rapid\Enum\TransactionType::RECURRING, + ]; + + $response = $this->eway_driver->init()->eway->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + if(!$response_status['success']) + return $this->processUnsuccessfulPayment($response); + + $payment = $this->processSuccessfulPayment($response); + + return $payment; + + } + + + private function processSuccessfulPayment($response) + { + $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total; + + $data = [ + 'gateway_type_id' => $cgt->gateway_type_id, + 'payment_type' => GatewayType::CREDIT_CARD_OTHER, + 'transaction_reference' => $response->Customer->Reference, + 'amount' => $amount, + ]; + + $payment = $this->eway_driver->createPayment($data); + $payment->meta = $cgt->meta; + $payment->save(); + + $payment_hash->payment_id = $payment->id; + $payment_hash->save(); + + return $payment; + + } + + private function processUnsuccessfulPayment($response) + { + + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + $error = $response_status['message'] + $error_code = $response->ResponseMessage; + + $data = [ + 'response' => $response, + 'error' => $error, + 'error_code' => $error_code, + ]; + + return $this->driver_class->processUnsuccessfulTransaction($data); + + } + +} \ No newline at end of file diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 260723172bff..5a6154fda388 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -18,6 +18,7 @@ use App\Models\Payment; use App\Models\PaymentHash; use App\Models\SystemLog; use App\PaymentDrivers\Eway\CreditCard; +use App\PaymentDrivers\Eway\Token; use App\Utils\Traits\MakesHash; class EwayPaymentDriver extends BaseDriver @@ -95,13 +96,30 @@ class EwayPaymentDriver extends BaseDriver public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) { - return $this->payment_method->yourTokenBillingImplmentation(); //this is your custom implementation from here + return (new Token($this))->tokenBilling($cgt, $payment_hash); } public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) { } + public function convertAmount($amount) + { + $precision = $this->client->currency()->precision; + + if($precision == 0) + return $amount; + + if($precision == 1) + return $amount*10; + + if$precision == 2) + return $amount*100; + + + return $amount; + } + public function getClientRequiredFields(): array { $fields = []; diff --git a/app/PaymentDrivers/Sample/CreditCard.php b/app/PaymentDrivers/Sample/CreditCard.php index 12e4d872bfcd..44c404ae2611 100644 --- a/app/PaymentDrivers/Sample/CreditCard.php +++ b/app/PaymentDrivers/Sample/CreditCard.php @@ -21,12 +21,14 @@ use App\Models\Payment; use App\Models\PaymentHash; use App\Models\PaymentType; use App\Models\SystemLog; +use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; class CreditCard { + use MakesHash; public $driver_class; @@ -55,6 +57,43 @@ class CreditCard } + /* This method is stubbed ready to go - you just need to harvest the equivalent 'transaction_reference' */ + private function processSuccessfulPayment($response) + { + $amount = array_sum(array_column($this->driver_class->payment_hash->invoices(), 'amount')) + $this->driver_class->payment_hash->fee_total; + + $payment_record = []; + $payment_record['amount'] = $amount; + $payment_record['payment_type'] = PaymentType::CREDIT_CARD_OTHER; + $payment_record['gateway_type_id'] = GatewayType::CREDIT_CARD; + // $payment_record['transaction_reference'] = $response->transaction_id; + + $payment = $this->driver_class->createPayment($payment_record, Payment::STATUS_COMPLETED); + + return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); + + } + + private function processUnsuccessfulPayment($response) + { + /*Harvest your own errors here*/ + // $error = $response->status_message; + + // if(property_exists($response, 'approval_message') && $response->approval_message) + // $error .= " - {$response->approval_message}"; + + // $error_code = property_exists($response, 'approval_message') ? $response->approval_message : 'Undefined code'; + + $data = [ + 'response' => $response, + 'error' => $error, + 'error_code' => $error_code, + ]; + + return $this->driver_class->processUnsuccessfulTransaction($data); + + } + /* Helpers */ @@ -69,4 +108,6 @@ class CreditCard */ + + } \ No newline at end of file From 9ef77e8b534302bab69f66657a78d69a96143bca Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 15:41:31 +1000 Subject: [PATCH 11/38] Token and Refunding from eWay --- app/Models/User.php | 1 - app/PaymentDrivers/EwayPaymentDriver.php | 35 +++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 8533c211784c..0960745a4d63 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -182,7 +182,6 @@ class User extends Authenticatable implements MustVerifyEmail return $company_token->company; } - // return false; throw new \Exception('No Company Found'); //return Company::find(config('ninja.company_id')); diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 5a6154fda388..0c6f15fbfe29 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -91,7 +91,40 @@ class EwayPaymentDriver extends BaseDriver public function refund(Payment $payment, $amount, $return_client_response = false) { - return $this->payment_method->yourRefundImplementationHere(); //this is your custom implementation from here + + $refund = [ + 'Refund' => [ + 'TransactionID' => $payment->transaction_reference, + 'TotalAmount' => $this->convertAmount($amount) + ], + ]; + + $response = $this->init()->eway->client->refund($refund); + + $transaction_reference = ''; + $refund_status = true; + $refund_message = ''; + + if ($response->TransactionStatus) { + $transaction_reference = $response->TransactionID; + } else { + if ($response->getErrors()) { + foreach ($response->getErrors() as $error) { + $refund_status = false; + $refund_message = \Eway\Rapid::getMessage($error); + } + } else { + $refund_status = false; + $refund_message 'Sorry, your refund failed'; + } + } + return [ + 'transaction_reference' => $response->TransactionID, + 'transaction_response' => json_encode($response), + 'success' => $refund_status, + 'description' => $refund_message, + 'code' => '', + ]; } public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) From 01852f94361ce8b91dda857c79156d8b0048c628 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 9 Aug 2021 15:44:28 +1000 Subject: [PATCH 12/38] Fixes for eway --- app/PaymentDrivers/EwayPaymentDriver.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 0c6f15fbfe29..66dc23c9a443 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -115,7 +115,7 @@ class EwayPaymentDriver extends BaseDriver } } else { $refund_status = false; - $refund_message 'Sorry, your refund failed'; + $refund_message = 'Sorry, your refund failed'; } } return [ @@ -146,7 +146,7 @@ class EwayPaymentDriver extends BaseDriver if($precision == 1) return $amount*10; - if$precision == 2) + if($precision == 2) return $amount*100; From f7727da19291f7d3cb1bca1cdf47ed4887a14fe7 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 12 Aug 2021 14:34:44 +1000 Subject: [PATCH 13/38] Check that contacts are an array --- app/Http/Requests/Request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php index 5ad2e358ba1a..c90d9485c742 100644 --- a/app/Http/Requests/Request.php +++ b/app/Http/Requests/Request.php @@ -134,7 +134,7 @@ class Request extends FormRequest } } - if (isset($input['contacts'])) { + if (isset($input['contacts']) && is_array($input['contacts'])) { foreach ($input['contacts'] as $key => $contact) { if (array_key_exists('id', $contact) && is_numeric($contact['id'])) { unset($input['contacts'][$key]['id']); From 68c9ee33af3e385f87716851210e06ccb7844380 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 12 Aug 2021 21:02:12 +1000 Subject: [PATCH 14/38] fixes for eway --- app/PaymentDrivers/Eway/CreditCard.php | 5 +++-- .../portal/ninja2020/gateways/eway/authorize.blade.php | 6 +++--- .../ninja2020/gateways/eway/includes/credit_card.blade.php | 7 +++++-- .../views/portal/ninja2020/gateways/eway/pay.blade.php | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index c656ec8b0922..3338c8aaf5b9 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -138,7 +138,7 @@ class CreditCard // ], // 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, 'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER, - 'SecuredCardData' => $request->input('SecuredCardData'), + 'SecuredCardData' => $request->input('securefieldcode'), ]; $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); @@ -178,7 +178,8 @@ class CreditCard } - public function processPaymentResponse($request) + + public function paymentResponse($request) { } diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php index cd41a3b9a283..19fced509956 100644 --- a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -6,10 +6,10 @@ ctrans('texts.credit_card')]) @section('gateway_content')
+ method="post" id="server-response"> @csrf - + @@ -36,7 +36,7 @@ ctrans('texts.credit_card')]) -@include('portal.ninja2020.gateways.eway.includes.credt_card') +@include('portal.ninja2020.gateways.eway.includes.credit_card') + -@include('portal.ninja2020.gateways.eway.includes.credit_card') + + if (document.getElementById('authorize-card')) { + document.getElementById('authorize-card').disabled = false; + } + + document.querySelector("input[name=securefieldcode]").value = event.secureFieldCode; + } + + handleErrors(errors) { + let _errors = errors.split(' '); + let shouldShowGenericError = false; + let message = ''; + + _errors.forEach((error) => { + message = message.concat(this.errorCodes.get(error) + '
'); + }) + + document.getElementById('errors').innerHTML = message; + document.getElementById('errors').hidden = false; + } + + handleAuthorization(event) { + event.target.parentElement.disabled = true; + + document.getElementById('server-response').submit(); + } + + initialize() { + this.eWAY = eWAY.setupSecureField(this.groupFieldConfig, (event) => this.securePanelCallback(event)) + } + + handle() { + this.initialize(); + + document + .getElementById('authorize-card') + ?.addEventListener('click', (e) => this.handleAuthorization(e)) + } + } + + new EwayRapid().handle() + @endsection From b91449f7274c0f2f698f1f972bb06adab4eb1840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 15:47:01 +0200 Subject: [PATCH 16/38] Add option to pass `disabled` to `pay_now` component --- .../views/portal/ninja2020/gateways/includes/pay_now.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/portal/ninja2020/gateways/includes/pay_now.blade.php b/resources/views/portal/ninja2020/gateways/includes/pay_now.blade.php index ea005a0cb8cd..74f8189f811b 100644 --- a/resources/views/portal/ninja2020/gateways/includes/pay_now.blade.php +++ b/resources/views/portal/ninja2020/gateways/includes/pay_now.blade.php @@ -4,7 +4,8 @@ type="{{ $type ?? 'button' }}" id="{{ $id ?? 'pay-now' }}" @isset($data) @foreach($data as $prop => $value) data-{{ $prop }}="{{ $value }}" @endforeach @endisset - class="button button-primary bg-primary {{ $class ?? '' }}"> + class="button button-primary bg-primary {{ $class ?? '' }}" + {{ isset($disabled) && $disabled === true ? 'disabled' : '' }}> + + + + + @endsection @section('gateway_content') @@ -226,7 +230,7 @@ ctrans('texts.credit_card')]) styles: "margin-top: 15px;", label: { fieldColSpan: 4, - text: "Card Name:", + text: document.querySelector('meta[name=translation-card-name]')?.content, styles: "", }, field: { @@ -241,7 +245,7 @@ ctrans('texts.credit_card')]) styles: "margin-top: 15px;", label: { fieldColSpan: 4, - text: "Expiry:", + text: document.querySelector('meta[name=translation-expiry_date]')?.content, styles: "", }, field: { @@ -260,7 +264,7 @@ ctrans('texts.credit_card')]) styles: "margin-top: 15px;", label: { fieldColSpan: 4, - text: "Card Number:", + text: document.querySelector('meta[name=translation-card_number]')?.content, styles: "", }, field: { @@ -274,7 +278,7 @@ ctrans('texts.credit_card')]) styles: "margin-top: 15px;", label: { fieldColSpan: 4, - text: "CVV Number:", + text: document.querySelector('meta[name=translation-cvv]')?.content, styles: "", }, field: { From 393c218c4c12be249cecdbdaccbb9b95a9dc6bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:12:23 +0200 Subject: [PATCH 18/38] Refactor Eway payment page --- .../ninja2020/gateways/eway/pay.blade.php | 418 ++++++++++++++++-- 1 file changed, 375 insertions(+), 43 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/eway/pay.blade.php b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php index c45af17bb420..1d73902f7168 100644 --- a/resources/views/portal/ninja2020/gateways/eway/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php @@ -1,6 +1,12 @@ -@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.credit_card')]) +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => +ctrans('texts.credit_card')]) @section('gateway_head') + + + + + @endsection @section('gateway_content') @@ -24,72 +30,398 @@ @include('portal.ninja2020.gateways.includes.payment_details') @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) - @if(count($tokens) > 0) - @foreach($tokens as $token) + @if (count($tokens) > 0) + @foreach ($tokens as $token) @endforeach @endisset @endcomponent -
- - + @component('portal.ninja2020.components.general.card-element-single') +
+ @endcomponent + @include('portal.ninja2020.gateways.includes.save_card') -
- - - @include('portal.ninja2020.gateways.includes.pay_now') + @include('portal.ninja2020.gateways.includes.pay_now', ['disabled' => true]) @endsection @section('gateway_footer') + - @include('portal.ninja2020.gateways.eway.includes.credit_card') - + + document.querySelector("input[name=securefieldcode]").value = event.secureFieldCode; + } + handleErrors(errors) { + let _errors = errors.split(' '); + let shouldShowGenericError = false; + let message = ''; + + _errors.forEach((error) => { + message = message.concat(this.errorCodes.get(error) + '
'); + }) + + document.getElementById('errors').innerHTML = message; + document.getElementById('errors').hidden = false; + } + + completeAuthorization(event) { + event.target.parentElement.disabled = true; + + document.getElementById('server-response').submit(); + } + + completePaymentUsingToken(event) { + event.target.parentElement.disabled = true; + + document.getElementById('server-response').submit(); + } + + completePaymentWithoutToken(event) { + event.target.parentElement.disabled = true; + + let tokenBillingCheckbox = document.querySelector( + 'input[name="token-billing-checkbox"]:checked' + ); + + if (tokenBillingCheckbox) { + document.querySelector('input[name="store_card"]').value = + tokenBillingCheckbox.value; + } + + document.getElementById('server-response').submit(); + } + + initialize() { + this.eWAY = eWAY.setupSecureField(this.groupFieldConfig, (event) => this.securePanelCallback(event)) + } + + handle() { + this.initialize(); + + document + .getElementById('authorize-card') + ?.addEventListener('click', (e) => this.completeAuthorization(e)) + + Array + .from(document.getElementsByClassName('toggle-payment-with-token')) + .forEach((element) => element.addEventListener('click', (element) => { + document.getElementById('eway-secure-panel').classList.add('hidden'); + document.getElementById('save-card--container').style.display = 'none'; + document.querySelector('input[name=token]').value = element.target.dataset.token; + document.getElementById('pay-now').disabled = false; + })); + + document + .getElementById('toggle-payment-with-credit-card') + .addEventListener('click', (element) => { + document.getElementById('eway-secure-panel').classList.remove('hidden'); + document.getElementById('save-card--container').style.display = 'grid'; + document.querySelector('input[name=token]').value = ""; + document.getElementById('pay-now').disabled = true; + }); + + document + .getElementById('pay-now') + ?.addEventListener('click', (e) => { + let tokenInput = document.querySelector('input[name=token]'); + + if (tokenInput.value) { + return this.completePaymentUsingToken(e); + } + + return this.completePaymentWithoutToken(e); + }); + } + } + + new EwayRapid().handle() + @endsection From 0a7a0566154e5db1d1dde8d0cbccdbbd131249fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:16:23 +0200 Subject: [PATCH 19/38] Extract scripts to separate file --- .../js/clients/payments/eway-credit-card.js | 510 ++++++++++++++++++ .../gateways/eway/authorize.blade.php | 307 +---------- .../ninja2020/gateways/eway/pay.blade.php | 367 +------------ webpack.mix.js | 4 + 4 files changed, 516 insertions(+), 672 deletions(-) create mode 100644 resources/js/clients/payments/eway-credit-card.js diff --git a/resources/js/clients/payments/eway-credit-card.js b/resources/js/clients/payments/eway-credit-card.js new file mode 100644 index 000000000000..3b0c3f6053c8 --- /dev/null +++ b/resources/js/clients/payments/eway-credit-card.js @@ -0,0 +1,510 @@ +/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */ + +class EwayRapid { + constructor() { + this.cardStyles = + 'padding: 2px; border: 1px solid #AAA; border-radius: 3px; height: 34px; width: 100%;'; + + this.errorCodes = new Map(); + + this.errorCodes.set('V6000', 'Validation error'); + this.errorCodes.set('V6001', 'Invalid CustomerIP'); + this.errorCodes.set('V6002', 'Invalid DeviceID'); + this.errorCodes.set('V6003', 'Invalid Request PartnerID'); + this.errorCodes.set('V6004', 'Invalid Request Method'); + this.errorCodes.set( + 'V6010', + 'Invalid TransactionType, account not certified for eCome only MOTO or Recurring available' + ); + this.errorCodes.set('V6011', 'Invalid Payment TotalAmount'); + this.errorCodes.set('V6012', 'Invalid Payment InvoiceDescription'); + this.errorCodes.set('V6013', 'Invalid Payment InvoiceNumber'); + this.errorCodes.set('V6014', 'Invalid Payment InvoiceReference'); + this.errorCodes.set('V6015', 'Invalid Payment CurrencyCode'); + this.errorCodes.set('V6016', 'Payment Required'); + this.errorCodes.set('V6017', 'Payment CurrencyCode Required'); + this.errorCodes.set('V6018', 'Unknown Payment CurrencyCode'); + this.errorCodes.set( + 'V6019', + 'Cardholder identity authentication required' + ); + this.errorCodes.set('V6020', 'Cardholder Input Required'); + this.errorCodes.set('V6021', 'EWAY_CARDHOLDERNAME Required'); + this.errorCodes.set('V6022', 'EWAY_CARDNUMBER Required'); + this.errorCodes.set('V6023', 'EWAY_CARDCVN Required'); + this.errorCodes.set( + 'V6024', + 'Cardholder Identity Authentication One Time Password Not Active Yet' + ); + this.errorCodes.set('V6025', 'PIN Required'); + this.errorCodes.set('V6033', 'Invalid Expiry Date'); + this.errorCodes.set('V6034', 'Invalid Issue Number'); + this.errorCodes.set('V6035', 'Invalid Valid From Date'); + this.errorCodes.set('V6039', 'Invalid Network Token Status'); + this.errorCodes.set('V6040', 'Invalid TokenCustomerID'); + this.errorCodes.set('V6041', 'Customer Required'); + this.errorCodes.set('V6042', 'Customer FirstName Required'); + this.errorCodes.set('V6043', 'Customer LastName Required'); + this.errorCodes.set('V6044', 'Customer CountryCode Required'); + this.errorCodes.set('V6045', 'Customer Title Required'); + this.errorCodes.set('V6046', 'TokenCustomerID Required'); + this.errorCodes.set('V6047', 'RedirectURL Required'); + this.errorCodes.set( + 'V6048', + 'CheckoutURL Required when CheckoutPayment specified' + ); + this.errorCodes.set('V6049', 'nvalid Checkout URL'); + this.errorCodes.set('V6051', 'Invalid Customer FirstName'); + this.errorCodes.set('V6052', 'Invalid Customer LastName'); + this.errorCodes.set('V6053', 'Invalid Customer CountryCode'); + this.errorCodes.set('V6058', 'Invalid Customer Title'); + this.errorCodes.set('V6059', 'Invalid RedirectURL'); + this.errorCodes.set('V6060', 'Invalid TokenCustomerID'); + this.errorCodes.set('V6061', 'Invalid Customer Reference'); + this.errorCodes.set('V6062', 'Invalid Customer CompanyName'); + this.errorCodes.set('V6063', 'Invalid Customer JobDescription'); + this.errorCodes.set('V6064', 'Invalid Customer Street1'); + this.errorCodes.set('V6065', 'Invalid Customer Street2'); + this.errorCodes.set('V6066', 'Invalid Customer City'); + this.errorCodes.set('V6067', 'Invalid Customer State'); + this.errorCodes.set('V6068', 'Invalid Customer PostalCode'); + this.errorCodes.set('V6069', 'Invalid Customer Email'); + this.errorCodes.set('V6070', 'Invalid Customer Phone'); + this.errorCodes.set('V6071', 'Invalid Customer Mobile'); + this.errorCodes.set('V6072', 'Invalid Customer Comments'); + this.errorCodes.set('V6073', 'Invalid Customer Fax'); + this.errorCodes.set('V6074', 'Invalid Customer URL'); + this.errorCodes.set('V6075', 'Invalid ShippingAddress FirstName'); + this.errorCodes.set('V6076', 'Invalid ShippingAddress LastName'); + this.errorCodes.set('V6077', 'Invalid ShippingAddress Street1'); + this.errorCodes.set('V6078', 'Invalid ShippingAddress Street2'); + this.errorCodes.set('V6079', 'Invalid ShippingAddress City'); + this.errorCodes.set('V6080', 'Invalid ShippingAddress State'); + this.errorCodes.set('V6081', 'Invalid ShippingAddress PostalCode'); + this.errorCodes.set('V6082', 'Invalid ShippingAddress Email'); + this.errorCodes.set('V6083', 'Invalid ShippingAddress Phone'); + this.errorCodes.set('V6084', 'Invalid ShippingAddress Country'); + this.errorCodes.set('V6085', 'Invalid ShippingAddress ShippingMethod'); + this.errorCodes.set('V6086', 'Invalid ShippingAddress Fax'); + this.errorCodes.set('V6091', 'Unknown Customer CountryCode'); + this.errorCodes.set('V6092', 'Unknown ShippingAddress CountryCode'); + this.errorCodes.set('V6093', 'Insufficient Address Information'); + this.errorCodes.set('V6100', 'Invalid EWAY_CARDNAME'); + this.errorCodes.set('V6101', 'Invalid EWAY_CARDEXPIRYMONTH'); + this.errorCodes.set('V6102', 'Invalid EWAY_CARDEXPIRYYEAR'); + this.errorCodes.set('V6103', 'Invalid EWAY_CARDSTARTMONTH'); + this.errorCodes.set('V6104', 'Invalid EWAY_CARDSTARTYEAR'); + this.errorCodes.set('V6105', 'Invalid EWAY_CARDISSUENUMBER'); + this.errorCodes.set('V6106', 'Invalid EWAY_CARDCVN'); + this.errorCodes.set('V6107', 'Invalid EWAY_ACCESSCODE'); + this.errorCodes.set('V6108', 'Invalid CustomerHostAddress'); + this.errorCodes.set('V6109', 'Invalid UserAgent'); + this.errorCodes.set('V6110', 'Invalid EWAY_CARDNUMBER'); + this.errorCodes.set( + 'V6111', + 'Unauthorised API Access, Account Not PCI Certified' + ); + this.errorCodes.set( + 'V6112', + 'Redundant card details other than expiry year and month' + ); + this.errorCodes.set('V6113', 'Invalid transaction for refund'); + this.errorCodes.set('V6114', 'Gateway validation error'); + this.errorCodes.set( + 'V6115', + 'Invalid DirectRefundRequest, Transaction ID' + ); + this.errorCodes.set( + 'V6116', + 'Invalid card data on original TransactionID' + ); + this.errorCodes.set( + 'V6117', + 'Invalid CreateAccessCodeSharedRequest, FooterText' + ); + this.errorCodes.set( + 'V6118', + 'Invalid CreateAccessCodeSharedRequest, HeaderText' + ); + this.errorCodes.set( + 'V6119', + 'Invalid CreateAccessCodeSharedRequest, Language' + ); + this.errorCodes.set( + 'V6120', + 'Invalid CreateAccessCodeSharedRequest, LogoUrl' + ); + this.errorCodes.set( + 'V6121', + 'Invalid TransactionSearch, Filter Match Type' + ); + this.errorCodes.set( + 'V6122', + 'Invalid TransactionSearch, Non numeric Transaction ID' + ); + this.errorCodes.set( + 'V6123', + 'Invalid TransactionSearch,no TransactionID or AccessCode specified' + ); + this.errorCodes.set( + 'V6124', + 'Invalid Line Items. The line items have been provided however the totals do not match the TotalAmount field' + ); + this.errorCodes.set('V6125', 'Selected Payment Type not enabled'); + this.errorCodes.set( + 'V6126', + 'Invalid encrypted card number, decryption failed' + ); + this.errorCodes.set( + 'V6127', + 'Invalid encrypted cvn, decryption failed' + ); + this.errorCodes.set('V6128', 'Invalid Method for Payment Type'); + this.errorCodes.set( + 'V6129', + 'Transaction has not been authorised for Capture/Cancellation' + ); + this.errorCodes.set('V6130', 'Generic customer information error'); + this.errorCodes.set('V6131', 'Generic shipping information error'); + this.errorCodes.set( + 'V6132', + 'Transaction has already been completed or voided, operation not permitted' + ); + this.errorCodes.set('V6133', 'Checkout not available for Payment Type'); + this.errorCodes.set( + 'V6134', + 'Invalid Auth Transaction ID for Capture/Void' + ); + this.errorCodes.set('V6135', 'PayPal Error Processing Refund'); + this.errorCodes.set( + 'V6136', + 'Original transaction does not exist or state is incorrect' + ); + this.errorCodes.set('V6140', 'Merchant account is suspended'); + this.errorCodes.set( + 'V6141', + 'Invalid PayPal account details or API signature' + ); + this.errorCodes.set('V6142', 'Authorise not available for Bank/Branch'); + this.errorCodes.set('V6143', 'Invalid Public Key'); + this.errorCodes.set( + 'V6144', + 'Method not available with Public API Key Authentication' + ); + this.errorCodes.set( + 'V6145', + 'Credit Card not allow if Token Customer ID is provided with Public API Key Authentication' + ); + this.errorCodes.set( + 'V6146', + 'Client Side Encryption Key Missing or Invalid' + ); + this.errorCodes.set( + 'V6147', + 'Unable to Create One Time Code for Secure Field' + ); + this.errorCodes.set('V6148', 'Secure Field has Expired'); + this.errorCodes.set('V6149', 'Invalid Secure Field One Time Code'); + this.errorCodes.set('V6150', 'Invalid Refund Amount'); + this.errorCodes.set( + 'V6151', + 'Refund amount greater than original transaction' + ); + this.errorCodes.set( + 'V6152', + 'Original transaction already refunded for total amount' + ); + this.errorCodes.set('V6153', 'Card type not support by merchant'); + this.errorCodes.set('V6154', 'Insufficent Funds Available For Refund'); + this.errorCodes.set('V6155', 'Missing one or more fields in request'); + this.errorCodes.set('V6160', 'Encryption Method Not Supported'); + this.errorCodes.set( + 'V6161', + 'Encryption failed, missing or invalid key' + ); + this.errorCodes.set( + 'V6165', + 'Invalid Click-to-Pay (Visa Checkout) data or decryption failed' + ); + this.errorCodes.set( + 'V6170', + 'Invalid TransactionSearch, Invoice Number is not unique' + ); + this.errorCodes.set( + 'V6171', + 'Invalid TransactionSearch, Invoice Number not found' + ); + this.errorCodes.set('V6220', 'Three domain secure XID invalid'); + this.errorCodes.set('V6221', 'Three domain secure ECI invalid'); + this.errorCodes.set('V6222', 'Three domain secure AVV invalid'); + this.errorCodes.set('V6223', 'Three domain secure XID is required'); + this.errorCodes.set('V6224', 'Three Domain Secure ECI is required'); + this.errorCodes.set('V6225', 'Three Domain Secure AVV is required'); + this.errorCodes.set( + 'V6226', + 'Three Domain Secure AuthStatus is required' + ); + this.errorCodes.set('V6227', 'Three Domain Secure AuthStatus invalid'); + this.errorCodes.set('V6228', 'Three domain secure Version is required'); + this.errorCodes.set( + 'V6230', + 'Three domain secure Directory Server Txn ID invalid' + ); + this.errorCodes.set( + 'V6231', + 'Three domain secure Directory Server Txn ID is required' + ); + this.errorCodes.set('V6232', 'Three domain secure Version is invalid'); + this.errorCodes.set('V6501', 'Invalid Amex InstallementPlan'); + this.errorCodes.set( + 'V6502', + 'Invalid Number Of Installements for Amex. Valid values are from 0 to 99 inclusive' + ); + this.errorCodes.set('V6503', 'Merchant Amex ID required'); + this.errorCodes.set('V6504', 'Invalid Merchant Amex ID'); + this.errorCodes.set('V6505', 'Merchant Terminal ID required'); + this.errorCodes.set('V6506', 'Merchant category code required'); + this.errorCodes.set('V6507', 'Invalid merchant category code'); + this.errorCodes.set('V6508', 'Amex 3D ECI required'); + this.errorCodes.set('V6509', 'Invalid Amex 3D ECI'); + this.errorCodes.set('V6510', 'Invalid Amex 3D verification value'); + this.errorCodes.set('V6511', 'Invalid merchant location data'); + this.errorCodes.set('V6512', 'Invalid merchant street address'); + this.errorCodes.set('V6513', 'Invalid merchant city'); + this.errorCodes.set('V6514', 'Invalid merchant country'); + this.errorCodes.set('V6515', 'Invalid merchant phone'); + this.errorCodes.set('V6516', 'Invalid merchant postcode'); + this.errorCodes.set('V6517', 'Amex connection error'); + this.errorCodes.set( + 'V6518', + 'Amex EC Card Details API returned invalid data' + ); + this.errorCodes.set( + 'V6520', + 'Invalid or missing Amex Point Of Sale Data' + ); + this.errorCodes.set( + 'V6521', + 'Invalid or missing Amex transaction date time' + ); + this.errorCodes.set( + 'V6522', + 'Invalid or missing Amex Original transaction date time' + ); + this.errorCodes.set( + 'V6530', + 'Credit Card Number in non Credit Card Field' + ); + } + + get groupFieldConfig() { + return { + publicApiKey: document.querySelector('meta[name=public-api-key]') + ?.content, + fieldDivId: 'eway-secure-panel', + fieldType: 'group', + styles: '', + layout: { + fonts: ['Lobster'], + rows: [ + { + styles: '', + cells: [ + { + colSpan: 12, + styles: 'margin-top: 15px;', + label: { + fieldColSpan: 4, + text: document.querySelector( + 'meta[name=translation-card-name]' + )?.content, + styles: '', + }, + field: { + fieldColSpan: 8, + fieldType: 'name', + styles: this.cardStyles, + divStyles: 'padding-left: 10px;', + }, + }, + { + colSpan: 12, + styles: 'margin-top: 15px;', + label: { + fieldColSpan: 4, + text: document.querySelector( + 'meta[name=translation-expiry_date]' + )?.content, + styles: '', + }, + field: { + fieldColSpan: 8, + fieldType: 'expirytext', + styles: this.cardStyles, + divStyles: 'padding-left: 10px;', + }, + }, + ], + }, + { + styles: '', + cells: [ + { + colSpan: 12, + styles: 'margin-top: 15px;', + label: { + fieldColSpan: 4, + text: document.querySelector( + 'meta[name=translation-card_number]' + )?.content, + styles: '', + }, + field: { + fieldColSpan: 8, + fieldType: 'card', + styles: this.cardStyles, + }, + }, + { + colSpan: 12, + styles: 'margin-top: 15px;', + label: { + fieldColSpan: 4, + text: document.querySelector( + 'meta[name=translation-cvv]' + )?.content, + styles: '', + }, + field: { + fieldColSpan: 8, + fieldType: 'cvn', + styles: this.cardStyles, + }, + }, + ], + }, + ], + }, + }; + } + + securePanelCallback(event) { + document.getElementById('errors').hidden = true; + + if (event.errors) { + return this.handleErrors(event.errors); + } + + if (document.getElementById('authorize-card')) { + document.getElementById('authorize-card').disabled = false; + } + + if (document.getElementById('pay-now')) { + document.getElementById('pay-now').disabled = false; + } + + document.querySelector('input[name=securefieldcode]').value = + event.secureFieldCode; + } + + handleErrors(errors) { + let _errors = errors.split(' '); + let shouldShowGenericError = false; + let message = ''; + + _errors.forEach((error) => { + message = message.concat(this.errorCodes.get(error) + '
'); + }); + + document.getElementById('errors').innerHTML = message; + document.getElementById('errors').hidden = false; + } + + completeAuthorization(event) { + event.target.parentElement.disabled = true; + + document.getElementById('server-response').submit(); + } + + completePaymentUsingToken(event) { + event.target.parentElement.disabled = true; + + document.getElementById('server-response').submit(); + } + + completePaymentWithoutToken(event) { + event.target.parentElement.disabled = true; + + let tokenBillingCheckbox = document.querySelector( + 'input[name="token-billing-checkbox"]:checked' + ); + + if (tokenBillingCheckbox) { + document.querySelector('input[name="store_card"]').value = + tokenBillingCheckbox.value; + } + + document.getElementById('server-response').submit(); + } + + initialize() { + this.eWAY = eWAY.setupSecureField(this.groupFieldConfig, (event) => + this.securePanelCallback(event) + ); + } + + handle() { + this.initialize(); + + document + .getElementById('authorize-card') + ?.addEventListener('click', (e) => this.completeAuthorization(e)); + + Array.from( + document.getElementsByClassName('toggle-payment-with-token') + ).forEach((element) => + element.addEventListener('click', (element) => { + document + .getElementById('eway-secure-panel') + .classList.add('hidden'); + document.getElementById('save-card--container').style.display = + 'none'; + document.querySelector('input[name=token]').value = + element.target.dataset.token; + document.getElementById('pay-now').disabled = false; + }) + ); + + document + .getElementById('toggle-payment-with-credit-card') + .addEventListener('click', (element) => { + document + .getElementById('eway-secure-panel') + .classList.remove('hidden'); + document.getElementById('save-card--container').style.display = + 'grid'; + document.querySelector('input[name=token]').value = ''; + document.getElementById('pay-now').disabled = true; + }); + + document.getElementById('pay-now')?.addEventListener('click', (e) => { + let tokenInput = document.querySelector('input[name=token]'); + + if (tokenInput.value) { + return this.completePaymentUsingToken(e); + } + + return this.completePaymentWithoutToken(e); + }); + } +} + +new EwayRapid().handle(); diff --git a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php index add65701a903..df9553087b8c 100644 --- a/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/authorize.blade.php @@ -36,310 +36,5 @@ ctrans('texts.credit_card')]) @section('gateway_footer') - - + @endsection diff --git a/resources/views/portal/ninja2020/gateways/eway/pay.blade.php b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php index 1d73902f7168..a6b6aef31eab 100644 --- a/resources/views/portal/ninja2020/gateways/eway/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/eway/pay.blade.php @@ -58,370 +58,5 @@ ctrans('texts.credit_card')]) @section('gateway_footer') - - + @endsection diff --git a/webpack.mix.js b/webpack.mix.js index a5eafbedebe1..28be7be1c3b4 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -81,6 +81,10 @@ mix.js("resources/js/app.js", "public/js") .js( "resources/js/clients/payment_methods/wepay-bank-account.js", "public/js/clients/payment_methods/wepay-bank-account.js" + ) + .js( + "resources/js/clients/payments/eway-credit-card.js", + "public/js/clients/payments/eway-credit-card.js" ); mix.copyDirectory('node_modules/card-js/card-js.min.css', 'public/css/card-js.min.css'); From e8fb4d4444eeddc69bc31ccc2ebe0f2deb30501a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:16:31 +0200 Subject: [PATCH 20/38] Production builds of assets --- public/js/clients/payments/eway-credit-card.js | 2 ++ .../js/clients/payments/eway-credit-card.js.LICENSE.txt | 9 +++++++++ public/mix-manifest.json | 1 + 3 files changed, 12 insertions(+) create mode 100644 public/js/clients/payments/eway-credit-card.js create mode 100644 public/js/clients/payments/eway-credit-card.js.LICENSE.txt diff --git a/public/js/clients/payments/eway-credit-card.js b/public/js/clients/payments/eway-credit-card.js new file mode 100644 index 000000000000..861a0ce08548 --- /dev/null +++ b/public/js/clients/payments/eway-credit-card.js @@ -0,0 +1,2 @@ +/*! For license information please see eway-credit-card.js.LICENSE.txt */ +!function(e){var r={};function t(s){if(r[s])return r[s].exports;var o=r[s]={i:s,l:!1,exports:{}};return e[s].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=r,t.d=function(e,r,s){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:s})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(t.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(s,o,function(r){return e[r]}.bind(null,o));return s},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="/",t(t.s=21)}({21:function(e,r,t){e.exports=t("7VQy")},"7VQy":function(e,r){function t(e,r){for(var t=0;t")})),document.getElementById("errors").innerHTML=s,document.getElementById("errors").hidden=!1}},{key:"completeAuthorization",value:function(e){e.target.parentElement.disabled=!0,document.getElementById("server-response").submit()}},{key:"completePaymentUsingToken",value:function(e){e.target.parentElement.disabled=!0,document.getElementById("server-response").submit()}},{key:"completePaymentWithoutToken",value:function(e){e.target.parentElement.disabled=!0;var r=document.querySelector('input[name="token-billing-checkbox"]:checked');r&&(document.querySelector('input[name="store_card"]').value=r.value),document.getElementById("server-response").submit()}},{key:"initialize",value:function(){var e=this;this.eWAY=eWAY.setupSecureField(this.groupFieldConfig,(function(r){return e.securePanelCallback(r)}))}},{key:"handle",value:function(){var e,r,t=this;this.initialize(),null===(e=document.getElementById("authorize-card"))||void 0===e||e.addEventListener("click",(function(e){return t.completeAuthorization(e)})),Array.from(document.getElementsByClassName("toggle-payment-with-token")).forEach((function(e){return e.addEventListener("click",(function(e){document.getElementById("eway-secure-panel").classList.add("hidden"),document.getElementById("save-card--container").style.display="none",document.querySelector("input[name=token]").value=e.target.dataset.token,document.getElementById("pay-now").disabled=!1}))})),document.getElementById("toggle-payment-with-credit-card").addEventListener("click",(function(e){document.getElementById("eway-secure-panel").classList.remove("hidden"),document.getElementById("save-card--container").style.display="grid",document.querySelector("input[name=token]").value="",document.getElementById("pay-now").disabled=!0})),null===(r=document.getElementById("pay-now"))||void 0===r||r.addEventListener("click",(function(e){return document.querySelector("input[name=token]").value?t.completePaymentUsingToken(e):t.completePaymentWithoutToken(e)}))}}])&&t(r.prototype,s),o&&t(r,o),e}())).handle()}}); \ No newline at end of file diff --git a/public/js/clients/payments/eway-credit-card.js.LICENSE.txt b/public/js/clients/payments/eway-credit-card.js.LICENSE.txt new file mode 100644 index 000000000000..6b30888ddb5b --- /dev/null +++ b/public/js/clients/payments/eway-credit-card.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index b2050020b4b2..5d00d93b1188 100755 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -11,6 +11,7 @@ "/js/clients/payments/braintree-paypal.js": "/js/clients/payments/braintree-paypal.js?id=c35db3cbb65806ab6a8a", "/js/clients/payments/card-js.min.js": "/js/clients/payments/card-js.min.js?id=5469146cd629ea1b5c20", "/js/clients/payments/checkout-credit-card.js": "/js/clients/payments/checkout-credit-card.js?id=065e5450233cc5b47020", + "/js/clients/payments/eway-credit-card.js": "/js/clients/payments/eway-credit-card.js?id=95d6bedbb7ec7d942e13", "/js/clients/payments/stripe-ach.js": "/js/clients/payments/stripe-ach.js?id=81c2623fc1e5769b51c7", "/js/clients/payments/stripe-alipay.js": "/js/clients/payments/stripe-alipay.js?id=665ddf663500767f1a17", "/js/clients/payments/stripe-credit-card.js": "/js/clients/payments/stripe-credit-card.js?id=f1719b79a2bb274d3f64", From 5d12c331caf8e167d41e015ce4b5a62cb0415d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:18:26 +0200 Subject: [PATCH 21/38] Scaffold CreditCardTest --- .../Gateways/Eway/CreditCardTest.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php new file mode 100644 index 000000000000..c038aa926a97 --- /dev/null +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -0,0 +1,35 @@ +driver->manage()->deleteAllCookies(); + } + + $this->browse(function (Browser $browser) { + $browser + ->visit(new Login()) + ->auth(); + }); + } +} From 1d1ca46aac80771ced3ec3f960e05ba7ce9b0a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:23:37 +0200 Subject: [PATCH 22/38] Credit card: Authorizing test --- .../Gateways/Eway/CreditCardTest.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index c038aa926a97..63aaaa22ce4b 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -32,4 +32,23 @@ class CreditCardTest extends DuskTestCase ->auth(); }); } + + public function testAddingCreditCardStandalone() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.payment_methods.index') + ->press('Add Payment Method') + ->clickLink('Credit Card') + ->withinFrame('iframe', function (Browser $browser) { + $browser + ->type('EWAY_CARDNAME', 'Invoice Ninja') + ->type('EWAY_CARDNUMBER', '4111 1111 1111 1111') + ->type('EWAY_CARDEXPIRY', '04/22') + ->type('EWAY_CARDCVN', '100'); + }) + ->press('Add Payment Method') + ->waitForText('**** 1111'); + }); + } } From c108a5bcfc168435e58fff4f0d76fcab92d1c02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:24:26 +0200 Subject: [PATCH 23/38] Credit card: Removing test --- .../ClientPortal/Gateways/Eway/CreditCardTest.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index 63aaaa22ce4b..6114ee5aa5ae 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -51,4 +51,17 @@ class CreditCardTest extends DuskTestCase ->waitForText('**** 1111'); }); } + + public function testRemoveCreditCard() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.payment_methods.index') + ->clickLink('View') + ->press('Remove Payment Method') + ->waitForText('Confirmation') + ->click('@confirm-payment-removal') + ->assertSee('Payment method has been successfully removed.'); + }); + } } From 79306ec4beeb4ce34c63f9ee67c7af65514eff3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:25:05 +0200 Subject: [PATCH 24/38] Credit card: Pay with new --- .../Gateways/Eway/CreditCardTest.php | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index 6114ee5aa5ae..0f3bbeb997bf 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -33,6 +33,26 @@ class CreditCardTest extends DuskTestCase }); } + public function testPaymentWithNewCard() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.invoices.index') + ->click('@pay-now') + ->click('@pay-now-dropdown') + ->clickLink('Credit Card') + ->withinFrame('iframe', function (Browser $browser) { + $browser + ->type('EWAY_CARDNAME', 'Invoice Ninja') + ->type('EWAY_CARDNUMBER', '4111 1111 1111 1111') + ->type('EWAY_CARDEXPIRY', '04/22') + ->type('EWAY_CARDCVN', '100'); + }) + ->click('#pay-now') + ->waitForText('Details of the payment', 60); + }); + } + public function testAddingCreditCardStandalone() { $this->browse(function (Browser $browser) { From f6ee61d9855fe5fdbad48d3bb69c3b60b4f6aed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:25:42 +0200 Subject: [PATCH 25/38] Credit card: Pay with new card and save for future use --- .../Gateways/Eway/CreditCardTest.php | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index 0f3bbeb997bf..d4a9c1773723 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -53,6 +53,30 @@ class CreditCardTest extends DuskTestCase }); } + public function testPayWithNewCardAndSaveForFutureUse() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.invoices.index') + ->click('@pay-now') + ->click('@pay-now-dropdown') + ->clickLink('Credit Card') + ->withinFrame('iframe', function (Browser $browser) { + $browser + ->type('EWAY_CARDNAME', 'Invoice Ninja') + ->type('EWAY_CARDNUMBER', '4111 1111 1111 1111') + ->type('EWAY_CARDEXPIRY', '04/22') + ->type('EWAY_CARDCVN', '100'); + }) + ->radio('#proxy_is_default', true) + ->click('#pay-now') + ->waitForText('Details of the payment', 60) + ->visitRoute('client.payment_methods.index') + ->clickLink('View') + ->assertSee('1111'); + }); + } + public function testAddingCreditCardStandalone() { $this->browse(function (Browser $browser) { From fc2094b9518b92592b4d92f053c6487838bc2cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:26:00 +0200 Subject: [PATCH 26/38] Credit card: Pay with saved card --- .../ClientPortal/Gateways/Eway/CreditCardTest.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index d4a9c1773723..95357d6ea0a8 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -77,6 +77,20 @@ class CreditCardTest extends DuskTestCase }); } + public function testPayWithSavedCreditCard() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.invoices.index') + ->click('@pay-now') + ->click('@pay-now-dropdown') + ->clickLink('Credit Card') + ->click('.toggle-payment-with-token') + ->click('#pay-now') + ->waitForText('Details of the payment', 60); + }); + } + public function testAddingCreditCardStandalone() { $this->browse(function (Browser $browser) { From ec9d2cc292ce280cb1866680fd9c157540547c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Sun, 15 Aug 2021 16:26:18 +0200 Subject: [PATCH 27/38] Update order of tests --- .../Gateways/Eway/CreditCardTest.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php index 95357d6ea0a8..528422ba0759 100644 --- a/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php +++ b/tests/Browser/ClientPortal/Gateways/Eway/CreditCardTest.php @@ -91,6 +91,19 @@ class CreditCardTest extends DuskTestCase }); } + public function testRemoveCreditCard() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.payment_methods.index') + ->clickLink('View') + ->press('Remove Payment Method') + ->waitForText('Confirmation') + ->click('@confirm-payment-removal') + ->assertSee('Payment method has been successfully removed.'); + }); + } + public function testAddingCreditCardStandalone() { $this->browse(function (Browser $browser) { @@ -109,17 +122,4 @@ class CreditCardTest extends DuskTestCase ->waitForText('**** 1111'); }); } - - public function testRemoveCreditCard() - { - $this->browse(function (Browser $browser) { - $browser - ->visitRoute('client.payment_methods.index') - ->clickLink('View') - ->press('Remove Payment Method') - ->waitForText('Confirmation') - ->click('@confirm-payment-removal') - ->assertSee('Payment method has been successfully removed.'); - }); - } } From 46f14392f5fbc05c7a3447cfec0a01a9216a0297 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 16 Aug 2021 19:02:21 +1000 Subject: [PATCH 28/38] Process payments with eWay --- app/PaymentDrivers/Eway/CreditCard.php | 32 ++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index 3338c8aaf5b9..0eb253fa5e10 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -178,9 +178,37 @@ class CreditCard } - +/* +array:9 [▼ + "_token" => "RpkUNg0gHYfzLKPCJG3EtmshGiwDUeytRG53b1Or" + "gateway_response" => null + "store_card" => true + "payment_hash" => "1wC7J7Jo1jagV5oBaWSxz7b2lSLsvVMp" + "company_gateway_id" => "6" + "payment_method_id" => "1" + "token" => null + "securefieldcode" => "F9802rbHYa0St-w3QpBXvNaiNFMNhmY7OmZimH-HROUzS1K0niXOlqXUzugz4mnTqJVqK" + "q" => "/client/payments/process/response" +] + */ public function paymentResponse($request) { - + dd($request->all()); + + $transaction = [ + 'Payment' => [ + 'TotalAmount' => 1000, + ], + 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, + 'SecuredCardData' => '44DD7jYYyRgaQnVibOAsYbbFIYmSXbS6hmTxosAhG6CK1biw=', + ]; + + $response = $client->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + } + + + private function convertAmountForEway($amount) + { + } } \ No newline at end of file From 6b3938dfb41f7d46614c3e160a591e4e7e715208 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 18 Aug 2021 13:03:38 +1000 Subject: [PATCH 29/38] Working on eWay --- app/PaymentDrivers/Eway/CreditCard.php | 33 +++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index 0eb253fa5e10..37ec91d565e2 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -193,22 +193,43 @@ array:9 [▼ */ public function paymentResponse($request) { - dd($request->all()); + $state = [ + 'server_response' => $request->all(), + ]; + + $this->eway_driver->payment_hash->data = array_merge((array) $this->eway_driver->payment_hash->data, $state); + $this->eway_driver->payment_hash->save(); $transaction = [ 'Payment' => [ - 'TotalAmount' => 1000, + 'TotalAmount' => $this->convertAmountForEway(), ], 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, - 'SecuredCardData' => '44DD7jYYyRgaQnVibOAsYbbFIYmSXbS6hmTxosAhG6CK1biw=', + 'SecuredCardData' => $request->input('securefieldcode'), ]; - $response = $client->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + $response = $this->eway_driver->init()->eway->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + +dd($response); + + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + if(!$response_status['success']) + throw new PaymentFailed($response_status['message'], 400); + + } - private function convertAmountForEway($amount) + private function convertAmountForEway() { - + + $amount = $this->eway_driver->payment_hash->data->amount_with_fee; + + if(in_array($this->eway_driver->client->currency()->code, ['VND', 'JPY', 'KRW', 'GNF', 'IDR', 'PYG', 'RWF', 'UGX', 'VUV', 'XAF', 'XPF'])) + return $amount; + + return $amount * 100; } + } \ No newline at end of file From 676d3a52349c8cd63a0a68a92dfa27feb3978a21 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 18 Aug 2021 13:27:44 +1000 Subject: [PATCH 30/38] eWay payments --- app/PaymentDrivers/Eway/CreditCard.php | 51 +++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index 37ec91d565e2..fd821e1d70d9 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -23,12 +23,14 @@ use App\Models\PaymentType; use App\Models\SystemLog; use App\PaymentDrivers\EwayPaymentDriver; use App\PaymentDrivers\Eway\ErrorCode; +use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; class CreditCard { + use MakesHash; public $eway_driver; @@ -210,21 +212,42 @@ array:9 [▼ $response = $this->eway_driver->init()->eway->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); -dd($response); - $response_status = ErrorCode::getStatus($response->ResponseMessage); - if(!$response_status['success']) - throw new PaymentFailed($response_status['message'], 400); + if(!$response_status['success']){ + $this->logResponse($response, false); + + throw new PaymentFailed($response_status['message'], 400); + } + + $this->logResponse($response, true); + + $payment = $this->storePayment($response); + + return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); } + private function storePayment($response) + { + $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total; + + $payment_record = []; + $payment_record['amount'] = $amount; + $payment_record['payment_type'] = PaymentType::CREDIT_CARD_OTHER; + $payment_record['gateway_type_id'] = GatewayType::CREDIT_CARD; + $payment_record['transaction_reference'] = $response->TransactionID; + + $payment = $this->eway_driver->createPayment($payment_record); + + return $payment; + } private function convertAmountForEway() { - $amount = $this->eway_driver->payment_hash->data->amount_with_fee; + $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total; if(in_array($this->eway_driver->client->currency()->code, ['VND', 'JPY', 'KRW', 'GNF', 'IDR', 'PYG', 'RWF', 'UGX', 'VUV', 'XAF', 'XPF'])) return $amount; @@ -232,4 +255,22 @@ dd($response); return $amount * 100; } + private function logResponse($response, $success = true) + { + + $logger_message = [ + 'server_response' => $response, + ]; + + SystemLogger::dispatch( + $logger_message, + SystemLog::CATEGORY_GATEWAY_RESPONSE, + $success ? SystemLog::EVENT_GATEWAY_SUCCESS : SystemLog::EVENT_GATEWAY_FAILURE, + SystemLog::TYPE_EWAY, + $this->eway_driver->client, + $this->eway_driver->client->company, + ); + + } + } \ No newline at end of file From f57d6f048fa4d7c7795bc7b5cb4c2642036a0e4a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 18 Aug 2021 18:24:49 +1000 Subject: [PATCH 31/38] Fixes for eWay --- app/Models/SystemLog.php | 2 +- app/PaymentDrivers/Eway/CreditCard.php | 152 ++++++++++--------------- 2 files changed, 64 insertions(+), 90 deletions(-) diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index 4e0f739af243..607cde3688f1 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -68,7 +68,7 @@ class SystemLog extends Model const TYPE_BRAINTREE = 307; const TYPE_WEPAY = 309; const TYPE_PAYFAST = 310; - const TYPE_EWAY = 311; + const TYPE_EWAY = 313; const TYPE_QUOTA_EXCEEDED = 400; const TYPE_UPSTREAM_FAILURE = 401; diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index fd821e1d70d9..c92b0d7cf430 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -50,76 +50,17 @@ class CreditCard } - /* - Eway\Rapid\Model\Response\CreateCustomerResponse {#2374 ▼ - #fillable: array:16 [▶] - #errors: [] - #attributes: array:11 [▼ - "AuthorisationCode" => null - "ResponseCode" => "00" - "ResponseMessage" => "A2000" - "TransactionID" => null - "TransactionStatus" => false - "TransactionType" => "MOTO" - "BeagleScore" => null - "Verification" => Eway\Rapid\Model\Verification {#2553 ▼ - #fillable: array:5 [▶] - #attributes: array:5 [▶] - } - "Customer" => Eway\Rapid\Model\Customer {#2504 ▼ - #fillable: array:38 [▶] - #attributes: array:20 [▼ - "CardDetails" => Eway\Rapid\Model\CardDetails {#2455 ▼ - #fillable: array:8 [▶] - #attributes: array:7 [▼ - "Number" => "411111XXXXXX1111" - "Name" => "Joey Diaz" - "ExpiryMonth" => "10" - "ExpiryYear" => "23" - "StartMonth" => null - "StartYear" => null - "IssueNumber" => null - ] - } - "TokenCustomerID" => 917047257342 - "Reference" => "A12345" - "Title" => "Mr." - "FirstName" => "John" - "LastName" => "Smith" - "CompanyName" => "Demo Shop 123" - "JobDescription" => "PHP Developer" - "Street1" => "Level 5" - "Street2" => "369 Queen Street" - "City" => "Sydney" - "State" => "NSW" - "PostalCode" => "2000" - "Country" => "au" - "Email" => "demo@example.org" - "Phone" => "09 889 0986" - "Mobile" => "09 889 6542" - "Comments" => "" - "Fax" => "" - "Url" => "http://www.ewaypayments.com" - ] - } - "Payment" => Eway\Rapid\Model\Payment {#2564 ▼ - #fillable: array:5 [▶] - #attributes: array:5 [▼ - "TotalAmount" => 0 - "InvoiceNumber" => "" - "InvoiceDescription" => "" - "InvoiceReference" => "" - "CurrencyCode" => "AUD" - ] - } - "Errors" => null - ] -} - */ - public function authorizeResponse($request) { + $token = $this->createEwayToken($request->input('securefieldcode')); + + return redirect()->route('client.payment_methods.index'); + + } + + private function createEwayToken($securefieldcode) + { $transaction = [ 'Reference' => $this->eway_driver->client->number, 'Title' => '', @@ -135,12 +76,8 @@ class CreditCard 'Phone' => $this->eway_driver->client->phone, 'Email' => $this->eway_driver->client->contacts()->first()->email, "Url" => $this->eway_driver->client->website, - // 'Payment' => [ - // 'TotalAmount' => 0, - // ], - // 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, 'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER, - 'SecuredCardData' => $request->input('securefieldcode'), + 'SecuredCardData' => $securefieldcode, ]; $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); @@ -166,8 +103,7 @@ class CreditCard $token = $this->eway_driver->storeGatewayToken($cgt, []); - return redirect()->route('client.payment_methods.index'); - + return $token; } public function paymentView($data) @@ -180,21 +116,9 @@ class CreditCard } -/* -array:9 [▼ - "_token" => "RpkUNg0gHYfzLKPCJG3EtmshGiwDUeytRG53b1Or" - "gateway_response" => null - "store_card" => true - "payment_hash" => "1wC7J7Jo1jagV5oBaWSxz7b2lSLsvVMp" - "company_gateway_id" => "6" - "payment_method_id" => "1" - "token" => null - "securefieldcode" => "F9802rbHYa0St-w3QpBXvNaiNFMNhmY7OmZimH-HROUzS1K0niXOlqXUzugz4mnTqJVqK" - "q" => "/client/payments/process/response" -] - */ public function paymentResponse($request) { + $state = [ 'server_response' => $request->all(), ]; @@ -202,6 +126,23 @@ array:9 [▼ $this->eway_driver->payment_hash->data = array_merge((array) $this->eway_driver->payment_hash->data, $state); $this->eway_driver->payment_hash->save(); + if(boolval($request->input('store_card'))) + { + $token = $this->createEwayToken($request->input('securefieldcode')); + $payment = $this->tokenBilling($token, $this->eway_driver->payment_hash); + + return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); + + } + + if($request->token){ + + $payment = $this->tokenBilling($request->token, $this->eway_driver->payment_hash); + + return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); + + } + $transaction = [ 'Payment' => [ 'TotalAmount' => $this->convertAmountForEway(), @@ -244,10 +185,11 @@ array:9 [▼ return $payment; } - private function convertAmountForEway() + private function convertAmountForEway($amount = false) { - $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total; + if(!$amount) + $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total; if(in_array($this->eway_driver->client->currency()->code, ['VND', 'JPY', 'KRW', 'GNF', 'IDR', 'PYG', 'RWF', 'UGX', 'VUV', 'XAF', 'XPF'])) return $amount; @@ -273,4 +215,36 @@ array:9 [▼ } + + public function tokenBilling($token, $payment_hash) + { + $amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total; + + $transaction = [ + 'Customer' => [ + 'TokenCustomerID' => $token, + ], + 'Payment' => [ + 'TotalAmount' => $this->convertAmountForEway($amount), + ], + 'TransactionType' => \Eway\Rapid\Enum\TransactionType::RECURRING, + ]; + + $response = $this->eway_driver->init()->eway->createTransaction(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); + + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + if(!$response_status['success']){ + + $this->logResponse($response, false); + + throw new PaymentFailed($response_status['message'], 400); + } + + $this->logResponse($response, true); + + $payment = $this->storePayment($response); + + return $payment; + } } \ No newline at end of file From c2a1207a6371cc2eda591ee2c249c23ff9e7aae9 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 20:41:29 +1000 Subject: [PATCH 32/38] Verify peer --- app/Models/Presenters/CompanyPresenter.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/Models/Presenters/CompanyPresenter.php b/app/Models/Presenters/CompanyPresenter.php index c9a7d9aafedc..bcc37919afbf 100644 --- a/app/Models/Presenters/CompanyPresenter.php +++ b/app/Models/Presenters/CompanyPresenter.php @@ -54,12 +54,19 @@ class CompanyPresenter extends EntityPresenter $settings = $this->entity->settings; } + $arrContextOptions=array( + "ssl"=>array( + "verify_peer"=>false, + "verify_peer_name"=>false, + ), + ); + if(strlen($settings->company_logo) >= 1 && (strpos($settings->company_logo, 'http') !== false)) - return "data:image/png;base64, ". base64_encode(file_get_contents($settings->company_logo)); + return "data:image/png;base64, ". base64_encode(file_get_contents($settings->company_logo, false, stream_context_create($arrContextOptions))); else if(strlen($settings->company_logo) >= 1) - return "data:image/png;base64, ". base64_encode(file_get_contents(url('') . $settings->company_logo)); + return "data:image/png;base64, ". base64_encode(file_get_contents(url('') . $settings->company_logo, false, stream_context_create($arrContextOptions))); else - return "data:image/png;base64, ". base64_encode(file_get_contents(asset('images/new_logo.png'))); + return "data:image/png;base64, ". base64_encode(file_get_contents(asset('images/new_logo.png'), false, stream_context_create($arrContextOptions))); } From 120038d616b763f68f6ffd269e7ec133b7c11a5e Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 21:12:13 +1000 Subject: [PATCH 33/38] eway --- app/Models/Gateway.php | 2 +- app/PaymentDrivers/Eway/CreditCard.php | 2 +- app/PaymentDrivers/EwayPaymentDriver.php | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index a99f27d737e1..539b820c0e19 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -82,7 +82,7 @@ class Gateway extends StaticModel return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]];//Authorize.net break; case 3: - return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]];//eWay + return [GatewayType::CREDIT_CARD => ['refund' => false, 'token_billing' => true]];//eWay break; case 15: return [GatewayType::PAYPAL => ['refund' => true, 'token_billing' => false]]; //Paypal diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index c92b0d7cf430..eec96e743f42 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -129,7 +129,7 @@ class CreditCard if(boolval($request->input('store_card'))) { $token = $this->createEwayToken($request->input('securefieldcode')); - $payment = $this->tokenBilling($token, $this->eway_driver->payment_hash); + $payment = $this->tokenBilling($token->token, $this->eway_driver->payment_hash); return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 66dc23c9a443..65559abd41dc 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -89,6 +89,7 @@ class EwayPaymentDriver extends BaseDriver return $this->payment_method->paymentResponse($request); //this is your custom implementation from here } + /* We need PCI compliance prior to enabling this */ public function refund(Payment $payment, $amount, $return_client_response = false) { @@ -99,7 +100,7 @@ class EwayPaymentDriver extends BaseDriver ], ]; - $response = $this->init()->eway->client->refund($refund); + $response = $this->init()->eway->refund($refund); $transaction_reference = ''; $refund_status = true; @@ -118,6 +119,7 @@ class EwayPaymentDriver extends BaseDriver $refund_message = 'Sorry, your refund failed'; } } + return [ 'transaction_reference' => $response->TransactionID, 'transaction_response' => json_encode($response), From 357b8929a6d0b94aa1d8392c09534c5f52a830e0 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 21:46:04 +1000 Subject: [PATCH 34/38] Minor fixes --- app/Models/Gateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 08ce2b692cd2..676112f97911 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -79,7 +79,7 @@ class Gateway extends StaticModel { switch ($this->id) { case 1: - return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]];//Authorize.net + return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]]; //Authorize.net break; case 3: return [GatewayType::CREDIT_CARD => ['refund' => false, 'token_billing' => true]];//eWay From f07905a0bc9ff30f18e747900b8c042af9df8348 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 22:12:10 +1000 Subject: [PATCH 35/38] Minor fixes --- app/Listeners/Payment/PaymentNotification.php | 2 +- tests/Unit/InvitationTest.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Listeners/Payment/PaymentNotification.php b/app/Listeners/Payment/PaymentNotification.php index d1a7a7b94748..3c3ff8b8635b 100644 --- a/app/Listeners/Payment/PaymentNotification.php +++ b/app/Listeners/Payment/PaymentNotification.php @@ -100,7 +100,7 @@ class PaymentNotification implements ShouldQueue $currency_code = $client->getCurrencyCode(); if (Ninja::isHosted()) { - $item .= ' [R]'; + $item .= ' [R5]'; } $base = "v=1&tid={$analytics_id}&cid={$client->id}&cu={$currency_code}&ti={$entity_number}"; diff --git a/tests/Unit/InvitationTest.php b/tests/Unit/InvitationTest.php index 84ef07a31bf8..f5a0fbd01f5f 100644 --- a/tests/Unit/InvitationTest.php +++ b/tests/Unit/InvitationTest.php @@ -11,8 +11,10 @@ namespace Tests\Unit; use App\Factory\InvoiceInvitationFactory; +use App\Models\CompanyToken; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Routing\Middleware\ThrottleRequests; +use Illuminate\Validation\ValidationException; use Tests\MockAccountData; use Tests\TestCase; @@ -30,6 +32,9 @@ class InvitationTest extends TestCase $this->withoutMiddleware( ThrottleRequests::class ); + + $this->withoutExceptionHandling(); + } public function testInvitationSanity() @@ -54,9 +59,10 @@ class InvitationTest extends TestCase try { $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->put('/api/v1/invoices/'.$this->encodePrimaryKey($this->invoice->id), $this->invoice->toArray()); - } catch (\Exception $e) { + } catch (ValidationException $e) { nlog($e->getMessage()); } From e061d55e70a5f61a8ea67747c7e58d1796c7d286 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 22:19:01 +1000 Subject: [PATCH 36/38] new composer --- composer.lock | 1394 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 905 insertions(+), 489 deletions(-) diff --git a/composer.lock b/composer.lock index a0a7b99fe026..cfb8d9b34fad 100644 --- a/composer.lock +++ b/composer.lock @@ -4,11 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], -<<<<<<< HEAD - "content-hash": "bcd9405b1978cef268d732794883e91d", -======= - "content-hash": "c9f7d76428c6f556ae531570b7761bf5", ->>>>>>> eway + "content-hash": "63f6504b94db87deaf797d454e93c041", "packages": [ { "name": "asm/php-ansible", @@ -163,16 +159,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.185.10", + "version": "3.190.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "667a83e4a18cb75db3ce74162efc97123da96261" + "reference": "b66a54a7825ce5a639fe929906746249d903ae5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/667a83e4a18cb75db3ce74162efc97123da96261", - "reference": "667a83e4a18cb75db3ce74162efc97123da96261", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b66a54a7825ce5a639fe929906746249d903ae5d", + "reference": "b66a54a7825ce5a639fe929906746249d903ae5d", "shasum": "" }, "require": { @@ -247,9 +243,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.185.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.190.4" }, - "time": "2021-07-09T19:21:22+00:00" + "time": "2021-08-17T18:17:31+00:00" }, { "name": "bacon/bacon-qr-code", @@ -359,16 +355,16 @@ }, { "name": "braintree/braintree_php", - "version": "6.3.0", + "version": "6.4.1", "source": { "type": "git", "url": "https://github.com/braintree/braintree_php.git", - "reference": "69e4fab9896ae084ffed1b6bcd2ed186954d14f9" + "reference": "3262deede6bdd134beff6f0940ae5201fc9a854b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/braintree/braintree_php/zipball/69e4fab9896ae084ffed1b6bcd2ed186954d14f9", - "reference": "69e4fab9896ae084ffed1b6bcd2ed186954d14f9", + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/3262deede6bdd134beff6f0940ae5201fc9a854b", + "reference": "3262deede6bdd134beff6f0940ae5201fc9a854b", "shasum": "" }, "require": { @@ -402,22 +398,22 @@ "description": "Braintree PHP Client Library", "support": { "issues": "https://github.com/braintree/braintree_php/issues", - "source": "https://github.com/braintree/braintree_php/tree/6.3.0" + "source": "https://github.com/braintree/braintree_php/tree/6.4.1" }, - "time": "2021-06-21T21:36:45+00:00" + "time": "2021-07-21T21:10:05+00:00" }, { "name": "brick/math", - "version": "0.9.2", + "version": "0.9.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", "shasum": "" }, "require": { @@ -427,7 +423,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" + "vimeo/psalm": "4.9.2" }, "type": "library", "autoload": { @@ -452,15 +448,19 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" + "source": "https://github.com/brick/math/tree/0.9.3" }, "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" } ], - "time": "2021-01-20T22:51:39+00:00" + "time": "2021-08-15T20:50:18+00:00" }, { "name": "checkout/checkout-sdk-php", @@ -648,16 +648,16 @@ }, { "name": "coconutcraig/laravel-postmark", - "version": "v2.10.1", + "version": "v2.10.2", "source": { "type": "git", "url": "https://github.com/craigpaul/laravel-postmark.git", - "reference": "9ed991b3ff5e29dba9d64d25f749f87834b72171" + "reference": "185161b822370c5e03748d6ac888ed77f1162279" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craigpaul/laravel-postmark/zipball/9ed991b3ff5e29dba9d64d25f749f87834b72171", - "reference": "9ed991b3ff5e29dba9d64d25f749f87834b72171", + "url": "https://api.github.com/repos/craigpaul/laravel-postmark/zipball/185161b822370c5e03748d6ac888ed77f1162279", + "reference": "185161b822370c5e03748d6ac888ed77f1162279", "shasum": "" }, "require": { @@ -714,7 +714,7 @@ ], "support": { "issues": "https://github.com/craigpaul/laravel-postmark/issues", - "source": "https://github.com/craigpaul/laravel-postmark/tree/v2.10.1" + "source": "https://github.com/craigpaul/laravel-postmark/tree/v2.10.2" }, "funding": [ { @@ -722,7 +722,7 @@ "type": "github" } ], - "time": "2021-02-24T13:45:30+00:00" + "time": "2021-08-07T22:05:02+00:00" }, { "name": "codedge/laravel-selfupdater", @@ -884,16 +884,16 @@ }, { "name": "composer/composer", - "version": "2.1.3", + "version": "2.1.5", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "fc5c4573aafce3a018eb7f1f8f91cea423970f2e" + "reference": "ac679902e9f66b85a8f9d8c1c88180f609a8745d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/fc5c4573aafce3a018eb7f1f8f91cea423970f2e", - "reference": "fc5c4573aafce3a018eb7f1f8f91cea423970f2e", + "url": "https://api.github.com/repos/composer/composer/zipball/ac679902e9f66b85a8f9d8c1c88180f609a8745d", + "reference": "ac679902e9f66b85a8f9d8c1c88180f609a8745d", "shasum": "" }, "require": { @@ -902,7 +902,7 @@ "composer/semver": "^3.0", "composer/spdx-licenses": "^1.2", "composer/xdebug-handler": "^2.0", - "justinrainbow/json-schema": "^5.2.10", + "justinrainbow/json-schema": "^5.2.11", "php": "^5.3.2 || ^7.0 || ^8.0", "psr/log": "^1.0", "react/promise": "^1.2 || ^2.7", @@ -962,7 +962,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.1.3" + "source": "https://github.com/composer/composer/tree/2.1.5" }, "funding": [ { @@ -978,7 +978,7 @@ "type": "tidelift" } ], - "time": "2021-06-09T14:31:20+00:00" + "time": "2021-07-23T08:35:47+00:00" }, { "name": "composer/metadata-minifier", @@ -1211,21 +1211,21 @@ }, { "name": "composer/xdebug-handler", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { "phpstan/phpstan": "^0.12.55", @@ -1255,7 +1255,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" }, "funding": [ { @@ -1271,7 +1271,7 @@ "type": "tidelift" } ], - "time": "2021-05-05T19:37:51+00:00" + "time": "2021-07-31T17:03:58+00:00" }, { "name": "dasprid/enum", @@ -1321,25 +1321,99 @@ "time": "2020-10-02T16:03:48+00:00" }, { - "name": "doctrine/cache", - "version": "2.0.3", + "name": "dflydev/dot-access-data", + "version": "v3.0.1", "source": { "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/c9622c6820d3ede1e2315a6a377ea1076e421d88", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" + "doctrine/common": ">2.2,<2.4" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", @@ -1348,8 +1422,9 @@ "mongodb/mongodb": "^1.1", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", + "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" @@ -1401,7 +1476,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.0.3" + "source": "https://github.com/doctrine/cache/tree/2.1.1" }, "funding": [ { @@ -1417,7 +1492,7 @@ "type": "tidelift" } ], - "time": "2021-05-25T09:43:04+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/dbal", @@ -2407,16 +2482,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.202.0", + "version": "v0.208.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "c72cb04fde47a2cc3336c1f513f9ff5db27ccc35" + "reference": "77fdacfc99f582970dcb3c41233158b02cc4ba5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/c72cb04fde47a2cc3336c1f513f9ff5db27ccc35", - "reference": "c72cb04fde47a2cc3336c1f513f9ff5db27ccc35", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/77fdacfc99f582970dcb3c41233158b02cc4ba5e", + "reference": "77fdacfc99f582970dcb3c41233158b02cc4ba5e", "shasum": "" }, "require": { @@ -2445,9 +2520,9 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.202.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.208.0" }, - "time": "2021-07-03T11:20:23+00:00" + "time": "2021-08-15T11:18:25+00:00" }, { "name": "google/auth", @@ -2992,28 +3067,32 @@ }, { "name": "http-interop/http-factory-guzzle", - "version": "1.0.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "34861658efb9899a6618cef03de46e2a52c80fc0" + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0", - "reference": "34861658efb9899a6618cef03de46e2a52c80fc0", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.4.2", + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", "psr/http-factory": "^1.0" }, "provide": { "psr/http-factory-implementation": "^1.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.5", - "phpunit/phpunit": "^6.5" + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" }, "type": "library", "autoload": { @@ -3040,32 +3119,32 @@ ], "support": { "issues": "https://github.com/http-interop/http-factory-guzzle/issues", - "source": "https://github.com/http-interop/http-factory-guzzle/tree/master" + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" }, - "time": "2018-07-31T19:32:56+00:00" + "time": "2021-07-21T13:50:14+00:00" }, { "name": "intervention/image", - "version": "2.5.1", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + "reference": "0925f10b259679b5d8ca58f3a2add9255ffcda45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "url": "https://api.github.com/repos/Intervention/image/zipball/0925f10b259679b5d8ca58f3a2add9255ffcda45", + "reference": "0925f10b259679b5d8ca58f3a2add9255ffcda45", "shasum": "" }, "require": { "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1", + "guzzlehttp/psr7": "~1.1 || ^2.0", "php": ">=5.4.0" }, "require-dev": { "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7" + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" }, "suggest": { "ext-gd": "to use GD library based image processing.", @@ -3114,9 +3193,19 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/master" + "source": "https://github.com/Intervention/image/tree/2.6.1" }, - "time": "2019-11-02T09:15:47+00:00" + "funding": [ + { + "url": "https://www.paypal.me/interventionphp", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2021-07-22T14:31:53+00:00" }, { "name": "jean85/pretty-package-versions", @@ -3179,16 +3268,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.10", + "version": "5.2.11", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" + "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", + "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", "shasum": "" }, "require": { @@ -3243,9 +3332,9 @@ ], "support": { "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11" }, - "time": "2020-05-27T16:41:55+00:00" + "time": "2021-07-22T09:24:00+00:00" }, { "name": "laracasts/presenter", @@ -3299,16 +3388,16 @@ }, { "name": "laravel/framework", - "version": "v8.49.2", + "version": "v8.55.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "d9b43ee080b4d51344b2e578aa667f85040471a2" + "reference": "997e2aa23e9103137715018ae926c52f8a1703f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/d9b43ee080b4d51344b2e578aa667f85040471a2", - "reference": "d9b43ee080b4d51344b2e578aa667f85040471a2", + "url": "https://api.github.com/repos/laravel/framework/zipball/997e2aa23e9103137715018ae926c52f8a1703f2", + "reference": "997e2aa23e9103137715018ae926c52f8a1703f2", "shasum": "" }, "require": { @@ -3318,7 +3407,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3", + "league/commonmark": "^1.3|^2.0", "league/flysystem": "^1.1", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.31", @@ -3381,7 +3470,7 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", + "aws/aws-sdk-php": "^3.189.0", "doctrine/dbal": "^2.6|^3.0", "filp/whoops": "^2.8", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", @@ -3394,7 +3483,7 @@ "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.189.0).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -3463,7 +3552,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-07-06T14:06:38+00:00" + "time": "2021-08-17T14:13:34+00:00" }, { "name": "laravel/slack-notification-channel", @@ -3528,16 +3617,16 @@ }, { "name": "laravel/socialite", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "1960802068f81e44b2ae9793932181cf1cb91b5c" + "reference": "59e2f8d9d9663029c7746a92d60bbb7697953bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/1960802068f81e44b2ae9793932181cf1cb91b5c", - "reference": "1960802068f81e44b2ae9793932181cf1cb91b5c", + "url": "https://api.github.com/repos/laravel/socialite/zipball/59e2f8d9d9663029c7746a92d60bbb7697953bb9", + "reference": "59e2f8d9d9663029c7746a92d60bbb7697953bb9", "shasum": "" }, "require": { @@ -3593,7 +3682,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2021-04-06T14:38:16+00:00" + "time": "2021-08-10T17:44:52+00:00" }, { "name": "laravel/tinker", @@ -3723,42 +3812,51 @@ }, { "name": "league/commonmark", - "version": "1.6.5", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "44ffd8d3c4a9133e4bd0548622b09c55af39db5f" + "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/44ffd8d3c4a9133e4bd0548622b09c55af39db5f", - "reference": "44ffd8d3c4a9133e4bd0548622b09c55af39db5f", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2df87709f44b0dd733df86aef0830dce9b1f0f13", + "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4", + "phpstan/phpstan": "^0.12.88", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -3776,7 +3874,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -3790,6 +3888,7 @@ ], "support": { "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", "issues": "https://github.com/thephpleague/commonmark/issues", "rss": "https://github.com/thephpleague/commonmark/releases.atom", "source": "https://github.com/thephpleague/commonmark" @@ -3820,7 +3919,89 @@ "type": "tidelift" } ], - "time": "2021-06-26T11:57:13+00:00" + "time": "2021-08-14T14:06:04+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" }, { "name": "league/csv", @@ -3908,16 +4089,16 @@ }, { "name": "league/flysystem", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", "shasum": "" }, "require": { @@ -3990,7 +4171,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" }, "funding": [ { @@ -3998,7 +4179,7 @@ "type": "other" } ], - "time": "2021-06-23T21:56:05+00:00" + "time": "2021-08-17T13:49:42+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -4228,22 +4409,23 @@ }, { "name": "league/oauth1-client", - "version": "v1.9.1", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "19a3ce488bb1547c906209e8293199ec34eaa5b1" + "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/19a3ce488bb1547c906209e8293199ec34eaa5b1", - "reference": "19a3ce488bb1547c906209e8293199ec34eaa5b1", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/88dd16b0cff68eb9167bfc849707d2c40ad91ddc", + "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc", "shasum": "" }, "require": { "ext-json": "*", "ext-openssl": "*", "guzzlehttp/guzzle": "^6.0|^7.0", + "guzzlehttp/psr7": "^1.7|^2.0", "php": ">=7.1||>=8.0" }, "require-dev": { @@ -4297,9 +4479,9 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth1-client/issues", - "source": "https://github.com/thephpleague/oauth1-client/tree/v1.9.1" + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.0" }, - "time": "2021-07-07T22:54:46+00:00" + "time": "2021-08-15T23:05:49+00:00" }, { "name": "league/omnipay", @@ -4366,16 +4548,16 @@ }, { "name": "livewire/livewire", - "version": "v2.5.3", + "version": "v2.5.5", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "1ca6757c78dbead4db7f52a72dabb8b27efcb3f6" + "reference": "de192292d68276d831e5fd9824c80c3b78a21ddf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/1ca6757c78dbead4db7f52a72dabb8b27efcb3f6", - "reference": "1ca6757c78dbead4db7f52a72dabb8b27efcb3f6", + "url": "https://api.github.com/repos/livewire/livewire/zipball/de192292d68276d831e5fd9824c80c3b78a21ddf", + "reference": "de192292d68276d831e5fd9824c80c3b78a21ddf", "shasum": "" }, "require": { @@ -4426,7 +4608,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v2.5.3" + "source": "https://github.com/livewire/livewire/tree/v2.5.5" }, "funding": [ { @@ -4434,7 +4616,7 @@ "type": "github" } ], - "time": "2021-07-08T13:58:45+00:00" + "time": "2021-07-13T05:03:28+00:00" }, { "name": "maennchen/zipstream-php", @@ -4503,16 +4685,16 @@ }, { "name": "mollie/mollie-api-php", - "version": "v2.36.1", + "version": "v2.37.1", "source": { "type": "git", "url": "https://github.com/mollie/mollie-api-php.git", - "reference": "19f69c116d47a3600f0ed629e0df925a43d3a8f5" + "reference": "260adf68db65edd82b6c11f8fa58622ff72b717c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/19f69c116d47a3600f0ed629e0df925a43d3a8f5", - "reference": "19f69c116d47a3600f0ed629e0df925a43d3a8f5", + "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/260adf68db65edd82b6c11f8fa58622ff72b717c", + "reference": "260adf68db65edd82b6c11f8fa58622ff72b717c", "shasum": "" }, "require": { @@ -4588,9 +4770,9 @@ ], "support": { "issues": "https://github.com/mollie/mollie-api-php/issues", - "source": "https://github.com/mollie/mollie-api-php/tree/v2.36.1" + "source": "https://github.com/mollie/mollie-api-php/tree/v2.37.1" }, - "time": "2021-06-23T12:55:50+00:00" + "time": "2021-08-09T09:30:47+00:00" }, { "name": "moneyphp/money", @@ -4680,16 +4862,16 @@ }, { "name": "monolog/monolog", - "version": "2.3.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "df991fd88693ab703aa403413d83e15f688dae33" + "reference": "71312564759a7db5b789296369c1a264efc43aad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/df991fd88693ab703aa403413d83e15f688dae33", - "reference": "df991fd88693ab703aa403413d83e15f688dae33", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", + "reference": "71312564759a7db5b789296369c1a264efc43aad", "shasum": "" }, "require": { @@ -4760,7 +4942,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.0" + "source": "https://github.com/Seldaek/monolog/tree/2.3.2" }, "funding": [ { @@ -4772,7 +4954,7 @@ "type": "tidelift" } ], - "time": "2021-07-05T11:34:13+00:00" + "time": "2021-07-23T07:42:52+00:00" }, { "name": "mtdowling/jmespath.php", @@ -4897,22 +5079,23 @@ }, { "name": "nesbot/carbon", - "version": "2.50.0", + "version": "2.51.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "f47f17d17602b2243414a44ad53d9f8b9ada5fdb" + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f47f17d17602b2243414a44ad53d9f8b9ada5fdb", - "reference": "f47f17d17602b2243414a44ad53d9f8b9ada5fdb", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { @@ -4931,8 +5114,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -4986,20 +5169,167 @@ "type": "tidelift" } ], - "time": "2021-06-28T22:38:45+00:00" + "time": "2021-07-28T13:16:28+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.11.0", + "name": "nette/schema", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "fe14cf3672a149364fb66dfe11bf6549af899f94" + "url": "https://github.com/nette/schema.git", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/fe14cf3672a149364fb66dfe11bf6549af899f94", - "reference": "fe14cf3672a149364fb66dfe11bf6549af899f94", + "url": "https://api.github.com/repos/nette/schema/zipball/f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.1.4 || ^4.0", + "php": ">=7.1 <8.1" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.1" + }, + "time": "2021-03-04T17:51:11+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822", + "reference": "5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.3" + }, + "time": "2021-08-16T21:05:00+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.12.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143", "shasum": "" }, "require": { @@ -5040,9 +5370,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.11.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" }, - "time": "2021-07-03T13:36:55+00:00" + "time": "2021-07-21T10:44:31+00:00" }, { "name": "nwidart/laravel-modules", @@ -5860,16 +6190,16 @@ }, { "name": "php-http/message", - "version": "1.11.1", + "version": "1.11.2", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "887734d9c515ad9a564f6581a682fff87a6253cc" + "reference": "295c82867d07261f2fa4b3a26677519fc6f7f5f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/887734d9c515ad9a564f6581a682fff87a6253cc", - "reference": "887734d9c515ad9a564f6581a682fff87a6253cc", + "url": "https://api.github.com/repos/php-http/message/zipball/295c82867d07261f2fa4b3a26677519fc6f7f5f6", + "reference": "295c82867d07261f2fa4b3a26677519fc6f7f5f6", "shasum": "" }, "require": { @@ -5928,9 +6258,9 @@ ], "support": { "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.11.1" + "source": "https://github.com/php-http/message/tree/1.11.2" }, - "time": "2021-05-24T18:11:08+00:00" + "time": "2021-08-03T11:52:11+00:00" }, { "name": "php-http/message-factory", @@ -6114,16 +6444,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.9", + "version": "3.0.10", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "a127a5133804ff2f47ae629dd529b129da616ad7" + "reference": "62fcc5a94ac83b1506f52d7558d828617fac9187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a127a5133804ff2f47ae629dd529b129da616ad7", - "reference": "a127a5133804ff2f47ae629dd529b129da616ad7", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/62fcc5a94ac83b1506f52d7558d828617fac9187", + "reference": "62fcc5a94ac83b1506f52d7558d828617fac9187", "shasum": "" }, "require": { @@ -6205,7 +6535,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.9" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.10" }, "funding": [ { @@ -6221,7 +6551,7 @@ "type": "tidelift" } ], - "time": "2021-06-14T06:54:45+00:00" + "time": "2021-08-16T04:24:45+00:00" }, { "name": "pragmarx/google2fa", @@ -6870,20 +7200,21 @@ }, { "name": "ramsey/collection", - "version": "1.1.3", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/eaca1dc1054ddd10cbd83c1461907bee6fb528fa", + "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa", "shasum": "" }, "require": { - "php": "^7.2 || ^8" + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" }, "require-dev": { "captainhook/captainhook": "^5.3", @@ -6893,6 +7224,7 @@ "hamcrest/hamcrest-php": "^2", "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", @@ -6920,7 +7252,7 @@ "homepage": "https://benramsey.com" } ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", + "description": "A PHP library for representing and manipulating collections.", "keywords": [ "array", "collection", @@ -6931,7 +7263,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" + "source": "https://github.com/ramsey/collection/tree/1.2.1" }, "funding": [ { @@ -6943,20 +7275,20 @@ "type": "tidelift" } ], - "time": "2021-01-21T17:40:04+00:00" + "time": "2021-08-06T03:41:06+00:00" }, { "name": "ramsey/uuid", - "version": "4.1.1", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "cd4032040a750077205918c86049aa0f43d22947" + "reference": "fe665a03df4f056aa65af552a96e1976df8c8dae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", - "reference": "cd4032040a750077205918c86049aa0f43d22947", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fe665a03df4f056aa65af552a96e1976df8c8dae", + "reference": "fe665a03df4f056aa65af552a96e1976df8c8dae", "shasum": "" }, "require": { @@ -6970,26 +7302,26 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.8", - "goaop/framework": "^2", + "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", - "php-mock/php-mock-phpunit": "^2.5", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^0.17.1", + "phpbench/phpbench": "^1.0", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12", "phpstan/phpstan-mockery": "^0.12", "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "3.9.4" + "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -7002,7 +7334,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true } }, "autoload": { @@ -7018,7 +7353,6 @@ "MIT" ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", @@ -7026,16 +7360,19 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" + "source": "https://github.com/ramsey/uuid/tree/4.2.1" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" } ], - "time": "2020-08-18T17:17:46+00:00" + "time": "2021-08-11T01:06:55+00:00" }, { "name": "react/promise", @@ -7381,23 +7718,23 @@ }, { "name": "sentry/sentry", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "fafef24c1bc242e614a1afd9533d5dcb7e9c42fe" + "reference": "3d733139a3ba2d1d3a8011580e3acf0ba1d0dc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/fafef24c1bc242e614a1afd9533d5dcb7e9c42fe", - "reference": "fafef24c1bc242e614a1afd9533d5dcb7e9c42fe", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/3d733139a3ba2d1d3a8011580e3acf0ba1d0dc9b", + "reference": "3d733139a3ba2d1d3a8011580e3acf0ba1d0dc9b", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7", + "guzzlehttp/psr7": "^1.7|^2.0", "jean85/pretty-package-versions": "^1.5|^2.0.1", "php": "^7.2|^8.0", "php-http/async-client-implementation": "^1.0", @@ -7407,7 +7744,7 @@ "php-http/message": "^1.5", "psr/http-factory": "^1.0", "psr/http-message-implementation": "^1.0", - "psr/log": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", "symfony/options-resolver": "^3.4.43|^4.4.11|^5.0.11", "symfony/polyfill-php80": "^1.17", "symfony/polyfill-uuid": "^1.13.1" @@ -7469,7 +7806,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.3.1" + "source": "https://github.com/getsentry/sentry-php/tree/3.3.2" }, "funding": [ { @@ -7481,20 +7818,20 @@ "type": "custom" } ], - "time": "2021-06-19T11:37:25+00:00" + "time": "2021-07-19T08:09:34+00:00" }, { "name": "sentry/sentry-laravel", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "91d6644fee3ba447769dc73eda2487a93218c04e" + "reference": "21dd07bdd2956e182ffde32d22872ce1a4b3eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/91d6644fee3ba447769dc73eda2487a93218c04e", - "reference": "91d6644fee3ba447769dc73eda2487a93218c04e", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/21dd07bdd2956e182ffde32d22872ce1a4b3eca9", + "reference": "21dd07bdd2956e182ffde32d22872ce1a4b3eca9", "shasum": "" }, "require": { @@ -7560,7 +7897,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/2.7.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/2.8.0" }, "funding": [ { @@ -7572,20 +7909,20 @@ "type": "custom" } ], - "time": "2021-06-16T09:26:40+00:00" + "time": "2021-08-08T09:03:08+00:00" }, { "name": "stripe/stripe-php", - "version": "v7.88.0", + "version": "v7.93.0", "source": { "type": "git", "url": "https://github.com/stripe/stripe-php.git", - "reference": "7203d00ba9b09830c0c5d5c06a9558db43b8e0ea" + "reference": "c739cf6841bb3498e23bd52ecfadfcb21c521a14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/7203d00ba9b09830c0c5d5c06a9558db43b8e0ea", - "reference": "7203d00ba9b09830c0c5d5c06a9558db43b8e0ea", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/c739cf6841bb3498e23bd52ecfadfcb21c521a14", + "reference": "c739cf6841bb3498e23bd52ecfadfcb21c521a14", "shasum": "" }, "require": { @@ -7631,9 +7968,9 @@ ], "support": { "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v7.88.0" + "source": "https://github.com/stripe/stripe-php/tree/v7.93.0" }, - "time": "2021-07-09T20:01:03+00:00" + "time": "2021-08-11T18:48:54+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -7712,16 +8049,16 @@ }, { "name": "symfony/console", - "version": "v5.3.2", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", "shasum": "" }, "require": { @@ -7729,11 +8066,12 @@ "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2", "symfony/string": "^5.1" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -7741,10 +8079,10 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/event-dispatcher": "^4.4|^5.0", @@ -7790,7 +8128,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" + "source": "https://github.com/symfony/console/tree/v5.3.6" }, "funding": [ { @@ -7806,24 +8144,25 @@ "type": "tidelift" } ], - "time": "2021-06-12T09:42:48+00:00" + "time": "2021-07-27T19:10:22+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -7855,7 +8194,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" + "source": "https://github.com/symfony/css-selector/tree/v5.3.4" }, "funding": [ { @@ -7871,7 +8210,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:40:38+00:00" + "time": "2021-07-21T12:38:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -7942,22 +8281,21 @@ }, { "name": "symfony/error-handler", - "version": "v5.3.3", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "43323e79c80719e8a4674e33484bca98270d223f" + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/43323e79c80719e8a4674e33484bca98270d223f", - "reference": "43323e79c80719e8a4674e33484bca98270d223f", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/281f6c4660bcf5844bb0346fe3a4664722fe4c73", + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", + "psr/log": "^1|^2|^3", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { @@ -7991,7 +8329,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.3.3" + "source": "https://github.com/symfony/error-handler/tree/v5.3.4" }, "funding": [ { @@ -8007,27 +8345,27 @@ "type": "tidelift" } ], - "time": "2021-06-24T08:13:00+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + "reference": "f2fd2208157553874560f3645d4594303058c4bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f2fd2208157553874560f3645d4594303058c4bd", + "reference": "f2fd2208157553874560f3645d4594303058c4bd", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -8037,7 +8375,7 @@ "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/error-handler": "^4.4|^5.0", @@ -8076,7 +8414,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.4" }, "funding": [ { @@ -8092,7 +8430,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -8175,21 +8513,22 @@ }, { "name": "symfony/filesystem", - "version": "v5.3.3", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "19b71c8f313b411172dd5f470fd61f24466d79a9" + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/19b71c8f313b411172dd5f470fd61f24466d79a9", - "reference": "19b71c8f313b411172dd5f470fd61f24466d79a9", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -8217,7 +8556,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.3" + "source": "https://github.com/symfony/filesystem/tree/v5.3.4" }, "funding": [ { @@ -8233,24 +8572,25 @@ "type": "tidelift" } ], - "time": "2021-06-30T07:27:52+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/finder", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" + "reference": "17f50e06018baec41551a71a15731287dbaab186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "url": "https://api.github.com/repos/symfony/finder/zipball/17f50e06018baec41551a71a15731287dbaab186", + "reference": "17f50e06018baec41551a71a15731287dbaab186", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -8278,7 +8618,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "source": "https://github.com/symfony/finder/tree/v5.3.4" }, "funding": [ { @@ -8294,29 +8634,29 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { "name": "symfony/http-client", - "version": "v5.3.3", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "fde4bdb10bf197f932ebccfcb9982881d296fc4c" + "reference": "67c177d4df8601d9a71f9d615c52171c98d22d74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/fde4bdb10bf197f932ebccfcb9982881d296fc4c", - "reference": "fde4bdb10bf197f932ebccfcb9982881d296fc4c", + "url": "https://api.github.com/repos/symfony/http-client/zipball/67c177d4df8601d9a71f9d615c52171c98d22d74", + "reference": "67c177d4df8601d9a71f9d615c52171c98d22d74", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "^1.0", + "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.1", "symfony/http-client-contracts": "^2.4", "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.0|^2" }, "provide": { @@ -8365,7 +8705,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v5.3.3" + "source": "https://github.com/symfony/http-client/tree/v5.3.4" }, "funding": [ { @@ -8381,7 +8721,7 @@ "type": "tidelift" } ], - "time": "2021-06-24T08:13:00+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/http-client-contracts", @@ -8463,23 +8803,23 @@ }, { "name": "symfony/http-foundation", - "version": "v5.3.3", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "0e45ab1574caa0460d9190871a8ce47539e40ccf" + "reference": "a8388f7b7054a7401997008ce9cd8c6b0ab7ac75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0e45ab1574caa0460d9190871a8ce47539e40ccf", - "reference": "0e45ab1574caa0460d9190871a8ce47539e40ccf", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a8388f7b7054a7401997008ce9cd8c6b0ab7ac75", + "reference": "a8388f7b7054a7401997008ce9cd8c6b0ab7ac75", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "predis/predis": "~1.0", @@ -8516,7 +8856,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.3.3" + "source": "https://github.com/symfony/http-foundation/tree/v5.3.6" }, "funding": [ { @@ -8532,25 +8872,25 @@ "type": "tidelift" } ], - "time": "2021-06-27T09:19:40+00:00" + "time": "2021-07-27T17:08:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.3.3", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "90ad9f4b21ddcb8ebe9faadfcca54929ad23f9f8" + "reference": "60030f209018356b3b553b9dbd84ad2071c1b7e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/90ad9f4b21ddcb8ebe9faadfcca54929ad23f9f8", - "reference": "90ad9f4b21ddcb8ebe9faadfcca54929ad23f9f8", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/60030f209018356b3b553b9dbd84ad2071c1b7e0", + "reference": "60030f209018356b3b553b9dbd84ad2071c1b7e0", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/deprecation-contracts": "^2.1", "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", @@ -8558,7 +8898,7 @@ "symfony/http-foundation": "^5.3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/browser-kit": "<4.4", @@ -8577,7 +8917,7 @@ "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", @@ -8628,7 +8968,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.3.3" + "source": "https://github.com/symfony/http-kernel/tree/v5.3.6" }, "funding": [ { @@ -8644,20 +8984,20 @@ "type": "tidelift" } ], - "time": "2021-06-30T08:27:49+00:00" + "time": "2021-07-29T07:06:27+00:00" }, { "name": "symfony/mime", - "version": "v5.3.2", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a" + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/47dd7912152b82d0d4c8d9040dbc93d6232d472a", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a", + "url": "https://api.github.com/repos/symfony/mime/zipball/633e4e8afe9e529e5599d71238849a4218dd497b", + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b", "shasum": "" }, "require": { @@ -8665,7 +9005,7 @@ "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "egulias/email-validator": "~3.0.0", @@ -8711,7 +9051,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.2" + "source": "https://github.com/symfony/mime/tree/v5.3.4" }, "funding": [ { @@ -8727,27 +9067,27 @@ "type": "tidelift" } ], - "time": "2021-06-09T10:58:01+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5" + "reference": "a603e5701bd6e305cfc777a8b50bf081ef73105e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/162e886ca035869866d233a2bfef70cc28f9bbe5", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a603e5701bd6e305cfc777a8b50bf081ef73105e", + "reference": "a603e5701bd6e305cfc777a8b50bf081ef73105e", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -8780,7 +9120,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v5.3.4" }, "funding": [ { @@ -8796,7 +9136,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8959,16 +9299,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { @@ -9020,7 +9360,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -9036,7 +9376,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -9211,16 +9551,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -9271,7 +9611,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -9287,7 +9627,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php72", @@ -9446,16 +9786,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { @@ -9509,7 +9849,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -9525,7 +9865,86 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-07-28T13:41:28+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.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-05-21T13:25:03+00:00" }, { "name": "symfony/polyfill-uuid", @@ -9608,21 +10027,21 @@ }, { "name": "symfony/process", - "version": "v5.3.2", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df" + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/714b47f9196de61a196d86c4bad5f09201b307df", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df", + "url": "https://api.github.com/repos/symfony/process/zipball/d16634ee55b895bd85ec714dadc58e4428ecf030", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -9650,7 +10069,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.2" + "source": "https://github.com/symfony/process/tree/v5.3.4" }, "funding": [ { @@ -9666,20 +10085,20 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:01+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.0", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "81db2d4ae86e9f0049828d9343a72b9523884e5d" + "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/81db2d4ae86e9f0049828d9343a72b9523884e5d", - "reference": "81db2d4ae86e9f0049828d9343a72b9523884e5d", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9012994c4b4fb23e7c57dd86b763a417a04feba", + "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba", "shasum": "" }, "require": { @@ -9689,7 +10108,7 @@ }, "require-dev": { "nyholm/psr7": "^1.1", - "psr/log": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", "symfony/browser-kit": "^4.4 || ^5.0", "symfony/config": "^4.4 || ^5.0", "symfony/event-dispatcher": "^4.4 || ^5.0", @@ -9738,7 +10157,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.1" }, "funding": [ { @@ -9754,26 +10173,26 @@ "type": "tidelift" } ], - "time": "2021-02-17T10:35:25+00:00" + "time": "2021-07-27T17:25:39+00:00" }, { "name": "symfony/routing", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199" + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/368e81376a8e049c37cb80ae87dbfbf411279199", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199", + "url": "https://api.github.com/repos/symfony/routing/zipball/0a35d2f57d73c46ab6d042ced783b81d09a624c4", + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "doctrine/annotations": "<1.12", @@ -9783,7 +10202,7 @@ }, "require-dev": { "doctrine/annotations": "^1.12", - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^5.3", "symfony/dependency-injection": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", @@ -9828,7 +10247,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.0" + "source": "https://github.com/symfony/routing/tree/v5.3.4" }, "funding": [ { @@ -9844,7 +10263,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/service-contracts", @@ -10010,23 +10429,23 @@ }, { "name": "symfony/translation", - "version": "v5.3.3", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "380b8c9e944d0e364b25f28e8e555241eb49c01c" + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/380b8c9e944d0e364b25f28e8e555241eb49c01c", - "reference": "380b8c9e944d0e364b25f28e8e555241eb49c01c", + "url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1", + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { @@ -10040,7 +10459,7 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^5.0", @@ -10085,7 +10504,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.3" + "source": "https://github.com/symfony/translation/tree/v5.3.4" }, "funding": [ { @@ -10101,7 +10520,7 @@ "type": "tidelift" } ], - "time": "2021-06-27T12:22:47+00:00" + "time": "2021-07-25T09:39:16+00:00" }, { "name": "symfony/translation-contracts", @@ -10183,22 +10602,22 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.3", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "46aa709affb9ad3355bd7a810f9662d71025c384" + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46aa709affb9ad3355bd7a810f9662d71025c384", - "reference": "46aa709affb9ad3355bd7a810f9662d71025c384", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -10251,7 +10670,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.6" }, "funding": [ { @@ -10267,7 +10686,7 @@ "type": "tidelift" } ], - "time": "2021-06-24T08:13:00+00:00" + "time": "2021-07-27T01:56:02+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10832,27 +11251,27 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.5.2", + "version": "v2.6.0", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" + "reference": "caa95edeb1ca1bf7532e9118ede4a3c3126408cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "url": "https://api.github.com/repos/amphp/amp/zipball/caa95edeb1ca1bf7532e9118ede4a3c3126408cc", + "reference": "caa95edeb1ca1bf7532e9118ede4a3c3126408cc", "shasum": "" }, "require": { - "php": ">=7" + "php": ">=7.1" }, "require-dev": { "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6.0.9 | ^7", + "phpunit/phpunit": "^7 | ^8 | ^9", "psalm/phar": "^3.11@dev", "react/promise": "^2" }, @@ -10909,7 +11328,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.5.2" + "source": "https://github.com/amphp/amp/tree/v2.6.0" }, "funding": [ { @@ -10917,7 +11336,7 @@ "type": "github" } ], - "time": "2021-01-10T17:06:37+00:00" + "time": "2021-07-16T20:06:06+00:00" }, { "name": "amphp/byte-stream", @@ -11207,16 +11626,16 @@ }, { "name": "brianium/paratest", - "version": "v6.3.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e" + "reference": "3d81e35876f6497467310b123583cca6bd4c38f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/268d5b2b4237c0abf76c4aa9633ad8580be01e1e", - "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/3d81e35876f6497467310b123583cca6bd4c38f2", + "reference": "3d81e35876f6497467310b123583cca6bd4c38f2", "shasum": "" }, "require": { @@ -11228,25 +11647,25 @@ "phpunit/php-code-coverage": "^9.2.6", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.4", + "phpunit/phpunit": "^9.5.8", "sebastian/environment": "^5.1.3", - "symfony/console": "^4.4.21 || ^5.2.6", - "symfony/process": "^4.4.21 || ^5.2.4" + "symfony/console": "^4.4.23 || ^5.3.6", + "symfony/process": "^4.4.22 || ^5.3.4" }, "require-dev": { "doctrine/coding-standard": "^9.0.0", "ekino/phpstan-banned-code": "^0.4.0", "ergebnis/phpstan-rules": "^0.15.3", "ext-posix": "*", - "infection/infection": "^0.21.5", - "phpstan/phpstan": "^0.12.84", + "infection/infection": "^0.24", + "phpstan/phpstan": "^0.12.94", "phpstan/phpstan-deprecation-rules": "^0.12.6", - "phpstan/phpstan-phpunit": "^0.12.18", - "phpstan/phpstan-strict-rules": "^0.12.9", + "phpstan/phpstan-phpunit": "^0.12.21", + "phpstan/phpstan-strict-rules": "^0.12.10", "squizlabs/php_codesniffer": "^3.6.0", - "symfony/filesystem": "^5.2.6", + "symfony/filesystem": "^5.3.4", "thecodingmachine/phpstan-strict-rules": "^0.12.1", - "vimeo/psalm": "^4.7.1" + "vimeo/psalm": "^4.9.2" }, "bin": [ "bin/paratest" @@ -11285,7 +11704,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.3.0" + "source": "https://github.com/paratestphp/paratest/tree/v6.3.1" }, "funding": [ { @@ -11297,7 +11716,7 @@ "type": "paypal" } ], - "time": "2021-04-27T09:24:27+00:00" + "time": "2021-08-10T07:38:58+00:00" }, { "name": "composer/package-versions-deprecated", @@ -11374,16 +11793,16 @@ }, { "name": "darkaonline/l5-swagger", - "version": "8.0.6", + "version": "8.0.7", "source": { "type": "git", "url": "https://github.com/DarkaOnLine/L5-Swagger.git", - "reference": "4d5c4f1230cd7d4a66236ddafb8651b4f9d97d9d" + "reference": "5e3d9c067797ebc35304d20acd94aeb40cde2825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DarkaOnLine/L5-Swagger/zipball/4d5c4f1230cd7d4a66236ddafb8651b4f9d97d9d", - "reference": "4d5c4f1230cd7d4a66236ddafb8651b4f9d97d9d", + "url": "https://api.github.com/repos/DarkaOnLine/L5-Swagger/zipball/5e3d9c067797ebc35304d20acd94aeb40cde2825", + "reference": "5e3d9c067797ebc35304d20acd94aeb40cde2825", "shasum": "" }, "require": { @@ -11441,7 +11860,7 @@ ], "support": { "issues": "https://github.com/DarkaOnLine/L5-Swagger/issues", - "source": "https://github.com/DarkaOnLine/L5-Swagger/tree/8.0.6" + "source": "https://github.com/DarkaOnLine/L5-Swagger/tree/8.0.7" }, "funding": [ { @@ -11449,7 +11868,7 @@ "type": "github" } ], - "time": "2021-05-12T11:18:31+00:00" + "time": "2021-07-12T06:31:40+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -11490,16 +11909,16 @@ }, { "name": "doctrine/annotations", - "version": "1.13.1", + "version": "1.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", "shasum": "" }, "require": { @@ -11556,9 +11975,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.1" + "source": "https://github.com/doctrine/annotations/tree/1.13.2" }, - "time": "2021-05-16T18:07:53+00:00" + "time": "2021-08-05T19:00:23+00:00" }, { "name": "doctrine/instantiator", @@ -11696,16 +12115,16 @@ }, { "name": "facade/ignition", - "version": "2.10.2", + "version": "2.11.4", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4" + "reference": "1b8d83c5dac7c5ee8429daf284ce3f19b1d17ea2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/43688227bbf27c43bc1ad83af224f135b6ef0ff4", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4", + "url": "https://api.github.com/repos/facade/ignition/zipball/1b8d83c5dac7c5ee8429daf284ce3f19b1d17ea2", + "reference": "1b8d83c5dac7c5ee8429daf284ce3f19b1d17ea2", "shasum": "" }, "require": { @@ -11713,7 +12132,6 @@ "ext-mbstring": "*", "facade/flare-client-php": "^1.6", "facade/ignition-contracts": "^1.0.2", - "filp/whoops": "^2.4", "illuminate/support": "^7.0|^8.0", "monolog/monolog": "^2.0", "php": "^7.2.5|^8.0", @@ -11769,7 +12187,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-06-11T06:57:25+00:00" + "time": "2021-08-17T11:45:33+00:00" }, { "name": "facade/ignition-contracts", @@ -11927,16 +12345,16 @@ }, { "name": "filp/whoops", - "version": "2.13.0", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424" + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/2edbc73a4687d9085c8f20f398eebade844e8424", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424", + "url": "https://api.github.com/repos/filp/whoops/zipball/fdf92f03e150ed84d5967a833ae93abffac0315b", + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b", "shasum": "" }, "require": { @@ -11986,7 +12404,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.13.0" + "source": "https://github.com/filp/whoops/tree/2.14.0" }, "funding": [ { @@ -11994,20 +12412,20 @@ "type": "github" } ], - "time": "2021-06-04T12:00:00+00:00" + "time": "2021-07-13T12:00:00+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.19.0", + "version": "v2.19.1", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b" + "reference": "1fa4af92841f67362c053728989b262fba8eb1ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d5b8a9d852b292c2f8a035200fa6844b1f82300b", - "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1fa4af92841f67362c053728989b262fba8eb1ec", + "reference": "1fa4af92841f67362c053728989b262fba8eb1ec", "shasum": "" }, "require": { @@ -12095,7 +12513,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.0" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.1" }, "funding": [ { @@ -12103,7 +12521,7 @@ "type": "github" } ], - "time": "2021-05-03T21:43:24+00:00" + "time": "2021-08-02T17:52:09+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -12158,16 +12576,16 @@ }, { "name": "laravel/dusk", - "version": "v6.15.0", + "version": "v6.17.1", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "45b55fa20321086c4f8cc4e712cbe54db644e21c" + "reference": "20a23f4c92d253fa0d188413b1f820a6cc05a8e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/45b55fa20321086c4f8cc4e712cbe54db644e21c", - "reference": "45b55fa20321086c4f8cc4e712cbe54db644e21c", + "url": "https://api.github.com/repos/laravel/dusk/zipball/20a23f4c92d253fa0d188413b1f820a6cc05a8e6", + "reference": "20a23f4c92d253fa0d188413b1f820a6cc05a8e6", "shasum": "" }, "require": { @@ -12225,22 +12643,22 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v6.15.0" + "source": "https://github.com/laravel/dusk/tree/v6.17.1" }, - "time": "2021-04-06T14:14:57+00:00" + "time": "2021-08-17T15:11:47+00:00" }, { "name": "maximebf/debugbar", - "version": "v1.16.5", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "6d51ee9e94cff14412783785e79a4e7ef97b9d62" + "reference": "0a3532556be0145603f8a9de23e76dc28eed7054" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/6d51ee9e94cff14412783785e79a4e7ef97b9d62", - "reference": "6d51ee9e94cff14412783785e79a4e7ef97b9d62", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0a3532556be0145603f8a9de23e76dc28eed7054", + "reference": "0a3532556be0145603f8a9de23e76dc28eed7054", "shasum": "" }, "require": { @@ -12259,7 +12677,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -12290,9 +12708,9 @@ ], "support": { "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.16.5" + "source": "https://github.com/maximebf/php-debugbar/tree/v1.17.1" }, - "time": "2020-12-07T11:07:24+00:00" + "time": "2021-08-01T09:19:02+00:00" }, { "name": "mockery/mockery", @@ -12477,16 +12895,16 @@ }, { "name": "nunomaduro/collision", - "version": "v5.5.0", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b" + "reference": "0c3c393462eada1233513664e2d22bb9f69ca393" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5cb36122f1c142c3c3ee20a0ae778439ef0244b", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0c3c393462eada1233513664e2d22bb9f69ca393", + "reference": "0c3c393462eada1233513664e2d22bb9f69ca393", "shasum": "" }, "require": { @@ -12498,12 +12916,12 @@ "require-dev": { "brianium/paratest": "^6.1", "fideloper/proxy": "^4.4.1", - "friendsofphp/php-cs-fixer": "^2.17.3", + "friendsofphp/php-cs-fixer": "^3.0", "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "^9.0", + "laravel/framework": "^8.0 || ^9.0", "nunomaduro/larastan": "^0.6.2", "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^7.0", + "orchestra/testbench": "^6.0 || ^7.0", "phpstan/phpstan": "^0.12.64", "phpunit/phpunit": "^9.5.0" }, @@ -12561,7 +12979,7 @@ "type": "patreon" } ], - "time": "2021-06-22T20:47:22+00:00" + "time": "2021-08-13T14:23:01+00:00" }, { "name": "openlss/lib-array2xml", @@ -12618,16 +13036,16 @@ }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -12672,9 +13090,9 @@ "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/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", @@ -13393,16 +13811,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.6", + "version": "9.5.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb" + "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/191768ccd5c85513b4068bdbe99bb6390c7d54fb", + "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb", "shasum": "" }, "require": { @@ -13414,7 +13832,7 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", @@ -13480,7 +13898,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.6" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.8" }, "funding": [ { @@ -13492,7 +13910,7 @@ "type": "github" } ], - "time": "2021-06-23T05:14:38+00:00" + "time": "2021-07-31T15:17:34+00:00" }, { "name": "sebastian/cli-parser", @@ -14460,16 +14878,16 @@ }, { "name": "swagger-api/swagger-ui", - "version": "v3.51.1", + "version": "v3.52.0", "source": { "type": "git", "url": "https://github.com/swagger-api/swagger-ui.git", - "reference": "bb21c6df52eb12cd4bdbf8c29feb500795595fa8" + "reference": "b1ccd1f03a77cfd88b76c1cf3e07b6af7f9bbd7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/bb21c6df52eb12cd4bdbf8c29feb500795595fa8", - "reference": "bb21c6df52eb12cd4bdbf8c29feb500795595fa8", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/b1ccd1f03a77cfd88b76c1cf3e07b6af7f9bbd7b", + "reference": "b1ccd1f03a77cfd88b76c1cf3e07b6af7f9bbd7b", "shasum": "" }, "type": "library", @@ -14515,28 +14933,27 @@ ], "support": { "issues": "https://github.com/swagger-api/swagger-ui/issues", - "source": "https://github.com/swagger-api/swagger-ui/tree/v3.51.1" + "source": "https://github.com/swagger-api/swagger-ui/tree/v3.52.0" }, - "time": "2021-06-30T20:42:58+00:00" + "time": "2021-08-09T15:14:18+00:00" }, { "name": "symfony/debug", - "version": "v4.4.25", + "version": "v4.4.27", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f" + "reference": "2f9160e92eb64c95da7368c867b663a8e34e980c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/a8d2d5c94438548bff9f998ca874e202bb29d07f", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f", + "url": "https://api.github.com/repos/symfony/debug/zipball/2f9160e92eb64c95da7368c867b663a8e34e980c", + "reference": "2f9160e92eb64c95da7368c867b663a8e34e980c", "shasum": "" }, "require": { "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" + "psr/log": "^1|^2|^3" }, "conflict": { "symfony/http-kernel": "<3.4" @@ -14570,7 +14987,7 @@ "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.25" + "source": "https://github.com/symfony/debug/tree/v4.4.27" }, "funding": [ { @@ -14586,7 +15003,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:39:37+00:00" + "time": "2021-07-22T07:21:39+00:00" }, { "name": "symfony/polyfill-php70", @@ -14658,16 +15075,16 @@ }, { "name": "symfony/stopwatch", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "313d02f59d6543311865007e5ff4ace05b35ee65" + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/313d02f59d6543311865007e5ff4ace05b35ee65", - "reference": "313d02f59d6543311865007e5ff4ace05b35ee65", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b24c6a92c6db316fee69e38c80591e080e41536c", + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c", "shasum": "" }, "require": { @@ -14700,7 +15117,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v5.3.4" }, "funding": [ { @@ -14716,20 +15133,20 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-10T08:58:57+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.3", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "485c83a2fb5893e2ff21bf4bfc7fdf48b4967229" + "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/485c83a2fb5893e2ff21bf4bfc7fdf48b4967229", - "reference": "485c83a2fb5893e2ff21bf4bfc7fdf48b4967229", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", + "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", "shasum": "" }, "require": { @@ -14775,7 +15192,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.3" + "source": "https://github.com/symfony/yaml/tree/v5.3.6" }, "funding": [ { @@ -14791,20 +15208,20 @@ "type": "tidelift" } ], - "time": "2021-06-24T08:13:00+00:00" + "time": "2021-07-29T06:20:01+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -14833,7 +15250,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -14841,20 +15258,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "vimeo/psalm", - "version": "4.8.1", + "version": "4.9.3", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69" + "reference": "4c262932602b9bbab5020863d1eb22d49de0dbf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f73f2299dbc59a3e6c4d66cff4605176e728ee69", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/4c262932602b9bbab5020863d1eb22d49de0dbf4", + "reference": "4c262932602b9bbab5020863d1eb22d49de0dbf4", "shasum": "" }, "require": { @@ -14873,7 +15290,7 @@ "felixfbecker/advanced-json-rpc": "^3.0.3", "felixfbecker/language-server-protocol": "^1.5", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.10.5", + "nikic/php-parser": "^4.12", "openlss/lib-array2xml": "^1.0", "php": "^7.1|^8", "sebastian/diff": "^3.0 || ^4.0", @@ -14896,7 +15313,6 @@ "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", "symfony/process": "^4.3 || ^5.0", - "weirdan/phpunit-appveyor-reporter": "^1.0.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "suggest": { @@ -14944,9 +15360,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.8.1" + "source": "https://github.com/vimeo/psalm/tree/4.9.3" }, - "time": "2021-06-20T23:03:20+00:00" + "time": "2021-08-14T16:19:38+00:00" }, { "name": "webmozart/path-util", From 1bb95b3750b29b813ff4afe2cf79eae102fc52c2 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 18 Aug 2021 22:26:27 +1000 Subject: [PATCH 37/38] Bump PHP version minimum to 7.4 --- .github/workflows/phpunit.yml | 2 +- app/Utils/SystemHealth.php | 2 +- composer.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 261ffa7fc66f..559591bf7489 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: operating-system: ['ubuntu-18.04', 'ubuntu-20.04'] - php-versions: ['7.3','7.4','8.0'] + php-versions: ['7.4','8.0'] phpunit-versions: ['latest'] env: diff --git a/app/Utils/SystemHealth.php b/app/Utils/SystemHealth.php index b98d5dd3f539..175d2e575a6c 100644 --- a/app/Utils/SystemHealth.php +++ b/app/Utils/SystemHealth.php @@ -38,7 +38,7 @@ class SystemHealth //'intl', //todo double check whether we need this for email dns validation ]; - private static $php_version = 7.3; + private static $php_version = 7.4; /** * Check loaded extensions / PHP version / DB Connections. diff --git a/composer.json b/composer.json index 3da04197a00a..77996d3fcc91 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ ], "type": "project", "require": { - "php": "^7.3|^7.4|^8.0", + "php": "^7.4|^8.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", From 220d5b1d62a5752b2180e5977d5b68bd41fab596 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 18 Aug 2021 22:32:04 +1000 Subject: [PATCH 38/38] Updated lock --- composer.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.lock b/composer.lock index cfb8d9b34fad..bb2b73b4e27b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "63f6504b94db87deaf797d454e93c041", + "content-hash": "c78080d7228931d63406b506f04a792f", "packages": [ { "name": "asm/php-ansible", @@ -15495,7 +15495,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.3|^7.4|^8.0", + "php": "^7.4|^8.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*"