/** * Disables the gateway under any of these conditions: * 1) If the cart does not contain a pre-order * 2) If the pre-order amount is charged upfront * 3) On the pay page * * @since 1.0 * @return bool */ public function is_available() { $is_available = true; // Backwards compatibility checking for payment page if (function_exists('is_checkout_pay_page')) { $pay_page = is_checkout_pay_page(); } else { $pay_page = is_page(woocommerce_get_page_id('pay')); } // on checkout page if (!$pay_page || defined('WOOCOMMERCE_CHECKOUT') && WOOCOMMERCE_CHECKOUT) { // not available if the cart does not contain a pre-order if (WC_Pre_Orders_Cart::cart_contains_pre_order()) { // not available when the pre-order amount is charged upfront if (WC_Pre_Orders_Product::product_is_charged_upfront(WC_Pre_Orders_Cart::get_pre_order_product())) { $is_available = false; } } else { $is_available = false; } } else { // not available on the pay page (for now) $is_available = false; } return $is_available; }
/** * Force tokenization for pre-orders * * @since 4.1.0 * @see SV_WC_Payment_Gateway::tokenization_forced() * @param boolean $force_tokenization whether tokenization should be forced * @return boolean true if tokenization should be forced, false otherwise */ public function maybe_force_tokenization($force_tokenization) { // pay page with pre-order? $pay_page_pre_order = false; if ($this->get_gateway()->is_pay_page_gateway()) { $order_id = $this->get_gateway()->get_checkout_pay_page_order_id(); if ($order_id) { $pay_page_pre_order = WC_Pre_Orders_Order::order_contains_pre_order($order_id) && WC_Pre_Orders_Product::product_is_charged_upon_release(WC_Pre_Orders_Order::get_pre_order_product($order_id)); } } if (WC_Pre_Orders_Cart::cart_contains_pre_order() && WC_Pre_Orders_Product::product_is_charged_upon_release(WC_Pre_Orders_Cart::get_pre_order_product()) || $pay_page_pre_order) { // always tokenize the card for pre-orders that are charged upon release $force_tokenization = true; } return $force_tokenization; }
/** * Disables the gateway under any of these conditions: * 1) If the cart does not contain a pre-order * 2) If the pre-order amount is charged upfront * 3) On the pay page * * @since 1.0 * @return bool */ public function is_available() { $is_available = parent::is_available(); // on checkout page if (!is_page(woocommerce_get_page_id('pay')) || defined('WOOCOMMERCE_CHECKOUT') && WOOCOMMERCE_CHECKOUT) { // not available if the cart does not contain a pre-order if (WC_Pre_Orders_Cart::cart_contains_pre_order()) { // not available when the pre-order amount is charged upfront if (WC_Pre_Orders_Product::product_is_charged_upfront(WC_Pre_Orders_Cart::get_pre_order_product())) { $is_available = false; } } else { $is_available = false; } } else { // not available on the pay page (for now) $is_available = false; } return $is_available; }
/** * Add order meta needed for pre-order functionality * * @since 1.0 * @param int $order_id */ public function add_order_meta($order_id) { // don't add meta to orders that don't contain a pre-order // note the cart is checked here instead of the order since WC_Pre_Orders_Order::order_contains_pre_order() checks the meta that is about to be set here :) if (!WC_Pre_Orders_Cart::cart_contains_pre_order()) { return; } // get pre-ordered product $product = WC_Pre_Orders_Cart::get_pre_order_product($order_id); // indicate the order contains a pre-order update_post_meta($order_id, '_wc_pre_orders_is_pre_order', 1); // save when the pre-order amount was charged (either upfront or upon release) update_post_meta($order_id, '_wc_pre_orders_when_charged', $product->wc_pre_orders_when_to_charge); }