/**
  * If requesting a payment method change, replace the woocommerce_pay_shortcode() with a change payment form.
  *
  * @since 1.4
  */
 public static function maybe_replace_pay_shortcode()
 {
     if (!self::$is_request_to_change_payment) {
         return;
     }
     $valid_request = false;
     ob_clean();
     do_action('before_woocommerce_pay');
     echo '<div class="woocommerce">';
     if (!empty(self::$woocommerce_errors)) {
         foreach (self::$woocommerce_errors as $error) {
             WC_Subscriptions::add_notice($error, 'error');
         }
     }
     if (!empty(self::$woocommerce_messages)) {
         foreach (self::$woocommerce_messages as $message) {
             WC_Subscriptions::add_notice($message, 'success');
         }
     }
     $subscription = wcs_get_subscription(absint($_GET['change_payment_method']));
     if (wp_verify_nonce($_GET['_wpnonce'], __FILE__) === false) {
         WC_Subscriptions::add_notice(__('There was an error with your request. Please try again.', 'woocommerce-subscriptions'), 'error');
     } elseif (empty($subscription)) {
         WC_Subscriptions::add_notice(__('Invalid subscription.', 'woocommerce-subscriptions'), 'error');
     } elseif (!current_user_can('edit_shop_subscription_payment_method', $subscription->id)) {
         WC_Subscriptions::add_notice(__('That doesn\'t appear to be one of your subscriptions.', 'woocommerce-subscriptions'), 'error');
     } elseif (!$subscription->can_be_updated_to('new-payment-method')) {
         WC_Subscriptions::add_notice(__('The payment method can not be changed for that subscription.', 'woocommerce-subscriptions'), 'error');
     } else {
         if ($subscription->get_time('next_payment') > 0) {
             // translators: placeholder is next payment's date
             $next_payment_string = sprintf(__(' Next payment is due %s.', 'woocommerce-subscriptions'), $subscription->get_date_to_display('next_payment'));
         } else {
             $next_payment_string = '';
         }
         // translators: placeholder is either empty or "Next payment is due..."
         WC_Subscriptions::add_notice(sprintf(__('Choose a new payment method.%s', 'woocommerce-subscriptions'), $next_payment_string), 'notice');
         WC_Subscriptions::print_notices();
         if ($subscription->order_key == $_GET['key']) {
             // Set customer location to order location
             if ($subscription->billing_country) {
                 WC()->customer->set_country($subscription->billing_country);
             }
             if ($subscription->billing_state) {
                 WC()->customer->set_state($subscription->billing_state);
             }
             if ($subscription->billing_postcode) {
                 WC()->customer->set_postcode($subscription->billing_postcode);
             }
             wc_get_template('checkout/form-change-payment-method.php', array('subscription' => $subscription), '', plugin_dir_path(WC_Subscriptions::$plugin_file) . 'templates/');
             $valid_request = true;
         } else {
             WC_Subscriptions::add_notice(__('Invalid order.', 'woocommerce-subscriptions'), 'error');
         }
     }
     if (false === $valid_request) {
         WC_Subscriptions::print_notices();
     }
 }
 /**
  * If requesting a payment method change, replace the woocommerce_pay_shortcode() with a change payment form.
  *
  * @since 1.4
  */
 public static function maybe_replace_pay_shortcode()
 {
     global $woocommerce;
     if (!self::$is_request_to_change_payment) {
         return;
     }
     ob_clean();
     do_action('before_woocommerce_pay');
     echo '<div class="woocommerce">';
     if (!empty(self::$woocommerce_errors)) {
         foreach (self::$woocommerce_errors as $error) {
             WC_Subscriptions::add_notice($error, 'error');
         }
     }
     if (!empty(self::$woocommerce_messages)) {
         foreach (self::$woocommerce_messages as $message) {
             WC_Subscriptions::add_notice($message, 'success');
         }
     }
     $subscription_key = $_GET['change_payment_method'];
     $subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
     if (wp_verify_nonce($_GET['_wpnonce'], __FILE__) === false) {
         WC_Subscriptions::add_notice(__('There was an error with your request. Please try again.', 'woocommerce-subscriptions'), 'error');
         WC_Subscriptions::print_notices();
     } elseif (!WC_Subscriptions_Manager::user_owns_subscription($subscription_key)) {
         WC_Subscriptions::add_notice(__('That doesn\'t appear to be one of your subscriptions.', 'woocommerce-subscriptions'), 'error');
         WC_Subscriptions::print_notices();
     } elseif (empty($subscription)) {
         WC_Subscriptions::add_notice(__('Invalid subscription.', 'woocommerce-subscriptions'), 'error');
         WC_Subscriptions::print_notices();
     } elseif (!WC_Subscriptions_Manager::can_subscription_be_changed_to('new-payment-method', $subscription_key, get_current_user_id())) {
         WC_Subscriptions::add_notice(__('The payment method can not be changed for that subscription.', 'woocommerce-subscriptions'), 'error');
         WC_Subscriptions::print_notices();
     } else {
         $order = new WC_Order($subscription['order_id']);
         $order_id = absint($_GET['order_id']);
         $order_key = isset($_GET['key']) ? $_GET['key'] : $_GET['order'];
         $product_id = $subscription['product_id'];
         $next_payment_timestamp = WC_Subscriptions_Order::get_next_payment_timestamp($order, $product_id);
         if (!empty($next_payment_timestamp)) {
             $next_payment_string = sprintf(__(' Next payment is due %s.', 'woocommerce-subscriptions'), date_i18n(woocommerce_date_format(), $next_payment_timestamp));
         } else {
             $next_payment_string = '';
         }
         WC_Subscriptions::add_notice(sprintf(__('Choose a new payment method.%s', 'woocommerce-subscriptions'), $next_payment_string), 'notice');
         WC_Subscriptions::print_notices();
         if ($order->order_key == $order_key) {
             // Set customer location to order location
             if ($order->billing_country) {
                 $woocommerce->customer->set_country($order->billing_country);
             }
             if ($order->billing_state) {
                 $woocommerce->customer->set_state($order->billing_state);
             }
             if ($order->billing_postcode) {
                 $woocommerce->customer->set_postcode($order->billing_postcode);
             }
             // Show form
             WC_Subscriptions_Order::$recurring_only_price_strings = true;
             woocommerce_get_template('checkout/form-change-payment-method.php', array('order' => $order, 'subscription_key' => $subscription_key), '', plugin_dir_path(WC_Subscriptions::$plugin_file) . 'templates/');
             WC_Subscriptions_Order::$recurring_only_price_strings = false;
         } else {
             WC_Subscriptions::add_notice(__('Invalid order.', 'woocommerce-subscriptions'), 'error');
             WC_Subscriptions::print_notices();
         }
     }
 }
    /**
     * If requesting a payment method change, replace the woocommerce_pay_shortcode() with a change payment form.
     *
     * @since 1.4
     */
    public static function maybe_replace_pay_shortcode()
    {
        global $wp;
        $valid_request = false;
        // if the request to pay for the order belongs to a subscription but there's no GET params for changing payment method, show receipt page.
        if (!self::$is_request_to_change_payment && isset($wp->query_vars['order-pay']) && wcs_is_subscription(absint($wp->query_vars['order-pay']))) {
            $valid_request = true;
            ob_clean();
            do_action('before_woocommerce_pay');
            $subscription_key = isset($_GET['key']) ? wc_clean($_GET['key']) : '';
            $subscription = wcs_get_subscription(absint($wp->query_vars['order-pay']));
            if ($subscription->id == absint($wp->query_vars['order-pay']) && $subscription->order_key == $subscription_key) {
                ?>
			<div class="woocommerce">
				<ul class="order_details">
					<li class="order">
						<?php 
                esc_html_e('Subscription Number:', 'woocommerce-subscriptions');
                ?>
						<strong><?php 
                echo esc_html($subscription->get_order_number());
                ?>
</strong>
					</li>
					<li class="date">
						<?php 
                esc_html_e('Next Payment Date:', 'woocommerce-subscriptions');
                ?>
						<strong><?php 
                echo esc_html($subscription->get_date_to_display('next_payment'));
                ?>
</strong>
					</li>
					<li class="total">
						<?php 
                esc_html_e('Total:', 'woocommerce-subscriptions');
                ?>
						<strong><?php 
                echo wp_kses_post($subscription->get_formatted_order_total());
                ?>
</strong>
					</li>
					<?php 
                if ($subscription->payment_method_title) {
                    ?>
					<li class="method">
						<?php 
                    esc_html_e('Payment Method:', 'woocommerce-subscriptions');
                    ?>
						<strong><?php 
                    echo esc_html($subscription->get_payment_method_to_display());
                    ?>
</strong>
					</li>
					<?php 
                }
                ?>
				</ul>

				<?php 
                do_action('woocommerce_receipt_' . $subscription->payment_method, $subscription->id);
                ?>

				<div class="clear"></div>
				<?php 
            } else {
                wc_add_notice(__('Sorry, this subscription change payment method request is invalid and cannot be processed.', 'woocommerce-subscriptions'), 'error');
            }
            wc_print_notices();
        } elseif (!self::$is_request_to_change_payment) {
            return;
        } else {
            ob_clean();
            do_action('before_woocommerce_pay');
            echo '<div class="woocommerce">';
            if (!empty(self::$woocommerce_errors)) {
                foreach (self::$woocommerce_errors as $error) {
                    WC_Subscriptions::add_notice($error, 'error');
                }
            }
            if (!empty(self::$woocommerce_messages)) {
                foreach (self::$woocommerce_messages as $message) {
                    WC_Subscriptions::add_notice($message, 'success');
                }
            }
            $subscription = wcs_get_subscription(absint($_GET['change_payment_method']));
            if (wp_verify_nonce($_GET['_wpnonce'], __FILE__) === false) {
                WC_Subscriptions::add_notice(__('There was an error with your request. Please try again.', 'woocommerce-subscriptions'), 'error');
            } elseif (empty($subscription)) {
                WC_Subscriptions::add_notice(__('Invalid subscription.', 'woocommerce-subscriptions'), 'error');
            } elseif (!current_user_can('edit_shop_subscription_payment_method', $subscription->id)) {
                WC_Subscriptions::add_notice(__('That doesn\'t appear to be one of your subscriptions.', 'woocommerce-subscriptions'), 'error');
            } elseif (!$subscription->can_be_updated_to('new-payment-method')) {
                WC_Subscriptions::add_notice(__('The payment method can not be changed for that subscription.', 'woocommerce-subscriptions'), 'error');
            } else {
                if ($subscription->get_time('next_payment') > 0) {
                    // translators: placeholder is next payment's date
                    $next_payment_string = sprintf(__(' Next payment is due %s.', 'woocommerce-subscriptions'), $subscription->get_date_to_display('next_payment'));
                } else {
                    $next_payment_string = '';
                }
                // translators: placeholder is either empty or "Next payment is due..."
                WC_Subscriptions::add_notice(sprintf(__('Choose a new payment method.%s', 'woocommerce-subscriptions'), $next_payment_string), 'notice');
                WC_Subscriptions::print_notices();
                if ($subscription->order_key == $_GET['key']) {
                    // Set customer location to order location
                    if ($subscription->billing_country) {
                        WC()->customer->set_country($subscription->billing_country);
                    }
                    if ($subscription->billing_state) {
                        WC()->customer->set_state($subscription->billing_state);
                    }
                    if ($subscription->billing_postcode) {
                        WC()->customer->set_postcode($subscription->billing_postcode);
                    }
                    wc_get_template('checkout/form-change-payment-method.php', array('subscription' => $subscription), '', plugin_dir_path(WC_Subscriptions::$plugin_file) . 'templates/');
                    $valid_request = true;
                } else {
                    WC_Subscriptions::add_notice(__('Invalid order.', 'woocommerce-subscriptions'), 'error');
                }
            }
        }
        if (false === $valid_request) {
            WC_Subscriptions::print_notices();
        }
    }