HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 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/theme/theme.php
<?php

class WPZOOM_Theme {
	private static $dynamic_google_webfonts = array();

	public static function init() {
		add_action( 'after_setup_theme', array( __CLASS__, 'add_feed_links' ) );

		if ( option::is_on( 'meta_generator' ) ) {
			add_action( 'wp_head', array( __CLASS__, 'meta_generator' ) );
		}

		add_action( 'wp_title', array( __CLASS__, 'wp_title' ), 10, 2 );

		add_action( 'wp_head', array( __CLASS__, 'favicon' ) );
		add_action( 'wp_head', array( __CLASS__, 'generate_options_css' ) );
		add_action( 'wp_head', array( __CLASS__, 'header_code' ) );

		add_action( 'wp_enqueue_scripts', array( __CLASS__, 'theme_styles' ), 20 );
		add_action( 'wp_enqueue_scripts', array( __CLASS__, 'theme_scripts' ) );

		add_action( 'wp_footer', array( __CLASS__, 'footer_code' ) );
	}

	/**
	 * Shows favicon if it's set in theme options and isn't set in WordPress as Site Icon
	 * https://core.trac.wordpress.org/ticket/16434
	 */
	public static function favicon() {
		if ( get_option( 'site_icon', false ) === false ) {
			$favicon = option::get( 'misc_favicon' );

			if ( $favicon ) {
				echo '<link rel="shortcut icon" href="' . $favicon . '" type="image/x-icon" />';
			}
		}
	}

	/**
	 * Includes header/footer scripts if they are set in theme options
	 */
	public static function header_code() {
		$header_code = trim( stripslashes( option::get( 'header_code' ) ) );

		if ( $header_code ) {
			echo stripslashes( option::get( 'header_code' ) );
		}
	}

	public static function footer_code() {
		$footer_code = trim( stripslashes( option::get( 'footer_code' ) ) );

		if ( $footer_code ) {
			echo stripslashes( option::get( 'footer_code' ) );
		}
	}

	public static function add_feed_links() {
		global $wpz_default_feed;
		$wpz_default_feed = get_feed_link();

		add_theme_support( 'automatic-feed-links' );
		add_filter( 'feed_link', array( __CLASS__, 'custom_feed_links' ), 1 );
	}

	public static function custom_feed_links( $feed ) {
		global $wpz_default_feed;
		$custom_feed = esc_attr( trim( option::get( 'misc_feedburner' ) ) );

		if ( $feed == $wpz_default_feed && $custom_feed ) {
			return $custom_feed;
		}

		return $feed;
	}

	/**
	 * Create a nicely formatted and more specific title element text for output
	 * in head of document, based on current view.
	 *
	 * Won't do anything if title-tag support is declared.
	 *
	 * @deprecated Use `add_theme_support( 'title-tag )` instead
	 */
	public static function wp_title( $title, $sep ) {
		if ( current_theme_supports( 'title-tag' ) ) {
			return $title;
		}

		if ( is_feed() ) {
			return $title;
		}

		// Add the site name
		$title = get_bloginfo( 'name', 'display' ) . $title;

		// Add the site description for the home/front page
		$site_description = get_bloginfo( 'description', 'display' );
		if ( $site_description && ( is_home() || is_front_page() ) ) {
			$title = "$title $sep $site_description";
		}

		return $title;
	}

	/**
	 * Adds WPZOOM to html meta generator
	 *
	 * @return void
	 */
	public static function meta_generator() {
		$mg  = "<!-- WPZOOM Theme / Framework -->\n";
		$mg .= '<meta name="generator" content="' . WPZOOM::$themeName . ' ' . WPZOOM::$themeVersion . '" />' . "\n";
		$mg .= '<meta name="generator" content="WPZOOM Framework ' . WPZOOM::$wpzoomVersion . '" />' . "\n";

		echo $mg;
	}

	/**
	 * Include css file for specified style
	 */
	public static function theme_styles() {
		/**
		 * If current theme supports styles use them
		 */
		if ( option::get( 'theme_style' ) ) {
			$style = str_replace( ' ', '-', strtolower( option::get( 'theme_style' ) ) );

			if ( file_exists( get_template_directory() . '/styles/' . $style . '.css' ) ) {
				wp_register_style( 'wpzoom-theme', get_template_directory_uri() . '/styles/' . $style . '.css' );
				wp_enqueue_style( 'wpzoom-theme' );
			}
		}

		/**
		 * Deprecated file, but we still register this stylesheet for
		 * backwards comptability.
		 */
		if ( file_exists( get_template_directory() . '/custom.css' ) ) {
			wp_register_style( 'wpzoom-custom', get_template_directory_uri() . '/custom.css', array(), WPZOOM::$themeVersion );
			wp_enqueue_style( 'wpzoom-custom' );
		}

		if ( file_exists( get_template_directory() . '/css/custom.css' ) ) {
			wp_register_style( 'theme-custom', get_template_directory_uri() . '/css/custom.css', array(), WPZOOM::$themeVersion );
			wp_enqueue_style( 'theme-custom' );
		}
	}

