<?php
/**
 * Helpers.
 *
 * @package Woodmart
 */

use Elementor\Group_Control_Image_Size;
use XTS\Config;
use XTS\Modules\Layouts\Main as Builder;

if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
	exit( 'No direct script access allowed' );
}

if ( ! function_exists( 'woodmart_otf_get_image_html' ) ) {
	/**
	 * Get image html with custom size.
	 *
	 * @param integer      $image_id Image ID.
	 * @param string|array $size Image size.
	 * @param array        $custom_size Image custom size.
	 * @param array        $attr Image attribute.
	 * @return string
	 */
	function woodmart_otf_get_image_html( $image_id, $size = 'thumbnail', $custom_size = array(), $attr = array() ) {
		if ( apply_filters( 'woodmart_old_image_size_function', false ) ) {
			$image_html = '';

			if ( woodmart_is_elementor_installed() ) {
				$image_html = Group_Control_Image_Size::get_attachment_image_html(
					array(
						'image'                  => array(
							'id' => $image_id,
						),
						'image_size'             => $size,
						'image_custom_dimension' => $custom_size,
					)
				);
			} elseif ( function_exists( 'wpb_getImageBySize' ) ) {
				$img = wpb_getImageBySize(
					array(
						'attach_id'  => $image_id,
						'thumb_size' => $size,
					)
				);

				$image_html = isset( $img['thumbnail'] ) ? $img['thumbnail'] : '';
			} else {
				$image_html = wp_get_attachment_image( $image_id, $size, false, $attr );
			}

			return apply_filters( 'woodmart_get_image_html', $image_html, $image_id, $size, $attr );
		}

		if ( 'custom' === $size ) {
			if ( $custom_size ) {
				if ( is_array( $custom_size ) ) {
					$size = array( null, null );

					if ( ! empty( $custom_size['width'] ) ) {
						$size[0] = $custom_size['width'];
					}

					if ( ! empty( $custom_size['height'] ) ) {
						$size[1] = $custom_size['height'];
					}

					if ( ! $size[0] && ! $size[1] ) {
						$size = 'full';
					}
				} elseif ( is_string( $custom_size ) && strpos( $custom_size, 'x' ) ) {
					$size = explode( 'x', $custom_size );
				}
			} else {
				$size = 'full';
			}
		} elseif ( is_string( $size ) && strpos( $size, 'x' ) && 'woodmart_shop_catalog_x2' !== $size ) {
			$size = explode( 'x', $size );
		}

		if ( is_array( $size ) ) {
			add_filter( 'image_downsize', 'gambit_otf_regen_thumbs_media_downsize', 10, 3 );
		}

		$image_html = wp_get_attachment_image( $image_id, $size, false, $attr );

		if ( is_array( $size ) ) {
			remove_filter( 'image_downsize', 'gambit_otf_regen_thumbs_media_downsize', 10, 3 );
		}

		return apply_filters( 'woodmart_get_image_html', $image_html, $image_id, $size, $attr );
	}
}

if ( ! function_exists( 'woodmart_otf_get_image_url' ) ) {
	/**
	 * Get image url with custom size.
	 *
	 * @param integer      $image_id Image ID.
	 * @param string|array $size Image size.
	 * @param array        $custom_size Image custom size.
	 * @return string
	 */
	function woodmart_otf_get_image_url( $image_id, $size = 'thumbnail', $custom_size = array() ) {
		if ( apply_filters( 'woodmart_old_image_size_function', false ) ) {
			$image_url = '';

			if ( woodmart_is_elementor_installed() ) {
				$image_url = Group_Control_Image_Size::get_attachment_image_src(
					$image_id,
					'image',
					array(
						'image_size'             => $size,
						'image_custom_dimension' => $custom_size,
					)
				);
			} elseif ( function_exists( 'wpb_resize' ) && ( in_array( $size, array( 'thumbnail', 'thumb', 'medium', 'large', 'full' ), true ) || ( is_string( $size ) && preg_match_all( '/\d+/', $size ) ) ) ) {
				$thumb_size = woodmart_get_image_size( $size );
				$img        = wpb_resize( $image_id, null, $thumb_size[0], $thumb_size[1], true );

				$image_url = isset( $img['url'] ) ? $img['url'] : '';
			} else {
				$image_url = wp_get_attachment_image_url( $image_id, $size );
			}

			return apply_filters( 'woodmart_get_image_src', $image_url, $image_id, $size );
		}

		if ( 'custom' === $size ) {
			if ( $custom_size ) {
				if ( is_array( $custom_size ) ) {
					$size = array( null, null );

					if ( ! empty( $custom_size['width'] ) ) {
						$size[0] = $custom_size['width'];
					}

					if ( ! empty( $custom_size['height'] ) ) {
						$size[1] = $custom_size['height'];
					}

					if ( ! $size[0] && ! $size[1] ) {
						$size = 'full';
					}
				} elseif ( is_string( $custom_size ) && strpos( $custom_size, 'x' ) ) {
					$size = explode( 'x', $custom_size );
				}
			} else {
				$size = 'full';
			}
		} elseif ( is_string( $size ) && strpos( $size, 'x' ) && 'woodmart_shop_catalog_x2' !== $size ) {
			$size = explode( 'x', $size );
		}

		if ( is_array( $size ) ) {
			add_filter( 'image_downsize', 'gambit_otf_regen_thumbs_media_downsize', 10, 3 );
		}

		$image_src = wp_get_attachment_image_url( $image_id, $size );

		if ( is_array( $size ) ) {
			remove_filter( 'image_downsize', 'gambit_otf_regen_thumbs_media_downsize', 10, 3 );
		}

		return apply_filters( 'woodmart_get_image_src', $image_src, $image_id, $size );
	}
}

