| <?php |
| |
| if ( ! defined( 'ABSPATH' ) ) { |
| exit; // Exit if accessed directly. |
| } |
| |
| /** |
| * Trait for Subscriptions utility functions. |
| * |
| * @since 5.6.0 |
| */ |
| trait WC_Stripe_Subscriptions_Utilities_Trait { |
| |
| /** |
| * Checks if subscriptions are enabled on the site. |
| * |
| * @since 5.6.0 |
| * |
| * @return bool Whether subscriptions is enabled or not. |
| */ |
| public function is_subscriptions_enabled() { |
| return class_exists( 'WC_Subscriptions' ) && version_compare( WC_Subscriptions::$version, '2.2.0', '>=' ); |
| } |
| |
| /** |
| * Is $order_id a subscription? |
| * |
| * @since 5.6.0 |
| * |
| * @param int $order_id |
| * @return boolean |
| */ |
| public function has_subscription( $order_id ) { |
| return ( function_exists( 'wcs_order_contains_subscription' ) && ( wcs_order_contains_subscription( $order_id ) || wcs_is_subscription( $order_id ) || wcs_order_contains_renewal( $order_id ) ) ); |
| } |
| |
| /** |
| * Returns whether this user is changing the payment method for a subscription. |
| * |
| * @since 5.6.0 |
| * |
| * @return bool |
| */ |
| public function is_changing_payment_method_for_subscription() { |
| if ( isset( $_GET['change_payment_method'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification |
| return wcs_is_subscription( wc_clean( wp_unslash( $_GET['change_payment_method'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification |
| } |
| return false; |
| } |
| |
| /** |
| * Returns boolean value indicating whether payment for an order will be recurring, |
| * as opposed to single. |
| * |
| * @since 5.6.0 |
| * |
| * @param int $order_id ID for corresponding WC_Order in process. |
| * |
| * @return bool |
| */ |
| public function is_payment_recurring( $order_id ) { |
| if ( ! $this->is_subscriptions_enabled() ) { |
| return false; |
| } |
| return $this->is_changing_payment_method_for_subscription() || $this->has_subscription( $order_id ); |
| } |
| |
| /** |
| * Returns a boolean value indicating whether the save payment checkbox should be |
| * displayed during checkout. |
| * |
| * Returns `false` if the cart currently has a subscriptions or if the request has a |
| * `change_payment_method` GET parameter. Returns the value in `$display` otherwise. |
| * |
| * @since 5.6.0 |
| * |
| * @param bool $display Bool indicating whether to show the save payment checkbox in the absence of subscriptions. |
| * |
| * @return bool Indicates whether the save payment method checkbox should be displayed or not. |
| */ |
| public function display_save_payment_method_checkbox( $display ) { |
| if ( WC_Subscriptions_Cart::cart_contains_subscription() || $this->is_changing_payment_method_for_subscription() ) { |
| return false; |
| } |
| // Only render the "Save payment method" checkbox if there are no subscription products in the cart. |
| return $display; |
| } |
| |
| /** |
| * Returns boolean on whether current WC_Cart or WC_Subscriptions_Cart |
| * contains a subscription or subscription renewal item |
| * |
| * @since 5.6.0 |
| * |
| * @return bool |
| */ |
| public function is_subscription_item_in_cart() { |
| if ( $this->is_subscriptions_enabled() ) { |
| return WC_Subscriptions_Cart::cart_contains_subscription() || $this->cart_contains_renewal(); |
| } |
| return false; |
| } |
| |
| /** |
| * Checks the cart to see if it contains a subscription product renewal. |
| * |
| * @since 5.6.0 |
| * |
| * @return mixed The cart item containing the renewal as an array, else false. |
| */ |
| public function cart_contains_renewal() { |
| if ( ! function_exists( 'wcs_cart_contains_renewal' ) ) { |
| return false; |
| } |
| return wcs_cart_contains_renewal(); |
| } |
| |
| } |