public function js_element_data($button_class = "") { $drag_elements = array(); $tags = array(); foreach (TM_EPO_BUILDER()->get_elements() as $element => $settings) { if (isset(TM_EPO_BUILDER()->elements_array[$element])) { if ($settings['show_on_backend']) { $tagclass = ""; if ($settings['_is_addon']) { $tags[$settings['namespace']][sanitize_title("tc-" . $settings['tags'])] = $settings['tags']; $tagclass .= " tc-" . sanitize_title($settings['tags']) . " tc-" . sanitize_title($settings['namespace']); } else { $tag = explode(" ", $settings['tags']); foreach ($tag as $key => $value) { $tags[$settings['namespace']][sanitize_title($value)] = $value; $tagclass .= " tc-" . sanitize_title($value); } } $_drag_elements = '<li class="transition tm-element-button' . $tagclass . '">'; $_drag_elements .= "<div data-element='" . $element . "' class='" . $button_class . " tc-element-button element-" . $element . "'>" . "<div class='tm-label'>" . "<i class='tmfa tcfa " . $settings["icon"] . "'></i> " . "<span class='tm-element-name'>" . $settings["name"] . "</span>" . "<i class='tm-description'>" . $settings["description"] . "</i>" . "</div></div>"; $_drag_elements .= '</li>'; $drag_elements[$settings['namespace']][] = $_drag_elements; } } } $tm_drag_elements = $drag_elements[TM_EPO_BUILDER()->elements_namespace]; unset($drag_elements[TM_EPO_BUILDER()->elements_namespace]); $drag_elements_html = implode("", $tm_drag_elements); foreach ($drag_elements as $key => $value) { $drag_elements_html .= implode("", $value); } $tm_tags = $tags[TM_EPO_BUILDER()->elements_namespace]; unset($tags[TM_EPO_BUILDER()->elements_namespace]); //$tags = array_unique($tags,SORT_REGULAR);//requires php > 5.2.9 $tags = array_map('unserialize', array_unique(array_map('serialize', $tags))); $tag_counter = 1; $out = '<div class="transition tm-tabs tm-tags-container">'; $out .= '<div class="transition tm-tab-headers">'; $out .= '<div class="tm-box tma-tab-label">' . '<h4 class="tab-header open" data-tm-tag="' . esc_attr("all") . '" data-id="tc-tag' . $tag_counter . '-tab">' . __('All', TM_EPO_TRANSLATION) . '</h4>' . '</div>'; foreach ($tm_tags as $key => $value) { $tag_counter++; $out .= '<div class="tm-box tma-tab-label">' . '<h4 class="tab-header closed" data-tm-tag="tc-' . esc_attr($key) . '" data-id="tc-tag' . $tag_counter . '-tab">' . $value . '</h4>' . '</div>'; } foreach ($tags as $key => $value) { $tag_counter++; $out .= '<div class="tm-box tma-tab-label">' . '<h4 class="tab-header closed" data-tm-tag="tc-' . esc_attr(sanitize_title($key)) . '" data-id="tc-tag' . $tag_counter . '-tab">' . $key . '</h4>' . '</div>'; } $out .= '</div>'; $out .= '<div class="transition tm-tab tc-tag' . $tag_counter . '-tab">'; $out .= '<ul class="tm-elements-container tm-bsbb-all">'; $out .= $drag_elements_html; $out .= '</ul>'; $out .= '</div>'; $out .= '</div>'; return $out; }
public function register_addon() { TM_EPO_BUILDER()->register_addon(array("name" => "tm_button", "options" => array("name" => __("TM Buttom", TM_EPO_TRANSLATION), "width" => "w100", "width_display" => "1/1", "icon" => "fa-terminal", "is_post" => "post", "type" => "single", "post_name_prefix" => "tm_button", "fee_type" => "single", "subscription_fee_type" => "single"), "settings" => array("required", "price", "text_after_price", "price_type6", "hide_amount", array("id" => "my_custom_setting", "default" => "", "type" => "text", "label" => __('My Custom Setting name', TM_EPO_TRANSLATION), "desc" => __('My Custom Setting description.', TM_EPO_TRANSLATION))))); }
/** * Gets a list of all the Extra Product Options (local and global) * for the specific $post_id. */ public function get_product_tm_epos($post_id = 0, $form_prefix = "") { if (empty($post_id)) { return array(); } if (!empty($this->cpf[$post_id])) { return $this->cpf[$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 Local options */ $args = array('post_type' => TM_EPO_LOCAL_POST_TYPE, 'post_status' => array('publish'), '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(); $this->set_tm_meta($post_id); $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'), 'numberposts' => -1, 'orderby' => 'date', 'order' => 'asc', 'meta_query' => $meta_array); $tmp_tmglobalprices = get_posts($args); if ($tmp_tmglobalprices) { $wpml_tmp_tmglobalprices = array(); $wpml_tmp_tmglobalprices_added = array(); foreach ($tmp_tmglobalprices as $price) { /* Get Global options that belong to the product categories */ if (!empty($in_cat) && has_term($in_cat, 'product_cat', $price)) { $tmglobalprices[] = $price; $tm_meta_cpf_global_forms_added[] = $price->ID; } /* Get Global options that have no catergory set (they apply to all products) */ if (!has_term($_all_categories, 'product_cat', $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)); 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'), '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 { $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 $product_epos = array(); $global_epos = array(); $epos_prices = array(); 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 = get_post_meta($original_product_id, 'tm_meta', true); $current_builder = 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' => $_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), '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)); for ($k0 = $_helper_counter; $k0 < intval($_helper_counter + intval($_sections[$_s])); $k0++) { $current_element = $_elements[$k0]; $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($this->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(); $_regular_price_type = array(); $_new_type = $current_element; $_prefix = ""; $_min_price0 = ''; $_min_price = ''; $_max_price = ''; $_regular_currencies = array(); $price_per_currencies = array(); $_description = false; $_use_lightbox = ''; if ($this->tm_original_builder_elements[$current_element]) { if ($this->tm_original_builder_elements[$current_element]["type"] == "single") { $_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); if (empty($builder[$current_element . '_price'][$current_counter])) { $builder[$current_element . '_price'][$current_counter] = 0; } $new_currency = false; $mt_prefix = TM_EPO_HELPER()->get_currency_price_prefix(); $_price = $builder[$current_element . '_price'][$current_counter]; 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]) ? $builder[$current_element . '_price' . $mt_prefix][$current_counter] : ''; $_current_currency_sale_price = isset($builder[$current_element . '_sale_price' . $mt_prefix]) ? $builder[$current_element . '_sale_price' . $mt_prefix][$current_counter] : ''; if ($mt_prefix !== '' && $_current_currency_price && $_current_currency_price !== '') { $_price = $_current_currency_price; if ($_current_currency_sale_price && $_current_currency_sale_price !== '') { $_price = $_current_currency_sale_price; } $_regular_currencies = array(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; } $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('woocommerce_tm_epo_price2', $_price, $_for_filter_price_type); } 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; } } else { $_min_price = $_max_price = false; $_min_price0 = 0; } $_regular_price_filtered = array(array(wc_format_decimal($_price, false, true))); } elseif ($this->tm_original_builder_elements[$current_element]["type"] == "multiple" || $this->tm_original_builder_elements[$current_element]["type"] == "multipleall" || $this->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_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])) { if (empty($builder['multiple_' . $current_element . '_options_price'][$current_counter])) { $builder['multiple_' . $current_element . '_options_price'][$current_counter] = 0; } $_prices = $builder['multiple_' . $current_element . '_options_price'][$current_counter]; $_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] : ''; $_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] : ''; $_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'); $_imagesp = $this->get_builder_element('multiple_' . $current_element . '_options_imagep', $builder, $current_builder, $current_counter, array(), true, $current_element, 'tm_image_url'); 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; 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(); $_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); $_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]; $_regular_currencies[esc_attr($_values[$_n]) . "_" . $_n] = array(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('woocommerce_tm_epo_price2', $_price, $_for_filter_price_type); } $_regular_price_filtered[esc_attr($_values[$_n]) . "_" . $_n] = array(wc_format_decimal($_price, 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] == '') { 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 ($_max_price === '') { $_max_price = $_f_price; } else { if ($_max_price < $_f_price) { $_max_price = $_f_price; } } } else { if ($_price === '') { $_min_price0 = 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); } } } } } } } $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; } } $epos_prices[] = array("min" => floatval($_min_price0), "max" => floatval($_max_price), "logic" => $this->get_builder_element($_prefix . 'logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element)); if ($_min_price !== false) { $_min_price = wc_format_localized_price($_min_price); } if ($_max_price !== false) { $_max_price = wc_format_localized_price($_max_price); } if ($current_element != "header" && $current_element != "divider") { $global_epos[$priority][$tmcp_id]['sections'][$_s]['elements'][] = array_merge(TM_EPO_BUILDER()->get_custom_properties($builder, $_prefix, $_counter, $_elements, $k0), 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], 'required' => $this->get_builder_element($_prefix . 'required', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'use_images' => $_use_images, 'use_lightbox' => $_use_lightbox, 'use_url' => $this->get_builder_element($_prefix . 'use_url', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'items_per_row' => $this->get_builder_element($_prefix . 'items_per_row', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), '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_position' => $this->get_builder_element($_prefix . 'header_subtitle_position', $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), 'divider_type' => $this->get_builder_element($_prefix . 'divider_type', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'placeholder' => $this->get_builder_element($_prefix . 'placeholder', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'min_chars' => $this->get_builder_element($_prefix . 'min_chars', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'max_chars' => $this->get_builder_element($_prefix . 'max_chars', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'hide_amount' => $this->get_builder_element($_prefix . 'hide_amount', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'text_before_price' => $this->get_builder_element($_prefix . 'text_before_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'text_after_price' => $this->get_builder_element($_prefix . 'text_after_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), '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, 'currencies' => $_regular_currencies, 'price_per_currencies' => $price_per_currencies, 'images' => isset($_images) ? $_images : "", 'imagesp' => isset($_imagesp) ? $_imagesp : "", 'url' => isset($_url) ? $_url : "", 'cdescription' => $_description !== false ? $_description : "", 'limit' => $this->get_builder_element($_prefix . 'limit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'exactlimit' => $this->get_builder_element($_prefix . 'exactlimit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'minimumlimit' => $this->get_builder_element($_prefix . 'minimumlimit_choices', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'clear_options' => $this->get_builder_element($_prefix . 'clear_options', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), '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), 'uniqid' => $this->get_builder_element($_prefix . 'uniqid', $builder, $current_builder, $current_counter, uniqid('', true), $wpml_element_fields, $current_element), 'clogic' => $this->get_builder_element($_prefix . 'clogic', $builder, $current_builder, $current_counter, false, $wpml_element_fields, $current_element), 'logic' => $this->get_builder_element($_prefix . 'logic', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'format' => $this->get_builder_element($_prefix . 'format', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'start_year' => $this->get_builder_element($_prefix . 'start_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'end_year' => $this->get_builder_element($_prefix . 'end_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'min_date' => $this->get_builder_element($_prefix . 'min_date', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'max_date' => $this->get_builder_element($_prefix . 'max_date', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'disabled_dates' => $this->get_builder_element($_prefix . 'disabled_dates', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'enabled_only_dates' => $this->get_builder_element($_prefix . 'enabled_only_dates', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'disabled_weekdays' => $this->get_builder_element($_prefix . 'disabled_weekdays', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'theme' => $this->get_builder_element($_prefix . 'theme', $builder, $current_builder, $current_counter, "epo", $wpml_element_fields, $current_element), 'theme_size' => $this->get_builder_element($_prefix . 'theme_size', $builder, $current_builder, $current_counter, "medium", $wpml_element_fields, $current_element), 'theme_position' => $this->get_builder_element($_prefix . 'theme_position', $builder, $current_builder, $current_counter, "normal", $wpml_element_fields, $current_element), 'tranlation_day' => $this->get_builder_element($_prefix . 'tranlation_day', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'tranlation_month' => $this->get_builder_element($_prefix . 'tranlation_month', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'tranlation_year' => $this->get_builder_element($_prefix . 'tranlation_year', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), "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), 'text_after_price' => $this->get_builder_element($_prefix . 'text_after_price', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), '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), 'swatchmode' => $this->get_builder_element($_prefix . 'swatchmode', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'changes_product_image' => $_changes_product_image, 'min' => $this->get_builder_element($_prefix . 'min', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'max' => $this->get_builder_element($_prefix . 'max', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'step' => $this->get_builder_element($_prefix . 'step', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'pips' => $this->get_builder_element($_prefix . 'pips', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'show_picker_value' => $this->get_builder_element($_prefix . 'show_picker_value', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'quantity' => $this->get_builder_element($_prefix . 'quantity', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'quantity_min' => $this->get_builder_element($_prefix . 'quantity_min', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'quantity_max' => $this->get_builder_element($_prefix . 'quantity_max', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'quantity_step' => $this->get_builder_element($_prefix . 'quantity_step', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'quantity_default_value' => $this->get_builder_element($_prefix . 'quantity_default_value', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element), 'validation1' => $this->get_builder_element($_prefix . 'validation1', $builder, $current_builder, $current_counter, "", $wpml_element_fields, $current_element))); } 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' => "", 'use_images' => "", '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, uniqid('', true), $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' => "", 'use_images' => "", '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, uniqid('', true), $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])); } } } } } ksort($global_epos); if ($tmlocalprices) { TM_EPO_WPML()->remove_sql_filter(); $attributes = maybe_unserialize(get_post_meta(floatval(TM_EPO_WPML()->get_original_id($post_id)), '_product_attributes', true)); $wpml_attributes = maybe_unserialize(get_post_meta($post_id, '_product_attributes', true)); foreach ($tmlocalprices as $price) { $tmcp_id = absint($price->ID); $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)); 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)); } 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 = array_map('trim', explode(WC_DELIMITER, $wpml_attributes[$product_epos[$tmcp_id]['name']]['value'])); 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)); $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)); } } } // 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(); } $global_epos = $this->tm_fill_element_names($post_id, $global_epos, $product_epos, $form_prefix); $epos = array('global' => $global_epos, 'local' => $product_epos, 'price' => $epos_prices); $this->cpf[$post_id] = $epos; return $epos; }