Created
June 5, 2018 08:13
-
-
Save 79mplus-admin/fb13a2e38271ac4c79d9ee896ce90b1f to your computer and use it in GitHub Desktop.
Custom Hooks Added.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Direct access security | |
if ( !defined( 'TM_EPO_PLUGIN_SECURITY' ) ) { | |
die(); | |
} | |
/** | |
* Main plugin class responsible for displaying the Extra Product Options on the frontend | |
*/ | |
final class TM_Extra_Product_Options { | |
public $version = TM_EPO_VERSION; | |
private $_namespace = 'tm-extra-product-options/'; | |
/** Holds the current post id **/ | |
private $postid_pre = FALSE; | |
/** Helper for determining various conditionals **/ | |
private $wc_vars = array( | |
"is_product" => FALSE, | |
"is_shop" => FALSE, | |
"is_product_category" => FALSE, | |
"is_product_tag" => FALSE, | |
"is_cart" => FALSE, | |
"is_checkout" => FALSE, | |
"is_account_page" => FALSE, | |
"is_ajax" => FALSE, | |
"is_page" => FALSE, | |
); | |
/** Product custom settings **/ | |
public $tm_meta_cpf = array(); | |
/** Product custom settings options **/ | |
public $meta_fields = array( | |
'exclude' => '', | |
'price_override' => '', | |
'override_display' => '', | |
'override_final_total_box' => '', | |
'override_enabled_roles' => '', | |
'override_disabled_roles' => '', | |
); | |
/** Cache for all the extra options **/ | |
private $cpf = array(); | |
/** Holds the upload directory for the upload element **/ | |
public $upload_dir = "/extra_product_options/"; | |
/** Holds the upload files objects **/ | |
private $upload_object = array(); | |
/** Replacement name for Subscription sign up fee fields **/ | |
public $fee_name = "tmfee_"; | |
public $fee_name_class = "tmcp-sub-fee-field"; | |
/** Holds the total fee added by Subscription sign up fee fields **/ | |
public $tmfee = 0; | |
/** Replacement name for cart fee fields **/ | |
public $cart_fee_name = "tmcartfee_"; | |
public $cart_fee_class = "tmcp-fee-field"; | |
/** Array of element types that get posted **/ | |
private $element_post_types = array(); | |
/** Holds builder element attributes **/ | |
private $tm_original_builder_elements = array(); | |
/** Holds modified builder element attributes **/ | |
public $tm_builder_elements = array(); | |
/** Inline styles **/ | |
public $inline_styles; | |
public $inline_styles_head; | |
/** Edit option in cart helper **/ | |
private $new_add_to_cart_key = FALSE; | |
/** Holds the cart key when editing a product in the cart **/ | |
public $cart_edit_key = NULL; | |
/* Containes current option features */ | |
public $current_option_features = array(); | |
/* Contains file to be defered */ | |
public $defered_files = array(); | |
/** Holds all of the plugin settings **/ | |
private $tm_plugin_settings = array(); | |
/** Prevent option duplication for bad coded themes **/ | |
private $tm_options_have_been_displayed = FALSE; | |
private $tm_options_single_have_been_displayed = FALSE; | |
private $tm_options_totals_have_been_displayed = FALSE; | |
/** Enable/disable flag for outputing plugin specific classes to the post_class filter **/ | |
private $tm_related_products_output = TRUE; | |
/** Enable/disable flag for outputing plugin specific classes to the post_class filter **/ | |
private $in_related_upsells = FALSE; | |
/** Set of variables to ensure that the correct options are displayed on complex layouts **/ | |
private $epo_id = 0; | |
private $epo_internal_counter = 0; | |
private $epo_internal_counter_check = array(); | |
private $current_product_id_to_be_displayed = 0; | |
private $current_product_id_to_be_displayed_check = array(); | |
/** Float direction for radio and checkboxes image replacements **/ | |
public $float_direction = "left"; | |
public $float_direction_opposite = "right"; | |
private $is_get_from_session = FALSE; | |
/** Cart edit key**/ | |
public $cart_edit_key_var = 'tm_cart_item_key'; | |
public $cart_edit_key_var_alt = 'tc_cart_edit_key'; | |
/** Contains min/man product infomation **/ | |
public $product_minmax = array(); | |
/** Current free text replacement **/ | |
public $current_free_text = ''; | |
private $is_in_woocommerce_admin_order_page = FALSE; | |
/** TM_Extra_Product_Options single instance **/ | |
protected static $_instance = NULL; | |
/** | |
* Returns the instance of the plugin. | |
* | |
* @return TM_Extra_Product_Options. | |
*/ | |
public static function instance() { | |
if ( is_null( self::$_instance ) ) { | |
self::$_instance = new self(); | |
} | |
return self::$_instance; | |
} | |
/** Dummy function **/ | |
public function init() { | |
return; | |
} | |
public function get_namespace(){ | |
return $this->_namespace; | |
} | |
/** Initializes the plugin **/ | |
public function __construct() { | |
$this->inline_styles = ''; | |
$this->inline_styles_head = ''; | |
$this->is_bto = FALSE; | |
$this->noactiondisplay = FALSE; | |
$this->cart_edit_key_var = apply_filters( 'wc_epo_cart_edit_key_var', 'tm_cart_item_key' ); | |
$this->cart_edit_key_var_alt = apply_filters( 'wc_epo_cart_edit_key_var_alt', 'tc_cart_edit_key' ); | |
$this->cart_edit_key = isset( $_REQUEST[ $this->cart_edit_key_var ] ) | |
? | |
$_REQUEST[ $this->cart_edit_key_var ] | |
: | |
( | |
(isset( $_REQUEST[ $this->cart_edit_key_var_alt ] )) | |
? | |
$_REQUEST[ $this->cart_edit_key_var_alt ] | |
: | |
NULL | |
); | |
/** Add compatibility actions and filters with other plugins and themes **/ | |
TM_EPO_COMPATIBILITY()->init(); | |
add_action( 'plugins_loaded', array( $this, 'plugin_loaded' ), 3 ); | |
add_action( 'plugins_loaded', array( $this, 'tm_epo_add_elements' ), 12 ); | |
} | |
public function plugin_loaded() { | |
$this->tm_plugin_settings = TM_EPO_SETTINGS()->plugin_settings(); | |
$this->get_plugin_settings(); | |
$this->get_override_settings(); | |
$this->add_plugin_actions(); | |
} | |
/** Gets all of the plugin settings **/ | |
public function get_plugin_settings() { | |
foreach ( apply_filters( 'wc_epo_get_settings', $this->tm_plugin_settings ) as $key => $value ) { | |
if ( is_array( $value ) ) { | |
$method = $value[2]; | |
$classname = $value[1]; | |
if ( call_user_func( array( $classname, $method ) ) ) { | |
$this->$key = get_option( $key ); | |
if ($this->$key===false){ | |
$this->$key = $value[0]; | |
} | |
} else { | |
$this->$key = $value[0]; | |
} | |
} else { | |
$this->$key = get_option( $key ); | |
if ( $this->$key === FALSE ) { | |
$this->$key = $value; | |
} | |
} | |
} | |
if ( $this->tm_epo_options_placement == "custom" ) { | |
$this->tm_epo_options_placement = $this->tm_epo_options_placement_custom_hook; | |
} | |
if ( $this->tm_epo_totals_box_placement == "custom" ) { | |
$this->tm_epo_totals_box_placement = $this->tm_epo_totals_box_placement_custom_hook; | |
} | |
$this->upload_dir = $this->tm_epo_upload_folder; | |
$this->upload_dir = str_replace( "/", "", $this->upload_dir ); | |
$this->upload_dir = sanitize_file_name( $this->upload_dir ); | |
$this->upload_dir = "/" . $this->upload_dir . "/"; | |
} | |
/** Gets custom settings for the current product **/ | |
public function get_override_settings() { | |
foreach ( $this->meta_fields as $key => $value ) { | |
$this->tm_meta_cpf[ $key ] = $value; | |
} | |
} | |
/** Add required actions and filters **/ | |
public function add_plugin_actions() { | |
/** Initialize custom product settings **/ | |
if ( $this->is_enabled_shortcodes() && !$this->is_quick_view() ) { | |
add_action( 'init', array( $this, 'init_settings_pre' ) ); | |
} else { | |
if ( $this->is_quick_view() ) { | |
add_action( 'init', array( $this, 'init_settings' ) ); | |
} else { | |
add_action( 'template_redirect', array( $this, 'init_settings' ) ); | |
} | |
} | |
add_action( 'template_redirect', array( $this, 'init_vars' ), 1 ); | |
/** Add custom inline css **/ | |
add_action( 'template_redirect', array( $this, 'tm_variation_css_check' ), 9999 ); | |
/** Load js,css files **/ | |
add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ), 5 ); | |
add_action( 'woocommerce_tm_custom_price_fields_enqueue_scripts', array( $this, 'custom_frontend_scripts' ) ); | |
add_action( 'woocommerce_tm_epo_enqueue_scripts', array( $this, 'custom_frontend_scripts' ) ); | |
/** Custom optional dequeue_scripts **/ | |
add_action( 'wp_enqueue_scripts', array( $this, 'dequeue_scripts' ), 9999 ); | |
/** Ensures the correct display order of options when multiple prodcuts are displayed **/ | |
add_action( 'woocommerce_before_single_product', array( $this, 'tm_woocommerce_before_single_product' ), 1 ); | |
add_action( 'woocommerce_after_single_product', array( $this, 'tm_woocommerce_after_single_product' ), 9999 ); | |
/** Change quantity value when editing a cart item **/ | |
add_action( 'woocommerce_before_add_to_cart_form', array( $this, 'tm_woocommerce_before_add_to_cart_form' ), 1 ); | |
add_action( 'woocommerce_after_add_to_cart_form', array( $this, 'tm_woocommerce_after_add_to_cart_form' ), 9999 ); | |
/** Display in frontend **/ | |
add_action( 'woocommerce_tm_epo', array( $this, 'frontend_display' ), 10, 3 ); | |
add_action( 'woocommerce_tm_epo_fields', array( $this, 'tm_epo_fields' ), 10, 4 ); | |
add_action( 'woocommerce_tm_epo_totals', array( $this, 'tm_epo_totals' ), 10, 3 ); | |
/** Compatibility for older plugin versions **/ | |
add_action( 'woocommerce_tm_custom_price_fields', array( $this, 'frontend_display' ) ); | |
add_action( 'woocommerce_tm_custom_price_fields_only', array( $this, 'tm_epo_fields' ) ); | |
add_action( 'woocommerce_tm_custom_price_fields_totals', array( $this, 'tm_epo_totals' ) ); | |
/** Cart manipulation **/ | |
// Modifies the cart item | |
add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), 9999, 1 ); | |
// Load cart data on every page load | |
add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 9999, 2 ); | |
// Gets cart item to display in the frontend | |
add_filter( 'woocommerce_get_item_data', array( $this, 'get_item_data' ), 50, 2 ); | |
// Add item data to the cart | |
add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), 50, 3 ); | |
// Add meta to order | |
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7.0', '<' ) ) { | |
add_action( 'woocommerce_add_order_item_meta', array( $this, 'order_item_meta' ), 50, 2 ); | |
} else { | |
add_action( 'woocommerce_checkout_create_order_line_item', array( $this, 'order_line_item' ), 50, 3 ); | |
} | |
// Validate upon adding to cart | |
add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 50, 6 ); | |
// Gets saved option when using the order again function | |
add_filter( 'woocommerce_order_again_cart_item_data', array( $this, 'order_again_cart_item_data' ), 50, 3 ); | |
// Alter the product thumbnail in cart | |
add_filter( 'woocommerce_cart_item_thumbnail', array( $this, 'tm_woocommerce_cart_item_thumbnail' ), 50, 3 ); | |
// Alter the product thumbnail in order | |
add_filter( 'woocommerce_admin_order_item_thumbnail', array( $this, 'tm_woocommerce_admin_order_item_thumbnail' ), 50, 3 ); | |
// Ensures correct price is shown on minicart | |
add_action( 'woocommerce_before_mini_cart', array( $this, 'tm_recalculate_total' ) ); | |
// Cart edit key | |
add_action( 'woocommerce_cart_loaded_from_session', array( $this, 'cart_loaded_from_session_1' ), 0 ); | |
// Calculate totals on remove from cart/update | |
add_action( 'woocommerce_update_cart_action_cart_updated', array( $this, 'tm_woocommerce_update_cart_action_cart_updated' ), 9999, 1 ); | |
/** Empty cart button **/ | |
if ( $this->tm_epo_clear_cart_button == "show" ) { | |
add_action( 'woocommerce_cart_actions', array( $this, 'add_empty_cart_button' ) ); | |
// check for empty-cart get param to clear the cart | |
add_action( 'init', array( $this, 'clear_cart' ) ); | |
} | |
/** Force Select Options **/ | |
add_filter( 'woocommerce_add_to_cart_url', array( $this, 'add_to_cart_url' ), 50, 1 ); | |
add_filter( 'woocommerce_product_add_to_cart_url', array( $this, 'add_to_cart_url' ), 50, 1 ); | |
add_action( 'woocommerce_product_add_to_cart_text', array( $this, 'add_to_cart_text' ), 10, 1 ); | |
add_filter( 'woocommerce_cart_redirect_after_error', array( $this, 'woocommerce_cart_redirect_after_error' ), 50, 2 ); | |
/** Enable shortcodes for element labels **/ | |
add_filter( 'woocommerce_tm_epo_option_name', array( $this, 'tm_epo_option_name' ), 10, 5 ); | |
/** Hides uploaded file path **/ | |
add_filter( 'woocommerce_order_item_display_meta_value', array( $this, 'tm_order_item_display_meta_value' ), 10, 1 ); | |
/** Support for fee price types **/ | |
add_action( 'woocommerce_cart_calculate_fees', array( $this, 'tm_calculate_cart_fee' ) ); | |
/** Adds options to the array of items/products of an order **/ | |
add_filter( 'woocommerce_order_get_items', array( $this, 'tm_woocommerce_order_get_items' ), 10, 2 ); | |
/** WC 2.7x only **/ | |
add_filter( 'woocommerce_admin_order_item_types', array( $this, 'woocommerce_admin_order_item_types' ), 10, 2 ); | |
/** Cart advanced template system **/ | |
// Override templates | |
if ( apply_filters( 'tm_get_template', TRUE ) ) { | |
add_filter( 'wc_get_template', array( $this, 'tm_wc_get_template' ), 10, 5 ); | |
} | |
// Custom actions running for advanced template system | |
add_action( 'tm_woocommerce_cart_after_row', array( $this, 'tm_woocommerce_cart_after_row' ), 10, 4 ); | |
add_action( 'tm_woocommerce_checkout_after_row', array( $this, 'tm_woocommerce_checkout_after_row' ), 10, 4 ); | |
/* Edit cart item */ | |
// Alters add to cart text when editing a product | |
add_action( 'woocommerce_before_add_to_cart_button', array( $this, 'tm_woocommerce_before_add_to_cart_button' ) ); | |
// Adds edit link on product title in cart | |
add_filter( 'woocommerce_cart_item_name', array( $this, 'tm_woocommerce_cart_item_name' ), 50, 3 ); | |
// Alters the cart item key when editing a product | |
add_action( 'woocommerce_add_to_cart', array( $this, 'tm_woocommerce_add_to_cart' ), 10, 6 ); | |
// Redirect to cart when updating information for a cart item | |
add_filter( 'woocommerce_add_to_cart_redirect', array( $this, 'tm_woocommerce_add_to_cart_redirect' ), 9999, 1 ); | |
// Remove product from cart when editing a product | |
add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'tm_remove_previous_product_from_cart' ), 99999, 6 ); | |
/** Add custom class to product div used to initialize the plugin JavaScript **/ | |
add_filter( 'post_class', array( $this, 'tm_post_class' ) ); | |
//add_filter( 'woocommerce_related_products_args', array( $this, 'tm_woocommerce_related_products_args' ), 10, 1 ); | |
add_filter( 'woocommerce_related_products_columns', array( $this, 'tm_woocommerce_related_products_args' ), 10, 1 ); | |
add_action( 'woocommerce_before_single_product', array( $this, 'tm_enable_post_class' ), 1 ); | |
add_action( 'woocommerce_after_single_product', array( $this, 'tm_enable_post_class' ), 1 ); | |
add_action( 'woocommerce_upsells_orderby', array( $this, 'tm_woocommerce_related_products_args' ), 10, 1 ); | |
add_action( 'woocommerce_after_single_product_summary', array( $this, 'tm_woocommerce_after_single_product_summary' ), 99999 ); | |
/** Image filter **/ | |
add_filter( 'tm_image_url', array( $this, 'tm_image_url' ) ); | |
/** Alter product display price to include possible option pricing **/ | |
if ( $this->tm_epo_include_possible_option_pricing == "yes" ) { | |
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7.0', '<' ) ) { | |
add_filter( 'woocommerce_get_price', array( $this, 'tm_woocommerce_get_price' ), 1, 2 ); | |
} else { | |
add_filter( 'woocommerce_product_get_price', array( $this, 'tm_woocommerce_get_price' ), 1, 2 ); | |
} | |
} | |
if ( $this->tm_epo_use_from_on_price == "yes" ) { | |
add_filter( 'woocommerce_show_variation_price', array( $this, 'tm_woocommerce_show_variation_price' ), 50, 3 ); | |
if ( $this->tm_epo_include_possible_option_pricing == "no" ) { | |
add_filter( 'woocommerce_get_variation_price_html', array( $this, 'tm_get_price_html' ), 1, 2 ); | |
add_filter( 'woocommerce_get_price_html', array( $this, 'tm_get_price_html' ), 1, 2 ); | |
} | |
} | |
/** Override the minimum characters of text fields globally **/ | |
add_filter( 'wc_epo_global_min_chars', array( $this, 'wc_epo_global_min_chars' ), 10, 1 ); | |
/** Override the maimum characters of text fields globally **/ | |
add_filter( 'wc_epo_global_max_chars', array( $this, 'wc_epo_global_max_chars' ), 10, 1 ); | |
/** Custom CSS/JS support **/ | |
add_action( 'wp_head', array( $this, 'print_extra_css_js' ), 99999 ); | |
/** Attach upload files to emails **/ | |
if ( $this->tm_epo_global_attach_uploaded_to_emails == "yes" ) { | |
add_filter( 'woocommerce_email_attachments', array( $this, 'woocommerce_email_attachments' ), 10, 3 ); | |
} | |
/* Disables persistent cart **/ | |
if ( $this->tm_epo_turn_off_persi_cart == "yes" ) { | |
add_filter( 'get_user_metadata', array( $this, 'turn_off_persi_cart' ), 10, 3 ); | |
add_filter( 'update_user_metadata', array( $this, 'turn_off_persi_cart' ), 10, 3 ); | |
add_filter( 'add_user_metadata', array( $this, 'turn_off_persi_cart' ), 10, 3 ); | |
} | |
add_filter( 'wc_tm_epo_ac_product_price', array( $this, 'wc_tm_epo_ac_product_price' ), 10, 5 ); | |
add_filter( 'wc_tm_epo_ac_subtotal_price', array( $this, 'wc_tm_epo_ac_product_price' ), 10, 5 ); | |
add_filter( 'woocommerce_available_variation', array( $this, 'woocommerce_available_variation' ), 10, 3 ); | |
} | |
/** Advanced template product price fix for override price **/ | |
public function wc_tm_epo_ac_product_price($price, $cart_item_key, $cart_item, $_product, $product_id){ | |
$flag = FALSE; | |
if ( $this->tm_epo_global_override_product_price == "yes" ){ | |
$flag = TRUE; | |
}elseif ( $this->tm_epo_global_override_product_price == "" ){ | |
$tm_meta_cpf = tc_get_post_meta( $product_id, 'tm_meta_cpf', TRUE ); | |
if ( !is_array( $tm_meta_cpf ) ) { | |
$tm_meta_cpf = array(); | |
} | |
if (!empty($tm_meta_cpf['price_override'])){ | |
$flag = TRUE; | |
} | |
} | |
if (isset($cart_item['tm_epo_options_prices']) && floatval( $cart_item['tm_epo_options_prices'])>0 ){ | |
$display_price = $price; | |
if ($flag){ | |
$display_price = ''; | |
} | |
return apply_filters('wc_epo_ac_override_price', $display_price, $price, $cart_item_key, $cart_item, $_product, $product_id); | |
} | |
return $price; | |
} | |
/** | |
* Disables persistent cart | |
* | |
* @param $value | |
* @param $id | |
* @param $key | |
* @return bool | |
*/ | |
public function turn_off_persi_cart( $value, $id, $key ) { | |
if ( $key == '_woocommerce_persistent_cart' ) { | |
return FALSE; | |
} | |
return $value; | |
} | |
/** Attach upload files to emails | |
* | |
* @param $attachments | |
* @param $emailmethodid | |
* @param $order | |
* @return array | |
*/ | |
public function woocommerce_email_attachments( $attachments, $emailmethodid, $order ) { | |
if ( $order && is_callable( array( $order, "get_items" ) ) ) { | |
$items = $order->get_items(); | |
if ( !is_array( $items ) ) { | |
return $attachments; | |
} | |
$upload_dir = get_option( 'tm_epo_upload_folder' ); | |
$upload_dir = str_replace( "/", "", $upload_dir ); | |
$upload_dir = sanitize_file_name( $upload_dir ); | |
$upload_dir = "/" . $upload_dir . "/"; | |
$main_path = $upload_dir; | |
$todir = ''; | |
$subdir = $main_path . $todir; | |
$param = wp_upload_dir(); | |
if ( empty( $param['subdir'] ) ) { | |
$base_url = $param['url'] . $main_path; | |
$param['path'] = $param['path'] . $subdir; | |
$param['url'] = $param['url'] . $subdir; | |
$param['subdir'] = $subdir; | |
} else { | |
$param['path'] = str_replace( $param['subdir'], $subdir, $param['path'] ); | |
$param['url'] = str_replace( $param['subdir'], $subdir, $param['url'] ); | |
$param['subdir'] = str_replace( $param['subdir'], $subdir, $param['subdir'] ); | |
$base_url = str_replace( $param['subdir'], $main_path, $param['url'] ); | |
} | |
foreach ( $items as $item_id => $item ) { | |
$item_meta = function_exists( 'wc_get_order_item_meta' ) ? wc_get_order_item_meta( $item_id, '', FALSE ) : $order->get_item_meta( $item_id ); | |
$has_epo = is_array( $item_meta ) && isset( $item_meta['_tmcartepo_data'] ) && isset( $item_meta['_tmcartepo_data'][0] ); | |
if ( $has_epo ) { | |
$epos = maybe_unserialize( $item_meta['_tmcartepo_data'][0] ); | |
if ( is_array( $epos ) ) { | |
foreach ( $epos as $key => $epo ) { | |
if ( $epo && is_array( $epo ) && isset( $epo['section'] ) ) { | |
if ( isset( $epo['element'] ) && isset( $epo['element']['type'] ) && $epo['element']['type'] == "upload" ) { | |
$attachments[] = $param['path'] . str_replace( $base_url, "", $epo['value'] ); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return $attachments; | |
} | |
/** Custom CSS/JS support **/ | |
public function print_extra_css_js() { | |
$before = '<!-- start EPO Custom CSS and JS -->' . PHP_EOL; | |
$after = '<!-- end EPO Custom CSS and JS -->' . PHP_EOL; | |
$before_css = $before . '<style type="text/css">' . PHP_EOL; | |
$after_css = '</style>' . PHP_EOL . $after; | |
$before_js = $before . '<script type="text/javascript">' . PHP_EOL; | |
$after_js = '</script>' . PHP_EOL . $after; | |
$css = $this->tm_epo_css_code; | |
$js = $this->tm_epo_js_code; | |
if ( !empty( $css ) ) { | |
echo $before_css . $css . $after_css; | |
} | |
if ( !empty( $js ) ) { | |
echo $before_js . $js . $after_js; | |
} | |
} | |
/** Override the minimum characters of text fields globally **/ | |
public function wc_epo_global_min_chars( $min = "" ) { | |
if ( $this->tm_epo_global_min_chars !== '' && $min === '' ) { | |
$min = $this->tm_epo_global_min_chars; | |
} | |
return $min; | |
} | |
/** Override the maximum characters of text fields globally **/ | |
public function wc_epo_global_max_chars( $max = "" ) { | |
if ( $this->tm_epo_global_max_chars !== '' && $max === '' ) { | |
$max = $this->tm_epo_global_max_chars; | |
} | |
return $max; | |
} | |
/** Cart edit key **/ | |
public function cart_loaded_from_session_1() { | |
$cart_contents = WC()->cart->cart_contents; | |
if ( is_array( $cart_contents ) ) { | |
foreach ( $cart_contents as $cart_item_key => $cart_item ) { | |
WC()->cart->cart_contents[ $cart_item_key ][ TM_EPO()->cart_edit_key_var ] = $cart_item_key; | |
} | |
} | |
} | |
/** Calculate totals on remove from cart/update **/ | |
public function tm_woocommerce_update_cart_action_cart_updated( $cart_updated = FALSE ) { | |
//if ( is_user_logged_in() ) { | |
$cart_contents = WC()->cart->cart_contents; | |
if ( is_array( $cart_contents ) ) { | |
foreach ( $cart_contents as $cart_item_key => $cart_item ) { | |
if ( isset( $cart_item['tm_epo_options_prices'] ) ) { | |
$cart_updated = TRUE; | |
} | |
} | |
} | |
//} | |
return $cart_updated; | |
} | |
/** Initialize custom product settings **/ | |
public function init_settings_pre() { | |
$postid = FALSE; | |
if ( function_exists( 'ux_builder_is_iframe' ) && ux_builder_is_iframe() ) { | |
if ( isset( $_GET['post_id'] ) ) { | |
$postid = $_GET['post_id']; | |
} | |
} else { | |
$url = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; | |
$postid = TM_EPO_HELPER()->get_url_to_postid( $url ); | |
} | |
$this->postid_pre = $postid; | |
$product = wc_get_product( $postid ); | |
$check1 = ($postid == 0); | |
$check2 = ($product | |
&& is_object( $product ) | |
&& property_exists( $product, 'post' ) | |
&& property_exists( $product->post, 'post_type' ) | |
&& (in_array( $product->post->post_type, array( 'product', 'product_variation' ) ))); | |
$check3 = ($product | |
&& is_object( $product ) | |
&& property_exists( $product, 'post_type' ) | |
&& (in_array( $product->post_type, array( 'product', 'product_variation' ) ))); | |
if ( $check1 || $check2 || $check3 ) { | |
add_action( 'template_redirect', array( $this, 'init_settings' ) ); | |
} else { | |
$this->init_settings(); | |
} | |
} | |
public function init_vars() { | |
$this->wc_vars = array( | |
"is_product" => is_product(), | |
"is_shop" => is_shop(), | |
"is_product_category" => is_product_category(), | |
"is_product_tag" => is_product_tag(), | |
"is_cart" => is_cart(), | |
"is_checkout" => is_checkout(), | |
"is_account_page" => is_account_page(), | |
"is_ajax" => is_ajax(), | |
"is_page" => is_page(), | |
); | |
} | |
/** Initialize custom product settings **/ | |
public function init_settings() { | |
if ( is_admin() && !$this->is_quick_view() ) { | |
return; | |
} | |
// Re populate options for WPML | |
if ( TM_EPO_WPML()->is_active() ) { | |
//todo:Find another place to re init settings for WPML | |
$this->get_plugin_settings(); | |
} | |
if ( class_exists( 'WOOCS' ) ) { | |
global $WOOCS; | |
remove_filter( 'woocommerce_order_amount_total', array( $WOOCS, 'woocommerce_order_amount_total' ), 999 ); | |
} | |
$postMax = ini_get( 'post_max_size' ); | |
// post_max_size debug | |
if ( empty( $_FILES ) | |
&& empty( $_POST ) | |
&& isset( $_SERVER['REQUEST_METHOD'] ) | |
&& strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' | |
&& isset( $_SERVER['CONTENT_LENGTH'] ) | |
&& (float) $_SERVER['CONTENT_LENGTH'] > $postMax | |
) { | |
wc_add_notice( sprintf( __( 'Trying to upload files larger than %s is not allowed!', 'woocommerce-tm-extra-product-options' ), $postMax ), 'error' ); | |
} | |
global $post, $product; | |
$this->set_tm_meta(); | |
$this->init_settings_after(); | |
} | |
/** Initialize custom product settings **/ | |
public function init_settings_after() { | |
global $post, $product; | |
// Check if the plugin is active for the user | |
if ( $this->check_enable() ) { | |
if ( ($this->is_enabled_shortcodes() || is_product() || $this->is_quick_view()) | |
&& ($this->tm_epo_display == 'normal' || $this->tm_meta_cpf['override_display'] == 'normal') | |
&& $this->tm_meta_cpf['override_display'] != 'action' | |
) { | |
$this->noactiondisplay = TRUE; | |
// Add options to the page | |
$this->tm_epo_options_placement_hook_priority = floatval( $this->tm_epo_options_placement_hook_priority ); | |
if ( !is_numeric( $this->tm_epo_options_placement_hook_priority ) ) { | |
$this->tm_epo_options_placement_hook_priority = 50; | |
} | |
$this->tm_epo_totals_box_placement_hook_priority = floatval( $this->tm_epo_totals_box_placement_hook_priority ); | |
if ( !is_numeric( $this->tm_epo_totals_box_placement_hook_priority ) ) { | |
$this->tm_epo_totals_box_placement_hook_priority = 50; | |
} | |
add_action( $this->tm_epo_options_placement, array( $this, 'tm_epo_fields' ), $this->tm_epo_options_placement_hook_priority ); | |
add_action( $this->tm_epo_options_placement, array( $this, 'tm_add_inline_style' ), $this->tm_epo_options_placement_hook_priority + 99999 ); | |
add_action( $this->tm_epo_totals_box_placement, array( $this, 'tm_epo_totals' ), $this->tm_epo_totals_box_placement_hook_priority ); | |
} | |
} | |
if ( $this->tm_epo_enable_in_shop == "yes" && (is_shop() || is_product_category() || is_product_tag()) ) { | |
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'tm_woocommerce_after_shop_loop_item' ), 9 ); | |
} | |
$this->current_free_text = esc_attr__( 'Free!', 'woocommerce' ); | |
if ( $this->tm_epo_remove_free_price_label == 'yes' && $this->tm_epo_include_possible_option_pricing == "no" ) { | |
if ( $post || $this->postid_pre ) { | |
if ( $post ) { | |
$thiscpf = $this->get_product_tm_epos( $post->ID ); | |
} | |
if ( is_product() && is_array( $thiscpf ) && (!empty( $thiscpf['global'] ) || !empty( $thiscpf['local'] )) ) { | |
if ( $product && | |
(is_object( $product ) && !is_callable( array( $product, "get_price" ) )) || | |
(!is_object( $product )) | |
) { | |
$product = wc_get_product( $post->ID ); | |
} | |
if ( $product && | |
is_object( $product ) && is_callable( array( $product, "get_price" ) ) | |
) { | |
if ( !(float) $product->get_price() > 0 ) { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
$this->current_free_text = $this->tm_epo_replacement_free_price_text; | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
} else { | |
if ( $this->tm_epo_use_from_on_price == "no" ) { | |
$this->current_free_text = ''; | |
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); | |
} | |
} | |
} | |
add_filter( 'woocommerce_get_price_html', array( $this, 'related_get_price_html' ), 10, 2 ); | |
} | |
} else { | |
if ( is_shop() || is_product_category() || is_product_tag() ) { | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html_shop' ), 10, 2 ); | |
} elseif ( !is_product() && $this->is_enabled_shortcodes() ) { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
$this->current_free_text = $this->tm_epo_replacement_free_price_text; | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
} else { | |
if ( $this->tm_epo_use_from_on_price == "no" ) { | |
$this->current_free_text = ''; | |
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); | |
} | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
} | |
} elseif ( is_product() ) { | |
add_filter( 'woocommerce_get_price_html', array( $this, 'related_get_price_html2' ), 10, 2 ); | |
} | |
} | |
} else { | |
if ( $this->is_quick_view() ) { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
$this->current_free_text = $this->tm_epo_replacement_free_price_text; | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
} else { | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
if ( $this->tm_epo_use_from_on_price == "no" ) { | |
$this->current_free_text = ''; | |
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); | |
} | |
} | |
} | |
} | |
} elseif ( $this->tm_epo_replacement_free_price_text ) { | |
$this->current_free_text = $this->tm_epo_replacement_free_price_text; | |
add_filter( 'woocommerce_get_price_html', array( $this, 'get_price_html' ), 10, 2 ); | |
} | |
if ( $this->tm_epo_use_from_on_price == "yes" && is_product() && $post ) { | |
if ( $product && | |
(is_object( $product ) && !is_callable( array( $product, "get_price" ) )) || | |
(!is_object( $product )) | |
) { | |
$product = wc_get_product( $post->ID ); | |
} | |
if ( $product && is_object( $product ) && is_callable( array( $product, "get_price" ) ) ) { | |
$this->current_free_text = $this->tm_get_price_html( $product->get_price(), $product ); | |
} | |
} | |
} | |
/** Add custom inline css **/ | |
public function tm_variation_css_check( $echo = 0, $product_id = 0 ) { | |
if ( is_rtl() ) { | |
$this->float_direction = "right"; | |
$this->float_direction_opposite = "left"; | |
} | |
$post_id = get_the_ID(); | |
if ( $product_id && $product_id !== $post_id ) { | |
$post_id = $product_id; | |
} | |
$has_epo = TM_EPO_API()->has_options( $post_id ); | |
if ( $has_epo !== FALSE && is_array( $has_epo ) && isset( $has_epo['variations'] ) == TRUE ) { | |
if ( $product_id ) { | |
$css_string = "#product-" . $product_id . " form .variations,.post-" . $product_id . " form .variations {display:none;}"; | |
} else { | |
$css_string = "form .variations{display:none;}"; | |
} | |
$this->inline_styles_head = $this->inline_styles_head . $css_string; | |
if ( $echo ) { | |
$this->tm_variation_css_check_do(); | |
} else { | |
add_action( 'wp_head', array( $this, 'tm_variation_css_check_do' ) ); | |
} | |
} | |
} | |
/** Print inline css **/ | |
public function tm_variation_css_check_do() { | |
if ( !empty( $this->inline_styles_head ) ) { | |
echo '<style type="text/css">'; | |
echo $this->inline_styles_head; | |
echo '</style>'; | |
} | |
} | |
/** Adds additional builder elements from 3rd party plugins. **/ | |
public final function tm_epo_add_elements() { | |
do_action( 'tm_epo_register_addons' ); | |
do_action( 'tm_epo_register_extra_multiple_choices' ); | |
$this->tm_original_builder_elements = TM_EPO_BUILDER()->get_elements(); | |
if ( is_array( $this->tm_original_builder_elements ) ) { | |
foreach ( $this->tm_original_builder_elements as $key => $value ) { | |
if ( $value["is_post"] == "post" ) { | |
$this->element_post_types[] = $value["post_name_prefix"]; | |
} | |
if ( $value["is_post"] == "post" || $value["is_post"] == "display" ) { | |
$this->tm_builder_elements[ $value["post_name_prefix"] ] = $value; | |
} | |
} | |
} | |
} | |
/** Load js,css files **/ | |
public function frontend_scripts() { | |
global $product; | |
if ( | |
((class_exists( 'WC_Quick_View' ) || $this->is_supported_quick_view()) && (is_shop() || is_product_category() || is_product_tag())) | |
|| $this->is_enabled_shortcodes() | |
|| is_product() | |
|| is_cart() | |
|| is_checkout() | |
|| is_order_received_page() | |
|| ($this->tm_epo_enable_in_shop == "yes" && (is_shop() || is_product_category() || is_product_tag())) | |
) { | |
do_action( 'wc_epo_enqueue_scripts_before' ); | |
$this->custom_frontend_scripts(); | |
do_action( 'wc_epo_enqueue_scripts_after' ); | |
} else { | |
return; | |
} | |
} | |
/** Custom optional dequeue_scripts **/ | |
public function dequeue_scripts() { | |
if ( | |
((class_exists( 'WC_Quick_View' ) || $this->is_supported_quick_view()) && (is_shop() || is_product_category() || is_product_tag())) | |
|| $this->is_enabled_shortcodes() | |
|| is_product() | |
|| is_cart() | |
|| is_checkout() | |
|| is_order_received_page() | |
|| ($this->tm_epo_enable_in_shop == "yes" && (is_shop() || is_product_category() || is_product_tag())) | |
) { | |
do_action( 'wc_epo_dequeue_scripts' ); | |
} | |
} | |
/** Displays options in shop page **/ | |
public function tm_woocommerce_after_shop_loop_item() { | |
$post_id = get_the_ID(); | |
$has_epo = TM_EPO_API()->has_options( $post_id ); | |
if ( TM_EPO_API()->is_valid_options( $has_epo ) ) { | |
echo '<div class="tm-has-options"><form class="cart">'; | |
$this->frontend_display( $post_id, "tc_" . $post_id, FALSE ); | |
echo '</form></div>'; | |
} | |
} | |
/** Generate min/max prices for the $product **/ | |
public function add_product_tc_prices( $product = FALSE ) { | |
if ( $product ) { | |
$id = tc_get_id( $product ); | |
$epos = $this->get_product_tm_epos( $id ); | |
if ( is_array( $epos ) && (!empty( $epos['global'] ) || !empty( $epos['local'] )) ) { | |
if ( !empty( $epos['price'] ) ) { | |
$minmax = TM_EPO_HELPER()->sum_array_values( $epos, TRUE ); | |
if ( !isset( $minmax['min'] ) ) { | |
$minmax['min'] = 0; | |
} | |
if ( !isset( $minmax['max'] ) ) { | |
$minmax['max'] = 0; | |
} | |
$min = $minmax['min']; | |
$max = $minmax['max']; | |
$minmax['tc_min_price'] = $min; | |
$minmax['tc_max_price'] = $max; | |
$minmax['tc_min_variable'] = $min; | |
$minmax['tc_max_variable'] = $max; | |
$minmax['tc_min_max'] = TRUE; | |
$this->product_minmax[ $id ] = array( | |
'tc_min_price' => $min, | |
'tc_max_price' => $max, | |
'tc_min_variable' => $min, | |
'tc_max_variable' => $max, | |
'tc_min_max' => TRUE, | |
); | |
if ( is_array( $min ) && is_array( $max ) ) { | |
$this->product_minmax[ $id ] = array( | |
'tc_min_price' => min( $min ), | |
'tc_max_price' => max( $max ), | |
'tc_min_variable' => $min, | |
'tc_max_variable' => $max, | |
'tc_min_max' => TRUE, | |
); | |
$minmax['tc_min_price'] = min( $min ); | |
$minmax['tc_max_price'] = max( $max ); | |
$minmax['tc_min_variable'] = $min; | |
$minmax['tc_max_variable'] = $max; | |
} | |
return $minmax; | |
} | |
} | |
} | |
return FALSE; | |
} | |
/** Alter product display price to include possible option pricing **/ | |
public function tm_woocommerce_get_price( $price = 0, $product = FALSE ) { | |
if ( $minmax = $this->add_product_tc_prices( $product ) ) { | |
add_filter( 'woocommerce_get_price_html', array( $this, 'tm_get_price_html' ), 1, 2 ); | |
add_filter( 'woocommerce_get_variation_price_html', array( $this, 'tm_get_price_html' ), 1, 2 ); | |
if ( $price === '' ) { | |
$price = 0; | |
if ( !empty( $max ) ) { | |
if ( is_callable( array( $product, 'get_composite_price' ) ) ) { | |
$price = $product->get_composite_price( 'min' ); | |
} | |
} | |
} | |
} | |
return $price; | |
} | |
/** Alter product display price to include possible option pricing **/ | |
public function tm_woocommerce_show_variation_price( $show = TRUE, $product = FALSE, $variation = FALSE ) { | |
if ( $product && $variation ) { | |
$epos = $this->get_product_tm_epos( tc_get_id( $product ) ); | |
if ( is_array( $epos ) && (!empty( $epos['global'] ) || !empty( $epos['local'] )) ) { | |
if ( !empty( $epos['price'] ) ) { | |
$minmax = TM_EPO_HELPER()->sum_array_values( $epos ); | |
if ( !empty( $minmax['max'] ) ) { | |
$show = TRUE; | |
} | |
} | |
} | |
} | |
return $show; | |
} | |
/** Returns the product's active price **/ | |
public function tc_get_price( $product = FALSE ) { | |
$tc_min_price = 0; | |
$id = tc_get_id( $product ); | |
if ( isset( $this->product_minmax[ $id ] ) ) { | |
$tc_min_price = $this->product_minmax[ $id ]['tc_min_price']; | |
} | |
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7.0', '<' ) ) { | |
return apply_filters( 'tc_woocommerce_get_price', (float) apply_filters( 'wc_epo_product_price', $product->get_price(), "", FALSE ) + (float) $tc_min_price, $product ); | |
} else { | |
return apply_filters( 'tc_woocommerce_product_get_price', (float) apply_filters( 'wc_epo_product_price', $product->get_price(), "", FALSE ) + (float) $tc_min_price, $product ); | |
} | |
} | |
/** Returns the price including or excluding tax, based on the 'woocommerce_tax_display_shop' setting. **/ | |
public function tc_get_display_price( $product = FALSE, $price = '', $qty = 1 ) { | |
if ( $price === '' ) { | |
$price = $this->tc_get_price( $product ); | |
} | |
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' ); | |
$display_price = $tax_display_mode == 'incl' ? tc_get_price_including_tax( $product, array( 'qty' => $qty, 'price' => $price ) ) : tc_get_price_excluding_tax( $product, array( 'qty' => $qty, 'price' => $price ) ); | |
return $display_price; | |
} | |
/** Returns the product's regular price. **/ | |
public function tc_get_regular_price( $product = FALSE ) { | |
$tc_min_price = 0; | |
$id = tc_get_id( $product ); | |
if ( isset( $this->product_minmax[ $id ] ) ) { | |
$tc_min_price = $this->product_minmax[ $id ]['tc_min_price']; | |
} | |
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7.0', '<' ) ) { | |
return apply_filters( 'tc_woocommerce_get_regular_price', (float) apply_filters( 'wc_epo_product_price', $product->get_regular_price(), "", FALSE ) + (float) $tc_min_price, $product ); | |
} else { | |
return apply_filters( 'tc_woocommerce_product_get_regular_price', (float) apply_filters( 'wc_epo_product_price', $product->get_regular_price(), "", FALSE ) + (float) $tc_min_price, $product ); | |
} | |
} | |
/** Alter product display price to include possible option pricing **/ | |
public function tm_get_price_html( $price = '', $product = FALSE ) { | |
$original_price = $price; | |
$id = tc_get_id( $product ); | |
if ( !isset( $this->product_minmax[ $id ] ) ) { | |
$this->product_minmax[ $id ] = $this->add_product_tc_prices( $product ); | |
} | |
$tc_min_price = 0; | |
$tc_max_price = 0; | |
if ( isset( $this->product_minmax[ $id ] ) && isset( $this->product_minmax[ $id ]['tc_min_price'] ) && isset( $this->product_minmax[ $id ]['tc_max_price'] ) ) { | |
$tc_min_price = $this->product_minmax[ $id ]['tc_min_price']; | |
$tc_max_price = $this->product_minmax[ $id ]['tc_max_price']; | |
} | |
$type = tc_get_product_type( $product ); | |
$override_id = floatval( TM_EPO_WPML()->get_original_id( $id, 'product' ) ); | |
$tm_meta_cpf = tc_get_post_meta( $override_id, 'tm_meta_cpf', TRUE ); | |
$price_override = ($this->tm_epo_global_override_product_price == 'no') | |
? 0 | |
: (($this->tm_epo_global_override_product_price == 'yes') | |
? 1 | |
: !empty( $tm_meta_cpf['price_override'] ) ? 1 : 0); | |
$use_from = ($this->tm_epo_use_from_on_price == "yes"); | |
$free_text = ($this->tm_epo_remove_free_price_label == 'yes') | |
? | |
($this->tm_epo_replacement_free_price_text) | |
? $this->tm_epo_replacement_free_price_text | |
: '' | |
: esc_attr__( 'Free!', 'woocommerce' ); | |
if ( $type == 'variable' || $type == 'variable-subscription' ) { | |
$prices = $product->get_variation_prices( TRUE ); | |
$min_price = current( $prices['price'] ); | |
$tc_min_variable = isset( $this->product_minmax[ $id ]['tc_min_variable'][ key( $prices['price'] ) ] ) | |
? $this->product_minmax[ $id ]['tc_min_variable'][ key( $prices['price'] ) ] : | |
(isset( $this->product_minmax[ $id ]['tc_min_variable'] ) | |
? $this->product_minmax[ $id ]['tc_min_variable'] | |
: 0); | |
if ( is_array( $tc_min_variable ) ) { | |
$tc_min_variable = min( $tc_min_variable ); | |
} | |
$min = floatval( apply_filters( 'wc_epo_options_min_price', $tc_min_variable, $product, $price ) ); | |
$min_price = $min_price + $min; | |
if ( $price_override ){ | |
if ( !empty($min) ){ | |
$min_price = $min; | |
}else{ | |
$minmax_new = TM_EPO_HELPER()->sum_array_values( $this->get_product_tm_epos( $id ), TRUE, 'minall' ); | |
$min_price = $minmax_new['minall']; | |
} | |
} | |
$copy_prices = $prices['price']; | |
foreach ( $copy_prices as $vkey => $vprice ) { | |
$copy_prices[ $vkey ] = $vprice + floatval( apply_filters( 'wc_epo_options_max_price', isset( $this->product_minmax[ $id ]['tc_max_variable'][ $vkey ] ) ? $this->product_minmax[ $id ]['tc_max_variable'][ $vkey ] : 0, $product, $price ) ); | |
} | |
asort( $copy_prices ); | |
$max_price = end( $copy_prices ); | |
$tc_max_variable = isset( $this->product_minmax[ $id ]['tc_max_variable'][ key( $prices['price'] ) ] ) | |
? $this->product_minmax[ $id ]['tc_max_variable'][ key( $prices['price'] ) ] : | |
(isset( $this->product_minmax[ $id ]['tc_max_variable'] ) | |
? $this->product_minmax[ $id ]['tc_max_variable'] | |
: 0); | |
if ( is_array( $tc_max_variable ) ) { | |
$tc_max_variable = max( $tc_max_variable ); | |
} | |
$max = floatval( apply_filters( 'wc_epo_options_max_price', $tc_max_variable, $product, $price ) ); | |
$original_max = $max_price; | |
$max_price = $max_price + $max; | |
if ( $price_override && empty($min) ){ | |
if ( $max > $original_max ){ | |
$max_price = $max; | |
}else{ | |
$max_price = $original_max; | |
} | |
} | |
$price = $min_price !== $max_price | |
? !$use_from | |
? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), tc_price( $min_price ), tc_price( $max_price ) ) | |
: (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()) . tc_price( $min_price ) | |
: tc_price( $min_price ); | |
$is_free = $min_price == 0 && $max_price == 0; | |
if ( $product->is_on_sale() ) { | |
$min_regular_price = current( $prices['regular_price'] ) + $min; | |
$max_regular_price = end( $prices['regular_price'] ) + $max; | |
$regular_price = $min_regular_price !== $max_regular_price | |
? !$use_from | |
? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), tc_price( $min_regular_price ), tc_price( $max_regular_price ) ) | |
: (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()) . tc_price( $min_regular_price ) | |
: tc_price( $min_regular_price ); | |
$price = (!$use_from ? (function_exists( 'wc_format_price_range' ) ? wc_format_price_range( $regular_price, $price ) : $product->get_price_html_from_to( $regular_price, $price )) : $price) . $product->get_price_suffix(); | |
} elseif ( $is_free ) { | |
$price = apply_filters( 'woocommerce_variable_free_price_html', $free_text, $product ); | |
} else { | |
$price = $price . $product->get_price_suffix(); | |
} | |
} else { | |
$min = floatval( apply_filters( 'wc_epo_options_min_price', $this->product_minmax[ $id ]['tc_min_price'], $product, $price ) ); | |
$max = floatval( apply_filters( 'wc_epo_options_max_price', $this->product_minmax[ $id ]['tc_max_price'], $product, $price ) ); | |
if ( $price_override ){ | |
$new_min = $min - floatval( $product->get_price() ); | |
$min = $new_min; | |
$this->product_minmax[ $id ]['tc_min_price'] = $min; | |
} | |
$display_price = $this->tc_get_display_price( $product ); | |
$display_regular_price = $this->tc_get_display_price( $product, $this->tc_get_regular_price( $product ) ); | |
if( $price_override && $min<=0){ | |
$display_price = $display_regular_price; | |
} | |
$price = ''; | |
if ( $this->tc_get_price( $product ) > 0 ) { | |
if ( $product->is_on_sale() && $this->tc_get_regular_price( $product ) ) { | |
if ( $use_from && ($max > 0 || $max > $min) ) { | |
$price .= (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()) . tc_price( $display_price ); | |
} else { | |
$price .= $original_price;//(function_exists( 'wc_format_price_range' ) ? wc_format_price_range( $display_regular_price, $display_price ) : $product->get_price_html_from_to( $display_regular_price, $display_price )); | |
} | |
$price .= $product->get_price_suffix(); | |
} else { | |
if ( $use_from && ($max > 0 || $max > $min) ) { | |
$price .= (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()); | |
} | |
$price .= tc_price( $display_price ) . $product->get_price_suffix(); | |
} | |
} elseif ( $this->tc_get_price( $product ) === '' ) { | |
$price = apply_filters( 'woocommerce_empty_price_html', '', $product ); | |
} elseif ( $this->tc_get_price( $product ) == 0 ) { | |
if ( $product->is_on_sale() && $this->tc_get_regular_price( $product ) ) { | |
if ( $use_from && ($max > 0 || $max > $min) ) { | |
$price .= (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()) . tc_price( ($min > 0) ? $min : 0 ); | |
} else { | |
$price .= $original_price;//(function_exists( 'wc_format_price_range' ) ? wc_format_price_range( $display_regular_price, __( 'Free!', 'woocommerce' ) ) : $product->get_price_html_from_to( $display_regular_price, __( 'Free!', 'woocommerce' ) )); | |
$price = apply_filters( 'woocommerce_free_sale_price_html', $price, $product ); | |
} | |
} else { | |
if ( $use_from && ($max > 0 || $max > $min) ) { | |
$price .= (function_exists( 'wc_get_price_html_from_text' ) ? wc_get_price_html_from_text() : $product->get_price_html_from_text()) . tc_price( ($min > 0) ? $min : 0 ); | |
} else { | |
$price = '<span class="amount">' . $free_text . '</span>'; | |
$price = apply_filters( 'woocommerce_free_price_html', $price, $product ); | |
} | |
} | |
} | |
} | |
return apply_filters( 'wc_epo_get_price_html', $price, $product ); | |
} | |
/** Ensures correct price is shown on minicart **/ | |
public function tm_recalculate_total() { | |
WC()->cart->calculate_totals(); | |
} | |
/** Image filter **/ | |
public function tm_image_url( $url = "" ) { | |
// WP Rocket cdn | |
if ( defined( 'WP_ROCKET_VERSION' ) && function_exists( 'get_rocket_cdn_cnames' ) && function_exists( 'get_rocket_cdn_url' ) ) { | |
$zone = array( 'all', 'images' ); | |
if ( is_array( $url ) ) { | |
foreach ( $url as $key => $value ) { | |
$ext = pathinfo( $value, PATHINFO_EXTENSION ); | |
if ( is_admin() && $ext != 'php' ) { | |
continue; | |
} | |
if ( $cnames = get_rocket_cdn_cnames( $zone ) ) { | |
$url[ $key ] = get_rocket_cdn_url( $value, $zone ); | |
} | |
} | |
} else { | |
$ext = pathinfo( $url, PATHINFO_EXTENSION ); | |
if ( is_admin() && $ext != 'php' ) { | |
//skip | |
} else { | |
if ( $cnames = get_rocket_cdn_cnames( $zone ) ) { | |
$url = get_rocket_cdn_url( $url, $zone ); | |
} | |
} | |
} | |
} | |
// SSL support | |
if ( is_ssl() ) { | |
$url = preg_replace( "/^http:/i", "https:", $url ); | |
} | |
return $url; | |
} | |
/** Add custom class to product div **/ | |
public function tm_enable_post_class() { | |
$this->tm_related_products_output = TRUE; | |
} | |
/** Add custom class to product div **/ | |
public function tm_disable_post_class() { | |
$this->tm_related_products_output = FALSE; | |
} | |
/** Add custom class to product div **/ | |
public function tm_woocommerce_related_products_args( $args ) { | |
$this->tm_disable_post_class(); | |
$this->in_related_upsells = TRUE; | |
return $args; | |
} | |
public function tm_woocommerce_after_single_product_summary() { | |
$this->in_related_upsells = FALSE; | |
} | |
/** Add custom class to product div used to initialize the plugin JavaScript **/ | |
public function tm_post_class( $classes = "" ) { | |
$post_id = get_the_ID(); | |
if ( | |
// disable in admin interface | |
is_admin() || | |
// disable if not in the product div | |
!$this->tm_related_products_output || | |
// disable if not in a product page, shop or product archive page | |
!( | |
'product' == get_post_type( $post_id ) || | |
$this->wc_vars['is_product'] || | |
$this->wc_vars['is_shop'] || | |
$this->wc_vars['is_product_category'] || | |
$this->wc_vars['is_product_tag'] | |
) || | |
// disable if options are not visible in shop/archive pages | |
(( | |
$this->wc_vars['is_shop'] || | |
$this->wc_vars['is_product_category'] || | |
$this->wc_vars['is_product_tag'] | |
) | |
&& | |
$this->tm_epo_enable_in_shop == "no" | |
) | |
) { | |
return $classes; | |
} | |
// enabling this here will cause issues on certain Visual composer shortcodes. | |
//global $post; | |
if ( $post_id && ($this->wc_vars['is_product'] || 'product' == get_post_type( $post_id )) ) { | |
$has_options = $this->get_product_tm_epos( $post_id ); | |
// Product has extra options | |
if ( is_array( $has_options ) && (!empty( $has_options['global'] ) || !empty( $has_options['local'] )) ) { | |
$classes[] = 'tm-has-options'; | |
// Product doens't have extra options but the final total box is enabled for all products | |
} elseif ( $this->tm_epo_enable_final_total_box_all == "yes" ) { | |
$classes[] = 'tm-no-options-pxq'; | |
// Search for composite products extra options | |
} else { | |
$terms = get_the_terms( $post_id, 'product_type' ); | |
$product_type = !empty( $terms ) && isset( current( $terms )->name ) ? sanitize_title( current( $terms )->name ) : 'simple'; | |
if ( ($product_type == 'bto' || $product_type == 'composite') | |
&& !(is_array( $has_options ) && (!empty( $has_options['global'] ) || !empty( $has_options['local'] ))) | |
&& $this->tm_epo_enable_final_total_box_all != "yes" | |
) { | |
// search components for options | |
$product = wc_get_product( $post_id ); | |
if ( is_callable( array( $product, 'get_composite_data' ) ) ) { | |
$composite_data = $product->get_composite_data(); | |
foreach ( $composite_data as $component_id => $component_data ) { | |
$component_options = array(); | |
if ( class_exists( 'WC_CP_Component' ) && method_exists( 'WC_CP_Component', 'query_component_options' ) ) { | |
$component_options = WC_CP_Component::query_component_options( $component_data ); | |
} elseif ( function_exists( 'WC_CP' ) ) { | |
$component_options = WC_CP()->api->get_component_options( $component_data ); | |
} else { | |
global $woocommerce_composite_products; | |
if ( is_object( $woocommerce_composite_products ) && function_exists( 'WC_CP' ) ) { | |
$component_options = WC_CP()->api->get_component_options( $component_data ); | |
} else { | |
if ( isset( $component_data['assigned_ids'] ) && is_array( $component_data['assigned_ids'] ) ) { | |
$component_options = $component_data['assigned_ids']; | |
} | |
} | |
} | |
foreach ( $component_options as $key => $pid ) { | |
$has_options = $this->get_product_tm_epos( $pid ); | |
if ( is_array( $has_options ) && (!empty( $has_options['global'] ) || !empty( $has_options['local'] )) ) { | |
$classes[] = 'tm-no-options-composite'; | |
return $classes; | |
} | |
} | |
} | |
} | |
} | |
$classes[] = 'tm-no-options'; | |
} | |
} | |
return $classes; | |
} | |
/** Alters add to cart text when editing a product **/ | |
public function tm_woocommerce_before_add_to_cart_button() { | |
if ( !empty( $this->cart_edit_key ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'tm-edit' ) ) { | |
add_filter( 'woocommerce_product_single_add_to_cart_text', array( $this, 'tm_woocommerce_product_single_add_to_cart_text' ), 9999 ); | |
echo '<input type="hidden" name="' . $this->cart_edit_key_var_alt . '" value="' . esc_attr( $this->cart_edit_key ) . '" />'; | |
} | |
$this->epo_id++; | |
echo '<input type="hidden" class="tm-epo-counter" name="tm-epo-counter" value="' . esc_attr( $this->epo_id ) . '" />'; | |
global $product; | |
$pid = tc_get_id( $product ); | |
if ( !empty( $pid ) ) { | |
echo '<input type="hidden" class="tc-add-to-cart" name="tcaddtocart" value="' . esc_attr( $pid ) . '" />'; | |
} | |
} | |
/** Adds edit link on product title in cart **/ | |
public function tm_woocommerce_cart_item_name( $title = "", $cart_item = array(), $cart_item_key = "" ) { | |
if ( apply_filters( 'wc_epo_no_edit_options', FALSE, $title, $cart_item, $cart_item_key ) ) { | |
return $title; | |
} | |
if ( !isset( $cart_item['data'] ) || !isset( $cart_item['tmhasepo'] ) ) { | |
return $title; | |
} | |
if ( apply_filters( 'wc_epo_override_edit_options', TRUE, $title, $cart_item, $cart_item_key ) ) { | |
if ( !(is_cart() || is_checkout()) || isset( $cart_item['composite_item'] ) || isset( $cart_item['composite_data'] ) ) { | |
return $title; | |
} | |
// Chained products cannot be edited | |
if ( isset( WC()->cart->cart_contents[ $cart_item_key ]['chained_item_of'] ) ) { | |
return $title; | |
} | |
// Cannot function with TLS eDocBuidler | |
if ( isset( $cart_item['eDocBuilderID'] ) ) { | |
return $title; | |
} | |
} | |
$product = $cart_item['data']; | |
$link = $product->get_permalink( $cart_item ); | |
$link = add_query_arg( | |
array( | |
$this->cart_edit_key_var => $cart_item_key, | |
'cart_item_key' => $cart_item_key, | |
) | |
, $link ); | |
//wp_nonce_url escapes the url | |
$link = wp_nonce_url( $link, 'tm-edit' ); | |
$title .= '<a href="' . $link . '" class="tm-cart-edit-options">' . ((!empty( $this->tm_epo_edit_options_text )) ? $this->tm_epo_edit_options_text : __( 'Edit options', 'woocommerce-tm-extra-product-options' )) . '</a>'; | |
return apply_filters( 'wc_epo_edit_options_link', $title, $cart_item, $cart_item_key ); | |
} | |
/** Alters the cart item key when editing a product **/ | |
public function tm_woocommerce_add_to_cart( $cart_item_key = "", $product_id = "", $quantity = "", $variation_id = "", $variation = "", $cart_item_data = "" ) { | |
if ( $this->cart_edit_key ) { | |
$this->new_add_to_cart_key = $cart_item_key; | |
} else { | |
if ( is_array( $cart_item_data ) && isset( $cart_item_data['tmhasepo'] ) ) { | |
$cart_contents = WC()->cart->cart_contents; | |
if ( is_array( $cart_contents ) && isset( $cart_contents[ $cart_item_key ] ) && !empty( $cart_contents[ $cart_item_key ] ) && !isset( $cart_contents[ $cart_item_key ][ $this->cart_edit_key_var ] ) ) { | |
WC()->cart->cart_contents[ $cart_item_key ][ $this->cart_edit_key_var ] = $cart_item_key; | |
} | |
} | |
} | |
} | |
/** Redirect to cart when updating information for a cart item **/ | |
public function tm_woocommerce_add_to_cart_redirect( $url = "" ) { | |
if ( empty( $_REQUEST['add-to-cart'] ) || !is_numeric( $_REQUEST['add-to-cart'] ) ) { | |
return $url; | |
} | |
if ( $this->cart_edit_key ) { | |
if ( !TM_EPO_HELPER()->is_ajax_request() ) { | |
$url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url(); | |
} | |
} | |
return $url; | |
} | |
/** Remove product from cart when editing a product **/ | |
public function tm_remove_previous_product_from_cart( $passed, $product_id, $qty, $variation_id = '', $variations = array(), $cart_item_data = array() ) { | |
if ( $this->cart_edit_key ) { | |
$cart_item_key = $this->cart_edit_key; | |
if ( isset( $this->new_add_to_cart_key ) ) { | |
if ( $this->new_add_to_cart_key == $cart_item_key && isset( $_POST['quantity'] ) ) { | |
WC()->cart->set_quantity( $this->new_add_to_cart_key, $_POST['quantity'], TRUE ); | |
} else { | |
WC()->cart->remove_cart_item( $cart_item_key ); | |
unset( WC()->cart->removed_cart_contents[ $cart_item_key ] ); | |
} | |
} | |
} | |
return $passed; | |
} | |
/** Change quantity value when editing a cart item **/ | |
public function tm_woocommerce_quantity_input_args( $args = "", $product = "" ) { | |
if ( $this->cart_edit_key ) { | |
$cart_item_key = $this->cart_edit_key; | |
$cart_item = WC()->cart->get_cart_item( $cart_item_key ); | |
if ( isset( $cart_item["quantity"] ) ) { | |
$args["input_value"] = $cart_item["quantity"]; | |
} | |
} | |
return $args; | |
} | |
public function woocommerce_admin_order_item_types( $type ) { | |
$this->is_in_woocommerce_admin_order_page = TRUE; | |
return $type; | |
} | |
/** Adds options to the array of items/products of an order **/ | |
public function tm_woocommerce_order_get_items( $items = array(), $order = FALSE ) { | |
if ( apply_filters( 'wc_epo_no_order_get_items', false ) || | |
!is_array( $items ) || | |
defined( 'TM_IS_SUBSCRIPTIONS_RENEWAL' ) || | |
('yes' == $this->tm_epo_global_prevent_options_from_emails) || | |
(isset( $_POST["action"] ) && $_POST["action"] == "woocommerce_calc_line_taxes") | |
) { | |
return $items; | |
} | |
$order_currency = is_callable( array( $order, 'get_currency' ) ) ? $order->get_currency() : $order->get_order_currency(); | |
$mt_prefix = $order_currency; | |
$return_items = array(); | |
foreach ( $items as $item_id => $item ) { | |
$item_meta = function_exists( 'wc_get_order_item_meta' ) ? wc_get_order_item_meta( $item_id, '', FALSE ) : $order->get_item_meta( $item_id ); | |
$has_epo = is_array( $item_meta ) && isset( $item_meta['_tmcartepo_data'] ) && isset( $item_meta['_tmcartepo_data'][0] ); | |
if ( $has_epo ) { | |
$epos = maybe_unserialize( $item_meta['_tmcartepo_data'][0] ); | |
if ( !is_array( $epos ) ) { | |
return $items; | |
} | |
$current_product_id = $item['product_id']; | |
$original_product_id = floatval( TM_EPO_WPML()->get_original_id( $current_product_id, 'product' ) ); | |
if ( TM_EPO_WPML()->get_lang() == TM_EPO_WPML()->get_default_lang() && $original_product_id != $current_product_id ) { | |
$current_product_id = $original_product_id; | |
} | |
$wpml_translation_by_id = TM_EPO_WPML()->get_wpml_translation_by_id( $current_product_id ); | |
$_unique_elements_added = array(); | |
$_items_to_add = array(); | |
foreach ( $epos as $key => $epo ) { | |
if ( $epo && is_array( $epo ) && isset( $epo['section'] ) ) { | |
if ( !isset( $epo['quantity'] ) ) { | |
$epo['quantity'] = 1; | |
} | |
if ( $epo['quantity'] < 1 ) { | |
$epo['quantity'] = 1; | |
} | |
if ( isset( $wpml_translation_by_id[ $epo['section'] ] ) ) { | |
$epo['name'] = $wpml_translation_by_id[ $epo['section'] ]; | |
} | |
if ( !empty( $epo['multiple'] ) && !empty( $epo['key'] ) ) { | |
$pos = strrpos( $epo['key'], '_' ); | |
if ( $pos !== FALSE ) { | |
if ( isset( $wpml_translation_by_id[ "options_" . $epo['section'] ] ) && is_array( $wpml_translation_by_id[ "options_" . $epo['section'] ] ) ) { | |
$av = array_values( $wpml_translation_by_id[ "options_" . $epo['section'] ] ); | |
if ( isset( $av[ substr( $epo['key'], $pos + 1 ) ] ) ) { | |
$epo['value'] = $av[ substr( $epo['key'], $pos + 1 ) ]; | |
} | |
} | |
} | |
} | |
$original_value = $epo['value']; | |
$epo['value'] = $this->tm_order_item_display_meta_value( $epo['value'] ); | |
$new_currency = FALSE; | |
if ( isset( $epo['price_per_currency'] ) ) { | |
$_current_currency_prices = $epo['price_per_currency']; | |
if ( $mt_prefix !== '' | |
&& $_current_currency_prices !== '' | |
&& is_array( $_current_currency_prices ) | |
&& isset( $_current_currency_prices[ $mt_prefix ] ) | |
&& $_current_currency_prices[ $mt_prefix ] != '' | |
) { | |
$new_currency = TRUE; | |
$epo['price'] = $_current_currency_prices[ $mt_prefix ]; | |
} | |
} | |
if ( !$new_currency ) { | |
$epo['price'] = apply_filters( 'wc_epo_get_current_currency_price', $epo['price'] ); | |
} | |
if ( !empty( $epo['multiple_values'] ) ) { | |
$display_value_array = explode( $epo['multiple_values'], $epo['value'] ); | |
$display_value = ""; | |
foreach ( $display_value_array as $d => $dv ) { | |
$display_value .= '<span class="cpf-data-on-cart">' . $dv . '</span>'; | |
} | |
$epo['value'] = $display_value; | |
} | |
$epovalue = ''; | |
if ( $this->tm_epo_hide_options_prices_in_cart == "normal" && !empty( $epo['price'] ) ) { | |
$epovalue .= ' ' . ((!empty( $item_meta['tm_has_dpd'] ) || !empty( $item_meta['_tm_has_dpd'] )) ? '' : (wc_price( (float) $epo['price'] / (float) $epo['quantity'] ))); | |
} | |
if ( $epo['quantity'] > 1 ) { | |
$epovalue .= ' × ' . $epo['quantity']; | |
} | |
if ( $epovalue !== '' && ((!empty( $epo['hidevalueinorder'] ) && $epo['hidevalueinorder'] == 'price') || empty( $epo['hidevalueinorder'] )) ) { | |
$epo['value'] .= '<small>' . $epovalue . '</small>'; | |
} | |
if ( is_array( $epo['value'] ) ) { | |
$epo['value'] = array_map( array( TM_EPO_HELPER(), 'html_entity_decode' ), $epo['value'] ); | |
} else { | |
$epo['value'] = TM_EPO_HELPER()->html_entity_decode( $epo['value'] ); | |
} | |
if ( $this->tm_epo_strip_html_from_emails == "yes" ) { | |
$epo['value'] = strip_tags( $epo['value'] ); | |
} else { | |
if ( !empty( $epo['images'] ) && $this->tm_epo_show_image_replacement == "yes" ) { | |
$display_value = '<span class="cpf-img-on-cart"><img alt="" class="attachment-shop_thumbnail wp-post-image epo-option-image" src="' . | |
apply_filters( "tm_image_url", $epo['images'] ) . '" /></span>'; | |
$epo['value'] = $display_value . $epo['value']; | |
} | |
if ( isset( $epo['element'] ) && isset( $epo['element']['type'] ) && $epo['element']['type'] == "upload" ) { | |
$check = wp_check_filetype( $epo['value'] ); | |
if ( !empty( $check['ext'] ) ) { | |
$image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' ); | |
if ( in_array( $check['ext'], $image_exts ) ) { | |
$display_value = '<span class="cpf-img-on-cart"><img alt="" class="attachment-shop_thumbnail wp-post-image epo-option-image epo-upload-image" src="' . | |
apply_filters( "tm_image_url", $original_value ) . '" /><span class="cpf-data-on-cart"><a download href="' . esc_attr( $original_value ) . '">' . $epo['value'] . '</a></span></span>'; | |
$epo['value'] = $display_value; | |
} | |
} | |
} | |
} | |
if ( isset($epo['element']) && $epo['element']['type']==='textarea' ){ | |
$epo_value = trim( $epo['value'] ); | |
$epo_value = str_replace( array( "\r\n", "\r" ), "\n", $epo_value ); | |
$epo_value = preg_replace( "/\n\n+/", "\n\n", $epo_value ); | |
$epo_value = array_map( 'wc_clean', explode( "\n", $epo_value ) ); | |
$epo_value = implode( "\n", $epo_value ); | |
$epo_value = wpautop( $epo_value ); | |
$epo['value'] = $epo_value; | |
} | |
if ( empty( $epo['hidelabelinorder'] ) || empty( $epo['hidevalueinorder'] ) ) { | |
$_label = empty( $epo['hidelabelinorder'] )?$epo['name']:''; | |
$_value = $epo['value']; | |
if (isset($epo['hidevalueinorder'])){ | |
switch ($epo['hidevalueinorder']) { | |
case 'price': | |
$_value = $epo['price']; | |
break; | |
case 'hidden': | |
$_value = ''; | |
break; | |
default: | |
$_value = $epo['value']; | |
break; | |
} | |
} | |
if ( isset( $_unique_elements_added[ $epo['section'] ] ) && isset( $_items_to_add[ $epo['section'] ] ) ) { | |
$_ta = $_items_to_add[ $epo['section'] ]; | |
$_ta[ $_label ][] = $_value; | |
$_items_to_add[ $epo['section'] ] = $_ta; | |
} else { | |
$_ta = array(); | |
$_ta[ $_label ] = array( $_value ); | |
$_items_to_add[ $epo['section'] ] = $_ta; | |
} | |
$_unique_elements_added[ $epo['section'] ] = $epo['section']; | |
} | |
} | |
} | |
$current_meta_key = 0; | |
$added = FALSE; | |
$current_meta = array(); | |
if ( $this->is_in_woocommerce_admin_order_page === FALSE && is_object( $item ) ) { | |
$current_meta = unserialize( serialize( $item->get_meta_data() ) ); | |
$current_meta_key = 99999; | |
$current_product = wc_get_product( $current_product_id ); | |
if ( $current_product->get_type() !== 'variable'){ | |
$cloned_item = clone $item; | |
$cloned_item_meta_data = $cloned_item->get_meta_data(); | |
foreach ( $cloned_item_meta_data as $cloned_item_meta ) { | |
$cloned_item->delete_meta_data( $cloned_item_meta->key ); | |
} | |
$cloned_item->set_meta_data( $current_meta ); | |
$item = $cloned_item; | |
} | |
} | |
foreach ( $_items_to_add as $uniquid => $element ) { | |
foreach ( $element as $key => $value ) { | |
if ( is_array( $value ) ) { | |
$value = implode( ", ", $value ); | |
} | |
if ( $value == '' ) { | |
$value = ' '; | |
} | |
if ( is_array( $items[ $item_id ] ) ) { | |
$item['item_meta'][ $key ][] = $value; | |
$item['item_meta_array'][ count( $item['item_meta_array'] ) ] = (object) array( 'key' => $key, 'value' => $value ); | |
} elseif ( $current_meta_key > 0 && is_object( $items[ $item_id ] ) ) { | |
$added = TRUE; | |
$current_meta_key++; | |
if ( !isset( $current_meta[ $current_meta_key ] ) ) | |
$current_meta[] = (object) array( | |
'id' => $current_meta_key, | |
'key' => $key, | |
'value' => $value, | |
); | |
} | |
} | |
} | |
if ( $current_meta_key > 0 && $added ) { | |
$item->set_meta_data( $current_meta ); | |
} | |
} | |
$return_items[ $item_id ] = $item; | |
} | |
return $return_items; | |
} | |
/** Alter the product thumbnail in order **/ | |
public function tm_woocommerce_admin_order_item_thumbnail( $image = "", $item_id = "", $item = "" ) { | |
$order = TM_EPO_HELPER()->tm_get_order_object(); | |
$item_meta = function_exists( 'wc_get_order_item_meta' ) ? wc_get_order_item_meta( $item_id, '', FALSE ) : $order->get_item_meta( $item_id ); | |
$_image = array(); | |
$_alt = array(); | |
$has_epo = is_array( $item_meta ) && isset( $item_meta['_tmcartepo_data'] ) && isset( $item_meta['_tmcartepo_data'][0] ); | |
$has_epo_fee = isset( $item_meta ) && isset( $item_meta['_tmcartfee_data'] ) && isset( $item_meta['_tmcartfee_data'][0] ); | |
if ( $has_epo ) { | |
$epos = maybe_unserialize( $item_meta['_tmcartepo_data'][0] ); | |
if ( !is_array( $epos ) ) { | |
return $image; | |
} | |
if ( $epos ) { | |
foreach ( $epos as $key => $value ) { | |
if ( !empty( $value['changes_product_image'] ) ) { | |
if ( $value['changes_product_image'] == 'images' ) { | |
if ( isset( $value['use_images'] ) && $value['use_images'] == 'images' && isset( $value['images'] ) ) { | |
$_image[] = $value['images']; | |
$_alt[] = $value['value']; | |
} | |
} elseif ( $value['changes_product_image'] == 'custom' ) { | |
if ( isset( $value['imagesp'] ) ) { | |
$_image[] = $value['imagesp']; | |
$_alt[] = $value['value']; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( count( $_image ) == 0 ) { | |
if ( $has_epo_fee ) { | |
$epos = maybe_unserialize( $item_meta['_tmcartfee_data'][0] ); | |
if ( !is_array( $epos ) ) { | |
return $image; | |
} | |
if ( $epos ) { | |
foreach ( $epos as $key => $value ) { | |
if ( !empty( $value['changes_product_image'] ) ) { | |
if ( $value['changes_product_image'] == 'images' ) { | |
if ( isset( $value['use_images'] ) && $value['use_images'] == 'images' && isset( $value['images'] ) ) { | |
$_image[] = $value['images']; | |
$_alt[] = $value['value']; | |
} | |
} elseif ( $value['changes_product_image'] == 'custom' ) { | |
if ( isset( $value['imagesp'] ) ) { | |
$_image[] = $value['imagesp']; | |
$_alt[] = $value['value']; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( count( $_image ) > 0 ) { | |
$current = 0; | |
for ( $i = count( $_image ); $i > 0; $i-- ) { | |
if ( !empty( $_image[ $i ] ) ) { | |
$current = $i; | |
} | |
} | |
$size = 'shop_thumbnail'; | |
$dimensions = wc_get_image_size( $size ); | |
$image = apply_filters( 'tm_woocommerce_img', | |
'<img src="' . apply_filters( 'tm_woocommerce_img_src', $_image[ $current ] ) | |
. '" alt="' | |
. esc_attr( $_alt[ $current ] ) | |
. '" width="' . esc_attr( $dimensions['width'] ) | |
. '" class="woocommerce-placeholder wp-post-image" height="' | |
. esc_attr( $dimensions['height'] ) | |
. '" />', $size, $dimensions ); | |
} | |
return $image; | |
} | |
/** Alter the product thumbnail in cart **/ | |
public function tm_woocommerce_cart_item_thumbnail( $image = "", $cart_item = array(), $cart_item_key = "" ) { | |
$_image = array(); | |
$_alt = array(); | |
if ( isset( $cart_item['tmcartepo'] ) && is_array( $cart_item['tmcartepo'] ) ) { | |
foreach ( $cart_item['tmcartepo'] as $key => $value ) { | |
if ( !empty( $value['changes_product_image'] ) ) { | |
if ( $value['changes_product_image'] == 'images' ) { | |
if ( isset( $value['use_images'] ) && $value['use_images'] == 'images' && isset( $value['images'] ) ) { | |
$_image[] = $value['images']; | |
$_alt[] = $value['value']; | |
} | |
} elseif ( $value['changes_product_image'] == 'custom' ) { | |
if ( isset( $value['imagesp'] ) ) { | |
$_image[] = $value['imagesp']; | |
$_alt[] = $value['value']; | |
} | |
} | |
} | |
} | |
} | |
if ( count( $_image ) == 0 ) { | |
if ( isset( $cart_item['tmcartfee'] ) && is_array( $cart_item['tmcartfee'] ) ) { | |
foreach ( $cart_item['tmcartfee'] as $key => $value ) { | |
if ( !empty( $value['changes_product_image'] ) ) { | |
if ( $value['changes_product_image'] == 'images' ) { | |
if ( isset( $value['use_images'] ) && $value['use_images'] == 'images' && isset( $value['images'] ) ) { | |
$_image[] = $value['images']; | |
$_alt[] = $value['value']; | |
} | |
} elseif ( $value['changes_product_image'] == 'custom' ) { | |
if ( isset( $value['imagesp'] ) ) { | |
$_image[] = $value['imagesp']; | |
$_alt[] = $value['value']; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( count( $_image ) > 0 ) { | |
$current = 0; | |
for ( $i = count( $_image ); $i > 0; $i-- ) { | |
if ( !empty( $_image[ $i ] ) ) { | |
$current = $i; | |
} | |
} | |
$size = 'shop_thumbnail'; | |
$dimensions = wc_get_image_size( $size ); | |
$image = apply_filters( 'tm_woocommerce_img', | |
'<img src="' . apply_filters( 'tm_woocommerce_img_src', $_image[ $current ] ) | |
. '" alt="' | |
. esc_attr( $_alt[ $current ] ) | |
. '" width="' . esc_attr( $dimensions['width'] ) | |
. '" class="tc-thumbnail woocommerce-placeholder wp-post-image" height="' | |
. esc_attr( $dimensions['height'] ) | |
. '" />', $size, $dimensions ); | |
} | |
return $image; | |
} | |
/** Custom actions running for advanced template system **/ | |
public function tm_woocommerce_checkout_after_row( $cart_item_key = "", $cart_item = "", $_product = "", $product_id = "" ) { | |
$out = ''; | |
$other_data = array(); | |
if ( $this->tm_epo_hide_options_in_cart == "normal" ) { | |
$other_data = $this->get_item_data_array( array(), $cart_item ); | |
} | |
$odd = 1; | |
foreach ( $other_data as $key => $value ) { | |
$zebra_class = "odd "; | |
if ( !$odd ) { | |
$zebra_class = "even "; | |
$odd = 2; | |
} | |
$out .= '<tr class="tm-epo-cart-row ' . $zebra_class . esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ) . '">'; | |
$name = '<div class="tm-epo-cart-option-value tm-epo-cart-no-label">' . $value['tm_value'] . ' <strong class="product-quantity">' . sprintf( '× %s', $value['tm_quantity'] * $cart_item['quantity'] ) . '</strong>' . '</div>'; | |
if ( !empty( $value['tm_label'] ) ) { | |
$name = '<div class="tm-epo-cart-option-label">' . $value['tm_label'] . ' <strong class="product-quantity">' | |
. apply_filters( 'wc_tm_epo_ac_qty', sprintf( '× %s', $value['tm_quantity'] * $cart_item['quantity'] ), $cart_item_key, $cart_item, $value, $_product, $product_id ) | |
. '</strong>' . '</div>' . '<div class="tm-epo-cart-option-value">' . $value['tm_value'] . '</div>'; | |
} | |
$out .= '<td class="product-name">' . $name . '</td>'; | |
$out .= '<td class="product-subtotal">' . $value['tm_total_price'] . '</td>'; | |
$out .= '</tr>'; | |
$odd--; | |
} | |
echo $out; | |
} | |
/** Custom actions running for advanced template system **/ | |
public function tm_woocommerce_cart_after_row( $cart_item_key = "", $cart_item = "", $_product = "", $product_id = "" ) { | |
$out = ''; | |
$other_data = array(); | |
if ( $this->tm_epo_hide_options_in_cart == "normal" ) { | |
$other_data = $this->get_item_data_array( array(), $cart_item ); | |
} | |
$odd = 1; | |
foreach ( $other_data as $key => $value ) { | |
$zebra_class = "odd "; | |
if ( !$odd ) { | |
$zebra_class = "even "; | |
$odd = 2; | |
} | |
$out .= '<tr class="tm-epo-cart-row ' . $zebra_class . esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ) . '">'; | |
$out .= '<td class="product-remove"> </td>'; | |
$thumbnail = ' '; | |
$out .= '<td class="product-thumbnail">' . $thumbnail . '</td>'; | |
$name = '<div class="tm-epo-cart-option-value tm-epo-cart-no-label">' . $value['tm_value'] . '</div>'; | |
if ( !empty( $value['tm_label'] ) ) { | |
$name = '<div class="tm-epo-cart-option-label">' . $value['tm_label'] . '</div>' . '<div class="tm-epo-cart-option-value">' . $value['tm_value'] . '</div>'; | |
} | |
$out .= '<td class="product-name">' . $name . '</td>'; | |
$out .= '<td class="product-price">' . $value['tm_price'] . '</td>'; | |
$out .= '<td class="product-quantity">' . apply_filters( 'wc_tm_epo_ac_qty', $value['tm_quantity'] * $cart_item['quantity'], $cart_item_key, $cart_item, $value, $_product, $product_id ) . '</td>'; | |
$out .= '<td class="product-subtotal">' . $value['tm_total_price'] . '</td>'; | |
$out .= '</tr>'; | |
$odd--; | |
} | |
if ( is_array( $other_data ) && count( $other_data ) > 0 ) { | |
$out .= '<tr class="tm-epo-cart-row tm-epo-cart-row-total ' . esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ) . '">'; | |
$out .= '<td class="product-remove"> </td>'; | |
$out .= '<td class="product-thumbnail"> </td>'; | |
$out .= '<td class="product-name"> </td>'; | |
$out .= '<td class="product-price"> </td>'; | |
if ( $_product->is_sold_individually() ) { | |
$product_quantity = sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key ); | |
} else { | |
$product_quantity = woocommerce_quantity_input( array( | |
'input_name' => "cart[{$cart_item_key}][qty]", | |
'input_value' => $cart_item['quantity'], | |
'max_value' => $_product->backorders_allowed() ? '' : $_product->get_stock_quantity(), | |
'min_value' => '0', | |
), $_product, FALSE ); | |
} | |
$out .= '<td class="product-quantity">' . apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key ) . '</td>'; | |
$out .= '<td class="product-subtotal">' . apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ) . '</td>'; | |
$out .= '</tr>'; | |
} | |
echo $out; | |
} | |
/** Override templates for Cart advanced template system **/ | |
public function tm_wc_get_template( $located = "", $template_name = "", $args = "", $template_path = "", $default_path = "" ) { | |
$templates = array( 'cart/cart-item-data.php' ); | |
if ( $this->tm_epo_cart_field_display == "advanced" ) { | |
$templates = array_merge( $templates, array( 'cart/cart.php', 'checkout/review-order.php' ) ); | |
} | |
if ( in_array( $template_name, $templates ) ) { | |
$_located = wc_locate_template( $template_name, $this->_namespace, TM_EPO_TEMPLATE_PATH ); | |
if ( file_exists( $_located ) ) { | |
$located = $_located; | |
} | |
} | |
return $located; | |
} | |
/** Calculates the fee price **/ | |
public function cacl_fee_price( $price = "", $product_id = "", $element = FALSE, $attribute = "" ) { | |
global $woocommerce; | |
$product = wc_get_product( $product_id ); | |
if ( !$product ) { | |
return $price; | |
} | |
$taxable = $product->is_taxable(); | |
$tax_class = tc_get_tax_class( $product ); | |
if ( $element ) { | |
if ( isset( $element['include_tax_for_fee_price_type'] ) ) { | |
if ( $element['include_tax_for_fee_price_type'] == "no" ) { | |
$taxable = FALSE; | |
} | |
if ( $element['include_tax_for_fee_price_type'] == "yes" ) { | |
$taxable = TRUE; | |
} | |
} | |
if ( isset( $element['tax_class_for_fee_price_type'] ) ) { | |
$tax_class = $element['tax_class_for_fee_price_type']; | |
} | |
} | |
// Taxable | |
if ( $taxable ) { | |
if ( get_option( 'woocommerce_prices_include_tax' ) === 'yes' ) { | |
$tax_rates = WC_Tax::get_base_tax_rates( $tax_class ); | |
$taxes = WC_Tax::calc_tax( $price, $tax_rates, TRUE ); | |
$price = WC_Tax::round( $price - array_sum( $taxes ) ); | |
} | |
return $price; | |
} | |
return $price; | |
} | |
/** Support for fee price types **/ | |
public function tm_calculate_cart_fee( $cart_object = array() ) { | |
if ( is_array( $cart_object->cart_contents ) ) { | |
$to_currency = tc_get_woocommerce_currency(); | |
foreach ( $cart_object->cart_contents as $key => $value ) { | |
$tax_class = tc_get_tax_class( $value["data"] ); | |
$get_tax_status = is_callable( array( $value["data"], 'get_tax_status' ) ) ? $value["data"]->get_tax_status() : $value["data"]->tax_status; | |
if ( get_option( 'woocommerce_calc_taxes' ) == "yes" && $get_tax_status == "taxable" ) { | |
$tax = TRUE; | |
} else { | |
$tax = FALSE; | |
} | |
$tmcartfee = isset( $value['tmcartfee'] ) ? $value['tmcartfee'] : FALSE; | |
if ( $tmcartfee && is_array( $tmcartfee ) ) { | |
foreach ( $tmcartfee as $cartfee ) { | |
$new_price = $cartfee["price"]; | |
if ( isset( $cartfee['price_per_currency'] ) && isset( $cartfee['price_per_currency'][ $to_currency ] ) && $cartfee['price_per_currency'][ $to_currency ] != '' ) { | |
$new_price = (float) wc_format_decimal( $cartfee['price_per_currency'][ $to_currency ], FALSE, TRUE ); | |
} else { | |
$new_price = apply_filters( 'wc_epo_get_current_currency_price', apply_filters( 'woocommerce_tm_epo_price_on_cart', $new_price ) ); | |
} | |
if ( $cart_object->prices_include_tax ) { | |
$this_element = FALSE; | |
$builder = $this->get_product_tm_epos( tc_get_id( $value["data"] ) ); | |
foreach ( $builder['global'] as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['elements'] ) ) { | |
foreach ( $section['elements'] as $element ) { | |
if ( $element['uniqid'] == $cartfee['section'] ) { | |
$this_element = $element; | |
break 4; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
$new_price = $this->cacl_fee_price( $new_price, tc_get_id( $value["data"] ), $this_element ); | |
} | |
$new_name = $cartfee["name"]; | |
if ( empty( $new_name ) ) { | |
$new_name = __( "Extra fee", 'woocommerce-tm-extra-product-options' ); | |
} | |
$new_name .= apply_filters( 'wc_epo_fee_quantity_separator', " - " ) ; | |
if (isset($cartfee["display"])){ | |
$new_name .= $cartfee["display"]; | |
}else{ | |
$new_name .= $cartfee["value"]; | |
} | |
if ( floatval( $cartfee["quantity"] ) > 1 ) { | |
$new_name .= apply_filters( 'wc_epo_fee_quantity_times', " × " ) . $cartfee["quantity"]; | |
} | |
$canbadded = TRUE; | |
if ( is_array( $cart_object->fees ) ) { | |
foreach ( $cart_object->fees as $fee ) { | |
if ( $fee->id == sanitize_title( $new_name ) ) { | |
if ( apply_filters( 'wc_epo_add_same_fee', TRUE, $new_price, $fee->amount) ) { | |
$fee->amount = $fee->amount + (float) $new_price; | |
} | |
$canbadded = FALSE; | |
break; | |
} | |
} | |
} | |
if ( $canbadded ) { | |
$current_tax = $tax; | |
$current_tax_class = $tax_class; | |
if ( isset( $cartfee["include_tax_for_fee_price_type"] ) && $cartfee["include_tax_for_fee_price_type"] !== '' ) { | |
if ( $cartfee["include_tax_for_fee_price_type"] == "yes" ) { | |
$current_tax = TRUE; | |
} elseif ( $cartfee["include_tax_for_fee_price_type"] == "no" ) { | |
$current_tax = FALSE; | |
} | |
} | |
if ( isset( $cartfee["tax_class_for_fee_price_type"] ) && $cartfee["tax_class_for_fee_price_type"] !== '' ) { | |
$current_tax_class = $cartfee["tax_class_for_fee_price_type"]; | |
} | |
$cart_object->add_fee( $new_name, $new_price, $current_tax, $current_tax_class ); | |
} | |
} | |
} | |
} | |
} | |
} | |
/** Check if the plugin is active for the user **/ | |
public function check_enable() { | |
$enable = FALSE; | |
$enabled_roles = $this->tm_epo_roles_enabled; | |
$disabled_roles = $this->tm_epo_roles_disabled; | |
if ( isset( $this->tm_meta_cpf['override_enabled_roles'] ) && $this->tm_meta_cpf['override_enabled_roles'] !== "" ) { | |
$enabled_roles = $this->tm_meta_cpf['override_enabled_roles']; | |
} | |
if ( isset( $this->tm_meta_cpf['override_disabled_roles'] ) && $this->tm_meta_cpf['override_disabled_roles'] !== "" ) { | |
$disabled_roles = $this->tm_meta_cpf['override_disabled_roles']; | |
} | |
// Get all roles | |
$current_user = wp_get_current_user(); | |
if ( !is_array( $enabled_roles ) ) { | |
$enabled_roles = array( $enabled_roles ); | |
} | |
if ( !is_array( $disabled_roles ) ) { | |
$disabled_roles = array( $disabled_roles ); | |
} | |
//Check if plugin is enabled for everyone | |
foreach ( $enabled_roles as $key => $value ) { | |
if ( $value == "@everyone" ) { | |
$enable = TRUE; | |
} | |
if ( $value == "@loggedin" && is_user_logged_in() ) { | |
$enable = TRUE; | |
} | |
} | |
if ( $current_user instanceof WP_User ) { | |
$roles = $current_user->roles; | |
// Check if plugin is enabled for current user | |
if ( is_array( $roles ) ) { | |
foreach ( $roles as $key => $value ) { | |
if ( in_array( $value, $enabled_roles ) ) { | |
$enable = TRUE; | |
break; | |
} | |
} | |
foreach ( $roles as $key => $value ) { | |
if ( in_array( $value, $disabled_roles ) ) { | |
$enable = FALSE; | |
break; | |
} | |
} | |
} | |
} | |
return $enable; | |
} | |
/** Check if we are on a supported quickview mode **/ | |
public function is_quick_view() { | |
return apply_filters( 'woocommerce_tm_quick_view', FALSE ); | |
} | |
/** Check if the setting "Enable plugin for WooCommerce shortcodes" is active **/ | |
public function is_enabled_shortcodes() { | |
return ($this->tm_epo_enable_shortcodes == "yes"); | |
} | |
/** | |
* @param string $price | |
* @param string $type | |
* @return mixed|void | |
*/ | |
public function tm_epo_price_filtered( $price = "", $type = "" ) { | |
return apply_filters( 'wc_epo_get_current_currency_price', $price, $type ); | |
} | |
/** For hiding uploaded file path **/ | |
public function tm_order_item_display_meta_value( $value = "", $override = 0 ) { | |
$original_value = $value; | |
if ( is_array( $value ) ) { | |
$new_value = array(); | |
foreach ( $value as $k => $v ) { | |
if ( is_array( $v ) ) { | |
foreach ( $v as $k2 => $v2 ) { | |
$original_value = $v2; | |
$found = (strpos( $v2, $this->upload_dir ) !== FALSE); | |
if ( ($found && empty( $override )) || !empty( $override ) ) { | |
if ( $this->tm_epo_hide_upload_file_path != 'no' && filter_var( filter_var( $v2, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH ), FILTER_VALIDATE_URL ) ) { | |
$v2 = mb_basename( $v2 ); | |
} | |
} | |
if ( !empty( $override ) ) { | |
$v2 = '<a href="' . $original_value . '">' . $v2 . '</a>'; | |
} | |
$v[ $k2 ] = $v2; | |
} | |
} else { | |
$original_value = $v; | |
$found = (strpos( $v, $this->upload_dir ) !== FALSE); | |
if ( ($found && empty( $override )) || !empty( $override ) ) { | |
if ( $this->tm_epo_hide_upload_file_path != 'no' && filter_var( filter_var( $v, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH ), FILTER_VALIDATE_URL ) ) { | |
$v = mb_basename( $v ); | |
} | |
} | |
if ( !empty( $override ) ) { | |
$v = '<a href="' . $original_value . '">' . $v . '</a>'; | |
} | |
} | |
$new_value[ $k ] = $v; | |
} | |
$value = $new_value; | |
} else { | |
$found = (strpos( $value, $this->upload_dir ) !== FALSE); | |
if ( ($found && empty( $override )) || !empty( $override ) ) { | |
if ( $this->tm_epo_hide_upload_file_path != 'no' && filter_var( filter_var( $value, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH ), FILTER_VALIDATE_URL ) ) { | |
$value = mb_basename( $value ); | |
} | |
} | |
if ( !empty( $override ) ) { | |
$value = '<a href="' . $original_value . '">' . $value . '</a>'; | |
} | |
} | |
if ( is_array( $value ) ) { | |
$value = implode( ",", $value ); | |
} | |
return $value; | |
} | |
/** Enable shortcodes for labels **/ | |
public function tm_epo_option_name( $label = "", $args = NULL, $counter = NULL, $value = NULL, $vlabel = NULL ) { | |
if ( $this->tm_epo_show_price_inside_option == 'yes' && | |
$value !== NULL && | |
$vlabel !== NULL && | |
isset( $args['rules_type'] ) && | |
isset( $args['rules_type'][ $value ] ) && | |
isset( $args['rules_type'][ $value ][0] ) && | |
empty( $args['rules_type'][ $value ][0] ) | |
) { | |
$display_price = (isset( $args['rules_filtered'][ $value ][0] )) ? $args['rules_filtered'][ $value ][0] : ''; | |
if ( $display_price !== '' || $this->tm_epo_auto_hide_price_if_zero == 'no' ) { | |
$symbol = ''; | |
if ( $this->tm_epo_global_price_sign == '' ) { | |
$symbol = apply_filters( 'wc_epo_price_in_dropdown_plus_sign', "+" ); | |
} | |
if ( floatval( $display_price ) < 0 ) { | |
$symbol = apply_filters( 'wc_epo_price_in_dropdown_minus_sign', "-" ); | |
} | |
$display_price = apply_filters( 'wc_epo_price_in_dropdown', ' (' . $symbol . wc_price( abs( $display_price ) ) . ')', $display_price ); | |
} | |
$label .= $display_price; | |
} | |
return do_shortcode( $label ); | |
} | |
/** Alters the Free label html **/ | |
public function get_price_html( $price = "", $product = "" ) { | |
if ( $product && is_object( $product ) && is_callable( array( $product, "get_price" ) ) ) { | |
if ( (float) $product->get_price() > 0 ) { | |
return $price; | |
} else { | |
return sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} | |
} else { | |
return sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} | |
} | |
/** Fix for related products when replacing free label **/ | |
public function related_get_price_html( $price = "", $product = "" ) { | |
if ( $product && is_object( $product ) && is_callable( array( $product, "get_price" ) ) ) { | |
if ( (float) $product->get_price() > 0 ) { | |
return $price; | |
} else { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
return sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} else { | |
$price = ''; | |
} | |
} | |
} else { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
return sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} else { | |
$price = ''; | |
} | |
} | |
return $price; | |
} | |
/** Fix for related products when replacing free label **/ | |
public function related_get_price_html2( $price = "", $product = "" ) { | |
if ( $product && is_object( $product ) && is_callable( array( $product, "get_price" ) ) ) { | |
if ( (float) $product->get_price() > 0 ) { | |
return $price; | |
} else { | |
$thiscpf = $this->get_product_tm_epos( tc_get_id( $product ) ); | |
if ( is_array( $thiscpf ) && (!empty( $thiscpf['global'] ) || !empty( $thiscpf['local'] )) ) { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
return sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} else { | |
$price = ''; | |
} | |
} | |
} | |
} | |
return $price; | |
} | |
/** Free label text replacement **/ | |
public function get_price_html_shop( $price = "", $product = "" ) { | |
if ( $product && | |
is_object( $product ) && is_callable( array( $product, "get_price" ) ) | |
&& !(float) $product->get_price() > 0 | |
) { | |
if ( $this->tm_epo_replacement_free_price_text ) { | |
$price = sprintf( $this->tm_epo_replacement_free_price_text, $price ); | |
} else { | |
$price = ''; | |
} | |
} | |
return $price; | |
} | |
/** Replaces add to cart text when the force select setting is enabled **/ | |
public function add_to_cart_text( $text = "" ) { | |
global $product; | |
if ( is_product() && !$this->in_related_upsells ) { | |
return $text; | |
} | |
if ( $this->tm_epo_enable_in_shop == "no" | |
&& $this->tm_epo_force_select_options == "display" | |
&& is_object( $product ) | |
&& property_exists( $product, 'id' ) | |
) { | |
$has_epo = TM_EPO_API()->has_options( tc_get_id( $product ) ); | |
if ( TM_EPO_API()->is_valid_options( $has_epo ) ) { | |
$text = (!empty( $this->tm_epo_force_select_text )) ? $this->tm_epo_force_select_text : __( 'Select options', 'woocommerce-tm-extra-product-options' ); | |
} | |
} | |
if ( $this->tm_epo_enable_in_shop == "yes" && !$this->in_related_upsells ) { | |
$text = esc_attr__( 'Add to cart', 'woocommerce' ); | |
} | |
return $text; | |
} | |
/** Prevenets ajax add to cart when product has extra options and the force select setting is enabled **/ | |
public function add_to_cart_url( $url = "" ) { | |
global $product; | |
if ( !is_product() | |
&& $this->tm_epo_force_select_options == "display" | |
&& is_object( $product ) | |
&& property_exists( $product, 'id' ) | |
) { | |
$has_epo = TM_EPO_API()->has_options( tc_get_id( $product ) ); | |
if ( TM_EPO_API()->is_valid_options( $has_epo ) ) { | |
$url = get_permalink( tc_get_id( $product ) ); | |
} | |
} | |
return $url; | |
} | |
public function woocommerce_cart_redirect_after_error( $url = "", $product_id="" ) { | |
$product = wc_get_product($product_id); | |
if ( $this->tm_epo_force_select_options == "display" | |
&& is_object( $product ) | |
&& property_exists( $product, 'id' ) | |
) { | |
$has_epo = TM_EPO_API()->has_options( tc_get_id( $product ) ); | |
if ( TM_EPO_API()->is_valid_options( $has_epo ) ) { | |
$url = get_permalink( tc_get_id( $product ) ); | |
} | |
} | |
return $url; | |
} | |
/** Empties the cart **/ | |
public function tm_empty_cart() { | |
if ( !isset( WC()->cart ) || WC()->cart == '' ) { | |
WC()->cart = new WC_Cart(); | |
} | |
WC()->cart->empty_cart( TRUE ); | |
} | |
/** Empties the cart **/ | |
public function clear_cart() { | |
if ( isset( $_POST['tm_empty_cart'] ) ) { | |
$this->tm_empty_cart(); | |
} | |
} | |
/** Adds the Empty cart button **/ | |
public function add_empty_cart_button() { | |
//todo:move this to a template | |
$text = (!empty( $this->tm_epo_empty_cart_text )) ? $this->tm_epo_empty_cart_text : __( 'Empty cart', 'woocommerce-tm-extra-product-options' ); | |
echo '<input type="submit" class="tm-clear-cart-button button" name="tm_empty_cart" value="' . $text . '" />'; | |
} | |
/** Sets current product settings **/ | |
public function set_tm_meta( $override_id = 0 ) { | |
if ( empty( $override_id ) ) { | |
if ( isset( $_REQUEST['add-to-cart'] ) ) { | |
$override_id = $_REQUEST['add-to-cart']; | |
} else { | |
global $post; | |
if ( !is_null( $post ) && property_exists( $post, 'ID' ) && property_exists( $post, 'post_type' ) ) { | |
if ( $post->post_type != "product" ) { | |
return; | |
} | |
$override_id = $post->ID; | |
} | |
} | |
} | |
if ( empty( $override_id ) ) { | |
return; | |
} | |
// translated products inherit original product meta overrides | |
$override_id = floatval( TM_EPO_WPML()->get_original_id( $override_id, 'product' ) ); | |
$this->tm_meta_cpf = tc_get_post_meta( $override_id, 'tm_meta_cpf', TRUE ); | |
if ( !is_array( $this->tm_meta_cpf ) ) { | |
$this->tm_meta_cpf = array(); | |
} | |
foreach ( $this->meta_fields as $key => $value ) { | |
$this->tm_meta_cpf[ $key ] = isset( $this->tm_meta_cpf[ $key ] ) ? $this->tm_meta_cpf[ $key ] : $value; | |
} | |
$this->tm_meta_cpf['metainit'] = 1; | |
} | |
/** | |
* @param $tmcp | |
* @return string | |
*/ | |
public function get_element_price_type( $tmcp ) { | |
$price_type = ""; | |
$key = isset( $tmcp['key'] ) ? $tmcp['key'] : 0; | |
if ( !isset( $tmcp['element']['rules_type'][ $key ] ) ) {// field price rule | |
if ( isset( $tmcp['element']['rules_type'][0][0] ) ) {// general rule | |
$price_type = $tmcp['element']['rules_type'][0][0]; | |
} | |
} else { | |
if ( isset( $tmcp['element']['rules_type'][ $key ][0] ) ) {// general field variation rule | |
$price_type = $tmcp['element']['rules_type'][ $key ][0]; | |
} elseif ( isset( $tmcp['element']['rules_type'][0][0] ) ) {// general rule | |
$price_type = $tmcp['element']['rules_type'][0][0]; | |
} | |
} | |
return $price_type; | |
} | |
/** Modifies the cart item. **/ | |
public function add_cart_item( $cart_item = array() ) { | |
/* | |
* The following logic ensures that the correct price is being calculated | |
* when currency or product price is being changed from various | |
* 3rd part plugins. | |
*/ | |
$cart_item['tm_epo_product_original_price'] = apply_filters( 'wc_epo_add_cart_item_original_price', $cart_item['data']->get_price(), $cart_item ); | |
$cart_item['tm_epo_options_prices'] = 0; | |
$cart_item['tm_epo_product_price_with_options'] = $cart_item['tm_epo_product_original_price']; | |
if ( !empty( $cart_item['tmcartepo'] ) ) { | |
$tmcp_prices = 0; | |
$tmcp_static_prices = 0; | |
$tmcp_variable_prices = 0; // percentcurrenttotal | |
$tmcp_variable_prices2 = 0; // percent | |
$to_currency = tc_get_woocommerce_currency(); | |
if ( is_array( $cart_item['tmcartepo'] ) ) { | |
foreach ( $cart_item['tmcartepo'] as $tmcp ) { | |
if ( isset( $tmcp['subscription_fees'] ) ) { | |
continue; | |
} | |
$_price_type = $this->get_element_price_type( $tmcp ); | |
if ( isset( $tmcp['price_per_currency'] ) && isset( $tmcp['price_per_currency'][ $to_currency ] ) && $tmcp['price_per_currency'][ $to_currency ] != '' ) { | |
$tmcp['price'] = apply_filters( 'woocommerce_tm_epo_price_per_currency_diff', (float) wc_format_decimal( $tmcp['price_per_currency'][ $to_currency ], FALSE, TRUE ), $to_currency ); | |
$tmcp_prices += $tmcp['price']; | |
if ( $_price_type == "percentcurrenttotal" ) { | |
$tmcp_variable_prices += $tmcp['price']; | |
} elseif ( $_price_type == "percent" ) { | |
$tmcp_variable_prices2 += $tmcp['price']; | |
} else { | |
$tmcp_static_prices += $tmcp['price']; | |
} | |
} else { | |
$tmcp['price'] = (float) wc_format_decimal( $tmcp['price'], FALSE, TRUE ); | |
$tmcp_prices += apply_filters( 'woocommerce_tm_epo_price_add_on_cart', $tmcp['price'], $_price_type ); | |
if ( $_price_type == "percentcurrenttotal" ) { | |
$tmcp_variable_prices += $tmcp['price']; | |
} elseif ( $_price_type == "percent" ) { | |
$tmcp_variable_prices2 += $tmcp['price']; | |
} else { | |
$tmcp_static_prices += apply_filters( 'woocommerce_tm_epo_price_add_on_cart', $tmcp['price'], $_price_type ); | |
} | |
} | |
} | |
} | |
$cart_item['tm_epo_options_static_prices'] = $tmcp_static_prices; | |
if ( !empty( $cart_item['tmpost_data'] ) && tc_get_product_type( $cart_item['data'] ) !== "composite" ) { | |
$post_data = $cart_item['tmpost_data']; | |
if ( isset( $cart_item['tm_epo_options_static_prices'] ) ) { | |
$post_data['tm_epo_options_static_prices'] = $cart_item['tm_epo_options_static_prices']; | |
} | |
// todo:check for a better alternative | |
if (!isset($post_data['cpf_product_price'])){ | |
$post_data['cpf_product_price'] = $cart_item['tm_epo_product_original_price']; | |
} | |
$post_data['cpf_product_price'] = apply_filters( 'wc_epo_add_cart_item_original_price', $post_data['cpf_product_price'], $cart_item ); | |
$cart_item = $this->repopulatecart( $cart_item, tc_get_id( $cart_item['data'] ), $post_data ); | |
if ( $cart_item === FALSE ) { | |
return array(); | |
} | |
$cart_item = apply_filters( 'tm_cart_contents', $cart_item, array() ); | |
} | |
if ( is_array( $cart_item['tmcartepo'] ) ) { | |
$tmcp_variable_prices = 0; | |
$tmcp_variable_prices2 = 0; | |
foreach ( $cart_item['tmcartepo'] as $tmcp ) { | |
if ( isset( $tmcp['subscription_fees'] ) ) { | |
continue; | |
} | |
$_price_type = $this->get_element_price_type( $tmcp ); | |
if ( $_price_type == "percentcurrenttotal" ) { | |
$tmcp_variable_prices += $tmcp['price']; | |
} | |
if ( $_price_type == "percent" ) { | |
$tmcp_variable_prices2 += $tmcp['price']; | |
} | |
} | |
} | |
$tmcp_prices = apply_filters( 'wc_epo_cart_options_prices', $tmcp_static_prices + $tmcp_variable_prices + $tmcp_variable_prices2, $cart_item ); | |
$cart_item['tm_epo_options_prices'] = $tmcp_prices; | |
$price1 = wc_format_decimal( apply_filters( 'wc_epo_option_price_correction', $tmcp_prices, $cart_item ) ); | |
$price2 = (float) wc_format_decimal( | |
apply_filters( 'wc_epo_product_price_correction', | |
wc_format_decimal( $cart_item['tm_epo_product_original_price'] ), | |
$cart_item ) ) | |
+ (float) $price1; | |
$price1 = wc_format_decimal( apply_filters( 'wc_epo_add_cart_item_calculated_price1', $price1, $cart_item ) ); | |
$price2 = wc_format_decimal( apply_filters( 'wc_epo_add_cart_item_calculated_price2', $price2, $cart_item ) ); | |
if ( apply_filters( 'wc_epo_adjust_price', TRUE, $cart_item ) ) { | |
if ( !empty( $cart_item['epo_price_override'] ) && $tmcp_prices > 0 ) { | |
// setting price twice for compatibility | |
$cart_item['data']->set_price( $price1 ); | |
$cart_item = apply_filters( 'wc_epo_cart_set_price', $cart_item, $price1 ); | |
} else { | |
// setting price twice for compatibility | |
$cart_item['data']->set_price( $price2 ); | |
$cart_item = apply_filters( 'wc_epo_cart_set_price', $cart_item, $price2 ); | |
} | |
} | |
$cart_item['tm_epo_product_price_with_options'] = $cart_item['data']->get_price(); | |
} | |
if ( floatval( apply_filters( 'tm_epo_cart_options_prices', $cart_item['tm_epo_product_price_with_options'], $cart_item ) ) < 0 ) { | |
if ( $this->tm_epo_no_negative_priced_products == "yes" ) { | |
throw new Exception( __( "You cannot add negative priced products to the cart.", 'woocommerce-tm-extra-product-options' ) ); | |
} | |
} | |
if ( floatval( apply_filters( 'tm_epo_no_zero_priced_products', $cart_item['tm_epo_product_price_with_options'], $cart_item ) ) == 0 ) { | |
if ( $this->tm_epo_no_zero_priced_products == "yes" ) { | |
throw new Exception( __( "You cannot add zero priced products to the cart.", 'woocommerce-tm-extra-product-options' ) ); | |
} | |
} | |
// variation slug-to-name-for order again | |
if ( isset( $cart_item["variation"] ) && is_array( $cart_item["variation"] ) ) { | |
$_variation_name_fix = array(); | |
$_temp = array(); | |
foreach ( $cart_item["variation"] as $meta_name => $meta_value ) { | |
if ( strpos( $meta_name, "attribute_" ) !== 0 ) { | |
$_variation_name_fix[ "attribute_" . $meta_name ] = $meta_value; | |
$_temp[ $meta_name ] = $meta_value; | |
} | |
} | |
$cart_item["variation"] = array_diff_key( $cart_item["variation"], $_temp ); | |
$cart_item["variation"] = array_merge( $cart_item["variation"], $_variation_name_fix ); | |
} | |
return apply_filters( "wc_epo_adjust_cart_item", $cart_item ); | |
} | |
/** Gets the cart from session. **/ | |
public function get_cart_item_from_session( $cart_item = array(), $values = array() ) { | |
$this->is_get_from_session = TRUE; | |
if ( !empty( $values['tmcartepo'] ) ) { | |
$cart_item['tmcartepo'] = $values['tmcartepo']; | |
$cart_item = $this->add_cart_item( $cart_item ); | |
if ( empty( $cart_item['addons'] ) && !empty( $cart_item['tm_epo_options_prices'] ) ) { | |
$cart_item['addons'] = array( "epo" => TRUE, 'price' => 0 ); | |
} | |
} | |
if ( !empty( $values['tmcartepo_bto'] ) ) { | |
$cart_item['tmcartepo_bto'] = $values['tmcartepo_bto']; | |
} | |
if ( !empty( $values['tmsubscriptionfee'] ) ) { | |
$cart_item['tmsubscriptionfee'] = $values['tmsubscriptionfee']; | |
} | |
if ( !empty( $values['tmcartfee'] ) ) { | |
$cart_item['tmcartfee'] = $values['tmcartfee']; | |
} | |
if ( !empty( $values['tmpost_data'] ) ) { | |
$cart_item['tmpost_data'] = $values['tmpost_data']; | |
} | |
return apply_filters( 'tm_cart_contents', $cart_item, $values ); | |
} | |
/** Returns correct formated price for the cart table **/ | |
public function get_price_for_cart( $price = 0, $cart_item = array(), $symbol = FALSE, $currencies = NULL, $quantity_divide = 0, $quantity = 0, $price_type = "" ) { | |
global $woocommerce; | |
$product = $cart_item['data']; | |
$cart = $woocommerce->cart; | |
$taxable = $product->is_taxable(); | |
$tax_display_cart = $cart->tax_display_cart; | |
$tax_string = ""; | |
if ( $price === FALSE ) { | |
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7.0', '<' ) ) { | |
if ( is_object( $product ) && property_exists( $product, "price" ) ) { | |
$price = $cart_item['data']->price; | |
} else { | |
$price = $product->price; | |
} | |
} else { | |
$price = $product->get_price(); | |
} | |
} | |
if ( is_array( $price_type ) ) { | |
$price_type = array_values( $price_type ); | |
$price_type = $price_type[0]; | |
} | |
$price = apply_filters( 'woocommerce_tm_epo_price_on_cart', $price ); | |
// Taxable | |
if ( $taxable ) { | |
if ( $tax_display_cart == 'excl' ) { | |
if ( $cart->tax_total > 0 && $cart->prices_include_tax ) { | |
$tax_string = ' <small>' . apply_filters( 'wc_epo_ex_tax_or_vat_string', WC()->countries->ex_tax_or_vat() ) . '</small>'; | |
} | |
if ( floatval( $price ) != 0 ) { | |
$price = tc_get_price_excluding_tax( $product, array( 'qty' => 10000, 'price' => $price ) ) / 10000; | |
} | |
} else { | |
if ( $cart->tax_total > 0 && !$cart->prices_include_tax ) { | |
$tax_string = ' <small>' . apply_filters( 'inc_tax_or_vat', WC()->countries->inc_tax_or_vat() ) . '</small>'; | |
} | |
if ( floatval( $price ) != 0 ) { | |
$price = tc_get_price_including_tax( $product, array( 'qty' => 10000, 'price' => $price ) ) / 10000; | |
} | |
} | |
} | |
if ( $symbol === FALSE ) { | |
if ( $this->tm_epo_global_price_sign == '' && $this->tm_epo_cart_field_display != "advanced" ) { | |
$symbol = apply_filters( 'wc_epo_get_price_for_cart_plus_sign', "<span class='tc-plus-sign'>+</span>" ); | |
} | |
if ( floatval( $price ) < 0 ) { | |
$symbol = apply_filters( 'wc_epo_get_price_for_cart_minus_sign', "<span class='tc-minus-sign'>-</span>" ); | |
} | |
} | |
if ( !empty( $quantity ) ) { | |
$price = floatval( $price ) * floatval( $quantity ); | |
} | |
if ( floatval( $price ) == 0 ) { | |
$symbol = ""; | |
} else { | |
$price = apply_filters( 'wc_epo_get_price_for_cart_price', ' <span>' . (tc_price( abs( $price ) )) . '</span>', $price = 0, $cart_item, $symbol, $currencies, $quantity_divide, $quantity, $price_type ); | |
$symbol = apply_filters( 'wc_epo_get_price_for_cart_symbol', " $symbol" . $price . $tax_string, $symbol, $price, $tax_string, $cart_item, $symbol, $currencies, $quantity_divide, $quantity, $price_type ); | |
if ( $this->tm_epo_strip_html_from_emails == "yes" ) { | |
$symbol = strip_tags( $symbol ); | |
} | |
} | |
return apply_filters( 'wc_epo_get_price_for_cart', $symbol, $price = 0, $cart_item, $symbol, $currencies, $quantity_divide, $quantity, $price_type ); | |
} | |
/** Helper function for filtered_get_item_data **/ | |
private function filtered_get_item_data_get_array_data( $tmcp = array() ) { | |
return array( | |
'label' => $tmcp['section_label'], | |
'type' => isset( $tmcp['element'] ) && isset( $tmcp['element']['type'] ) ? $tmcp['element']['type'] : '', | |
'other_data' => array( | |
array( | |
'name' => $tmcp['name'], | |
'value' => $tmcp['value'], | |
'price_type' => isset( $tmcp['element'] ) ? (isset( $tmcp['key'] ) ? $tmcp['element']['rules_type'][ $tmcp['key'] ][0] : $tmcp['element']['rules_type'][0]) : '', | |
'unit_price' => $tmcp['price'], | |
'unit_price_per_currency' => (isset( $tmcp['price_per_currency'] )) ? $tmcp['price_per_currency'] : array(), | |
'display' => isset( $tmcp['display'] ) ? $tmcp['display'] : '', | |
'images' => isset( $tmcp['images'] ) ? $tmcp['images'] : '', | |
'color' => isset( $tmcp['color'] ) ? $tmcp['color'] : '', | |
'quantity' => isset( $tmcp['quantity'] ) ? $tmcp['quantity'] : 1, | |
) ), | |
'price' => $tmcp['price'], | |
'currencies' => isset( $tmcp['currencies'] ) ? $tmcp['currencies'] : array(), | |
'price_per_currency' => isset( $tmcp['price_per_currency'] ) ? $tmcp['price_per_currency'] : array(), | |
'quantity' => isset( $tmcp['quantity'] ) ? $tmcp['quantity'] : 1, | |
'percentcurrenttotal' => isset( $tmcp['percentcurrenttotal'] ) ? $tmcp['percentcurrenttotal'] : 0, | |
'items' => 1, | |
'multiple_values' => isset( $tmcp['multiple_values'] ) ? $tmcp['multiple_values'] : '', | |
'hidelabelincart' => isset( $tmcp['hidelabelincart'] ) ? $tmcp['hidelabelincart'] : '', | |
'hidevalueincart' => isset( $tmcp['hidevalueincart'] ) ? $tmcp['hidevalueincart'] : '', | |
); | |
} | |
/** Filters our cart items. **/ | |
private function filtered_get_item_data( $cart_item = array() ) { | |
$to_currency = tc_get_woocommerce_currency(); | |
$filtered_array = array(); | |
if ( isset( $cart_item['tmcartepo'] ) && is_array( $cart_item['tmcartepo'] ) ) { | |
foreach ( $cart_item['tmcartepo'] as $tmcp ) { | |
if ( $tmcp ) { | |
if ( isset( $tmcp['price_per_currency'] ) && isset( $tmcp['price_per_currency'][ $to_currency ] ) && $tmcp['price_per_currency'][ $to_currency ] !== '' ) { | |
$tmcp['price'] = (float) wc_format_decimal( $tmcp['price_per_currency'][ $to_currency ], FALSE, TRUE ); | |
} else { | |
$tmcp['price'] = (float) wc_format_decimal( $tmcp['price'], FALSE, TRUE ); | |
$tmcp['price'] = apply_filters( 'wc_epo_get_current_currency_price', $tmcp['price'], isset( $tmcp['element'] ) ? $tmcp['element']['rules_type'][ isset( $tmcp['key'] ) ? $tmcp['key'] : 0 ][0] : '' ); | |
} | |
if ( !isset( $filtered_array[ $tmcp['section'] ] ) ) { | |
$filtered_array[ $tmcp['section'] ] = $this->filtered_get_item_data_get_array_data( $tmcp ); | |
} else { | |
if ( $this->tm_epo_cart_field_display == "advanced" || $this->tm_epo_cart_field_display == "link" ) { | |
$filtered_array[ $tmcp['section'] . "_" . TM_EPO_HELPER()->tm_uniqid() ] = $this->filtered_get_item_data_get_array_data( $tmcp ); | |
} else { | |
$filtered_array[ $tmcp['section'] ]['items'] += 1; | |
$filtered_array[ $tmcp['section'] ]['price'] += $tmcp['price']; | |
if ( isset( $tmcp['price_per_currency'] ) ) { | |
$filtered_array[ $tmcp['section'] ]['price_per_currency'] = TM_EPO_HELPER()->add_array_values( $filtered_array[ $tmcp['section'] ]['price_per_currency'], $tmcp['price_per_currency'] ); | |
} | |
$filtered_array[ $tmcp['section'] ]['quantity'] += isset( $tmcp['quantity'] ) ? $tmcp['quantity'] : 1; | |
$filtered_array[ $tmcp['section'] ]['other_data'][] = array( | |
'name' => $tmcp['name'], | |
'value' => $tmcp['value'], | |
'price_type' => isset( $tmcp['element'] ) ? (isset( $tmcp['key'] ) ? $tmcp['element']['rules_type'][ $tmcp['key'] ][0] : $tmcp['element']['rules_type'][0]) : '', | |
'unit_price' => $tmcp['price'], | |
'unit_price_per_currency' => (isset( $tmcp['price_per_currency'] )) ? $tmcp['price_per_currency'] : array(), | |
'display' => isset( $tmcp['display'] ) ? $tmcp['display'] : '', | |
'images' => isset( $tmcp['images'] ) ? $tmcp['images'] : '', | |
'color' => isset( $tmcp['color'] ) ? $tmcp['color'] : '', | |
'quantity' => isset( $tmcp['quantity'] ) ? $tmcp['quantity'] : 1, | |
); | |
} | |
} | |
} | |
} | |
} | |
return $filtered_array; | |
} | |
/** Return formatted cart items **/ | |
public function get_item_data_array( $other_data, $cart_item = array() ) { | |
$filtered_array = $this->filtered_get_item_data( $cart_item ); | |
$price = 0; | |
$link_data = array(); | |
$quantity = $cart_item['quantity']; | |
if ( is_array( $filtered_array ) ) { | |
foreach ( $filtered_array as $section ) { | |
$value = array(); | |
$quantity_string_shown = FALSE; | |
$format_price_shown = FALSE; | |
$do_unique_values = FALSE; | |
$prev_unit_price = FALSE; | |
$prev_unit_quantity = FALSE; | |
$dont_show_mass_quantity = FALSE; | |
$format_price = ""; | |
if ( isset( $section['other_data'] ) && is_array( $section['other_data'] ) ) { | |
foreach ( $section['other_data'] as $key => $data ) { | |
if ( empty( $data['quantity'] ) ) { | |
continue; | |
} | |
$display_value = !empty( $data['display'] ) ? $data['display'] : $data['value']; | |
if ( !empty( $data['images'] ) && $this->tm_epo_show_image_replacement == "yes" ) { | |
if ( $this->tm_epo_hide_options_prices_in_cart == "normal" ) { | |
$original_price = $data['unit_price'] / $data['quantity']; | |
$new_price = apply_filters( 'wc_epo_discounted_price', $data['unit_price'], $cart_item['data'], $cart_item[ $this->cart_edit_key_var ] ); | |
$after_price = $new_price / $data['quantity']; | |
$format_price = $this->get_price_for_cart( $after_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
if ( $original_price != $after_price ) { | |
$original_price = $this->get_price_for_cart( $original_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
$format_price = '<span class="rp_wcdpd_cart_price"><del>' . $original_price . '</del> <ins>' . $format_price . '</ins></span>'; | |
} | |
$format_price_shown = TRUE; | |
} else { | |
$format_price = ''; | |
} | |
$quantity_string = ($data['quantity'] > 1) ? ' × ' . $data['quantity'] : ''; | |
$display_value = '<span class="cpf-img-on-cart"><img alt="" class="attachment-shop_thumbnail wp-post-image epo-option-image" src="' . | |
apply_filters( "tm_image_url", $data['images'] ) . '" />' . $display_value . '<small>' . $format_price . $quantity_string . '</small></span>'; | |
$quantity_string_shown = TRUE; | |
} elseif ( !empty( $data['color'] ) && $this->tm_epo_show_image_replacement == "yes" ) { | |
if ( $this->tm_epo_hide_options_prices_in_cart == "normal" ) { | |
$original_price = $data['unit_price'] / $data['quantity']; | |
$new_price = apply_filters( 'wc_epo_discounted_price', $data['unit_price'], $cart_item['data'], $cart_item[ $this->cart_edit_key_var ] ); | |
$after_price = $new_price / $data['quantity']; | |
$format_price = $this->get_price_for_cart( $after_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
if ( $original_price != $after_price ) { | |
$original_price = $this->get_price_for_cart( $original_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
$format_price = '<span class="rp_wcdpd_cart_price"><del>' . $original_price . '</del> <ins>' . $format_price . '</ins></span>'; | |
} | |
$format_price_shown = TRUE; | |
} else { | |
$format_price = ''; | |
} | |
$quantity_string = ($data['quantity'] > 1) ? ' × ' . $data['quantity'] : ''; | |
$display_value = '<span class="cpf-colors-on-cart"><span class="cpf-color-on-cart" style="background-color:' . $data['color'] . ';"></span> ' . $display_value . '<small>' . $format_price . $quantity_string . '</small></span>'; | |
$quantity_string_shown = TRUE; | |
} else { | |
if ( $prev_unit_quantity === FALSE ) { | |
$prev_unit_quantity = $data['quantity']; | |
} | |
if ( $prev_unit_price === FALSE ) { | |
$prev_unit_price = $data['unit_price']; | |
} elseif ( $prev_unit_price !== $data['unit_price'] || $prev_unit_quantity != $data['quantity'] || $data['quantity'] > 1 ) { | |
$do_unique_values = TRUE; | |
if ( $this->tm_epo_hide_options_prices_in_cart == "normal" ) { | |
break; | |
} else { | |
$dont_show_mass_quantity = TRUE; | |
} | |
} | |
$prev_unit_price = $data['unit_price']; | |
$prev_unit_quantity = $data['quantity']; | |
} | |
if ( $section['type'] == "upload" ) { | |
$check = wp_check_filetype( $data['value'] ); | |
if ( !empty( $check['ext'] ) ) { | |
$image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' ); | |
if ( in_array( $check['ext'], $image_exts ) ) { | |
$display_value = '<span class="cpf-img-on-cart"><img alt="" class="attachment-shop_thumbnail wp-post-image epo-option-image epo-upload-image" src="' . | |
apply_filters( "tm_image_url", $data['value'] ) . '" /><span>'; | |
} | |
} | |
} | |
$value[] = $display_value; | |
} | |
if ( !empty( $section['multiple_values'] ) ) { | |
$do_unique_values = TRUE; | |
} | |
if ($this->tm_epo_always_unique_values === 'yes' && $section['type'] === 'checkbox' ){ | |
$do_unique_values = TRUE; | |
} | |
if ( $do_unique_values ) { | |
$value = array(); | |
foreach ( $section['other_data'] as $key => $data ) { | |
if ( empty( $data['quantity'] ) ) { | |
continue; | |
} | |
$display_value = !empty( $data['display'] ) ? $data['display'] : $data['value']; | |
$original_price = $data['unit_price'] / $data['quantity']; | |
$new_price = apply_filters( 'wc_epo_discounted_price', $data['unit_price'], $cart_item['data'], $cart_item[ $this->cart_edit_key_var ] ); | |
$after_price = $new_price / $data['quantity']; | |
$format_price = $this->get_price_for_cart( $after_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
if ( $original_price != $after_price ) { | |
$original_price = $this->get_price_for_cart( $original_price, $cart_item, FALSE, $data['unit_price_per_currency'], $data['quantity'], 0, $data['price_type'] ); | |
$format_price = '<span class="rp_wcdpd_cart_price"><del>' . $original_price . '</del> <ins>' . $format_price . '</ins></span>'; | |
} | |
$format_price_shown = TRUE; | |
$quantity_string = ($data['quantity'] > 1) ? ' × ' . $data['quantity'] : ''; | |
if ( $this->tm_epo_hide_options_prices_in_cart != "normal" ) { | |
$format_price = ''; | |
} | |
if ( !empty( $section['multiple_values'] ) ) { | |
$display_value_array = explode( $section['multiple_values'], $display_value ); | |
$display_value = ""; | |
foreach ( $display_value_array as $d => $dv ) { | |
$display_value .= '<span class="cpf-data-on-cart">' . $dv . '</span>'; | |
} | |
$display_value .= ' <small>' . $format_price . $quantity_string . '</small>'; | |
} else { | |
$display_value = '<span class="cpf-data-on-cart">' . $display_value . ' <small>' . $format_price . $quantity_string . '</small></span>'; | |
} | |
$quantity_string_shown = TRUE; | |
$value[] = $display_value; | |
} | |
} | |
} | |
if ( !empty( $value ) && count( $value ) > 0 ) { | |
if ( $quantity_string_shown ) { | |
if ( is_array( $value[0] ) ) { | |
$temp = ''; | |
foreach ( $value as $k => $v ) { | |
$temp .= implode( "", $v ); | |
} | |
$value = $temp; | |
} else { | |
$value = implode( "", $value ); | |
} | |
} else { | |
if ( is_array( $value[0] ) ) { | |
$temp = ''; | |
foreach ( $value as $k => $v ) { | |
$temp .= implode( " , ", $v ); | |
} | |
$value = $temp; | |
} else { | |
if ( !empty( $section['multiple_values'] ) ) { | |
$value = implode( " , ", $value ); | |
} else { | |
$value = implode( " , ", $value ); | |
} | |
} | |
} | |
} else { | |
$value = ""; | |
} | |
if ( empty( $section['quantity'] ) ) { | |
$section['quantity'] = 1; | |
} | |
// WooCommerce Dynamic Pricing & Discounts | |
$original_price = $section['price'] / $section['quantity']; | |
$original_price_q = $original_price * $quantity * $section['quantity']; | |
$section['price'] = apply_filters( 'wc_epo_discounted_price', $section['price'], $cart_item['data'], $cart_item[ $this->cart_edit_key_var ] ); | |
$after_price = $section['price'] / $section['quantity']; | |
$price = $price + (float) $section['price']; | |
$section['price_type'] = ""; | |
if ( $this->tm_epo_hide_options_prices_in_cart == "normal" ) { | |
$format_price = $this->get_price_for_cart( $after_price, $cart_item, FALSE, $section['price_per_currency'], $section['quantity'], 0, $section['price_type'] ); | |
$format_price_total = $this->get_price_for_cart( $section['price'], $cart_item, FALSE, $section['price_per_currency'], 0, $quantity, $section['price_type'] ); | |
$format_price_total2 = $this->get_price_for_cart( $section['price'], $cart_item, FALSE, $section['price_per_currency'], 0, 0, $section['price_type'] ); | |
if ( $original_price != $after_price ) { | |
$original_price = $this->get_price_for_cart( $original_price, $cart_item, FALSE, $section['price_per_currency'], 0, 0, $section['price_type'] ); | |
$original_price_total = $this->get_price_for_cart( $original_price_q, $cart_item, FALSE, $section['price_per_currency'], 0, 0, $section['price_type'] ); | |
$format_price = '<span class="rp_wcdpd_cart_price"><del>' . $original_price . '</del> <ins>' . $format_price . '</ins></span>'; | |
} | |
} else { | |
$format_price = ''; | |
$format_price_total = ''; | |
$format_price_total2 = ''; | |
} | |
$single_price = $this->get_price_for_cart( (float) $section['price'] / $section['quantity'], $cart_item, FALSE, $section['price_per_currency'], 0, 0, $section['price_type'] ); | |
$quantity_string = ($section['quantity'] > 1) ? ' × ' . $section['quantity'] : ''; | |
if ( $format_price==="" || $quantity_string_shown || $dont_show_mass_quantity ) { | |
$quantity_string = ""; | |
} | |
if ( $this->tm_epo_cart_field_display != "link" ) { | |
if ( empty( $section['hidelabelincart'] ) || empty( $section['hidevalueincart'] ) ) { | |
$value_to_show = (empty( $section['hidevalueincart'] )) ? do_shortcode( TM_EPO_HELPER()->html_entity_decode( $value ) ) : ''; | |
$other_data[] = array( | |
'name' => empty( $section['hidelabelincart'] ) ? $section['label'] : '', | |
'value' => (empty( $section['hidevalueincart'] ) || $section['hidevalueincart'] === 'price') | |
? | |
$value_to_show . | |
((!$format_price_shown && $format_price && $quantity_string) | |
? '<small>' . $format_price . $quantity_string . '</small>' | |
: | |
( | |
($format_price) | |
? ($do_unique_values) | |
? ( | |
($this->tm_epo_hide_cart_average_price == 'no') | |
? '<span class="tc-average-price">' . $format_price . '</span>' | |
: '' | |
) | |
: '<span class="tc-av-price">' . $format_price . '</span>' | |
: (($quantity_string) ? '<small>' . $quantity_string . '</small>' : '') | |
) | |
) | |
: '', | |
'tm_label' => $section['label'], | |
'tm_value' => do_shortcode( TM_EPO_HELPER()->html_entity_decode( $value ) ), | |
'tm_price' => $format_price, | |
'tm_total_price' => $format_price_total, | |
'tm_quantity' => $section['quantity'], | |
'tm_image' => $section['other_data'][0]['images'], | |
); | |
} | |
} | |
if ( empty( $section['hidelabelincart'] ) || empty( $section['hidevalueincart'] ) ) { | |
$link_data[] = array( | |
'name' => empty( $section['hidelabelincart'] ) ? $section['label'] : '', | |
'value' => empty( $section['hidevalueincart'] ) ? $value : '', | |
'price' => $format_price, | |
'tm_price' => $single_price, | |
'tm_total_price' => $format_price_total, | |
'tm_quantity' => $section['quantity'], | |
'tm_total_price2' => $format_price_total2, | |
); | |
} | |
} | |
} | |
if ( $this->tm_epo_cart_field_display == "link" ) { | |
if ( empty( $price ) || $this->tm_epo_hide_options_prices_in_cart != "normal" ) { | |
$price = ''; | |
} else { | |
$price = $this->get_price_for_cart( $price, $cart_item, FALSE, NULL, 0, 0, $section['price_type'] ); | |
} | |
$uni = uniqid( '' ); | |
$data = '<div class="tm-extra-product-options">'; | |
$data .= '<div class="tm-row tm-cart-row">' | |
. '<div class="tm-cell col-4 cpf-name"> </div>' | |
. '<div class="tm-cell col-4 cpf-value"> </div>' | |
. '<div class="tm-cell col-2 cpf-price">' . esc_attr__( 'Price', 'woocommerce' ) . '</div>' | |
. '<div class="tm-cell col-1 cpf-quantity">' . esc_attr__( 'Quantity', 'woocommerce' ) . '</div>' | |
. '<div class="tm-cell col-1 cpf-total-price">' . esc_attr__( 'Total', 'woocommerce' ) . '</div>' | |
. '</div>'; | |
foreach ( $link_data as $link ) { | |
$data .= '<div class="tm-row tm-cart-row">' | |
. '<div class="tm-cell col-4 cpf-name">' . $link['name'] . '</div>' | |
. '<div class="tm-cell col-4 cpf-value">' . do_shortcode( TM_EPO_HELPER()->html_entity_decode( $link['value'] ) ) . '</div>' | |
. '<div class="tm-cell col-2 cpf-price">' . $link['tm_price'] . '</div>' | |
. '<div class="tm-cell col-1 cpf-quantity">' . (($link['tm_price'] == '') ? '' : $link['tm_quantity']) . '</div>' | |
. '<div class="tm-cell col-1 cpf-total-price">' . $link['tm_total_price2'] . '</div>' | |
. '</div>'; | |
} | |
$data .= '</div>'; | |
$other_data[] = array( | |
'name' => '<a href="#tm-cart-link-data-' . $uni . '" class="tm-cart-link">' . ((!empty( $this->tm_epo_additional_options_text )) ? $this->tm_epo_additional_options_text : __( 'Additional options', 'woocommerce-tm-extra-product-options' )) . '</a>', | |
'value' => $price . '<div id="tm-cart-link-data-' . $uni . '" class="tm-cart-link-data tm-hidden">' . $data . '</div>', | |
); | |
} | |
return $other_data; | |
} | |
/** Gets cart item to display in the frontend. **/ | |
public function get_item_data( $other_data, $cart_item ) { | |
if ( $this->tm_epo_hide_options_in_cart == "normal" && $this->tm_epo_cart_field_display != "advanced" && !empty( $cart_item['tmcartepo'] ) ) { | |
$other_data = $this->get_item_data_array( $other_data, $cart_item ); | |
} | |
return $other_data; | |
} | |
/** Calculates the correct option price **/ | |
public function calculate_price( $post_data = NULL, $element, $key, $attribute, $per_product_pricing, $cpf_product_price = FALSE, $variation_id, $price_default_value = 0, $currency = FALSE, $current_currency = FALSE, $price_per_currencies = NULL ) { | |
$element = apply_filters( 'wc_epo_get_element_for_calculate_price', $element, $key ); | |
if ( is_null( $post_data ) && isset( $_POST ) ) { | |
$post_data = $_POST; | |
} | |
if ( empty( $post_data ) && isset( $_REQUEST['tcajax'] ) ) { | |
$post_data = $_REQUEST; | |
} | |
$_price = $price_default_value; | |
$_price_type = ""; | |
// this currently happens for multiple file uploads | |
if ( is_array( $key ) ) { | |
$key = 0; | |
} | |
$key = esc_attr( $key ); | |
if ( $per_product_pricing ) { | |
if ( !isset( $element['price_rules'][ $key ] ) ) {// field price rule | |
if ( $variation_id && isset( $element['price_rules'][0][ $variation_id ] ) ) {// general variation rule | |
$_price = $element['price_rules'][0][ $variation_id ]; | |
} elseif ( isset( $element['price_rules'][0][0] ) ) {// general rule | |
$_price = $element['price_rules'][0][0]; | |
} | |
} else { | |
if ( $variation_id && isset( $element['price_rules'][ $key ][ $variation_id ] ) ) {// field price rule | |
$_price = $element['price_rules'][ $key ][ $variation_id ]; | |
} elseif ( isset( $element['price_rules'][ $key ][0] ) ) {// general field variation rule | |
$_price = $element['price_rules'][ $key ][0]; | |
} elseif ( $variation_id && isset( $element['price_rules'][0][ $variation_id ] ) ) {// general variation rule | |
$_price = $element['price_rules'][0][ $variation_id ]; | |
} elseif ( isset( $element['price_rules'][0][0] ) ) {// general rule | |
$_price = $element['price_rules'][0][0]; | |
} | |
} | |
if ( !isset( $element['price_rules_type'][ $key ] ) ) {// field price rule | |
if ( $variation_id && isset( $element['price_rules_type'][0][ $variation_id ] ) ) {// general variation rule | |
$_price_type = $element['price_rules_type'][0][ $variation_id ]; | |
} elseif ( isset( $element['price_rules_type'][0][0] ) ) {// general rule | |
$_price_type = $element['price_rules_type'][0][0]; | |
} | |
} else { | |
if ( $variation_id && isset( $element['price_rules_type'][ $key ][ $variation_id ] ) ) {// field price rule | |
$_price_type = $element['price_rules_type'][ $key ][ $variation_id ]; | |
} elseif ( isset( $element['price_rules_type'][ $key ][0] ) ) {// general field variation rule | |
$_price_type = $element['price_rules_type'][ $key ][0]; | |
} elseif ( $variation_id && isset( $element['price_rules_type'][0][ $variation_id ] ) ) {// general variation rule | |
$_price_type = $element['price_rules_type'][0][ $variation_id ]; | |
} elseif ( isset( $element['price_rules_type'][0][0] ) ) {// general rule | |
$_price_type = $element['price_rules_type'][0][0]; | |
} | |
} | |
$_price = floatval( wc_format_decimal( $_price, FALSE, TRUE ) ); | |
switch ( $_price_type ) { | |
case 'percent': | |
if ( $cpf_product_price !== FALSE ) { | |
if ( $currency ) { | |
$cpf_product_price = apply_filters( 'wc_epo_get_currency_price', $cpf_product_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
$_price = ($_price / 100) * floatval( $cpf_product_price ); | |
} | |
break; | |
case 'percentcurrenttotal': | |
$_original_price = $_price; | |
if ( $_price != '' && isset( $post_data[ $attribute . '_hidden' ] ) ) { | |
$_price = floatval( $post_data[ $attribute . '_hidden' ] ); | |
if ( isset( $post_data['tm_epo_options_static_prices'] ) ) { | |
$_price = (floatval( $post_data['tm_epo_options_static_prices'] ) + floatval( $cpf_product_price )) * ($_original_price / 100); | |
} | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
if ( isset( $post_data[ $attribute . '_quantity' ] ) && $post_data[ $attribute . '_quantity' ] > 0 ) { | |
$_price = $_price / floatval( $post_data[ $attribute . '_quantity' ] ); | |
} | |
} | |
break; | |
case 'char': | |
$_price = floatval( $_price * strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'charpercent': | |
if ( $cpf_product_price !== FALSE ) { | |
if ( $currency ) { | |
$cpf_product_price = apply_filters( 'wc_epo_get_currency_price', $cpf_product_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
$_price = floatval( strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) * (($_price / 100) * floatval( $cpf_product_price )); | |
} | |
break; | |
case 'charnofirst': | |
$_textlength = floatval( strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) - 1; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_price * $_textlength ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'charnon': | |
$freechars = absint( $element['freechars'] ); | |
$_textlength = floatval( strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) - $freechars; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_price * $_textlength ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'charpercentnon': | |
if ( $cpf_product_price !== FALSE ) { | |
$freechars = absint( $element['freechars'] ); | |
if ( $currency ) { | |
$cpf_product_price = apply_filters( 'wc_epo_get_currency_price', $cpf_product_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
$_textlength = floatval( strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) - $freechars; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_textlength ) * (($_price / 100) * floatval( $cpf_product_price )); | |
} | |
break; | |
case 'charnonnospaces': | |
$freechars = absint( $element['freechars'] ); | |
$_textlength = floatval( strlen( preg_replace( "/\s+/", "", stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) ) - $freechars; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_price * $_textlength ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'charpercentnonnospaces': | |
if ( $cpf_product_price !== FALSE ) { | |
$freechars = absint( $element['freechars'] ); | |
if ( $currency ) { | |
$cpf_product_price = apply_filters( 'wc_epo_get_currency_price', $cpf_product_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
$_textlength = floatval( strlen( preg_replace( "/\s+/", "", stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) ) - $freechars; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_textlength ) * (($_price / 100) * floatval( $cpf_product_price )); | |
} | |
break; | |
case 'charnospaces': | |
$_price = floatval( $_price * strlen( preg_replace( "/\s+/", "", stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'charpercentnofirst': | |
if ( $cpf_product_price !== FALSE ) { | |
if ( $currency ) { | |
$cpf_product_price = apply_filters( 'wc_epo_get_currency_price', $cpf_product_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
$_textlength = floatval( strlen( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ) ) ) - 1; | |
if ( $_textlength < 0 ) { | |
$_textlength = 0; | |
} | |
$_price = floatval( $_textlength ) * (($_price / 100) * floatval( $cpf_product_price )); | |
} | |
break; | |
case 'step': | |
case 'stepfee': | |
$_price = floatval( $_price * floatval( stripcslashes( $post_data[ $attribute ] ) ) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'currentstep': | |
case 'currentstepfee': | |
$_price = floatval( stripcslashes( $post_data[ $attribute ] ) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
case 'intervalstep': | |
if ( isset( $element["min"] ) ) { | |
$_min = floatval( $element["min"] ); | |
$_price = floatval( $_price * (floatval( stripcslashes( $post_data[ $attribute ] ) ) - $_min) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
} | |
break; | |
case 'row': | |
$_price = floatval( $_price * (substr_count( stripcslashes( utf8_decode( $post_data[ $attribute ] ) ), "\r\n" ) + 1) ); | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
default: | |
// fixed price | |
if ( $currency ) { | |
$_price = apply_filters( 'wc_epo_get_currency_price', $_price, $currency, $_price_type, FALSE, $current_currency, $price_per_currencies, $key, $attribute ); | |
} | |
break; | |
} | |
// quantity button | |
if ( isset( $post_data[ $attribute . '_quantity' ] ) ) { | |
$_price = $_price * floatval( $post_data[ $attribute . '_quantity' ] ); | |
} | |
if ( $price_default_value === '' && $_price == 0 ) { | |
$_price = ''; | |
} | |
} | |
$_price = apply_filters( 'wc_epo_calculate_price', $_price, $post_data, $element, $key, $attribute, $per_product_pricing, $cpf_product_price, $variation_id, $price_default_value, $currency, $current_currency, $price_per_currencies ); | |
return apply_filters( 'tm_wcml_raw_price_amount', $_price ); | |
} | |
/** Adds meta data to the order - WC < 2.7 **/ | |
public function order_item_meta( $item_id, $values ) { | |
do_action( 'wc_epo_order_item_meta_before', $item_id, $values ); | |
if ( !empty( $values['tmcartepo'] ) ) { | |
wc_add_order_item_meta( $item_id, '_tmcartepo_data', $values['tmcartepo'] ); | |
wc_add_order_item_meta( $item_id, '_tm_epo_product_original_price', array( $values['tm_epo_product_original_price'] ) ); | |
wc_add_order_item_meta( $item_id, '_tm_epo', array( 1 ) ); | |
} | |
if ( !empty( $values['tmsubscriptionfee'] ) ) { | |
wc_add_order_item_meta( $item_id, '_tmsubscriptionfee_data', array( $values['tmsubscriptionfee'] ) ); | |
wc_add_order_item_meta( $item_id, __( "Options Subscription fee", 'woocommerce-tm-extra-product-options' ), $values['tmsubscriptionfee'] ); | |
} | |
if ( !empty( $values['tmcartfee'] ) ) { | |
wc_add_order_item_meta( $item_id, '_tmcartfee_data', array( $values['tmcartfee'] ) ); | |
} | |
do_action( 'wc_epo_order_item_meta', $item_id, $values ); | |
} | |
/** Adds meta data to the order - WC >= 2.7 (crud) **/ | |
public function order_line_item( $item, $cart_item_key, $values ) { | |
do_action( 'wc_epo_order_item_meta_before', $item, $cart_item_key, $values ); | |
if ( !empty( $values['tmcartepo'] ) ) { | |
$item->add_meta_data( '_tmcartepo_data', $values['tmcartepo'] ); | |
$item->add_meta_data( '_tm_epo_product_original_price', array( $values['tm_epo_product_original_price'] ) ); | |
$item->add_meta_data( '_tm_epo', array( 1 ) ); | |
} | |
if ( !empty( $values['tmsubscriptionfee'] ) ) { | |
$item->add_meta_data( '_tmsubscriptionfee_data', array( $values['tmsubscriptionfee'] ) ); | |
$item->add_meta_data( __( "Options Subscription fee", 'woocommerce-tm-extra-product-options' ), $values['tmsubscriptionfee'] ); | |
} | |
if ( !empty( $values['tmcartfee'] ) ) { | |
$item->add_meta_data( '_tmcartfee_data', array( $values['tmcartfee'] ) ); | |
} | |
do_action( 'wc_epo_order_item_meta', $item, $cart_item_key, $values ); | |
} | |
/** Validates the cart data. **/ | |
public function add_to_cart_validation( $passed, $product_id, $qty, $variation_id = '', $variations = array(), $cart_item_data = array() ) { | |
// disables add_to_cart_button class on shop page | |
if ( is_ajax() && $this->tm_epo_force_select_options == "display" && !isset( $_REQUEST['tcaddtocart'] ) ) { | |
$has_epo = TM_EPO_API()->has_options( $product_id ); | |
if ( TM_EPO_API()->is_valid_options( $has_epo ) ) { | |
return FALSE; | |
} | |
} | |
$is_validate = TRUE; | |
// Get product type | |
$terms = get_the_terms( $product_id, 'product_type' ); | |
$product_type = !empty( $terms ) && isset( current( $terms )->name ) ? sanitize_title( current( $terms )->name ) : 'simple'; | |
if ( $product_type == 'bto' || $product_type == 'composite' ) { | |
$bto_data = maybe_unserialize( tc_get_post_meta( $product_id, '_bto_data', TRUE ) ); | |
$valid_ids = array(); | |
if ( is_array( $bto_data ) ) { | |
$valid_ids = array_keys( $bto_data ); | |
} | |
foreach ( $valid_ids as $bundled_item_id ) { | |
if ( isset( $_REQUEST['add-product-to-cart'][ $bundled_item_id ] ) && $_REQUEST['add-product-to-cart'][ $bundled_item_id ] !== '' ) { | |
$bundled_product_id = $_REQUEST['add-product-to-cart'][ $bundled_item_id ]; | |
} elseif ( isset( $cart_item_data['composite_data'][ $bundled_item_id ]['product_id'] ) && isset( $_GET['order_again'] ) ) { | |
$bundled_product_id = $cart_item_data['composite_data'][ $bundled_item_id ]['product_id']; | |
} elseif ( isset( $_REQUEST['add-product-to-cart'][ $bundled_item_id ] ) && $_REQUEST['add-product-to-cart'][ $bundled_item_id ] !== '' ) { | |
$bundled_product_id = $_REQUEST['wccp_component_selection'][ $bundled_item_id ]; | |
} | |
if ( isset( $bundled_product_id ) && !empty( $bundled_product_id ) ) { | |
$_passed = TRUE; | |
if ( isset( $_REQUEST['item_quantity'][ $bundled_item_id ] ) && is_numeric( $_REQUEST['item_quantity'][ $bundled_item_id ] ) ) { | |
$item_quantity = absint( $_REQUEST['item_quantity'][ $bundled_item_id ] ); | |
} elseif ( isset( $cart_item_data['composite_data'][ $bundled_item_id ]['quantity'] ) && isset( $_GET['order_again'] ) ) { | |
$item_quantity = $cart_item_data['composite_data'][ $bundled_item_id ]['quantity']; | |
} | |
if ( !empty( $item_quantity ) ) { | |
$item_quantity = absint( $item_quantity ); | |
$_passed = $this->validate_product_id( $bundled_product_id, $item_quantity, $bundled_item_id ); | |
} | |
if ( !$_passed ) { | |
$is_validate = FALSE; | |
} | |
} | |
} | |
} | |
$tc_form_prefix = ""; | |
if ( isset( $_REQUEST['tc_form_prefix'] ) ) { | |
$tc_form_prefix = $_REQUEST['tc_form_prefix']; | |
} | |
if ( !$this->validate_product_id( $product_id, $qty, $tc_form_prefix ) ) { | |
$passed = FALSE; | |
} | |
// Try to validate uploads before they happen | |
$files = array(); | |
foreach ( $_FILES as $k => $file ) { | |
if ( !empty( $file['name'] ) ) { | |
$file_name = $file['name']; | |
if ( !empty( $file['error'] ) ) { | |
$file_error = $file['error']; | |
// Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. | |
$upload_error_strings = array( FALSE, | |
__( "The uploaded file exceeds the upload_max_filesize directive in php.ini.", 'woocommerce-tm-extra-product-options' ), | |
__( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.", 'woocommerce-tm-extra-product-options' ), | |
__( "The uploaded file was only partially uploaded.", 'woocommerce-tm-extra-product-options' ), | |
__( "No file was uploaded.", 'woocommerce-tm-extra-product-options' ), | |
'', | |
__( "Missing a temporary folder.", 'woocommerce-tm-extra-product-options' ), | |
__( "Failed to write file to disk.", 'woocommerce-tm-extra-product-options' ), | |
__( "File upload stopped by extension.", 'woocommerce-tm-extra-product-options' ) ); | |
if ( is_array( $file_error ) ) { | |
foreach ( $file_error as $key => $value ) { | |
if ( !empty( $value ) && !empty( $file_name[ $key ] ) ) { | |
$passed = FALSE; | |
if ( isset( $upload_error_strings[ $value ] ) ) { | |
wc_add_notice( $upload_error_strings[ $value ], 'error' ); | |
} | |
} | |
} | |
} else { | |
$passed = FALSE; | |
if ( isset( $upload_error_strings[ $file_error ] ) ) { | |
wc_add_notice( $upload_error_strings[ $file_error ], 'error' ); | |
} | |
} | |
} | |
add_filter( 'upload_mimes', array( $this, 'upload_mimes_trick' ) ); | |
if ( is_array( $file_name ) ) { | |
foreach ( $file_name as $key => $value ) { | |
if ( !empty( $value ) ) { | |
$check_filetype = wp_check_filetype( $value ); | |
$check_filetype = $check_filetype['ext']; | |
if ( !$check_filetype && !empty( $file['name'] ) ) { | |
$passed = FALSE; | |
wc_add_notice( __( "Sorry, this file type is not permitted for security reasons.", 'woocommerce-tm-extra-product-options' ) . ' (' . pathinfo( $value, PATHINFO_EXTENSION ) . ')', 'error' ); | |
} | |
} | |
} | |
} else { | |
$check_filetype = wp_check_filetype( $file['name'] ); | |
$check_filetype = $check_filetype['ext']; | |
if ( !$check_filetype && !empty( $file['name'] ) ) { | |
$passed = FALSE; | |
wc_add_notice( __( "Sorry, this file type is not permitted for security reasons.", 'woocommerce-tm-extra-product-options' ) . ' (' . pathinfo( $file['name'], PATHINFO_EXTENSION ) . ')', 'error' ); | |
} | |
} | |
remove_filter( 'upload_mimes', array( $this, 'upload_mimes_trick' ) ); | |
} | |
} | |
if ( !$is_validate ) { | |
$passed = FALSE; | |
} | |
return apply_filters( 'tm_add_to_cart_validation', $passed ); | |
} | |
/** Conditional logic (checks if an element is visible) **/ | |
public function is_visible( $element = array(), $section = array(), $sections = array(), $form_prefix = "" ) { | |
// Element | |
$logic = FALSE; | |
if ( isset( $element['section'] ) ) { | |
if ( !$this->is_visible( $section, array(), $sections, $form_prefix ) ) { | |
return FALSE; | |
} | |
if ( !isset( $element['logic'] ) || empty( $element['logic'] ) ) { | |
return TRUE; | |
} | |
$logic = (array) json_decode( $element['clogic'] ); | |
// Section | |
} else { | |
if ( !isset( $element['sections_logic'] ) || empty( $element['sections_logic'] ) ) { | |
return TRUE; | |
} | |
$logic = (array) json_decode( $element['sections_clogic'] ); | |
} | |
if ( $logic ) { | |
$rule_toggle = $logic['toggle']; | |
$rule_what = $logic['what']; | |
$matches = 0; | |
$checked = 0; | |
$show = TRUE; | |
switch ( $rule_toggle ) { | |
case "show": | |
$show = FALSE; | |
break; | |
case "hide": | |
$show = TRUE; | |
break; | |
} | |
foreach ( $logic['rules'] as $key => $rule ) { | |
$matches++; | |
if ( $this->tm_check_field_match( $rule, $sections, $form_prefix ) ) { | |
$checked++; | |
} | |
} | |
if ( $rule_what == "all" ) { | |
if ( $checked == $matches ) { | |
$show = !$show; | |
} | |
} else { | |
if ( $checked > 0 ) { | |
$show = !$show; | |
} | |
} | |
return $show; | |
} | |
return FALSE; | |
} | |
/** Conditional logic **/ | |
public function tm_check_section_match( $element_id, $operator, $rule = FALSE, $sections = FALSE, $form_prefix = "" ) { | |
$all_checked = TRUE; | |
$section_id = $element_id; | |
if ( isset( $sections[ $section_id ] ) && isset( $sections[ $section_id ]['elements'] ) ) { | |
foreach ( $sections[ $section_id ]['elements'] as $id => $element ) { | |
if ( $this->is_visible( $element, $sections[ $section_id ], $sections, $form_prefix ) ) { | |
$element_to_check = $sections[ $section_id ]['elements'][ $id ]['name_inc']; | |
$element_type = $sections[ $section_id ]['elements'][ $id ]['type']; | |
$posted_value = NULL; | |
switch ( $element_type ) { | |
case "radio": | |
$radio_checked_length = 0; | |
$element_to_check = array_unique( $element_to_check ); | |
$element_to_check = $element_to_check[0] . $form_prefix; | |
if ( isset( $_POST[ $element_to_check ] ) ) { | |
$radio_checked_length++; | |
$posted_value = $_POST[ $element_to_check ]; | |
$posted_value = stripslashes( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
if ( $operator == 'isnotempty' ) { | |
$all_checked = $all_checked && $radio_checked_length > 0; | |
} elseif ( $operator == 'isempty' ) { | |
$all_checked = $all_checked && $radio_checked_length == 0; | |
} | |
break; | |
case "checkbox": | |
$checkbox_checked_length = 0; | |
$element_to_check = array_unique( $element_to_check ); | |
foreach ( $element_to_check as $key => $name_value ) { | |
$element_to_check[ $key ] = $name_value . $form_prefix; | |
if ( isset( $_POST[ $element_to_check[ $key ] ] ) ) { | |
$checkbox_checked_length++; | |
$posted_value = $_POST[ $element_to_check[ $key ] ]; | |
$posted_value = stripslashes( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
} | |
if ( $operator == 'isnotempty' ) { | |
$all_checked = $all_checked && $checkbox_checked_length > 0; | |
} elseif ( $operator == 'isempty' ) { | |
$all_checked = $all_checked && $checkbox_checked_length == 0; | |
} | |
break; | |
case "select": | |
case "textarea": | |
case "textfield": | |
case "color": | |
$element_to_check .= $form_prefix; | |
if ( isset( $_POST[ $element_to_check ] ) ) { | |
$posted_value = $_POST[ $element_to_check ]; | |
$posted_value = stripslashes( $posted_value ); | |
if ( $element_type == "select" ) { | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
} | |
break; | |
} | |
$all_checked = $all_checked && $this->tm_check_match( $posted_value, '', $operator ); | |
} | |
} | |
} | |
return $all_checked; | |
} | |
/** Conditional logic **/ | |
public function tm_check_field_match( $rule = FALSE, $sections = FALSE, $form_prefix = "" ) { | |
if ( empty( $rule ) || empty( $sections ) ) { | |
return FALSE; | |
} | |
$section_id = $rule->section; | |
$element_id = $rule->element; | |
$operator = $rule->operator; | |
$value = $rule->value; | |
if ( $section_id == $element_id ) { | |
return $this->tm_check_section_match( $element_id, $operator, $rule, $sections, $form_prefix ); | |
} | |
if ( !isset( $sections[ $section_id ] ) | |
|| !isset( $sections[ $section_id ]['elements'] ) | |
|| !isset( $sections[ $section_id ]['elements'][ $element_id ] ) | |
|| !isset( $sections[ $section_id ]['elements'][ $element_id ]['type'] ) | |
) { | |
return FALSE; | |
} | |
// variations logic | |
if ( $sections[ $section_id ]['elements'][ $element_id ]['type'] == "variations" ) { | |
return $this->tm_variation_check_match( $form_prefix, $value, $operator ); | |
} | |
if ( !isset( $sections[ $section_id ]['elements'][ $element_id ]['name_inc'] ) ) { | |
return FALSE; | |
} | |
// element array cannot hold the form_prefix for bto support, so we append manually | |
$element_to_check = $sections[ $section_id ]['elements'][ $element_id ]['name_inc']; | |
$element_type = $sections[ $section_id ]['elements'][ $element_id ]['type']; | |
$posted_value = NULL; | |
switch ( $element_type ) { | |
case "radio": | |
$radio_checked_length = 0; | |
$element_to_check = array_unique( $element_to_check ); | |
$element_to_check = $element_to_check[0] . $form_prefix; | |
if ( isset( $_POST[ $element_to_check ] ) ) { | |
$radio_checked_length++; | |
$posted_value = $_POST[ $element_to_check ]; | |
$posted_value = stripslashes( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
if ( $operator == 'is' || $operator == 'isnot' ) { | |
if ( $radio_checked_length == 0 ) { | |
return FALSE; | |
} | |
} elseif ( $operator == 'isnotempty' ) { | |
return $radio_checked_length > 0; | |
} elseif ( $operator == 'isempty' ) { | |
return $radio_checked_length == 0; | |
} | |
break; | |
case "checkbox": | |
$checkbox_checked_length = 0; | |
$ret = FALSE; | |
$element_to_check = array_unique( $element_to_check ); | |
foreach ( $element_to_check as $key => $name_value ) { | |
$element_to_check[ $key ] = $name_value . $form_prefix; | |
if ( isset( $_POST[ $element_to_check[ $key ] ] ) ) { | |
$checkbox_checked_length++; | |
$posted_value = $_POST[ $element_to_check[ $key ] ]; | |
$posted_value = stripslashes( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
if ( $this->tm_check_match( $posted_value, $value, $operator ) ) { | |
$ret = TRUE; | |
} | |
} | |
if ( $operator == 'is' || $operator == 'isnot' ) { | |
if ( $checkbox_checked_length == 0 ) { | |
return FALSE; | |
} | |
return $ret; | |
} elseif ( $operator == 'isnotempty' ) { | |
return $checkbox_checked_length > 0; | |
} elseif ( $operator == 'isempty' ) { | |
return $checkbox_checked_length == 0; | |
} | |
break; | |
case "select": | |
case "textarea": | |
case "textfield": | |
case "color": | |
case "range": | |
$element_to_check .= $form_prefix; | |
if ( isset( $_POST[ $element_to_check ] ) ) { | |
$posted_value = $_POST[ $element_to_check ]; | |
$posted_value = stripslashes( $posted_value ); | |
if ( $element_type == "select" ) { | |
$posted_value = TM_EPO_HELPER()->encodeURIComponent( $posted_value ); | |
$posted_value = TM_EPO_HELPER()->reverse_strrchr( $posted_value, "_" ); | |
} | |
} | |
break; | |
} | |
return $this->tm_check_match( $posted_value, $value, $operator ); | |
} | |
/** Conditional logic **/ | |
public function tm_variation_check_match( $form_prefix, $value, $operator ) { | |
$posted_value = $this->get_posted_variation_id( $form_prefix ); | |
return $this->tm_check_match( $posted_value, $value, $operator, TRUE ); | |
} | |
/** Conditional logic **/ | |
public function tm_check_match( $posted_value, $value, $operator, $include_zero = FALSE ) { | |
$posted_value = rawurlencode( apply_filters( 'tm_translate', rawurldecode( $posted_value ) ) ); | |
$value = rawurlencode( apply_filters( 'tm_translate', rawurldecode( $value ) ) ); | |
switch ( $operator ) { | |
case "is": | |
return ($posted_value !== NULL && $value == $posted_value); | |
break; | |
case "isnot": | |
return ($posted_value !== NULL && $value != $posted_value); | |
break; | |
case "isempty": | |
if ( $include_zero ) { | |
return (!(($posted_value !== NULL && $posted_value !== '' && $posted_value !== '0' && $posted_value !== 0))); | |
} | |
return (!(($posted_value !== NULL && $posted_value !== ''))); | |
break; | |
case "isnotempty": | |
if ( $include_zero ) { | |
return (($posted_value !== NULL && $posted_value !== '' && $posted_value !== '0' && $posted_value !== 0)); | |
} | |
return (($posted_value !== NULL && $posted_value !== '')); | |
break; | |
case "startswith" : | |
return TM_EPO_HELPER()->str_startswith( $posted_value, $value ); | |
break; | |
case "endswith" : | |
return TM_EPO_HELPER()->str_endsswith( $posted_value, $value ); | |
break; | |
case "greaterthan" : | |
return floatval( $posted_value ) > floatval( $value ); | |
break; | |
case "lessthan" : | |
return floatval( $posted_value ) < floatval( $value ); | |
break; | |
} | |
return FALSE; | |
} | |
/** Gets the stored card data for the order again functionality. **/ | |
public function order_again_cart_item_data( $cart_item_meta, $product, $order ) { | |
global $woocommerce; | |
// Disable validation | |
remove_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 50, 6 ); | |
$_backup_cart = isset( $product['item_meta']['tmcartepo_data'] ) ? $product['item_meta']['tmcartepo_data'] : FALSE; | |
if ( !$_backup_cart ) { | |
$_backup_cart = isset( $product['item_meta']['_tmcartepo_data'] ) ? $product['item_meta']['_tmcartepo_data'] : FALSE; | |
} | |
if ( $_backup_cart && is_array( $_backup_cart ) && isset( $_backup_cart[0] ) ) { | |
if ( is_string( $_backup_cart[0] ) ) { | |
$_backup_cart = maybe_unserialize( $_backup_cart[0] ); | |
} | |
$cart_item_meta['tmcartepo'] = $_backup_cart; | |
} | |
$_backup_cart = isset( $product['item_meta']['tmsubscriptionfee_data'] ) ? $product['item_meta']['tmsubscriptionfee_data'] : FALSE; | |
if ( !$_backup_cart ) { | |
$_backup_cart = isset( $product['item_meta']['_tmsubscriptionfee_data'] ) ? $product['item_meta']['_tmsubscriptionfee_data'] : FALSE; | |
} | |
if ( $_backup_cart && is_array( $_backup_cart ) && isset( $_backup_cart[0] ) ) { | |
if ( is_string( $_backup_cart[0] ) ) { | |
$_backup_cart = maybe_unserialize( $_backup_cart[0] ); | |
} | |
$cart_item_meta['tmsubscriptionfee'] = $_backup_cart[0]; | |
} | |
$_backup_cart = isset( $product['item_meta']['tmcartfee_data'] ) ? $product['item_meta']['tmcartfee_data'] : FALSE; | |
if ( !$_backup_cart ) { | |
$_backup_cart = isset( $product['item_meta']['_tmcartfee_data'] ) ? $product['item_meta']['_tmcartfee_data'] : FALSE; | |
} | |
if ( $_backup_cart && is_array( $_backup_cart ) && isset( $_backup_cart[0] ) ) { | |
if ( is_string( $_backup_cart[0] ) ) { | |
$_backup_cart = maybe_unserialize( $_backup_cart[0] ); | |
} | |
$cart_item_meta['tmcartfee'] = $_backup_cart[0]; | |
} | |
return $cart_item_meta; | |
} | |
/** | |
* Handles the display of all the extra options on the product page. | |
* | |
* IMPORTANT: | |
* We do not support plugins that pollute the global $woocommerce. | |
* | |
*/ | |
public function frontend_display( $product_id = 0, $form_prefix = "", $dummy_prefix = FALSE ) { | |
global $product, $woocommerce; | |
if ( !property_exists( $woocommerce, 'product_factory' ) | |
|| $woocommerce->product_factory === NULL | |
|| ($this->tm_options_have_been_displayed && (!($this->is_bto || ($this->is_enabled_shortcodes() && !is_product()) || ((is_shop() || is_product_category() || is_product_tag()) && $this->tm_epo_enable_in_shop == "yes")))) | |
) { | |
return;// bad function call | |
} | |
$this->tm_epo_fields( $product_id, $form_prefix, FALSE, $dummy_prefix ); | |
$this->tm_add_inline_style(); | |
$this->tm_epo_totals( $product_id, $form_prefix ); | |
if ( !$this->is_bto ) { | |
$this->tm_options_have_been_displayed = TRUE; | |
} | |
} | |
/** | |
* @param int $product_id | |
* @param string $form_prefix | |
* @param bool $is_from_shortcode | |
*/ | |
public function tm_epo_totals( $product_id = 0, $form_prefix = "", $is_from_shortcode = FALSE ) { | |
global $product, $woocommerce; | |
if ( !property_exists( $woocommerce, 'product_factory' ) | |
|| $woocommerce->product_factory === NULL | |
|| ($this->tm_options_totals_have_been_displayed && (!($this->is_bto || (($this->is_enabled_shortcodes() && !$is_from_shortcode) && !is_product()) || ((is_shop() || is_product_category() || is_product_tag()) && $this->tm_epo_enable_in_shop == "yes")))) | |
) { | |
return;// bad function call | |
} | |
//if ( !$form_prefix && is_page() ) { | |
// $form_prefix = 'tcform' . $this->epo_internal_counter; | |
//} | |
$this->print_price_fields( $product_id, $form_prefix, $is_from_shortcode ); | |
if ( !$this->is_bto ) { | |
$this->tm_options_totals_have_been_displayed = TRUE; | |
} | |
} | |
public function tm_woocommerce_before_single_product() { | |
global $woocommerce; | |
if ( !property_exists( $woocommerce, 'product_factory' ) | |
|| $woocommerce->product_factory === NULL | |
) { | |
return;// bad function call | |
} | |
global $product; | |
if ( $product ) { | |
if ( !is_product() ) { | |
$this->tm_variation_css_check( 1, tc_get_id( $product ) ); | |
} | |
$this->current_product_id_to_be_displayed = tc_get_id( $product ); | |
$this->current_product_id_to_be_displayed_check[ "tc" . "-" . count( $this->current_product_id_to_be_displayed_check ) . "-" . $this->current_product_id_to_be_displayed ] = $this->current_product_id_to_be_displayed; | |
} | |
} | |
public function tm_woocommerce_after_single_product() { | |
$this->current_product_id_to_be_displayed = 0; | |
$this->tm_options_totals_have_been_displayed = FALSE; | |
} | |
// Change quantity value when editing a cart item | |
public function tm_woocommerce_before_add_to_cart_form() { | |
add_filter( 'woocommerce_quantity_input_args', array( $this, 'tm_woocommerce_quantity_input_args' ), 9999, 2 ); | |
} | |
// Remove filter for change quantity value when editing a cart item | |
public function tm_woocommerce_after_add_to_cart_form() { | |
remove_filter( 'woocommerce_quantity_input_args', array( $this, 'tm_woocommerce_quantity_input_args' ), 9999, 2 ); | |
} | |
/** | |
* @param string $form_prefix | |
* @param bool $dummy_prefix | |
*/ | |
private function tm_epo_fields_batch( $form_prefix = "", $dummy_prefix = FALSE ) { | |
foreach ( $this->current_product_id_to_be_displayed_check as $key => $product_id ) { | |
if ( !empty( $product_id ) ) { | |
$this->inline_styles = ''; | |
$this->inline_styles_head = ''; | |
$this->tm_variation_css_check( 1, $product_id ); | |
$this->tm_epo_fields( $product_id, $form_prefix, FALSE, $dummy_prefix ); | |
$this->tm_add_inline_style(); | |
if ( $this->tm_epo_options_placement == $this->tm_epo_totals_box_placement ) { | |
$this->tm_epo_totals( $product_id, $form_prefix ); | |
} else { | |
if ( !$this->is_bto ) { | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
} | |
} | |
} | |
} | |
if ( !$this->is_bto ) { | |
if ( $this->tm_epo_options_placement != $this->tm_epo_totals_box_placement ) { | |
$this->epo_internal_counter = 0; | |
$this->epo_internal_counter_check = array(); | |
} | |
} | |
} | |
/** | |
* @param int $product_id | |
* @param string $form_prefix | |
* @param bool $is_from_shortcode | |
* @param bool $dummy_prefix | |
*/ | |
public function tm_epo_fields( $product_id = 0, $form_prefix = "", $is_from_shortcode = FALSE, $dummy_prefix = FALSE ) { | |
global $woocommerce; | |
if ( !property_exists( $woocommerce, 'product_factory' ) | |
|| $woocommerce->product_factory === NULL | |
|| ($this->tm_options_have_been_displayed && (!($this->is_bto || (($this->is_enabled_shortcodes() && !$is_from_shortcode) && !is_product()) || ((is_shop() || is_product_category() || is_product_tag()) && $this->tm_epo_enable_in_shop == "yes")))) | |
) { | |
return;// bad function call | |
} | |
if ( !$product_id ) { | |
global $product; | |
if ( $product ) { | |
$product_id = tc_get_id( $product ); | |
} | |
} else { | |
$product = wc_get_product( $product_id ); | |
} | |
if ( !$product_id || empty( $product ) ) { | |
if ( !empty( $this->current_product_id_to_be_displayed ) ) { | |
$product_id = $this->current_product_id_to_be_displayed; | |
$product = wc_get_product( $product_id ); | |
} else { | |
$this->tm_epo_fields_batch( $form_prefix, $dummy_prefix ); | |
return; | |
} | |
} | |
if ( !$product_id || empty( $product ) ) { | |
return; | |
} | |
// always dispay composite hidden fields if product is composite | |
if ( $form_prefix ) { | |
$_bto_id = $form_prefix; | |
$form_prefix = "_" . $form_prefix; | |
echo '<input type="hidden" class="cpf-bto-id" name="cpf_bto_id[]" value="' . $form_prefix . '" />'; | |
echo '<input type="hidden" value="" name="cpf_bto_price[' . $_bto_id . ']" class="cpf-bto-price" />'; | |
echo '<input type="hidden" value="0" name="cpf_bto_optionsprice[]" class="cpf-bto-optionsprice" />'; | |
} | |
$post_id = $product_id; | |
$cpf_price_array = $this->get_product_tm_epos( $post_id ); | |
if ( !$cpf_price_array ) { | |
return; | |
} | |
$global_price_array = $cpf_price_array['global']; | |
$local_price_array = $cpf_price_array['local']; | |
if ( empty( $global_price_array ) && empty( $local_price_array ) ) { | |
if ( !$this->is_bto ) { | |
if ( empty( $this->epo_internal_counter ) || !isset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ) ) { | |
// First time displaying the fields and totals havenn't been displayed | |
$this->epo_internal_counter++; | |
$this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] = $this->epo_internal_counter; | |
} else { | |
// Totals have already been displayed | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
$this->current_product_id_to_be_displayed = 0; | |
} | |
$_epo_internal_counter = $this->epo_internal_counter; | |
} else { | |
$_epo_internal_counter = 0; | |
} | |
return; | |
} | |
$global_prices = array( 'before' => array(), 'after' => array() ); | |
foreach ( $global_price_array as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) && is_array( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['sections_placement'] ) ) { | |
$global_prices[ $section['sections_placement'] ][ $priority ][ $pid ]['sections'][ $section_id ] = $section; | |
} | |
} | |
} | |
} | |
} | |
$tabindex = 0; | |
$_currency = get_woocommerce_currency_symbol(); | |
$unit_counter = 0; | |
$field_counter = 0; | |
$element_counter = 0; | |
if ( !$this->is_bto ) { | |
if ( empty( $this->epo_internal_counter ) || !isset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ) ) { | |
// First time displaying the fields and totals havenn't been displayed | |
$this->epo_internal_counter++; | |
$this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] = $this->epo_internal_counter; | |
} else { | |
// Totals have already been displayed | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
$this->current_product_id_to_be_displayed = 0; | |
} | |
$_epo_internal_counter = $this->epo_internal_counter; | |
} else { | |
$_epo_internal_counter = 0; | |
} | |
if ( !$form_prefix ) { | |
if ( $this->wc_vars["is_page"] ) { | |
$form_prefix = '_' . 'tcform' . $this->epo_internal_counter; | |
} | |
} | |
$forcart = "main"; | |
$classcart = "tm-cart-main"; | |
if ( !empty( $form_prefix ) ) { | |
$forcart = $form_prefix; | |
$classcart = "tm-cart-" . str_replace( "_", "", $form_prefix ); | |
} | |
$isfromshortcode = ""; | |
if ( !empty( $is_from_shortcode ) ) { | |
$isfromshortcode = " tc-shortcode"; | |
} | |
wc_get_template( | |
'tm-start.php', | |
array( | |
'isfromshortcode' => $isfromshortcode, | |
'classcart' => $classcart, | |
'forcart' => $forcart, | |
'form_prefix' => str_replace( "_", "", $form_prefix ), | |
'product_id' => $product_id, | |
'epo_internal_counter' => $_epo_internal_counter, | |
'is_from_shortcode' => $is_from_shortcode, | |
), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
// global options before local | |
foreach ( $global_prices['before'] as $priorities ) { | |
foreach ( $priorities as $field ) { | |
$args = array( | |
'tabindex' => $tabindex, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
'_currency' => $_currency, | |
'product_id' => $product_id, | |
); | |
$_return = $this->get_builder_display( $field, 'before', $args, $form_prefix, $product_id, $dummy_prefix ); | |
extract( $_return, EXTR_OVERWRITE ); | |
} | |
} | |
// local options | |
if ( is_array( $local_price_array ) && sizeof( $local_price_array ) > 0 ) { | |
$attributes = tc_get_attributes( floatval( TM_EPO_WPML()->get_original_id( $post_id ) ) ); | |
$wpml_attributes = tc_get_attributes( $post_id ); | |
if ( is_array( $attributes ) && count( $attributes ) > 0 ) { | |
foreach ( $local_price_array as $field ) { | |
if ( isset( $field['name'] ) && isset( $attributes[ $field['name'] ] ) && !$attributes[ $field['name'] ]['is_variation'] ) { | |
$attribute = $attributes[ $field['name'] ]; | |
$wpml_attribute = isset( $wpml_attributes[ $field['name'] ] ) ? $wpml_attributes[ $field['name'] ] : array(); | |
$empty_rules = ""; | |
if ( isset( $field['rules_filtered'][0] ) ) { | |
$empty_rules = esc_html( json_encode( ($field['rules_filtered'][0]) ) ); | |
} | |
$empty_rules_type = ""; | |
if ( isset( $field['rules_type'][0] ) ) { | |
$empty_rules_type = esc_html( json_encode( ($field['rules_type'][0]) ) ); | |
} | |
$args = array( | |
'title' => (!$attribute['is_taxonomy'] && isset( $attributes[ $field['name'] ]["name"] )) | |
? esc_html( wc_attribute_label( $attributes[ $field['name'] ]["name"] ) ) | |
: esc_html( wc_attribute_label( $field['name'] ) ), | |
'required' => esc_html( wc_attribute_label( $field['required'] ) ), | |
'field_id' => 'tm-epo-field-' . $unit_counter, | |
'type' => $field['type'], | |
'rules' => $empty_rules, | |
'rules_type' => $empty_rules_type, | |
); | |
wc_get_template( | |
'tm-field-start.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$name_inc = ""; | |
$field_counter = 0; | |
if ( $attribute['is_taxonomy'] ) { | |
// Terms in current lang | |
$_current_terms = TM_EPO_WPML()->get_terms( TM_EPO_WPML()->get_lang(), $attribute['name'], 'orderby=name&hide_empty=0' ); | |
$_current_terms2 = get_terms( $attribute['name'], 'orderby=name&hide_empty=0' ); | |
$_current_terms = TM_EPO_WPML()->order_terms( $_current_terms, $_current_terms2 ); | |
$current_language = apply_filters( 'wpml_current_language', FALSE ); | |
$default_language = apply_filters( 'wpml_default_language', FALSE ); | |
do_action( 'wpml_switch_language', $default_language ); | |
// Terms in default WPML lang | |
$_default_terms = TM_EPO_WPML()->get_terms( TM_EPO_WPML()->get_lang(), $attribute['name'], 'orderby=name&hide_empty=0' ); | |
$_default_terms2 = get_terms( $attribute['name'], 'orderby=name&hide_empty=0' ); | |
$_default_terms = TM_EPO_WPML()->order_terms( $_default_terms, $_default_terms2 ); | |
do_action( 'wpml_switch_language', $current_language ); | |
$_tems_to_use = TM_EPO_WPML()->merge_terms( $_current_terms, $_default_terms ); | |
$slugs = TM_EPO_WPML()->merge_terms_slugs( $_current_terms, $_default_terms ); | |
switch ( $field['type'] ) { | |
case "select": | |
$name_inc = "select_" . $element_counter; | |
$tabindex++; | |
$args = array( | |
'options' => '', | |
'textafterprice' => '', | |
'id' => 'tmcp_select_' . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc . ($dummy_prefix ? "" : $form_prefix), | |
'amount' => '0 ' . $_currency, | |
'original_amount' => '0 ' . $_currency, | |
'hide_amount' => !empty( $field['hide_price'] ) ? " hidden" : "", | |
'tabindex' => $tabindex, | |
); | |
if ( $_tems_to_use && is_array( $_tems_to_use ) ) { | |
foreach ( $_tems_to_use as $trid => $term ) { | |
if ( !isset( $slugs[ $term->slug ] ) ) { | |
$slugs[ $term->slug ] = $term->slug; | |
} | |
$has_term = has_term( (int) $term->term_id, $attribute['name'], floatval( TM_EPO_WPML()->get_original_id( $post_id ) ) ) ? 1 : 0; | |
if ( $has_term ) { | |
$wpml_term_id = TM_EPO_WPML()->is_active() ? icl_object_id( $term->term_id, $attribute['name'], FALSE ) : FALSE; | |
if ( $wpml_term_id ) { | |
$wpml_term = get_term( $wpml_term_id, $attribute['name'] ); | |
} else { | |
$wpml_term = $term; | |
} | |
$args['options'] .= '<option ' . | |
(isset( $_POST[ 'tmcp_' . $name_inc . $form_prefix ] ) ? selected( $_POST[ 'tmcp_' . $name_inc . $form_prefix ], esc_attr( sanitize_title( $term->slug ) ), 0 ) : "") . | |
' value="' . sanitize_title( $term->slug ) . | |
'" data-price="" data-rules="' . | |
(isset( $field['rules_filtered'][ $slugs[ $term->slug ] ] ) | |
? esc_html( json_encode( ($field['rules_filtered'][ $slugs[ $term->slug ] ]) ) ) | |
: ( isset( $field['rules_filtered'][ $term->slug ] ) ? | |
esc_html( json_encode($field['rules_filtered'][ $term->slug ])):'') ) . | |
'" data-rulestype="' . | |
(isset( $field['rules_type'][ $slugs[ $term->slug ] ] ) | |
? esc_html( json_encode( ($field['rules_type'][ $slugs[ $term->slug ] ]) ) ) | |
: ( isset( $field['rules_type'][ $term->slug ] ) ? | |
esc_html( json_encode($field['rules_type'][ $term->slug ])):'') ) . | |
'">' . wptexturize( $wpml_term->name ) . '</option>'; | |
} | |
} | |
} | |
wc_get_template( | |
'tm-' . $field['type'] . '.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$element_counter++; | |
break; | |
case "radio": | |
case "checkbox": | |
if ( $_tems_to_use && is_array( $_tems_to_use ) ) { | |
foreach ( $_tems_to_use as $trid => $term ) { | |
if ( !isset( $slugs[ $term->slug ] ) ) { | |
$slugs[ $term->slug ] = $term->slug; | |
} | |
$has_term = has_term( (int) $term->term_id, $attribute['name'], floatval( TM_EPO_WPML()->get_original_id( $post_id ) ) ) ? 1 : 0; | |
if ( $has_term ) { | |
$wpml_term_id = TM_EPO_WPML()->is_active() ? icl_object_id( $term->term_id, $attribute['name'], FALSE ) : FALSE; | |
if ( $wpml_term_id ) { | |
$wpml_term = get_term( $wpml_term_id, $attribute['name'] ); | |
} else { | |
; | |
$wpml_term = $term; | |
} | |
$tabindex++; | |
if ( $field['type'] == 'radio' ) { | |
$name_inc = "radio_" . $element_counter; | |
} | |
if ( $field['type'] == 'checkbox' ) { | |
$name_inc = "checkbox_" . $element_counter . "_" . $field_counter; | |
} | |
$args = array( | |
'label' => wptexturize( $wpml_term->name ), | |
'textafterprice' => '', | |
'value' => sanitize_title( $term->slug ), | |
'rules' => (isset( $field['rules_filtered'][ $slugs[ $term->slug ] ] ) | |
? esc_html( json_encode( ($field['rules_filtered'][ $slugs[ $term->slug ] ]) ) ) | |
: ( isset( $field['rules_filtered'][ $term->slug ] ) ? | |
esc_html( json_encode($field['rules_filtered'][ $term->slug ])):'') ), | |
'rules_type' => (isset( $field['rules_type'][ $slugs[ $term->slug ] ] ) | |
? esc_html( json_encode( ($field['rules_type'][ $slugs[ $term->slug ] ]) ) ) | |
: ( isset( $field['rules_type'][ $term->slug ] ) ? | |
esc_html( json_encode($field['rules_type'][ $term->slug ])):'') ), | |
'id' => 'tmcp_choice_' . $element_counter . "_" . $field_counter . "_" . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc . ($dummy_prefix ? "" : $form_prefix), | |
'amount' => '0 ' . $_currency, | |
'original_amount' => '0 ' . $_currency, | |
'hide_amount' => !empty( $field['hide_price'] ) ? " hidden" : "", | |
'tabindex' => $tabindex, | |
'use_images' => "", | |
'grid_break' => "", | |
'percent' => "", | |
'limit' => empty( $field['limit'] ) ? "" : $field['limit'], | |
); | |
wc_get_template( | |
'tm-' . $field['type'] . '.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$field_counter++; | |
} | |
} | |
} | |
$element_counter++; | |
break; | |
} | |
} else { | |
$options = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) ); | |
$wpml_options = isset( $wpml_attribute['value'] ) ? array_map( 'trim', explode( WC_DELIMITER, $wpml_attribute['value'] ) ) : $options; | |
switch ( $field['type'] ) { | |
case "select": | |
$name_inc = "select_" . $element_counter; | |
$tabindex++; | |
$args = array( | |
'options' => '', | |
'textafterprice' => '', | |
'id' => 'tmcp_select_' . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc . ($dummy_prefix ? "" : $form_prefix), | |
'amount' => '0 ' . $_currency, | |
'original_amount' => '0 ' . $_currency, | |
'hide_amount' => !empty( $field['hide_price'] ) ? " hidden" : "", | |
'tabindex' => $tabindex, | |
); | |
foreach ( $options as $k => $option ) { | |
$args['options'] .= '<option ' . (isset( $_POST[ 'tmcp_' . $name_inc . $form_prefix ] ) ? selected( $_POST[ 'tmcp_' . $name_inc . $form_prefix ], esc_attr( sanitize_title( $option ) ), 0 ) : "") . ' value="' . esc_attr( sanitize_title( $option ) ) . '" data-price="" data-rules="' . (isset( $field['rules_filtered'][ esc_attr( sanitize_title( $option ) ) ] ) ? esc_html( json_encode( ($field['rules_filtered'][ esc_attr( sanitize_title( $option ) ) ]) ) ) : '') . '" data-rulestype="' . (isset( $field['rules_type'][ esc_attr( sanitize_title( $option ) ) ] ) ? esc_html( json_encode( ($field['rules_type'][ esc_attr( sanitize_title( $option ) ) ]) ) ) : '') . '">' . wptexturize( apply_filters( 'woocommerce_tm_epo_option_name', isset( $wpml_options[ $k ] ) ? $wpml_options[ $k ] : $option, NULL, NULL ) ) . '</option>'; | |
} | |
wc_get_template( | |
'tm-' . $field['type'] . '.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$element_counter++; | |
break; | |
case "radio": | |
case "checkbox": | |
foreach ( $options as $k => $option ) { | |
$tabindex++; | |
if ( $field['type'] == 'radio' ) { | |
$name_inc = "radio_" . $element_counter; | |
} | |
if ( $field['type'] == 'checkbox' ) { | |
$name_inc = "checkbox_" . $element_counter . "_" . $field_counter; | |
} | |
$args = array( | |
'label' => wptexturize( apply_filters( 'woocommerce_tm_epo_option_name', isset( $wpml_options[ $k ] ) ? $wpml_options[ $k ] : $option, NULL, NULL ) ), | |
'textafterprice' => '', | |
'value' => esc_attr( sanitize_title( $option ) ), | |
'rules' => isset( $field['rules_filtered'][ sanitize_title( $option ) ] ) ? esc_html( json_encode( ($field['rules_filtered'][ sanitize_title( $option ) ]) ) ) : '', | |
'rules_type' => isset( $field['rules_type'][ sanitize_title( $option ) ] ) ? esc_html( json_encode( ($field['rules_type'][ sanitize_title( $option ) ]) ) ) : '', | |
'id' => 'tmcp_choice_' . $element_counter . "_" . $field_counter . "_" . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc . ($dummy_prefix ? "" : $form_prefix), | |
'amount' => '0 ' . $_currency, | |
'original_amount' => '0 ' . $_currency, | |
'hide_amount' => !empty( $field['hide_price'] ) ? " hidden" : "", | |
'tabindex' => $tabindex, | |
'use_images' => "", | |
'grid_break' => "", | |
'percent' => "", | |
'limit' => empty( $field['limit'] ) ? "" : $field['limit'], | |
); | |
wc_get_template( | |
'tm-' . $field['type'] . '.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$field_counter++; | |
} | |
$element_counter++; | |
break; | |
} | |
} | |
wc_get_template( | |
'tm-field-end.php', | |
array(), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$unit_counter++; | |
} | |
} | |
} | |
} | |
// global options after local | |
foreach ( $global_prices['after'] as $priorities ) { | |
foreach ( $priorities as $field ) { | |
$args = array( | |
'tabindex' => $tabindex, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
'_currency' => $_currency, | |
'product_id' => $product_id, | |
); | |
$_return = $this->get_builder_display( $field, 'after', $args, $form_prefix, $product_id, $dummy_prefix ); | |
extract( $_return, EXTR_OVERWRITE ); | |
} | |
} | |
wc_get_template( | |
'tm-end.php', | |
array(), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$this->tm_options_single_have_been_displayed = TRUE; | |
} | |
/** | |
* @return bool | |
*/ | |
public function is_supported_quick_view() { | |
$theme = $this->get_theme( 'Name' ); | |
if ( $theme == 'Flatsome' || $theme == "Kleo" || $theme == "Venedor" || $theme == "Elise" || $theme = "Minshop" || $theme = "Porto" ) { | |
return TRUE; | |
} | |
return FALSE; | |
} | |
/** | |
* @return array | |
*/ | |
public function css_array() { | |
$ext = ".min"; | |
if ( $this->tm_epo_global_js_css_mode == "dev" ) { | |
$ext = ""; | |
} | |
if ( $this->tm_epo_global_js_css_mode == "multiple" || $this->tm_epo_global_js_css_mode == "dev" ) { | |
$css_array = array( | |
'tc-font-awesome' => array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/font-awesome' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => '4.7', | |
'media' => 'screen', | |
), | |
'tc-epo-animate-css' => array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/animate' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => $this->version, | |
'media' => 'all', | |
), | |
'tc-epo-css' => array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/tm-epo' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => $this->version, | |
'media' => 'all', | |
), | |
'tc-spectrum-css' => array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/tm-spectrum' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => '1.7.1', | |
'media' => 'screen', | |
), | |
); | |
if ( !is_product() || in_array( "slider", $this->current_option_features ) ) { | |
$css_array['tc-owl-carousel-css'] = array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/owl.carousel' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => '2.2', | |
'media' => 'all', | |
); | |
$css_array['tc-owl-carousel-theme-css'] = array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/owl.theme.default' . $ext . '.css', | |
'deps' => FALSE, | |
'version' => '2.2', | |
'media' => 'all', | |
); | |
} | |
} else { | |
$css_array = array( | |
'tc-epo-css' => array( | |
'src' => TM_EPO_PLUGIN_URL . '/assets/css/epo.min.css', | |
'deps' => FALSE, | |
'version' => $this->version, | |
'media' => 'all', | |
), | |
); | |
} | |
return $css_array; | |
} | |
public function custom_frontend_scripts() { | |
$this->defered_files = array(); | |
$ext = ".min"; | |
if ( $this->tm_epo_global_js_css_mode == "dev" ) { | |
$ext = ""; | |
} | |
do_action( 'tm_epo_register_addons_scripts' ); | |
if ( apply_filters( 'wc_epo_register_addons_scripts', FALSE ) ) { | |
return; | |
} | |
$product = wc_get_product(); | |
if ( $enqueue_styles = apply_filters( 'tm_epo_enqueue_styles', $this->css_array() ) ) { | |
foreach ( $enqueue_styles as $handle => $args ) { | |
wp_enqueue_style( $handle, $args['src'], $args['deps'], $args['version'], $args['media'] ); | |
} | |
if ( is_rtl() ) { | |
wp_enqueue_style( 'tm-epo-css-rtl', TM_EPO_PLUGIN_URL . '/assets/css/tm-epo-rtl' . $ext . '.css', FALSE, $this->version, 'all' ); | |
} | |
} | |
add_filter( 'woocommerce_price_trim_zeros', '__return_true' ); | |
$zero_price = wc_price( 123456789, array( | |
'currency' => '', | |
'decimal_separator' => '.', | |
'thousand_separator' => ',', | |
'decimals' => 0, | |
) ); | |
remove_filter( 'woocommerce_price_trim_zeros', '__return_true' ); | |
$formatted_price = str_replace( '123,456,789', '{{{ data.price }}}', $zero_price ); | |
$suffix = ''; | |
if ( $product ) { | |
$suffix = $product->get_price_suffix(); | |
$formatted_price .= $suffix; | |
} | |
wc_get_template( 'tc-js-templates.php', array( 'formatted_price' => $formatted_price ), $this->_namespace, TM_EPO_TEMPLATE_PATH ); | |
$dependencies = array(); | |
$dependencies[] = 'jquery-ui-slider'; | |
$dependencies[] = 'wp-util'; | |
$dependencies[] = 'jquery'; | |
if ( $this->tm_epo_global_js_css_mode == "multiple" || $this->tm_epo_global_js_css_mode == "dev" ) { | |
$dependencies[] = 'tm-scripts'; | |
wp_register_script( 'tm-scripts', TM_EPO_PLUGIN_URL . '/assets/js/tm-scripts' . $ext . '.js', '', $this->version, TRUE ); | |
if ( !is_product() || (in_array( "date", $this->current_option_features ) || in_array( "time", $this->current_option_features )) ) { | |
$dependencies[] = 'jquery-ui-core'; | |
$dependencies[] = 'tm-datepicker'; | |
$this->defered_files[] = TM_EPO_PLUGIN_URL . '/assets/js/tm-datepicker' . $ext . '.js'; | |
wp_deregister_script( 'tm-datepicker' ); | |
wp_register_script( 'tm-datepicker', TM_EPO_PLUGIN_URL . '/assets/js/tm-datepicker' . $ext . '.js', array( 'jquery', 'jquery-ui-core' ), $this->version, TRUE ); | |
wp_enqueue_script( 'tm-datepicker' ); | |
} | |
if ( !is_product() || in_array( "time", $this->current_option_features ) ) { | |
$dependencies[] = 'jquery-ui-core'; | |
$dependencies[] = 'tm-datepicker'; | |
$dependencies[] = 'tm-timepicker'; | |
$this->defered_files[] = TM_EPO_PLUGIN_URL . '/assets/js/tm-timepicker' . $ext . '.js'; | |
wp_deregister_script( 'tm-timepicker' ); | |
wp_register_script( 'tm-timepicker', TM_EPO_PLUGIN_URL . '/assets/js/tm-timepicker' . $ext . '.js', array( 'jquery', 'jquery-ui-core', 'tm-datepicker' ), $this->version, TRUE ); | |
wp_enqueue_script( 'tm-timepicker' ); | |
} | |
if ( !is_product() || in_array( "slider", $this->current_option_features ) ) { | |
$dependencies[] = 'tm-owl-carousel'; | |
$this->defered_files[] = TM_EPO_PLUGIN_URL . '/assets/js/owl.carousel' . $ext . '.js'; | |
wp_deregister_script( 'tm-owl-carousel' ); | |
wp_register_script( 'tm-owl-carousel', TM_EPO_PLUGIN_URL . '/assets/js/owl.carousel' . $ext . '.js', array( 'jquery' ), $this->version, TRUE ); | |
wp_enqueue_script( 'tm-owl-carousel' ); | |
} | |
$dependencies = array_unique( $dependencies ); | |
$this->defered_files[] = TM_EPO_PLUGIN_URL . '/assets/js/tm-epo' . $ext . '.js'; | |
wp_deregister_script( 'tm-epo' ); | |
wp_register_script( 'tm-epo', TM_EPO_PLUGIN_URL . '/assets/js/tm-epo' . $ext . '.js', $dependencies, $this->version, TRUE ); | |
wp_enqueue_script( 'tm-epo' ); | |
} else { | |
$dependencies[] = 'jquery-ui-core'; | |
$this->defered_files[] = TM_EPO_PLUGIN_URL . '/assets/js/epo.min.js'; | |
wp_deregister_script( 'tm-epo' ); | |
wp_register_script( 'tm-epo', TM_EPO_PLUGIN_URL . '/assets/js/epo.min.js', $dependencies, $this->version, TRUE ); | |
wp_enqueue_script( 'tm-epo' ); | |
} | |
$extra_fee = 0; | |
global $wp_locale; | |
$args = array( | |
'ajax_url' => admin_url( 'admin-ajax' ) . '.php',//WPML 3.3.3 fix | |
'extra_fee' => apply_filters( 'woocommerce_tm_final_price_extra_fee', $extra_fee, $product ), | |
'i18n_extra_fee' => __( 'Extra fee', 'woocommerce-tm-extra-product-options' ), | |
'i18n_unit_price' => (!empty( $this->tm_epo_options_unit_price_text )) ? $this->tm_epo_options_unit_price_text : __( 'Unit price', 'woocommerce-tm-extra-product-options' ), | |
'i18n_options_total' => (!empty( $this->tm_epo_options_total_text )) ? $this->tm_epo_options_total_text : __( 'Options amount', 'woocommerce-tm-extra-product-options' ), | |
'i18n_fees_total' => (!empty( $this->tm_epo_fees_total_text )) ? $this->tm_epo_fees_total_text : __( 'Fees amount', 'woocommerce-tm-extra-product-options' ), | |
'i18n_final_total' => (!empty( $this->tm_epo_final_total_text )) ? $this->tm_epo_final_total_text : __( 'Final total', 'woocommerce-tm-extra-product-options' ), | |
'i18n_prev_text' => (!empty( $this->tm_epo_slider_prev_text )) ? $this->tm_epo_slider_prev_text : __( 'Prev', 'woocommerce-tm-extra-product-options' ), | |
'i18n_next_text' => (!empty( $this->tm_epo_slider_next_text )) ? $this->tm_epo_slider_next_text : __( 'Next', 'woocommerce-tm-extra-product-options' ), | |
'i18n_sign_up_fee' => (!empty( $this->tm_epo_subscription_fee_text )) ? $this->tm_epo_subscription_fee_text : __( 'Sign up fee', 'woocommerce-tm-extra-product-options' ), | |
'i18n_cancel' => __( 'Cancel', 'woocommerce-tm-extra-product-options' ), | |
'i18n_close' => (!empty( $this->tm_epo_close_button_text )) ? $this->tm_epo_close_button_text : __( 'Close', 'woocommerce-tm-extra-product-options' ), | |
'i18n_addition_options' => (!empty( $this->tm_epo_additional_options_text )) ? $this->tm_epo_additional_options_text : __( 'Additional options', 'woocommerce-tm-extra-product-options' ), | |
'i18n_characters_remaining' => (!empty( $this->tm_epo_characters_remaining_text )) ? $this->tm_epo_characters_remaining_text : __( 'characters remaining', 'woocommerce-tm-extra-product-options' ), | |
'i18n_option_label' => __( 'Label', 'woocommerce-tm-extra-product-options' ), | |
'i18n_option_value' => __( 'Value', 'woocommerce-tm-extra-product-options' ), | |
'i18n_option_qty' => __( 'Qty', 'woocommerce-tm-extra-product-options' ), | |
'i18n_option_price' => __( 'Price', 'woocommerce-tm-extra-product-options' ), | |
'i18n_uploading_files' => (!empty( $this->tm_epo_uploading_files_text )) ? $this->tm_epo_uploading_files_text : __( 'Uploading files', 'woocommerce-tm-extra-product-options' ), | |
'i18n_uploading_message' => (!empty( $this->tm_epo_uploading_message_text )) ? $this->tm_epo_uploading_message_text : __( 'Your files are being uploaded', 'woocommerce-tm-extra-product-options' ), | |
'currency_format_num_decimals' => apply_filters( 'wc_epo_price_decimals', wc_get_price_decimals()), | |
'currency_format_symbol' => get_woocommerce_currency_symbol(), | |
'currency_format_decimal_sep' => esc_attr( stripslashes( get_option( 'woocommerce_price_decimal_sep' ) ) ), | |
'currency_format_thousand_sep' => esc_attr( stripslashes( get_option( 'woocommerce_price_thousand_sep' ) ) ), | |
'currency_format' => esc_attr( str_replace( array( '%1$s', '%2$s' ), array( '%s', '%v' ), get_woocommerce_price_format() ) ), | |
'css_styles' => $this->tm_epo_css_styles, | |
'css_styles_style' => $this->tm_epo_css_styles_style, | |
'tm_epo_options_placement' => $this->tm_epo_options_placement, | |
'tm_epo_totals_box_placement' => $this->tm_epo_totals_box_placement, | |
'tm_epo_no_lazy_load' => $this->tm_epo_no_lazy_load, | |
'tm_epo_show_only_active_quantities' => $this->tm_epo_show_only_active_quantities, | |
'tm_epo_hide_add_cart_button' => $this->tm_epo_hide_add_cart_button, | |
'tm_epo_auto_hide_price_if_zero' => $this->tm_epo_auto_hide_price_if_zero, | |
"tm_epo_global_enable_validation" => $this->tm_epo_global_enable_validation, | |
"tm_epo_global_input_decimal_separator" => $this->tm_epo_global_input_decimal_separator, | |
"tm_epo_global_displayed_decimal_separator" => $this->tm_epo_global_displayed_decimal_separator, | |
"tm_epo_remove_free_price_label" => $this->tm_epo_remove_free_price_label, | |
"tm_epo_global_product_image_selector" => $this->tm_epo_global_product_image_selector, | |
"tm_epo_global_product_image_mode" => $this->tm_epo_global_product_image_mode, | |
"tm_epo_global_move_out_of_stock" => $this->tm_epo_global_move_out_of_stock, | |
"tm_epo_progressive_display" => $this->tm_epo_progressive_display, | |
"tm_epo_animation_delay" => $this->tm_epo_animation_delay, | |
"tm_epo_start_animation_delay" => $this->tm_epo_start_animation_delay, | |
"tm_epo_global_validator_messages" => array( | |
"required" => (!empty( $this->tm_epo_this_field_is_required_text )) ? $this->tm_epo_this_field_is_required_text : __( "This field is required.", 'woocommerce-tm-extra-product-options' ), | |
"email" => __( "Please enter a valid email address.", 'woocommerce-tm-extra-product-options' ), | |
"url" => __( "Please enter a valid URL.", 'woocommerce-tm-extra-product-options' ), | |
"number" => __( "Please enter a valid number.", 'woocommerce-tm-extra-product-options' ), | |
"digits" => __( "Please enter only digits.", 'woocommerce-tm-extra-product-options' ), | |
"maxlength" => __( "Please enter no more than {0} characters.", 'woocommerce-tm-extra-product-options' ), | |
"minlength" => __( "Please enter at least {0} characters.", 'woocommerce-tm-extra-product-options' ), | |
"max" => __( "Please enter a value less than or equal to {0}.", 'woocommerce-tm-extra-product-options' ), | |
"min" => __( "Please enter a value greater than or equal to {0}.", 'woocommerce-tm-extra-product-options' ), | |
"epolimit" => __( "Please select up to {0} choices.", 'woocommerce-tm-extra-product-options' ), | |
"epoexact" => __( "Please select exactly {0} choices.", 'woocommerce-tm-extra-product-options' ), | |
"epomin" => __( "Please select at least {0} choices.", 'woocommerce-tm-extra-product-options' ), | |
), | |
'first_day' => intval( get_option( 'start_of_week' ) ), | |
'monthNames' => $this->strip_array_indices( $wp_locale->month ), | |
'monthNamesShort' => $this->strip_array_indices( $wp_locale->month_abbrev ), | |
'dayNames' => $this->strip_array_indices( $wp_locale->weekday ), | |
'dayNamesShort' => $this->strip_array_indices( $wp_locale->weekday_abbrev ), | |
'dayNamesMin' => $this->strip_array_indices( $wp_locale->weekday_initial ), | |
'isRTL' => $wp_locale->text_direction == 'rtl', | |
'text_direction' => $wp_locale->text_direction, | |
'is_rtl' => is_rtl(), | |
'closeText' => (!empty( $this->tm_epo_closeText )) ? $this->tm_epo_closeText : __( 'Done', 'woocommerce-tm-extra-product-options' ), | |
'currentText' => (!empty( $this->tm_epo_currentText )) ? $this->tm_epo_currentText : __( 'Today', 'woocommerce-tm-extra-product-options' ), | |
'hourText' => __( 'Hour', 'woocommerce-tm-extra-product-options' ), | |
'minuteText' => __( 'Minute', 'woocommerce-tm-extra-product-options' ), | |
'secondText' => __( 'Second', 'woocommerce-tm-extra-product-options' ), | |
'floating_totals_box' => $this->tm_epo_floating_totals_box, | |
'floating_totals_box_visibility' => $this->tm_epo_floating_totals_box_visibility, | |
'floating_totals_box_add_button' => $this->tm_epo_floating_totals_box_add_button, | |
'floating_totals_box_html_before' => apply_filters( 'floating_totals_box_html_before', '' ), | |
'floating_totals_box_html_after' => apply_filters( 'floating_totals_box_html_after', '' ), | |
'tm_epo_show_unit_price' => $this->tm_epo_show_unit_price, | |
'tm_epo_fees_on_unit_price' => $this->tm_epo_fees_on_unit_price, | |
'tm_epo_enable_final_total_box_all' => $this->tm_epo_enable_final_total_box_all, | |
'tm_epo_change_original_price' => $this->tm_epo_change_original_price, | |
'tm_epo_change_variation_price' => $this->tm_epo_change_variation_price, | |
'tm_epo_enable_in_shop' => $this->tm_epo_enable_in_shop, | |
'tm_epo_disable_error_scroll' => $this->tm_epo_disable_error_scroll, | |
'tm_epo_upload_popup' => $this->tm_epo_upload_popup, | |
'current_free_text' => $this->current_free_text, | |
'wc_booking_person_qty_multiplier' => isset( $this->tm_epo_bookings_person ) && ($this->tm_epo_bookings_person == "yes") ? 1 : 0, | |
'wc_booking_block_qty_multiplier' => isset( $this->tm_epo_bookings_block ) && ($this->tm_epo_bookings_block == "yes") ? 1 : 0, | |
); | |
wp_localize_script( 'tm-epo', 'tm_epo_js', $args ); | |
} | |
/** | |
* Format array for the datepicker | |
* | |
* WordPress stores the locale information in an array with a alphanumeric index, and | |
* the datepicker wants a numerical index. This function replaces the index with a number | |
*/ | |
private function strip_array_indices( $ArrayToStrip = array() ) { | |
$NewArray = array(); | |
foreach ( $ArrayToStrip as $objArrayItem ) { | |
$NewArray[] = $objArrayItem; | |
} | |
return ($NewArray); | |
} | |
/** | |
* @param string $form_prefix | |
*/ | |
private function tm_epo_totals_batch( $form_prefix = "" ) { | |
foreach ( $this->current_product_id_to_be_displayed_check as $key => $product_id ) { | |
if ( !empty( $product_id ) ) { | |
$this->print_price_fields( $product_id, $form_prefix ); | |
if ( $this->tm_epo_options_placement != $this->tm_epo_totals_box_placement ) { | |
if ( !$this->is_bto ) { | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
} | |
} | |
} | |
} | |
if ( !$this->is_bto ) { | |
if ( $this->tm_epo_options_placement != $this->tm_epo_totals_box_placement ) { | |
$this->epo_internal_counter = 0; | |
$this->epo_internal_counter_check = array(); | |
} | |
} | |
} | |
/** | |
* @param $classes | |
* @return int | |
*/ | |
public function get_tax_rate( $classes ) { | |
$tax_rate = 0; | |
if ( class_exists( 'WC_Tax' ) ) { | |
$_tax = new WC_Tax(); | |
$taxrates = $_tax->get_rates( $classes ); | |
unset( $_tax ); | |
$tax_rate = 0; | |
foreach ( $taxrates as $key => $value ) { | |
$tax_rate = $tax_rate + floatval( $value['rate'] ); | |
} | |
} | |
return $tax_rate; | |
} | |
/** | |
* @param int $product_id | |
* @param string $form_prefix | |
* @param bool $is_from_shortcode | |
*/ | |
private function print_price_fields( $product_id = 0, $form_prefix = "", $is_from_shortcode = FALSE ) { | |
if ( !$product_id ) { | |
global $product; | |
if ( $product ) { | |
$product_id = tc_get_id( $product ); | |
} | |
} else { | |
$product = wc_get_product( $product_id ); | |
} | |
if ( !$product_id || empty( $product ) ) { | |
if ( !empty( $this->current_product_id_to_be_displayed ) ) { | |
$product_id = $this->current_product_id_to_be_displayed; | |
$product = wc_get_product( $product_id ); | |
} else { | |
$this->tm_epo_totals_batch( $form_prefix ); | |
return; | |
} | |
} | |
if ( !$product_id || empty( $product ) ) { | |
return; | |
} | |
$cpf_price_array = $this->get_product_tm_epos( $product_id ); | |
if ( !$cpf_price_array ) { | |
return; | |
} | |
if ( $cpf_price_array && $this->tm_epo_enable_final_total_box_all == "no" ) { | |
$global_price_array = $cpf_price_array['global']; | |
$local_price_array = $cpf_price_array['local']; | |
if ( empty( $global_price_array ) && empty( $local_price_array ) ) { | |
if ( !$this->is_bto ) { | |
if ( empty( $this->epo_internal_counter ) || !isset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ) ) { | |
// First time displaying totals and fields haven't been displayed | |
$this->epo_internal_counter++; | |
$this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] = $this->epo_internal_counter; | |
} else { | |
// Fields have already been displayed | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
$this->current_product_id_to_be_displayed = 0; | |
} | |
$_epo_internal_counter = $this->epo_internal_counter; | |
} else { | |
$_epo_internal_counter = 0; | |
} | |
return; | |
} | |
} | |
if ( !$cpf_price_array && $this->tm_epo_enable_final_total_box_all == "no" ) { | |
return; | |
} | |
$force_quantity = 0; | |
if ( $this->cart_edit_key ) { | |
$cart_item_key = $this->cart_edit_key; | |
$cart_item = WC()->cart->get_cart_item( $cart_item_key ); | |
if ( isset( $cart_item["quantity"] ) ) { | |
$force_quantity = $cart_item["quantity"]; | |
} | |
} | |
if ( !$this->is_bto ) { | |
if ( empty( $this->epo_internal_counter ) || !isset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ) ) { | |
// First time displaying totals and fields haven't been displayed | |
$this->epo_internal_counter++; | |
$this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] = $this->epo_internal_counter; | |
} else { | |
// Fields have already been displayed | |
unset( $this->epo_internal_counter_check[ "tc" . $this->epo_internal_counter ] ); | |
$this->current_product_id_to_be_displayed = 0; | |
} | |
$_epo_internal_counter = $this->epo_internal_counter; | |
} else { | |
$_epo_internal_counter = 0; | |
} | |
if ( !$form_prefix && $this->wc_vars["is_page"] ) { | |
$form_prefix = 'tcform' . $this->epo_internal_counter; | |
} | |
if ( $form_prefix ) { | |
$form_prefix = "_" . $form_prefix; | |
} | |
if ( function_exists( 'WC_CP' ) && version_compare( WC_CP()->version, "3.8", "<" ) && tc_get_product_type( $product ) == "composite" && is_callable( array( $product, 'get_base_price' ) ) ) { | |
$_price = apply_filters( 'woocommerce_tm_epo_price_compatibility', $product->get_base_price(), $product ); | |
} else { | |
$_price = apply_filters( 'woocommerce_tm_epo_price_compatibility', $product->get_price(), $product ); | |
} | |
$price = array(); | |
$price['product'] = array(); // product price rules | |
$price['price'] = apply_filters( 'wc_epo_product_price', $_price, "", FALSE ); // product price | |
$price = apply_filters( 'wc_epo_product_price_rules', $price, $product ); | |
// Woothemes Dynamic Pricing (not yet fully compatible) | |
if ( class_exists( 'WC_Dynamic_Pricing' ) ) { | |
$id = isset( $product->variation_id ) ? $product->variation_id : tc_get_id( $product ); | |
$dp = WC_Dynamic_Pricing::instance(); | |
if ( $dp && | |
is_object( $dp ) && property_exists( $dp, "discounted_products" ) | |
&& isset( $dp->discounted_products[ $id ] ) | |
) { | |
$_price = $dp->discounted_products[ $id ]; | |
} else { | |
$_price = $product->get_price(); | |
} | |
$price['price'] = apply_filters( 'wc_epo_product_price', $_price, "", FALSE ); // product price | |
} | |
$variations = array(); | |
$variations_subscription_period = array(); | |
$variations_subscription_sign_up_fee = array(); | |
$all=get_posts( apply_filters( 'woocommerce_variable_children_args', array( | |
'post_parent' => tc_get_id($product), | |
'post_type' => 'product_variation', | |
'orderby' => array( 'menu_order' => 'ASC', 'ID' => 'ASC' ), | |
//'fields' => 'ids', | |
'post_status' => 'publish', | |
'numberposts' => -1, | |
), $product, false ) ); | |
$all_f=array(); | |
foreach ( $all as $child ) { | |
$all_f[$child->ID] = $child; | |
} | |
//foreach ( $product->get_children() as $child_id ) { | |
foreach ( $all_f as $child_id=>$variation ) { | |
/*if (is_object($child_id)){ | |
$variation = $child_id; | |
$child_id = tc_get_id($child_id); | |
}else{ | |
$variation = wc_get_product( $child_id ); | |
}*/ | |
$variation = wc_get_product( $child_id ); | |
/*if ( !$variation || !$variation->exists() ) { | |
continue; | |
}*/ | |
if ( class_exists( 'WC_Subscriptions_Product' ) ) { | |
$variations_subscription_period[ $child_id ] = WC_Subscriptions_Product::get_price_string( | |
$variation, | |
array( | |
'subscription_price' => FALSE, | |
'sign_up_fee' => FALSE, | |
'trial_length' => FALSE, | |
'price' => NULL, | |
) | |
); | |
if ( is_callable( array( 'WC_Subscriptions_Product', 'get_sign_up_fee' ) ) ) { | |
$variations_subscription_sign_up_fee[ $child_id ] = WC_Subscriptions_Product::get_sign_up_fee( $variation ); | |
} else { | |
$variations_subscription_sign_up_fee[ $child_id ] = $variation->subscription_sign_up_fee; | |
} | |
} else { | |
$variations_subscription_period[ $child_id ] = ''; | |
$variations_subscription_sign_up_fee[ $child_id ] = ''; | |
} | |
$variations[ $child_id ] = apply_filters( 'woocommerce_tm_epo_price_compatibility', apply_filters( 'wc_epo_product_price', $variation->get_price(), "", FALSE ), $variation, $child_id ); | |
} | |
$is_subscription = FALSE; | |
$subscription_period = ''; | |
$subscription_sign_up_fee = 0; | |
if ( class_exists( 'WC_Subscriptions_Product' ) ) { | |
if ( WC_Subscriptions_Product::is_subscription( $product ) ) { | |
$is_subscription = TRUE; | |
$subscription_period = WC_Subscriptions_Product::get_price_string( | |
$product, | |
array( | |
'subscription_price' => FALSE, | |
'sign_up_fee' => FALSE, | |
'trial_length' => FALSE, | |
'price' => NULL, | |
) | |
); | |
$subscription_sign_up_fee = WC_Subscriptions_Product::get_sign_up_fee( $product ); | |
} | |
} | |
global $woocommerce; | |
$cart = $woocommerce->cart; | |
$tax_rate = $this->get_tax_rate( tc_get_tax_class( $product ) ); | |
$taxable = $product->is_taxable(); | |
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' ); | |
$tax_string = ""; | |
if ( $taxable && $this->tm_epo_global_tax_string_suffix == "yes" ) { | |
if ( $tax_display_mode == 'excl' ) { | |
$tax_string = ' <small>' . apply_filters( 'wc_epo_ex_tax_or_vat_string', WC()->countries->ex_tax_or_vat() ) . '</small>'; | |
} else { | |
$tax_string = ' <small>' . apply_filters( 'inc_tax_or_vat', WC()->countries->inc_tax_or_vat() ) . '</small>'; | |
} | |
} | |
$base_taxes_of_one = 0; | |
$modded_taxes_of_one = 0; | |
$is_vat_exempt = -1; | |
$non_base_location_prices = -1; | |
$base_tax_rate = $tax_rate; | |
if ( class_exists( 'WC_Tax' ) && version_compare( get_option( 'woocommerce_version' ), '2.4', '>=' ) ) { | |
$tax_rates = WC_Tax::get_rates( tc_get_tax_class( $product ) ); | |
$base_tax_rates = WC_Tax::get_base_tax_rates( tc_get_tax_class( $product ) ); | |
$base_tax_rate = 0; | |
foreach ( $base_tax_rates as $key => $value ) { | |
$base_tax_rate = $base_tax_rate + floatval( $value['rate'] ); | |
} | |
$is_vat_exempt = (!empty( WC()->customer ) && WC()->customer->is_vat_exempt()) == TRUE ? 1 : 0; | |
$non_base_location_prices = ($tax_rates !== $base_tax_rates && apply_filters( 'woocommerce_adjust_non_base_location_prices', TRUE )) == TRUE ? 1 : 0; | |
$precision = wc_get_rounding_precision(); | |
$price_of_one = 1 * (pow( 10, $precision )); | |
$base_taxes_of_one = array_sum( WC_Tax::calc_tax( $price_of_one, $base_tax_rates, TRUE ) ); | |
$modded_taxes_of_one = array_sum( WC_Tax::calc_tax( $price_of_one - $base_taxes_of_one, $tax_rates, FALSE ) ); | |
$base_taxes_of_one = $base_taxes_of_one / (pow( 10, $precision )); | |
$modded_taxes_of_one = $modded_taxes_of_one / (pow( 10, $precision )); | |
} | |
$forcart = "main"; | |
$classcart = "tm-cart-main"; | |
$classtotalform = "tm-totals-form-main"; | |
$form_prefix_id = str_replace( "_", "", $form_prefix ); | |
if ( !empty( $form_prefix ) ) { | |
$forcart = $form_prefix_id; | |
$classcart = "tm-cart-" . $form_prefix_id; | |
$classtotalform = "tm-totals-form-" . $form_prefix_id; | |
} | |
do_action( "wc_epo_before_totals_box", array( 'product_id' => $product_id, 'form_prefix' => $form_prefix, 'is_from_shortcode' => $is_from_shortcode ) ); | |
wc_get_template( | |
'tm-totals.php', | |
apply_filters( 'wc_epo_template_args_tm_totals', | |
array( | |
'classcart' => $classcart, | |
'forcart' => $forcart, | |
'classtotalform' => $classtotalform, | |
'theme_name' => $this->get_theme( 'Name' ), | |
'variations' => esc_html( json_encode( (array) $variations ) ), | |
'variations_subscription_period' => esc_html( json_encode( (array) $variations_subscription_period ) ), | |
'variations_subscription_sign_up_fee' => esc_html( json_encode( (array) $variations_subscription_sign_up_fee ) ), | |
'subscription_period' => $subscription_period, | |
'subscription_sign_up_fee' => $subscription_sign_up_fee, | |
'is_subscription' => $is_subscription, | |
'is_sold_individually' => $product->is_sold_individually(), | |
'hidden' => ($this->tm_meta_cpf['override_final_total_box']) ? (($this->tm_epo_final_total_box == 'hide' || $this->tm_epo_final_total_box == 'disable' || $this->tm_epo_final_total_box == 'disable_change') ? ' hidden' : '') : (($this->tm_meta_cpf['override_final_total_box'] == 'hide' || $this->tm_meta_cpf['override_final_total_box'] == 'disable' || $this->tm_meta_cpf['override_final_total_box'] == 'disable_change') ? ' hidden' : ''), | |
'price_override' => ($this->tm_epo_global_override_product_price == 'no') | |
? 0 | |
: (($this->tm_epo_global_override_product_price == 'yes') | |
? 1 | |
: !empty( $this->tm_meta_cpf['price_override'] ) ? 1 : 0), | |
'form_prefix' => $form_prefix_id, | |
'type' => esc_html( tc_get_product_type( $product ) ), | |
'price' => esc_html( (is_object( $product ) ? apply_filters( 'woocommerce_tm_final_price', $price['price'], $product ) : '') ), | |
'is_vat_exempt' => $is_vat_exempt, | |
'non_base_location_prices' => $non_base_location_prices, | |
'taxable' => $taxable, | |
'tax_display_mode' => $tax_display_mode, | |
'prices_include_tax' => $cart->prices_include_tax, | |
'tax_rate' => $tax_rate, | |
'base_tax_rate' => $base_tax_rate, | |
'base_taxes_of_one' => $base_taxes_of_one, | |
'modded_taxes_of_one' => $modded_taxes_of_one, | |
'tax_string' => $tax_string, | |
'product_price_rules' => esc_html( json_encode( (array) $price['product'] ) ), | |
'fields_price_rules' => 0, | |
'force_quantity' => $force_quantity, | |
'product_id' => $product_id, | |
'epo_internal_counter' => $_epo_internal_counter, | |
'is_from_shortcode' => $is_from_shortcode, | |
'tm_epo_final_total_box' => (empty( $this->tm_meta_cpf['override_final_total_box'] )) ? $this->tm_epo_final_total_box : $this->tm_meta_cpf['override_final_total_box'], | |
) ), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
do_action( "wc_epo_after_totals_box", array( 'product_id' => $product_id, 'form_prefix' => $form_prefix, 'is_from_shortcode' => $is_from_shortcode ) ); | |
} | |
public function woocommerce_available_variation( $array, $class, $variation ){ | |
if ( is_array( $array ) ){ | |
$tax_rate = $this->get_tax_rate( tc_get_tax_class( $variation ) ); | |
$base_taxes_of_one = 0; | |
$modded_taxes_of_one = 0; | |
$non_base_location_prices = -1; | |
$base_tax_rate = $tax_rate; | |
if ( class_exists( 'WC_Tax' ) && version_compare( get_option( 'woocommerce_version' ), '2.4', '>=' ) ) { | |
$tax_rates = WC_Tax::get_rates( tc_get_tax_class( $variation ) ); | |
$base_tax_rates = WC_Tax::get_base_tax_rates( tc_get_tax_class( $variation ) ); | |
$base_tax_rate = 0; | |
foreach ( $base_tax_rates as $key => $value ) { | |
$base_tax_rate = $base_tax_rate + floatval( $value['rate'] ); | |
} | |
$non_base_location_prices = ($tax_rates !== $base_tax_rates && apply_filters( 'woocommerce_adjust_non_base_location_prices', TRUE )) == TRUE ? 1 : 0; | |
$precision = wc_get_rounding_precision(); | |
$price_of_one = 1 * (pow( 10, $precision )); | |
$base_taxes_of_one = array_sum( WC_Tax::calc_tax( $price_of_one, $base_tax_rates, TRUE ) ); | |
$modded_taxes_of_one = array_sum( WC_Tax::calc_tax( $price_of_one - $base_taxes_of_one, $tax_rates, FALSE ) ); | |
$base_taxes_of_one = $base_taxes_of_one / (pow( 10, $precision )); | |
$modded_taxes_of_one = $modded_taxes_of_one / (pow( 10, $precision )); | |
} | |
$array["tc_tax_rate"] = $tax_rate; | |
$array["tc_is_taxable"] = $variation->is_taxable(); | |
$array["tc_base_tax_rate"] = $base_tax_rate; | |
$array["tc_base_taxes_of_one"] = $base_taxes_of_one; | |
$array["tc_modded_taxes_of_one"] = $modded_taxes_of_one; | |
$array["tc_non_base_location_prices"] = $non_base_location_prices; | |
} | |
return $array; | |
} | |
/** | |
* @param string $var | |
* @return false|string | |
*/ | |
public function get_theme( $var = '' ) { | |
$out = ''; | |
if ( function_exists( 'wp_get_theme' ) ) { | |
$theme = wp_get_theme(); | |
if ( $theme ) { | |
$out = $theme->get( $var ); | |
} | |
} | |
return $out; | |
} | |
public function tm_add_inline_style_qv() { | |
if ( !empty( $this->inline_styles ) ) { | |
echo '<style type="text/css">'; | |
echo $this->inline_styles; | |
echo '</style>'; | |
} | |
} | |
/** | |
* | |
*/ | |
public function tm_add_inline_style() { | |
if ( !empty( $this->inline_styles ) ) { | |
if ( $this->is_quick_view() || $this->is_bto || $this->tm_epo_global_load_generated_styles_inline == "yes" ) { | |
$this->tm_add_inline_style_qv(); | |
} else { | |
echo '<script type="text/javascript">'; | |
echo 'var data="' . $this->inline_styles . '";'; | |
echo 'jQuery("<style type=\"text/css\">" + data + "</style>").appendTo(document.head);'; | |
echo '</script>'; | |
} | |
} | |
} | |
/** | |
* @param $file | |
* @return array|mixed | |
*/ | |
public function upload_file( $file ) { | |
if ( is_array( $file ) && !empty( $file['tmp_name'] ) && isset( $this->upload_object[ $file['tmp_name'] ] ) ) { | |
$this->upload_object[ $file['tmp_name'] ]['tc'] = TRUE; | |
return $this->upload_object[ $file['tmp_name'] ]; | |
} | |
if ( !defined( 'ALLOW_UNFILTERED_UPLOADS' ) ) { | |
define( 'ALLOW_UNFILTERED_UPLOADS', TRUE ); | |
} | |
include_once(ABSPATH . 'wp-admin/includes/file.php'); | |
include_once(ABSPATH . 'wp-admin/includes/media.php'); | |
add_filter( 'upload_dir', array( $this, 'upload_dir_trick' ) ); | |
add_filter( 'upload_mimes', array( $this, 'upload_mimes_trick' ) ); | |
$upload = wp_handle_upload( $file, array( 'test_form' => FALSE ) ); | |
remove_filter( 'upload_dir', array( $this, 'upload_dir_trick' ) ); | |
remove_filter( 'upload_mimes', array( $this, 'upload_mimes_trick' ) ); | |
if ( is_array( $file ) && !empty( $file['tmp_name'] ) ) { | |
$this->upload_object[ $file['tmp_name'] ] = $upload; | |
} | |
return $upload; | |
} | |
/** | |
* @param array $existing_mimes | |
* @return mixed|void | |
*/ | |
public function upload_mimes_trick( $existing_mimes = array() ) { | |
$mimes = array(); | |
$tm_epo_custom_file_types = $this->tm_epo_custom_file_types; | |
$tm_epo_allowed_file_types = $this->tm_epo_allowed_file_types; | |
$tm_epo_custom_file_types = explode( ",", $tm_epo_custom_file_types ); | |
if ( !is_array( $tm_epo_custom_file_types ) ) { | |
$tm_epo_custom_file_types = array(); | |
} | |
if ( !is_array( $tm_epo_allowed_file_types ) ) { | |
$tm_epo_allowed_file_types = array( "@" ); | |
} | |
$tm_epo_allowed_file_types = array_merge( $tm_epo_allowed_file_types, $tm_epo_custom_file_types ); | |
$tm_epo_allowed_file_types = array_unique( $tm_epo_allowed_file_types ); | |
$wp_get_ext_types = wp_get_ext_types(); | |
$wp_get_mime_types = wp_get_mime_types(); | |
foreach ( $tm_epo_allowed_file_types as $key => $value ) { | |
if ( $value == "@" ) { | |
$mimes = $existing_mimes; | |
} else { | |
$value = ltrim( $value, "@" ); | |
switch ( $value ) { | |
case 'image': | |
case 'audio': | |
case 'video': | |
case 'document': | |
case 'spreadsheet': | |
case 'interactive': | |
case 'text': | |
case 'archive': | |
case 'code': | |
if ( isset( $wp_get_ext_types[ $value ] ) && is_array( $wp_get_ext_types[ $value ] ) ) { | |
foreach ( $wp_get_ext_types[ $value ] as $k => $extension ) { | |
$type = FALSE; | |
foreach ( $wp_get_mime_types as $exts => $_mime ) { | |
if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) { | |
$type = $_mime; | |
break; | |
} | |
} | |
if ( $type ) { | |
$mimes[ $extension ] = $type; | |
} | |
} | |
} | |
break; | |
default: | |
$type = FALSE; | |
foreach ( $wp_get_mime_types as $exts => $_mime ) { | |
if ( preg_match( '!^(' . $exts . ')$!i', $value ) ) { | |
$type = $_mime; | |
break; | |
} | |
} | |
if ( $type ) { | |
$mimes[ $value ] = $type; | |
} else { | |
$mimes[ $value ] = "application/octet-stream"; | |
} | |
break; | |
} | |
} | |
} | |
return apply_filters( 'wc_epo_upload_mimes', $mimes ); | |
} | |
/** | |
* @param $param | |
* @return mixed | |
*/ | |
public function upload_dir_trick( $param ) { | |
global $woocommerce; | |
$this->unique_dir = apply_filters( 'wc_epo_upload_unique_dir', md5( $woocommerce->session->get_customer_id() ) ); | |
$subdir = $this->upload_dir . $this->unique_dir; | |
if ( empty( $param['subdir'] ) ) { | |
$param['path'] = $param['path'] . $subdir; | |
$param['url'] = $param['url'] . $subdir; | |
$param['subdir'] = $subdir; | |
} else { | |
$param['path'] = str_replace( $param['subdir'], $subdir, $param['path'] ); | |
$param['url'] = str_replace( $param['subdir'], $subdir, $param['url'] ); | |
$param['subdir'] = str_replace( $param['subdir'], $subdir, $param['subdir'] ); | |
} | |
return $param; | |
} | |
/** | |
* Append name_inc functions (required for condition logic to check if an element is visible) | |
* | |
* @param int $post_id | |
* @param array $global_epos | |
* @param array $product_epos | |
* @param string $form_prefix | |
* @param string $add_identifier | |
* @return array | |
*/ | |
public function tm_fill_element_names( $post_id = 0, $global_epos = array(), $product_epos = array(), $form_prefix = "", $add_identifier = "" ) { | |
$global_price_array = $global_epos; | |
$local_price_array = $product_epos; | |
$global_prices = array( 'before' => array(), 'after' => array() ); | |
foreach ( $global_price_array as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) && is_array( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['sections_placement'] ) ) { | |
$global_prices[ $section['sections_placement'] ][ $priority ][ $pid ]['sections'][ $section_id ] = $section; | |
} | |
} | |
} | |
} | |
} | |
$unit_counter = 0; | |
$field_counter = 0; | |
$element_counter = 0; | |
// global options before local | |
foreach ( $global_prices['before'] as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
$args = array( | |
'priority' => $priority, | |
'pid' => $pid, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
); | |
$_return = $this->fill_builder_display( $global_epos, $field, 'before', $args, $form_prefix, $add_identifier ); | |
extract( $_return, EXTR_OVERWRITE ); | |
} | |
} | |
// normal (local) options | |
if ( is_array( $local_price_array ) && sizeof( $local_price_array ) > 0 ) { | |
$attributes = tc_get_attributes( $post_id ); | |
if ( is_array( $attributes ) && count( $attributes ) > 0 ) { | |
foreach ( $local_price_array as $field ) { | |
if ( isset( $field['name'] ) && isset( $attributes[ $field['name'] ] ) && !$attributes[ $field['name'] ]['is_variation'] ) { | |
$attribute = $attributes[ $field['name'] ]; | |
$name_inc = ""; | |
$field_counter = 0; | |
if ( $attribute['is_taxonomy'] ) { | |
switch ( $field['type'] ) { | |
case "select": | |
$element_counter++; | |
break; | |
case "radio": | |
case "checkbox": | |
$element_counter++; | |
break; | |
} | |
} else { | |
switch ( $field['type'] ) { | |
case "select": | |
$element_counter++; | |
break; | |
case "radio": | |
case "checkbox": | |
$element_counter++; | |
break; | |
} | |
} | |
$unit_counter++; | |
} | |
} | |
} | |
} | |
// global options after normal (local) | |
foreach ( $global_prices['after'] as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
$args = array( | |
'priority' => $priority, | |
'pid' => $pid, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
); | |
$_return = $this->fill_builder_display( $global_epos, $field, 'after', $args, $form_prefix, $add_identifier ); | |
extract( $_return, EXTR_OVERWRITE ); | |
} | |
} | |
return $global_epos; | |
} | |
/** | |
* @param string $value | |
* @param string $filter | |
* @return mixed|string|void | |
*/ | |
private function tm_apply_filter( $value = "", $filter = "", $element = "", $element_uniqueid = "" ) { | |
if ( !empty( $filter ) ) { | |
$value = apply_filters( $filter, $value ); | |
} | |
return apply_filters( "wc_epo_setting", apply_filters( 'tm_translate', $value ), $element, $element_uniqueid ); | |
} | |
/** | |
* @param $element | |
* @param $builder | |
* @param $current_builder | |
* @param bool $index | |
* @param string $alt | |
* @param array $wpml_section_fields | |
* @param string $identifier | |
* @param string $apply_filters | |
* @return mixed|string|void | |
*/ | |
public function get_builder_element( $element, $builder, $current_builder, $index = FALSE, $alt = "", $wpml_section_fields = array(), $identifier = "sections", $apply_filters = "", $element_uniqueid = "" ) { | |
$use_wpml = FALSE; | |
$use_original_builder = FALSE; | |
if ( TM_EPO_WPML()->is_active() && $index !== FALSE ) { | |
if ( isset( $current_builder[ $identifier . "_uniqid" ] ) | |
&& isset( $builder[ $identifier . "_uniqid" ] ) | |
&& isset( $builder[ $identifier . "_uniqid" ][ $index ] ) | |
) { | |
// get index of element id in internal array | |
$get_current_builder_uniqid_index = array_search( $builder[ $identifier . "_uniqid" ][ $index ], $current_builder[ $identifier . "_uniqid" ] ); | |
if ( $get_current_builder_uniqid_index !== NULL && $get_current_builder_uniqid_index !== FALSE ) { | |
$index = $get_current_builder_uniqid_index; | |
$use_wpml = TRUE; | |
} else { | |
$use_original_builder = TRUE; | |
} | |
} | |
} | |
if ( isset( $builder[ $element ] ) ) { | |
if ( !$use_original_builder && $use_wpml && ((is_array( $wpml_section_fields ) && in_array( $element, $wpml_section_fields )) || $wpml_section_fields === TRUE) ) { | |
if ( isset( $current_builder[ $element ] ) ) { | |
if ( $index !== FALSE ) { | |
if ( isset( $current_builder[ $element ][ $index ] ) ) { | |
return $this->tm_apply_filter( TM_EPO_HELPER()->build_array( $current_builder[ $element ][ $index ], $builder[ $element ][ $index ] ), $apply_filters, $element, $element_uniqueid ); | |
} else { | |
return $this->tm_apply_filter( $alt, $apply_filters, $element, $element_uniqueid ); | |
} | |
} else { | |
return $this->tm_apply_filter( TM_EPO_HELPER()->build_array( $current_builder[ $element ], $builder[ $element ] ), $apply_filters, $element, $element_uniqueid ); | |
} | |
} | |
} | |
if ( $index !== FALSE ) { | |
if ( isset( $builder[ $element ][ $index ] ) ) { | |
return $this->tm_apply_filter( $builder[ $element ][ $index ], $apply_filters, $element, $element_uniqueid ); | |
} else { | |
return $this->tm_apply_filter( $alt, $apply_filters, $element, $element_uniqueid ); | |
} | |
} else { | |
return $this->tm_apply_filter( $builder[ $element ], $apply_filters, $element, $element_uniqueid ); | |
} | |
} else { | |
return $this->tm_apply_filter( $alt, $apply_filters, $element, $element_uniqueid ); | |
} | |
} | |
/** | |
* Gets a list of all the Extra Product Options (normal and global) | |
* for the specific $post_id. | |
*/ | |
public function get_product_tm_epos( $post_id = 0, $form_prefix = "" ) { | |
if ( empty( $post_id ) || apply_filters( 'wc_epo_disable', FALSE, $post_id ) || !$this->check_enable() ) { | |
return array(); | |
} | |
$post_type = get_post_type( $post_id ); | |
if ( $post_type !== 'product' ) { | |
return array(); | |
} | |
if ( !empty( $this->cpf[ $post_id ] ) ) { | |
return $this->cpf[ $post_id ]; | |
} | |
$this->current_option_features = array(); | |
$this->set_tm_meta( $post_id ); | |
$in_cat = array(); | |
$tmglobalprices = array(); | |
$terms = get_the_terms( $post_id, 'product_cat' ); | |
if ( $terms ) { | |
foreach ( $terms as $term ) { | |
$in_cat[] = $term->term_id; | |
} | |
} | |
// get all categories (no matter the language) | |
$_all_categories = TM_EPO_WPML()->get_terms( NULL, 'product_cat', array( 'fields' => "ids", 'hide_empty' => FALSE ) ); | |
if ( !$_all_categories ) { | |
$_all_categories = array(); | |
} | |
/* Get Normal (Local) options */ | |
$args = array( | |
'post_type' => TM_EPO_LOCAL_POST_TYPE, | |
'post_status' => array( 'publish' ), // get only enabled extra options | |
'numberposts' => -1, | |
'orderby' => 'menu_order', | |
'order' => 'asc', 'suppress_filters' => TRUE, | |
'post_parent' => floatval( TM_EPO_WPML()->get_original_id( $post_id ) ), | |
); | |
TM_EPO_WPML()->remove_sql_filter(); | |
$tmlocalprices = get_posts( $args ); | |
TM_EPO_WPML()->restore_sql_filter(); | |
$tm_meta_cpf_global_forms = (isset( $this->tm_meta_cpf['global_forms'] ) && is_array( $this->tm_meta_cpf['global_forms'] )) ? $this->tm_meta_cpf['global_forms'] : array(); | |
foreach ( $tm_meta_cpf_global_forms as $key => $value ) { | |
$tm_meta_cpf_global_forms[ $key ] = absint( $value ); | |
} | |
$tm_meta_cpf_global_forms_added = array(); | |
if ( !$this->tm_meta_cpf['exclude'] ) { | |
$meta_array = TM_EPO_HELPER()->build_meta_query( 'OR', 'tm_meta_disable_categories', 1, '!=', 'NOT EXISTS' ); | |
$args = array( | |
'post_type' => TM_EPO_GLOBAL_POST_TYPE, | |
'post_status' => array( 'publish' ), // get only enabled global extra options | |
'numberposts' => -1, | |
'orderby' => 'date', | |
'order' => 'asc', | |
'meta_query' => $meta_array, | |
); | |
$args['tax_query'] = array( | |
'relation' => 'OR', | |
/* Get Global options that belong to the product categories */ | |
array( | |
'taxonomy' => 'product_cat', | |
'field' => 'term_id', | |
'terms' => $in_cat, | |
'operator' => 'IN', | |
'include_children' => FALSE, | |
), | |
/* Get Global options that have no catergory set (they apply to all products) */ | |
array( | |
'taxonomy' => 'product_cat', | |
'field' => 'term_id', | |
'terms' => $_all_categories, | |
'operator' => 'NOT IN', | |
'include_children' => FALSE, | |
), | |
array( | |
'taxonomy' => 'product_cat', | |
'field' => 'term_id', | |
'operator' => 'NOT EXISTS', | |
'include_children' => FALSE, | |
), | |
); | |
TM_EPO_WPML()->remove_sql_filter(); | |
$tmp_tmglobalprices = get_posts( $args ); | |
TM_EPO_WPML()->restore_sql_filter(); | |
if ( $tmp_tmglobalprices ) { | |
$wpml_tmp_tmglobalprices = array(); | |
$wpml_tmp_tmglobalprices_added = array(); | |
foreach ( $tmp_tmglobalprices as $price ) { | |
if ( TM_EPO_WPML()->is_active() ) { | |
$price_meta_lang = get_post_meta( $price->ID, TM_EPO_WPML_LANG_META, TRUE ); | |
$original_product_id = floatval( TM_EPO_WPML()->get_original_id( $price->ID, $price->post_type ) ); | |
$double_check_disable_categories = get_post_meta( $original_product_id, "tm_meta_disable_categories", TRUE ); | |
if ( !$double_check_disable_categories ) { | |
if ( $price_meta_lang == TM_EPO_WPML()->get_lang() | |
|| ($price_meta_lang == '' && TM_EPO_WPML()->get_lang() == TM_EPO_WPML()->get_default_lang()) | |
) { | |
$tmglobalprices[] = $price; | |
$tm_meta_cpf_global_forms_added[] = $price->ID; | |
if ( $price_meta_lang != TM_EPO_WPML()->get_default_lang() && $price_meta_lang != '' ) { | |
$wpml_tmp_tmglobalprices_added[ $original_product_id ] = $price; | |
} | |
} else { | |
if ( $price_meta_lang == TM_EPO_WPML()->get_default_lang() || $price_meta_lang == '' ) { | |
$wpml_tmp_tmglobalprices[ $original_product_id ] = $price; | |
} | |
} | |
} | |
} else { | |
$tmglobalprices[] = $price; | |
$tm_meta_cpf_global_forms_added[] = $price->ID; | |
} | |
} | |
// replace missing translation with original | |
if ( TM_EPO_WPML()->is_active() ) { | |
$wpml_gp_keys = array_keys( $wpml_tmp_tmglobalprices ); | |
foreach ( $wpml_gp_keys as $key => $value ) { | |
if ( !isset( $wpml_tmp_tmglobalprices_added[ $value ] ) ) { | |
$tmglobalprices[] = $wpml_tmp_tmglobalprices[ $value ]; | |
$tm_meta_cpf_global_forms_added[] = $price->ID; | |
} | |
} | |
} | |
} | |
/* Get Global options that apply to the product */ | |
$args = array( | |
'post_type' => TM_EPO_GLOBAL_POST_TYPE, | |
'post_status' => array( 'publish' ), // get only enabled global extra options | |
'numberposts' => -1, | |
'orderby' => 'date', | |
'order' => 'asc', | |
'meta_query' => array( | |
array( | |
'key' => 'tm_meta_product_ids', | |
'value' => '"' . $post_id . '";', | |
'compare' => 'LIKE', | |
), | |
), | |
); | |
$tmglobalprices_products = get_posts( $args ); | |
/* Merge Global options */ | |
if ( $tmglobalprices_products ) { | |
$global_id_array = array(); | |
if ( isset( $tmglobalprices ) ) { | |
foreach ( $tmglobalprices as $price ) { | |
$global_id_array[] = $price->ID; | |
} | |
} else { | |
$tmglobalprices = array(); | |
} | |
foreach ( $tmglobalprices_products as $price ) { | |
if ( !in_array( $price->ID, $global_id_array ) ) { | |
$tmglobalprices[] = $price; | |
$tm_meta_cpf_global_forms_added[] = $price->ID; | |
} | |
} | |
} | |
} | |
$tm_meta_cpf_global_forms_added = array_unique( $tm_meta_cpf_global_forms_added ); | |
foreach ( $tm_meta_cpf_global_forms as $key => $value ) { | |
if ( !in_array( $value, $tm_meta_cpf_global_forms_added ) ) { | |
if ( TM_EPO_WPML()->is_active() ) { | |
$tm_meta_lang = get_post_meta( $value, TM_EPO_WPML_LANG_META, TRUE ); | |
if ( empty( $tm_meta_lang ) ) { | |
$tm_meta_lang = TM_EPO_WPML()->get_default_lang(); | |
} | |
$meta_query = TM_EPO_HELPER()->build_meta_query( 'AND', TM_EPO_WPML_LANG_META, TM_EPO_WPML()->get_lang(), '=', 'EXISTS' ); | |
$meta_query[] = array( | |
'key' => TM_EPO_WPML_PARENT_POSTID, | |
'value' => $value, | |
'compare' => '=', | |
); | |
$query = new WP_Query( | |
array( | |
'post_type' => TM_EPO_GLOBAL_POST_TYPE, | |
'post_status' => array( 'publish' ), | |
'numberposts' => -1, | |
'orderby' => 'date', | |
'order' => 'asc', | |
'meta_query' => $meta_query, | |
) ); | |
if ( !empty( $query->posts ) ) { | |
$tmglobalprices[] = get_post( $query->post->ID ); | |
} elseif ( empty( $query->posts ) ) { | |
$tmglobalprices[] = get_post( $value ); | |
} | |
} else { | |
$ispostactive = get_post( $value ); | |
if ( $ispostactive && $ispostactive->post_status == 'publish' ) { | |
$tmglobalprices[] = get_post( $value ); | |
} | |
} | |
} | |
} | |
// Add current product to Global options array (has to be last to not conflict) | |
$tmglobalprices[] = get_post( $post_id ); | |
// End of DB init | |
$epos = $this->generate_global_epos( $tmglobalprices, $post_id, $this->tm_original_builder_elements ); | |
$global_epos = $epos['global']; | |
$epos_prices = $epos['price']; | |
$variation_element_id = $epos['variation_element_id']; | |
$variation_section_id = $epos['variation_section_id']; | |
if ( is_array( $global_epos ) ) { | |
ksort( $global_epos ); | |
} | |
$product_epos = $this->generate_local_epos( $tmlocalprices, $post_id, $this->tm_original_builder_elements ); | |
$global_epos = $this->tm_fill_element_names( $post_id, $global_epos, $product_epos, $form_prefix, "epo" ); | |
$epos = array( | |
'global' => $global_epos, | |
'local' => $product_epos, | |
'price' => $epos_prices, | |
'variation_element_id' => $variation_element_id, | |
'variation_section_id' => $variation_section_id, | |
); | |
$this->cpf[ $post_id ] = $epos; | |
return $epos; | |
} | |
/** | |
* @param $tmlocalprices | |
* @param $post_id | |
* @return array | |
*/ | |
public function generate_local_epos( $tmlocalprices, $post_id ) { | |
$product_epos = array(); | |
if ( $tmlocalprices ) { | |
TM_EPO_WPML()->remove_sql_filter(); | |
$attributes = tc_get_attributes( floatval( TM_EPO_WPML()->get_original_id( $post_id ) ) ); | |
$wpml_attributes = tc_get_attributes( $post_id ); | |
foreach ( $tmlocalprices as $price ) { | |
$tmcp_id = absint( $price->ID ); | |
$n = get_post_meta( $tmcp_id, 'tmcp_attribute', TRUE ); | |
$att = $attributes[ $n ]; | |
if ( $att['is_variation'] || sanitize_title( $att['name'] ) != $n ) { | |
continue; | |
} | |
$tmcp_required = get_post_meta( $tmcp_id, 'tmcp_required', TRUE ); | |
$tmcp_hide_price = get_post_meta( $tmcp_id, 'tmcp_hide_price', TRUE ); | |
$tmcp_limit = get_post_meta( $tmcp_id, 'tmcp_limit', TRUE ); | |
$product_epos[ $tmcp_id ]['is_form'] = 0; | |
$product_epos[ $tmcp_id ]['required'] = empty( $tmcp_required ) ? 0 : 1; | |
$product_epos[ $tmcp_id ]['hide_price'] = empty( $tmcp_hide_price ) ? 0 : 1; | |
$product_epos[ $tmcp_id ]['limit'] = empty( $tmcp_limit ) ? "" : $tmcp_limit; | |
$product_epos[ $tmcp_id ]['name'] = get_post_meta( $tmcp_id, 'tmcp_attribute', TRUE ); | |
$product_epos[ $tmcp_id ]['is_taxonomy'] = get_post_meta( $tmcp_id, 'tmcp_attribute_is_taxonomy', TRUE ); | |
$product_epos[ $tmcp_id ]['label'] = wc_attribute_label( $product_epos[ $tmcp_id ]['name'] ); | |
$product_epos[ $tmcp_id ]['type'] = get_post_meta( $tmcp_id, 'tmcp_type', TRUE ); | |
// Retrieve attributes | |
$product_epos[ $tmcp_id ]['attributes'] = array(); | |
$product_epos[ $tmcp_id ]['attributes_wpml'] = array(); | |
if ( $product_epos[ $tmcp_id ]['is_taxonomy'] ) { | |
if ( !($attributes[ $product_epos[ $tmcp_id ]['name'] ]['is_variation']) ) { | |
$all_terms = TM_EPO_WPML()->get_terms( NULL, $attributes[ $product_epos[ $tmcp_id ]['name'] ]['name'], 'orderby=name&hide_empty=0' ); | |
if ( $all_terms ) { | |
foreach ( $all_terms as $term ) { | |
$has_term = has_term( (int) $term->term_id, $attributes[ $product_epos[ $tmcp_id ]['name'] ]['name'], floatval( TM_EPO_WPML()->get_original_id( $post_id ) ) ) ? 1 : 0; | |
$wpml_term_id = TM_EPO_WPML()->is_active() ? icl_object_id( $term->term_id, $attributes[ $product_epos[ $tmcp_id ]['name'] ]['name'], FALSE ) : FALSE; | |
if ( $has_term ) { | |
$product_epos[ $tmcp_id ]['attributes'][ esc_attr( $term->slug ) ] = apply_filters( 'woocommerce_tm_epo_option_name', esc_html( $term->name ), NULL, NULL ); | |
if ( $wpml_term_id ) { | |
$wpml_term = get_term( $wpml_term_id, $attributes[ $product_epos[ $tmcp_id ]['name'] ]['name'] ); | |
$product_epos[ $tmcp_id ]['attributes_wpml'][ esc_attr( $term->slug ) ] = apply_filters( 'woocommerce_tm_epo_option_name', esc_html( $wpml_term->name ), NULL, NULL ); | |
} else { | |
; | |
$product_epos[ $tmcp_id ]['attributes_wpml'][ esc_attr( $term->slug ) ] = $product_epos[ $tmcp_id ]['attributes'][ esc_attr( $term->slug ) ]; | |
} | |
} | |
} | |
} | |
} | |
} else { | |
if ( isset( $attributes[ $product_epos[ $tmcp_id ]['name'] ] ) ) { | |
$options = array_map( 'trim', explode( WC_DELIMITER, $attributes[ $product_epos[ $tmcp_id ]['name'] ]['value'] ) ); | |
$wpml_options = isset( $wpml_attributes[ $product_epos[ $tmcp_id ]['name'] ]['value'] ) ? array_map( 'trim', explode( WC_DELIMITER, $wpml_attributes[ $product_epos[ $tmcp_id ]['name'] ]['value'] ) ) : $options; | |
foreach ( $options as $k => $option ) { | |
$product_epos[ $tmcp_id ]['attributes'][ esc_attr( sanitize_title( $option ) ) ] = esc_html( apply_filters( 'woocommerce_tm_epo_option_name', $option, NULL, NULL ) ); | |
$product_epos[ $tmcp_id ]['attributes_wpml'][ esc_attr( sanitize_title( $option ) ) ] = esc_html( apply_filters( 'woocommerce_tm_epo_option_name', isset( $wpml_options[ $k ] ) ? $wpml_options[ $k ] : $option, NULL, NULL ) ); | |
} | |
} | |
} | |
// Retrieve price rules | |
$_regular_price = get_post_meta( $tmcp_id, '_regular_price', TRUE ); | |
$_regular_price_type = get_post_meta( $tmcp_id, '_regular_price_type', TRUE ); | |
$product_epos[ $tmcp_id ]['rules'] = $_regular_price; | |
$_regular_price_filtered = TM_EPO_HELPER()->array_map_deep( $_regular_price, $_regular_price_type, array( $this, 'tm_epo_price_filtered' ) ); | |
$product_epos[ $tmcp_id ]['rules_filtered'] = $_regular_price_filtered; | |
$product_epos[ $tmcp_id ]['rules_type'] = $_regular_price_type; | |
if ( !is_array( $_regular_price ) ) { | |
$_regular_price = array(); | |
} | |
if ( !is_array( $_regular_price_type ) ) { | |
$_regular_price_type = array(); | |
} | |
foreach ( $_regular_price as $key => $value ) { | |
foreach ( $value as $k => $v ) { | |
$_regular_price[ $key ][ $k ] = wc_format_localized_price( $v ); | |
} | |
} | |
foreach ( $_regular_price_type as $key => $value ) { | |
foreach ( $value as $k => $v ) { | |
$_regular_price_type[ $key ][ $k ] = $v; | |
} | |
} | |
$product_epos[ $tmcp_id ]['price_rules'] = $_regular_price; | |
$product_epos[ $tmcp_id ]['price_rules_filtered'] = $_regular_price_filtered; | |
$product_epos[ $tmcp_id ]['price_rules_type'] = $_regular_price_type; | |
} | |
TM_EPO_WPML()->restore_sql_filter(); | |
} | |
return $product_epos; | |
} | |
/** | |
* @param $tmglobalprices | |
* @param $post_id | |
* @param $tm_original_builder_elements | |
* @return array | |
*/ | |
public function generate_global_epos( $tmglobalprices, $post_id, $tm_original_builder_elements ) { | |
$global_epos = array(); | |
$epos_prices = array(); | |
$variation_element_id = FALSE; | |
$variation_section_id = FALSE; | |
if ( $tmglobalprices ) { | |
$wpml_section_fields = array(); | |
foreach ( TM_EPO_BUILDER()->_section_elements as $key => $value ) { | |
if ( isset( $value['id'] ) && empty( $value['wpmldisable'] ) ) { | |
$wpml_section_fields[ $value['id'] ] = $value['id']; | |
} | |
} | |
foreach ( $tmglobalprices as $price ) { | |
if ( !is_object( $price ) ) { | |
continue; | |
} | |
$original_product_id = $price->ID; | |
if ( TM_EPO_WPML()->is_active() ) { | |
$wpml_is_original_product = TM_EPO_WPML()->is_original_product( $price->ID, $price->post_type ); | |
if ( !$wpml_is_original_product ) { | |
$original_product_id = floatval( TM_EPO_WPML()->get_original_id( $price->ID, $price->post_type ) ); | |
} | |
} | |
$tmcp_id = absint( $original_product_id ); | |
$tmcp_meta = tc_get_post_meta( $tmcp_id, 'tm_meta', TRUE ); | |
$enabled_roles = tc_get_post_meta( $tmcp_id, 'tm_meta_enabled_roles', TRUE ); | |
$disabled_roles = tc_get_post_meta( $tmcp_id, 'tm_meta_disabled_roles', TRUE ); | |
if ( !empty( $enabled_roles ) || !empty( $disabled_roles ) ) { | |
$enable = FALSE; | |
if ( !is_array( $enabled_roles ) ) { | |
$enabled_roles = array( $enabled_roles ); | |
} | |
if ( !is_array( $disabled_roles ) ) { | |
$disabled_roles = array( $disabled_roles ); | |
} | |
// Get all roles | |
$current_user = wp_get_current_user(); | |
foreach ( $enabled_roles as $key => $value ) { | |
if ( $value == "@everyone" ) { | |
$enable = TRUE; | |
} | |
if ( $value == "@loggedin" && is_user_logged_in() ) { | |
$enable = TRUE; | |
} | |
} | |
if ( $current_user instanceof WP_User ) { | |
$roles = $current_user->roles; | |
if ( is_array( $roles ) ) { | |
foreach ( $roles as $key => $value ) { | |
if ( in_array( $value, $enabled_roles ) ) { | |
$enable = TRUE; | |
break; | |
} | |
} | |
foreach ( $roles as $key => $value ) { | |
if ( in_array( $value, $disabled_roles ) ) { | |
$enable = FALSE; | |
break; | |
} | |
} | |
} | |
} | |
if ( !$enable ) { | |
continue; | |
} | |
} | |
$current_builder = tc_get_post_meta( $price->ID, 'tm_meta_wpml', TRUE ); | |
if ( !$current_builder ) { | |
$current_builder = array(); | |
} else { | |
if ( !isset( $current_builder['tmfbuilder'] ) ) { | |
$current_builder['tmfbuilder'] = array(); | |
} | |
$current_builder = $current_builder['tmfbuilder']; | |
} | |
$priority = isset( $tmcp_meta['priority'] ) ? absint( $tmcp_meta['priority'] ) : 1000; | |
if ( isset( $tmcp_meta['tmfbuilder'] ) ) { | |
$global_epos[ $priority ][ $tmcp_id ]['is_form'] = 1; | |
$global_epos[ $priority ][ $tmcp_id ]['is_taxonomy'] = 0; | |
$global_epos[ $priority ][ $tmcp_id ]['name'] = $price->post_title; | |
$global_epos[ $priority ][ $tmcp_id ]['description'] = $price->post_excerpt; | |
$global_epos[ $priority ][ $tmcp_id ]['sections'] = array(); | |
$builder = $tmcp_meta['tmfbuilder']; | |
if ( is_array( $builder ) && count( $builder ) > 0 && isset( $builder['element_type'] ) && is_array( $builder['element_type'] ) && count( $builder['element_type'] ) > 0 ) { | |
// All the elements | |
$_elements = $builder['element_type']; | |
// All element sizes | |
$_div_size = $builder['div_size']; | |
// All sections (holds element count for each section) | |
$_sections = $builder['sections']; | |
// All section sizes | |
$_sections_size = $builder['sections_size']; | |
// All section styles | |
$_sections_style = $builder['sections_style']; | |
// All section placements | |
$_sections_placement = $builder['sections_placement']; | |
$_sections_slides = isset( $builder['sections_slides'] ) ? $builder['sections_slides'] : ''; | |
if ( !is_array( $_sections ) ) { | |
$_sections = array( count( $_elements ) ); | |
} | |
if ( !is_array( $_sections_size ) ) { | |
$_sections_size = array_fill( 0, count( $_sections ), "w100" ); | |
} | |
if ( !is_array( $_sections_style ) ) { | |
$_sections_style = array_fill( 0, count( $_sections ), "" ); | |
} | |
if ( !is_array( $_sections_placement ) ) { | |
$_sections_placement = array_fill( 0, count( $_sections ), "before" ); | |
} | |
if ( !is_array( $_sections_slides ) ) { | |
$_sections_slides = array_fill( 0, count( $_sections ), "" ); | |
} | |
$_helper_counter = 0; | |
$_counter = array(); | |
for ( $_s = 0; $_s < count( $_sections ); $_s++ ) { | |
$_sections_uniqid = $this->get_builder_element( 'sections_uniqid', $builder, $current_builder, $_s, TM_EPO_HELPER()->tm_temp_uniqid( count( $_sections ) ), $wpml_section_fields ); | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ] = array( | |
'total_elements' => $_sections[ $_s ], | |
'sections_size' => $_sections_size[ $_s ], | |
'sections_slides' => isset( $_sections_slides[ $_s ] ) ? $_sections_slides[ $_s ] : "", | |
'sections_style' => $_sections_style[ $_s ], | |
'sections_placement' => $_sections_placement[ $_s ], | |
'sections_uniqid' => $_sections_uniqid, | |
'sections_clogic' => $this->get_builder_element( 'sections_clogic', $builder, $current_builder, $_s, FALSE, $wpml_section_fields ), | |
'sections_logic' => $this->get_builder_element( 'sections_logic', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'sections_class' => $this->get_builder_element( 'sections_class', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'sections_type' => $this->get_builder_element( 'sections_type', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'label_size' => $this->get_builder_element( 'section_header_size', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'label' => $this->get_builder_element( 'section_header_title', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'label_color' => $this->get_builder_element( 'section_header_title_color', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'label_position' => $this->get_builder_element( 'section_header_title_position', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'description' => $this->get_builder_element( 'section_header_subtitle', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'description_position' => $this->get_builder_element( 'section_header_subtitle_position', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'description_color' => $this->get_builder_element( 'section_header_subtitle_color', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
'divider_type' => $this->get_builder_element( 'section_divider_type', $builder, $current_builder, $_s, "", $wpml_section_fields ), | |
); | |
$this->current_option_features[] = $this->get_builder_element( 'sections_type', $builder, $current_builder, $_s, "", $wpml_section_fields ); | |
for ( $k0 = $_helper_counter; $k0 < intval( $_helper_counter + intval( $_sections[ $_s ] ) ); $k0++ ) { | |
if ( !isset( $_elements[ $k0 ] ) ) { | |
continue; | |
} | |
$current_element = $_elements[ $k0 ]; | |
// Delete logic for variations section - not applicable | |
if ( $current_element == "variations" ) { | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]["sections_logic"] = ""; | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]["sections_clogic"] = ""; | |
} | |
$wpml_element_fields = array(); | |
if ( isset( TM_EPO_BUILDER()->elements_array[ $current_element ] ) ) { | |
foreach ( TM_EPO_BUILDER()->elements_array[ $current_element ] as $key => $value ) { | |
if ( isset( $value['id'] ) && empty( $value['wpmldisable'] ) ) { | |
$wpml_element_fields[ $value['id'] ] = $value['id']; | |
} | |
} | |
} | |
if ( isset( $current_element ) && isset( $tm_original_builder_elements[ $current_element ] ) ) { | |
if ( !isset( $_counter[ $current_element ] ) ) { | |
$_counter[ $current_element ] = 0; | |
} else { | |
$_counter[ $current_element ]++; | |
} | |
$current_counter = $_counter[ $current_element ]; | |
$_options = array(); | |
$_regular_price = array(); | |
$_regular_price_filtered = array(); | |
$_original_regular_price_filtered = array(); | |
$_regular_price_type = array(); | |
$_new_type = $current_element; | |
$_prefix = ""; | |
$_min_price0 = ''; | |
$_min_price10 = ''; | |
$_min_price = ''; | |
$_max_price = ''; | |
$_regular_currencies = array(); | |
$price_per_currencies = array(); | |
$_description = FALSE; | |
$_extra_multiple_choices = FALSE; | |
$_use_lightbox = ''; | |
if ( $tm_original_builder_elements[ $current_element ] ) { | |
if ( $tm_original_builder_elements[ $current_element ]["_is_addon"] == TRUE && $tm_original_builder_elements[ $current_element ]["is_post"] == "display" ) { | |
$_prefix = $current_element . "_"; | |
} | |
if ( $tm_original_builder_elements[ $current_element ]["type"] == "single" || $tm_original_builder_elements[ $current_element ]["type"] == "multipleallsingle" ) { | |
$_prefix = $current_element . "_"; | |
} elseif ( $tm_original_builder_elements[ $current_element ]["type"] == "multiple" || $tm_original_builder_elements[ $current_element ]["type"] == "multipleall" || $tm_original_builder_elements[ $current_element ]["type"] == "multiplesingle" ) { | |
$_prefix = $current_element . "_"; | |
} | |
$is_enabled = $this->get_builder_element( $_prefix . 'enabled', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
if ( $is_enabled==="0" ){ | |
continue; | |
} | |
if ( $tm_original_builder_elements[ $current_element ]["type"] == "single" || $tm_original_builder_elements[ $current_element ]["type"] == "multipleallsingle" ) { | |
$_prefix = $current_element . "_"; | |
$_is_field_required = $this->get_builder_element( $_prefix . 'required', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_changes_product_image = $this->get_builder_element( $_prefix . 'changes_product_image', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_use_images = $this->get_builder_element( $_prefix . 'use_images', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_use_colors = $this->get_builder_element( $_prefix . 'use_colors', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$new_currency = FALSE; | |
$mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix(); | |
$_price = $builder[ $current_element . '_price' ][ $current_counter ]; | |
$_original_regular_price_filtered = $_price; | |
if ( isset( $builder[ $current_element . '_sale_price' ][ $current_counter ] ) && $builder[ $current_element . '_sale_price' ][ $current_counter ] !== '' ) { | |
$_price = $builder[ $current_element . '_sale_price' ][ $current_counter ]; | |
} | |
$_current_currency_price = isset( $builder[ $current_element . '_price' . $mt_prefix ] ) && isset( $builder[ $current_element . '_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ $current_element . '_price' . $mt_prefix ][ $current_counter ] : ''; | |
$_current_currency_sale_price = isset( $builder[ $current_element . '_sale_price' . $mt_prefix ] ) && isset( $builder[ $current_element . '_sale_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ $current_element . '_sale_price' . $mt_prefix ][ $current_counter ] : ''; | |
if ( $mt_prefix !== '' && $_current_currency_price && $_current_currency_price !== '' ) { | |
$_price = $_current_currency_price; | |
$_original_regular_price_filtered = $_price; | |
if ( $_current_currency_sale_price && $_current_currency_sale_price !== '' ) { | |
$_price = $_current_currency_sale_price; | |
} | |
$_regular_currencies = array( tc_get_woocommerce_currency() ); | |
$new_currency = TRUE; | |
} | |
foreach ( TM_EPO_HELPER()->get_currencies() as $currency ) { | |
$mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix( $currency ); | |
$_current_currency_price = isset( $builder[ $current_element . '_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ $current_element . '_price' . $mt_prefix ][ $current_counter ] : ''; | |
$_current_currency_sale_price = isset( $builder[ $current_element . '_sale_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ $current_element . '_sale_price' . $mt_prefix ][ $current_counter ] : ''; | |
if ( $_current_currency_sale_price && $_current_currency_sale_price !== '' ) { | |
$_current_currency_price = $_current_currency_sale_price; | |
} | |
if ( $_current_currency_price !== '' ) { | |
$price_per_currencies[ $currency ] = array( array( wc_format_decimal( $_current_currency_price, FALSE, TRUE ) ) ); | |
} | |
} | |
$_regular_price = array( array( wc_format_decimal( $_price, FALSE, TRUE ) ) ); | |
$_regular_price_type = isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) | |
? array( array( ($builder[ $current_element . '_price_type' ][ $current_counter ]) ) ) | |
: array(); | |
$_for_filter_price_type = isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) | |
? $builder[ $current_element . '_price_type' ][ $current_counter ] | |
: ""; | |
if ( !$new_currency ) { | |
$_price = apply_filters( 'wc_epo_get_current_currency_price', $_price, $_for_filter_price_type ); | |
$_original_regular_price_filtered = apply_filters( 'wc_epo_get_current_currency_price', $_original_regular_price_filtered, $_for_filter_price_type ); | |
} | |
$_price = apply_filters( 'wc_epo_price', $_price, $_for_filter_price_type, $post_id ); | |
$_original_regular_price_filtered = apply_filters( 'wc_epo_price', $_original_regular_price_filtered, $_for_filter_price_type, $post_id ); | |
if ( $_price !== '' && isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) && $builder[ $current_element . '_price_type' ][ $current_counter ] == '' ) { | |
$_min_price = $_max_price = wc_format_decimal( $_price, FALSE, TRUE ); | |
if ( $_is_field_required ) { | |
$_min_price0 = $_min_price; | |
} else { | |
$_min_price0 = 0; | |
$_min_price10 = $_min_price; | |
} | |
} else { | |
$_min_price = $_max_price = FALSE; | |
$_min_price0 = 0; | |
} | |
$_regular_price_filtered = array( array( wc_format_decimal( $_price, FALSE, TRUE ) ) ); | |
$_original_regular_price_filtered = array( array( wc_format_decimal( $_original_regular_price_filtered, FALSE, TRUE ) ) ); | |
} elseif ( $tm_original_builder_elements[ $current_element ]["type"] == "multiple" || $tm_original_builder_elements[ $current_element ]["type"] == "multipleall" || $tm_original_builder_elements[ $current_element ]["type"] == "multiplesingle" ) { | |
$_prefix = $current_element . "_"; | |
$_is_field_required = $this->get_builder_element( $_prefix . 'required', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_changes_product_image = $this->get_builder_element( $_prefix . 'changes_product_image', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_use_images = $this->get_builder_element( $_prefix . 'use_images', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_use_colors = $this->get_builder_element( $_prefix . 'use_colors', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
$_use_lightbox = $this->get_builder_element( $_prefix . 'use_lightbox', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
if ( isset( $builder[ 'multiple_' . $current_element . '_options_price' ][ $current_counter ] ) ) { | |
$_prices = $builder[ 'multiple_' . $current_element . '_options_price' ][ $current_counter ]; | |
$_original_prices = $_prices; | |
$_sale_prices = $_prices; | |
if ( isset( $builder[ 'multiple_' . $current_element . '_options_sale_price' ][ $current_counter ] ) ) { | |
$_sale_prices = $builder[ 'multiple_' . $current_element . '_options_sale_price' ][ $current_counter ]; | |
} | |
$_prices = TM_EPO_HELPER()->merge_price_array( $_prices, $_sale_prices ); | |
$mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix(); | |
$_current_currency_prices = isset( $builder[ 'multiple_' . $current_element . '_options_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ 'multiple_' . $current_element . '_options_price' . $mt_prefix ][ $current_counter ] : ''; | |
$_original_current_currency_prices = $_current_currency_prices; | |
$_current_currency_sale_prices = isset( $builder[ 'multiple_' . $current_element . '_options_sale_price' . $mt_prefix ][ $current_counter ] ) ? $builder[ 'multiple_' . $current_element . '_options_sale_price' . $mt_prefix ][ $current_counter ] : ''; | |
$_current_currency_prices = TM_EPO_HELPER()->merge_price_array( $_current_currency_prices, $_current_currency_sale_prices ); | |
$_values = $this->get_builder_element( 'multiple_' . $current_element . '_options_value', $builder, $current_builder, $current_counter, "", TRUE, $current_element ); | |
$_titles = $this->get_builder_element( 'multiple_' . $current_element . '_options_title', $builder, $current_builder, $current_counter, "", TRUE, $current_element ); | |
$_images = $this->get_builder_element( 'multiple_' . $current_element . '_options_image', $builder, $current_builder, $current_counter, array(), TRUE, $current_element, 'tm_image_url' ); | |
$_imagesc = $this->get_builder_element( 'multiple_' . $current_element . '_options_imagec', $builder, $current_builder, $current_counter, array(), TRUE, $current_element, 'tm_image_url' ); | |
$_imagesp = $this->get_builder_element( 'multiple_' . $current_element . '_options_imagep', $builder, $current_builder, $current_counter, array(), TRUE, $current_element, 'tm_image_url' ); | |
$_imagesl = $this->get_builder_element( 'multiple_' . $current_element . '_options_imagel', $builder, $current_builder, $current_counter, array(), TRUE, $current_element, 'tm_image_url' ); | |
$_color = $this->get_builder_element( 'multiple_' . $current_element . '_options_color', $builder, $current_builder, $current_counter, array(), TRUE, $current_element ); | |
foreach ( TM_EPO_HELPER()->get_currencies() as $currency ) { | |
$mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix( $currency ); | |
$_current_currency_price = isset( $builder[ 'multiple_' . $current_element . '_options_price' . $mt_prefix ][ $current_counter ] ) | |
? $builder[ 'multiple_' . $current_element . '_options_price' . $mt_prefix ][ $current_counter ] | |
: ''; | |
$_current_currency_sale_price = isset( $builder[ 'multiple_' . $current_element . '_options_sale_price' . $mt_prefix ][ $current_counter ] ) | |
? $builder[ 'multiple_' . $current_element . '_options_sale_price' . $mt_prefix ][ $current_counter ] | |
: ''; | |
$_current_currency_price = TM_EPO_HELPER()->merge_price_array( $_current_currency_price, $_current_currency_sale_price ); | |
$price_per_currencies[ $currency ] = $_current_currency_price; | |
if ( !is_array( $price_per_currencies[ $currency ] ) ) { | |
$price_per_currencies[ $currency ] = array(); | |
} | |
foreach ( $_prices as $_n => $_price ) { | |
$to_price = ''; | |
if ( is_array( $_current_currency_price ) && isset( $_current_currency_price[ $_n ] ) ) { | |
$to_price = $_current_currency_price[ $_n ]; | |
} | |
$price_per_currencies[ $currency ][ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = array( wc_format_decimal( $to_price, FALSE, TRUE ) ); | |
} | |
} | |
if ( $_changes_product_image == "images" && $_use_images == "" ) { | |
$_imagesp = $_images; | |
$_images = array(); | |
$_imagesc = array(); | |
$_changes_product_image = "custom"; | |
} | |
if ( $_use_images == "" ) { | |
$_use_lightbox = ""; | |
} | |
$_url = $this->get_builder_element( 'multiple_' . $current_element . '_options_url', $builder, $current_builder, $current_counter, array(), TRUE, $current_element ); | |
$_description = $this->get_builder_element( 'multiple_' . $current_element . '_options_description', $builder, $current_builder, $current_counter, array(), TRUE, $current_element ); | |
foreach ( TM_EPO_BUILDER()->extra_multiple_options as $__key => $__name ) { | |
$_extra_name = $__name["name"]; | |
$_extra_multiple_choices[ $_extra_name ] = $this->get_builder_element( 'multiple_' . $current_element . '_options_' . $_extra_name, $builder, $current_builder, $current_counter, array(), TRUE, $current_element ); | |
} | |
$_prices_type = $this->get_builder_element( 'multiple_' . $current_element . '_options_price_type', $builder, $current_builder, $current_counter, array(), TRUE, $current_element ); | |
$_values_c = $_values; | |
$mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix(); | |
foreach ( $_prices as $_n => $_price ) { | |
$new_currency = FALSE; | |
if ( $mt_prefix !== '' | |
&& $_current_currency_prices !== '' | |
&& is_array( $_current_currency_prices ) | |
&& isset( $_current_currency_prices[ $_n ] ) | |
&& $_current_currency_prices[ $_n ] != '' | |
) { | |
$new_currency = TRUE; | |
$_price = $_current_currency_prices[ $_n ]; | |
$_original_prices[ $_n ] = $_original_current_currency_prices[ $_n ]; | |
$_regular_currencies[ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = array( tc_get_woocommerce_currency() ); | |
} | |
$_f_price = wc_format_decimal( $_price, FALSE, TRUE ); | |
$_regular_price[ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = array( $_f_price ); | |
$_for_filter_price_type = isset( $_prices_type[ $_n ] ) ? $_prices_type[ $_n ] : ""; | |
if ( !$new_currency ) { | |
$_price = apply_filters( 'wc_epo_get_current_currency_price', $_price, $_for_filter_price_type ); | |
$_original_prices[ $_n ] = apply_filters( 'wc_epo_get_current_currency_price', $_original_prices[ $_n ], $_for_filter_price_type ); | |
} else { | |
} | |
$_price = apply_filters( 'wc_epo_price', $_price, $_for_filter_price_type, $post_id ); | |
$_original_prices[ $_n ] = apply_filters( 'wc_epo_price', $_original_prices[ $_n ], $_for_filter_price_type, $post_id ); | |
$_f_price = wc_format_decimal( $_price, FALSE, TRUE ); | |
$_regular_price_filtered[ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = array( wc_format_decimal( $_price, FALSE, TRUE ) ); | |
$_original_regular_price_filtered [ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = array( wc_format_decimal( $_original_prices[ $_n ], FALSE, TRUE ) ); | |
$_regular_price_type[ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = isset( $_prices_type[ $_n ] ) ? array( ($_prices_type[ $_n ]) ) : array( '' ); | |
$_options[ esc_attr( ($_values[ $_n ]) ) . "_" . $_n ] = $_titles[ $_n ]; | |
$_values_c[ $_n ] = $_values[ $_n ] . "_" . $_n; | |
if ( isset( $_prices_type[ $_n ] ) && $_prices_type[ $_n ] == '' && ((isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) && $builder[ $current_element . '_price_type' ][ $current_counter ] == '') || !isset( $builder[ $current_element . '_price_type' ][ $current_counter ] )) ) { | |
if ( $_min_price !== FALSE && $_price !== '' ) { | |
if ( $_min_price === '' ) { | |
$_min_price = $_f_price; | |
} else { | |
if ( $_min_price > $_f_price ) { | |
$_min_price = $_f_price; | |
} | |
} | |
if ( $_min_price0 === '' ) { | |
if ( $_is_field_required ) { | |
$_min_price0 = floatval( $_min_price ); | |
} else { | |
$_min_price0 = 0; | |
} | |
} else { | |
if ( $_is_field_required && $_min_price0 > floatval( $_min_price ) ) { | |
$_min_price0 = floatval( $_min_price ); | |
} | |
} | |
if ( $_min_price10 === '' ) { | |
$_min_price10 = floatval( $_min_price ); | |
} else { | |
if ( $_min_price10 > floatval( $_min_price ) ) { | |
$_min_price10 = floatval( $_min_price ); | |
} | |
} | |
if ( $_max_price === '' ) { | |
$_max_price = $_f_price; | |
} else { | |
if ( $_max_price < $_f_price ) { | |
$_max_price = $_f_price; | |
} | |
} | |
} else { | |
if ( $_price === '' ) { | |
$_min_price0 = 0; | |
$_min_price10 = 0; | |
} | |
} | |
} else { | |
$_min_price = $_max_price = FALSE; | |
if ( $_min_price0 === '' ) { | |
$_min_price0 = 0; | |
} else { | |
if ( $_min_price0 > floatval( $_min_price ) ) { | |
$_min_price0 = floatval( $_min_price ); | |
} | |
} | |
if ( $_min_price10 === '' ) { | |
$_min_price10 = 0; | |
} else { | |
if ( $_min_price10 > floatval( $_min_price ) ) { | |
$_min_price10 = floatval( $_min_price ); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
$default_value = ""; | |
if ( isset( $builder[ 'multiple_' . $current_element . '_options_default_value' ][ $current_counter ] ) ) { | |
$default_value = $builder[ 'multiple_' . $current_element . '_options_default_value' ][ $current_counter ]; | |
} elseif ( isset( $builder[ $_prefix . 'default_value' ] ) && isset( $builder[ $_prefix . 'default_value' ][ $current_counter ] ) ) { | |
$default_value = $builder[ $_prefix . 'default_value' ][ $current_counter ]; | |
} | |
$selectbox_fee = FALSE; | |
$selectbox_cart_fee = FALSE; | |
switch ( $current_element ) { | |
case "selectbox": | |
$_new_type = "select"; | |
$selectbox_fee = isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) ? array( array( ($builder[ $current_element . '_price_type' ][ $current_counter ]) ) ) : FALSE; | |
$selectbox_cart_fee = isset( $builder[ $current_element . '_price_type' ][ $current_counter ] ) ? array( array( ($builder[ $current_element . '_price_type' ][ $current_counter ]) ) ) : FALSE; | |
break; | |
case "radiobuttons": | |
$_new_type = "radio"; | |
break; | |
case "checkboxes": | |
$_new_type = "checkbox"; | |
break; | |
} | |
$_rules = $_regular_price; | |
$_rules_filtered = $_regular_price_filtered; | |
foreach ( $_regular_price as $key => $value ) { | |
foreach ( $value as $k => $v ) { | |
$_regular_price[ $key ][ $k ] = wc_format_localized_price( $v ); | |
$_regular_price_filtered[ $key ][ $k ] = wc_format_localized_price( $v ); | |
} | |
} | |
$_rules_type = $_regular_price_type; | |
foreach ( $_regular_price_type as $key => $value ) { | |
foreach ( $value as $k => $v ) { | |
$_regular_price_type[ $key ][ $k ] = $v; | |
} | |
} | |
if ( $current_element != 'variations' ) { | |
$epos_prices[] = array( | |
"minall" => floatval( $_min_price10 ), | |
"min" => floatval( $_min_price0 ), | |
"max" => floatval( $_max_price ), | |
"clogic" => $this->get_builder_element( $_prefix . 'clogic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
"section_clogic" => $global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['sections_clogic'], | |
"logic" => $this->get_builder_element( $_prefix . 'logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
"section_logic" => $global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['sections_logic'], | |
); | |
} | |
if ( $_min_price !== FALSE ) { | |
$_min_price = wc_format_localized_price( $_min_price ); | |
} | |
if ( $_max_price !== FALSE ) { | |
$_max_price = wc_format_localized_price( $_max_price ); | |
} | |
/** Fix for getting right results for dates even if the users enters wrong format **/ | |
$format = $this->get_builder_element( $_prefix . 'format', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
switch ( $format ) { | |
case "0": | |
$date_format = 'd/m/Y'; | |
$sep = "/"; | |
break; | |
case "1": | |
$date_format = 'm/d/Y'; | |
$sep = "/"; | |
break; | |
case "2": | |
$date_format = 'd.m.Y'; | |
$sep = "."; | |
break; | |
case "3": | |
$date_format = 'm.d.Y'; | |
$sep = "."; | |
break; | |
case "4": | |
$date_format = 'd-m-Y'; | |
$sep = "-"; | |
break; | |
case "5": | |
$date_format = 'm-d-Y'; | |
$sep = "-"; | |
break; | |
} | |
$disabled_dates = $this->get_builder_element( $_prefix . 'disabled_dates', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
if ( $disabled_dates ) { | |
$disabled_dates = explode( ",", $disabled_dates ); | |
foreach ( $disabled_dates as $key => $value ) { | |
if ( !$value ) { | |
continue; | |
} | |
$value = str_replace( ".", "-", $value ); | |
$value = str_replace( "/", "-", $value ); | |
$value = explode( "-", $value ); | |
switch ( $format ) { | |
case "0": | |
case "2": | |
case "4": | |
$value = $value[2] . "-" . $value[1] . "-" . $value[0]; | |
break; | |
case "1": | |
case "3": | |
case "5": | |
$value = $value[2] . "-" . $value[0] . "-" . $value[1]; | |
break; | |
} | |
$value_to_date = date_create( $value ); | |
if ( !$value_to_date ) { | |
continue; | |
} | |
$value = date_format( $value_to_date, $date_format ); | |
$disabled_dates[ $key ] = $value; | |
} | |
$disabled_dates = implode( ",", $disabled_dates ); | |
} | |
$enabled_only_dates = $this->get_builder_element( $_prefix . 'enabled_only_dates', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ); | |
if ( $enabled_only_dates ) { | |
$enabled_only_dates = explode( ",", $enabled_only_dates ); | |
foreach ( $enabled_only_dates as $key => $value ) { | |
if ( !$value ) { | |
continue; | |
} | |
$value = str_replace( ".", "-", $value ); | |
$value = str_replace( "/", "-", $value ); | |
$value = explode( "-", $value ); | |
switch ( $format ) { | |
case "0": | |
case "2": | |
case "4": | |
$value = $value[2] . "-" . $value[1] . "-" . $value[0]; | |
break; | |
case "1": | |
case "3": | |
case "5": | |
$value = $value[2] . "-" . $value[0] . "-" . $value[1]; | |
break; | |
} | |
$value_to_date = date_create( $value ); | |
if ( !$value_to_date ) { | |
continue; | |
} | |
$value = date_format( $value_to_date, $date_format ); | |
$enabled_only_dates[ $key ] = $value; | |
} | |
$enabled_only_dates = implode( ",", $enabled_only_dates ); | |
} | |
$this->current_option_features[] = $current_element; | |
$element_uniqueid = $this->get_builder_element( $_prefix . 'uniqid', $builder, $current_builder, $current_counter, TM_EPO_HELPER()->tm_uniqid(), $wpml_element_fields, $current_element ); | |
if ( $current_element != "header" && $current_element != "divider" ) { | |
if ( $current_element == "variations" ) { | |
$variation_element_id = $this->get_builder_element( $_prefix . 'uniqid', $builder, $current_builder, $current_counter, TM_EPO_HELPER()->tm_uniqid(), $wpml_element_fields, $current_element ); | |
$variation_section_id = $global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['sections_uniqid']; | |
} | |
$_extra_multiple_choices = ($_extra_multiple_choices !== FALSE) ? $_extra_multiple_choices : array(); | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['elements'][] = | |
array_merge( | |
TM_EPO_BUILDER()->get_custom_properties( $builder, $_prefix, $_counter, $_elements, $k0, $current_builder, $current_counter, $wpml_element_fields, $current_element ), | |
$_extra_multiple_choices, | |
array( | |
'_' => TM_EPO_BUILDER()->get_default_properties( $builder, $_prefix, $_counter, $_elements, $k0 ), | |
'internal_name' => $this->get_builder_element( $_prefix . 'internal_name', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'builder' => (isset( $wpml_is_original_product ) && empty( $wpml_is_original_product )) ? $current_builder : $builder, | |
'section' => $_sections_uniqid, | |
'type' => $_new_type, | |
'size' => $_div_size[ $k0 ], | |
'include_tax_for_fee_price_type' => $this->get_builder_element( $_prefix . 'include_tax_for_fee_price_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tax_class_for_fee_price_type' => $this->get_builder_element( $_prefix . 'tax_class_for_fee_price_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_label_in_cart' => $this->get_builder_element( $_prefix . 'hide_element_label_in_cart', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_value_in_cart' => $this->get_builder_element( $_prefix . 'hide_element_value_in_cart', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_label_in_order' => $this->get_builder_element( $_prefix . 'hide_element_label_in_order', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_value_in_order' => $this->get_builder_element( $_prefix . 'hide_element_value_in_order', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_label_in_floatbox' => $this->get_builder_element( $_prefix . 'hide_element_label_in_floatbox', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'hide_element_value_in_floatbox' => $this->get_builder_element( $_prefix . 'hide_element_value_in_floatbox', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'enabled' => $is_enabled, | |
'required' => $this->get_builder_element( $_prefix . 'required', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'use_images' => isset( $_use_images ) ? $_use_images : "", | |
'use_colors' => isset( $_use_colors ) ? $_use_colors : "", | |
'use_lightbox' => $_use_lightbox, | |
'use_url' => $this->get_builder_element( $_prefix . 'use_url', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'items_per_row' => $this->get_builder_element( $_prefix . 'items_per_row', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'items_per_row_r' => array( | |
"desktop" => $this->get_builder_element( $_prefix . 'items_per_row', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"tablets_galaxy" => $this->get_builder_element( $_prefix . 'items_per_row_tablets_galaxy', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"tablets" => $this->get_builder_element( $_prefix . 'items_per_row_tablets', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"tablets_small" => $this->get_builder_element( $_prefix . 'items_per_row_tablets_small', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"iphone6_plus" => $this->get_builder_element( $_prefix . 'items_per_row_iphone6_plus', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"iphone6" => $this->get_builder_element( $_prefix . 'items_per_row_iphone6', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"galaxy" => $this->get_builder_element( $_prefix . 'items_per_row_samsung_galaxy', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"iphone5" => $this->get_builder_element( $_prefix . 'items_per_row_iphone5', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"smartphones" => $this->get_builder_element( $_prefix . 'items_per_row_smartphones', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
), | |
'label_size' => $this->get_builder_element( $_prefix . 'header_size', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'label' => $this->get_builder_element( $_prefix . 'header_title', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'label_position' => $this->get_builder_element( $_prefix . 'header_title_position', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'label_color' => $this->get_builder_element( $_prefix . 'header_title_color', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'description' => $this->get_builder_element( $_prefix . 'header_subtitle', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'description_position' => $this->get_builder_element( $_prefix . 'header_subtitle_position', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'description_color' => $this->get_builder_element( $_prefix . 'header_subtitle_color', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'divider_type' => $this->get_builder_element( $_prefix . 'divider_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'placeholder' => $this->get_builder_element( $_prefix . 'placeholder', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'min_chars' => $this->get_builder_element( $_prefix . 'min_chars', $builder, $current_builder, $current_counter, FALSE, $wpml_element_fields, $current_element, "wc_epo_global_min_chars", $element_uniqueid ), | |
'max_chars' => $this->get_builder_element( $_prefix . 'max_chars', $builder, $current_builder, $current_counter, FALSE, $wpml_element_fields, $current_element, "wc_epo_global_max_chars", $element_uniqueid ), | |
'hide_amount' => $this->get_builder_element( $_prefix . 'hide_amount', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'text_before_price' => $this->get_builder_element( $_prefix . 'text_before_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'text_after_price' => $this->get_builder_element( $_prefix . 'text_after_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'options' => $_options, | |
'min_price' => $_min_price, | |
'max_price' => $_max_price, | |
'rules' => $_rules, | |
'price_rules' => $_regular_price, | |
'rules_filtered' => $_rules_filtered, | |
'price_rules_filtered' => $_regular_price_filtered, | |
'original_rules_filtered' => $_original_regular_price_filtered, | |
'price_rules_type' => $_regular_price_type, | |
'rules_type' => $_rules_type, | |
'currencies' => $_regular_currencies, | |
'price_per_currencies' => $price_per_currencies, | |
'images' => isset( $_images ) ? $_images : "", | |
'imagesc' => isset( $_imagesc ) ? $_imagesc : "", | |
'imagesp' => isset( $_imagesp ) ? $_imagesp : "", | |
'imagesl' => isset( $_imagesl ) ? $_imagesl : "", | |
'color' => isset( $_color ) ? $_color : "", | |
'url' => isset( $_url ) ? $_url : "", | |
'cdescription' => ($_description !== FALSE) ? $_description : "", | |
'extra_multiple_choices' => ($_extra_multiple_choices !== FALSE) ? $_extra_multiple_choices : array(), | |
'limit' => $this->get_builder_element( $_prefix . 'limit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'exactlimit' => $this->get_builder_element( $_prefix . 'exactlimit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'minimumlimit' => $this->get_builder_element( $_prefix . 'minimumlimit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'clear_options' => $this->get_builder_element( $_prefix . 'clear_options', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'option_values' => isset( $_values_c ) ? $_values_c : array(), | |
'button_type' => $this->get_builder_element( $_prefix . 'button_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'uniqid' => $element_uniqueid, | |
'clogic' => $this->get_builder_element( $_prefix . 'clogic', $builder, $current_builder, $current_counter, FALSE, $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'logic' => $this->get_builder_element( $_prefix . 'logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'format' => $format, | |
'start_year' => $this->get_builder_element( $_prefix . 'start_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'end_year' => $this->get_builder_element( $_prefix . 'end_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'min_date' => $this->get_builder_element( $_prefix . 'min_date', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'max_date' => $this->get_builder_element( $_prefix . 'max_date', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'disabled_dates' => $disabled_dates, | |
'enabled_only_dates' => $enabled_only_dates, | |
'disabled_weekdays' => $this->get_builder_element( $_prefix . 'disabled_weekdays', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'time_format' => $this->get_builder_element( $_prefix . 'time_format', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'custom_time_format' => $this->get_builder_element( $_prefix . 'custom_time_format', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'min_time' => $this->get_builder_element( $_prefix . 'min_time', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'max_time' => $this->get_builder_element( $_prefix . 'max_time', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'showhour' => $this->get_builder_element( $_prefix . 'showhour', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'showminute' => $this->get_builder_element( $_prefix . 'showminute', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'showsecond' => $this->get_builder_element( $_prefix . 'showsecond', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_hour' => $this->get_builder_element( $_prefix . 'tranlation_hour', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_minute' => $this->get_builder_element( $_prefix . 'tranlation_minute', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_second' => $this->get_builder_element( $_prefix . 'tranlation_second', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'theme' => $this->get_builder_element( $_prefix . 'theme', $builder, $current_builder, $current_counter, "epo", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'theme_size' => $this->get_builder_element( $_prefix . 'theme_size', $builder, $current_builder, $current_counter, "medium", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'theme_position' => $this->get_builder_element( $_prefix . 'theme_position', $builder, $current_builder, $current_counter, "normal", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_day' => $this->get_builder_element( $_prefix . 'tranlation_day', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_month' => $this->get_builder_element( $_prefix . 'tranlation_month', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'tranlation_year' => $this->get_builder_element( $_prefix . 'tranlation_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
"default_value" => $default_value, | |
'text_after_price' => $this->get_builder_element( $_prefix . 'text_before_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'text_after_price' => $this->get_builder_element( $_prefix . 'text_after_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'selectbox_fee' => $selectbox_fee, | |
'selectbox_cart_fee' => $selectbox_cart_fee, | |
'class' => $this->get_builder_element( $_prefix . 'class', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'container_id' => $this->get_builder_element( $_prefix . 'container_id', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'swatchmode' => $this->get_builder_element( $_prefix . 'swatchmode', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'changes_product_image' => isset( $_changes_product_image ) ? $_changes_product_image : "", | |
'min' => $this->get_builder_element( $_prefix . 'min', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'max' => $this->get_builder_element( $_prefix . 'max', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'freechars' => $this->get_builder_element( $_prefix . 'freechars', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'step' => $this->get_builder_element( $_prefix . 'step', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'pips' => $this->get_builder_element( $_prefix . 'pips', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'noofpips' => $this->get_builder_element( $_prefix . 'noofpips', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'show_picker_value' => $this->get_builder_element( $_prefix . 'show_picker_value', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'quantity' => $this->get_builder_element( $_prefix . 'quantity', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'quantity_min' => $this->get_builder_element( $_prefix . 'quantity_min', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'quantity_max' => $this->get_builder_element( $_prefix . 'quantity_max', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'quantity_step' => $this->get_builder_element( $_prefix . 'quantity_step', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'quantity_default_value' => $this->get_builder_element( $_prefix . 'quantity_default_value', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
'validation1' => $this->get_builder_element( $_prefix . 'validation1', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element, "", $element_uniqueid ), | |
) ); | |
} elseif ( $current_element == "header" ) { | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['elements'][] = array( | |
'internal_name' => $this->get_builder_element( $_prefix . 'internal_name', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'section' => $_sections_uniqid, | |
'type' => $_new_type, | |
'size' => $_div_size[ $k0 ], | |
'required' => "", | |
'enabled' => $is_enabled, | |
'use_images' => "", | |
'use_colors' => "", | |
'use_url' => "", | |
'items_per_row' => "", | |
'label_size' => $this->get_builder_element( $_prefix . 'header_size', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'label' => $this->get_builder_element( $_prefix . 'header_title', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'label_position' => $this->get_builder_element( $_prefix . 'header_title_position', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'label_color' => $this->get_builder_element( $_prefix . 'header_title_color', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'description' => $this->get_builder_element( $_prefix . 'header_subtitle', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'description_color' => $this->get_builder_element( $_prefix . 'header_subtitle_color', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'description_position' => $this->get_builder_element( $_prefix . 'header_subtitle_position', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'divider_type' => "", | |
'placeholder' => "", | |
'max_chars' => "", | |
'hide_amount' => "", | |
"options" => $_options, | |
'min_price' => $_min_price, | |
'max_price' => $_max_price, | |
'rules' => $_rules, | |
'price_rules' => $_regular_price, | |
'rules_filtered' => $_rules_filtered, | |
'price_rules_filtered' => $_regular_price_filtered, | |
'price_rules_type' => $_regular_price_type, | |
'rules_type' => $_rules_type, | |
'images' => "", | |
'limit' => "", | |
'exactlimit' => "", | |
'minimumlimit' => "", | |
'option_values' => array(), | |
'button_type' => '', | |
'class' => $this->get_builder_element( 'header_class', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'uniqid' => $this->get_builder_element( 'header_uniqid', $builder, $current_builder, $current_counter, TM_EPO_HELPER()->tm_uniqid(), $wpml_element_fields, $current_element ), | |
'clogic' => $this->get_builder_element( 'header_clogic', $builder, $current_builder, $current_counter, FALSE, $wpml_element_fields, $current_element ), | |
'logic' => $this->get_builder_element( 'header_logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'format' => '', | |
'start_year' => '', | |
'end_year' => '', | |
'tranlation_day' => '', | |
'tranlation_month' => '', | |
'tranlation_year' => '', | |
'swatchmode' => "", | |
'changes_product_image' => "", | |
'min' => "", | |
'max' => "", | |
'step' => "", | |
'pips' => "", | |
); | |
} elseif ( $current_element == "divider" ) { | |
$global_epos[ $priority ][ $tmcp_id ]['sections'][ $_s ]['elements'][] = array( | |
'internal_name' => $this->get_builder_element( $_prefix . 'internal_name', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'section' => $_sections_uniqid, | |
'type' => $_new_type, | |
'size' => $_div_size[ $k0 ], | |
'required' => "", | |
'enabled' => $is_enabled, | |
'use_images' => "", | |
'use_colors' => "", | |
'use_url' => "", | |
'items_per_row' => "", | |
'label_size' => "", | |
'label' => "", | |
'label_color' => "", | |
'label_position' => "", | |
'description' => "", | |
'description_color' => "", | |
'divider_type' => $this->get_builder_element( $_prefix . 'divider_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'placeholder' => "", | |
'max_chars' => "", | |
'hide_amount' => "", | |
"options" => $_options, | |
'min_price' => $_min_price, | |
'max_price' => $_max_price, | |
'rules' => $_rules, | |
'price_rules' => $_regular_price, | |
'rules_filtered' => $_rules_filtered, | |
'price_rules_filtered' => $_regular_price_filtered, | |
'price_rules_type' => $_regular_price_type, | |
'rules_type' => $_rules_type, | |
'images' => "", | |
'limit' => "", | |
'exactlimit' => "", | |
'minimumlimit' => "", | |
'option_values' => array(), | |
'button_type' => '', | |
'class' => $this->get_builder_element( 'divider_class', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'uniqid' => $this->get_builder_element( 'divider_uniqid', $builder, $current_builder, $current_counter, TM_EPO_HELPER()->tm_uniqid(), $wpml_element_fields, $current_element ), | |
'clogic' => $this->get_builder_element( 'divider_clogic', $builder, $current_builder, $current_counter, FALSE, $wpml_element_fields, $current_element ), | |
'logic' => $this->get_builder_element( 'divider_logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element ), | |
'format' => '', | |
'start_year' => '', | |
'end_year' => '', | |
'tranlation_day' => '', | |
'tranlation_month' => '', | |
'tranlation_year' => '', | |
'swatchmode' => "", | |
'changes_product_image' => "", | |
'min' => "", | |
'max' => "", | |
'step' => "", | |
'pips' => "", | |
); | |
} | |
} | |
} | |
$_helper_counter = intval( $_helper_counter + intval( $_sections[ $_s ] ) ); | |
} | |
} | |
} | |
} | |
} | |
return array( | |
'global' => $global_epos, | |
'price' => $epos_prices, | |
'variation_element_id' => $variation_element_id, | |
'variation_section_id' => $variation_section_id, | |
); | |
} | |
/** | |
* Translate $attributes to post names. | |
*/ | |
public function translate_fields( $attributes, $type, $section, $form_prefix = "", $name_prefix = "" ) { | |
$fields = array(); | |
$loop = 0; | |
/* $form_prefix should be passed with _ if not empty */ | |
if ( !empty( $attributes ) ) { | |
foreach ( $attributes as $key => $attribute ) { | |
$name_inc = ""; | |
if ( !empty( $this->tm_builder_elements[ $type ]["post_name_prefix"] ) ) { | |
if ( $this->tm_builder_elements[ $type ]["type"] == "multiple" || $this->tm_builder_elements[ $type ]["type"] == "multiplesingle" ) { | |
$name_inc = "tmcp_" . $name_prefix . $this->tm_builder_elements[ $type ]["post_name_prefix"] . "_" . $section . $form_prefix; | |
} elseif ( $this->tm_builder_elements[ $type ]["type"] == "multipleall" ) { | |
$name_inc = "tmcp_" . $name_prefix . $this->tm_builder_elements[ $type ]["post_name_prefix"] . "_" . $section . "_" . $loop . $form_prefix; | |
} | |
} | |
$fields[] = $name_inc; | |
$loop++; | |
} | |
} else { | |
if ( !empty( $this->tm_builder_elements[ $type ]["type"] ) && !empty( $this->tm_builder_elements[ $type ]["post_name_prefix"] ) ) { | |
$name_inc = "tmcp_" . $name_prefix . $this->tm_builder_elements[ $type ]["post_name_prefix"] . "_" . $section . $form_prefix; | |
} | |
if ( !empty( $name_inc ) ) { | |
$fields[] = $name_inc; | |
} | |
} | |
return $fields; | |
} | |
/** | |
* @param $global_prices | |
* @param $where | |
* @param $cart_item_meta | |
* @param $tmcp_post_fields | |
* @param $product_id | |
* @param $per_product_pricing | |
* @param $cpf_product_price | |
* @param $variation_id | |
* @param $field_loop | |
* @param $loop | |
* @param $form_prefix | |
* @param $post_data | |
* @return array | |
*/ | |
public function add_cart_item_data_loop( $global_prices, $where, $cart_item_meta, $tmcp_post_fields, $product_id, $per_product_pricing, $cpf_product_price, $variation_id, $field_loop, $loop, $form_prefix, $post_data ) { | |
foreach ( $global_prices[ $where ] as $priorities ) { | |
foreach ( $priorities as $field ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['elements'] ) ) { | |
foreach ( $section['elements'] as $element ) { | |
$init_class = "TM_EPO_FIELDS_" . $element['type']; | |
if ( !class_exists( $init_class ) && !empty( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) ) { | |
$init_class = "TM_EPO_FIELDS"; | |
} | |
if ( class_exists( $init_class ) ) { | |
$field_obj = new $init_class( $product_id, $element, $per_product_pricing, $cpf_product_price, $variation_id, $post_data ); | |
/* Cart fees */ | |
$current_tmcp_post_fields = array_intersect_key( $tmcp_post_fields, array_flip( $this->translate_fields( $element['options'], $element['type'], $field_loop, $form_prefix, $this->cart_fee_name ) ) ); | |
foreach ( $current_tmcp_post_fields as $attribute => $key ) { | |
if ( !empty( $field_obj->holder_cart_fees ) ) { | |
if ( isset( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
if ( empty( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
continue; | |
} | |
} | |
$meta = $field_obj->add_cart_item_data_cart_fees( $attribute, $key ); | |
if ( is_array( $meta ) ) { | |
if ( isset( $meta[0] ) && is_array( $meta[0] ) ) { | |
foreach ( $meta as $k => $value ) { | |
$cart_item_meta['tmcartfee'][] = $value; | |
$cart_item_meta['tmdata']['tmcartfee_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} else { | |
$cart_item_meta['tmcartfee'][] = $meta; | |
$cart_item_meta['tmdata']['tmcartfee_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} | |
} | |
} | |
/* Subscription sign up fees */ | |
$current_tmcp_post_fields = array_intersect_key( $tmcp_post_fields, array_flip( $this->translate_fields( $element['options'], $element['type'], $field_loop, $form_prefix, $this->fee_name ) ) ); | |
foreach ( $current_tmcp_post_fields as $attribute => $key ) { | |
; | |
if ( !empty( $field_obj->holder_subscription_fees ) ) { | |
if ( isset( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
if ( empty( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
continue; | |
} | |
} | |
$meta = $field_obj->add_cart_item_data_subscription_fees( $attribute, $key ); | |
if ( is_array( $meta ) ) { | |
if ( isset( $meta[0] ) && is_array( $meta[0] ) ) { | |
foreach ( $meta as $k => $value ) { | |
$cart_item_meta['tmcartepo'][] = $value; | |
$cart_item_meta['tmdata']['tmcartepo_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} else { | |
$cart_item_meta['tmcartepo'][] = $meta; | |
$cart_item_meta['tmdata']['tmcartepo_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} | |
} | |
$cart_item_meta['tmsubscriptionfee'] = $this->tmfee; | |
} | |
/* Normal fields */ | |
$current_tmcp_post_fields = array_intersect_key( $tmcp_post_fields, array_flip( $this->translate_fields( $element['options'], $element['type'], $field_loop, $form_prefix, "" ) ) ); | |
foreach ( $current_tmcp_post_fields as $attribute => $key ) { | |
if ( !empty( $field_obj->holder ) ) { | |
if ( isset( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
if ( empty( $tmcp_post_fields[ $attribute . '_quantity' ] ) ) { | |
continue; | |
} | |
} | |
$meta = $field_obj->add_cart_item_data( $attribute, $key ); | |
if ( is_array( $meta ) ) { | |
if ( isset( $meta[0] ) && is_array( $meta[0] ) ) { | |
foreach ( $meta as $k => $value ) { | |
$cart_item_meta['tmcartepo'][] = $value; | |
$cart_item_meta['tmdata']['tmcartepo_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} else { | |
$cart_item_meta['tmcartepo'][] = $meta; | |
$cart_item_meta['tmdata']['tmcartepo_data'][] = array( 'key' => $key, 'attribute' => $attribute ); | |
} | |
} | |
} | |
} | |
unset( $field_obj ); // clear memory | |
} | |
if ( in_array( $element['type'], $this->element_post_types ) ) { | |
$field_loop++; | |
} | |
$loop++; | |
} | |
} | |
} | |
} | |
} | |
return array( 'loop' => $loop, 'field_loop' => $field_loop, 'cart_item_meta' => $cart_item_meta ); | |
} | |
/** | |
* NORMAL FIELDS (to be deprecated) | |
* | |
* @param $local_price_array | |
* @param $cart_item_meta | |
* @param $tmcp_post_fields | |
* @param $product_id | |
* @param $per_product_pricing | |
* @param $cpf_product_price | |
* @param $variation_id | |
* @param $field_loop | |
* @param $loop | |
* @param $form_prefix | |
* @param $post_data | |
* @return array | |
*/ | |
public function add_cart_item_data_loop_local( $local_price_array, $cart_item_meta, $tmcp_post_fields, $product_id, $per_product_pricing, $cpf_product_price, $variation_id, $field_loop, $loop, $form_prefix, $post_data ) { | |
if ( !empty( $local_price_array ) && is_array( $local_price_array ) && count( $local_price_array ) > 0 ) { | |
if ( is_array( $tmcp_post_fields ) ) { | |
$getproduct = wc_get_product( $product_id ); | |
foreach ( $local_price_array as $tmcp ) { | |
if ( empty( $tmcp['type'] ) ) { | |
continue; | |
} | |
$current_tmcp_post_fields = array_intersect_key( $tmcp_post_fields, array_flip( $this->translate_fields( $tmcp['attributes'], $tmcp['type'], $field_loop, $form_prefix ) ) ); | |
foreach ( $current_tmcp_post_fields as $attribute => $key ) { | |
switch ( $tmcp['type'] ) { | |
case "checkbox" : | |
case "radio" : | |
case "select" : | |
$_price = $this->calculate_price( $_POST, $tmcp, $key, $attribute, $per_product_pricing, $cpf_product_price, $variation_id ); | |
$cart_item_meta['tmcartepo'][] = array( | |
'mode' => 'local', | |
'key' => $key, | |
'is_taxonomy' => $tmcp['is_taxonomy'], | |
'name' => esc_html( $tmcp['name'] ), | |
'value' => esc_html( wc_attribute_label( $tmcp['attributes_wpml'][ $key ], $getproduct ) ), | |
'price' => esc_attr( $_price ), | |
'section' => esc_html( $tmcp['name'] ), | |
'section_label' => esc_html( wc_attribute_label( urldecode( $tmcp['label'] ), $getproduct ) ), | |
'percentcurrenttotal' => isset( $post_data[ $attribute . '_hidden' ] ) ? 1 : 0, | |
'quantity' => 1, | |
); | |
break; | |
} | |
} | |
if ( in_array( $tmcp['type'], $this->element_post_types ) ) { | |
$field_loop++; | |
} | |
$loop++; | |
} | |
} | |
} | |
return array( 'loop' => $loop, 'field_loop' => $field_loop, 'cart_item_meta' => $cart_item_meta ); | |
} | |
/** | |
* @param string $form_prefix | |
* @return null | |
*/ | |
public function get_posted_variation_id( $form_prefix = "" ) { | |
$variation_id = NULL; | |
if ( isset( $_POST[ 'variation_id' . $form_prefix ] ) ) { | |
$variation_id = $_POST[ 'variation_id' . $form_prefix ]; | |
} | |
return $variation_id; | |
} | |
/** | |
* Adds data to the cart. | |
* | |
* @param $cart_item_meta | |
* @param $product_id | |
* @param null $post_data | |
* @return mixed | |
*/ | |
public function tm_add_cart_item_data( $cart_item_meta, $product_id, $post_data = NULL ) { | |
return $this->add_cart_item_data_helper( $cart_item_meta, $product_id, $post_data ); | |
} | |
/** | |
* @param $cart_item_meta | |
* @param $product_id | |
* @return mixed | |
*/ | |
public function add_cart_item_data( $cart_item_meta, $product_id ) { | |
return $this->add_cart_item_data_helper( $cart_item_meta, $product_id, $_POST ); | |
} | |
/** | |
* @param $cart_item_meta | |
* @param $product_id | |
* @param null $post_data | |
* @return mixed | |
*/ | |
public function add_cart_item_data_helper( $cart_item_meta, $product_id, $post_data = NULL ) { | |
if ( is_null( $post_data ) && isset( $_POST ) ) { | |
$post_data = $_POST; | |
} | |
if ( empty( $post_data ) && isset( $_REQUEST['tcajax'] ) ) { | |
$post_data = $_REQUEST; | |
} | |
/* Workaround to get unique items in cart for bto */ | |
$terms = get_the_terms( $product_id, 'product_type' ); | |
$product_type = !empty( $terms ) && isset( current( $terms )->name ) ? sanitize_title( current( $terms )->name ) : 'simple'; | |
if ( ($product_type == 'bto' || $product_type == 'composite') && | |
(isset( $post_data['add-product-to-cart'] ) && is_array( $post_data['add-product-to-cart'] )) || | |
(isset( $post_data['wccp_component_selection'] ) && is_array( $post_data['wccp_component_selection'] )) | |
) { | |
$copy = array(); | |
$enum = array(); | |
if ( isset( $post_data['add-product-to-cart'] ) ) { | |
$enum = $post_data['add-product-to-cart']; | |
} elseif ( isset( $post_data['wccp_component_selection'] ) ) { | |
$enum = $post_data['wccp_component_selection']; | |
} | |
foreach ( $enum as $bundled_item_id => $bundled_product_id ) { | |
$copy = array_merge( $copy, TM_EPO_HELPER()->array_filter_key( $post_data, $bundled_item_id, "end" ) ); | |
} | |
$copy = TM_EPO_HELPER()->array_filter_key( $copy ); | |
$cart_item_meta['tmcartepo_bto'] = $copy; | |
} | |
$form_prefix = ""; | |
$variation_id = FALSE; | |
$cpf_product_price = FALSE; | |
$per_product_pricing = TRUE; | |
if ( isset( $cart_item_meta['composite_item'] ) ) { | |
global $woocommerce; | |
$cart_contents = $woocommerce->cart->get_cart(); | |
if ( isset( $cart_item_meta['composite_parent'] ) && !empty( $cart_item_meta['composite_parent'] ) ) { | |
$parent_cart_key = $cart_item_meta['composite_parent']; | |
if ( $cart_contents[ $parent_cart_key ]['data'] && is_callable( array( $cart_contents[ $parent_cart_key ]['data'], "contains" ) ) ) { | |
$per_product_pricing = $cart_contents[ $parent_cart_key ]['data']->contains("priced_individually"); | |
}else{ | |
$per_product_pricing = $cart_contents[ $parent_cart_key ]['data']->per_product_pricing; | |
} | |
if ( $per_product_pricing === 'no' ) { | |
$per_product_pricing = FALSE; | |
} | |
} | |
$form_prefix = "_" . $cart_item_meta['composite_item']; | |
$bundled_item_id = $cart_item_meta['composite_item']; | |
if ( isset( $post_data['bto_variation_id'][ $bundled_item_id ] ) ) { | |
$variation_id = $post_data['bto_variation_id'][ $bundled_item_id ]; | |
} elseif ( isset( $post_data['wccp_variation_id'][ $bundled_item_id ] ) ) { | |
$variation_id = $post_data['wccp_variation_id'][ $bundled_item_id ]; | |
} | |
if ( isset( $post_data['cpf_bto_price'][ $bundled_item_id ] ) ) { | |
$cpf_product_price = $post_data['cpf_bto_price'][ $bundled_item_id ]; | |
} | |
} else { | |
if ( !empty( $post_data['tc_form_prefix'] ) ) { | |
$form_prefix = $post_data['tc_form_prefix']; | |
$form_prefix = str_replace( "_", "", $form_prefix ); | |
$form_prefix = "_" . $form_prefix; | |
} | |
if ( isset( $post_data['variation_id'] ) ) { | |
$variation_id = $post_data['variation_id']; | |
} | |
if ( isset( $post_data['cpf_product_price'] ) ) { | |
$cpf_product_price = $post_data['cpf_product_price']; | |
} | |
} | |
$cpf_price_array = $this->get_product_tm_epos( $product_id, $form_prefix ); | |
if ( empty( $cpf_price_array ) ) { | |
return $cart_item_meta; | |
} | |
$global_price_array = $cpf_price_array['global']; | |
$local_price_array = $cpf_price_array['local']; | |
if ( empty( $global_price_array ) && empty( $local_price_array ) ) { | |
return $cart_item_meta; | |
} | |
// if the following key doens't extist the edit cart link is not being displayed. | |
if ( in_array( $product_type, array( "simple", "variable", "subscription", "variable-subscription" ) ) ) { | |
$cart_item_meta['tmhasepo'] = 1; | |
} | |
$tm_meta_cpf = tc_get_post_meta( $product_id, 'tm_meta_cpf', TRUE ); | |
if ( !is_array( $tm_meta_cpf ) ) { | |
$tm_meta_cpf = array(); | |
} | |
foreach ( $this->meta_fields as $key => $value ) { | |
$tm_meta_cpf[ $key ] = isset( $tm_meta_cpf[ $key ] ) ? $tm_meta_cpf[ $key ] : $value; | |
} | |
$price_override = ($this->tm_epo_global_override_product_price == 'no') | |
? 0 | |
: (($this->tm_epo_global_override_product_price == 'yes') | |
? 1 | |
: !empty( $this->tm_meta_cpf['price_override'] ) ? 1 : 0); | |
if ( !empty( $price_override ) ) { | |
$cart_item_meta['epo_price_override'] = 1; | |
} | |
$global_prices = array( 'before' => array(), 'after' => array() ); | |
foreach ( $global_price_array as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['sections_placement'] ) ) { | |
$global_prices[ $section['sections_placement'] ][ $priority ][ $pid ]['sections'][ $section_id ] = $section; | |
} | |
} | |
} | |
} | |
} | |
$files = array(); | |
foreach ( $_FILES as $k => $file ) { | |
if ( !empty( $file['name'] ) ) { | |
$files[ $k ] = $file['name']; | |
} | |
} | |
$tmcp_post_fields = array_merge( TM_EPO_HELPER()->array_filter_key( $post_data ), TM_EPO_HELPER()->array_filter_key( $files ) ); | |
if ( is_array( $tmcp_post_fields ) ) { | |
$tmcp_post_fields = array_map( 'stripslashes_deep', $tmcp_post_fields ); | |
} | |
if ( empty( $cart_item_meta['tmcartepo'] ) ) { | |
$cart_item_meta['tmcartepo'] = array(); | |
} | |
if ( empty( $cart_item_meta['tmsubscriptionfee'] ) ) { | |
$cart_item_meta['tmsubscriptionfee'] = 0; | |
} | |
if ( empty( $cart_item_meta['tmcartfee'] ) ) { | |
$cart_item_meta['tmcartfee'] = array(); | |
} | |
if ( empty( $cart_item_meta['tmpost_data'] ) ) { | |
$cart_item_meta['tmpost_data'] = $post_data; | |
} | |
$cart_item_meta['tmdata'] = array( | |
'tmcp_post_fields' => $tmcp_post_fields, | |
'product_id' => $product_id, | |
'per_product_pricing' => $per_product_pricing, | |
'cpf_product_price' => $cpf_product_price, | |
'variation_id' => $variation_id, | |
'form_prefix' => $form_prefix, | |
); | |
$loop = 0; | |
$field_loop = 0; | |
$_return = $this->add_cart_item_data_loop( $global_prices, 'before', $cart_item_meta, $tmcp_post_fields, $product_id, $per_product_pricing, $cpf_product_price, $variation_id, $field_loop, $loop, $form_prefix, $post_data ); | |
extract( $_return, EXTR_OVERWRITE ); | |
/* NORMAL FIELDS (to be deprecated) */ | |
$_return = $this->add_cart_item_data_loop_local( $local_price_array, $cart_item_meta, $tmcp_post_fields, $product_id, $per_product_pricing, $cpf_product_price, $variation_id, $field_loop, $loop, $form_prefix, $post_data ); | |
extract( $_return, EXTR_OVERWRITE ); | |
$_return = $this->add_cart_item_data_loop( $global_prices, 'after', $cart_item_meta, $tmcp_post_fields, $product_id, $per_product_pricing, $cpf_product_price, $variation_id, $field_loop, $loop, $form_prefix, $post_data ); | |
extract( $_return, EXTR_OVERWRITE ); | |
return $cart_item_meta; | |
} | |
/** | |
* @param $cart_item_meta | |
* @param $product_id | |
* @param null $post_data | |
* @return mixed | |
*/ | |
public function repopulatecart( $cart_item_meta, $product_id, $post_data = NULL ) { | |
$cpf_product_price = $post_data['cpf_product_price']; | |
$global_prices = array( 'before' => array(), 'after' => array() ); | |
$cpf_price_array = $this->get_product_tm_epos( $product_id, $cart_item_meta["tmdata"]["form_prefix"] ); | |
if ( !empty( $cpf_price_array ) ) { | |
$global_price_array = $cpf_price_array['global']; | |
if ( !empty( $global_price_array ) ) { | |
foreach ( $global_price_array as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['sections_placement'] ) ) { | |
$global_prices[ $section['sections_placement'] ][ $priority ][ $pid ]['sections'][ $section_id ] = $section; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
$element_object = array(); | |
$pl = array( "before", "after" ); | |
foreach ( $pl as $where ) { | |
foreach ( $global_prices[ $where ] as $priorities ) { | |
foreach ( $priorities as $field ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['elements'] ) ) { | |
foreach ( $section['elements'] as $element ) { | |
$element_object[ $element['uniqid'] ] = $element; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( isset( $cart_item_meta['tmcartepo'] ) ) { | |
$current_currency = tc_get_woocommerce_currency(); | |
$percentcurrenttotal = array(); | |
foreach ( $cart_item_meta['tmcartepo'] as $key => $value ) { | |
if ( !isset( $element_object[ $value['section'] ] ) ) { | |
continue; | |
} | |
if ( $value["mode"] == "builder" ) { | |
$new_key = FALSE; | |
$wpml_translation_by_id = TM_EPO_WPML()->get_wpml_translation_by_id( $product_id, TRUE ); | |
if ( !empty( $value['multiple'] ) && !empty( $value['key'] ) ) { | |
$pos = strrpos( $value['key'], '_' ); | |
if ( $pos !== FALSE && isset( $wpml_translation_by_id[ "options_" . $value['section'] ] ) && is_array( $wpml_translation_by_id[ "options_" . $value['section'] ] ) ) { | |
$av = array_values( $wpml_translation_by_id[ "options_" . $value['section'] ] ); | |
$ak = array_keys( $wpml_translation_by_id[ "options_" . $value['section'] ] ); | |
if ( isset( $av[ substr( $value['key'], $pos + 1 ) ] ) ) { | |
$new_key = $ak[ substr( $value['key'], $pos + 1 ) ]; | |
} | |
} | |
} | |
$price_per_currencies = isset( $element_object[ $value['section'] ]['price_per_currencies'] ) ? $element_object[ $value['section'] ]['price_per_currencies'] : array(); | |
$price_per_currency = array(); | |
$_price_type = $this->get_element_price_type( $value ); | |
if ( $_price_type == "percentcurrenttotal" ) { | |
$percentcurrenttotal[] = $key; | |
} else { | |
foreach ( $price_per_currencies as $currency => $price_rule ) { | |
$copy_element = $element_object[ $value['section'] ]; | |
$copy_element['price_rules'] = $price_rule; | |
$currency_price = $this->calculate_price( $post_data, | |
$copy_element, | |
($new_key !== FALSE) ? $new_key : $cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['key'], | |
$cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['attribute'], | |
$cart_item_meta["tmdata"]["per_product_pricing"], | |
$cpf_product_price, | |
$cart_item_meta["tmdata"]["variation_id"], | |
'', | |
$currency, | |
$current_currency, | |
$price_per_currencies ); | |
$price_per_currency[ $currency ] = $currency_price; | |
} | |
$_price = $this->calculate_price( $post_data, | |
$element_object[ $value['section'] ], | |
($new_key !== FALSE) ? $new_key : $cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['key'], | |
$cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['attribute'], | |
$cart_item_meta["tmdata"]["per_product_pricing"], | |
$cpf_product_price, | |
$cart_item_meta["tmdata"]["variation_id"] ); | |
$cart_item_meta['tmcartepo'][ $key ]['price'] = $_price; | |
$cart_item_meta['tmcartepo'][ $key ]['price_per_currency'] = $price_per_currency; | |
if ( $_price_type == "percent" ) { | |
$post_data['tm_epo_options_static_prices'] = $post_data['tm_epo_options_static_prices'] + $_price; | |
} | |
} | |
} | |
} | |
foreach ( $percentcurrenttotal as $key ) { | |
$value = $cart_item_meta['tmcartepo'][ $key ]; | |
if ( !isset( $element_object[ $value['section'] ] ) ) { | |
continue; | |
} | |
if ( $value["mode"] == "builder" ) { | |
$new_key = FALSE; | |
$wpml_translation_by_id = TM_EPO_WPML()->get_wpml_translation_by_id( $product_id, TRUE ); | |
if ( !empty( $value['multiple'] ) && !empty( $value['key'] ) ) { | |
$pos = strrpos( $value['key'], '_' ); | |
if ( $pos !== FALSE && isset( $wpml_translation_by_id[ "options_" . $value['section'] ] ) && is_array( $wpml_translation_by_id[ "options_" . $value['section'] ] ) ) { | |
$av = array_values( $wpml_translation_by_id[ "options_" . $value['section'] ] ); | |
$ak = array_keys( $wpml_translation_by_id[ "options_" . $value['section'] ] ); | |
if ( isset( $av[ substr( $value['key'], $pos + 1 ) ] ) ) { | |
$new_key = $ak[ substr( $value['key'], $pos + 1 ) ]; | |
} | |
} | |
} | |
$price_per_currencies = isset( $element_object[ $value['section'] ]['price_per_currencies'] ) ? $element_object[ $value['section'] ]['price_per_currencies'] : array(); | |
$price_per_currency = array(); | |
$_price_type = $this->get_element_price_type( $value ); | |
foreach ( $price_per_currencies as $currency => $price_rule ) { | |
$copy_element = $element_object[ $value['section'] ]; | |
$copy_element['price_rules'] = $price_rule; | |
$currency_price = $this->calculate_price( $post_data, | |
$copy_element, | |
($new_key !== FALSE) ? $new_key : $cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['key'], | |
$cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['attribute'], | |
$cart_item_meta["tmdata"]["per_product_pricing"], | |
$cpf_product_price, | |
$cart_item_meta["tmdata"]["variation_id"], | |
'', | |
$currency, | |
$current_currency, | |
$price_per_currencies ); | |
$price_per_currency[ $currency ] = $currency_price; | |
} | |
$_price = $this->calculate_price( $post_data, | |
$element_object[ $value['section'] ], | |
($new_key !== FALSE) ? $new_key : $cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['key'], | |
$cart_item_meta['tmdata']['tmcartepo_data'][ $key ]['attribute'], | |
$cart_item_meta["tmdata"]["per_product_pricing"], | |
$cpf_product_price, | |
$cart_item_meta["tmdata"]["variation_id"] ); | |
$cart_item_meta['tmcartepo'][ $key ]['price'] = $_price; | |
$cart_item_meta['tmcartepo'][ $key ]['price_per_currency'] = $price_per_currency; | |
} | |
} | |
} | |
return $cart_item_meta; | |
} | |
/** | |
* @param $global_sections | |
* @param $global_prices | |
* @param $where | |
* @param $tmcp_post_fields | |
* @param $passed | |
* @param $loop | |
* @param $form_prefix | |
* @return array | |
*/ | |
public function validate_product_id_loop( $global_sections, $global_prices, $where, $tmcp_post_fields, $passed, $loop, $form_prefix ) { | |
foreach ( $global_prices[ $where ] as $priorities ) { | |
foreach ( $priorities as $field ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['elements'] ) ) { | |
foreach ( $section['elements'] as $element ) { | |
if ( in_array( $element['type'], $this->element_post_types ) ) { | |
$loop++; | |
} | |
if ( isset( $this->tm_builder_elements[ $element['type'] ] ) | |
&& isset( $this->tm_builder_elements[ $element['type'] ] ) | |
&& $this->tm_builder_elements[ $element['type'] ]["is_post"] != "display" | |
&& $this->is_visible( $element, $section, $global_sections, $form_prefix ) | |
) { | |
$_passed = TRUE; | |
$_message = FALSE; | |
$init_class = "TM_EPO_FIELDS_" . $element['type']; | |
if ( !class_exists( $init_class ) && !empty( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) ) { | |
$init_class = "TM_EPO_FIELDS"; | |
} | |
if ( class_exists( $init_class ) ) { | |
$field_obj = new $init_class(); | |
$_passed = $field_obj->validate_field( $tmcp_post_fields, $element, $loop, $form_prefix ); | |
$_message = isset( $_passed["message"] ) ? $_passed["message"] : FALSE; | |
$_passed = isset( $_passed["passed"] ) ? $_passed["passed"] : FALSE; | |
unset( $field_obj ); // clear memory | |
} | |
if ( !$_passed ) { | |
$passed = FALSE; | |
if ( $_message !== FALSE && is_array( $_message ) ) { | |
foreach ( $_message as $key => $value ) { | |
if ( $value == 'required' ) { | |
wc_add_notice( sprintf( __( '"%s" is a required field.', 'woocommerce-tm-extra-product-options' ), $element['label'] ), 'error' ); | |
} else { | |
wc_add_notice( $value, 'error' ); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return array( 'loop' => $loop, 'passed' => $passed ); | |
} | |
/** | |
* @param $product_id | |
* @param $qty | |
* @param string $form_prefix | |
* @return bool | |
*/ | |
public function validate_product_id( $product_id, $qty, $form_prefix = "" ) { | |
$passed = TRUE; | |
if ( $form_prefix ) { | |
$form_prefix = "_" . $form_prefix; | |
} | |
$cpf_price_array = $this->get_product_tm_epos( $product_id ); | |
if ( empty( $cpf_price_array ) ) { | |
return $passed; | |
} | |
$global_price_array = $cpf_price_array['global']; | |
$local_price_array = $cpf_price_array['local']; | |
if ( empty( $global_price_array ) && empty( $local_price_array ) ) { | |
return $passed; | |
} | |
$global_prices = array( 'before' => array(), 'after' => array() ); | |
$global_sections = array(); | |
foreach ( $global_price_array as $priority => $priorities ) { | |
foreach ( $priorities as $pid => $field ) { | |
if ( isset( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $section_id => $section ) { | |
if ( isset( $section['sections_placement'] ) ) { | |
$global_prices[ $section['sections_placement'] ][ $priority ][ $pid ]['sections'][ $section_id ] = $section; | |
$global_sections[ $section['sections_uniqid'] ] = $section; | |
} | |
} | |
} | |
} | |
} | |
if ( (!empty( $global_price_array ) && is_array( $global_price_array ) && count( $global_price_array ) > 0) || (!empty( $local_price_array ) && is_array( $local_price_array ) && count( $local_price_array ) > 0) ) { | |
$tmcp_post_fields = TM_EPO_HELPER()->array_filter_key( $_POST ); | |
if ( is_array( $tmcp_post_fields ) && !empty( $tmcp_post_fields ) && count( $tmcp_post_fields ) > 0 ) { | |
$tmcp_post_fields = array_map( 'stripslashes_deep', $tmcp_post_fields ); | |
} | |
$loop = -1; | |
$_return = $this->validate_product_id_loop( $global_sections, $global_prices, 'before', $tmcp_post_fields, $passed, $loop, $form_prefix ); | |
extract( $_return, EXTR_OVERWRITE ); | |
// todo: move this code to a function | |
if ( !empty( $local_price_array ) && is_array( $local_price_array ) && count( $local_price_array ) > 0 ) { | |
foreach ( $local_price_array as $tmcp ) { | |
if ( in_array( $tmcp['type'], $this->element_post_types ) ) { | |
$loop++; | |
} | |
if ( empty( $tmcp['type'] ) || empty( $tmcp['required'] ) ) { | |
continue; | |
} | |
if ( $tmcp['required'] ) { | |
$tmcp_attributes = $this->translate_fields( $tmcp['attributes'], $tmcp['type'], $loop, $form_prefix ); | |
$_passed = TRUE; | |
switch ( $tmcp['type'] ) { | |
case "checkbox" : | |
$_check = array_intersect( $tmcp_attributes, array_keys( $tmcp_post_fields ) ); | |
if ( empty( $_check ) || count( $_check ) == 0 ) { | |
$_passed = FALSE; | |
} | |
break; | |
case "radio" : | |
foreach ( $tmcp_attributes as $attribute ) { | |
if ( !isset( $tmcp_post_fields[ $attribute ] ) ) { | |
$_passed = FALSE; | |
} | |
} | |
break; | |
case "select" : | |
foreach ( $tmcp_attributes as $attribute ) { | |
if ( !isset( $tmcp_post_fields[ $attribute ] ) || $tmcp_post_fields[ $attribute ] == "" ) { | |
$_passed = FALSE; | |
} | |
} | |
break; | |
} | |
if ( !$_passed ) { | |
$passed = FALSE; | |
wc_add_notice( sprintf( __( '"%s" is a required field.', 'woocommerce-tm-extra-product-options' ), $tmcp['label'] ), 'error' ); | |
} | |
} | |
} | |
} | |
$_return = $this->validate_product_id_loop( $global_sections, $global_prices, 'after', $tmcp_post_fields, $passed, $loop, $form_prefix ); | |
extract( $_return, EXTR_OVERWRITE ); | |
} | |
return $passed; | |
} | |
/** | |
* @return string|void | |
*/ | |
public function tm_woocommerce_product_single_add_to_cart_text() { | |
return (!empty( $this->tm_epo_update_cart_text )) ? $this->tm_epo_update_cart_text : esc_attr__( 'Update cart', 'woocommerce' ); | |
} | |
/** | |
* @param $element | |
* @return array | |
*/ | |
public function get_tm_validation_rules( $element ) { | |
$rules = array(); | |
if ( $element['required'] ) { | |
$rules['required'] = TRUE; | |
} | |
if ( isset( $element['min_chars'] ) && $element['min_chars'] !== '' && $element['min_chars'] !== FALSE ) { | |
$rules['minlength'] = absint( $element['min_chars'] ); | |
} | |
if ( isset( $element['max_chars'] ) && $element['max_chars'] !== '' && $element['max_chars'] !== FALSE ) { | |
$rules['maxlength'] = absint( $element['max_chars'] ); | |
} | |
if ( isset( $element['min'] ) && $element['min'] !== '' ) { | |
$rules['min'] = floatval( $element['min'] ); | |
} | |
if ( isset( $element['max'] ) && $element['max'] !== '' ) { | |
$rules['max'] = floatval( $element['max'] ); | |
} | |
if ( !empty( $element['validation1'] ) ) { | |
$rules[ $element['validation1'] ] = TRUE; | |
} | |
return $rules; | |
} | |
/** | |
* Handles the display of builder sections. | |
*/ | |
public function get_builder_display( $field, $where, $args, $form_prefix = "", $product_id = 0, $dummy_prefix = FALSE ) { | |
/* $form_prefix shoud be passed with _ if not empty */ | |
$columns = array( | |
"w25" => array( "col-3", 25 ), | |
"w33" => array( "col-4", 33 ), | |
"w50" => array( "col-6", 50 ), | |
"w66" => array( "col-8", 66 ), | |
"w75" => array( "col-9", 75 ), | |
"w100" => array( "col-12", 100 ), | |
); | |
$tabindex = $args['tabindex']; | |
$unit_counter = $args['unit_counter']; | |
$field_counter = $args['field_counter']; | |
$element_counter = $args['element_counter']; | |
$_currency = $args['_currency']; | |
$product_id = $args['product_id']; | |
if ( isset( $field['sections'] ) && is_array( $field['sections'] ) ) { | |
$args = array( | |
'field_id' => 'tm-epo-field-' . $unit_counter, | |
); | |
wc_get_template( | |
'tm-builder-start.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$_section_totals = 0; | |
foreach ( $field['sections'] as $section ) { | |
if ( !isset( $section['sections_placement'] ) || $section['sections_placement'] != $where ) { | |
continue; | |
} | |
if ( isset( $section['sections_size'] ) && isset( $columns[ $section['sections_size'] ] ) ) { | |
$size = $columns[ $section['sections_size'] ][0]; | |
} else { | |
$size = "col-12"; | |
} | |
$_section_totals = $_section_totals + $columns[ $section['sections_size'] ][1]; | |
if ( $_section_totals > 100 ) { | |
$_section_totals = $columns[ $section['sections_size'] ][1]; | |
echo '<div class="cpfclear"></div>'; | |
} | |
$divider = ""; | |
if ( isset( $section['divider_type'] ) ) { | |
switch ( $section['divider_type'] ) { | |
case "hr": | |
$divider = '<hr>'; | |
break; | |
case "divider": | |
$divider = '<div class="tm_divider"></div>'; | |
break; | |
case "padding": | |
$divider = '<div class="tm_padding"></div>'; | |
break; | |
} | |
} | |
$label_size = 'h3'; | |
if ( !empty( $section['label_size'] ) ) { | |
switch ( $section['label_size'] ) { | |
case "1": | |
$label_size = 'h1'; | |
break; | |
case "2": | |
$label_size = 'h2'; | |
break; | |
case "3": | |
$label_size = 'h3'; | |
break; | |
case "4": | |
$label_size = 'h4'; | |
break; | |
case "5": | |
$label_size = 'h5'; | |
break; | |
case "6": | |
$label_size = 'h6'; | |
break; | |
case "7": | |
$label_size = 'p'; | |
break; | |
case "8": | |
$label_size = 'div'; | |
break; | |
case "9": | |
$label_size = 'span'; | |
break; | |
} | |
} | |
$args = array( | |
'column' => $size, | |
'style' => $section['sections_style'], | |
'uniqid' => $section['sections_uniqid'], | |
'logic' => esc_html( json_encode( (array) json_decode( stripslashes_deep( $section['sections_clogic'] ) ) ) ), | |
'haslogic' => $section['sections_logic'], | |
'sections_class' => $section['sections_class'], | |
'sections_type' => $section['sections_type'], | |
'title_size' => $label_size, | |
'title' => !empty( $section['label'] ) ? $section['label'] : "", | |
'title_color' => !empty( $section['label_color'] ) ? $section['label_color'] : "", | |
'title_position' => !empty( $section['label_position'] ) ? $section['label_position'] : "", | |
'description' => !empty( $section['description'] ) ? $section['description'] : "", | |
'description_color' => !empty( $section['description_color'] ) ? $section['description_color'] : "", | |
'description_position' => !empty( $section['description_position'] ) ? $section['description_position'] : "", | |
'divider' => $divider, | |
); | |
// custom variations check | |
if ( | |
isset( $section['elements'] ) | |
&& is_array( $section['elements'] ) | |
&& isset( $section['elements'][0] ) | |
&& is_array( $section['elements'][0] ) | |
&& isset( $section['elements'][0]['type'] ) | |
&& $section['elements'][0]['type'] == 'variations' | |
) { | |
$args['sections_class'] = $args['sections_class'] . " tm-epo-variation-section"; | |
} | |
wc_get_template( | |
'tm-builder-section-start.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
if ( isset( $section['elements'] ) && is_array( $section['elements'] ) ) { | |
$totals = 0; | |
$slide_counter = 0; | |
$use_slides = FALSE; | |
$doing_slides = FALSE; | |
if ( $section['sections_slides'] !== "" && $section['sections_type'] == "slider" ) { | |
$sections_slides = explode( ",", $section['sections_slides'] ); | |
$use_slides = TRUE; | |
} | |
foreach ( $section['elements'] as $element ) { | |
$element = apply_filters( 'wc_epo_get_element_for_display', $element ); | |
$empty_rules = ""; | |
if ( isset( $element['rules_filtered'] ) ) { | |
$empty_rules = esc_html( json_encode( ($element['rules_filtered']) ) ); | |
} | |
$empty_original_rules = ""; | |
if ( isset( $element['original_rules_filtered'] ) ) { | |
$empty_original_rules = esc_html( json_encode( ($element['original_rules_filtered']) ) ); | |
} | |
$empty_rules_type = ""; | |
if ( isset( $element['rules_type'] ) ) { | |
$empty_rules_type = esc_html( json_encode( ($element['rules_type']) ) ); | |
} | |
if ( isset( $element['size'] ) && isset( $columns[ $element['size'] ] ) ) { | |
$size = $columns[ $element['size'] ][0]; | |
} else { | |
$size = "col-12"; | |
} | |
$test_for_first_slide = FALSE; | |
if ( $use_slides && isset( $sections_slides[ $slide_counter ] ) ) { | |
$sections_slides[ $slide_counter ] = intval( $sections_slides[ $slide_counter ] ); | |
if ( $sections_slides[ $slide_counter ] > 0 && !$doing_slides ) { | |
echo '<div class="tm-slide">'; | |
$doing_slides = TRUE; | |
$test_for_first_slide = TRUE; | |
} | |
} | |
$fee_name = $this->fee_name; | |
$cart_fee_name = $this->cart_fee_name; | |
$totals = $totals + $columns[ $element['size'] ][1]; | |
if ( $totals > 100 && !$test_for_first_slide ) { | |
$totals = $columns[ $element['size'] ][1]; | |
echo '<div class="cpfclear"></div>'; | |
} | |
$divider = ""; | |
if ( isset( $element['divider_type'] ) ) { | |
$divider_class = ""; | |
if ( $element['type'] == 'divider' && !empty( $element['class'] ) ) { | |
$divider_class = " " . $element['class']; | |
} | |
switch ( $element['divider_type'] ) { | |
case "hr": | |
$divider = '<hr' . $divider_class . '>'; | |
break; | |
case "divider": | |
$divider = '<div class="tm_divider' . $divider_class . '"></div>'; | |
break; | |
case "padding": | |
$divider = '<div class="tm_padding' . $divider_class . '"></div>'; | |
break; | |
} | |
} | |
$label_size = 'h3'; | |
if ( !empty( $element['label_size'] ) ) { | |
switch ( $element['label_size'] ) { | |
case "1": | |
$label_size = 'h1'; | |
break; | |
case "2": | |
$label_size = 'h2'; | |
break; | |
case "3": | |
$label_size = 'h3'; | |
break; | |
case "4": | |
$label_size = 'h4'; | |
break; | |
case "5": | |
$label_size = 'h5'; | |
break; | |
case "6": | |
$label_size = 'h6'; | |
break; | |
case "7": | |
$label_size = 'p'; | |
break; | |
case "8": | |
$label_size = 'div'; | |
break; | |
case "9": | |
$label_size = 'span'; | |
break; | |
case "10": | |
$label_size = 'label'; | |
break; | |
} | |
} | |
$variations_builder_element_start_args = array(); | |
$tm_validation = $this->get_tm_validation_rules( $element ); | |
$args = array( | |
'tm_element_settings' => $element, | |
'column' => $size, | |
'class' => !empty( $element['class'] ) ? $element['class'] : "", | |
'container_id' => !empty( $element['container_id'] ) ? $element['container_id'] : "", | |
'title_size' => $label_size, | |
'title' => !empty( $element['label'] ) ? $element['label'] : "", | |
'title_position' => !empty( $element['label_position'] ) ? $element['label_position'] : "", | |
'title_color' => !empty( $element['label_color'] ) ? $element['label_color'] : "", | |
'description' => !empty( $element['description'] ) ? $element['description'] : "", | |
'description_color' => !empty( $element['description_color'] ) ? $element['description_color'] : "", | |
'description_position' => !empty( $element['description_position'] ) ? $element['description_position'] : "", | |
'divider' => $divider, | |
'required' => $element['required'], | |
'type' => $element['type'], | |
'use_images' => $element['use_images'], | |
'use_colors' => $element['use_colors'], | |
'use_url' => $element['use_url'], | |
'rules' => $empty_rules, | |
'original_rules' => $empty_original_rules, | |
'rules_type' => $empty_rules_type, | |
'element' => $element['type'], | |
'class_id' => "tm-element-ul-" . $element['type'] . " element_" . $element_counter . $form_prefix,// this goes on ul | |
'uniqid' => $element['uniqid'], | |
'logic' => esc_html( json_encode( (array) json_decode( stripslashes_deep($element['clogic']) ) ) ), | |
'haslogic' => $element['logic'], | |
'clear_options' => empty( $element['clear_options'] ) ? "" : $element['clear_options'], | |
'exactlimit' => empty( $element['exactlimit'] ) ? "" : 'tm-exactlimit', | |
'minimumlimit' => empty( $element['minimumlimit'] ) ? "" : 'tm-minimumlimit', | |
'tm_validation' => esc_html( json_encode( ($tm_validation) ) ), | |
); | |
if ( $element['type'] != "variations" ) { | |
wc_get_template( | |
'tm-builder-element-start.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
} else { | |
$variations_builder_element_start_args = $args; | |
} | |
$field_counter = 0; | |
$init_class = "TM_EPO_FIELDS_" . $element['type']; | |
if ( !class_exists( $init_class ) && !empty( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) ) { | |
$init_class = "TM_EPO_FIELDS"; | |
} | |
if ( isset( $this->tm_builder_elements[ $element['type'] ] ) | |
&& ($this->tm_builder_elements[ $element['type'] ]["is_post"] == "post" || $this->tm_builder_elements[ $element['type'] ]["is_post"] == "display") | |
&& class_exists( $init_class ) | |
) { | |
$field_obj = new $init_class(); | |
if ( $this->tm_builder_elements[ $element['type'] ]["is_post"] == "post" ) { | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "single" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleallsingle" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multiplesingle" ) { | |
$tabindex++; | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . ($dummy_prefix ? "" : (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : "")); | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "single" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleallsingle" ) { | |
$is_fee = (!empty( $element['rules_type'] ) && $element['rules_type'][0][0] == "subscriptionfee"); | |
$is_cart_fee = (!empty( $element['rules_type'] ) && isset( $element['rules_type'][0] ) && isset( $element['rules_type'][0][0] ) && in_array( $element['rules_type'][0][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
} elseif ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multiplesingle" ) { | |
$is_fee = (!empty( $element['selectbox_fee'] ) && $element['selectbox_fee'][0][0] == "subscriptionfee"); | |
$is_cart_fee = (!empty( $element['selectbox_cart_fee'] ) && isset( $element['selectbox_cart_fee'][0] ) && isset( $element['selectbox_cart_fee'][0][0] ) && in_array( $element['selectbox_cart_fee'][0][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
} | |
if ( $is_fee ) { | |
$name_inc = $fee_name . $name_inc; | |
} elseif ( $is_cart_fee ) { | |
$name_inc = $cart_fee_name . $name_inc; | |
} | |
if ( isset ( $_GET['switch-subscription'] ) && (function_exists( 'wcs_get_subscription' ) || (class_exists( 'WC_Subscriptions_Manager' ) && class_exists( 'WC_Subscriptions_Order' ))) ) { | |
$item = FALSE; | |
if ( function_exists( 'wcs_get_subscription' ) ) { | |
$subscription = wcs_get_subscription( $_GET['switch-subscription'] ); | |
if ( $subscription instanceof WC_Subscription ) { | |
$original_order = new WC_Order( $subscription->order->id ); | |
$item = WC_Subscriptions_Order::get_item_by_product_id( $original_order, $subscription->id ); | |
} | |
} else { | |
$subscription = WC_Subscriptions_Manager::get_subscription( $_GET['switch-subscription'] ); | |
$original_order = new WC_Order( $subscription['order_id'] ); | |
$item = WC_Subscriptions_Order::get_item_by_product_id( $original_order, $subscription['product_id'] ); | |
} | |
if ( $item ) {//need fix after new subscriptions for 2.7 (item_meta) | |
$saved_data = maybe_unserialize( $item["item_meta"]["_tmcartepo_data"][0] ); | |
foreach ( $saved_data as $key => $val ) { | |
if ( isset( $val["key"] ) ) { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} else { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["value"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
} | |
} elseif ( !empty( $this->cart_edit_key ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'tm-edit' ) ) { | |
$_cart = WC()->cart; | |
if ( isset( $_cart->cart_contents ) && isset( $_cart->cart_contents[ $this->cart_edit_key ] ) ) { | |
if ( !empty( $_cart->cart_contents[ $this->cart_edit_key ]['tmcartepo'] ) ) { | |
$saved_epos = $_cart->cart_contents[ $this->cart_edit_key ]['tmcartepo']; | |
foreach ( $saved_epos as $key => $val ) { | |
if ( isset( $val["key"] ) ) { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} else { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["value"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
} | |
if ( !empty( $_cart->cart_contents[ $this->cart_edit_key ]['tmcartfee'] ) ) { | |
$saved_fees = $_cart->cart_contents[ $this->cart_edit_key ]['tmcartfee']; | |
foreach ( $saved_fees as $key => $val ) { | |
if ( isset( $val["key"] ) ) { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} else { | |
if ( $element['uniqid'] == $val["section"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["value"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
$display = $field_obj->display_field( $element, array( | |
'name' => 'tmcp_' . $name_inc, | |
'name_inc' => $name_inc, | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter ) ); | |
if ( is_array( $display ) ) { | |
$original_amount = ""; | |
if ( isset( $element['original_rules_filtered'][0] ) && isset( $element['original_rules_filtered'][0][0] ) ) { | |
$original_amount = $element['original_rules_filtered'][0][0]; | |
} else { | |
$original_amount = $element['original_rules_filtered'][ esc_attr( reset( $element['options'] ) ) . "_0" ]; | |
if ( isset( $original_amount[0] ) ) { | |
$original_amount = $original_amount[0]; | |
} else { | |
$original_amount = ""; | |
} | |
} | |
if ( isset( $display["default_value_counter"] ) && $display["default_value_counter"] !== FALSE ) { | |
$original_amount = $element['original_rules_filtered'][ $display['default_value_counter'] ][0]; | |
} | |
$amount = ""; | |
if ( isset( $element['rules_filtered'][0] ) && isset( $element['rules_filtered'][0][0] ) ) { | |
$amount = $element['rules_filtered'][0][0]; | |
} else { | |
$amount = $element['rules_filtered'][ esc_attr( reset( $element['options'] ) ) . "_0" ]; | |
if ( isset( $amount[0] ) ) { | |
$amount = $amount[0]; | |
} else { | |
$amount = ""; | |
} | |
} | |
if ( isset( $display["default_value_counter"] ) && $display["default_value_counter"] !== FALSE ) { | |
$amount = $element['rules_filtered'][ $display['default_value_counter'] ][0]; | |
} | |
$args = array( | |
'tm_element_settings' => $element, | |
'id' => 'tmcp_' . $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . '_' . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc, | |
'class' => !empty( $element['class'] ) ? $element['class'] : "", | |
'tabindex' => $tabindex, | |
'rules' => isset( $element['rules_filtered'] ) ? esc_html( json_encode( ($element['rules_filtered']) ) ) : '', | |
'original_rules' => isset( $element['original_rules_filtered'] ) ? esc_html( json_encode( ($element['original_rules_filtered']) ) ) : '', | |
'rules_type' => isset( $element['rules_type'] ) ? esc_html( json_encode( ($element['rules_type']) ) ) : '', | |
'amount' => $amount . ' ' . $_currency, | |
'original_amount' => $original_amount . ' ' . $_currency, | |
'fieldtype' => $is_fee ? $this->fee_name_class : ($is_cart_fee ? $this->cart_fee_class : "tmcp-field"), | |
'field_counter' => $field_counter, | |
'tax_obj' => !($is_fee || $is_cart_fee) ? FALSE : esc_html( json_encode( (array( | |
'is_fee' => $is_fee || $is_cart_fee, | |
'has_fee' => isset( $element['include_tax_for_fee_price_type'] ) ? $element['include_tax_for_fee_price_type'] : '', | |
'tax_class' => isset( $element['tax_class_for_fee_price_type'] ) ? $element['tax_class_for_fee_price_type'] : '', | |
'tax_rate' => $this->get_tax_rate( isset( $element['tax_class_for_fee_price_type'] ) ? $element['tax_class_for_fee_price_type'] : '' ), | |
)) ) ), | |
); | |
$args = array_merge( $args, $display ); | |
if ( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) { | |
do_action( "tm_epo_display_addons", $element, $args, array( | |
'name_inc' => $name_inc, | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter ), $this->tm_builder_elements[ $element['type'] ]["namespace"] ); | |
} elseif ( is_readable( apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) . apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ) ) ) { | |
wc_get_template( | |
apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ), | |
$args, | |
$this->_namespace, | |
apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) | |
); | |
} | |
} | |
} elseif ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleall" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multiple" ) { | |
$field_obj->display_field_pre( $element, array( | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter, | |
'product_id' => isset( $product_id ) ? $product_id : 0, | |
) ); | |
foreach ( $element['options'] as $value => $label ) { | |
$tabindex++; | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleall" ) { | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . "_" . $field_counter . ($dummy_prefix ? "" : (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : "")); | |
} else { | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . ($dummy_prefix ? "" : (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : "")); | |
} | |
$is_fee = (isset( $element['rules_type'][ $value ] ) && $element['rules_type'][ $value ][0] == "subscriptionfee"); | |
$is_cart_fee = (isset( $element['rules_type'][ $value ] ) && in_array( $element['rules_type'][ $value ][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
if ( $is_fee ) { | |
$name_inc = $fee_name . $name_inc; | |
} elseif ( $is_cart_fee ) { | |
$name_inc = $cart_fee_name . $name_inc; | |
} | |
if ( isset ( $_GET['switch-subscription'] ) && (function_exists( 'wcs_get_subscription' ) || (class_exists( 'WC_Subscriptions_Manager' ) && class_exists( 'WC_Subscriptions_Order' ))) ) { | |
$item = FALSE; | |
if ( function_exists( 'wcs_get_subscription' ) ) { | |
$subscription = wcs_get_subscription( $_GET['switch-subscription'] ); | |
if ( $subscription instanceof WC_Subscription ) { | |
$original_order = new WC_Order( $subscription->order->id ); | |
$item = WC_Subscriptions_Order::get_item_by_product_id( $original_order, $subscription->id ); | |
} | |
} else { | |
$subscription = WC_Subscriptions_Manager::get_subscription( $_GET['switch-subscription'] ); | |
$original_order = new WC_Order( $subscription['order_id'] ); | |
$item = WC_Subscriptions_Order::get_item_by_product_id( $original_order, $subscription['product_id'] ); | |
} | |
if ( $item ) {//need fix after new subscriptions for 2.7 (item_meta) | |
$saved_data = maybe_unserialize( $item["item_meta"]["_tmcartepo_data"][0] ); | |
foreach ( $saved_data as $key => $val ) { | |
if ( $element['uniqid'] == $val["section"] && $value == $val["key"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
} elseif ( !empty( $this->cart_edit_key ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'tm-edit' ) ) { | |
$_cart = WC()->cart; | |
if ( isset( $_cart->cart_contents ) && isset( $_cart->cart_contents[ $this->cart_edit_key ] ) ) { | |
if ( !empty( $_cart->cart_contents[ $this->cart_edit_key ]['tmcartepo'] ) ) { | |
$saved_epos = $_cart->cart_contents[ $this->cart_edit_key ]['tmcartepo']; | |
foreach ( $saved_epos as $key => $val ) { | |
if ( $element['uniqid'] == $val["section"] && $value == $val["key"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
if ( !empty( $_cart->cart_contents[ $this->cart_edit_key ]['tmcartfee'] ) ) { | |
$saved_fees = $_cart->cart_contents[ $this->cart_edit_key ]['tmcartfee']; | |
foreach ( $saved_fees as $key => $val ) { | |
if ( $element['uniqid'] == $val["section"] && $value == $val["key"] ) { | |
$_GET[ 'tmcp_' . $name_inc ] = $val["key"]; | |
if ( isset( $val['quantity'] ) ) { | |
$_GET[ 'tmcp_' . $name_inc . '_quantity' ] = $val['quantity']; | |
} | |
} | |
} | |
} | |
} | |
} | |
$display = $field_obj->display_field( $element, array( | |
'name' => 'tmcp_' . $name_inc, | |
'name_inc' => $name_inc, | |
'value' => $value, | |
'label' => $label, | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter ) ); | |
if ( is_array( $display ) ) { | |
$original_amount = $element['original_rules_filtered'][ $value ][0]; | |
$amount = $element['rules_filtered'][ $value ][0]; | |
$args = array( | |
'tm_element_settings' => $element, | |
'id' => 'tmcp_' . $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . '_' . $element_counter . "_" . $field_counter . "_" . $tabindex . $form_prefix, | |
'name' => 'tmcp_' . $name_inc, | |
'class' => !empty( $element['class'] ) ? $element['class'] : "", | |
'tabindex' => $tabindex, | |
'rules' => isset( $element['rules_filtered'][ $value ] ) ? esc_html( json_encode( ($element['rules_filtered'][ $value ]) ) ) : '', | |
'original_rules' => isset( $element['original_rules_filtered'][ $value ] ) ? esc_html( json_encode( ($element['original_rules_filtered'][ $value ]) ) ) : '', | |
'rules_type' => isset( $element['rules_type'][ $value ] ) ? esc_html( json_encode( ($element['rules_type'][ $value ]) ) ) : '', | |
'amount' => $amount . ' ' . $_currency, | |
'original_amount' => $original_amount . ' ' . $_currency, | |
'fieldtype' => $is_fee ? $this->fee_name_class : ($is_cart_fee ? $this->cart_fee_class : "tmcp-field"), | |
'border_type' => $this->tm_epo_css_selected_border, | |
'field_counter' => $field_counter, | |
'tax_obj' => !($is_fee || $is_cart_fee) ? FALSE : esc_html( json_encode( (array( | |
'is_fee' => $is_fee || $is_cart_fee, | |
'has_fee' => isset( $element['include_tax_for_fee_price_type'] ) ? $element['include_tax_for_fee_price_type'] : '', | |
'tax_class' => isset( $element['tax_class_for_fee_price_type'] ) ? $element['tax_class_for_fee_price_type'] : '', | |
'tax_rate' => $this->get_tax_rate( isset( $element['tax_class_for_fee_price_type'] ) ? $element['tax_class_for_fee_price_type'] : '' ), | |
)) ) ), | |
); | |
$args = array_merge( $args, $display ); | |
if ( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) { | |
do_action( "tm_epo_display_addons", $element, $args, array( | |
'name_inc' => $name_inc, | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter, | |
'border_type' => $this->tm_epo_css_selected_border ), $this->tm_builder_elements[ $element['type'] ]["namespace"] ); | |
} elseif ( is_readable( apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) . apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ) ) ) { | |
wc_get_template( | |
apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ), | |
$args, | |
$this->_namespace, | |
apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) | |
); | |
} | |
} | |
$field_counter++; | |
} | |
} | |
$element_counter++; | |
} elseif ( $this->tm_builder_elements[ $element['type'] ]["is_post"] == "display" ) { | |
$display = $field_obj->display_field( $element, array( | |
'product_id' => $product_id, | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter ) ); | |
if ( is_array( $display ) ) { | |
$args = array( | |
'tm_element_settings' => $element, | |
'class' => !empty( $element['class'] ) ? $element['class'] : "", | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter, | |
'tm_element' => $element, | |
'tm__namespace' => $this->_namespace, | |
'tm_template_path' => TM_EPO_TEMPLATE_PATH, | |
'tm_product_id' => $product_id, | |
); | |
if ( $element['type'] == "variations" ) { | |
$args["variations_builder_element_start_args"] = $variations_builder_element_start_args; | |
$args["variations_builder_element_end_args"] = array( | |
'tm_element_settings' => $element, | |
'element' => $element['type'], | |
'description' => !empty( $element['description'] ) ? $element['description'] : "", | |
'description_color' => !empty( $element['description_color'] ) ? $element['description_color'] : "", | |
'description_position' => !empty( $element['description_position'] ) ? $element['description_position'] : "", | |
); | |
} | |
$args = array_merge( $args, $display ); | |
if ( $this->tm_builder_elements[ $element['type'] ]["_is_addon"] ) { | |
do_action( "tm_epo_display_addons", $element, $args, array( | |
'name_inc' => '', | |
'element_counter' => $element_counter, | |
'tabindex' => $tabindex, | |
'form_prefix' => $form_prefix, | |
'field_counter' => $field_counter ), $this->tm_builder_elements[ $element['type'] ]["namespace"] ); | |
} elseif ( is_readable( apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) . apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ) ) ) { | |
wc_get_template( | |
apply_filters( 'wc_epo_template_element', 'tm-' . $element['type'] . '.php', $element['type'], $element ), | |
$args, | |
$this->_namespace, | |
apply_filters( 'wc_epo_template_path_element', TM_EPO_TEMPLATE_PATH, $element['type'], $element ) | |
); | |
} | |
} | |
} | |
unset( $field_obj ); // clear memory | |
} | |
if ( $element['type'] != "variations" ) { | |
wc_get_template( | |
'tm-builder-element-end.php', | |
array( | |
'tm_element_settings' => $element, | |
'element' => $element['type'], | |
'description' => !empty( $element['description'] ) ? $element['description'] : "", | |
'description_color' => !empty( $element['description_color'] ) ? $element['description_color'] : "", | |
'description_position' => !empty( $element['description_position'] ) ? $element['description_position'] : "", | |
), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
} | |
if ( $use_slides && isset( $sections_slides[ $slide_counter ] ) ) { | |
$sections_slides[ $slide_counter ] = $sections_slides[ $slide_counter ] - 1; | |
if ( $sections_slides[ $slide_counter ] <= 0 ) { | |
echo '</div>'; | |
$slide_counter++; | |
$doing_slides = FALSE; | |
} | |
} | |
} | |
} | |
$args = array( | |
'column' => $size, | |
'style' => $section['sections_style'], | |
'sections_type' => $section['sections_type'], | |
'title_size' => $label_size, | |
'title' => !empty( $section['label'] ) ? $section['label'] : "", | |
'title_color' => !empty( $section['label_color'] ) ? $section['label_color'] : "", | |
'description' => !empty( $section['description'] ) ? $section['description'] : "", | |
'description_color' => !empty( $section['description_color'] ) ? $section['description_color'] : "", | |
'description_position' => !empty( $section['description_position'] ) ? $section['description_position'] : "", | |
); | |
wc_get_template( | |
'tm-builder-section-end.php', | |
$args, | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
} | |
wc_get_template( | |
'tm-builder-end.php', | |
array(), | |
$this->_namespace, | |
TM_EPO_TEMPLATE_PATH | |
); | |
$unit_counter++; | |
} | |
return array( | |
'tabindex' => $tabindex, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
'_currency' => $_currency, | |
); | |
} | |
/** | |
* @param $global_epos | |
* @param $field | |
* @param $where | |
* @param $args | |
* @param string $form_prefix | |
* @param string $add_identifier | |
* @return array | |
*/ | |
public function fill_builder_display( $global_epos, $field, $where, $args, $form_prefix = "", $add_identifier = "" ) { | |
/* $form_prefix shoud be passed with _ if not empty */ | |
$priority = $args['priority']; | |
$pid = $args['pid']; | |
$unit_counter = $args['unit_counter']; | |
$field_counter = $args['field_counter']; | |
$element_counter = $args['element_counter']; | |
if ( isset( $field['sections'] ) && is_array( $field['sections'] ) ) { | |
foreach ( $field['sections'] as $_s => $section ) { | |
if ( !isset( $section['sections_placement'] ) || $section['sections_placement'] != $where ) { | |
continue; | |
} | |
if ( isset( $section['elements'] ) && is_array( $section['elements'] ) ) { | |
foreach ( $section['elements'] as $arr_element_counter => $element ) { | |
$fee_name = $this->fee_name; | |
$cart_fee_name = $this->cart_fee_name; | |
$field_counter = 0; | |
if ( !empty( $add_identifier ) ) { | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['add_identifier'] = $add_identifier; | |
} | |
if ( isset( $this->tm_builder_elements[ $element['type'] ] ) && $this->tm_builder_elements[ $element['type'] ]["is_post"] == "post" ) { | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleall" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multiple" ) { | |
foreach ( $element['options'] as $value => $label ) { | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleall" ) { | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . "_" . $field_counter . (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : ""); | |
} else { | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : ""); | |
} | |
$is_fee = (!empty( $element['rules_type'][ $value ] ) && $element['rules_type'][ $value ][0] == "subscriptionfee"); | |
$is_cart_fee = (!empty( $element['rules_type'][ $value ] ) && in_array( $element['rules_type'][ $value ][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
if ( $is_fee ) { | |
$name_inc = $fee_name . $name_inc; | |
} elseif ( $is_cart_fee ) { | |
$name_inc = $cart_fee_name . $name_inc; | |
} | |
$name_inc = 'tmcp_' . $name_inc . (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : ""); | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['name_inc'][] = $name_inc; | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['is_fee'][] = $is_fee; | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['is_cart_fee'][] = $is_cart_fee; | |
$field_counter++; | |
} | |
} elseif ( $this->tm_builder_elements[ $element['type'] ]["type"] == "single" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleallsingle" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multiplesingle" ) { | |
$name_inc = $this->tm_builder_elements[ $element['type'] ]["post_name_prefix"] . "_" . $element_counter . (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : ""); | |
if ( $this->tm_builder_elements[ $element['type'] ]["type"] == "single" || $this->tm_builder_elements[ $element['type'] ]["type"] == "multipleallsingle" ) { | |
$is_fee = (!empty( $element['rules_type'] ) && $element['rules_type'][0][0] == "subscriptionfee"); | |
$is_cart_fee = (!empty( $element['rules_type'] ) && isset( $element['rules_type'][0] ) && isset( $element['rules_type'][0][0] ) && in_array( $element['rules_type'][0][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
} elseif ( $this->tm_builder_elements[ $element['type'] ]["type"] == "multiplesingle" ) { | |
$is_fee = (!empty( $element['selectbox_fee'] ) && $element['selectbox_fee'][0][0] == "subscriptionfee"); | |
$is_cart_fee = (!empty( $element['selectbox_cart_fee'] ) && in_array( $element['selectbox_cart_fee'][0][0], array( "fee", "stepfee", "currentstepfee" ) )); | |
} | |
if ( $is_fee ) { | |
$name_inc = $fee_name . $name_inc; | |
} elseif ( $is_cart_fee ) { | |
$name_inc = $cart_fee_name . $name_inc; | |
} | |
$name_inc = 'tmcp_' . $name_inc . (($form_prefix !== "") ? "_" . str_replace( "_", "", $form_prefix ) : ""); | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['name_inc'] = $name_inc; | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['is_fee'] = $is_fee; | |
$global_epos[ $priority ][ $pid ]['sections'][ $_s ]['elements'][ $arr_element_counter ]['is_cart_fee'] = $is_cart_fee; | |
} | |
$element_counter++; | |
} | |
} | |
} | |
} | |
$unit_counter++; | |
} | |
return array( | |
'global_epos' => $global_epos, | |
'unit_counter' => $unit_counter, | |
'field_counter' => $field_counter, | |
'element_counter' => $element_counter, | |
); | |
} | |
} | |
define( 'TM_EPO_INCLUDED', 1 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment