File: /home/prospack/public_html/wp-content/plugins/xpro-elementor-addons/modules/swatches/swatches.php
<?php
namespace XproElementorAddons\Modules\Swatches;
defined( 'ABSPATH' ) || exit;
class Swatches {
	private static $instance = null;
	public static function instance() {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
			self::$instance->init();
		}
		return self::$instance;
	}
	const PA_COLOR = 'xpro_color';
	const PA_IMAGE = 'xpro_image';
	const PA_LABEL = 'xpro_label';
	private $attribute_types = array();
	public static function asset_source( $type = 'css', $directory = null ) {
		return XPRO_ELEMENTOR_ADDONS_DIR_URL . 'modules/swatches/assets/' . $type . '/' . $directory;
	}
	public static function get_tax_attribute( $taxonomy ) {
		global $wpdb;
		$attr = substr( $taxonomy, 3 );
		$attr = $wpdb->get_row( $wpdb->prepare( 'SELECT * FROM ' . $wpdb->prefix . 'woocommerce_attribute_taxonomies WHERE attribute_name = %s', $attr ) );
		return $attr;
	}
	public static function get_dummy() {
		return WC()->plugin_url() . '/assets/images/placeholder.png';
	}
	public function init() {
		require_once XPRO_ELEMENTOR_ADDONS_DIR_PATH . 'modules/swatches/loop-product-support/xpro-swatches.php';
		require_once XPRO_ELEMENTOR_ADDONS_DIR_PATH . 'modules/swatches/admin-product.php';
		require_once XPRO_ELEMENTOR_ADDONS_DIR_PATH . 'modules/swatches/attribute-hooks.php';
		require_once XPRO_ELEMENTOR_ADDONS_DIR_PATH . 'modules/swatches/frontend.php';
		$this->set_attribute_types( self::PA_COLOR, esc_html__( 'Xpro Color', 'xpro-elementor-addons' ) );
		$this->set_attribute_types( self::PA_IMAGE, esc_html__( 'Xpro Image', 'xpro-elementor-addons' ) );
		$this->set_attribute_types( self::PA_LABEL, esc_html__( 'Xpro Label', 'xpro-elementor-addons' ) );
		add_filter( 'product_attributes_type_selector', array( $this, 'push_attribute_types' ) );
		if ( is_admin() ) {
			add_action( 'admin_init', array( $this, 'init_hooks' ) );
			add_action( 'admin_print_scripts', array( $this, 'enqueue' ) );
			add_action( 'admin_init', array( $this, 'includes_product' ) );
		}
		if ( ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
			add_action( 'init', array( $this, 'init_frontend_hook' ) );
		}
		/**
		 * add swatches to product loop
		 */
		Xpro_Swatches::instance();
	}
	public function push_attribute_types( $types ) {
		$types = array_merge( $types, $this->attribute_types );
		return $types;
	}
	private function set_attribute_types( $key, $title ) {
		$this->attribute_types[ $key ] = $title;
		return $this;
	}
	public function includes_product() {
		Admin_Product::instance();
	}
	public function init_hooks() {
		Attribute_Hooks::instance();
	}
	public function init_frontend_hook() {
		Frontend::instance();
	}
	public function enqueue() {
		$screen = get_current_screen();
		if ( empty( $screen ) ) {
			return;
		}
		if ( strpos( $screen->id, 'edit-pa_' ) === false && strpos( $screen->id, 'product' ) === false ) {
			return;
		}
		wp_enqueue_media();
		wp_enqueue_style( 'xpro-css-admin', self::asset_source( 'css', 'admin.css' ), array( 'wp-color-picker' ), XPRO_ELEMENTOR_ADDONS_VERSION );
		wp_enqueue_script( 'xpro-js-admin', self::asset_source( 'js', 'admin.js' ), array( 'jquery', 'wp-color-picker', 'wp-util' ), XPRO_ELEMENTOR_ADDONS_VERSION, true );
		wp_localize_script(
			'xpro-js-admin',
			'swatch_conf',
			array(
				'i18n'  => array(
					'title'  => esc_html__( 'Choose an image', 'xpro-elementor-addons' ),
					'button' => esc_html__( 'Use image', 'xpro-elementor-addons' ),
				),
				'dummy' => self::get_dummy(),
			)
		);
	}
	public function get_available_types() {
		return $this->attribute_types;
	}
}
Swatches::instance();