if ( ! function_exists( 'woodmart_is_core_installed' ) ) {
	function woodmart_is_core_installed() {
		return defined( 'WOODMART_CORE_PLUGIN_VERSION' );
	}
}

if ( ! function_exists( 'wd_array_unique_recursive' ) ) {
	function wd_array_unique_recursive( $array ) {
		$scalars = array();
		foreach ( $array as $key => $value ) {
			if ( is_scalar( $value ) ) {
				if ( isset( $scalars[ $value ] ) ) {
					unset( $array[ $key ] );
				} else {
					$scalars[ $value ] = true;
				}
			} elseif ( is_array( $value ) ) {
				$array[ $key ] = wd_array_unique_recursive( $value );
			}
		}

		return $array;
	}
}

if ( ! function_exists( 'wd_add_cssclass' ) ) {
	/**
	 * Adds a CSS class to a string.
	 *
	 * @since 2.7.0
	 *
	 * @param  string  $class_to_add  The CSS class to add.
	 * @param  string  $classes  The string to add the CSS class to.
	 *
	 * @return string The string with the CSS class added.
	 */
	function wd_add_cssclass( $class_to_add, $classes ) {
		if ( empty( $classes ) ) {
			return $class_to_add;
		}

		return $classes . ' ' . $class_to_add;
	}
}

if ( ! function_exists( 'str_contains' ) ) {
	/**
	 * str_contains php8 fix.
	 */
	function str_contains( $haystack, $needle ) {
		return $needle !== '' && mb_strpos( $haystack, $needle ) !== false;
	}
}

if ( ! function_exists( 'woodmart_page_css_files_disable' ) ) {
	/**
	 * Page css files disable.
	 *
	 * @param string $description Term description.
	 * @return string
	 * @since 1.0.0
	 */
	function woodmart_page_css_files_disable( $description ) {
		$GLOBALS['wd_page_css_ignore'] = true;

		return $description;
	}
}

if ( ! function_exists( 'woodmart_page_css_files_enable' ) ) {
	/**
	 * Page css files enable.
	 *
	 * @param string $description Term description.
	 * @return string
	 * @since 1.0.0
	 */
	function woodmart_page_css_files_enable( $description ) {
		unset( $GLOBALS['wd_page_css_ignore'] );

		return $description;
	}
}

if ( ! function_exists( 'woodmart_cookie_secure_param' ) ) {
	/**
	 * Cookie secure param.
	 *
	 * @since 1.0.0
	 */
	function woodmart_cookie_secure_param() {
		return apply_filters( 'woodmart_cookie_secure_param', is_ssl() );
	}
}

if ( ! class_exists( 'WD_WPBakeryShortCodeFix' ) ) {
	/**
	 * Class fix for compatibility with WPB addons plugins.
	 */
	class WD_WPBakeryShortCodeFix {
		/**
		 * Settings.
		 *
		 * @return null
		 */
		public function settings() {
			return null;
		}
	}
}

if ( ! function_exists( 'woodmart_fix_transitions_flicking' ) ) {
	/**
	 * Fix for transitions flicking.
	 *
	 * @since 1.0.0
	 */
	function woodmart_fix_transitions_flicking() {
		echo '<script type="text/javascript" id="wd-flicker-fix">// Flicker fix.</script>';
	}

	add_action( 'wp_body_open', 'woodmart_fix_transitions_flicking', 1 );
}

if ( ! function_exists( 'woodmart_get_theme_settings_selectors_array' ) ) {
	/**
	 * Get selectors array.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_selectors_array() {
		return woodmart_get_config( 'typography-selectors' );
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_css_files_name_array' ) ) {
	/**
	 * Get css files array.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_css_files_name_array() {
		return woodmart_get_theme_settings_css_files_array( 'name' );
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_css_files_array' ) ) {
	/**
	 * Get css files array.
	 *
	 * @param string $name_format Result name format.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_css_files_array( $name_format = 'title' ) {
		$config_styles  = woodmart_get_config( 'css-files' );
		$styles_options = array();

		foreach ( $config_styles as $key => $styles ) {
			foreach ( $styles as $style ) {
				if ( isset( $styles_options[ $style['name'] ] ) ) {
					continue;
				}

				$styles_options[ $key ] = array(
					'name'  => $style['title'],
					'value' => $key,
				);

				if ( 'name' === $name_format ) {
					$styles_options[ $key ]['name'] = 'wd-' . $style['name'] . '-css';
				}
			}
		}

		asort( $styles_options );

		return $styles_options;
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_js_scripts_files_array' ) ) {
	/**
	 * Get js files array.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_js_scripts_files_array() {
		$config_scripts  = woodmart_get_config( 'js-scripts' );
		$scripts_options = array();

		foreach ( $config_scripts as $key => $scripts ) {
			foreach ( $scripts as $script ) {
				if ( isset( $scripts_options[ $script['name'] ] ) ) {
					continue;
				}

				$scripts_options[ $script['name'] ] = array(
					'name'  => $script['title'],
					'value' => $script['name'],
				);
			}
		}

		asort( $scripts_options );

		return $scripts_options;
	}
}

if ( ! function_exists( 'woodmart_get_current_page_builder' ) ) {
	/**
	 * Get current page builder.
	 * If both builders are activated then 'wpb' will be returned.
	 * If no builder is active, an empty ribbon will be returned.
	 *
	 * @since 6.1.0
	 */
	function woodmart_get_current_page_builder() {
		if ( defined( 'WPB_VC_VERSION' ) ) {
			return 'wpb';
		}

		if ( did_action( 'elementor/loaded' ) ) {
			return 'elementor';
		}

		return '';
	}
}