	public static function theme_scripts() {
		if ( is_singular() ) {
			wp_enqueue_script( 'comment-reply' );
		}

		/**
		 * Enqueue initialization script, HTML5 Shim included.
		 *
		 * Only if this file exists.
		 */
		if ( file_exists( get_template_directory() . '/js/init.js' ) ) {
			wp_enqueue_script( 'wpzoom-init', get_template_directory_uri() . '/js/init.js', array( 'jquery' ) );
		}

		/**
		 * Enqueue all theme scripts specified in config file to the footer
		 */
		if ( isset( WPZOOM::$config['scripts'] ) ) {
			foreach ( WPZOOM::$config['scripts'] as $script ) {
				wp_enqueue_script( 'wpzoom-' . $script, get_template_directory_uri() . '/js/' . $script . '.js', array(), false, true );
			}
		}
	}

	/**
	 * Generate custom css from options
	 */
	public static function generate_options_css() {
		$css    = '';
		$enable = false;
		foreach ( option::$evoOptions as $Eoption ) {
			foreach ( $Eoption as $option ) {
				if ( ( isset( $option['type'] ) && $option['type'] == 'color' ) || isset( $option['css'] ) ) {
					$value = option::get( $option['id'] );
					if ( ! trim( $value ) != '' ) {
						continue;
					}
					$enable = true;

					if ( in_array( $option['attr'], array( 'height', 'width' ) ) &&
						strpos( $value, 'px' ) === false ) {
						$value = $value . 'px';
					}

					$css .= $option['selector'] . '{' . $option['attr'] . ':' . $value . ";}\n";
				}

				if ( ( isset( $option['type'] ) && $option['type'] == 'typography' ) ) {
					$enable = true;
					$css   .= self::dynamic_typography_css( $option );
				}
			}
		}

		if ( $enable ) {
			echo '<style type="text/css">';
			echo self::dynamic_google_webfonts_css();
			echo $css;
			echo "</style>\n";
		}
	}

	/**
	 * Registers Google Web Fonts in use so later we know what fonts
	 * to include from Web Fonts directory
	 *
	 * @param  array $font Font data
	 * @return void
	 */
	public static function dynamic_google_webfonts_register( $font ) {
		self::$dynamic_google_webfonts[] = $font;
	}

	/**
	 * Generates CSS import for used Google Web Fonts
	 *
	 * @return string The CSS Import String
	 */
	public static function dynamic_google_webfonts_css() {
		$fonts = '';

		foreach ( self::$dynamic_google_webfonts as $font ) {
			$fonts .= $font['name'] . $font['variant'] . '|';
		}

		if ( ! $fonts ) {
			return '';
		}

		$fonts = str_replace( ' ', '+', $fonts );
		$css   = '@import url("http' . ( is_ssl() ? 's' : '' ) . '://fonts.googleapis.com/css?family=' . $fonts . "\");\n";
		$css   = str_replace( '|"', '"', $css );

		return $css;
	}

	/**
	 * Generates CSS for typography options from ZOOM Admin
	 *
	 * @param  array $option
	 * @return string The CSS
	 */
	public static function dynamic_typography_css( $option ) {
		$value = option::get( $option['id'] );

		if ( ! is_array( $value ) ) {
			return '';
		}

		$font = array();

		if ( isset( $value['font-color'] ) && trim( $value['font-color'] ) ) {
			$font[] = 'color: ' . $value['font-color'] . ';';
		}

		if ( isset( $value['font-family'] ) && trim( $value['font-family'] ) ) {
			$font_families        = ui::recognized_font_families( $option['id'] );
			$google_font_families = ui::recognized_google_webfonts_families( $option['id'] );

			if ( array_key_exists( $value['font-family'], $font_families ) ) {
				$font[] = 'font-family: ' . $font_families[ $value['font-family'] ] . ';';
			}

			foreach ( $google_font_families as $google_font_v ) {
				if ( isset( $google_font_v['separator'] ) ) {
					continue;
				}

				$key = str_replace( ' ', '-', strtolower( $google_font_v['name'] ) );

				if ( $value['font-family'] == $key ) {
					$font[] = "font-family: '" . $google_font_v['name'] . "';";
					self::dynamic_google_webfonts_register( $google_font_v );

					break;
				}
			}
		}

		if ( isset( $value['font-size'] ) && trim( $value['font-size'] ) ) {
			$font[] = 'font-size: ' . $value['font-size'] . ';';
		}

		if ( isset( $value['font-style'] ) && trim( $value['font-style'] ) ) {
			if ( $value['font-style'] == 'bold-italic' ) {
				$font[] = 'font-style: italic;';
				$font[] = 'font-weight: bold;';
			} elseif ( $value['font-style'] == 'bold' ) {
				$font[] = 'font-weight: bold;';
			} else {
				$font[] = 'font-style: ' . $value['font-style'] . ';';
			}
		}

		if ( empty( $font ) ) {
			return '';
		}

		return $option['selector'] . '{' . implode( '', $font ) . '}';
	}
}