diff --git a/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index cf73ee035..6738a18c5 100644 --- a/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -52,8 +52,12 @@ class CreditCardRenderer { if (formValid) { + const vault = document.querySelector(wrapper + ' .ppcp-credit-card-vault') ? + document.querySelector(wrapper + ' .ppcp-credit-card-vault').checked : false; + hostedFields.submit({ - contingencies: ['3D_SECURE'] + contingencies: ['3D_SECURE'], + vault }).then((payload) => { payload.orderID = payload.orderId; return contextConfig.onApprove(payload); diff --git a/modules.local/ppcp-button/src/Assets/SmartButton.php b/modules.local/ppcp-button/src/Assets/SmartButton.php index 9c31fba42..90b1408b8 100644 --- a/modules.local/ppcp-button/src/Assets/SmartButton.php +++ b/modules.local/ppcp-button/src/Assets/SmartButton.php @@ -60,6 +60,9 @@ class SmartButton implements SmartButtonInterface public function renderWrapper(): bool { + if (! $this->saveVaultToken() && $this->hasSubscription()) { + return false; + } $buttonRenderer = static function () { $product = wc_get_product(); if ( @@ -74,46 +77,6 @@ class SmartButton implements SmartButtonInterface echo '
'; }; - $canRenderDcc = $this->dccApplies->forCountryCurrency() && $this->settings->has('client_id') && $this->settings->get('client_id'); - $dccRenderer = static function (bool $miniCart = false) use ($canRenderDcc) { - $id = ($miniCart) ? 'ppcp-hosted-fields-mini-cart' : 'ppcp-hosted-fields'; - if (! $canRenderDcc) { - return; - } - $product = wc_get_product(); - if ( - ! $miniCart && !is_checkout() && is_a($product, \WC_Product::class) - && ( - $product->is_type(['external', 'grouped']) - || !$product->is_in_stock() - ) - ) { - return; - } - printf( - '', - esc_attr($id), - esc_html__('Card number', 'woocommerce-paypal-commerce-gateway'), - esc_html__('Expiration Date', 'woocommerce-paypal-commerce-gateway'), - esc_html__('CVV', 'woocommerce-paypal-commerce-gateway'), - esc_html__('Pay with Card', 'woocommerce-paypal-commerce-gateway') - ); - }; - $notEnabledOnCart = $this->settings->has('button_cart_enabled') && !$this->settings->get('button_cart_enabled'); if ( @@ -133,7 +96,10 @@ class SmartButton implements SmartButtonInterface ) { add_action( 'woocommerce_proceed_to_checkout', - $dccRenderer, + [ + $this, + 'dccRenderer', + ], 20 ); } @@ -157,7 +123,10 @@ class SmartButton implements SmartButtonInterface ) { add_action( 'woocommerce_single_product_summary', - $dccRenderer, + [ + $this, + 'dccRenderer', + ], 31 ); } @@ -180,8 +149,8 @@ class SmartButton implements SmartButtonInterface ) { add_action( 'woocommerce_widget_shopping_cart_after_buttons', - static function () use ($dccRenderer) { - $dccRenderer(true); + function () { + $this->dccRenderer(true); }, 31 ); @@ -198,7 +167,10 @@ class SmartButton implements SmartButtonInterface ) { add_action( 'woocommerce_review_order_after_submit', - $dccRenderer, + [ + $this, + 'dccRenderer', + ], 11 ); } @@ -209,6 +181,9 @@ class SmartButton implements SmartButtonInterface public function enqueue(): bool { + if (! $this->saveVaultToken() && $this->hasSubscription()) { + return false; + } wp_enqueue_style( 'ppcp-hosted-fields', $this->moduleUrl . '/assets/css/hosted-fields.css', @@ -231,6 +206,97 @@ class SmartButton implements SmartButtonInterface return true; } + public function dccRenderer(bool $miniCart = false) { + { + $id = ($miniCart) ? 'ppcp-hosted-fields-mini-cart' : 'ppcp-hosted-fields'; + $canRenderDcc = $canRenderDcc = $this->dccApplies->forCountryCurrency() && $this->settings->has('client_id') && $this->settings->get('client_id'); + if (! $canRenderDcc) { + return; + } + $product = wc_get_product(); + if ( + ! $miniCart && !is_checkout() && is_a($product, \WC_Product::class) + && ( + $product->is_type(['external', 'grouped']) + || !$product->is_in_stock() + ) + ) { + return; + } + $saveCard = $this->saveVaultToken() ? sprintf( + '