# ultimate-store-kit/1.5.1/includes/helper.php

Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder, version 1.5.1. 1,145 lines.

- Page: https://pluginprobe.com/plugins/ultimate-store-kit/1.5.1/code/includes/helper.php
- Raw: https://pluginprobe.com/plugins/ultimate-store-kit/1.5.1/raw/includes/helper.php
- Modified: 2024-01-01T05:44:58+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ultimate-store-kit/1.5.1/code/includes/helper.php#L10-L20`.

```php
<?php

use UltimateStoreKit\Ultimate_Store_Kit_Loader;
use Elementor\Plugin;

/**
 * You can easily add white label branding for for extended license or multi site license.
 * Don't try for regular license otherwise your license will be invalid.
 * return white label
 */

if (!defined('BDTUSK')) {
	define('BDTUSK', '');
}

//Add prefix for all widgets <span class="usk-widget-badge"></span>
if (!defined('BDTUSK_CP')) {
	define('BDTUSK_CP', '<span class="usk-widget-badge"></span>');
}

//Add prefix for all widgets <span class="usk-widget-badge"></span>
if (!defined('BDTUSK_NC')) {
	define('BDTUSK_NC', '<span class="usk-new-control"></span>');
}

// if you have any custom style
if (!defined('BDTUSK_SLUG')) {
	define('BDTUSK_SLUG', 'ultimate-store-kit');
}

// set your own alias
if (!defined('BDTUSK_VER')) {
	define('BDTUSK_VER', 'Ultimate Store Kit');
}

// Set your own name for plugin

if (!defined('BDTUSK_NAME')) {
	define('BDTUSK_NAME', 'Ultimate Store Kit');
}

/**
 * Show any alert by this function
 *
 * @param mixed $message [description]
 * @param class prefix  $type    [description]
 * @param boolean $close [description]
 *
 * @return helper [description]
 */


function ultimate_store_kit_is_edit() {
	return Plugin::$instance->editor->is_edit_mode();
}

function ultimate_store_kit_is_preview() {
	return Plugin::$instance->preview->is_preview_mode();
}

function ultimate_store_kit_alert($message, $type = 'warning', $close = true) {
?>
	<div class="usk-alert-<?php echo esc_attr('$type'); ?>" usk-alert>
		<?php if ($close) : ?>
			<a class="usk-alert-close" usk-close></a>
		<?php endif; ?>
		<?php echo wp_kses_post($message); ?>
	</div>
	<?php
}

function ultimate_store_kit_get_alert($message, $type = 'warning', $close = true) {

	$output = '<div class="usk-alert-' . $type . '" usk-alert>';
	if ($close) :
		$output .= '<a class="usk-alert-close" usk-close></a>';
	endif;
	$output .= wp_kses_post($message);
	$output .= '</div>';

	return $output;
}

/**
 * all array css classes will output as proper space
 *
 * @param array $classes shortcode css class as array
 *
 * @return proper string
 */

function ultimate_store_kit_get_post_types($args = []) {

	$post_type_args = [
		'show_in_nav_menus' => true,
	];

	if (!empty($args['post_type'])) {
		$post_type_args['name'] = $args['post_type'];
	}

	$_post_types = get_post_types($post_type_args, 'objects');

	$post_types = ['0' => esc_html__('Select Type', 'ultimate-store-kit')];

	foreach ($_post_types as $post_type => $object) {
		$post_types[$post_type] = $object->label;
	}

	return $post_types;
}

/**
 * Add REST API support to an already registered post type.
 */

// function bdt_custom_post_type_rest_support() {

//     global $wp_post_types;

//     $post_types = ultimate_store_kit_get_post_types();

//     foreach( $post_types as $post_type ) {

//         $post_type_name = $post_type;

//         if( isset( $wp_post_types[ $post_type_name ] ) ) {

//             $wp_post_types[$post_type_name]->show_in_rest = true;

//             $wp_post_types[$post_type_name]->rest_base = $post_type_name;

//             $wp_post_types[$post_type_name]->rest_controller_class = 'WP_REST_Posts_Controller';

//         }

//     }

// }

// add_action( 'init', 'bdt_custom_post_type_rest_support', 25 );

function ultimate_store_kit_allow_tags($tag = null) {
	$tag_allowed = wp_kses_allowed_html('post');

	$tag_allowed['input'] = [
		'class'   => [],
		'id'      => [],
		'name'    => [],
		'value'   => [],
		'checked' => [],
		'type'    => [],
	];
	$tag_allowed['select'] = [
		'class'    => [],
		'id'       => [],
		'name'     => [],
		'value'    => [],
		'multiple' => [],
		'type'     => [],
	];
	$tag_allowed['option'] = [
		'value'    => [],
		'selected' => [],
	];

	$tag_allowed['title'] = [
		'a'      => [
			'href'  => [],
			'title' => [],
			'class' => [],
		],
		'br'     => [],
		'em'     => [],
		'strong' => [],
		'hr'     => [],
	];

	$tag_allowed['text'] = [
		'a'      => [
			'href'  => [],
			'title' => [],
			'class' => [],
		],
		'br'     => [],
		'em'     => [],
		'strong' => [],
		'hr'     => [],
		'i'      => [
			'class' => [],
		],
		'span'   => [
			'class' => [],
		],
	];

	$tag_allowed['svg'] = [
		'svg'     => [
			'version'     => [],
			'xmlns'       => [],
			'viewbox'     => [],
			'xml:space'   => [],
			'xmlns:xlink' => [],
			'x'           => [],
			'y'           => [],
			'style'       => [],
		],
		'g'       => [],
		'path'    => [
			'class' => [],
			'd'     => [],
		],
		'ellipse' => [
			'class' => [],
			'cx'    => [],
			'cy'    => [],
			'rx'    => [],
			'ry'    => [],
		],
		'circle'  => [
			'class' => [],
			'cx'    => [],
			'cy'    => [],
			'r'     => [],
		],
		'rect'    => [
			'x'         => [],
			'y'         => [],
			'transform' => [],
			'height'    => [],
			'width'     => [],
			'class'     => [],
		],
		'line'    => [
			'class' => [],
			'x1'    => [],
			'x2'    => [],
			'y1'    => [],
			'y2'    => [],
		],
		'style'   => [],

	];

	if ($tag == null) {
		return $tag_allowed;
	} elseif (is_array($tag)) {
		$new_tag_allow = [];

		foreach ($tag as $_tag) {
			$new_tag_allow[$_tag] = $tag_allowed[$_tag];
		}

		return $new_tag_allow;
	} else {
		return isset($tag_allowed[$tag]) ? $tag_allowed[$tag] : [];
	}
}

/**
 * post pagination
 */
function ultimate_store_kit_post_pagination($wp_query) {

	/** Stop execution if there's only 1 page */

	if ($wp_query->max_num_pages <= 1) {
		return;
	}

	if (is_front_page()) {
		$paged = (get_query_var('page')) ? get_query_var('page') : 1;
	} else {
		$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
	}

	$max = intval($wp_query->max_num_pages);

	/** Add current page to the array */

	if ($paged >= 1) {
		$links[] = $paged;
	}

	/** Add the pages around the current page to the array */

	if ($paged >= 3) {
		$links[] = $paged - 1;
		$links[] = $paged - 2;
	}

	if (($paged + 2) <= $max) {
		$links[] = $paged + 2;
		$links[] = $paged + 1;
	}

	echo '<ul class="usk-pagination">' . "\n";

	/** Previous Post Link */

	if (get_previous_posts_link()) {
		printf('<li>%s</li>' . "\n", get_previous_posts_link('<span class="usk-icon-arrow-left-5"></span>'));
	}

	/** Link to first page, plus ellipses if necessary */

	if (!in_array(1, $links)) {
		$class = 1 == $paged ? ' class="current"' : '';

		printf('<li%s><a href="%s" target="_self">%s</a></li>' . "\n", $class, esc_url(get_pagenum_link(1)), '1');

		if (!in_array(2, $links)) {
			echo '<li class="usk-pagination-dot-dot"><span>...</span></li>';
		}
	}

	/** Link to current page, plus 2 pages in either direction if necessary */
	sort($links);

	foreach ((array) $links as $link) {
		$class = $paged == $link ? ' class="usk-active"' : '';
		printf('<li%s><a href="%s" target="_self">%s</a></li>' . "\n", $class, esc_url(get_pagenum_link($link)), $link);
	}

	/** Link to last page, plus ellipses if necessary */

	if (!in_array($max, $links)) {

		if (!in_array($max - 1, $links)) {
			echo '<li class="usk-pagination-dot-dot"><span>...</span></li>' . "\n";
		}

		$class = $paged == $max ? ' class="usk-active"' : '';
		printf('<li%s><a href="%s" target="_self">%s</a></li>' . "\n", $class, esc_url(get_pagenum_link($max)), $max);
	}

	/** Next Post Link */

	if (get_next_posts_link()) {
		printf('<li>%s</li>' . "\n", get_next_posts_link('<span class="usk-icon-arrow-right-1"></span>'));
	}

	echo '</ul>' . "\n";
}

function ultimate_store_kit_template_edit_link($template_id) {

	if (Ultimate_Store_Kit_Loader::elementor()->editor->is_edit_mode()) {

		$final_url = add_query_arg(['elementor' => ''], get_permalink($template_id));

		$output = sprintf('<a class="usk-elementor-template-edit-link" href="%s" title="%s" target="_blank"><i class="eicon-edit"></i></a>', esc_url($final_url), esc_html__('Edit Template', 'ultimate-store-kit'));

		return $output;
	}
}

function ultimate_store_kit_iso_time($time) {
	$current_offset  = (float) get_option('gmt_offset');
	$timezone_string = get_option('timezone_string');

	// Create a UTC+- zone if no timezone string exists.

	//if ( empty( $timezone_string ) ) {
	if (0 === $current_offset) {
		$timezone_string = '+00:00';
	} elseif ($current_offset < 0) {
		$timezone_string = $current_offset . ':00';
	} else {
		$timezone_string = '+0' . $current_offset . ':00';
	}

	//}

	$sub_time   = [];
	$sub_time   = explode(" ", $time);
	$final_time = $sub_time[0] . 'T' . $sub_time[1] . ':00' . $timezone_string;

	return $final_time;
}

/**
 * @param $currency
 * @param int $precision
 *
 * @return false|string
 */
function ultimate_store_kit_currency_format($currency, $precision = 1) {

	if ($currency > 0) {

		if ($currency < 900) {
			// 0 - 900
			$currency_format = number_format($currency, $precision);
			$suffix          = '';
		} else

                if ($currency < 900000) {
			// 0.9k-850k
			$currency_format = number_format($currency / 1000, $precision);
			$suffix          = 'K';
		} else

                if ($currency < 900000000) {
			// 0.9m-850m
			$currency_format = number_format($currency / 1000000, $precision);
			$suffix          = 'M';
		} else

                if ($currency < 900000000000) {
			// 0.9b-850b
			$currency_format = number_format($currency / 1000000000, $precision);
			$suffix          = 'B';
		} else {
			// 0.9t+
			$currency_format = number_format($currency / 1000000000000, $precision);
			$suffix          = 'T';
		}

		// Remove unecessary zeroes after decimal. "1.0" -> "1"; "1.00" -> "1"

		// Intentionally does not affect partials, eg "1.50" -> "1.50"
		if ($precision > 0) {
			$dotzero         = '.' . str_repeat('0', $precision);
			$currency_format = str_replace($dotzero, '', $currency_format);
		}

		return $currency_format . $suffix;
	}

	return false;
}

/**
 * @return array
 */
function ultimate_store_kit_get_menu() {

	$menus = wp_get_nav_menus();
	$items = [0 => esc_html__('Select Menu', 'ultimate-store-kit')];
	foreach ($menus as $menu) {
		$items[$menu->slug] = $menu->name;
	}

	return $items;
}

/**
 * default get_option() default value check
 *
 * @param string $option settings field name
 * @param string $section the section name this field belongs to
 * @param string $default default text if it's not found
 *
 * @return mixed
 */
function ultimate_store_kit_option($option, $section, $default = '') {

	$options = get_option($section);

	if (isset($options[$option])) {
		return $options[$option];
	}

	return $default;
}

/**
 * @return array of elementor template
 */
function ultimate_store_kit_et_options() {

	$templates = Ultimate_Store_Kit_Loader::elementor()->templates_manager->get_source('local')->get_items();
	$types     = [];

	if (empty($templates)) {
		$template_options = ['0' => __('Template Not Found!', 'ultimate-store-kit')];
	} else {
		$template_options = ['0' => __('Select Template', 'ultimate-store-kit')];

		foreach ($templates as $template) {
			$template_options[$template['template_id']] = $template['title'] . ' (' . $template['type'] . ')';
			$types[$template['template_id']]            = $template['type'];
		}
	}

	return $template_options;
}

/**
 * @return array of wp default sidebars
 */
function ultimate_store_kit_sidebar_options() {

	global $wp_registered_sidebars;
	$sidebar_options = [];

	if (!$wp_registered_sidebars) {
		$sidebar_options[0] = esc_html__('No sidebars were found', 'ultimate-store-kit');
	} else {
		$sidebar_options[0] = esc_html__('Select Sidebar', 'ultimate-store-kit');

		foreach ($wp_registered_sidebars as $sidebar_id => $sidebar) {
			$sidebar_options[$sidebar_id] = $sidebar['name'];
		}
	}

	return $sidebar_options;
}

/**
 * @param string category name
 *
 * @return array of category
 */
function ultimate_store_kit_get_category($taxonomy = 'product_cat') {

	$post_options = [];

	$post_categories = get_terms([
		'taxonomy'   => $taxonomy,
		'hide_empty' => false,
	]);

	if (is_wp_error($post_categories)) {
		return $post_options;
	}

	if (false !== $post_categories and is_array($post_categories)) {
		foreach ($post_categories as $category) {
			$post_options[$category->term_id] = $category->name;
		}
	}

	return $post_options;
}

/**
 * @param string parent category name
 * @return array of parent category
 */
function ultimate_store_kit_get_only_parent_cats($taxonomy = 'category') {

	$parent_categories = ['none' => __('None', 'bdthemes-element-pack')];
	$args              = ['parent' => 0];
	$parent_cats       = get_terms($taxonomy, $args);

	foreach ($parent_cats as $parent_cat) {
		$parent_categories[$parent_cat->term_id] = ucfirst($parent_cat->name);
	}

	return $parent_categories;
}

/**
 * @param array all ajax posted array there
 *
 * @return array return all setting as array
 */
function ultimate_store_kit_ajax_settings($settings) {

	$required_settings = [
		'show_date'      => true,
		'show_comment'   => true,
		'show_link'      => true,
		'show_meta'      => true,
		'show_title'     => true,
		'show_excerpt'   => true,
		'show_lightbox'  => true,
		'show_thumbnail' => true,
		'show_category'  => false,
		'show_tags'      => false,
	];

	foreach ($settings as $key => $value) {
		if (in_array($key, $required_settings)) {
			$required_settings[$key] = $value;
		}
	}

	return $required_settings;
}

/**
 * @return array of all transition names
 */
function ultimate_store_kit_transition_options() {

	$transition_options = [
		''                    => esc_html__('None', 'ultimate-store-kit'),
		'fade'                => esc_html__('Fade', 'ultimate-store-kit'),
		'scale-up'            => esc_html__('Scale Up', 'ultimate-store-kit'),
		'scale-down'          => esc_html__('Scale Down', 'ultimate-store-kit'),
		'slide-top'           => esc_html__('Slide Top', 'ultimate-store-kit'),
		'slide-bottom'        => esc_html__('Slide Bottom', 'ultimate-store-kit'),
		'slide-left'          => esc_html__('Slide Left', 'ultimate-store-kit'),
		'slide-right'         => esc_html__('Slide Right', 'ultimate-store-kit'),
		'slide-top-small'     => esc_html__('Slide Top Small', 'ultimate-store-kit'),
		'slide-bottom-small'  => esc_html__('Slide Bottom Small', 'ultimate-store-kit'),
		'slide-left-small'    => esc_html__('Slide Left Small', 'ultimate-store-kit'),
		'slide-right-small'   => esc_html__('Slide Right Small', 'ultimate-store-kit'),
		'slide-top-medium'    => esc_html__('Slide Top Medium', 'ultimate-store-kit'),
		'slide-bottom-medium' => esc_html__('Slide Bottom Medium', 'ultimate-store-kit'),
		'slide-left-medium'   => esc_html__('Slide Left Medium', 'ultimate-store-kit'),
		'slide-right-medium'  => esc_html__('Slide Right Medium', 'ultimate-store-kit'),
	];

	return $transition_options;
}

// BDT Blend Type
function ultimate_store_kit_blend_options() {
	$blend_options = [
		'multiply'    => esc_html__('Multiply', 'ultimate-store-kit'),
		'screen'      => esc_html__('Screen', 'ultimate-store-kit'),
		'overlay'     => esc_html__('Overlay', 'ultimate-store-kit'),
		'darken'      => esc_html__('Darken', 'ultimate-store-kit'),
		'lighten'     => esc_html__('Lighten', 'ultimate-store-kit'),
		'color-dodge' => esc_html__('Color-Dodge', 'ultimate-store-kit'),
		'color-burn'  => esc_html__('Color-Burn', 'ultimate-store-kit'),
		'hard-light'  => esc_html__('Hard-Light', 'ultimate-store-kit'),
		'soft-light'  => esc_html__('Soft-Light', 'ultimate-store-kit'),
		'difference'  => esc_html__('Difference', 'ultimate-store-kit'),
		'exclusion'   => esc_html__('Exclusion', 'ultimate-store-kit'),
		'hue'         => esc_html__('Hue', 'ultimate-store-kit'),
		'saturation'  => esc_html__('Saturation', 'ultimate-store-kit'),
		'color'       => esc_html__('Color', 'ultimate-store-kit'),
		'luminosity'  => esc_html__('Luminosity', 'ultimate-store-kit'),
	];

	return $blend_options;
}

// BDT Position
function ultimate_store_kit_position() {
	$position_options = [
		''              => esc_html__('Default', 'ultimate-store-kit'),
		'top-left'      => esc_html__('Top Left', 'ultimate-store-kit'),
		'top-center'    => esc_html__('Top Center', 'ultimate-store-kit'),
		'top-right'     => esc_html__('Top Right', 'ultimate-store-kit'),
		'center'        => esc_html__('Center', 'ultimate-store-kit'),
		'center-left'   => esc_html__('Center Left', 'ultimate-store-kit'),
		'center-right'  => esc_html__('Center Right', 'ultimate-store-kit'),
		'bottom-left'   => esc_html__('Bottom Left', 'ultimate-store-kit'),
		'bottom-center' => esc_html__('Bottom Center', 'ultimate-store-kit'),
		'bottom-right'  => esc_html__('Bottom Right', 'ultimate-store-kit'),
	];

	return $position_options;
}

// BDT Thumbnavs Position
function ultimate_store_kit_thumbnavs_position() {
	$position_options = [
		'top-left'      => esc_html__('Top Left', 'ultimate-store-kit'),
		'top-center'    => esc_html__('Top Center', 'ultimate-store-kit'),
		'top-right'     => esc_html__('Top Right', 'ultimate-store-kit'),
		'center-left'   => esc_html__('Center Left', 'ultimate-store-kit'),
		'center-right'  => esc_html__('Center Right', 'ultimate-store-kit'),
		'bottom-left'   => esc_html__('Bottom Left', 'ultimate-store-kit'),
		'bottom-center' => esc_html__('Bottom Center', 'ultimate-store-kit'),
		'bottom-right'  => esc_html__('Bottom Right', 'ultimate-store-kit'),
	];

	return $position_options;
}

function ultimate_store_kit_navigation_position() {
	$position_options = [
		'top-left'      => esc_html__('Top Left', 'ultimate-store-kit'),
		'top-center'    => esc_html__('Top Center', 'ultimate-store-kit'),
		'top-right'     => esc_html__('Top Right', 'ultimate-store-kit'),
		'center'        => esc_html__('Center', 'ultimate-store-kit'),
		'bottom-left'   => esc_html__('Bottom Left', 'ultimate-store-kit'),
		'bottom-center' => esc_html__('Bottom Center', 'ultimate-store-kit'),
		'bottom-right'  => esc_html__('Bottom Right', 'ultimate-store-kit'),
	];

	return $position_options;
}

function ultimate_store_kit_pagination_position() {
	$position_options = [
		'top-left'      => esc_html__('Top Left', 'ultimate-store-kit'),
		'top-center'    => esc_html__('Top Center', 'ultimate-store-kit'),
		'top-right'     => esc_html__('Top Right', 'ultimate-store-kit'),
		'bottom-left'   => esc_html__('Bottom Left', 'ultimate-store-kit'),
		'bottom-center' => esc_html__('Bottom Center', 'ultimate-store-kit'),
		'bottom-right'  => esc_html__('Bottom Right', 'ultimate-store-kit'),
	];

	return $position_options;
}

// BDT Drop Position
function ultimate_store_kit_drop_position() {
	$drop_position_options = [
		'bottom-left'    => esc_html__('Bottom Left', 'ultimate-store-kit'),
		'bottom-center'  => esc_html__('Bottom Center', 'ultimate-store-kit'),
		'bottom-right'   => esc_html__('Bottom Right', 'ultimate-store-kit'),
		'bottom-justify' => esc_html__('Bottom Justify', 'ultimate-store-kit'),
		'top-left'       => esc_html__('Top Left', 'ultimate-store-kit'),
		'top-center'     => esc_html__('Top Center', 'ultimate-store-kit'),
		'top-right'      => esc_html__('Top Right', 'ultimate-store-kit'),
		'top-justify'    => esc_html__('Top Justify', 'ultimate-store-kit'),
		'left-top'       => esc_html__('Left Top', 'ultimate-store-kit'),
		'left-center'    => esc_html__('Left Center', 'ultimate-store-kit'),
		'left-bottom'    => esc_html__('Left Bottom', 'ultimate-store-kit'),
		'right-top'      => esc_html__('Right Top', 'ultimate-store-kit'),
		'right-center'   => esc_html__('Right Center', 'ultimate-store-kit'),
		'right-bottom'   => esc_html__('Right Bottom', 'ultimate-store-kit'),
	];

	return $drop_position_options;
}

// Button Size
function ultimate_store_kit_button_sizes() {
	$button_sizes = [
		'xs' => esc_html__('Extra Small', 'ultimate-store-kit'),
		'sm' => esc_html__('Small', 'ultimate-store-kit'),
		'md' => esc_html__('Medium', 'ultimate-store-kit'),
		'lg' => esc_html__('Large', 'ultimate-store-kit'),
		'xl' => esc_html__('Extra Large', 'ultimate-store-kit'),
	];

	return $button_sizes;
}

// Button Size
function ultimate_store_kit_heading_size() {
	$heading_sizes = [
		'h1' => 'H1',
		'h2' => 'H2',
		'h3' => 'H3',
		'h4' => 'H4',
		'h5' => 'H5',
		'h6' => 'H6',
	];

	return $heading_sizes;
}

// Title Tags
function ultimate_store_kit_title_tags() {
	$title_tags = [
		'h1'   => 'H1',
		'h2'   => 'H2',
		'h3'   => 'H3',
		'h4'   => 'H4',
		'h5'   => 'H5',
		'h6'   => 'H6',
		'div'  => 'div',
		'span' => 'span',
		'p'    => 'p',
	];

	return $title_tags;
}

function ultimate_store_kit_mask_shapes() {
	$path       = BDTUSK_ASSETS_URL . 'images/mask/';
	$shape_name = 'shape';
	$extension  = '.svg';
	$list       = [0 => esc_html__('Select Mask', 'ultimate-store-kit')];

	for ($i = 1; $i <= 20; $i++) {
		$list[$path . $shape_name . '-' . $i . $extension] = ucwords($shape_name . ' ' . $i);
	}

	return $list;
}

/**
 * This is a svg file converter function which return a svg content
 *
 * @param svg file
 *
 * @return svg content
 */
function ultimate_store_kit_svg_icon($icon) {

	$icon_path = BDTUSK_ASSETS_PATH . "images/svg/{$icon}.svg";

	if (!file_exists($icon_path)) {
		return false;
	}

	ob_start();

	include $icon_path;

	$svg = ob_get_clean();

	return $svg;
}

/**
 * @param array CSV file data
 * @param string $delimiter
 * @param false $header
 *
 * @return string
 */
function ultimate_store_kit_parse_csv($csv, $delimiter = ';', $header = true) {

	if (!is_string($csv)) {
		return '';
	}

	if (!function_exists('str_getcsv')) {
		return $csv;
	}

	$html    = '';
	$rows    = explode(PHP_EOL, $csv);
	$headRow = 1;

	foreach ($rows as $row) {

		if ($headRow == 1 and $header) {
			$html .= '<thead><tr>';
		} else {
			$html .= '<tr>';
		}

		foreach (str_getcsv($row, $delimiter) as $cell) {

			$cell = trim($cell);

			$html .= $header
				? '<th>' . $cell . '</th>'
				: '<td>' . $cell . '</td>';
		}

		if ($headRow == 1 and $header) {
			$html .= '</tr></thead><tbody>';
		} else {
			$html .= '</tr>';
		}

		$headRow++;
		$header = false;
	}

	return '<table>' . $html . '</tbody></table>';
}

function ultimate_store_kit_dashboard_link($suffix = '#welcome') {
	return add_query_arg(['page' => 'ultimate_store_kit_options' . $suffix], admin_url('admin.php'));
}

/**
 * @param int $limit default limit is 25 word
 * @param bool $strip_shortcode if you want to strip shortcode from excert text
 * @param string $trail trail string default is ...
 *
 * @return string return custom limited excerpt text
 */
function ultimate_store_kit_custom_excerpt($limit = 25, $strip_shortcode = false, $trail = '') {

	$output = get_the_content();

	if ($limit) {
		$output = wp_trim_words($output, $limit, $trail);
	}

	if ($strip_shortcode) {
		$output = strip_shortcodes($output);
	}

	return wpautop($output);
}

function usk_get_order_options() {
	$options = [
		'title'              => __('Title', 'ultimate-store-kit'),
		'ID'                 => __('ID', 'ultimate-store-kit'),
		'date'               => __('Date', 'ultimate-store-kit'),
		'rand'               => __('Random', 'ultimate-store-kit'),
		'_price'             => __('Product Price', 'ultimate-store-kit'),
		'total_sales'        => __('Top Seller', 'ultimate-store-kit'),
		'comment_count'      => __('Most Reviewed', 'ultimate-store-kit'),
		'_wc_average_rating' => __('Top Rated', 'ultimate-store-kit'),
	];

	return apply_filters('usk_order_options', $options);
}

//wishlist

function ultimate_store_kit_get_wishlist($user_id = 0) {
	$_wishlist_key = '_ultimate_store_kit_wishlist';
	$_wishlist     = [];
	if (isset($_COOKIE[$_wishlist_key])) {
		$_wishlist = unserialize(stripslashes($_COOKIE[sanitize_text_field($_wishlist_key)]));
	}
	return apply_filters('ultimate_store_kit_wishlist', array_unique($_wishlist));
}

function usk_get_taxonomies() {
	$taxonomy_list = get_object_taxonomies('product');
	$taxonomies    = [
		'search'  => 'Search',
		'price'   => 'Price',
		'orderby' => 'Orderby',
		'order'   => 'Order',
	];

	foreach ($taxonomy_list as $_taxonomy) {
		$taxonomy = get_taxonomy($_taxonomy);

		if ($taxonomy->show_ui) {
			$taxonomies[$_taxonomy] = $taxonomy->label;
		}
	}

	return $taxonomies;
}

function ultimate_store_kit_hide_on_class($selectors) {
	$element_hide_on = '';

	if (!empty($selectors)) {

		foreach ($selectors as $element) {

			if ($element == 'desktop') {
				$element_hide_on .= ' usk-hide-desktop';
			}

			if ($element == 'tablet') {
				$element_hide_on .= ' usk-hide-tablet';
			}

			if ($element == 'mobile') {
				$element_hide_on .= ' usk-hide-mobile';
			}
		}
	}

	return $element_hide_on;
}

function ultimate_store_kit_wc_product_quick_view_content($product_id) {
	wp_verify_nonce('ajax-usk-quick-view-nonce', 'usk-quick-view-modal-sc');
	global $woocommerce;
	global $post;

	if (intval($product_id)) {
		$post      = get_post($product_id);
		$next_post = get_next_post();
		$prev_post = get_previous_post();

		wp('p=' . $product_id . '&post_type=product');
		ob_start();
	?>
		<div class="usk-modal-page">
			<?php

			while (have_posts()) : the_post(); ?>

				<script>
					var url = '<?php echo plugins_url('assets/js/prettyPhoto/jquery.prettyPhoto.init.js', WC_PLUGIN_FILE); ?>';
					jQuery.getScript(url);
					var wc_add_to_cart_variation_params = {
						"ajax_url": "\/wp-admin\/admin-ajax.php"
					};
					jQuery.getScript("<?php echo esc_url($woocommerce->plugin_url()); ?> '/assets/js/frontend/add-to-cart-variation.min.js'");
				</script>
				<div class="usk-modal-product">
					<div id="product-<?php the_ID(); ?>" <?php post_class('product'); ?>>
						<div class="usk-modal-image-wrapper">
							<?php do_action('ultimate_store_kit_quick_florence_grid_view_product_images'); ?>
							<div class="usk-onsale">
								<?php do_action('ultimate_store_kit_wc_product_quick_view_product_sale_flash'); ?>
							</div>
						</div>
						<div class="usk-modal-content-box">
							<a href="<?php echo get_permalink(); ?>" class="usk-product-title">
								<?php do_action('ultimate_store_kit_quick_view_product_title'); ?>
							</a>
							<div class="usk-rating">
								<?php do_action('ultimate_store_kit_quick_view_product_single_rating'); ?>
							</div>
							<div class="usk-product-price">
								<?php do_action('ultimate_store_kit_quick_view_product_single_price'); ?>
							</div>
							<div class="usk-product-meta">
								<div class="usk-sku-wrapper">
									<?php do_action('ultimate_store_kit_quick_view_product_single_meta'); ?>
								</div>
							</div>
							<div class="usk-product-desc">
								<?php do_action('ultimate_store_kit_quick_view_product_single_excerpt'); ?>
							</div>

							<div class="usk-quick-action-wrap">
								<?php do_action('ultimate_store_kit_quick_view_product_single_add_to_cart'); ?>
							</div>
						</div>
					</div>
				</div>
			<?php endwhile; ?>
		</div>

	<?php
		echo ob_get_clean();
		exit();
	}
}

function ultimate_store_kit_quick_view_product_images() {
	global $post, $product; ?>
	<div class="images">
		<?php

		if (has_post_thumbnail()) {
			$attachment_count = count($product->get_gallery_image_ids());
			$gallery          = $attachment_count > 0 ? '[product-gallery]' : '';
			$props            = wc_get_product_attachment_props(get_post_thumbnail_id(), $post);
			$image            = get_the_post_thumbnail($post->ID, apply_filters('single_product_large_thumbnail_size', 'shop_single'), [
				'title' => $props['title'],
				'alt'   => $props['alt'],
			]);
			echo apply_filters('woocommerce_single_product_image_html', sprintf('<a href="%s" itemprop="image" class="usk-product woocommerce-main-image zoom" title="%s" data-rel="prettyPhoto' . $gallery . '">%s</a>', $props['url'], $props['caption'], $image), $post->ID);
		} else {
			echo apply_filters('woocommerce_single_product_image_html', sprintf('<img src="%s" alt="%s" />', wc_placeholder_img_src(), __('Placeholder', 'woocommerce')), $post->ID);
		}

		$attachment_ids = $product->get_gallery_image_ids();

		if ($attachment_ids) :
			$loop    = 0;
			$columns = apply_filters('woocommerce_product_thumbnails_columns', 3);
		?>
			<div class="thumbnails columns-<?php echo esc_attr($columns); ?>">
				<?php

				foreach ($attachment_ids as $attachment_id) {
					$classes = ['thumbnail'];

					if ($loop === 0 || $loop % $columns === 0) {
						$classes[] = 'first';
					}

					if (($loop + 1) % $columns === 0) {
						$classes[] = 'last';
					}

					$image_link = wp_get_attachment_url($attachment_id);

					if (!$image_link) {
						continue;
					}

					$image_title   = esc_attr(get_the_title($attachment_id));
					$image_caption = esc_attr(get_post_field('post_excerpt', $attachment_id));
					$image         = wp_get_attachment_image($attachment_id, apply_filters('single_product_small_thumbnail_size', 'shop_thumbnail'), 0, $attr = [
						'title' => $image_title,
						'alt'   => $image_title,
					]);
					$image_class = esc_attr(implode(' ', $classes));
					echo apply_filters('woocommerce_single_product_image_thumbnail_html', sprintf('<a href="%s" class="%s" title="%s" >%s</a>', $image_link, $image_class, $image_caption, $image), $attachment_id, $post->ID, $image_class);
					$loop++;
				}

				?>
			</div>
		<?php endif; ?>
	</div>
<?php
}


/**
 * License Validation
 */
if (!function_exists('usk_license_validation')) {
	function usk_license_validation() {

		if (function_exists('_is_usk_pro_activated') && false === _is_usk_pro_activated()) {
			return false;
		}

		$license_key   = trim(get_option('ultimate_post_kit_license_key'));

		if (isset($license_key) && !empty($license_key)) {
			return true;
		} else {
			return false;
		}
		return false;
	}
}



function usk_get_compare_products($user_id = 0) {
	$_compare_products_key = '_ultimate_store_kit_compare_products';
	$_compare_products     = [];
	if ($user_id != 0) {
		$_compare_products = get_user_meta($user_id, $_compare_products_key, true) ?: [];
	} elseif (isset($_COOKIE[$_compare_products_key])) {
		$_compare_products = unserialize(stripslashes($_COOKIE[sanitize_text_field($_compare_products_key)]));
	}

	return apply_filters('ultimate_store_kit_compare_products', array_unique($_compare_products));
}

function usk_get_compare_products_count() {
	$count    = 0;
	$user_id  = get_current_user_id();
	$products = usk_get_compare_products($user_id);
	if (is_array($products)) {
		$count = count($products);
	}
	return $count;
}

//if (!function_exists('ultimate_store_kit_get_compare_product_slug')) {
//    function ultimate_store_kit_compare_product_slug() {
//        return 'compare-products';
//    }
//}

if (!function_exists('ultimate_store_kit_compare_product_page')) {
    function ultimate_store_kit_compare_product_page() {
        if($postId = intval(get_option( 'bdt_usk_compare_products_page_id' ))){
            $post = get_post($postId);
            if($post->post_status == 'publish'){
                return $post->ID;
            }
        }
    }
}

if (!function_exists('ultimate_store_kit_is_compare_product_page')) {
	function ultimate_store_kit_is_compare_product_page() {
		if ($page = ultimate_store_kit_compare_product_page() ) {
			return is_page( $page->ID );
		}
	}
}

```
