Files
medicalalert-web-reloaded/wp/wp-content/plugins/woocommerce-smart-coupons/includes/compat/class-wcopc-sc-compatibility.php
2024-06-17 16:29:48 -04:00

167 lines
4.5 KiB
PHP

<?php
/**
* Compatibility file for WooCommerce One Page Checkout
*
* @author StoreApps
* @since 3.3.0
* @version 1.1.0
* @package WooCommerce Smart Coupons
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
if ( ! class_exists( 'WCOPC_SC_Compatibility' ) ) {
/**
* Class for handling compatibility with WooCommerce One Page Checkout
*/
class WCOPC_SC_Compatibility {
/**
* Variable to hold instance of WCOPC_SC_Compatibility
*
* @var $instance
*/
private static $instance = null;
/**
* Constructor
*/
public function __construct() {
add_filter( 'woocommerce_update_order_review_fragments', array( $this, 'update_order_review_fragments' ) );
add_action( 'wcopc_before_display_checkout', array( $this, 'add_styles_and_scripts' ) );
add_filter( 'wc_sc_call_for_credit_product_id', array( $this, 'call_for_credit_product_id' ), 10, 2 );
}
/**
* Get single instance of WCOPC_SC_Compatibility
*
* @return WCOPC_SC_Compatibility Singleton object of WCOPC_SC_Compatibility
*/
public static function get_instance() {
// Check if instance is already exists.
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Handle call to functions which is not available in this class
*
* @param string $function_name Function to call.
* @param array $arguments Array of arguments passed while calling $function_name.
* @return mixed Result of function call.
*/
public function __call( $function_name, $arguments = array() ) {
global $woocommerce_smart_coupon;
if ( ! is_callable( array( $woocommerce_smart_coupon, $function_name ) ) ) {
return;
}
if ( ! empty( $arguments ) ) {
return call_user_func_array( array( $woocommerce_smart_coupon, $function_name ), $arguments );
} else {
return call_user_func( array( $woocommerce_smart_coupon, $function_name ) );
}
}
/**
* Generate & add coupon receiver details form in update order review fragments
*
* @param array $fragments Existing fragments.
* @return array $fragments
*/
public function update_order_review_fragments( $fragments = array() ) {
if ( ! class_exists( 'WC_SC_Purchase_Credit' ) ) {
include_once '../class-wc-sc-purchase-credit.php';
}
$wc_sc_purchase_credit = WC_SC_Purchase_Credit::get_instance();
ob_start();
$wc_sc_purchase_credit->gift_certificate_receiver_detail_form();
$fragments['wc_sc_receiver_detail_form'] = ob_get_clean();
return $fragments;
}
/**
* Add Styles And Scripts
*/
public function add_styles_and_scripts() {
if ( ! class_exists( 'WC_SC_Purchase_Credit' ) ) {
include_once '../class-wc-sc-purchase-credit.php';
}
$wc_sc_purchase_credit = WC_SC_Purchase_Credit::get_instance();
$wc_sc_purchase_credit->enqueue_timepicker();
add_action( 'wp_footer', array( $this, 'styles_and_scripts' ) );
}
/**
* Styles And Scripts
*/
public function styles_and_scripts() {
if ( ! wp_script_is( 'jquery' ) ) {
wp_enqueue_script( 'jquery' );
}
?>
<script type="text/javascript">
jQuery(function(){
jQuery(document.body).on('updated_checkout', function( e, data ){
if ( typeof data === 'undefined' ) {
return;
}
if ( data.fragments.wc_sc_receiver_detail_form ) {
if ( jQuery('div.gift-certificate.sc_info_box').length > 0 ) {
jQuery('div.gift-certificate.sc_info_box').replaceWith( data.fragments.wc_sc_receiver_detail_form );
} else {
jQuery('div#customer_details').after( data.fragments.wc_sc_receiver_detail_form );
}
} else {
jQuery('div.gift-certificate.sc_info_box').remove();
}
});
});
</script>
<?php
}
/**
* Call For Credit Product Id
*
* @param integer $product_id The product id.
* @param array $args Additional arguments.
* @return integer
*/
public function call_for_credit_product_id( $product_id = 0, $args = array() ) {
$action = ( ! empty( $_REQUEST['action'] ) ) ? wc_clean( wp_unslash( $_REQUEST['action'] ) ) : ''; // phpcs:ignore
if ( 'pp_add_to_cart' === $action && empty( $product_id ) ) {
$product_id = ( ! empty( $_REQUEST['add_to_cart'] ) ) ? absint( $_REQUEST['add_to_cart'] ) : 0; // phpcs:ignore
}
return $product_id;
}
}
}
/**
* Initialize the Compatibility
*/
function initialize_wcopc_sc_compatibility() {
WCOPC_SC_Compatibility::get_instance();
}
add_action( 'wcopc_loaded', 'initialize_wcopc_sc_compatibility' );