Merge pull request #421 from woocommerce/PCP-432-save-your-credit-card-checkbox-s

Check if pay for order contains subscription
This commit is contained in:
Emili Castells 2022-01-10 11:27:32 +01:00 committed by GitHub
commit ca10a936d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 5 deletions

View file

@ -215,11 +215,12 @@ class SmartButton implements SmartButtonInterface {
function ( array $default_fields, $id ) use ( $subscription_helper ) : array {
if ( is_user_logged_in() && $this->settings->has( 'vault_enabled' ) && $this->settings->get( 'vault_enabled' ) && CreditCardGateway::ID === $id ) {
if ( ! $subscription_helper->cart_contains_subscription() ) {
$default_fields['card-vault'] = sprintf(
'<p class="form-row form-row-wide"><label for="vault"><input class="ppcp-credit-card-vault" type="checkbox" id="ppcp-credit-card-vault" name="vault">%s</label></p>',
esc_html__( 'Save your Credit Card', 'woocommerce-paypal-payments' )
);
$default_fields['card-vault'] = sprintf(
'<p class="form-row form-row-wide"><label for="vault"><input class="ppcp-credit-card-vault" type="checkbox" id="ppcp-credit-card-vault" name="vault">%s</label></p>',
esc_html__( 'Save your Credit Card', 'woocommerce-paypal-payments' )
);
if ( $subscription_helper->cart_contains_subscription() || $subscription_helper->order_pay_contains_subscription() ) {
$default_fields['card-vault'] = '';
}
$tokens = $this->payment_token_repository->all_for_user_id( get_current_user_id() );
@ -612,6 +613,10 @@ class SmartButton implements SmartButtonInterface {
if ( is_product() ) {
return $this->subscription_helper->current_product_is_subscription();
}
if ( is_wc_endpoint_url( 'order-pay' ) ) {
return $this->subscription_helper->order_pay_contains_subscription();
}
return $this->subscription_helper->cart_contains_subscription();
}

View file

@ -55,6 +55,42 @@ class SubscriptionHelper {
return false;
}
/**
* Whether pay for order contains subscriptions.
*
* @return bool
*/
public function order_pay_contains_subscription(): bool {
if ( ! $this->plugin_is_active() || ! is_wc_endpoint_url( 'order-pay' ) ) {
return false;
}
global $wp;
$order_id = (int) $wp->query_vars['order-pay'];
if ( 0 === $order_id ) {
return false;
}
$order = wc_get_order( $order_id );
if ( is_a( $order, \WC_Order::class ) ) {
foreach ( $order->get_items() as $item ) {
if ( is_a( $item, \WC_Order_Item_Product::class ) ) {
$product = wc_get_product( $item->get_product_id() );
/**
* Class already exist in subscriptions plugin.
*
* @psalm-suppress UndefinedClass
*/
if ( is_a( $product, \WC_Product_Subscription::class ) ) {
return true;
}
}
}
}
return false;
}
/**
* Whether only automatic payment gateways are accepted.
*