<?php
/**
* Checkout markup.
*
* @package cartflows
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Checkout Markup
*
* @since 1.0.0
*/
class Cartflows_Pro_Checkout_Markup {
/**
* Member Variable
*
* @var object instance
*/
private static $instance;
/**
* Member Variable
*
* @var is_divi_enabled
*/
public $divi_status = false;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
$this->include_required_class();
add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'save_checkout_fields' ), 10, 2 );
/* Scripts */
add_action( 'cartflows_checkout_scripts', array( $this, 'checkout_order_scripts' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'load_compatibility_scripts_for_pro' ), 102 );
/** Filter
add_filter( 'cartflows_checkout_layout_template', array( $this, 'include_checkout_template' ), 10, 1 ); */
add_action( 'cartflows_checkout_form_before', array( $this, 'two_step_actions' ), 10, 1 );
add_filter( 'woocommerce_checkout_fields', array( $this, 'cartflows_one_column_checkout_fields' ) );
add_filter( 'woocommerce_billing_fields', array( $this, 'billing_fields_customization' ), 1000, 2 );
add_filter( 'woocommerce_shipping_fields', array( $this, 'shipping_fields_customization' ), 1000, 2 );
add_filter( 'woocommerce_default_address_fields', array( $this, 'woo_default_address_fields' ), 1000 );
add_filter( 'woocommerce_get_country_locale_default', array( $this, 'prepare_country_locale' ) );
add_filter( 'woocommerce_get_country_locale', array( $this, 'woo_get_country_locale' ) );
/* Hide/Show Order notes */
add_filter( 'woocommerce_checkout_fields', array( $this, 'additional_fields_customization' ), 1000 );
add_action( 'cartflows_checkout_after_configure_cart', array( $this, 'after_configure_cart' ), 10, 1 );
add_action( 'woocommerce_admin_order_data_after_billing_address', array( $this, 'display_billing_custom_order_meta' ), 10, 1 );
add_action( 'woocommerce_admin_order_data_after_shipping_address', array( $this, 'display_shipping_custom_order_meta' ), 10, 1 );
add_filter( 'woocommerce_email_order_meta_fields', array( $this, 'custom_woo_email_order_meta_fields' ), 10, 3 );
add_filter( 'cartflows_show_coupon_field', array( $this, 'show_hide_coupon_field_on_checkout' ), 10, 2 );
add_filter( 'global_cartflows_js_localize', array( $this, 'add_frontend_localize_scripts' ) );
add_filter( 'woocommerce_form_field_hidden', array( $this, 'wcf_form_field_hidden' ), 10, 4 );
add_action( 'cartflows_checkout_before_shortcode', array( $this, 'apply_url_coupon' ), 10 );
add_filter( 'cartflows_selected_checkout_products', array( $this, 'update_the_checkout_products_data' ), 10, 2 );
}
/**
* Merge product options array with checkout products.
*
* @param array $products products.
* @param int $checkout_id checkout id.
*/
public function update_the_checkout_products_data( $products, $checkout_id ) {
if ( $products ) {
$products_data = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-product-options-data' );
$products_option_condition = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-product-options' );
foreach ( $products as $key => $data ) {
$unique_key = $data['unique_id'];
if ( $unique_key && isset( $products_data[ $unique_key ] ) ) {
$products[ $key ] = wp_parse_args( $products_data[ $unique_key ], $data );
}
if ( ! isset( $products_data[ $unique_key ]['add_to_cart'] ) && 'single-selection' === $products_option_condition ) {
$products[ $key ]['add_to_cart'] = 'no';
}
}
$cart_value = array_column( $products, 'add_to_cart' );
if ( ! in_array( 'yes', $cart_value, true ) ) {
$products[0]['add_to_cart'] = 'yes';
}
}
return $products;
}
/**
* Apply the coupon if available in url.
*/
public function apply_url_coupon() {
$url_coupon = apply_filters( 'cartflows_apply_coupon_from_url', true );
if ( $url_coupon ) {
$coupon = isset( $_GET['coupon'] ) ? sanitize_text_field( wp_unslash( $_GET['coupon'] ) ) : false; //phpcs:ignore
if ( $coupon ) {
if ( WC()->cart->has_discount( $coupon ) ) {
return;
}
WC()->cart->apply_coupon( $coupon );
}
}
}
/**
* Two Step Layout Actions.
*
* @param int $checkout_id checkout id.
* @since 1.1.9
*/
public function two_step_actions( $checkout_id ) {
$checkout_layout = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-layout' );
if ( 'two-step' == $checkout_layout ) {
add_action( 'cartflows_add_before_main_section', array( $this, 'get_checkout_form_note' ), 10, 1 );
add_action( 'woocommerce_checkout_before_customer_details', array( $this, 'add_two_step_first_step_wrapper' ), 13 );
add_action( 'cartflows_add_before_main_section', array( $this, 'add_two_step_second_step_wrapper' ), 11 );
add_action( 'cartflows_add_before_main_section', array( $this, 'add_two_step_nav_menu' ), 12, 1 );
add_action( 'woocommerce_checkout_after_customer_details', array( $this, 'add_two_step_next_btn' ), 12 );
add_action( 'woocommerce_checkout_after_customer_details', array( $this, 'add_two_step_closing_div' ), 13 );
add_action( 'cartflows_add_after_main_section', array( $this, 'add_two_step_closing_div' ), 14 );
}
}
/**
* Hidden Field Actions.
*
* @param string $field field.
* @param string $key key.
* @param array $args args.
* @param string $value value.
*
* @since 1.1.9
*/
public function wcf_form_field_hidden( $field = '', $key, $args, $value ) {
$field = '<input type="hidden" id="' . esc_attr( $key ) . '" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" class="input-hidden" /> ';
return $field;
}
/**
* Send custom fields in the order email.
*
* @param array $fields of fields.
* @param string $sent_to_admin domain name to send.
* @param array $order of order details.
*/
public function custom_woo_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
// Return if order not found.
if ( ! $order ) {
return $fields;
}
$order_id = $order->get_id();
$checkout_id = get_post_meta( $order_id, '_wcf_checkout_id', true );
if ( ! $checkout_id ) {
return $fields;
}
// Get custom fields.
$custom_fields = get_post_meta( $checkout_id, 'wcf-custom-checkout-fields', true );
if ( 'yes' === $custom_fields ) {
// Billing Fields & Values.
$billing_fields = get_post_meta( $checkout_id, 'wcf_fields_billing', true );
foreach ( $billing_fields as $field => $data ) {
if ( isset( $data['custom'] ) && $data['custom'] ) {
$fields[ $field ] = array(
'label' => $data['label'],
'value' => get_post_meta( $order_id, '_' . $field, true ),
);
}
}
// Shipping Fields & Values.
$shipping_fields = get_post_meta( $checkout_id, 'wcf_fields_shipping', true );
foreach ( $shipping_fields as $field => $data ) {
if ( isset( $data['custom'] ) && $data['custom'] ) {
$fields[ $field ] = array(
'label' => $data['label'],
'value' => get_post_meta( $order_id, '_' . $field, true ),
);
}
}
}
return $fields;
}
/**
* After configure cart.
*
* @param int $checkout_id checkout id.
*/
public function after_configure_cart( $checkout_id ) {
$discount_coupon = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-discount-coupon' );
if ( is_array( $discount_coupon ) && ! empty( $discount_coupon ) ) {
$discount_coupon = reset( $discount_coupon );
}
if ( ! empty( $discount_coupon ) ) {
$show_coupon_msg = apply_filters( 'cartflows_show_applied_coupon_message', true );
if ( ! $show_coupon_msg ) {
add_filter( 'woocommerce_coupon_message', '__return_empty_string' );
}
WC()->cart->add_discount( $discount_coupon );
if ( ! $show_coupon_msg ) {
remove_filter( 'woocommerce_coupon_message', '__return_empty_string' );
}
}
}
/**
* Add markup classes
*
* @return void
*/
public function include_required_class() {
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-order-bump-product.php';
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pre-checkout-offer-product.php';
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-variation-product.php';
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-checkout-field-optimization.php';
}
/**
* Load shortcode scripts.
*
* @return void
*/
public function checkout_order_scripts() {
global $post;
if ( Cartflows_Compatibility::get_instance()->is_divi_enabled() ||
Cartflows_Compatibility::get_instance()->is_divi_builder_enabled( $post->ID )
) {
$this->divi_status = true;
}
wp_enqueue_style( 'wcf-pro-checkout', wcf_pro()->utils->get_css_url( 'checkout-styles' ), '', CARTFLOWS_PRO_VER );
wp_enqueue_script(
'wcf-pro-checkout',
wcf_pro()->utils->get_js_url( 'checkout' ),
array( 'jquery' ),
CARTFLOWS_PRO_VER,
true
);
$pre_checkout_offer = get_post_meta( $post->ID, 'wcf-pre-checkout-offer', true );
if ( 'yes' === $pre_checkout_offer ) {
wp_enqueue_script(
'wcf-pro-pre-checkout',
wcf_pro()->utils->get_js_url( 'pre-checkout' ),
array( 'jquery', 'jquery-ui-dialog' ),
CARTFLOWS_PRO_VER,
true
);
}
wp_enqueue_style( 'dashicons' );
$style = $this->generate_style();
wp_add_inline_style( 'wcf-pro-checkout', $style );
}
/**
* Load compatibility scripts.
*
* @return void
*/
public function load_compatibility_scripts_for_pro() {
if ( ! _is_wcf_checkout_type() ) {
return;
}
// Add DIVI Compatibility css if DIVI theme is enabled.
if ( $this->divi_status ) {
Loading ...