HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.111.1.lve.el8.x86_64 #1 SMP Fri Mar 13 13:42:17 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/www/WP-POS/wp-content/themes/angle/functions/wpzoom/components/customizer/setup.php
<?php
/**
 * @package WPZOOM
 */

/**
 * Class WPZOOM_Setup_Customizer
 *
 * Methods for managing and enqueueing script and style assets.
 *
 * @since 1.7.0.
 */
class WPZOOM_Setup_Customizer {
	/**
	 * Indicator of whether the hook routine has been run.
	 *
	 * @since 1.7.0.
	 *
	 * @var bool
	 */
	private static $hooked = false;

	/**
	 * Instance of this class.
	 *
	 * @since 1.8.5
	 * @var   object
	 */
	protected static $_instance = null;

	/**
	 * List of the tag names seen for before_widget strings.
	 *
	 * This is used in the {@see 'filter_wp_kses_allowed_html'} filter to ensure that the
	 * data-* attributes can be whitelisted.
	 *
	 * @since 1.8.5
	 * @var array
	 */
	protected $before_widget_tags_seen = array();

	/**
	 * Main WPZOOM_Setup_Customizer Instance
	 *
	 * Ensures only one instance of WPZOOM_Setup_Customizer is loaded or can be loaded.
	 *
	 * @since 1.8.5
	 * @static
	 *
	 * @return object Main WPZOOM_Setup_Customizer instance
	 */
	public static function instance() {
		// If the single instance hasn't been set, set it now.
		if ( is_null( self::$_instance ) ) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}

	/**
	 * Main Class Construct
	 */
	protected function __construct() {
		$this->init();
	}

	public static function set_restricted_customizer_data() {

		$data = array();
		
		$license = trim( get_option( get_template() . '_license_key' ) );
		$status  = get_option( get_template() . '_license_key_status', false );

		$data['is_limited'] = false;

		$info_head    = '';
		$info_html    = '';
		$info_message = '<p>' . wp_kses_post( __( 'Your theme is not licensed for use on this website or your license key expired. <br/>Please activate or renew your license key in order to use this theme.', 'wpzoom' ) ) . '</p>';
		$info_btn     = sprintf( '<a href="%s" class="button button-primary">%s</a>', esc_url( admin_url( 'admin.php?page=wpzoom_license#license' ) ), esc_html__( 'Enter your License Key', 'wpzoom' ) );

		if ( ! empty( $license ) ) {
			if ( 'invalid' === $status ) {
				$info_head = '<h3>' . esc_html__( 'Invalid License Key!', 'wpzoom' ) . '</h3>';
			} elseif ( 'expired' === $status ) {
				$info_head = '<h3>' . esc_html__( 'Expired License Key!', 'wpzoom' ) . '</h3>';
			} elseif ( 'valid' !== $status ) {
				$info_head = '<h3>' . esc_html__( 'Inactive License Key!', 'wpzoom' ) . '</h3>';
			}
		} else {
			$info_head = '<h3>' . esc_html__( 'Activate Your License Key!', 'wpzoom' ) . '</h3>';
		}

		if ( ! empty( $info_head ) ) {
			$info_html = $info_head . $info_message . $info_btn;
			$data['is_limited'] = true;
			$data['message'] = $info_html;
		}

		return $data;
	}

	/**
	 * Initialize class
	 *
	 * @since 1.8.5
	 */
	private function init() {
		// Register all the needed hooks
		$this->register_hooks();
	}
	/**
	 * Register our actions and filters
	 *
	 * @since 1.8.5
	 *
	 * @return void
	 */
	function register_hooks() {
		if ( $this->is_hooked() ) {
			return;
		}

		// Styles for the Customizer controls
		add_action( 'customize_controls_init', array( $this, 'register_styles' ), 10 );

		// Scripts for the Customizer controls
		add_action( 'customize_controls_init', array( $this, 'register_scripts' ), 10 );

		// Styles enqueued in the Customizer only in the theme preview
		add_action( 'customize_preview_init', array( $this, 'register_live_preview_styles' ), 10 );

		// Scripts enqueued in the Customizer only in the theme preview
		add_action( 'customize_preview_init', array( $this, 'register_live_preview_scripts' ), 10 );

		// Handle stuff related to selective refresh (partial refresh)
		add_action( 'customize_preview_init', array( $this, 'selective_refresh_init' ) );

		// Hooking has occurred.
		self::$hooked = true;
	}

	/**
	 * Check if the hook routine has been run.
	 *
	 * @since 1.7.0.
	 *
	 * @return bool
	 */
	public function is_hooked() {
		return self::$hooked;
	}

	/**
	 * Wrapper for getting the path to the customizer assets directory.
	 *
	 * @since 1.7.0.
	 *
	 * @return string
	 */
	public function get_assets_uri( $endpoint = '' ) {
		return WPZOOM::$wpzoomPath . '/components/customizer/assets/' . $endpoint;
	}

	/**
	 * Wrapper for getting the URL for the customizer assets CSS directory.
	 *
	 * @since 1.7.0.
	 *
	 * @return string
	 */
	public function get_css_uri( $endpoint = '' ) {
		 return $this->get_assets_uri( 'css/' . $endpoint );
	}

	/**
	 * Wrapper for getting the URL for the customizer assets JS directory.
	 *
	 * @since 1.7.0.
	 *
	 * @return string
	 */
	public function get_js_uri( $endpoint = '' ) {
		return $this->get_assets_uri( 'js/' . $endpoint );
	}