if ( ! function_exists( 'woodmart_is_blog_design_new' ) ) {
	/**
	 * Is blog design new.
	 *
	 * @since 6.1.0
	 *
	 * @param string $design Design.
	 */
	function woodmart_is_blog_design_new( $design ) {
		$old = array(
			'default',
			'default-alt',
			'small-images',
			'chess',
			'masonry',
			'mask',
		);

		return ! in_array( $design, $old, true );
	}
}

if ( ! function_exists( 'woodmart_get_element_template' ) ) {
	/**
	 * Loads a template part into a template.
	 *
	 * @since 6.1.0
	 *
	 * @param string $element_name  Template name.
	 * @param array  $args          Arguments.
	 * @param string $template_name Module name.
	 */
	function woodmart_get_element_template( $element_name, $args, $template_name ) {
		if ( ! empty( $args ) && is_array( $args ) ) {
			extract( $args ); // phpcs:ignore
		}

		include WOODMART_THEMEROOT . '/inc/template-tags/elements/' . $element_name . '/' . $template_name;
	}
}

if ( ! function_exists( 'woodmart_get_old_classes' ) ) {
	/**
	 * Get old classes.
	 *
	 * @since 6.0.0
	 *
	 * @param string $classes Classes.
	 *
	 * @return string
	 */
	function woodmart_get_old_classes( $classes ) {
		if ( ! apply_filters( 'woodmart_show_deprecated_css_classes', false ) ) {
			$classes = '';
		}

		return esc_html( $classes );
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_selectors_array' ) ) {
	/**
	 * Get selectors array.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_selectors_array() {
		return woodmart_get_config( 'typography-selectors' );
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_buttons_selectors_array' ) ) {
	/**
	 * Get buttons selectors array.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_buttons_selectors_array() {
		return woodmart_get_config( 'buttons-selectors' );
	}
}

if ( ! function_exists( 'woodmart_get_theme_settings_headers_array' ) ) {
	/**
	 * Function to get array of HTML Blocks in theme settings array style.
	 *
	 * @return array
	 */
	function woodmart_get_theme_settings_headers_array() {
		$list = get_option( 'whb_saved_headers' );

		if ( ! $list ) {
			$list = whb_get_builder()->list->get_all();
		}

		$headers = array();

		$headers['none'] = array(
			'name'  => esc_html__( 'None', 'woodmart' ),
			'value' => 'none',
		);

		if ( ! empty( $list ) && is_array( $list ) ) {
			foreach ( $list as $key => $header ) {
				$headers[ $key ] = array(
					'name'  => $header['name'],
					'value' => $key,
				);
			}
		}

		return $headers;
	}
}

if ( ! function_exists( 'woodmart_get_current_url' ) ) {
	/**
	 * Get current url.
	 *
	 * @since 1.0.0
	 *
	 * @return string
	 */
	function woodmart_get_current_url() {
		global $wp;

		return home_url( $wp->request );
	}
}

if ( ! function_exists( 'woodmart_get_document_title' ) ) {
	/**
	 * Returns document title for the current page.
	 *
	 * @since 1.0.0
	 *
	 * @return string
	 */
	function woodmart_get_document_title() {
		$title = wp_get_document_title();

		$post_meta = get_post_meta( woodmart_get_the_ID(), '_yoast_wpseo_title', true );
		if ( is_object( get_queried_object() ) && property_exists( get_queried_object(), 'term_id' ) && function_exists( 'YoastSEO' ) ) {
			$taxonomy_helper = YoastSEO()->helpers->taxonomy;
			$meta            = $taxonomy_helper->get_term_meta( get_queried_object() );

			if ( isset( $meta['wpseo_title'] ) && $meta['wpseo_title'] ) {
				$title = wpseo_replace_vars( $meta['wpseo_title'], get_queried_object() );
			}
		} elseif ( $post_meta && function_exists( 'wpseo_replace_vars' ) ) {
			$title = wpseo_replace_vars( $post_meta, get_post( woodmart_get_the_ID() ) );
		}

		return $title;
	}
}

if ( ! function_exists( 'woodmart_get_new_size_classes' ) ) {
	/**
	 * Get new size classes.
	 *
	 * @param mixed $element Element.
	 * @param mixed $old_key Old key.
	 * @param mixed $selector Selector.
	 *
	 * @return string
	 */
	function woodmart_get_new_size_classes( $element, $old_key, $selector ) {
		$array = array(
			'banner'       => array(
				'small'       => array(
					'subtitle' => 'xs',
					'title'    => 's',
				),
				'default'     => array(
					'subtitle' => 'xs',
					'title'    => 'l',
					'content'  => 'xs',
				),
				'large'       => array(
					'subtitle' => 's',
					'title'    => 'xl',
					'content'  => 'm',
				),
				'extra-large' => array(
					'subtitle' => 'm',
					'title'    => 'xxl',
				),
				'medium'      => array(
					'content' => 's',
				),
			),
			'infobox'      => array(
				'small'       => array(
					'subtitle' => 'xs',
					'title'    => 's',
				),
				'default'     => array(
					'subtitle' => 'xs',
					'title'    => 'm',
				),
				'large'       => array(
					'subtitle' => 's',
					'title'    => 'xl',
				),
				'extra-large' => array(
					'subtitle' => 'm',
					'title'    => 'xxl',
				),
			),
			'title'        => array(
				'small'       => array(
					'subtitle'    => 'xs',
					'title'       => 'm',
					'after_title' => 'xs',
				),
				'default'     => array(
					'subtitle'    => 'xs',
					'title'       => 'l',
					'after_title' => 'xs',
				),
				'medium'      => array(
					'subtitle'    => 'xs',
					'title'       => 'xl',
					'after_title' => 's',
				),
				'large'       => array(
					'subtitle'    => 'xs',
					'title'       => 'xxl',
					'after_title' => 's',
				),
				'extra-large' => array(
					'subtitle'    => 'm',
					'title'       => 'xxxl',
					'after_title' => 's',
				),
			),
			'text'         => array(
				'small'       => array(
					'title' => 'm',
				),
				'default'     => array(
					'title' => 'l',
				),
				'medium'      => array(
					'title' => 'xl',
				),
				'large'       => array(
					'title' => 'xxl',
				),
				'extra-large' => array(
					'title' => 'xxxl',
				),
			),
			'list'         => array(
				'default'     => array(
					'text' => 'xs',
				),
				'medium'      => array(
					'text' => 's',
				),
				'large'       => array(
					'text' => 'm',
				),
				'extra-large' => array(
					'text' => 'l',
				),
			),
			'testimonials' => array(
				'small'  => array(
					'text' => 'xs',
				),
				'medium' => array(
					'text' => 's',
				),
				'large'  => array(
					'text' => 'm',
				),
			),
		);

		return isset( $array[ $element ][ $old_key ][ $selector ] ) ? 'wd-fontsize-' . $array[ $element ][ $old_key ][ $selector ] : '';
	}
}

if ( ! function_exists( 'array_key_first' ) ) {
	function array_key_first( array $arr ) {
		foreach ( $arr as $key => $unused ) {
			return $key;
		}
		return null;
	}
}

if ( ! function_exists( 'woodmart_is_elementor_full_width' ) ) {
	/**
	 * Check if Elementor full width.
	 *
	 * @param bool $negative_gap_ignore Is ignore negative gap option.
	 *
	 * @return boolean
	 */
	function woodmart_is_elementor_full_width( $negative_gap_ignore = false ) {
		$page_template = get_post_meta( woodmart_get_the_ID(), '_wp_page_template', true );

		if ( woodmart_is_elementor_pro_installed() ) {
			$manager = \ElementorPro\Plugin::instance()->modules_manager->get_modules( 'theme-builder' )->get_conditions_manager();

			if ( $manager->get_documents_for_location( 'single' ) || $manager->get_documents_for_location( 'archive' ) ) {
				$page_template = 'elementor_header_footer';
			}
		}

		if ( $negative_gap_ignore ) {
			return 'elementor_header_footer' === $page_template;
		}

		return 'elementor_header_footer' === $page_template && 'enabled' !== woodmart_get_opt( 'negative_gap', 'enabled' );
	}
}

if ( ! function_exists( 'woodmart_is_elementor_pro_installed' ) ) {
	/**
	 * Check if Elementor PRO is activated
	 *
	 * @since 1.0.0
	 * @return boolean
	 */
	function woodmart_is_elementor_pro_installed() {
		return defined( 'ELEMENTOR_PRO_VERSION' ) && woodmart_is_elementor_installed();
	}
}

if ( ! function_exists( 'woodmart_vc_build_link' ) ) {
	function woodmart_vc_build_link( $value ) {
		return woodmart_vc_parse_multi_attribute(
			$value,
			array(
				'url'    => '',
				'title'  => '',
				'target' => '',
				'rel'    => '',
			)
		);
	}
}

if ( ! function_exists( 'woodmart_vc_parse_multi_attribute' ) ) {
	function woodmart_vc_parse_multi_attribute( $value, $default = array() ) {
		$result = $default;

		if ( is_array( $value ) ) {
			$params_pairs = $value;
		} else {
			$params_pairs = explode( '|', $value );
		}

		if ( ! empty( $params_pairs ) ) {
			foreach ( $params_pairs as $pair ) {
				$param = preg_split( '/\:/', $pair );
				if ( ! empty( $param[0] ) && isset( $param[1] ) ) {
					$result[ $param[0] ] = rawurldecode( $param[1] );
				}
			}
		}

		return $result;
	}
}
if ( ! function_exists( 'woodmart_get_size_guides_array' ) ) {
	function woodmart_get_size_guides_array( $style = 'default' ) {
		if ( 'default' === $style ) {
			$output = array(
				esc_html__( 'Select', 'woodmart' ) => '',
				esc_html__( 'Inherit current product', 'woodmart' ) => 'inherit',
			);
		} elseif ( 'elementor' === $style ) {
			$output = array(
				'0'       => esc_html__( 'Select', 'woodmart' ),
				'inherit' => esc_html__( 'Inherit current product', 'woodmart' ),
			);
		}

		$posts = get_posts(
			array(
				'posts_per_page' => 200,
				'post_type'      => 'woodmart_size_guide',
			)
		);

		foreach ( $posts as $post ) {
			if ( 'default' === $style ) {
				$output[ $post->post_title ] = $post->ID;
			} elseif ( 'elementor' === $style ) {
				$output[ $post->ID ] = $post->post_title;
			}
		}

		return $output;
	}
}

if ( ! function_exists( 'woodmart_is_elementor_installed' ) ) {
	/**
	 * Check if Elementor is activated
	 *
	 * @since 1.0.0
	 * @return boolean
	 */
	function woodmart_is_elementor_installed() {
		return did_action( 'elementor/loaded' ) && 'elementor' === woodmart_get_current_page_builder();
	}
}
// **********************************************************************//
// Remove https
// **********************************************************************//

if ( ! function_exists( 'woodmart_remove_https' ) ) {
	function woodmart_remove_https( $link ) {
		return preg_replace( '#^https?:#', '', $link );
	}
}

// **********************************************************************//
// ! If page needs header
// **********************************************************************//

if ( ! function_exists( 'woodmart_needs_header' ) ) {
	function woodmart_needs_header() {
		return ( ! isset( $GLOBALS['wd_maintenance'] ) && ! is_singular( 'woodmart_slide' ) && ! is_singular( 'cms_block' ) );
	}
}

// **********************************************************************//
// ! If page needs footer
// **********************************************************************//

if ( ! function_exists( 'woodmart_needs_footer' ) ) {
	function woodmart_needs_footer() {
		return ( ! isset( $GLOBALS['wd_maintenance'] ) && ! is_singular( 'woodmart_slide' ) && ! is_singular( 'cms_block' ) );
	}
}


// **********************************************************************//
// ! Conditional tags
// **********************************************************************//

if ( ! function_exists( 'woodmart_is_shop_archive' ) ) {
	function woodmart_is_shop_archive() {
		return ( woodmart_woocommerce_installed() && ( is_shop() || is_product_category() || is_product_tag() || is_singular( 'product' ) || woodmart_is_product_attribute_archive() ) );
	}
}

if ( ! function_exists( 'woodmart_is_blog_archive' ) ) {
	function woodmart_is_blog_archive() {
		return ( is_home() || is_search() || is_tag() || is_category() || is_date() || is_author() );
	}
}

if ( ! function_exists( 'woodmart_is_portfolio_archive' ) ) {
	function woodmart_is_portfolio_archive() {
		return ( is_post_type_archive( 'portfolio' ) || is_tax( 'project-cat' ) );
	}
}

// **********************************************************************//
// ! Is maintenance page
// **********************************************************************//

if ( ! function_exists( 'woodmart_maintenance_page' ) ) {
	function woodmart_maintenance_page() {
		if ( ! woodmart_get_opt( 'maintenance_mode' ) || is_user_logged_in() || ( woodmart_get_opt( 'maintenance_mode' ) && isset( $_GET[ woodmart_get_opt( 'maintenance_access_key' ) ] ) ) ) {
			return false;
		}

		$pages_ids = woodmart_pages_ids_from_template( 'maintenance' );

		if ( ! empty( $pages_ids ) && is_page( $pages_ids ) ) {
			return true;
		}

		return false;
	}
}

if ( ! function_exists( 'woodmart_is_maintenance_active' ) ) {
	/**
	 * This function will return true if the site visitor should be redirected to the maintenance page.
	 *
	 * @return bool
	 */
	function woodmart_is_maintenance_active() {
		$maintenance_mode       = woodmart_get_opt( 'maintenance_mode' );
		$maintenance_access_key = woodmart_get_opt( 'maintenance_access_key' );
		$is_access_key          = ! empty( $maintenance_access_key ) && isset( $_GET[ $maintenance_access_key ] ); //phpcs:ignore;

		if ( ! $maintenance_mode || is_user_logged_in() || $is_access_key ) {
			return false;
		}

		return true;
	}
}

// **********************************************************************//
// ! Get config file
// **********************************************************************//

if ( ! function_exists( 'woodmart_get_config' ) ) {
	function woodmart_get_config( $name ) {
		return Config::get_instance()->get_config( $name );
	}
}


// **********************************************************************//
// ! Text to one-line string
// **********************************************************************//

if ( ! function_exists( 'woodmart_text2line' ) ) {
	function woodmart_text2line( $str ) {
		return trim( preg_replace( "/('|\"|\r?\n)/", '', $str ) );
	}
}


// **********************************************************************//
// ! Get page ID by it's template name
// **********************************************************************//
if ( ! function_exists( 'woodmart_tpl2id' ) ) {
	function woodmart_tpl2id( $tpl = '' ) {
		$pages = get_pages(
			array(
				'meta_key'   => '_wp_page_template',
				'meta_value' => $tpl,
			)
		);
		foreach ( $pages as $page ) {
			return $page->ID;
		}
	}
}

if ( ! function_exists( 'woodmart_get_portfolio_page_id' ) ) {
	/**
	 * Get portfolio page id.
	 */
	function woodmart_get_portfolio_page_id() {
		return woodmart_get_opt( 'portfolio_page' ) ? woodmart_get_opt( 'portfolio_page' ) : woodmart_tpl2id( 'portfolio.php' );
	}
}


// **********************************************************************//
// ! Function print array within a pre tags
// **********************************************************************//
if ( ! function_exists( 'ar' ) ) {
	function ar( $array ) {
		echo '<pre>';
			print_r( $array );
		echo '</pre>';
	}
}


// **********************************************************************//
// ! Get protocol (http or https)
// **********************************************************************//
if ( ! function_exists( 'woodmart_http' ) ) {
	function woodmart_http() {
		if ( ! is_ssl() ) {
			return 'http';
		} else {
			return 'https';
		}
	}
}

// **********************************************************************//
// Woodmart get theme info
// **********************************************************************//
if ( ! function_exists( 'woodmart_get_theme_info' ) ) {
	function woodmart_get_theme_info( $parameter ) {
		$theme_info = wp_get_theme();
		if ( is_child_theme() && is_object( $theme_info->parent() ) ) {
			$theme_info = wp_get_theme( $theme_info->parent()->template );
		}
			return $theme_info->get( $parameter );
	}
}

// **********************************************************************//
// Is share button enable
// **********************************************************************//
if ( ! function_exists( 'woodmart_is_social_link_enable' ) ) {
	function woodmart_is_social_link_enable( $type ) {
		$result = false;
		if ( $type == 'share' && ( woodmart_get_opt( 'share_fb' ) || woodmart_get_opt( 'share_twitter' ) || woodmart_get_opt( 'share_linkedin' ) || woodmart_get_opt( 'share_pinterest' ) || woodmart_get_opt( 'share_ok' ) || woodmart_get_opt( 'share_whatsapp' ) || woodmart_get_opt( 'share_email' ) || woodmart_get_opt( 'share_vk' ) || woodmart_get_opt( 'share_tg' ) || woodmart_get_opt( 'share_viber' ) ) ) {
			$result = true;
		}

		if ( $type == 'follow' && ( woodmart_get_opt( 'fb_link' ) || woodmart_get_opt( 'twitter_link' ) || woodmart_get_opt( 'google_link' ) || woodmart_get_opt( 'isntagram_link' ) || woodmart_get_opt( 'pinterest_link' ) || woodmart_get_opt( 'youtube_link' ) || woodmart_get_opt( 'tumblr_link' ) || woodmart_get_opt( 'linkedin_link' ) || woodmart_get_opt( 'vimeo_link' ) || woodmart_get_opt( 'flickr_link' ) || woodmart_get_opt( 'github_link' ) || woodmart_get_opt( 'dribbble_link' ) || woodmart_get_opt( 'behance_link' ) || woodmart_get_opt( 'soundcloud_link' ) || woodmart_get_opt( 'spotify_link' ) || woodmart_get_opt( 'ok_link' ) || woodmart_get_opt( 'whatsapp_link' ) || woodmart_get_opt( 'vk_link' ) || woodmart_get_opt( 'snapchat_link' ) || woodmart_get_opt( 'tg_link' ) || woodmart_get_opt( 'tiktok_link' ) || woodmart_get_opt( 'discord_link' ) || woodmart_get_opt( 'social_email_links' ) ) ) {
			$result = true;
		}

		return $result;
	}
}

// **********************************************************************//
// Is compare iframe
// **********************************************************************//
if ( ! function_exists( 'woodmart_is_compare_iframe' ) ) {
	function woodmart_is_compare_iframe() {
		return wp_script_is( 'jquery-fixedheadertable', 'enqueued' );
	}
}

// **********************************************************************//
// Is SVG image
// **********************************************************************//
if ( ! function_exists( 'woodmart_is_svg' ) ) {
	function woodmart_is_svg( $src ) {
		return substr( $src, -3, 3 ) == 'svg';
	}
}

// **********************************************************************//
// Get explode size
// **********************************************************************//
if ( ! function_exists( 'woodmart_get_explode_size' ) ) {
	function woodmart_get_explode_size( $img_size, $default_size ) {
		$sizes = explode( 'x', $img_size );
		if ( count( $sizes ) < 2 ) {
			$sizes[0] = $sizes[1] = $default_size;
		}
		return $sizes;
	}
}

// **********************************************************************//
// Check is theme is activated with a purchase code
// **********************************************************************//

if ( ! function_exists( 'woodmart_is_license_activated' ) ) {
	function woodmart_is_license_activated() {
		return get_option( 'woodmart_is_activated', false );
	}
}

/**
 * ------------------------------------------------------------------------------------------------
 * Is shop on front page
 * ------------------------------------------------------------------------------------------------
 */
if ( ! function_exists( 'woodmart_is_shop_on_front' ) ) {
	function woodmart_is_shop_on_front() {
		return function_exists( 'wc_get_page_id' ) && 'page' === get_option( 'show_on_front' ) && wc_get_page_id( 'shop' ) == get_option( 'page_on_front' );
	}
}

if ( ! function_exists( 'woodmart_get_allowed_html' ) ) {
	/**
	 * Return allowed html tags
	 *
	 * @since 1.0.0
	 *
	 * @return array
	 */
	function woodmart_get_allowed_html() {
		return apply_filters(
			'woodmart_allowed_html',
			array(
				'h1'     => array(),
				'h2'     => array(),
				'h3'     => array(),
				'h4'     => array(),
				'h5'     => array(),
				'h6'     => array(),
				'pre'    => array(),
				'p'      => array(),
				'br'     => array(),
				'i'      => array(),
				'b'      => array(),
				'u'      => array(),
				'em'     => array(),
				'del'    => array(),
				'a'      => array(
					'href'   => true,
					'class'  => true,
					'target' => true,
					'title'  => true,
					'rel'    => true,
				),
				'strong' => array(),
				'span'   => array(
					'style' => true,
					'class' => true,
				),
				'ol'     => array(),
				'ul'     => array(),
				'li'     => array(),
			)
		);
	}
}


if ( ! function_exists( 'woodmart_clean' ) ) {
	/**
	 * Clean variables using sanitize_text_field. Arrays are cleaned recursively.
	 * Non-scalar values are ignored.
	 *
	 * @param string|array $var Data to sanitize.
	 * @return string|array
	 */
	function woodmart_clean( $var ) {
		if ( is_array( $var ) ) {
			return array_map( 'woodmart_clean', $var );
		} else {
			return is_scalar( $var ) ? sanitize_text_field( $var ) : $var;
		}
	}
}

if ( ! function_exists( 'woodmart_get_svg_html' ) ) {
	/**
	 * Function to show SVG images.
	 *
	 * @param string|int  $image_id image id.
	 * @param null|string $size Needed image size. Default = thumbnail.
	 * @param null|string $attributes List of attributes. If a whip then the data is taken from $attachment object.
	 * @return string html tag img string.
	 */
	function woodmart_get_svg_html( $image_id, $size = 'thumbnail', $attributes = array() ) {
		$html       = '';
		$thumb_size = array();

		$image_id = apply_filters( 'wpml_object_id', $image_id, 'attachment', true );

		$attributes = wp_parse_args(
			$attributes,
			array(
				'alt'   => get_post_meta( $image_id, '_wp_attachment_image_alt', true ),
				'src'   => wp_get_attachment_image_url( $image_id, 'full' ),
				'title' => get_the_title( $image_id ),
			)
		);

		if ( 'string' === gettype( $size ) ) {
			$thumb_size = woodmart_get_image_size( $size );
		} elseif ( is_array( $size ) ) {
			if ( array_key_exists( 'width', $size ) && array_key_exists( 'height', $size ) ) {
				$thumb_size[0] = $size['width'];
				$thumb_size[1] = $size['height'];
			} else {
				$thumb_size = $size;
			}
		}

		if ( isset( $attributes ) ) {
			$attributes['width']  = isset( $thumb_size[0] ) ? $thumb_size[0] : '';
			$attributes['height'] = isset( $thumb_size[1] ) ? $thumb_size[1] : '';

			$attributes = array_map( 'esc_attr', $attributes );

			foreach ( $attributes as $name => $value ) {
				if ( ! empty( $value ) ) {
					$html .= " $name=" . '"' . $value . '"';
				}
			}
		}
		return '<img ' . $html . '>';
	}
}

if ( ! function_exists( 'woodmart_get_mailchimp_forms' ) ) {
	/**
	 * This function return form list for mailchimp.
	 *
	 * @return array
	 */
	function woodmart_get_mailchimp_forms() {
		$forms = get_posts(
			array(
				'post_type'   => 'mc4wp-form',
				'numberposts' => -1,
			)
		);

		$mailchimp_forms = array();

		if ( $forms ) {
			foreach ( $forms as $form ) {
				$mailchimp_forms[ $form->post_title ] = $form->ID;
			}
		}

		return $mailchimp_forms;
	}
}

if ( ! function_exists( 'woodmart_get_wpb_font_family_options' ) ) {
	/**
	 * This function get theme font options and return array for WPBakery map.
	 *
	 * @return array
	 */
	function woodmart_get_wpb_font_family_options() {
		$secondary_font = woodmart_get_opt( 'secondary-font' );
		$primary_font   = woodmart_get_opt( 'primary-font' );
		$text_font      = woodmart_get_opt( 'text-font' );

		$secondary_font_title = isset( $secondary_font[0] ) ? esc_html__( 'Secondary font', 'woodmart' ) . ' (' . $secondary_font[0]['font-family'] . ')' : esc_html__( 'Secondary font', 'woodmart' );
		$text_font_title      = isset( $text_font[0] ) ? esc_html__( 'Text font', 'woodmart' ) . ' (' . $text_font[0]['font-family'] . ')' : esc_html__( 'Text', 'woodmart' );
		$primary_font_title   = isset( $primary_font[0] ) ? esc_html__( 'Title font', 'woodmart' ) . ' (' . $primary_font[0]['font-family'] . ')' : esc_html__( 'Title font', 'woodmart' );

		return array(
			$primary_font_title   => 'primary',
			$text_font_title      => 'text',
			$secondary_font_title => 'alt',
		);
	}
}

if ( ! function_exists( 'woodmart_get_builder_status_class' ) ) {
	/**
	 * This function return woodmart css class for check builder status (on/off).
	 *
	 * @return string
	 */
	function woodmart_get_builder_status_class() {
		if ( Builder::get_instance()->has_custom_layout( 'single_product' ) || Builder::get_instance()->has_custom_layout( 'shop_archive' ) || Builder::get_instance()->has_custom_layout( 'cart' ) || Builder::get_instance()->has_custom_layout( 'checkout_content' ) || Builder::get_instance()->has_custom_layout( 'checkout_form' ) ) {
			$class = ' wd-builder-on';
		} else {
			$class = ' wd-builder-off';
		}

		return $class;
	}
}

if ( ! function_exists( 'woodmart_get_responsive_dependency_width_map' ) ) {
	/**
	 * Get width map (with responsive dependency tabs).
	 *
	 * @param string $key name needed field.
	 *
	 * @return array
	 */
	function woodmart_get_responsive_dependency_width_map( $key ) {
		if ( ! function_exists( 'woodmart_compress' ) ) {
			return array();
		}

		$fields = array(
			// Desktop.
			'responsive_tabs'      => array(
				'heading'          => esc_html__( 'Width', 'woodmart' ),
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'woodmart_button_set',
				'param_name'       => 'responsive_tabs',
				'tabs'             => true,
				'value'            => array(
					esc_html__( 'Desktop', 'woodmart' ) => 'desktop',
					esc_html__( 'Tablet', 'woodmart' )  => 'tablet',
					esc_html__( 'Mobile', 'woodmart' )  => 'mobile',
				),
				'default'          => 'desktop',
				'edit_field_class' => 'wd-custom-width vc_col-sm-12 vc_column',
			),
			'width_desktop'        => array(
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_select',
				'param_name'       => 'width_desktop',
				'style'            => 'select',
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}} !important;',
						'max-width: {{VALUE}} !important;',
					),
				),
				'devices'          => array(
					'desktop' => array(
						'value' => '',
					),
				),
				'value'            => array(
					esc_html__( 'Default', 'woodmart' ) => '',
					esc_html__( 'Full Width (100%)', 'woodmart' ) => '100%',
					esc_html__( 'Inline (auto)', 'woodmart' ) => 'auto',
					esc_html__( 'Custom', 'woodmart' )  => '-',
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'desktop' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
			'custom_width_desktop' => array(
				'heading'          => esc_html__( 'Custom width', 'woodmart' ),
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_slider',
				'param_name'       => 'custom_width_desktop',
				'devices'          => array(
					'desktop' => array(
						'unit'  => 'px',
						'value' => 0,
					),
				),
				'range'            => array(
					'px' => array(
						'min'  => 0,
						'max'  => 1000,
						'step' => 1,
					),
					'%'  => array(
						'min'  => 0,
						'max'  => 100,
						'step' => 1,
					),
				),
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}}{{UNIT}} !important;',
						'max-width: {{VALUE}}{{UNIT}} !important;',
					),
				),
				'dependency'       => array(
					'element' => 'width_desktop',
					'value'   => woodmart_compress(
						wp_json_encode(
							array(
								'devices' => array(
									'desktop' => array(
										'value' => '-',
									),
								),
							)
						)
					),
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'desktop' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
			// Tablet.
			'width_tablet'         => array(
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_select',
				'param_name'       => 'width_tablet',
				'style'            => 'select',
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}} !important;',
						'max-width: {{VALUE}} !important;',
					),
				),
				'devices'          => array(
					'tablet' => array(
						'value' => '',
					),
				),
				'value'            => array(
					esc_html__( 'Inherit', 'woodmart' ) => '',
					esc_html__( 'Full Width (100%)', 'woodmart' ) => '100%',
					esc_html__( 'Inline (auto)', 'woodmart' ) => 'auto',
					esc_html__( 'Custom', 'woodmart' )  => '-',
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'tablet' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
			'custom_width_tablet'  => array(
				'heading'          => esc_html__( 'Custom width', 'woodmart' ),
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_slider',
				'param_name'       => 'custom_width_tablet',
				'devices'          => array(
					'tablet' => array(
						'unit'  => 'px',
						'value' => 0,
					),
				),
				'range'            => array(
					'px' => array(
						'min'  => 0,
						'max'  => 1000,
						'step' => 1,
					),
					'%'  => array(
						'min'  => 0,
						'max'  => 100,
						'step' => 1,
					),
				),
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}}{{UNIT}} !important;',
						'max-width: {{VALUE}}{{UNIT}} !important;',
					),
				),
				'dependency'       => array(
					'element' => 'width_tablet',
					'value'   => woodmart_compress(
						wp_json_encode(
							array(
								'devices' => array(
									'tablet' => array(
										'value' => '-',
									),
								),
							)
						)
					),
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'tablet' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
			// Mobile.
			'width_mobile'         => array(
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_select',
				'param_name'       => 'width_mobile',
				'style'            => 'select',
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}} !important;',
						'max-width: {{VALUE}} !important;',
					),
				),
				'devices'          => array(
					'mobile' => array(
						'value' => '',
					),
				),
				'value'            => array(
					esc_html__( 'Inherit', 'woodmart' ) => '',
					esc_html__( 'Full Width (100%)', 'woodmart' ) => '100%',
					esc_html__( 'Inline (auto)', 'woodmart' ) => 'auto',
					esc_html__( 'Custom', 'woodmart' )  => '-',
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'mobile' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
			'custom_width_mobile'  => array(
				'heading'          => esc_html__( 'Custom width', 'woodmart' ),
				'group'            => esc_html__( 'Advanced', 'woodmart' ),
				'type'             => 'wd_slider',
				'param_name'       => 'custom_width_mobile',
				'devices'          => array(
					'mobile' => array(
						'unit'  => 'px',
						'value' => 0,
					),
				),
				'range'            => array(
					'px' => array(
						'min'  => 0,
						'max'  => 1000,
						'step' => 1,
					),
					'%'  => array(
						'min'  => 0,
						'max'  => 100,
						'step' => 1,
					),
				),
				'selectors'        => array(
					'{{WRAPPER}}' => array(
						'width: {{VALUE}}{{UNIT}} !important;',
						'max-width: {{VALUE}}{{UNIT}} !important;',
					),
				),
				'dependency'       => array(
					'element' => 'width_mobile',
					'value'   => woodmart_compress(
						wp_json_encode(
							array(
								'devices' => array(
									'mobile' => array(
										'value' => '-',
									),
								),
							)
						)
					),
				),
				'wd_dependency'    => array(
					'element' => 'responsive_tabs',
					'value'   => array( 'mobile' ),
				),
				'edit_field_class' => 'vc_col-sm-12 vc_column',
			),
		);

		return $fields[ $key ];
	}
}

