Current Path : /storage/v11800/lifespanstoresnew/public_html/wp-content/plugins/ti-woocommerce-wishlist/integrations/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/lifespanstoresnew/public_html/wp-content/plugins/ti-woocommerce-wishlist/integrations/woocommerce-tm-extra-product-options.php |
<?php
/**
* TI WooCommerce Wishlist integration with:
*
* @name WooCommerce TM Extra Product Options
*
* @version 6.3.1
*
* @slug woocommerce-tm-extra-product-options
*
* @url https://codecanyon.net/item/woocommerce-extra-product-options/7908619
*
*/
// If this file is called directly, abort.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// Load integration depends on current settings.
global $tinvwl_integrations;
$slug = "woocommerce-tm-extra-product-options";
$name = "WooCommerce TM Extra Product Options";
$available = ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) );
$tinvwl_integrations = is_array( $tinvwl_integrations ) ? $tinvwl_integrations : [];
$tinvwl_integrations[ $slug ] = array(
'name' => $name,
'available' => $available,
);
if ( ! tinv_get_option( 'integrations', $slug ) ) {
return;
}
if ( ! $available ) {
return;
}
if ( ! function_exists( 'tinv_wishlist_metasupport_woocommerce_tm_extra_product_options' ) ) {
/**
* Set description for meta WooCommerce TM Extra Product Options
*
* @param array $meta Meta array.
* @param integer $product_id Product ID.
* @param integer $variation_id Product variation ID.
*
* @return array
*/
function tinv_wishlist_metasupport_woocommerce_tm_extra_product_options( $meta, $product_id, $variation_id ) {
if ( array_key_exists( 'tcaddtocart', $meta ) && ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) ) ) {
$api = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO_API() : TM_EPO_API();
$core = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO() : TM_EPO();
$version = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO_VERSION : TM_EPO_VERSION;
$cart = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? new THEMECOMPLETE_EPO_Cart() : TM_EPO();
$has_epo = $api->has_options( $product_id );
if ( $api->is_valid_options( $has_epo ) ) {
$post_data = array();
foreach ( $meta as $key => $value ) {
// $value['display'] = ( is_object( json_decode( $value['display'] ) ) ) ? json_decode( $value['display'], true ) : $value['display'];
$post_data[ $key ] = $value['display'];
}
$post_data['add-to-cart'] = $meta['tcaddtocart']['display'];
$post_data['product_id'] = $product_id;
if ( $variation_id ) {
$post_data['variation_id'] = $variation_id;
}
$post_data['quantity'] = 1;
$cart_class = version_compare( $version, '4.8.0', '<' ) ? $core : $cart;
$cart_item = $cart_class->add_cart_item_data_helper( array(), $product_id, $post_data );
if ( 'no' == $core->tm_epo_hide_options_in_cart && 'advanced' != $core->tm_epo_cart_field_display && ! empty( $cart_item['tmcartepo'] ) ) {
$cart_item['quantity'] = 1;
$cart_item['data'] = wc_get_product( $variation_id ? $variation_id : $product_id );
$cart_item['tm_cart_item_key'] = '';
$cart_item['product_id'] = $product_id;
$item_data = $cart_class->get_item_data_array( array(), $cart_item );
foreach ( $item_data as $key => $data ) {
// Set hidden to true to not display meta on cart.
if ( ! empty( $data['hidden'] ) ) {
unset( $item_data[ $key ] );
continue;
}
$item_data[ $key ]['key'] = ! empty( $data['key'] ) ? $data['key'] : $data['name'];
$item_data[ $key ]['display'] = ! empty( $data['display'] ) ? $data['display'] : $data['value'];
}
return $item_data;
}
}
return array();
}
return $meta;
}
add_filter( 'tinvwl_wishlist_item_meta_post', 'tinv_wishlist_metasupport_woocommerce_tm_extra_product_options', 10, 3 );
} // End if().
if ( ! function_exists( 'tinvwl_row_woocommerce_tm_extra_product_options' ) ) {
/**
* Add rows for sub product for WooCommerce TM Extra Product Options
*
* @param array $wl_product Wishlist Product.
* @param \WC_Product $product Woocommerce Product.
*/
function tinvwl_row_woocommerce_tm_extra_product_options( $wl_product, $product ) {
if ( isset( $wl_product['meta'] ) && is_array( $wl_product['meta'] ) && array_key_exists( 'tcaddtocart', $wl_product['meta'] ) && ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) ) ) {
$api = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO_API() : TM_EPO_API();
$core = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO() : TM_EPO();
$has_epo = $api->has_options( $product->get_id() );
if ( $api->is_valid_options( $has_epo ) ) {
$cpf_price_array = $core->get_product_tm_epos( $product->get_id(), true, true, true );
if ( empty( $cpf_price_array ) ) {
return false;
}
$global_price_array = $cpf_price_array['global'];
foreach ( $global_price_array as $priorities ) {
foreach ( $priorities as $field ) {
foreach ( $field['sections'] as $section_id => $section ) {
if ( isset( $section['elements'] ) ) {
foreach ( $section['elements'] as $element ) {
if ( 'product' === $element['type'] ) {
$current_tmcp_post_fields = array_intersect_key( $wl_product['meta'], array_flip( array( substr( $element['name_inc'], 0, - 2 ) ) ) );
foreach ( $current_tmcp_post_fields as $attribute => $key ) {
if ( isset( $wl_product['meta'][ $attribute . '_quantity' ] ) ) {
if ( empty( $wl_product['meta'][ $attribute . '_quantity' ] ) ) {
continue;
}
}
$_product = wc_get_product( $key );
$product_url = $_product->get_permalink();
$product_image = $_product->get_image();
$product_title = is_callable( array(
$_product,
'get_name'
) ) ? $_product->get_name() : $_product->get_title();
$product_price = '';
if ( $element['priced_individually'] ) {
$product_price = $_product->get_price();
}
if ( $element['discount'] ) {
$discount = wc_format_decimal( (double) $element['discount'], wc_get_price_decimals() );
if ( $product_price && $element['discount'] ) {
$price = wc_format_decimal( (double) $product_price, wc_get_price_decimals() );
if ( $element['discount_type'] == 'fixed' ) {
$product_price = max( $price - $discount, 0 );
} else {
$product_price = max( $price * ( ( 100 - $discount ) / 100 ), 0 );
}
}
}
$product_price = wc_price( $product_price );
if ( $_product->is_visible() ) {
$product_image = sprintf( '<a href="%s">%s</a>', esc_url( $product_url ), $product_image );
$product_title = sprintf( '<a href="%s">%s</a>', esc_url( $product_url ), $product_title );
}
$product_title .= tinv_wishlist_get_item_data( $_product, $wl_product );
$row_string = '<tr>';
$row_string .= ( ( ! is_user_logged_in() || get_current_user_id() !== $wl_product['author'] ) ? ( ( ! tinv_get_option( 'table', 'colm_checkbox' ) ) ? '' : '<td colspan="1"></td>' ) : '<td colspan="' . ( ( ! tinv_get_option( 'table', 'colm_checkbox' ) ) ? '1' : '2' ) . '"></td>' ) . ' ';
$row_string .= ( $element['show_image'] ) ? '<td class="product-thumbnail">%2$s</td>' : '<td class="product-thumbnail"> </td>';
$row_string .= ( $element['show_title'] ) ? '<td class="product-name">%1$s</td>' : '<td class="product-name"> </td>';
if ( tinv_get_option( 'product_table', 'colm_price' ) ) {
$row_string .= ( $product_price && $element['show_price'] && $element['priced_individually'] ) ? '<td class="product-price">%4$s × %6$s</td>' : '<td class="product-price">× %6$s</td>';
}
if ( tinv_get_option( 'product_table', 'colm_date' ) ) {
$row_string .= '<td class="product-date"> </td>';
}
if ( tinv_get_option( 'product_table', 'colm_stock' ) ) {
$row_string .= '<td class="product-stock">%5$s</td>';
}
if ( tinv_get_option( 'product_table', 'colm_quantity' ) ) {
$row_string .= '<td class="product-quantity"> </td>';
}
if ( tinv_get_option( 'product_table', 'add_to_cart' ) ) {
$row_string .= '<td class="product-action"> </td>';
}
$row_string .= '</tr>';
echo sprintf( $row_string, is_callable( array(
$_product,
'get_name'
) ) ? $_product->get_name() : $_product->get_title(), $product_image, $product_title, $product_price, '', isset( $wl_product['meta'][ $attribute . '_quantity' ] ) ? $wl_product['meta'][ $attribute . '_quantity' ] : 1 ); // WPCS: xss ok.
}
}
}
}
}
}
} // End if().
}
}
}
add_action( 'tinvwl_wishlist_row_after', 'tinvwl_row_woocommerce_tm_extra_product_options', 10, 2 );
} // End if().
if ( ! function_exists( 'tinvwl_item_price_woocommerce_tm_extra_product_options' ) ) {
/**
* Modify price for WooCommerce TM Extra Product Options
*
* @param string $price Returned price.
* @param array $wl_product Wishlist Product.
* @param \WC_Product $product Woocommerce Product.
*
* @return string
*/
function tinvwl_item_price_woocommerce_tm_extra_product_options( $price, $wl_product, $product ) {
if ( array_key_exists( 'tcaddtocart', (array) @$wl_product['meta'] ) && ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) ) ) {
$api = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO_API() : TM_EPO_API();
$core = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO() : TM_EPO();
$version = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? THEMECOMPLETE_EPO_VERSION : TM_EPO_VERSION;
$cart = defined( 'THEMECOMPLETE_EPO_VERSION' ) ? new THEMECOMPLETE_EPO_Cart() : TM_EPO();
// foreach ( $wl_product['meta'] as $key => $data ) {
// $data = ( is_object( json_decode( $data ) ) ) ? json_decode( $data, true ) : $data;
// $wl_product['meta'][ $key ] = is_array( $data ) ? array_shift( $data ) : $data;
// }
if ( $core->tm_epo_hide_options_in_cart == 'no' ) {
$product_id = $wl_product['product_id'];
$has_epo = $api->has_options( $product_id );
if ( $api->is_valid_options( $has_epo ) ) {
$cart_class = version_compare( $version, '4.8.0', '<' ) ? $core : $cart;
$cart_item = $cart_class->add_cart_item_data_helper( array(), $product_id, $wl_product['meta'] );
$cart_item['quantity'] = 1;
$cart_item['data'] = $product;
$product_price = apply_filters( 'wc_epo_add_cart_item_original_price', $cart_item['data']->get_price(), $cart_item );
if ( ! empty( $cart_item['tmcartepo'] ) ) {
$to_currency = version_compare( $version, '4.9.0', '<' ) ? tc_get_woocommerce_currency() : themecomplete_get_woocommerce_currency();
foreach ( $cart_item['tmcartepo'] as $value ) {
if ( isset( $value['price_per_currency'] ) && array_key_exists( $to_currency, $value['price_per_currency'] ) ) {
$value = floatval( $value['price_per_currency'][ $to_currency ] );
$product_price += $value;
} else {
$product_price += floatval( $value['price'] );
}
}
}
$price = apply_filters( 'wc_tm_epo_ac_product_price', apply_filters( 'woocommerce_cart_item_price', $cart_class->get_price_for_cart( $product_price, $cart_item, '' ), $cart_item, '' ), '', $cart_item, $product, $product_id );
}
}
}
return $price;
}
add_filter( 'tinvwl_wishlist_item_price', 'tinvwl_item_price_woocommerce_tm_extra_product_options', 10, 3 );
} // End if().
add_filter( 'tinvwl_addtowishlist_prepare_form', 'tinvwl_meta_woocommerce_tm_extra_product_options', 10, 3 );
function tinvwl_meta_woocommerce_tm_extra_product_options( $meta, $post, $files ) {
if ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) ) {
foreach ( $files as $name => $file ) {
if ( array_key_exists( $name, $meta ) ) {
$upload = THEMECOMPLETE_EPO()->upload_file( $file );
if ( empty( $upload['error'] ) && ! empty( $upload['file'] ) ) {
$meta[ $name ] = wc_clean( $upload['url'] );
}
}
}
}
foreach ( $meta as $key => $data ) {
$data = ( ! is_array( $data ) && is_object( json_decode( $data ) ) ) ? json_decode( $data, true ) : $data;
$meta[ $key ] = is_array( $data ) ? array_shift( $data ) : $data;
}
return $meta;
}
add_filter( 'tinvwl_product_prepare_meta', 'tinvwl_cart_meta_woocommerce_tm_extra_product_options' );
function tinvwl_cart_meta_woocommerce_tm_extra_product_options( $meta ) {
if ( defined( 'THEMECOMPLETE_EPO_VERSION' ) || defined( 'TM_EPO_VERSION' ) ) {
$files = $_FILES;
foreach ( $files as $name => $file ) {
if ( ! array_key_exists( $name, $meta ) ) {
$upload = THEMECOMPLETE_EPO()->upload_file( $file );
if ( empty( $upload['error'] ) && ! empty( $upload['file'] ) ) {
$meta[ $name ] = wc_clean( $upload['url'] );
}
}
}
}
foreach ( $meta as $key => $data ) {
$data = ( ! is_array( $data ) && is_object( json_decode( $data ) ) ) ? json_decode( $data, true ) : $data;
$meta[ $key ] = is_array( $data ) ? array_shift( $data ) : $data;
}
return $meta;
}
function tinvwl_add_to_wishlist_tm_extra_product_options() {
wp_add_inline_script( 'tinvwl', "
jQuery('body').on('tinvwl_add_to_wishlist_button_click', function(e, el){
jQuery(el).closest('form.cart').each(function(){
if (jQuery(this).find('#tm-extra-product-options').length) {
jQuery(this).find('.tc-hidden[required], input.use_images[required]').attr('disabled', true);
if (!jQuery(this)[0].checkValidity()){
jQuery(el).addClass('disabled-add-wishlist');
jQuery(this)[0].reportValidity();
} else {
jQuery(el).removeClass('disabled-add-wishlist');
}
jQuery(this).find('.tc-hidden[required], input.use_images[required]').attr('disabled', false);
}
});
});
" );
}
add_action( 'wp_enqueue_scripts', 'tinvwl_add_to_wishlist_tm_extra_product_options', 100, 1 );