	/**
	 * Register style libraries.
	 *
	 * @since 1.7.0.
	 *
	 * @return void
	 */
	function register_styles() {
		// Chosen
		wp_register_style(
			'chosen',
			$this->get_css_uri( 'libs/chosen/chosen.min.css' ),
			array(),
			'1.5.1'
		);

		// jQuery UI
		wp_register_style(
			'zoom-jquery-ui-custom',
			$this->get_css_uri( 'libs/jquery-ui/jquery-ui-1.10.4.custom.css' ),
			array(),
			'1.10.4'
		);

		// Customizer controls
		wp_register_style(
			'zoom-customizer-controls',
			$this->get_css_uri( 'controls.css' ),
			array( 'zoom-jquery-ui-custom', 'chosen' ),
			WPZOOM::$wpzoomVersion
		);
	}

	/**
	 * Register JavaScript libraries.
	 *
	 * @since 1.7.0.
	 *
	 * @return void
	 */
	function register_scripts() {
		// Chosen
		wp_register_script(
			'chosen',
			$this->get_js_uri( 'libs/chosen/chosen.jquery.min.js' ),
			array( 'jquery' ),
			'1.5.1',
			true
		);

		// Customizer controls
		wp_register_script(
			'zoom-customizer-controls',
			$this->get_js_uri( 'controls.js' ),
			array( 'chosen', 'underscore', 'jquery-ui-button', 'jquery-ui-slider', 'customize-controls' ),
			WPZOOM::$wpzoomVersion,
			true
		);

		wp_register_script(
			'zoom-customizer-helper',
			$this->get_js_uri( 'customizer.js' ),
			array( 'jquery', 'underscore', 'customize-controls' ),
			WPZOOM::$wpzoomVersion,
			true
		);
	}

	/**
	 * Register Customizer styles loaded only in the preview frame
	 *
	 * @since 1.8.5
	 *
	 * @return void
	 */
	function register_live_preview_styles() {
		// Customizer preview
		wp_register_style(
			'zoom-customizer-preview',
			$this->get_css_uri( 'customizer-preview.css' ),
			array(),
			WPZOOM::$wpzoomVersion
		);
	}

	/**
	 * Register Customizer scripts loaded only in the preview frame
	 *
	 * @since 1.8.5
	 *
	 * @return void
	 */
	function register_live_preview_scripts() {
		wp_register_script(
			'zoom-customizer-vein-js',
			$this->get_js_uri( 'vein.min.js' ),
			array(),
			false,
			true
		);

		wp_register_script(
			'zoom-customizer-typekit-font-loader',
			'https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js'
		);

		wp_register_script(
			'zoom-customizer-preview',
			$this->get_js_uri( 'preview.js' ),
			array( 'jquery', 'customize-preview', 'underscore' ),
			WPZOOM::$wpzoomVersion,
			true
		);
	}

	/**
	 * Adds hooks for selective refresh.
	 *
	 * @since 1.8.5
	 */
	public function selective_refresh_init() {
		if ( ! current_theme_supports( 'customize-selective-refresh-widgets' ) ) {
			return;
		}
		add_filter( 'dynamic_sidebar_params', array( $this, 'filter_dynamic_sidebar_params' ) );
		add_filter( 'wp_kses_allowed_html', array( $this, 'filter_wp_kses_allowed_data_attributes' ) );
	}

	/**
	 * Inject selective refresh data attributes into widget container elements.
	 *
	 * @since 1.8.5
	 *
	 * @param array $params {
	 *     Dynamic sidebar params.
	 *
	 *     @type array $args        Sidebar args.
	 *     @type array $widget_args Widget args.
	 * }
	 * @see WP_Customize_Nav_Menus_Partial_Refresh::filter_wp_nav_menu_args()
	 *
	 * @return array Params.
	 */
	public function filter_dynamic_sidebar_params( $params ) {
		$sidebar_args = array_merge(
			array(
				'before_widget' => '',
				'after_widget'  => '',
			),
			$params[0]
		);

		// Skip widgets not in a registered sidebar or ones which lack a proper wrapper element to attach the data-* attributes to.
		$matches  = array();
		$is_valid = (
			isset( $sidebar_args['id'] )
			&&
			is_registered_sidebar( $sidebar_args['id'] )
			&&
			preg_match( '#^<(?P<tag_name>\w+)#', $sidebar_args['before_widget'], $matches )
		);

		if ( ! $is_valid ) {
			return $params;
		}

		$this->before_widget_tags_seen[ $matches['tag_name'] ] = true;

		$attributes                    = sprintf( ' data-customize-widget-name="%s"', esc_attr( $sidebar_args['widget_name'] ) );
		$sidebar_args['before_widget'] = preg_replace( '#^(<\w+)#', '$1 ' . $attributes, $sidebar_args['before_widget'] );
		$params[0]                     = $sidebar_args;

		return $params;
	}

	/**
	 * Ensures the HTML data-* attributes for selective refresh are allowed by kses.
	 *
	 * This is needed in case the `$before_widget` is run through wp_kses() when printed.
	 *
	 * @since 1.8.5
	 *
	 * @param array $allowed_html Allowed HTML.
	 * @return array (Maybe) modified allowed HTML.
	 */
	public function filter_wp_kses_allowed_data_attributes( $allowed_html ) {
		foreach ( array_keys( $this->before_widget_tags_seen ) as $tag_name ) {
			if ( ! isset( $allowed_html[ $tag_name ] ) ) {
				$allowed_html[ $tag_name ] = array();
			}
			$allowed_html[ $tag_name ] = array_merge(
				$allowed_html[ $tag_name ],
				array_fill_keys(
					array(
						'data-customize-partial-widget-name',
					),
					true
				)
			);
		}
		return $allowed_html;
	}
}

$wpzoom_setup_customizer = WPZOOM_Setup_Customizer::instance();