<?php
/**
* Checkout markup.
*
* @package CartFlows
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Checkout Markup
*
* @since 1.0.0
*/
class Cartflows_Checkout_Markup {
/**
* Member Variable
*
* @var object instance
*/
private static $instance;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
/* Set is checkout flag */
add_filter( 'woocommerce_is_checkout', array( $this, 'woo_checkout_flag' ), 9999 );
add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'save_checkout_fields' ), 10, 2 );
/* Show notice if cart is empty */
add_action( 'cartflows_checkout_cart_empty', array( $this, 'display_woo_notices' ) );
/* Checkout Shortcode */
add_shortcode( 'cartflows_checkout', array( $this, 'checkout_shortcode_markup' ) );
/* Preconfigured cart data */
add_action( 'wp', array( $this, 'preconfigured_cart_data' ), 1 );
/* Embed Checkout */
add_action( 'wp', array( $this, 'shortcode_load_data' ), 999 );
/* Ajax Endpoint */
add_filter( 'woocommerce_ajax_get_endpoint', array( $this, 'get_ajax_endpoint' ), 10, 2 );
add_filter( 'cartflows_add_before_main_section', array( $this, 'enable_logo_in_header' ) );
add_filter( 'cartflows_primary_container_bottom', array( $this, 'show_cartflows_copyright_message' ) );
add_filter( 'woocommerce_login_redirect', array( $this, 'after_login_redirect' ), 9999, 2 );
add_action( 'wp_ajax_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
add_action( 'wp_ajax_nopriv_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
add_filter( 'global_cartflows_js_localize', array( $this, 'add_localize_vars' ) );
/* Global Checkout */
add_action( 'template_redirect', array( $this, 'global_checkout_template_redirect' ), 1 );
add_action( 'wp_ajax_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
add_action( 'wp_ajax_nopriv_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
add_action( 'wp_ajax_wcf_woo_remove_cart_product', array( $this, 'wcf_woo_remove_cart_product' ) );
add_action( 'wp_ajax_nopriv_wcf_woo_remove_cart_product', array( $this, 'wcf_woo_remove_cart_product' ) );
add_filter( 'woocommerce_paypal_args', array( $this, 'modify_paypal_args' ), 10, 2 );
add_filter( 'woocommerce_paypal_express_checkout_payment_button_data', array( $this, 'change_return_cancel_url' ), 10, 2 );
add_filter( 'woocommerce_cart_item_name', array( $this, 'wcf_add_remove_label' ), 10, 3 );
add_action( 'woocommerce_before_calculate_totals', array( $this, 'custom_price_to_cart_item' ), 9999 );
add_action( 'init', array( $this, 'update_woo_actions_ajax' ), 10 );
$this->gutenberg_editor_compatibility();
if ( class_exists( '\Elementor\Plugin' ) ) {
// Load the widgets.
$this->elementor_editor_compatibility();
}
if ( class_exists( 'FLBuilder' ) ) {
$this->bb_editor_compatibility();
}
}
/**
* Remove login and registration actions.
*/
public function update_woo_actions_ajax() {
add_action( 'cartflows_woo_checkout_update_order_review', array( $this, 'after_the_order_review_ajax_call' ) );
}
/**
* Call the actions after order review ajax call.
*
* @param string $post_data post data woo.
*/
public function after_the_order_review_ajax_call( $post_data ) {
if (isset($post_data['_wcf_checkout_id'])) { // phpcs:ignore
add_filter( 'woocommerce_order_button_text', array( $this, 'place_order_button_text' ), 10, 1 );
}
}
/**
* Modify WooCommerce paypal arguments.
*
* @param array $args argumenets for payment.
* @param WC_Order $order order data.
* @return array
*/
public function modify_paypal_args( $args, $order ) {
$checkout_id = wcf()->utils->get_checkout_id_from_post_data();
if ( ! $checkout_id ) {
return $args;
}
// Set cancel return URL.
$args['cancel_return'] = esc_url_raw( $order->get_cancel_order_url_raw( get_permalink( $checkout_id ) ) );
return $args;
}
/**
* Elementor editor compatibility.
*/
public function elementor_editor_compatibility() {
/* Add data */
add_action(
'cartflows_elementor_editor_compatibility',
function ( $post_id, $elementor_ajax ) {
add_action( 'cartflows_elementor_before_checkout_shortcode', array( $this, 'before_checkout_shortcode_actions' ) );
},
10,
2
);
}
/**
* Gutenburg editor compatibility.
*/
public function gutenberg_editor_compatibility() {
/* Add data */
add_action(
'cartflows_gutenberg_editor_compatibility',
function ( $post_id ) {
add_action( 'cartflows_gutenberg_before_checkout_shortcode', array( $this, 'before_checkout_shortcode_actions' ) );
},
10,
2
);
}
/**
* Function for bb editor compatibility.
*/
public function bb_editor_compatibility() {
/* Add data. */
add_action(
'cartflows_bb_editor_compatibility',
function ( $post_id ) {
add_action( 'cartflows_bb_before_checkout_shortcode', array( $this, 'before_checkout_shortcode_actions' ) );
},
10,
1
);
}
/**
* Change PayPal Express cancel URL.
*
* @param array $data button data.
* @param string $page current page.
* @return array $data modified button data with new cancel url.
*/
public function change_return_cancel_url( $data, $page ) {
global $post;
if ( _is_wcf_checkout_type() ) {
$checkout_id = $post->ID;
if ( $checkout_id ) {
// Change the default Cart URL with the CartFlows Checkout page.
$data['cancel_url'] = esc_url_raw( get_permalink( $checkout_id ) );
}
}
// Returing the modified data.
return $data;
}
/**
* Modify WooCommerce paypal arguments.
*
* @param string $product_name product name.
* @param object $cart_item cart item.
* @param string $cart_item_key cart item key.
* @return string
*/
public function wcf_add_remove_label( $product_name, $cart_item, $cart_item_key ) {
$checkout_id = get_the_ID();
if ( ! $checkout_id ) {
$checkout_id = (isset($_POST['option']['checkout_id'])) ? wp_unslash($_POST['option']['checkout_id']) : ''; //phpcs:ignore
}
if ( ! empty( $checkout_id ) ) {
$is_remove_product_option = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-remove-product-field' );
if ( 'checkout' === get_post_meta( $checkout_id, 'wcf-step-type', true ) && ( 'yes' === $is_remove_product_option ) ) {
$remove_label = apply_filters(
'woocommerce_cart_item_remove_link',
sprintf(
'<a href="#" rel="nofollow" class="remove cartflows-icon-close" data-id="%s" data-item-key="%s" ></a>',
esc_attr( $cart_item['product_id'] ),
$cart_item_key
),
$cart_item_key
);
$product_name = $remove_label . $product_name;
}
}
return $product_name;
}
/**
* Change order button text .
*
* @param string $button_text place order.
* @return string
*/
public function place_order_button_text( $button_text ) {
$checkout_id = get_the_ID();
if ( ! $checkout_id && isset( Cartflows_Woo_Hooks::$ajax_data['_wcf_checkout_id'] ) ) {
$checkout_id = intval( Cartflows_Woo_Hooks::$ajax_data['_wcf_checkout_id'] );
}
if ( $checkout_id ) {
$wcf_order_button_text = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-place-order-button-text' );
if ( ! empty( $wcf_order_button_text ) ) {
$button_text = $wcf_order_button_text;
}
}
return $button_text;
}
/**
* Display all WooCommerce notices.
*
* @since 1.1.5
*/
public function display_woo_notices() {
if ( null != WC()->session && function_exists( 'woocommerce_output_all_notices' ) ) {
woocommerce_output_all_notices();
}
}
/**
* Redirect from default to the global checkout page
*
* @since 1.0.0
*/
public function global_checkout_template_redirect() {
if ( function_exists( 'is_checkout' ) && ! is_checkout() ) {
return;
}
if ( wcf()->utils->is_step_post_type() ) {
return;
}
// Return if the key OR Order paramater is found in the URL for certain Payment gateways.
if (isset($_GET['key']) || isset($_GET['order'])) { //phpcs:ignore
return;
}
// redirect only for cartflows checkout pages.
$order_pay_endpoint = get_option( 'woocommerce_checkout_pay_endpoint', 'order-pay' );
$order_received_endpoint = get_option( 'woocommerce_checkout_order_received_endpoint', 'order-received' );
$common = Cartflows_Helper::get_common_settings();
$global_checkout = $common['global_checkout'];
if (
isset( $_SERVER['REQUEST_URI'] ) &&
// ignore on order-pay.
false === wcf_mb_strpos( esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/' . $order_pay_endpoint . '/' ) &&
// ignore on TY page.
false === wcf_mb_strpos( esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/' . $order_received_endpoint . '/' ) &&
// ignore if order-pay in query param.
false === wcf_mb_strpos( esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ), $order_pay_endpoint . '=' )
) {
if ( '' !== $global_checkout ) {
$link = apply_filters( 'cartflows_global_checkout_url', get_permalink( $global_checkout ) );
if ( ! empty( $link ) ) {
wp_safe_redirect( $link );
die();
}
}
}
}
/**
* Check for checkout flag
*
* @param bool $is_checkout is checkout.
*
* @return bool
*/
public function woo_checkout_flag( $is_checkout ) {
Loading ...