diff --git a/app/Http/Controllers/EventCheckoutController.php b/app/Http/Controllers/EventCheckoutController.php index a5082315..f6031828 100644 --- a/app/Http/Controllers/EventCheckoutController.php +++ b/app/Http/Controllers/EventCheckoutController.php @@ -16,6 +16,7 @@ use App\Models\QuestionAnswer; use App\Models\ReservedTickets; use App\Models\Ticket; use App\Services\Order as OrderService; +use App\Services\PaymentGateway\Factory as PaymentGatewayFactory; use Carbon\Carbon; use Cookie; use DB; @@ -180,22 +181,17 @@ class EventCheckoutController extends Controller ]); } - if (config('attendize.enable_dummy_payment_gateway') == TRUE) { - $activeAccountPaymentGateway = new AccountPaymentGateway(); - $activeAccountPaymentGateway->fill(['payment_gateway_id' => config('attendize.payment_gateway_dummy')]); - $paymentGateway = $activeAccountPaymentGateway; - } else { - $activeAccountPaymentGateway = $event->account->getGateway($event->account->payment_gateway_id); - //if no payment gateway configured and no offline pay, don't go to the next step and show user error - if (empty($activeAccountPaymentGateway) && !$event->enable_offline_payments) { - return response()->json([ - 'status' => 'error', - 'message' => 'No payment gateway configured', - ]); - } - $paymentGateway = $activeAccountPaymentGateway ? $activeAccountPaymentGateway->payment_gateway : false; + $activeAccountPaymentGateway = $event->account->getGateway($event->account->payment_gateway_id); + //if no payment gateway configured and no offline pay, don't go to the next step and show user error + if (empty($activeAccountPaymentGateway) && !$event->enable_offline_payments) { + return response()->json([ + 'status' => 'error', + 'message' => 'No payment gateway configured', + ]); } + $paymentGateway = $activeAccountPaymentGateway ? $activeAccountPaymentGateway->payment_gateway : false; + /* * The 'ticket_order_{event_id}' session stores everything we need to complete the transaction. */ @@ -274,16 +270,10 @@ class EventCheckoutController extends Controller } return view('Public.ViewEvent.EventPageCheckout', $data); + } - /** - * Create the order, handle payment, update stats, fire off email jobs then redirect user - * - * @param Request $request - * @param $event_id - * @return \Illuminate\Http\JsonResponse - */ - public function postCreateOrder(Request $request, $event_id) + public function postValidateOrder(Request $request, $event_id) { //If there's no session kill the request and redirect back to the event homepage. if (!session()->get('ticket_order_' . $event_id)) { @@ -296,6 +286,13 @@ class EventCheckoutController extends Controller ]); } + $request_data = session()->get('ticket_order_' . $event_id . ".request_data"); + $request_data = (!empty($request_data[0])) ? array_merge($request_data[0], $request->all()) + : $request->all(); + + session()->remove('ticket_order_' . $event_id . '.request_data'); + session()->push('ticket_order_' . $event_id . '.request_data', $request_data); + $event = Event::findOrFail($event_id); $order = new Order(); $ticket_order = session()->get('ticket_order_' . $event_id); @@ -335,92 +332,96 @@ class EventCheckoutController extends Controller ]); } - //Add the request data to a session in case payment is required off-site - session()->push('ticket_order_' . $event_id . '.request_data', $request->except(['card-number', 'card-cvc'])); + return response()->json([ + 'status' => 'success', + 'redirectUrl' => route('showEventPayment', [ + 'event_id' => $event_id, + 'is_embedded' => $this->is_embedded + ]) + ]); - $orderRequiresPayment = $ticket_order['order_requires_payment']; + } - if ($orderRequiresPayment && $request->get('pay_offline') && $event->enable_offline_payments) { + public function showEventPayment(Request $request, $event_id) + { + $order_session = session()->get('ticket_order_' . $event_id); + $event = Event::findOrFail($event_id); + + $payment_gateway = $order_session['payment_gateway']; + $order_total = $order_session['order_total']; + $account_payment_gateway = $order_session['account_payment_gateway']; + + $orderService = new OrderService($order_session['order_total'], $order_session['total_booking_fee'], $event); + $orderService->calculateFinalCosts(); + + $payment_failed = $request->get('is_payment_failed') ? 1 : 0; + + $secondsToExpire = Carbon::now()->diffInSeconds($order_session['expires']); + + $viewData = ['event' => $event, + 'tickets' => $order_session['tickets'], + 'order_total' => $order_total, + 'orderService' => $orderService, + 'order_requires_payment' => (ceil($order_session['order_total']) == 0) ? false : true, + 'account_payment_gateway' => $account_payment_gateway, + 'payment_gateway' => $payment_gateway, + 'secondsToExpire' => $secondsToExpire, + 'payment_failed' => $payment_failed + ]; + + return view('Public.ViewEvent.EventPagePayment', $viewData); + } + + /** + * Create the order and start the payment for the order via Omnipay + * + * + * @param Request $request + * @param $event_id + * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse + * @throws \Exception + */ + public function postCreateOrder(Request $request, $event_id) + { + $request_data = $ticket_order = session()->get('ticket_order_' . $event_id . ".request_data"); + $request_data = array_merge($request_data[0], $request->except(['cardnumber', 'cvc'])); + + session()->remove('ticket_order_' . $event_id . '.request_data'); + session()->push('ticket_order_' . $event_id . '.request_data', $request_data); + + $ticket_order = session()->get('ticket_order_' . $event_id); + + $event = Event::findOrFail($event_id); + + $order_requires_payment = $ticket_order['order_requires_payment']; + + if ($order_requires_payment && $request->get('pay_offline') && $event->enable_offline_payments) { return $this->completeOrder($event_id); } - if (!$orderRequiresPayment) { + if (!$order_requires_payment) { return $this->completeOrder($event_id); } try { - //more transation data being put in here. - $transaction_data = []; - if (config('attendize.enable_dummy_payment_gateway') == TRUE) { - $formData = config('attendize.fake_card_data'); - $transaction_data = [ - 'card' => $formData - ]; - $gateway = Omnipay::create('Dummy'); - $gateway->initialize(); + $order_service = new OrderService($ticket_order['order_total'], $ticket_order['total_booking_fee'], $event); + $order_service->calculateFinalCosts(); - } else { - $gateway = Omnipay::create($ticket_order['payment_gateway']->name); - $gateway->initialize($ticket_order['account_payment_gateway']->config + [ - 'testMode' => config('attendize.enable_test_payments'), - ]); - } + $payment_gateway_config = $ticket_order['account_payment_gateway']->config + [ + 'testMode' => config('attendize.enable_test_payments')]; - $orderService = new OrderService($ticket_order['order_total'], $ticket_order['total_booking_fee'], $event); - $orderService->calculateFinalCosts(); + $payment_gateway_factory = new PaymentGatewayFactory(); + $gateway = $payment_gateway_factory->create($ticket_order['payment_gateway']->name, $payment_gateway_config); + //certain payment gateways require an extra parameter here and there so this method takes care of that + //and sets certain options for the gateway that can be used when the transaction is started + $gateway->extractRequestParameters($request); - $transaction_data += [ - 'amount' => $orderService->getGrandTotal(), - 'currency' => $event->currency->code, - 'description' => 'Order for customer: ' . $request->get('order_email'), - ]; + //generic data that is needed for most orders + $order_total = $order_service->getGrandTotal(); + $order_email = $ticket_order['request_data'][0]['order_email']; - //TODO: class with an interface that builds the transaction data. - switch ($ticket_order['payment_gateway']->id) { - case config('attendize.payment_gateway_dummy'): - $token = uniqid(); - $transaction_data += [ - 'token' => $token, - 'receipt_email' => $request->get('order_email'), - 'card' => $formData - ]; - break; - case config('attendize.payment_gateway_paypal'): - - $transaction_data += [ - 'cancelUrl' => route('showEventCheckoutPaymentReturn', [ - 'event_id' => $event_id, - 'is_payment_cancelled' => 1 - ]), - 'returnUrl' => route('showEventCheckoutPaymentReturn', [ - 'event_id' => $event_id, - 'is_payment_successful' => 1 - ]), - 'brandName' => isset($ticket_order['account_payment_gateway']->config['brandingName']) - ? $ticket_order['account_payment_gateway']->config['brandingName'] - : $event->organiser->name - ]; - break; - case config('attendize.payment_gateway_stripe'): - $token = $request->get('stripeToken'); - $transaction_data += [ - 'token' => $token, - 'receipt_email' => $request->get('order_email'), - ]; - break; - default: - Log::error('No payment gateway configured.'); - return response()->json([ - 'status' => 'error', - 'message' => 'No payment gateway configured.' - ]); - break; - } - - $transaction = $gateway->purchase($transaction_data); - - $response = $transaction->send(); + $response = $gateway->startTransaction($order_total, $order_email, $event); if ($response->isSuccessful()) { @@ -431,11 +432,12 @@ class EventCheckoutController extends Controller } elseif ($response->isRedirect()) { - /* - * As we're going off-site for payment we need to store some data in a session so it's available - * when we return - */ - session()->push('ticket_order_' . $event_id . '.transaction_data', $transaction_data); + $additionalData = ($gateway->storeAdditionalData()) ? $gateway->getAdditionalData($response) : array(); + + session()->push('ticket_order_' . $event_id . '.transaction_data', + $gateway->getTransactionData() + $additionalData); + + Log::info("Redirect url: " . $response->getRedirectUrl()); $return = [ @@ -472,43 +474,34 @@ class EventCheckoutController extends Controller } - /** - * Attempt to complete a user's payment when they return from - * an off-site gateway + * Handles the return when a payment is off site * * @param Request $request * @param $event_id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse + * @throws \Exception */ public function showEventCheckoutPaymentReturn(Request $request, $event_id) { - if ($request->get('is_payment_cancelled') == '1') { - session()->flash('message', trans('Event.payment_cancelled')); - return response()->redirectToRoute('showEventCheckout', [ - 'event_id' => $event_id, - 'is_payment_cancelled' => 1, - ]); - } - $ticket_order = session()->get('ticket_order_' . $event_id); - $gateway = Omnipay::create($ticket_order['payment_gateway']->name); - $gateway->initialize($ticket_order['account_payment_gateway']->config + [ - 'testMode' => config('attendize.enable_test_payments'), - ]); + $payment_gateway_config = $ticket_order['account_payment_gateway']->config + [ + 'testMode' => config('attendize.enable_test_payments')]; - $transaction = $gateway->completePurchase($ticket_order['transaction_data'][0]); + $payment_gateway_factory = new PaymentGatewayFactory(); + $gateway = $payment_gateway_factory->create($ticket_order['payment_gateway']->name, $payment_gateway_config); + $gateway->extractRequestParameters($request); + $response = $gateway->completeTransaction($ticket_order['transaction_data'][0]); - $response = $transaction->send(); if ($response->isSuccessful()) { session()->push('ticket_order_' . $event_id . '.transaction_id', $response->getTransactionReference()); return $this->completeOrder($event_id, false); } else { session()->flash('message', $response->getMessage()); - return response()->redirectToRoute('showEventCheckout', [ + return response()->redirectToRoute('showEventPayment', [ 'event_id' => $event_id, 'is_payment_failed' => 1, ]); @@ -532,6 +525,7 @@ class EventCheckoutController extends Controller $order = new Order(); $ticket_order = session()->get('ticket_order_' . $event_id); + $request_data = $ticket_order['request_data'][0]; $event = Event::findOrFail($ticket_order['event_id']); $attendee_increment = 1; @@ -543,6 +537,11 @@ class EventCheckoutController extends Controller if (isset($ticket_order['transaction_id'])) { $order->transaction_id = $ticket_order['transaction_id'][0]; } + + if (isset($ticket_order['transaction_data'][0]['payment_intent'])) { + $order->payment_intent = $ticket_order['transaction_data'][0]['payment_intent']; + } + if ($ticket_order['order_requires_payment'] && !isset($request_data['pay_offline'])) { $order->payment_gateway_id = $ticket_order['payment_gateway']->id; } @@ -805,4 +804,3 @@ class EventCheckoutController extends Controller } } - diff --git a/app/Http/Controllers/EventOrdersController.php b/app/Http/Controllers/EventOrdersController.php index 37a882c9..c5be49fc 100644 --- a/app/Http/Controllers/EventOrdersController.php +++ b/app/Http/Controllers/EventOrdersController.php @@ -8,7 +8,9 @@ use App\Models\Attendee; use App\Models\Event; use App\Models\EventStats; use App\Models\Order; +use App\Models\PaymentGateway; use App\Services\Order as OrderService; +use App\Services\PaymentGateway\Factory as PaymentGatewayFactory; use DB; use Excel; use Illuminate\Http\Request; @@ -196,11 +198,10 @@ class EventOrdersController extends MyBaseController /** - * Cancels an order - * * @param Request $request * @param $order_id - * @return mixed + * @return \Illuminate\Http\JsonResponse + * @throws \Exception */ public function postCancelOrder(Request $request, $order_id) { @@ -244,24 +245,23 @@ class EventOrdersController extends MyBaseController $order->event->currency))]); } if (!$error_message) { - try { - $gateway = Omnipay::create($order->payment_gateway->name); - $gateway->initialize($order->account->getGateway($order->payment_gateway->id)->config); + try { + + $payment_gateway_config = $order->account->getGateway($order->payment_gateway->id)->config + [ + 'testMode' => config('attendize.enable_test_payments')]; + + $payment_gateway_factory = new PaymentGatewayFactory(); + $gateway = $payment_gateway_factory->create($order->payment_gateway->name, $payment_gateway_config); if ($refund_type === 'full') { /* Full refund */ $refund_amount = $order->organiser_amount - $order->amount_refunded; } - $request = $gateway->refund([ - 'transactionReference' => $order->transaction_id, - 'amount' => $refund_amount, - 'refundApplicationFee' => floatval($order->booking_fee) > 0 ? true : false, - ]); + $refund_application_fee = floatval($order->booking_fee) > 0 ? true : false; + $response = $gateway->refundTransaction($order, $refund_amount, $refund_application_fee); - $response = $request->send(); - - if ($response->isSuccessful()) { + if ($response['successful']) { /* Update the event sales volume*/ $order->event->decrement('sales_volume', $refund_amount); $order->amount_refunded = round(($order->amount_refunded + $refund_amount), 2); @@ -274,10 +274,11 @@ class EventOrdersController extends MyBaseController $order->order_status_id = config('attendize.order_partially_refunded'); } } else { - $error_message = $response->getMessage(); + $error_message = $response['error_message']; } $order->save(); + } catch (\Exeption $e) { Log::error($e); $error_message = trans("Controllers.refund_exception"); diff --git a/app/Http/Controllers/ManageAccountController.php b/app/Http/Controllers/ManageAccountController.php index 02e24c89..20ec3be7 100644 --- a/app/Http/Controllers/ManageAccountController.php +++ b/app/Http/Controllers/ManageAccountController.php @@ -14,6 +14,9 @@ use HttpClient; use Illuminate\Http\Request; use Input; use Mail; +use Services\PaymentGateway\Dummy; +use Services\PaymentGateway\Stripe; +use Services\PaymentGateway\StripeSCA; use Validator; use GuzzleHttp\Client; @@ -31,7 +34,8 @@ class ManageAccountController extends MyBaseController 'account' => Account::find(Auth::user()->account_id), 'timezones' => Timezone::pluck('location', 'id'), 'currencies' => Currency::pluck('title', 'id'), - 'payment_gateways' => PaymentGateway::pluck('provider_name', 'id'), + 'payment_gateways' => PaymentGateway::getAllWithDefaultSet(), + 'default_payment_gateway_id' => PaymentGateway::getDefaultPaymentGatewayId(), 'account_payment_gateways' => AccountPaymentGateway::scope()->get(), 'version_info' => $this->getVersionInfo(), ]; @@ -124,17 +128,29 @@ class ManageAccountController extends MyBaseController public function postEditAccountPayment(Request $request) { $account = Account::find(Auth::user()->account_id); - $gateway_id = $request->get('payment_gateway_id'); + $gateway_id = $request->get('payment_gateway'); - switch ($gateway_id) { - case config('attendize.payment_gateway_stripe') : //Stripe + $payment_gateway = PaymentGateway::where('id', '=', $gateway_id)->first(); + + $config = []; + + switch ($payment_gateway->name) { + case Stripe::GATEWAY_NAME : $config = $request->get('stripe'); break; - case config('attendize.payment_gateway_paypal') : //PayPal - $config = $request->get('paypal'); + case StripeSCA::GATEWAY_NAME : + $config = $request->get('stripe_sca'); break; + case Dummy::GATEWAY_NAME : + break; + } + PaymentGateway::query()->update(['default' => 0]); + + $payment_gateway->default = 1; + $payment_gateway->save(); + $account_payment_gateway = AccountPaymentGateway::firstOrNew( [ 'payment_gateway_id' => $gateway_id, diff --git a/app/Http/routes.php b/app/Http/routes.php index abef3e4f..afe4a75f 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -153,6 +153,16 @@ Route::group( 'uses' => 'EventCheckoutController@postValidateTickets', ]); + Route::post('{event_id}/checkout/validate', [ + 'as' => 'postValidateOrder', + 'uses' => 'EventCheckoutController@postValidateOrder', + ]); + + Route::get('{event_id}/checkout/payment', [ + 'as' => 'showEventPayment', + 'uses' => 'EventCheckoutController@showEventPayment', + ]); + Route::get('{event_id}/checkout/create', [ 'as' => 'showEventCheckout', 'uses' => 'EventCheckoutController@showEventCheckout', @@ -163,7 +173,6 @@ Route::group( 'uses' => 'EventCheckoutController@showEventCheckoutPaymentReturn', ]); - Route::post('{event_id}/checkout/create', [ 'as' => 'postCreateOrder', 'uses' => 'EventCheckoutController@postCreateOrder', diff --git a/app/Models/PaymentGateway.php b/app/Models/PaymentGateway.php index a3143992..947ae82e 100644 --- a/app/Models/PaymentGateway.php +++ b/app/Models/PaymentGateway.php @@ -9,5 +9,38 @@ namespace App\Models; class PaymentGateway extends MyBaseModel { + public $timestamps = false; + /** + * @return array + */ + static public function getAllWithDefaultSet() + { + $payment_gateways = PaymentGateway::all()->toArray(); + $payment_gateway = PaymentGateway::select('id')->where('default', 1)->get()->first(); + if (empty($payment_gateway)) { + $default_payment_gateway_id = config('attendize.default_payment_gateway'); + foreach ($payment_gateways as &$payment_gateway) { + if ($payment_gateway['id'] == $default_payment_gateway_id) { + $payment_gateway['default'] = 1; + } + } + } + + return $payment_gateways; + } + + /** + * @return \Illuminate\Config\Repository|mixed + */ + static public function getDefaultPaymentGatewayId() + { + $payment_gateway = PaymentGateway::select('id')->where('default', 1)->get()->first(); + if (empty($payment_gateway)) { + $default_payment_gateway_id = config('attendize.default_payment_gateway'); + return $default_payment_gateway_id; + } + + return $payment_gateway['id']; + } } diff --git a/app/Services/PaymentGateway/Dummy.php b/app/Services/PaymentGateway/Dummy.php new file mode 100644 index 00000000..78f324f8 --- /dev/null +++ b/app/Services/PaymentGateway/Dummy.php @@ -0,0 +1,79 @@ +gateway = $gateway; + $this->options = []; + } + + private function createTransactionData($order_total, $order_email, $event) + { + $token = uniqid(); + $this->transaction_data = [ + 'amount' => $order_total, + 'currency' => $event->currency->code, + 'description' => 'Order for customer: ' . $order_email, + 'card' => config('attendize.fake_card_data'), + 'token' => $token, + 'receipt_email' => $order_email + ]; + + return $this->transaction_data; + } + + public function startTransaction($order_total, $order_email, $event) + { + + $this->createTransactionData($order_total, $order_email, $event); + $transaction = $this->gateway->purchase($this->transaction_data); + $response = $transaction->send(); + + return $response; + } + + public function getTransactionData() { + return $this->transaction_data; + } + + public function extractRequestParameters($request) {} + + public function completeTransaction($transactionId) {} + + public function getAdditionalData() {} + + public function storeAdditionalData() { + return false; + } + + public function refundTransaction($order, $refund_amount, $refund_application_fee) { + + $request = $this->gateway->refund([ + 'transactionReference' => $order->transaction_id, + 'amount' => $refund_amount, + 'refundApplicationFee' => $refund_application_fee + ]); + + $response = $request->send(); + + if ($response->isSuccessful()) { + $refundResponse['successful'] = true; + } else { + $refundResponse['successful'] = false; + $refundResponse['error_message'] = $response->getMessage(); + } + + return $refundResponse; + } + +} \ No newline at end of file diff --git a/app/Services/PaymentGateway/Factory.php b/app/Services/PaymentGateway/Factory.php new file mode 100644 index 00000000..cf4008f1 --- /dev/null +++ b/app/Services/PaymentGateway/Factory.php @@ -0,0 +1,67 @@ +initialize(); + + return new Dummy($gateway, $paymentGatewayConfig); + } + + case Stripe::GATEWAY_NAME : + { + + $gateway = Omnipay::create($name); + $gateway->initialize($paymentGatewayConfig); + + return new Stripe($gateway, $paymentGatewayConfig); + } + + case StripeSCA::GATEWAY_NAME : + { + + $gateway = Omnipay::create($name); + $gateway->initialize($paymentGatewayConfig); + + return new StripeSCA($gateway, $paymentGatewayConfig); + + } + + default : + { + throw New \Exception('Invalid gateway specified'); + } + } + } +} \ No newline at end of file diff --git a/app/Services/PaymentGateway/Stripe.php b/app/Services/PaymentGateway/Stripe.php new file mode 100644 index 00000000..15b2ea4c --- /dev/null +++ b/app/Services/PaymentGateway/Stripe.php @@ -0,0 +1,92 @@ +gateway = $gateway; + $this->options = []; + } + + private function createTransactionData($order_total, $order_email, $event) + { + $this->transaction_data = [ + 'amount' => $order_total, + 'currency' => $event->currency->code, + 'description' => 'Order for customer: ' . $order_email, + 'token' => $this->options['stripeToken'], + 'receipt_email' => $order_email + ]; + + return $this->transaction_data; + } + + public function startTransaction($order_total, $order_email, $event) + { + + $this->createTransactionData($order_total, $order_email, $event); + $transaction = $this->gateway->purchase($this->transaction_data); + $response = $transaction->send(); + + return $response; + } + + public function getTransactionData() + { + return $this->transaction_data; + } + + public function extractRequestParameters($request) + { + foreach ($this->extra_params as $param) { + if (!empty($request->get($param))) { + $this->options[$param] = $request->get($param); + } + } + } + + public function completeTransaction($transactionId) + { + } + + public function getAdditionalData() + { + } + + public function storeAdditionalData() + { + return false; + } + + public function refundTransaction($order, $refund_amount, $refund_application_fee) + { + + $request = $this->gateway->refund([ + 'transactionReference' => $order->transaction_id, + 'amount' => $refund_amount, + 'refundApplicationFee' => $refund_application_fee + ]); + + $response = $request->send(); + + if ($response->isSuccessful()) { + $refundResponse['successful'] = true; + } else { + $refundResponse['successful'] = false; + $refundResponse['error_message'] = $response->getMessage(); + } + + return $refundResponse; + } +} \ No newline at end of file diff --git a/app/Services/PaymentGateway/StripeSCA.php b/app/Services/PaymentGateway/StripeSCA.php new file mode 100644 index 00000000..090ec9fe --- /dev/null +++ b/app/Services/PaymentGateway/StripeSCA.php @@ -0,0 +1,117 @@ +gateway = $gateway; + $this->options = []; + } + + private function createTransactionData($order_total, $order_email, $event) + { + + $returnUrl = route('showEventCheckoutPaymentReturn', [ + 'event_id' => $event->id, + 'is_payment_successful' => 1, + ]); + + $this->transaction_data = [ + 'amount' => $order_total, + 'currency' => $event->currency->code, + 'description' => 'Order for customer: ' . $order_email, + 'paymentMethod' => $this->options['paymentMethod'], + 'receipt_email' => $order_email, + 'returnUrl' => $returnUrl, + 'confirm' => true + ]; + + return $this->transaction_data; + } + + public function startTransaction($order_total, $order_email, $event) + { + $this->createTransactionData($order_total, $order_email, $event); + $response = $this->gateway->authorize($this->transaction_data)->send(); + + return $response; + } + + public function getTransactionData() + { + return $this->transaction_data; + } + + public function extractRequestParameters($request) + { + foreach ($this->extra_params as $param) { + if (!empty($request->get($param))) { + $this->options[$param] = $request->get($param); + } + } + } + + public function completeTransaction($transactionId = '') + { + + $intentData = [ + 'paymentIntentReference' => $this->options['payment_intent'], + ]; + + $paymentIntent = $this->gateway->fetchPaymentIntent($intentData); + $response = $paymentIntent->send(); + if ($response->requiresConfirmation()) { + $response = $this->gateway->confirm($intentData)->send(); + } + + return $response; + } + + public function getAdditionalData($response) + { + + $additionalData['payment_intent'] = $response->getPaymentIntentReference(); + return $additionalData; + } + + public function storeAdditionalData() + { + return true; + } + + public function refundTransaction($order, $refund_amount, $refund_application_fee) + { + + $request = $this->gateway->cancel([ + 'transactionReference' => $order->transaction_id, + 'amount' => $refund_amount, + 'refundApplicationFee' => $refund_application_fee, + 'paymentIntentReference' => $order->payment_intent + ]); + + $response = $request->send(); + + if ($response->isCancelled()) { + $refundResponse['successful'] = true; + } else { + $refundResponse['successful'] = false; + $refundResponse['error_message'] = $response->getMessage(); + } + + return $refundResponse; + } + +} \ No newline at end of file diff --git a/composer.json b/composer.json index 3a242986..76e2c23b 100755 --- a/composer.json +++ b/composer.json @@ -33,12 +33,13 @@ "omnipay/common": "~3", "omnipay/dummy": "~3", "omnipay/paypal": "~3", - "omnipay/stripe": "~3", + "omnipay/stripe": "3.1", "php-http/curl-client": "^1.7", "php-http/message": "^1.6", "predis/predis": "~1.1", "vinelab/http": "~1.5", - "laravel/tinker": "^1.0" + "laravel/tinker": "^1.0", + "stripe/stripe-php": "^6.43" }, "require-dev": { "phpunit/phpunit": "7.3.*", @@ -52,7 +53,8 @@ "database", "app/Http/Controllers", "app/Models", - "app/Attendize" + "app/Attendize", + "app/Services" ], "psr-4": { "App\\": "app/", diff --git a/composer.lock b/composer.lock index 843138ac..346464f2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4d0fc1a97c1b0ad040b208289e0da4c4", + "content-hash": "5f3d968f6547f6ef5962a6c84881cfc4", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.91.3", + "version": "3.112.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "89b07f24f4fab3ea00b1579037ff417ba61b17c9" + "reference": "1e21446c6780a3b9b5e4315bd6d4347d2c3381eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/89b07f24f4fab3ea00b1579037ff417ba61b17c9", - "reference": "89b07f24f4fab3ea00b1579037ff417ba61b17c9", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1e21446c6780a3b9b5e4315bd6d4347d2c3381eb", + "reference": "1e21446c6780a3b9b5e4315bd6d4347d2c3381eb", "shasum": "" }, "require": { @@ -41,7 +41,8 @@ "ext-sockets": "*", "nette/neon": "^2.3", "phpunit/phpunit": "^4.8.35|^5.4.3", - "psr/cache": "^1.0" + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -86,42 +87,39 @@ "s3", "sdk" ], - "time": "2019-04-04T18:38:33+00:00" + "time": "2019-09-12T18:09:53+00:00" }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.6.2", + "version": "v2.6.5", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "39c148ad4273f5b8c49d0a363ddbc0462f1f2eec" + "reference": "8740a9a158d3dd5cfc706a9d4cc1bf7a518f99f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/39c148ad4273f5b8c49d0a363ddbc0462f1f2eec", - "reference": "39c148ad4273f5b8c49d0a363ddbc0462f1f2eec", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/8740a9a158d3dd5cfc706a9d4cc1bf7a518f99f3", + "reference": "8740a9a158d3dd5cfc706a9d4cc1bf7a518f99f3", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.6", "composer/composer": "^1.6", - "illuminate/console": "^5.5,<5.9", - "illuminate/filesystem": "^5.5,<5.9", - "illuminate/support": "^5.5,<5.9", + "doctrine/dbal": "~2.3", + "illuminate/console": "^5.5|^6", + "illuminate/filesystem": "^5.5|^6", + "illuminate/support": "^5.5|^6", "php": ">=7" }, "require-dev": { - "doctrine/dbal": "~2.3", - "illuminate/config": "^5.1,<5.9", - "illuminate/view": "^5.1,<5.9", + "illuminate/config": "^5.5|^6", + "illuminate/view": "^5.5|^6", "phpro/grumphp": "^0.14", "phpunit/phpunit": "4.*", "scrutinizer/ocular": "~1.1", "squizlabs/php_codesniffer": "^3" }, - "suggest": { - "doctrine/dbal": "Load information from the database about models for phpdocs (~2.3)" - }, "type": "library", "extra": { "branch-alias": { @@ -160,7 +158,7 @@ "phpstorm", "sublime" ], - "time": "2019-03-26T10:38:22+00:00" + "time": "2019-09-08T09:56:38+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -213,16 +211,16 @@ }, { "name": "clue/stream-filter", - "version": "v1.4.0", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/clue/php-stream-filter.git", - "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0" + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", - "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", "shasum": "" }, "require": { @@ -237,7 +235,7 @@ "Clue\\StreamFilter\\": "src/" }, "files": [ - "src/functions.php" + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -261,29 +259,29 @@ "stream_filter_append", "stream_filter_register" ], - "time": "2017-08-18T09:54:01+00:00" + "time": "2019-04-09T12:31:48+00:00" }, { "name": "composer/ca-bundle", - "version": "1.1.4", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", "shasum": "" }, "require": { "ext-openssl": "*", "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", "psr/log": "^1.0", "symfony/process": "^2.5 || ^3.0 || ^4.0" }, @@ -317,20 +315,20 @@ "ssl", "tls" ], - "time": "2019-01-28T09:30:10+00:00" + "time": "2019-08-30T08:44:50+00:00" }, { "name": "composer/composer", - "version": "1.8.4", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "bc364c2480c17941e2135cfc568fa41794392534" + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/bc364c2480c17941e2135cfc568fa41794392534", - "reference": "bc364c2480c17941e2135cfc568fa41794392534", + "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", "shasum": "" }, "require": { @@ -366,7 +364,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -390,14 +388,14 @@ "homepage": "http://seld.be" } ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", "homepage": "https://getcomposer.org/", "keywords": [ "autoload", "dependency", "package" ], - "time": "2019-02-11T09:52:10+00:00" + "time": "2019-08-02T18:55:33+00:00" }, { "name": "composer/semver", @@ -463,16 +461,16 @@ }, { "name": "composer/spdx-licenses", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d" + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", - "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5", "shasum": "" }, "require": { @@ -519,20 +517,20 @@ "spdx", "validator" ], - "time": "2019-03-26T10:23:26+00:00" + "time": "2019-07-29T10:31:59+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.3.2", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "d17708133b6c276d6e42ef887a877866b909d892" + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", - "reference": "d17708133b6c276d6e42ef887a877866b909d892", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", "shasum": "" }, "require": { @@ -563,7 +561,7 @@ "Xdebug", "performance" ], - "time": "2019-01-28T20:25:53+00:00" + "time": "2019-05-27T17:52:04+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -898,21 +896,24 @@ }, { "name": "doctrine/lexer", - "version": "v1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, "type": "library", "extra": { "branch-alias": { @@ -920,8 +921,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -942,13 +943,16 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ + "annotations", + "docblock", "lexer", - "parser" + "parser", + "php" ], - "time": "2014-09-09T13:34:57+00:00" + "time": "2019-06-08T11:03:04+00:00" }, { "name": "dompdf/dompdf", @@ -1072,16 +1076,16 @@ }, { "name": "egulias/email-validator", - "version": "2.1.7", + "version": "2.1.11", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", - "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23", + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23", "shasum": "" }, "require": { @@ -1091,7 +1095,8 @@ "require-dev": { "dominicsayers/isemail": "dev-master", "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1" + "satooshi/php-coveralls": "^1.0.1", + "symfony/phpunit-bridge": "^4.4@dev" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1099,7 +1104,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -1125,7 +1130,7 @@ "validation", "validator" ], - "time": "2018-12-04T22:38:24+00:00" + "time": "2019-08-13T17:33:27+00:00" }, { "name": "erusev/parsedown", @@ -1222,16 +1227,16 @@ }, { "name": "filp/whoops", - "version": "2.3.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7" + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", + "url": "https://api.github.com/repos/filp/whoops/zipball/cde50e6720a39fdacb240159d3eea6865d51fd96", + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96", "shasum": "" }, "require": { @@ -1265,8 +1270,8 @@ "authors": [ { "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "role": "Developer", + "homepage": "https://github.com/filp" } ], "description": "php error handling for cool kids", @@ -1279,7 +1284,7 @@ "throwable", "whoops" ], - "time": "2018-10-23T09:00:00+00:00" + "time": "2019-08-07T09:00:00+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1399,33 +1404,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.5.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { + "ext-zlib": "*", "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1462,20 +1471,20 @@ "uri", "url" ], - "time": "2018-12-04T20:46:45+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "intervention/image", - "version": "2.4.2", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb" + "reference": "39eaef720d082ecc54c64bf54541c55f10db546d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/e82d274f786e3d4b866a59b173f42e716f0783eb", - "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb", + "url": "https://api.github.com/repos/Intervention/image/zipball/39eaef720d082ecc54c64bf54541c55f10db546d", + "reference": "39eaef720d082ecc54c64bf54541c55f10db546d", "shasum": "" }, "require": { @@ -1532,7 +1541,7 @@ "thumbnail", "watermark" ], - "time": "2018-05-29T14:19:03+00:00" + "time": "2019-06-24T14:06:31+00:00" }, { "name": "jakub-onderka/php-console-color", @@ -1746,6 +1755,51 @@ ], "time": "2019-01-14T23:55:14+00:00" }, + { + "name": "kylekatarnls/update-helper", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/5786fa188e0361b9adf9e8199d7280d1b2db165e", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "2.0.x-dev || ^2.0.0-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-07-29T11:03:54+00:00" + }, { "name": "laracasts/utilities", "version": "2.1", @@ -1792,16 +1846,16 @@ }, { "name": "laravel/framework", - "version": "v5.8.10", + "version": "v5.8.35", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "505325b4577968750e622d7a5a271cf8785a7a1a" + "reference": "5a9e4d241a8b815e16c9d2151e908992c38db197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/505325b4577968750e622d7a5a271cf8785a7a1a", - "reference": "505325b4577968750e622d7a5a271cf8785a7a1a", + "url": "https://api.github.com/repos/laravel/framework/zipball/5a9e4d241a8b815e16c9d2151e908992c38db197", + "reference": "5a9e4d241a8b815e16c9d2151e908992c38db197", "shasum": "" }, "require": { @@ -1884,6 +1938,7 @@ "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "filp/whoops": "Required for friendly error pages in development (^2.1.4).", @@ -1935,7 +1990,7 @@ "framework", "laravel" ], - "time": "2019-04-04T13:39:49+00:00" + "time": "2019-09-03T16:44:30+00:00" }, { "name": "laravel/socialite", @@ -2002,22 +2057,22 @@ }, { "name": "laravel/tinker", - "version": "v1.0.8", + "version": "v1.0.10", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405" + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7", + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7", "shasum": "" }, "require": { - "illuminate/console": "~5.1", - "illuminate/contracts": "~5.1", - "illuminate/support": "~5.1", + "illuminate/console": "~5.1|^6.0", + "illuminate/contracts": "~5.1|^6.0", + "illuminate/support": "~5.1|^6.0", "php": ">=5.5.9", "psy/psysh": "0.7.*|0.8.*|0.9.*", "symfony/var-dumper": "~3.0|~4.0" @@ -2061,20 +2116,20 @@ "laravel", "psysh" ], - "time": "2018-10-12T19:39:35+00:00" + "time": "2019-08-07T15:10:45+00:00" }, { "name": "laravelcollective/html", - "version": "v5.8.0", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "0e360143d3476fe4141d267a260c140569fa207b" + "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/0e360143d3476fe4141d267a260c140569fa207b", - "reference": "0e360143d3476fe4141d267a260c140569fa207b", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/3a1c9974ea629eed96e101a24e3852ced382eb29", + "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29", "shasum": "" }, "require": { @@ -2118,31 +2173,31 @@ "MIT" ], "authors": [ - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - }, { "name": "Adam Engebretson", "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" } ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2019-03-01T22:53:41+00:00" + "time": "2019-09-05T12:32:25+00:00" }, { "name": "league/flysystem", - "version": "1.0.51", + "version": "1.0.55", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "755ba7bf3fb9031e6581d091db84d78275874396" + "reference": "33c91155537c6dc899eacdc54a13ac6303f156e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/755ba7bf3fb9031e6581d091db84d78275874396", - "reference": "755ba7bf3fb9031e6581d091db84d78275874396", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/33c91155537c6dc899eacdc54a13ac6303f156e6", + "reference": "33c91155537c6dc899eacdc54a13ac6303f156e6", "shasum": "" }, "require": { @@ -2213,20 +2268,20 @@ "sftp", "storage" ], - "time": "2019-03-30T13:22:34+00:00" + "time": "2019-08-24T11:17:19+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.22", + "version": "1.0.23", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "883b02c80ca9cd68cf58a9b4b2185beef24b836b" + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/883b02c80ca9cd68cf58a9b4b2185beef24b836b", - "reference": "883b02c80ca9cd68cf58a9b4b2185beef24b836b", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", "shasum": "" }, "require": { @@ -2260,7 +2315,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2019-01-31T15:07:25+00:00" + "time": "2019-06-05T17:18:29+00:00" }, { "name": "league/oauth1-client", @@ -2450,24 +2505,24 @@ }, { "name": "mcamara/laravel-localization", - "version": "1.3.19", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/mcamara/laravel-localization.git", - "reference": "cf89d2515d576292e65bfa5893a0efd1cc5a4064" + "reference": "82d06c66cdf1e3ed17783842886d87cbd5aadd43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/cf89d2515d576292e65bfa5893a0efd1cc5a4064", - "reference": "cf89d2515d576292e65bfa5893a0efd1cc5a4064", + "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/82d06c66cdf1e3ed17783842886d87cbd5aadd43", + "reference": "82d06c66cdf1e3ed17783842886d87cbd5aadd43", "shasum": "" }, "require": { - "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0", - "php": ">=7.0.0" + "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0||~6.0.0", + "php": ">=7.1.0" }, "require-dev": { - "orchestra/testbench-browser-kit": "~3.4|~3.8", + "orchestra/testbench-browser-kit": "~3.4|~3.8|~4.0", "phpunit/phpunit": "6.0.*|8.0.*" }, "suggest": { @@ -2508,7 +2563,7 @@ "localization", "php" ], - "time": "2019-03-05T15:37:01+00:00" + "time": "2019-09-08T13:56:19+00:00" }, { "name": "mews/purifier", @@ -2718,16 +2773,16 @@ }, { "name": "monolog/monolog", - "version": "1.24.0", + "version": "1.25.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf", "shasum": "" }, "require": { @@ -2792,7 +2847,7 @@ "logging", "psr-3" ], - "time": "2018-11-05T09:00:11+00:00" + "time": "2019-09-06T13:49:17+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2851,31 +2906,34 @@ }, { "name": "nesbot/carbon", - "version": "1.36.2", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9", - "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -2905,20 +2963,20 @@ "datetime", "time" ], - "time": "2018-12-28T10:07:33+00:00" + "time": "2019-06-11T09:07:59+00:00" }, { "name": "nikic/php-parser", - "version": "v4.2.1", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0" + "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5221f49a608808c1e4d436df32884cbc1b821ac0", - "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/97e59c7a16464196a8b9c77c47df68e4a39a45c4", + "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4", "shasum": "" }, "require": { @@ -2926,7 +2984,7 @@ "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ "bin/php-parse" @@ -2956,7 +3014,7 @@ "parser", "php" ], - "time": "2019-02-16T20:54:15+00:00" + "time": "2019-09-01T07:51:21+00:00" }, { "name": "nitmedia/wkhtml2pdf", @@ -3208,16 +3266,16 @@ }, { "name": "omnipay/stripe", - "version": "v3.0.1", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-stripe.git", - "reference": "234c3ed149780ccda78aade17e8368b92e6c2428" + "reference": "37df2a791e8feab45543125f4c5f22d5d305096d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-stripe/zipball/234c3ed149780ccda78aade17e8368b92e6c2428", - "reference": "234c3ed149780ccda78aade17e8368b92e6c2428", + "url": "https://api.github.com/repos/thephpleague/omnipay-stripe/zipball/37df2a791e8feab45543125f4c5f22d5d305096d", + "reference": "37df2a791e8feab45543125f4c5f22d5d305096d", "shasum": "" }, "require": { @@ -3231,7 +3289,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -3263,20 +3321,20 @@ "payment", "stripe" ], - "time": "2018-05-15T08:30:49+00:00" + "time": "2019-08-31T10:55:06+00:00" }, { "name": "opis/closure", - "version": "3.1.6", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "ccb8e3928c5c8181c76cdd0ed9366c5bcaafd91b" + "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/ccb8e3928c5c8181c76cdd0ed9366c5bcaafd91b", - "reference": "ccb8e3928c5c8181c76cdd0ed9366c5bcaafd91b", + "url": "https://api.github.com/repos/opis/closure/zipball/60a97fff133b1669a5b1776aa8ab06db3f3962b7", + "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7", "shasum": "" }, "require": { @@ -3284,12 +3342,12 @@ }, "require-dev": { "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0|^5.0|^6.0|^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "3.3.x-dev" } }, "autoload": { @@ -3324,7 +3382,7 @@ "serialization", "serialize" ], - "time": "2019-02-22T10:30:00+00:00" + "time": "2019-09-02T21:07:33+00:00" }, { "name": "paragonie/random_compat", @@ -3410,28 +3468,28 @@ }, { "name": "phenx/php-svg-lib", - "version": "v0.3.2", + "version": "v0.3.3", "source": { "type": "git", "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c" + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/ccc46ef6340d4b8a4a68047e68d8501ea961442c", - "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", "shasum": "" }, "require": { - "sabberworm/php-css-parser": "8.1.*" + "sabberworm/php-css-parser": "^8.3" }, "require-dev": { - "phpunit/phpunit": "~5.0" + "phpunit/phpunit": "^5.5|^6.5" }, "type": "library", "autoload": { - "psr-0": { - "Svg\\": "src/" + "psr-4": { + "Svg\\": "src/Svg" } }, "notification-url": "https://packagist.org/downloads/", @@ -3446,7 +3504,7 @@ ], "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", - "time": "2018-06-03T10:10:03+00:00" + "time": "2019-09-11T20:02:13+00:00" }, { "name": "php-http/curl-client", @@ -3506,28 +3564,29 @@ }, { "name": "php-http/discovery", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651" + "reference": "e822f86a6983790aa17ab13aa7e69631e86806b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", + "url": "https://api.github.com/repos/php-http/discovery/zipball/e822f86a6983790aa17ab13aa7e69631e86806b6", + "reference": "e822f86a6983790aa17ab13aa7e69631e86806b6", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0" + "php": "^7.1" }, "conflict": { "nyholm/psr7": "<1.0" }, "require-dev": { + "akeneo/phpspec-skip-example-extension": "^4.0", "php-http/httplug": "^1.0 || ^2.0", "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^2.4", + "phpspec/phpspec": "^5.1", "puli/composer-plugin": "1.0.0-beta10" }, "suggest": { @@ -3537,7 +3596,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -3566,7 +3625,7 @@ "message", "psr7" ], - "time": "2019-02-23T07:42:53+00:00" + "time": "2019-06-30T09:04:27+00:00" }, { "name": "php-http/httplug", @@ -3626,21 +3685,21 @@ }, { "name": "php-http/message", - "version": "1.7.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1" + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1", + "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c", "shasum": "" }, "require": { "clue/stream-filter": "^1.4", - "php": "^5.4 || ^7.0", + "php": "^7.1", "php-http/message-factory": "^1.0.2", "psr/http-message": "^1.0" }, @@ -3666,7 +3725,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.8-dev" } }, "autoload": { @@ -3694,7 +3753,7 @@ "message", "psr-7" ], - "time": "2018-11-01T09:32:41+00:00" + "time": "2019-08-05T06:55:08+00:00" }, { "name": "php-http/message-factory", @@ -4229,24 +4288,24 @@ }, { "name": "ralouphie/getallheaders", - "version": "2.0.5", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { @@ -4265,7 +4324,7 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2016-02-11T07:05:27+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "ramsey/uuid", @@ -4351,23 +4410,24 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.1.0", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef" + "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/850cbbcbe7fbb155387a151ea562897a67e242ef", - "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f", + "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "*" + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" }, "type": "library", "autoload": { @@ -4391,7 +4451,7 @@ "parser", "stylesheet" ], - "time": "2016-07-19T19:14:21+00:00" + "time": "2019-02-22T07:42:52+00:00" }, { "name": "seld/jsonlint", @@ -4487,17 +4547,73 @@ "time": "2015-10-13T18:44:15+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.0", + "name": "stripe/stripe-php", + "version": "v6.43.1", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707" + "url": "https://github.com/stripe/stripe-php.git", + "reference": "42fcdaf99c44bb26937223f8eae1f263491d5ab8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", - "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/42fcdaf99c44bb26937223f8eae1f263491d5ab8", + "reference": "42fcdaf99c44bb26937223f8eae1f263491d5ab8", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "1.*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": "~2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Stripe\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stripe and contributors", + "homepage": "https://github.com/stripe/stripe-php/contributors" + } + ], + "description": "Stripe PHP Library", + "homepage": "https://stripe.com/", + "keywords": [ + "api", + "payment processing", + "stripe" + ], + "time": "2019-08-29T16:56:12+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { @@ -4546,29 +4662,31 @@ "mail", "mailer" ], - "time": "2019-03-10T07:52:41+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/console", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "24206aff3efe6962593297e57ef697ebb220e384" + "reference": "de63799239b3881b8a08f8481b22348f77ed7b36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/24206aff3efe6962593297e57ef697ebb220e384", - "reference": "24206aff3efe6962593297e57ef697ebb220e384", + "url": "https://api.github.com/repos/symfony/console/zipball/de63799239b3881b8a08f8481b22348f77ed7b36", + "reference": "de63799239b3881b8a08f8481b22348f77ed7b36", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/contracts": "^1.0", - "symfony/polyfill-mbstring": "~1.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, "provide": { @@ -4578,9 +4696,10 @@ "psr/log": "~1.0", "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { "psr/log": "For using the console logger", @@ -4591,7 +4710,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4618,88 +4737,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-04-01T07:32:59+00:00" - }, - { - "name": "symfony/contracts", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/contracts.git", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "require-dev": { - "psr/cache": "^1.0", - "psr/container": "^1.0" - }, - "suggest": { - "psr/cache": "When using the Cache contracts", - "psr/container": "When using the Service contracts", - "symfony/cache-contracts-implementation": "", - "symfony/service-contracts-implementation": "", - "symfony/translation-contracts-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\": "" - }, - "exclude-from-classmap": [ - "**/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A set of abstractions extracted out of the Symfony components", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2018-12-05T08:06:11+00:00" + "time": "2019-08-26T08:26:39+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.24", + "version": "v3.4.31", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" + "reference": "e18c5c4b35e7f17513448a25d02f7af34a4bdb41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e18c5c4b35e7f17513448a25d02f7af34a4bdb41", + "reference": "e18c5c4b35e7f17513448a25d02f7af34a4bdb41", "shasum": "" }, "require": { @@ -4724,14 +4775,14 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4739,20 +4790,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" + "time": "2019-08-20T13:31:17+00:00" }, { "name": "symfony/debug", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "43ce8ab34c734dcc8a4af576cb86711daab964c5" + "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/43ce8ab34c734dcc8a4af576cb86711daab964c5", - "reference": "43ce8ab34c734dcc8a4af576cb86711daab964c5", + "url": "https://api.github.com/repos/symfony/debug/zipball/afcdea44a2e399c1e4b52246ec8d54c715393ced", + "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced", "shasum": "" }, "require": { @@ -4768,7 +4819,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4795,34 +4846,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-03-10T17:09:50+00:00" + "time": "2019-08-20T14:27:59+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ca5af306fbc37f3cf597e91bc9cfa0c7d3f33544" + "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ca5af306fbc37f3cf597e91bc9cfa0c7d3f33544", - "reference": "ca5af306fbc37f3cf597e91bc9cfa0c7d3f33544", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/429d0a1451d4c9c4abe1959b2986b88794b9b7d2", + "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/contracts": "^1.0" + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4" }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { @@ -4832,7 +4889,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4859,20 +4916,78 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-03-30T15:58:42+00:00" + "time": "2019-08-26T08:55:16+00:00" }, { - "name": "symfony/filesystem", - "version": "v4.2.5", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e16b9e471703b2c60b95f14d31c1239f68f11601", - "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", "shasum": "" }, "require": { @@ -4882,7 +4997,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4909,20 +5024,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-02-07T11:40:08+00:00" + "time": "2019-08-20T14:07:54+00:00" }, { "name": "symfony/finder", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a" + "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a", - "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a", + "url": "https://api.github.com/repos/symfony/finder/zipball/86c1c929f0a4b24812e1eb109262fc3372c8e9f2", + "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2", "shasum": "" }, "require": { @@ -4931,7 +5046,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4958,24 +5073,25 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-02-23T15:42:05+00:00" + "time": "2019-08-14T12:26:46+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1" + "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", - "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d804bea118ff340a12e22a79f9c7e7eb56b35adc", + "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc", "shasum": "" }, "require": { "php": "^7.1.3", + "symfony/mime": "^4.3", "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { @@ -4985,7 +5101,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5012,34 +5128,35 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-03-30T15:58:42+00:00" + "time": "2019-08-26T08:55:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e8b940bbeebf0f96789b5d17d9d77f8b2613960b" + "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e8b940bbeebf0f96789b5d17d9d77f8b2613960b", - "reference": "e8b940bbeebf0f96789b5d17d9d77f8b2613960b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5e0fc71be03d52cd00c423061cfd300bd6f92a52", + "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52", "shasum": "" }, "require": { "php": "^7.1.3", "psr/log": "~1.0", - "symfony/contracts": "^1.0.2", "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "~4.1", + "symfony/event-dispatcher": "^4.3", "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { + "symfony/browser-kit": "<4.3", "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.2", + "symfony/dependency-injection": "<4.3", "symfony/translation": "<4.2", "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" @@ -5049,11 +5166,11 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~3.4|~4.0", + "symfony/browser-kit": "^4.3", "symfony/config": "~3.4|~4.0", "symfony/console": "~3.4|~4.0", "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.2", + "symfony/dependency-injection": "^4.3", "symfony/dom-crawler": "~3.4|~4.0", "symfony/expression-language": "~3.4|~4.0", "symfony/finder": "~3.4|~4.0", @@ -5062,7 +5179,9 @@ "symfony/stopwatch": "~3.4|~4.0", "symfony/templating": "~3.4|~4.0", "symfony/translation": "~4.2", - "symfony/var-dumper": "^4.1.1" + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", @@ -5074,7 +5193,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5101,20 +5220,79 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-04-02T19:03:51+00:00" + "time": "2019-08-26T16:47:42+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "name": "symfony/mime", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "url": "https://github.com/symfony/mime.git", + "reference": "987a05df1c6ac259b34008b932551353f4f408df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/mime/zipball/987a05df1c6ac259b34008b932551353f4f408df", + "reference": "987a05df1c6ac259b34008b932551353f4f408df", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-08-22T08:16:11+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -5126,7 +5304,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5143,12 +5321,12 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { - "name": "Gert de Pagter", - "email": "backendtea@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -5159,20 +5337,20 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "reference": "685968b11e61a347c18bf25db32effa478be610f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", "shasum": "" }, "require": { @@ -5184,7 +5362,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5218,20 +5396,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", "shasum": "" }, "require": { @@ -5245,7 +5423,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5261,13 +5439,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Laurent Bassin", "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", @@ -5280,20 +5458,20 @@ "portable", "shim" ], - "time": "2019-03-04T13:44:35+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -5305,7 +5483,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5339,20 +5517,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42" + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", - "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403", + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403", "shasum": "" }, "require": { @@ -5362,7 +5540,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5395,20 +5573,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "reference": "04ce3335667451138df4307d6a9b61565560199e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e", + "reference": "04ce3335667451138df4307d6a9b61565560199e", "shasum": "" }, "require": { @@ -5417,7 +5595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5450,20 +5628,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.11.0", + "name": "symfony/polyfill-php73", + "version": "v1.12.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "b46c6cae28a3106735323f00a0c38eccf2328897" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/b46c6cae28a3106735323f00a0c38eccf2328897", - "reference": "b46c6cae28a3106735323f00a0c38eccf2328897", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", "shasum": "" }, "require": { @@ -5472,7 +5650,65 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "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 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "4317de1386717b4c22caed7725350a8887ab205c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c", + "reference": "4317de1386717b4c22caed7725350a8887ab205c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" } }, "autoload": { @@ -5502,20 +5738,20 @@ "polyfill", "shim" ], - "time": "2019-02-08T14:16:39+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/process", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1e6cbb41dadcaf29e0db034d6ad0d039a9df06e6" + "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1e6cbb41dadcaf29e0db034d6ad0d039a9df06e6", - "reference": "1e6cbb41dadcaf29e0db034d6ad0d039a9df06e6", + "url": "https://api.github.com/repos/symfony/process/zipball/e89969c00d762349f078db1128506f7f3dcc0d4a", + "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a", "shasum": "" }, "require": { @@ -5524,7 +5760,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5551,20 +5787,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-03-10T20:07:02+00:00" + "time": "2019-08-26T08:26:39+00:00" }, { "name": "symfony/routing", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "319f600c1ea0f981f6bdc2f042cfc1690957c0e0" + "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/319f600c1ea0f981f6bdc2f042cfc1690957c0e0", - "reference": "319f600c1ea0f981f6bdc2f042cfc1690957c0e0", + "url": "https://api.github.com/repos/symfony/routing/zipball/ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", + "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", "shasum": "" }, "require": { @@ -5576,7 +5812,7 @@ "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", "symfony/config": "~4.2", "symfony/dependency-injection": "~3.4|~4.0", @@ -5594,7 +5830,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5627,26 +5863,84 @@ "uri", "url" ], - "time": "2019-03-30T15:58:42+00:00" + "time": "2019-08-26T08:26:39+00:00" }, { - "name": "symfony/translation", - "version": "v4.2.5", + "name": "symfony/service-contracts", + "version": "v1.1.6", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "e46933cc31b68f51f7fc5470fb55550407520f56" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e46933cc31b68f51f7fc5470fb55550407520f56", - "reference": "e46933cc31b68f51f7fc5470fb55550407520f56", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ea7263d6b6d5f798b56a45a5b8d686725f2719a3", + "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/contracts": "^1.0.2", - "symfony/polyfill-mbstring": "~1.0" + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-08-20T14:44:19+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "28498169dd334095fa981827992f3a24d50fed0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/28498169dd334095fa981827992f3a24d50fed0f", + "reference": "28498169dd334095fa981827992f3a24d50fed0f", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.6" }, "conflict": { "symfony/config": "<3.4", @@ -5654,7 +5948,7 @@ "symfony/yaml": "<3.4" }, "provide": { - "symfony/translation-contracts-implementation": "1.0" + "symfony/translation-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", @@ -5662,7 +5956,10 @@ "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "~3.4|~4.0", "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -5673,7 +5970,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5700,20 +5997,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-04-01T14:13:08+00:00" + "time": "2019-08-26T08:55:16+00:00" }, { - "name": "symfony/var-dumper", - "version": "v4.2.5", + "name": "symfony/translation-contracts", + "version": "v1.1.6", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "9f87189ac10b42edf7fb8edc846f1937c6d157cf" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9f87189ac10b42edf7fb8edc846f1937c6d157cf", - "reference": "9f87189ac10b42edf7fb8edc846f1937c6d157cf", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", + "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-08-02T12:15:04+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/641043e0f3e615990a0f29479f9c117e8a6698c6", + "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6", "shasum": "" }, "require": { @@ -5742,7 +6096,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5776,7 +6130,7 @@ "debug", "dump" ], - "time": "2019-02-23T15:17:42+00:00" + "time": "2019-08-26T08:26:39+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5925,16 +6279,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v3.3.3", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "dbcc609971dd9b55f48b8008b553d79fd372ddde" + "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/dbcc609971dd9b55f48b8008b553d79fd372ddde", - "reference": "dbcc609971dd9b55f48b8008b553d79fd372ddde", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156", + "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156", "shasum": "" }, "require": { @@ -5943,12 +6297,12 @@ "symfony/polyfill-ctype": "^1.9" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0" + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.6-dev" } }, "autoload": { @@ -5961,10 +6315,15 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://vancelucas.com/" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -5973,7 +6332,7 @@ "env", "environment" ], - "time": "2019-03-06T09:39:45+00:00" + "time": "2019-09-10T21:37:39+00:00" } ], "packages-dev": [ @@ -6085,16 +6444,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.8.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", "shasum": "" }, "require": { @@ -6129,7 +6488,7 @@ "object", "object graph" ], - "time": "2018-06-11T23:09:50+00:00" + "time": "2019-08-09T12:45:53+00:00" }, { "name": "phar-io/manifest", @@ -6235,35 +6594,33 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "~6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6285,30 +6642,30 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2018-08-07T13:53:10+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "4.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "webmozart/assert": "^1.0" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", + "doctrine/instantiator": "^1.0.5", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.4" }, @@ -6336,41 +6693,40 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "time": "2019-09-12T14:27:41+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6383,7 +6739,8 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" }, { "name": "phpspec/php-diff", @@ -6506,16 +6863,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -6536,8 +6893,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -6565,7 +6922,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -6723,16 +7080,16 @@ }, { "name": "phpunit/php-timer", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059" + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b389aebe1b8b0578430bda0c7c95a829608e059", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { @@ -6759,8 +7116,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Utility class for timing", @@ -6768,20 +7125,20 @@ "keywords": [ "timer" ], - "time": "2019-02-20T10:12:59+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a", + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a", "shasum": "" }, "require": { @@ -6794,7 +7151,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -6817,7 +7174,7 @@ "keywords": [ "tokenizer" ], - "time": "2018-10-30T05:52:18+00:00" + "time": "2019-07-25T05:29:42+00:00" }, { "name": "phpunit/phpunit", @@ -7120,16 +7477,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { @@ -7156,6 +7513,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -7164,17 +7525,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -7183,7 +7540,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2019-09-14T09:02:43+00:00" }, { "name": "sebastian/global-state", @@ -7468,16 +7825,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v3.4.24", + "version": "v3.4.31", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09" + "reference": "8558d1bc4554f5cb0b66e50377457967a8969263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d40023c057393fb25f7ca80af2a56ed948c45a09", - "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8558d1bc4554f5cb0b66e50377457967a8969263", + "reference": "8558d1bc4554f5cb0b66e50377457967a8969263", "shasum": "" }, "require": { @@ -7521,20 +7878,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-02-23T15:06:07+00:00" + "time": "2019-08-26T07:52:58+00:00" }, { "name": "symfony/yaml", - "version": "v4.2.5", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1" + "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6712daf03ee25b53abb14e7e8e0ede1a770efdb1", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1", + "url": "https://api.github.com/repos/symfony/yaml/zipball/5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", + "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", "shasum": "" }, "require": { @@ -7553,7 +7910,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -7580,20 +7937,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-30T15:58:42+00:00" + "time": "2019-08-20T14:27:59+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { @@ -7615,25 +7972,25 @@ "authors": [ { "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "role": "Developer", + "email": "arne@blankerts.de" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-04-04T09:56:43+00:00" + "time": "2019-06-13T22:48:21+00:00" }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", "shasum": "" }, "require": { @@ -7641,8 +7998,7 @@ "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", "extra": { @@ -7671,7 +8027,7 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "time": "2019-08-24T08:43:50+00:00" } ], "aliases": [], diff --git a/database/migrations/2019_09_04_075835_add_default_gateways.php b/database/migrations/2019_09_04_075835_add_default_gateways.php new file mode 100644 index 00000000..be455ae1 --- /dev/null +++ b/database/migrations/2019_09_04_075835_add_default_gateways.php @@ -0,0 +1,78 @@ +delete(); + + Schema::table('payment_gateways', function($table) { + $table->boolean('default')->default(0); + $table->string('admin_blade_template', 150)->default(''); + $table->string('checkout_blade_template', 150)->default(''); + }); + + Schema::table('orders', function($table) { + $table->string('payment_intent', 150)->default(''); + }); + + DB::table('payment_gateways') + ->where('provider_name', 'Stripe') + ->update(['admin_blade_template' => 'ManageAccount.Partials.Stripe', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.PaymentStripe']); + + $dummyGateway = DB::table('payment_gateways')->where('name', '=', 'Dummy')->first(); + + if ($dummyGateway === null) { + // user doesn't exist + DB::table('payment_gateways')->insert( + array( + 'provider_name' => 'Dummy/Test Gateway', + 'provider_url' => 'none', + 'is_on_site' => 1, + 'can_refund' => 1, + 'name' => 'Dummy', + 'default' => 0, + 'admin_blade_template' => '', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.Dummy' + ) + ); + } + + $stripePaymentIntents = DB::table('payment_gateways')->where('name', '=', 'Stripe\PaymentIntents')->first(); + if ($stripePaymentIntents === null) { + DB::table('payment_gateways')->insert( + [ + 'provider_name' => 'Stripe SCA', + 'provider_url' => 'https://www.stripe.com', + 'is_on_site' => 0, + 'can_refund' => 1, + 'name' => 'Stripe\PaymentIntents', + 'default' => 0, + 'admin_blade_template' => 'ManageAccount.Partials.StripeSCA', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.PaymentStripeSCA' + ] + ); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} \ No newline at end of file diff --git a/database/seeds/PaymentGatewaySeeder.php b/database/seeds/PaymentGatewaySeeder.php index 1795872f..7d792922 100644 --- a/database/seeds/PaymentGatewaySeeder.php +++ b/database/seeds/PaymentGatewaySeeder.php @@ -11,27 +11,56 @@ class PaymentGatewaySeeder extends Seeder */ public function run() { - $payment_gateways = [ - [ - 'id' => 1, - 'name' => 'Stripe', - 'provider_name' => 'Stripe', - 'provider_url' => 'https://www.stripe.com', - 'is_on_site' => 1, - 'can_refund' => 1, - ], - [ - 'id' => 2, - 'name' => 'PayPal_Express', - 'provider_name' => 'PayPal Express', - 'provider_url' => 'https://www.paypal.com', - 'is_on_site' => 0, - 'can_refund' => 0 - ] - ]; + $dummyGateway = DB::table('payment_gateways')->where('name', '=', 'Dummy')->first(); - DB::table('payment_gateways')->insert($payment_gateways); + if ($dummyGateway === null) { + // user doesn't exist + DB::table('payment_gateways')->insert( + [ + 'provider_name' => 'Dummy/Test Gateway', + 'provider_url' => 'none', + 'is_on_site' => 1, + 'can_refund' => 1, + 'name' => 'Dummy', + 'default' => 0, + 'admin_blade_template' => '', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.Dummy' + ] + ); + } + + $stripe = DB::table('payment_gateways')->where('name', '=', 'Stripe')->first(); + if ($stripe === null) { + DB::table('payment_gateways')->insert( + [ + 'name' => 'Stripe', + 'provider_name' => 'Stripe', + 'provider_url' => 'https://www.stripe.com', + 'is_on_site' => 1, + 'can_refund' => 1, + 'default' => 0, + 'admin_blade_template' => 'ManageAccount.Partials.Stripe', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.PaymentStripe' + ] + ); + } + + $stripePaymentIntents = DB::table('payment_gateways')->where('name', '=', 'Stripe\PaymentIntents')->first(); + if ($stripePaymentIntents === null) { + DB::table('payment_gateways')->insert( + [ + 'provider_name' => 'Stripe SCA', + 'provider_url' => 'https://www.stripe.com', + 'is_on_site' => 0, + 'can_refund' => 1, + 'name' => 'Stripe\PaymentIntents', + 'default' => 0, + 'admin_blade_template' => 'ManageAccount.Partials.StripeSCA', + 'checkout_blade_template' => 'Public.ViewEvent.Partials.PaymentStripeSCA' + ] + ); + } } -} +} \ No newline at end of file diff --git a/public/assets/javascript/app-public.js b/public/assets/javascript/app-public.js index a272ecc0..d342c8b1 100644 --- a/public/assets/javascript/app-public.js +++ b/public/assets/javascript/app-public.js @@ -1,144 +1,160 @@ +function getAjaxFormConfig(form) { + + var $form = form; + var $submitButton = $form.find('input[type=submit]'); + + toggleSubmitDisabled($submitButton); + + var ajaxFormConf = { + delegation: true, + beforeSerialize: function (jqForm, options) { + window.doSubmit = true; + clearFormErrors(jqForm[0]); + toggleSubmitDisabled($submitButton); + }, + beforeSubmit: function () { + $submitButton = $form.find('input[type=submit]'); + toggleSubmitDisabled($submitButton); + return window.doSubmit; + }, + error: function (data, statusText, xhr, $form) { + $submitButton = $form.find('input[type=submit]'); + + // Form validation error. + if (422 == data.status) { + processFormErrors($form, $.parseJSON(data.responseText)); + return; + } + + toggleSubmitDisabled($submitButton); + showMessage(lang("whoops")); + }, + success: function (data, statusText, xhr, $form) { + var $submitButton = $form.find('input[type=submit]'); + + if (data.message) { + showMessage(data.message); + } + switch (data.status) { + case 'success': + + if (data.redirectUrl) { + if (data.redirectData) { + $.redirectPost(data.redirectUrl, data.redirectData); + } else { + document.location.href = data.redirectUrl; + } + } + break; + + case 'error': + if (data.messages) { + processFormErrors($form, data.messages); + return; + } + break; + + default: + break; + } + + toggleSubmitDisabled($submitButton); + + }, + dataType: 'json' + }; + + return ajaxFormConf; +} + $(function() { + $('form.ajax').on('submit', function(e) { e.preventDefault(); e.stopImmediatePropagation(); - var $form = - $(this), - $submitButton = $form.find('input[type=submit]'), - ajaxFormConf = { - delegation: true, - beforeSerialize: function(jqForm, options) { - window.doSubmit = true; - clearFormErrors(jqForm[0]); - toggleSubmitDisabled($submitButton); - }, - beforeSubmit: function() { - $submitButton = $form.find('input[type=submit]'); - toggleSubmitDisabled($submitButton); - return window.doSubmit; - }, - error: function(data, statusText, xhr, $form) { - $submitButton = $form.find('input[type=submit]'); + var ajaxFormConf = getAjaxFormConfig($(this)); - // Form validation error. - if (422 == data.status) { - processFormErrors($form, $.parseJSON(data.responseText)); - return; - } + $(this).ajaxSubmit(ajaxFormConf); - toggleSubmitDisabled($submitButton); - showMessage(lang("whoops")); - }, - success: function(data, statusText, xhr, $form) { - var $submitButton = $form.find('input[type=submit]'); - - if (data.message) { - showMessage(data.message); - } - switch (data.status) { - case 'success': - - if (data.redirectUrl) { - if(data.redirectData) { - $.redirectPost(data.redirectUrl, data.redirectData); - } else { - document.location.href = data.redirectUrl; - } - } - break; - - case 'error': - if (data.messages) { - processFormErrors($form, data.messages); - return; - } - break; - - default: - break; - - - } - - toggleSubmitDisabled($submitButton); - - - }, - dataType: 'json' - }; - - toggleSubmitDisabled($submitButton); - - if ($form.hasClass('payment-form') && !$('#pay_offline').is(":checked")) { - clearFormErrors($('.payment-form')); - - Stripe.setPublishableKey($form.data('stripe-pub-key')); - - var - noErrors = true, - $cardNumber = $('.card-number'), - $cardName = $('.card-name'), - $cvcNumber = $('.card-cvc'), - $expiryMonth = $('.card-expiry-month'), - $expiryYear = $('.card-expiry-year'); - - - if (!Stripe.validateCardNumber($cardNumber.val())) { - showFormError($cardNumber, lang("credit_card_error")); - noErrors = false; - } - - if (!Stripe.validateCVC($cvcNumber.val())) { - showFormError($cardNumber, lang("cvc_error")); - noErrors = false; - } - - if (!Stripe.validateExpiry($expiryMonth.val(), $expiryYear.val())) { - showFormError($cardNumber, lang("expiry_error")); - showFormError($expiryYear, ''); - noErrors = false; - } - - if (noErrors) { - Stripe.card.createToken({ - name: $cardName.val(), - number: $cardNumber.val(), - cvc: $cvcNumber.val(), - exp_month: $expiryMonth.val(), - exp_year: $expiryYear.val() - }, - function(status, response) { - - if (response.error) { - clearFormErrors($('.payment-form')); - if(response.error.param.length>0) - showFormError($('*[data-stripe=' + response.error.param + ']', $('.payment-form')), response.error.message); - else - showMessage(response.error.message); - toggleSubmitDisabled($submitButton); - } else { - var token = response.id; - $form.append($('').val(token)); - $form.ajaxSubmit(ajaxFormConf); - } - - }); - } else { - showMessage(lang("card_validation_error")); - toggleSubmitDisabled($submitButton); - } - - } else { - $form.ajaxSubmit(ajaxFormConf); - } }); + //handles stripe payment form submit + $('#stripe-payment-form').on('submit', function (e) { + + e.preventDefault(); + e.stopImmediatePropagation(); + + stripe.createToken(card).then(function (result) { + if (result.error) { + // Inform the user if there was an error. + var errorElement = document.getElementById('card-errors'); + errorElement.textContent = result.error.message; + } else { + // Send the token to your server. + stripeTokenHandler(result.token); + } + }); + + }); + + function stripeTokenHandler(token) { + + var form = document.getElementById('stripe-payment-form'); + var hiddenInput = document.createElement('input'); + hiddenInput.setAttribute('type', 'hidden'); + hiddenInput.setAttribute('name', 'stripeToken'); + hiddenInput.setAttribute('value', token.id); + form.appendChild(hiddenInput); + + var $ajaxFormConf = getAjaxFormConfig($('#stripe-payment-form')); + $('#stripe-payment-form').ajaxSubmit($ajaxFormConf); + + } + + $('#stripe-sca-payment-form').on('submit', function (e) { + + e.preventDefault(); + e.stopImmediatePropagation(); + + stripe.createPaymentMethod( + 'card', + cardElement + ).then(function (result) { + if (result.error) { + var errorElement = document.getElementById('card-errors'); + errorElement.textContent = result.error.message; + } else { + + stripePaymentMethodHandler(result.paymentMethod); + } + }); + }); + + + function stripePaymentMethodHandler(paymentMethod) { + + var form = document.getElementById('stripe-sca-payment-form'); + var hiddenInput = document.createElement('input'); + hiddenInput.setAttribute('type', 'hidden'); + hiddenInput.setAttribute('name', 'paymentMethod'); + hiddenInput.setAttribute('value', paymentMethod.id); + form.appendChild(hiddenInput); + + var $ajaxFormConf = getAjaxFormConfig($('#stripe-sca-payment-form')); + $('#stripe-sca-payment-form').ajaxSubmit($ajaxFormConf); + + } + + $('#pay_offline').change(function () { + $('.online_payment').toggle(!this.checked); + $('.offline_payment').toggle(this.checked); + }).change(); + $('a').smoothScroll({ offset: -60 }); - /* Scroll to top */ $(window).scroll(function() { if ($(this).scrollTop() > 100) { @@ -167,15 +183,6 @@ $(function() { $('.card-number').payment('formatCardNumber'); $('.card-cvc').payment('formatCardCVC'); - $('#pay_offline').change(function () { - $('.online_payment').toggle(!this.checked); - $('.offline_payment').toggle(this.checked); - - // Disable CC form inputs to prevent Chrome trying to validate hidden fields - $('.online_payment input, .online_payment select').attr('disabled', this.checked); - - }).change(); - // Apply access code here to unlock hidden tickets $('#apply_access_code').click(function(e) { var $clicked = $(this); diff --git a/public/assets/javascript/frontend.js b/public/assets/javascript/frontend.js index 5f0453cc..04466f3d 100644 --- a/public/assets/javascript/frontend.js +++ b/public/assets/javascript/frontend.js @@ -4566,147 +4566,163 @@ function log() { }; }).call(this); -;$(function() { +;function getAjaxFormConfig(form) { + + var $form = form; + var $submitButton = $form.find('input[type=submit]'); + + toggleSubmitDisabled($submitButton); + + var ajaxFormConf = { + delegation: true, + beforeSerialize: function (jqForm, options) { + window.doSubmit = true; + clearFormErrors(jqForm[0]); + toggleSubmitDisabled($submitButton); + }, + beforeSubmit: function () { + $submitButton = $form.find('input[type=submit]'); + toggleSubmitDisabled($submitButton); + return window.doSubmit; + }, + error: function (data, statusText, xhr, $form) { + $submitButton = $form.find('input[type=submit]'); + + // Form validation error. + if (422 == data.status) { + processFormErrors($form, $.parseJSON(data.responseText)); + return; + } + + toggleSubmitDisabled($submitButton); + showMessage(lang("whoops")); + }, + success: function (data, statusText, xhr, $form) { + var $submitButton = $form.find('input[type=submit]'); + + if (data.message) { + showMessage(data.message); + } + switch (data.status) { + case 'success': + + if (data.redirectUrl) { + if (data.redirectData) { + $.redirectPost(data.redirectUrl, data.redirectData); + } else { + document.location.href = data.redirectUrl; + } + } + break; + + case 'error': + if (data.messages) { + processFormErrors($form, data.messages); + return; + } + break; + + default: + break; + } + + toggleSubmitDisabled($submitButton); + + }, + dataType: 'json' + }; + + return ajaxFormConf; +} + +$(function() { + $('form.ajax').on('submit', function(e) { e.preventDefault(); e.stopImmediatePropagation(); - var $form = - $(this), - $submitButton = $form.find('input[type=submit]'), - ajaxFormConf = { - delegation: true, - beforeSerialize: function(jqForm, options) { - window.doSubmit = true; - clearFormErrors(jqForm[0]); - toggleSubmitDisabled($submitButton); - }, - beforeSubmit: function() { - $submitButton = $form.find('input[type=submit]'); - toggleSubmitDisabled($submitButton); - return window.doSubmit; - }, - error: function(data, statusText, xhr, $form) { - $submitButton = $form.find('input[type=submit]'); + var ajaxFormConf = getAjaxFormConfig($(this)); - // Form validation error. - if (422 == data.status) { - processFormErrors($form, $.parseJSON(data.responseText)); - return; - } + $(this).ajaxSubmit(ajaxFormConf); - toggleSubmitDisabled($submitButton); - showMessage(lang("whoops")); - }, - success: function(data, statusText, xhr, $form) { - var $submitButton = $form.find('input[type=submit]'); - - if (data.message) { - showMessage(data.message); - } - switch (data.status) { - case 'success': - - if (data.redirectUrl) { - if(data.redirectData) { - $.redirectPost(data.redirectUrl, data.redirectData); - } else { - document.location.href = data.redirectUrl; - } - } - break; - - case 'error': - if (data.messages) { - processFormErrors($form, data.messages); - return; - } - break; - - default: - break; - - - } - - toggleSubmitDisabled($submitButton); - - - }, - dataType: 'json' - }; - - toggleSubmitDisabled($submitButton); - - if ($form.hasClass('payment-form') && !$('#pay_offline').is(":checked")) { - clearFormErrors($('.payment-form')); - - Stripe.setPublishableKey($form.data('stripe-pub-key')); - - var - noErrors = true, - $cardNumber = $('.card-number'), - $cardName = $('.card-name'), - $cvcNumber = $('.card-cvc'), - $expiryMonth = $('.card-expiry-month'), - $expiryYear = $('.card-expiry-year'); - - - if (!Stripe.validateCardNumber($cardNumber.val())) { - showFormError($cardNumber, lang("credit_card_error")); - noErrors = false; - } - - if (!Stripe.validateCVC($cvcNumber.val())) { - showFormError($cardNumber, lang("cvc_error")); - noErrors = false; - } - - if (!Stripe.validateExpiry($expiryMonth.val(), $expiryYear.val())) { - showFormError($cardNumber, lang("expiry_error")); - showFormError($expiryYear, ''); - noErrors = false; - } - - if (noErrors) { - Stripe.card.createToken({ - name: $cardName.val(), - number: $cardNumber.val(), - cvc: $cvcNumber.val(), - exp_month: $expiryMonth.val(), - exp_year: $expiryYear.val() - }, - function(status, response) { - - if (response.error) { - clearFormErrors($('.payment-form')); - if(response.error.param.length>0) - showFormError($('*[data-stripe=' + response.error.param + ']', $('.payment-form')), response.error.message); - else - showMessage(response.error.message); - toggleSubmitDisabled($submitButton); - } else { - var token = response.id; - $form.append($('').val(token)); - $form.ajaxSubmit(ajaxFormConf); - } - - }); - } else { - showMessage(lang("card_validation_error")); - toggleSubmitDisabled($submitButton); - } - - } else { - $form.ajaxSubmit(ajaxFormConf); - } }); + //handles stripe payment form submit + $('#stripe-payment-form').on('submit', function (e) { + + e.preventDefault(); + e.stopImmediatePropagation(); + + stripe.createToken(card).then(function (result) { + if (result.error) { + // Inform the user if there was an error. + var errorElement = document.getElementById('card-errors'); + errorElement.textContent = result.error.message; + } else { + // Send the token to your server. + stripeTokenHandler(result.token); + } + }); + + }); + + function stripeTokenHandler(token) { + + var form = document.getElementById('stripe-payment-form'); + var hiddenInput = document.createElement('input'); + hiddenInput.setAttribute('type', 'hidden'); + hiddenInput.setAttribute('name', 'stripeToken'); + hiddenInput.setAttribute('value', token.id); + form.appendChild(hiddenInput); + + var $ajaxFormConf = getAjaxFormConfig($('#stripe-payment-form')); + $('#stripe-payment-form').ajaxSubmit($ajaxFormConf); + + } + + $('#stripe-sca-payment-form').on('submit', function (e) { + + e.preventDefault(); + e.stopImmediatePropagation(); + + stripe.createPaymentMethod( + 'card', + cardElement + ).then(function (result) { + if (result.error) { + var errorElement = document.getElementById('card-errors'); + errorElement.textContent = result.error.message; + } else { + + stripePaymentMethodHandler(result.paymentMethod); + } + }); + }); + + + function stripePaymentMethodHandler(paymentMethod) { + + var form = document.getElementById('stripe-sca-payment-form'); + var hiddenInput = document.createElement('input'); + hiddenInput.setAttribute('type', 'hidden'); + hiddenInput.setAttribute('name', 'paymentMethod'); + hiddenInput.setAttribute('value', paymentMethod.id); + form.appendChild(hiddenInput); + + var $ajaxFormConf = getAjaxFormConfig($('#stripe-sca-payment-form')); + $('#stripe-sca-payment-form').ajaxSubmit($ajaxFormConf); + + } + + $('#pay_offline').change(function () { + $('.online_payment').toggle(!this.checked); + $('.offline_payment').toggle(this.checked); + }).change(); + $('a').smoothScroll({ offset: -60 }); - - + /* Scroll to top */ $(window).scroll(function() { if ($(this).scrollTop() > 100) { @@ -4735,15 +4751,6 @@ function log() { $('.card-number').payment('formatCardNumber'); $('.card-cvc').payment('formatCardCVC'); - $('#pay_offline').change(function () { - $('.online_payment').toggle(!this.checked); - $('.offline_payment').toggle(this.checked); - - // Disable CC form inputs to prevent Chrome trying to validate hidden fields - $('.online_payment input, .online_payment select').attr('disabled', this.checked); - - }).change(); - // Apply access code here to unlock hidden tickets $('#apply_access_code').click(function(e) { var $clicked = $(this); diff --git a/resources/lang/en/Order.php b/resources/lang/en/Order.php index 2577ddbc..39cc28bc 100644 --- a/resources/lang/en/Order.php +++ b/resources/lang/en/Order.php @@ -31,6 +31,8 @@ return array ( 'order_ref' => 'Reference', 'organiser_booking_fees' => 'Organiser Booking Fees', 'payment_gateway' => 'Payment Gateway', + 'payment_intent' => 'Payment Intent', + 'payment_failed' => 'Payment failed please try enter your payment details again.', 'price' => 'Price', 'purchase_date' => 'Purchase Date', 'quantity' => 'Quantity', diff --git a/resources/lang/en/Public_ViewEvent.php b/resources/lang/en/Public_ViewEvent.php index bdd2de51..56cf38bf 100644 --- a/resources/lang/en/Public_ViewEvent.php +++ b/resources/lang/en/Public_ViewEvent.php @@ -27,6 +27,7 @@ return [ 'business_address_code' => 'Code', 'card_number' => 'Card number', 'checkout_submit' => 'Checkout', + 'checkout_order' => 'Contine to Payment', 'confirmation_email' => 'and a confirmation email have been sent to you.', 'copy_buyer' => 'Copy buyer details to all ticket holders', 'currently_not_on_sale' => 'Currently Not On Sale', diff --git a/resources/views/ManageAccount/Partials/PaymentGatewayOptions.blade.php b/resources/views/ManageAccount/Partials/PaymentGatewayOptions.blade.php index 295e5f89..8c18e970 100644 --- a/resources/views/ManageAccount/Partials/PaymentGatewayOptions.blade.php +++ b/resources/views/ManageAccount/Partials/PaymentGatewayOptions.blade.php @@ -1,9 +1,10 @@ + {!! Form::model($account, array('url' => route('postEditAccountPayment'), 'class' => 'ajax ')) !!}
- {!! Form::label('payment_gateway_id', trans("ManageAccount.default_payment_gateway"), array('class'=>'control-label ')) !!} - {!! Form::select('payment_gateway_id', $payment_gateways, $account->payment_gateway_id, ['class' => 'form-control gateway_selector']) !!} + {!! Form::label('payment_gateway_id', trans("ManageAccount.default_payment_gateway"), array('class'=>'control-label + ')) !!}
+ + @foreach ($payment_gateways as $id => $payment_gateway) + {!! Form::radio('payment_gateway', $payment_gateway['id'], $payment_gateway['default'], + array('id'=>'payment_gateway_' . $payment_gateway['id'])) !!} + {!! Form::label($payment_gateway['provider_name'],$payment_gateway['provider_name'] , array('class'=>'control-label + gateway_selector')) !!}
+ @endforeach + +
-{{--Stripe--}} -
-

@lang("ManageAccount.stripe_settings")

-
-
-
- {!! Form::label('stripe[apiKey]', trans("ManageAccount.stripe_secret_key"), array('class'=>'control-label ')) !!} - {!! Form::text('stripe[apiKey]', $account->getGatewayConfigVal(config('attendize.payment_gateway_stripe'), 'apiKey'),[ 'class'=>'form-control']) !!} -
-
-
-
- {!! Form::label('publishableKey', trans("ManageAccount.stripe_publishable_key"), array('class'=>'control-label ')) !!} - {!! Form::text('stripe[publishableKey]', $account->getGatewayConfigVal(config('attendize.payment_gateway_stripe'), 'publishableKey'),[ 'class'=>'form-control']) !!} -
-
-
-
+@foreach ($payment_gateways as $id => $payment_gateway) -{{--Paypal--}} -
-

@lang("ManageAccount.paypal_settings")

- -
-
-
- {!! Form::label('paypal[username]', trans("ManageAccount.paypal_username"), array('class'=>'control-label ')) !!} - {!! Form::text('paypal[username]', $account->getGatewayConfigVal(config('attendize.payment_gateway_paypal'), 'username'),[ 'class'=>'form-control']) !!} -
-
-
-
- {!! Form::label('paypal[password]', trans("ManageAccount.paypal_password"), ['class'=>'control-label ']) !!} - {!! Form::text('paypal[password]', $account->getGatewayConfigVal(config('attendize.payment_gateway_paypal'), 'password'),[ 'class'=>'form-control']) !!} -
-
-
-
-
-
- {!! Form::label('paypal[signature]', trans("ManageAccount.paypal_signature"), array('class'=>'control-label ')) !!} - {!! Form::text('paypal[signature]', $account->getGatewayConfigVal(config('attendize.payment_gateway_paypal'), 'signature'),[ 'class'=>'form-control']) !!} -
-
-
-
-
-
- {!! Form::label('paypal[brandName]', trans("ManageAccount.branding_name"), array('class'=>'control-label ')) !!} - {!! Form::text('paypal[brandName]', $account->getGatewayConfigVal(config('attendize.payment_gateway_paypal'), 'brandName'),[ 'class'=>'form-control']) !!} -
- @lang("ManageAccount.branding_name_help") -
-
-
-
+@if(View::exists($payment_gateway['admin_blade_template'])) + @include($payment_gateway['admin_blade_template']) +@endif -
+@endforeach +
diff --git a/resources/views/ManageAccount/Partials/Stripe.blade.php b/resources/views/ManageAccount/Partials/Stripe.blade.php new file mode 100644 index 00000000..90630694 --- /dev/null +++ b/resources/views/ManageAccount/Partials/Stripe.blade.php @@ -0,0 +1,17 @@ +
+

@lang("ManageAccount.stripe_settings")

+
+
+
+ {!! Form::label('stripe[apiKey]', trans("ManageAccount.stripe_secret_key"), array('class'=>'control-label ')) !!} + {!! Form::text('stripe[apiKey]', $account->getGatewayConfigVal($payment_gateway['id'], 'apiKey'),[ 'class'=>'form-control']) !!} +
+
+
+
+ {!! Form::label('publishableKey', trans("ManageAccount.stripe_publishable_key"), array('class'=>'control-label ')) !!} + {!! Form::text('stripe[publishableKey]', $account->getGatewayConfigVal($payment_gateway['id'], 'publishableKey'),[ 'class'=>'form-control']) !!} +
+
+
+
diff --git a/resources/views/ManageAccount/Partials/StripeSCA.blade.php b/resources/views/ManageAccount/Partials/StripeSCA.blade.php new file mode 100644 index 00000000..d4c29cfa --- /dev/null +++ b/resources/views/ManageAccount/Partials/StripeSCA.blade.php @@ -0,0 +1,17 @@ +
+

@lang("ManageAccount.stripe_settings")

+
+
+
+ {!! Form::label('stripe_sca[apiKey]', trans("ManageAccount.stripe_secret_key"), array('class'=>'control-label ')) !!} + {!! Form::text('stripe_sca[apiKey]', $account->getGatewayConfigVal($payment_gateway['id'], 'apiKey'),[ 'class'=>'form-control']) !!} +
+
+
+
+ {!! Form::label('publishableKey', trans("ManageAccount.stripe_publishable_key"), array('class'=>'control-label ')) !!} + {!! Form::text('stripe_sca[publishableKey]', $account->getGatewayConfigVal($payment_gateway['id'], 'publishableKey'),[ 'class'=>'form-control']) !!} +
+
+
+
diff --git a/resources/views/ManageEvent/Modals/ManageOrder.blade.php b/resources/views/ManageEvent/Modals/ManageOrder.blade.php index 8309d5d8..e4212741 100644 --- a/resources/views/ManageEvent/Modals/ManageOrder.blade.php +++ b/resources/views/ManageEvent/Modals/ManageOrder.blade.php @@ -70,6 +70,12 @@ @endif + @if($order->payment_intent) +
+ @lang("Order.payment_intent")
{{$order->payment_intent}} +
+ @endif + @if ($order->is_business)
@lang("Public_ViewEvent.business_name")
diff --git a/resources/views/Public/ViewEvent/EventPageCheckout.blade.php b/resources/views/Public/ViewEvent/EventPageCheckout.blade.php index 1942720b..1d9b0b30 100644 --- a/resources/views/Public/ViewEvent/EventPageCheckout.blade.php +++ b/resources/views/Public/ViewEvent/EventPageCheckout.blade.php @@ -1,7 +1,7 @@ @extends('Public.ViewEvent.Layouts.EventPage') @section('head') - + @stop @section('content') diff --git a/resources/views/Public/ViewEvent/EventPagePayment.blade.php b/resources/views/Public/ViewEvent/EventPagePayment.blade.php new file mode 100644 index 00000000..8b5c516c --- /dev/null +++ b/resources/views/Public/ViewEvent/EventPagePayment.blade.php @@ -0,0 +1,12 @@ +@extends('Public.ViewEvent.Layouts.EventPage') + +@section('head') + +@stop + +@section('content') +@include('Public.ViewEvent.Partials.EventHeaderSection') +@include('Public.ViewEvent.Partials.EventPaymentSection') +@include('Public.ViewEvent.Partials.EventFooterSection') +@stop + diff --git a/resources/views/Public/ViewEvent/Partials/Dummy.blade.php b/resources/views/Public/ViewEvent/Partials/Dummy.blade.php new file mode 100644 index 00000000..80798ab4 --- /dev/null +++ b/resources/views/Public/ViewEvent/Partials/Dummy.blade.php @@ -0,0 +1,46 @@ +
+
+
+
+
+ {!! Form::label('card-number', trans("Public_ViewEvent.card_number")) !!} + +
+
+
+
+
+
+ {!! Form::label('card-expiry-month', trans("Public_ViewEvent.expiry_month")) !!} + {!! Form::selectRange('card-expiry-month', 1, 12, null, [ + 'class' => 'form-control card-expiry-month', + 'data' => 'exp_month' + ] ) !!} +
+
+
+
+ {!! Form::label('card-expiry-year', trans("Public_ViewEvent.expiry_year")) !!} + {!! Form::selectRange('card-expiry-year',date('Y'),date('Y')+10,null, [ + 'class' => 'form-control card-expiry-year', + 'data' => 'exp_year' + ] ) !!} +
+
+
+
+
+
+ {!! Form::label('card-expiry-year', trans("Public_ViewEvent.cvc_number")) !!} + +
+
+
+ + {!! Form::token() !!} + + +
+
+ diff --git a/resources/views/Public/ViewEvent/Partials/EventCreateOrderSection.blade.php b/resources/views/Public/ViewEvent/Partials/EventCreateOrderSection.blade.php index 66bb48a5..19c07ffb 100644 --- a/resources/views/Public/ViewEvent/Partials/EventCreateOrderSection.blade.php +++ b/resources/views/Public/ViewEvent/Partials/EventCreateOrderSection.blade.php @@ -58,7 +58,7 @@
- {!! Form::open(['url' => route('postCreateOrder', ['event_id' => $event->id]), 'class' => ($order_requires_payment && @$payment_gateway->is_on_site) ? 'ajax payment-form' : 'ajax', 'data-stripe-pub-key' => isset($account_payment_gateway->config['publishableKey']) ? $account_payment_gateway->config['publishableKey'] : '']) !!} + {!! Form::open(['url' => route('postValidateOrder', ['event_id' => $event->id ]), 'class' => 'ajax payment-form']) !!} {!! Form::hidden('event_id', $event->id) !!} @@ -201,10 +201,7 @@ @include('Public.ViewEvent.Partials.AttendeeQuestions', ['ticket' => $ticket['ticket'],'attendee_number' => $total_attendee_increment++])
-
- - @endfor @endforeach @@ -212,82 +209,6 @@ - - - @if($order_requires_payment) - -

@lang("Public_ViewEvent.payment_information")

- @lang("Public_ViewEvent.below_payment_information_header") - @if($event->enable_offline_payments) -
-
- @if($payment_gateway === false) - {{-- Force offline payment if no gateway --}} - - - @else - - @endif - -
-
- - - @endif - - - @if(@$payment_gateway->is_on_site) -
-
-
-
- {!! Form::label('card-number', trans("Public_ViewEvent.card_number")) !!} - -
-
-
-
-
-
- {!! Form::label('card-expiry-month', trans("Public_ViewEvent.expiry_month")) !!} - {!! Form::selectRange('card-expiry-month',1,12,null, [ - 'class' => 'form-control card-expiry-month', - 'data-stripe' => 'exp_month' - ] ) !!} -
-
-
-
- {!! Form::label('card-expiry-year', trans("Public_ViewEvent.expiry_year")) !!} - {!! Form::selectRange('card-expiry-year',date('Y'),date('Y')+10,null, [ - 'class' => 'form-control card-expiry-year', - 'data-stripe' => 'exp_year' - ] ) !!}
-
-
-
-
-
- {!! Form::label('card-expiry-year', trans("Public_ViewEvent.cvc_number")) !!} - -
-
-
-
- - @endif - - @endif - @if($event->pre_order_display_message)
{!! nl2br(e($event->pre_order_display_message)) !!} @@ -295,7 +216,8 @@ @endif {!! Form::hidden('is_embedded', $is_embedded) !!} - {!! Form::submit(trans("Public_ViewEvent.checkout_submit"), ['class' => 'btn btn-lg btn-success card-submit', 'style' => 'width:100%;']) !!} + {!! Form::submit(trans("Public_ViewEvent.checkout_order"), ['class' => 'btn btn-lg btn-success card-submit', 'style' => 'width:100%;']) !!} + {!! Form::close() !!}
diff --git a/resources/views/Public/ViewEvent/Partials/EventPaymentSection.blade.php b/resources/views/Public/ViewEvent/Partials/EventPaymentSection.blade.php new file mode 100644 index 00000000..417e11ae --- /dev/null +++ b/resources/views/Public/ViewEvent/Partials/EventPaymentSection.blade.php @@ -0,0 +1,85 @@ +
+
+

+ @lang("Public_ViewEvent.payment_information") +

+
+ @if($payment_failed) +
+
+ @lang("Order.payment_failed") +
+
+ @endif +
+
+ @lang("Public_ViewEvent.below_order_details_header") +
+
+
+
+

+ + @lang("Public_ViewEvent.order_summary") +

+
+ +
+ + @foreach($tickets as $ticket) + + + + + @endforeach +
{{{$ticket['ticket']['title']}}} X {{$ticket['qty']}} + @if((int)ceil($ticket['full_price']) === 0) + @lang("Public_ViewEvent.free") + @else + {{ money($ticket['full_price'], $event->currency) }} + @endif +
+
+ @if($order_total > 0) + + @endif + +
+
+ {!! @trans("Public_ViewEvent.time", ["time"=>""]) !!} +
+
+
+
+ + @if($order_requires_payment) + @include('Public.ViewEvent.Partials.OfflinePayments') + @endif + + @if(View::exists($payment_gateway['checkout_blade_template'])) + @include($payment_gateway['checkout_blade_template']) + @endif + +
+
+
+ +
+@if(session()->get('message')) + +@endif + diff --git a/resources/views/Public/ViewEvent/Partials/OfflinePayments.blade.php b/resources/views/Public/ViewEvent/Partials/OfflinePayments.blade.php new file mode 100644 index 00000000..bd40bb33 --- /dev/null +++ b/resources/views/Public/ViewEvent/Partials/OfflinePayments.blade.php @@ -0,0 +1,30 @@ +

@lang("Public_ViewEvent.payment_information")

+@lang("Public_ViewEvent.below_payment_information_header") +@if($event->enable_offline_payments) +{!! Form::open(['url' => route('postCreateOrder', ['event_id' => $event->id]), 'class' => 'ajax']) !!} +
+
+ @if($payment_gateway === false) + {{-- Force offline payment if no gateway --}} + + + @else + + @endif + +
+
+ +{!! Form::close() !!} + +@endif \ No newline at end of file diff --git a/resources/views/Public/ViewEvent/Partials/PaymentStripe.blade.php b/resources/views/Public/ViewEvent/Partials/PaymentStripe.blade.php new file mode 100644 index 00000000..871c3461 --- /dev/null +++ b/resources/views/Public/ViewEvent/Partials/PaymentStripe.blade.php @@ -0,0 +1,85 @@ +
+
+ +
+ +
+ + +
+ {!! Form::token() !!} + + + +
+ + + diff --git a/resources/views/Public/ViewEvent/Partials/PaymentStripeSCA.blade.php b/resources/views/Public/ViewEvent/Partials/PaymentStripeSCA.blade.php new file mode 100644 index 00000000..63d17969 --- /dev/null +++ b/resources/views/Public/ViewEvent/Partials/PaymentStripeSCA.blade.php @@ -0,0 +1,83 @@ +
+
+ +
+ +
+ + +
+ {!! Form::token() !!} + + + +
+ + +