$element_id, 'element_type' => 'post_product'); $original_post_language_info = apply_filters('wpml_element_language_details', null, $get_language_args); return $original_post_language_info; } public static function wt_get_product_id_by_sku($sku){ global $wpdb; // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $post_exists_sku = $wpdb->get_var($wpdb->prepare(" SELECT $wpdb->posts.ID FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id ) WHERE $wpdb->posts.post_status IN ( 'publish', 'private', 'draft', 'pending', 'future' ) AND $wpdb->postmeta.meta_key = '_sku' AND $wpdb->postmeta.meta_value = %s ", $sku)); // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching if ($post_exists_sku) { return $post_exists_sku; } return false; } /** * To strip the specific string from the array key as well as value. * @param array $array. * @param string $data. * @return array. */ public static function wt_array_walk($array , $data) { $new_array =array(); foreach ($array as $key => $value) { $new_array[str_replace($data, '', $key)] = str_replace($data, '', $value); } return $new_array; } /** * Check the minimum base version required for post type modules * */ public static function check_base_version($post_type, $post_type_title, $min_version) { $warn_icon=' '; if(!version_compare(WT_U_IEW_VERSION, $min_version, '>=')) /* not matching the min version */ { /* translators: $1: Post type title, $2: Plugin name, $3: Minimum version, $4: Plugin name */ self::$min_version_msg.=$warn_icon.sprintf(__('The %1$s requires a minimum version of %2$s %3$s. Please upgrade the %4$s accordingly.', 'users-customers-import-export-for-wp-woocommerce'), "$post_type_title", "".WT_U_IEW_PLUGIN_NAME."", "v$min_version", "".WT_U_IEW_PLUGIN_NAME."").'
'; add_action('admin_notices', array(__CLASS__, 'no_minimum_base_version') ); return false; } return true; } /** * * No minimum version error message */ public static function no_minimum_base_version() { ?>

$form_datav) { $form_data_vl[$form_datak]=self::process_formdata($form_data, $form_datak); } } return (is_array($form_data_vl) ? $form_data_vl : array()); } /** * @since 2.6.3 Added to ensure data migration from serialized to JSON format * Safe custom unserialize function that handles only basic types. * If the value is not serialized (e.g. scalar or plain string), returns it unchanged. * * @param mixed $data Serialized string, or any other value to return as-is * @return mixed Unserialized data (only int, string, bool, array), or original value if not serialized. Empty input returns false. */ public static function wt_unserialize_safe($data) { if( empty($data) ) { return false; } if ( ! is_serialized( $data ) ) { return $data; } $offset = 0; // Recursive function to handle different types. $unserialize_value = function(&$offset) use ($data, &$unserialize_value) { $type = $data[$offset]; $offset++; switch ($type) { case 's': // String. preg_match('/:(\d+):"/', $data, $matches, 0, $offset); $length = (int) $matches[1]; $offset += strlen($matches[0]); $value = substr($data, $offset, $length); $offset += $length + 2; // Skip closing quotes and semicolon. return $value; case 'i': // Integer. preg_match('/:(-?\d+);/', $data, $matches, 0, $offset); $offset += strlen($matches[0]); return (int) $matches[1]; case 'd': // Float/Double. preg_match('/:(-?\d+(\.\d+)?);/', $data, $matches, 0, $offset); $offset += strlen($matches[0]); return (float) $matches[1]; case 'b': // Boolean. preg_match('/:(\d);/', $data, $matches, 0, $offset); $offset += strlen($matches[0]); return (bool) $matches[1]; case 'N': // NULL. $offset += 1; // Move past ';'. return false; case 'a': // Array. preg_match('/:(\d+):{/', $data, $matches, 0, $offset); $num_elements = (int) $matches[1]; $offset += strlen($matches[0]); $result = array(); for ($i = 0; $i < $num_elements; $i++) { $key = $unserialize_value($offset); $value = $unserialize_value($offset); // Only add items with valid array key types (string or integer). // Skip malformed items where key is array, null, bool, etc. if ( is_string( $key ) || is_int( $key ) ) { $result[$key] = $value; } } $offset++; // Move past closing '}'. return $result; case 'O': // Object (Convert to Array). preg_match('/:(\d+):"([^"]+)":(\d+):{/', $data, $matches, 0, $offset); $num_properties = (int) $matches[3]; $offset += strlen($matches[0]); $result = array(); for ($i = 0; $i < $num_properties; $i++) { $key = $unserialize_value($offset); $value = $unserialize_value($offset); // Only add items with valid array key types (string or integer). // Skip malformed items where key is array, null, bool, etc. if ( is_string( $key ) || is_int( $key ) ) { $result[$key] = $value; } } $offset++; // Move past closing '}'. return $result; // Object converted into an array. default: // Skip unsupported type. return false; } }; return $unserialize_value($offset); } /** * Decode template data - handles both serialized and JSON data * @since 2.6.3 * @param string $data The data to decode * @return array The decoded data as array */ public static function decode_template_data($data) { // Return empty array if data is empty if (empty($data)) { return array(); } // If data is already an array, return it if (is_array($data)) { return $data; } // Check if data is serialized first if (is_serialized($data)) { $unserialized_data = Wt_Import_Export_For_Woo_User_Basic_Common_Helper::wt_unserialize_safe($data); if ($unserialized_data !== false) { return $unserialized_data; } } // Try JSON decode $decoded = json_decode($data, true); if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) { return $decoded; } // Return empty array if all decoding attempts fail return array(); } /** * Form field generator */ public static function field_generator($form_fields, $form_data) { include plugin_dir_path( dirname( __FILE__ ) ).'admin/partials/_form_field_generator.php'; } /** * Save advanced settings * @param array $settings array of setting values */ public static function set_advanced_settings($settings) { update_option('wt_iew_advanced_settings', $settings); } /** * * Extract validation rule from form field array * @param array $fields form field array */ public static function extract_validation_rules($fields) { $out=array_map(function ($r) { return (isset($r['validation_rule']) ? $r['validation_rule'] : ''); }, $fields); return array_filter($out); } /** * Get advanced settings. * @param string $key key for specific setting (optional) * @return mixed if key provided then the value of key otherwise array of values */ public static function get_advanced_settings($key="") { $advanced_settings=get_option('wt_iew_advanced_settings'); $advanced_settings=($advanced_settings ? $advanced_settings : array()); if($key!="") { $key=(substr($key,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$key; if(isset($advanced_settings[$key])) { return $advanced_settings[$key]; }else { $default_settings=self::get_advanced_settings_default(); return (isset($default_settings[$key]) ? $default_settings[$key] : ''); } }else { $default_settings=self::get_advanced_settings_default(); $advanced_settings=wp_parse_args($advanced_settings, $default_settings); return $advanced_settings; } } /** * Get default value of advanced settings * @return array array of default values * */ public static function get_advanced_settings_default() { $fields=self::get_advanced_settings_fields(); foreach ($fields as $key => $value) { if(isset($value['value'])) { $key=(substr($key,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$key; $out[$key]=$value['value']; } } return $out; } /** * Get advanced fields * @return array array of fields * */ public static function get_advanced_settings_fields() { $fields=array(); return apply_filters('wt_iew_advanced_setting_fields_basic', $fields); } public static function wt_allowed_screens(){ $screens=array('wt_import_export_for_woo_basic','wt_import_export_for_woo_basic_export','wt_import_export_for_woo_basic_import','wt_import_export_for_woo_basic_history','wt_import_export_for_woo_basic_history_log'); return apply_filters('wt_iew_allowed_screens_basic', $screens); } public static function wt_get_current_page(){ // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce not required. return isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : ''; } public static function wt_is_screen_allowed(){ if(in_array(self::wt_get_current_page(), self::wt_allowed_screens())){ return true; }else{ return false; } } } } if(!function_exists('is_woocommerce_prior_to_basic')){ function is_woocommerce_prior_to_basic($version) { $woocommerce_is_pre_version = (!defined('WC_VERSION') || version_compare(WC_VERSION, $version, '<')) ? true : false; return $woocommerce_is_pre_version; if (WC()->version < $version) { return TRUE; } else { return FALSE; } } } if(!function_exists('wt_let_to_num_basic')){ function wt_let_to_num_basic( $size ) { $l = substr( $size, -1 ); $ret = (int) substr( $size, 0, -1 ); switch ( strtoupper( $l ) ) { case 'P': $ret *= 1024; // No break. case 'T': $ret *= 1024; // No break. case 'G': $ret *= 1024; // No break. case 'M': $ret *= 1024; // No break. case 'K': $ret *= 1024; // No break. } return $ret; } } if(!function_exists('wt_removeBomUtf8_basic')){ function wt_removeBomUtf8_basic($s) { if (substr($s, 0, 3) == chr(hexdec('EF')) . chr(hexdec('BB')) . chr(hexdec('BF'))) { return substr($s, 3); } else { return $s; } } } if (!function_exists('wt_iew_utf8ize_basic')) { function wt_iew_utf8ize_basic($data) { if (is_array($data)) { foreach ($data as $key => $value) { $data[$key] = wt_iew_utf8ize_basic($value); } } else if (is_string($data)) { // Use mbstring if available if (extension_loaded('mbstring')) { $encoding = mb_detect_encoding($data, ['UTF-8', 'ISO-8859-1', 'Windows-1252'], true); if ($encoding !== 'UTF-8') { return mb_convert_encoding($data, 'UTF-8', $encoding ?: 'ISO-8859-1'); } return $data; // Already UTF-8 } else { // Fallback: utf8_encode (assumes ISO-8859-1) if (function_exists('utf8_encode')) { return utf8_encode($data); } else { return $data; } } } return $data; } } /** * Outputs a HTML element with a star rating for a given rating. * * Outputs a HTML element with the star rating exposed on a 0..5 scale in * half star increments (ie. 1, 1.5, 2 stars). Optionally, if specified, the * number of ratings may also be displayed by passing the $number parameter. * * @since 3.8.0 - WP * @since 4.4.0 Introduced the `echo` parameter. - WP * * @param array $args { * Optional. Array of star ratings arguments. * * @type int|float $rating The rating to display, expressed in either a 0.5 rating increment, * or percentage. Default 0. * @type string $type Format that the $rating is in. Valid values are 'rating' (default), * or, 'percent'. Default 'rating'. * @type int $number The number of ratings that makes up this rating. Default 0. * @type bool $echo Whether to echo the generated markup. False to return the markup instead * of echoing it. Default true. * } * @return string Star rating HTML. */ if(!function_exists('wt_wp_star_rating')){ function wt_wp_star_rating( $args = array() ) { $defaults = array( 'rating' => 0, 'type' => 'rating', 'number' => 0, 'echo' => true, ); $parsed_args = wp_parse_args( $args, $defaults ); // Non-English decimal places when the $rating is coming from a string. $rating = (float) str_replace( ',', '.', $parsed_args['rating'] ); // Convert percentage to star rating, 0..5 in .5 increments. if ( 'percent' === $parsed_args['type'] ) { $rating = round( $rating / 10, 0 ) / 2; } // Calculate the number of each type of star needed. $full_stars = floor( $rating ); $half_stars = ceil( $rating - $full_stars ); $empty_stars = 5 - $full_stars - $half_stars; if ( $parsed_args['number'] ) { /* translators: 1: The rating, 2: The number of ratings. */ $format = _n( '%1$s rating based on %2$s rating', '%1$s rating based on %2$s ratings', $parsed_args['number'], 'users-customers-import-export-for-wp-woocommerce' ); $title = sprintf( $format, number_format_i18n( $rating, 1 ), number_format_i18n( $parsed_args['number'] ) ); } else { /* translators: %s: The rating. */ $title = sprintf( __( '%s rating', 'users-customers-import-export-for-wp-woocommerce' ), number_format_i18n( $rating, 1 ) ); } $output = '
'; $output .= '' . $title . ''; $output .= str_repeat( '', $full_stars ); $output .= str_repeat( '', $half_stars ); $output .= str_repeat( '', $empty_stars ); $output .= '
'; if ( $parsed_args['echo'] ) { echo wp_kses_post($output); } return $output; } }