if ( ! function_exists( 'woodmart_is_compressed_data' ) ) {
	/**
	 * Check $variable to compressed.
	 *
	 * @param string $variable need check data.
	 * @return bool
	 */
	function woodmart_is_compressed_data( $variable ) {
		if ( ! function_exists( 'woodmart_compress' ) || ! function_exists( 'woodmart_decompress' ) ) {
			return '';
		}
		return woodmart_compress( woodmart_decompress( $variable ) ) === $variable;
	}
}

if ( ! function_exists( 'woodmart_get_current_user_roles' ) ) {
	/**
	 * Get the current user roles list.
	 *
	 * @retun array
	 */
	function woodmart_get_current_user_roles() {
		return is_user_logged_in() ? (array) wp_get_current_user()->roles : array();
	}
}

if ( ! function_exists( 'woodmart_get_center_coords' ) ) {
	/**
	 * This function accepts a list of coords and returns a prepared array with the coordinates of the center.
	 * If the token list is empty, the method will return an empty array.
	 *
	 * @param array $coords List of coords.
	 * @return array
	 */
	function woodmart_get_center_coords( $coords ) {
		if ( empty( $coords ) ) {
			return array();
		}

		$count_coords = count( $coords );
		$xcos         = 0.0;
		$ycos         = 0.0;
		$zsin         = 0.0;

		foreach ( $coords as $lnglat ) {
			$lat = $lnglat['lat'] * pi() / 180;
			$lon = $lnglat['lng'] * pi() / 180;

			$acos  = cos( $lat ) * cos( $lon );
			$bcos  = cos( $lat ) * sin( $lon );
			$csin  = sin( $lat );
			$xcos += $acos;
			$ycos += $bcos;
			$zsin += $csin;
		}

		$xcos /= $count_coords;
		$ycos /= $count_coords;
		$zsin /= $count_coords;
		$lon   = atan2( $ycos, $xcos );
		$sqrt  = sqrt( $xcos * $xcos + $ycos * $ycos );
		$lat   = atan2( $zsin, $sqrt );

		return array( $lat * 180 / pi(), $lon * 180 / pi() );
	}
}

if ( ! function_exists( 'woodmart_is_old_category_structure' ) ) {
	/**
	 * Check if the category design refers to the old structure.
	 *
	 * @param string $category_design The design of the category that needs to be checked.
	 *
	 * @return bool
	 */
	function woodmart_is_old_category_structure( $category_design ) {
		$old_categories_designs = array(
			'default',
			'alt',
			'center',
			'replace-title',
		);

		return in_array( $category_design, $old_categories_designs, true );
	}
}
