HOME


Mini Shell 1.0
DIR: /home/depancom/www/depancomblogus/wp-content/plugins_vieux/wvt/includes/class/
Upload File :
Current File : /home/depancom/www/depancomblogus/wp-content/plugins_vieux/wvt/includes/class/class-frontend.php
<?php
/**
 * License
 *
 * @author Jegtheme
 * @since 1.0.0
 * @package wordpress-virtual-tour
 */

namespace WVT;

/**
 * Class License
 *
 * @package WVT
 */
class Frontend {
	/**
	 * Instance of Frontend.
	 *
	 * @var Frontend
	 */
	private static $instance;

	/**
	 * Sequence
	 *
	 * @var integer
	 */
	private static $sequence = 1;

	/**
	 * Singleton page for Init Class
	 *
	 * @return Frontend
	 */
	public static function get_instance() {
		if ( null === static::$instance ) {
			static::$instance = new static();
		}

		return static::$instance;
	}

	/**
	 * Init constructor.
	 */
	private function __construct() {
		$this->prepare_shortcode();
		$this->hook();
	}

	/**
	 * Frontend Hook
	 */
	public function hook() {
		add_action( 'wp_enqueue_scripts', array( $this, 'load_assets' ) );
		add_action( 'wp_head', array( $this, 'wvt_global' ) );
		add_action( 'wp_ajax_wvt_panorama', array( $this, 'get_panorama' ) );
		add_action( 'wp_ajax_nopriv_wvt_panorama', array( $this, 'get_panorama' ) );
	}

	/**
	 * Get Panorama
	 */
	public function get_panorama() {
		$post = get_post( $_POST['post_id'] );

		if ( $post && 'publish' === $post->post_status && 'single-panorama' === $post->post_type ) {
			wp_send_json_success(
				array(
					'post_id' => $post->ID,
					'option'  => Helper::get_panorama_option( $post->ID ),
				)
			);
		} else {
			wp_send_json_error();
		}
	}

	/**
	 * Global WVT
	 */
	public function wvt_global() {
		$option = Helper::get_global_option();

		$global = array(
			'ajax'        => admin_url( 'admin-ajax.php' ),
			'wvt_url'     => WVT_URL,
			'placeholder' => WVT_URL . '/assets/img/placeholder.jpg',
			'load_scene'  => isset( $option['load_scene'] ) ? $option['load_scene'] : 'ball-pulse',
			'context'     => isset( $option['context'] ) ? $option['context'] : esc_html__( 'Jegtheme', 'wvt' ),
			'context_url' => isset( $option['context_url'] ) ? $option['context_url'] : esc_url( 'http://jegtheme.com' ),
			'edit'        => $this->edit_panorama( $option ),
			'lang'        => array(
				'save'     => esc_html__( 'Save Option', 'wvt' ),
				'saving'   => esc_html__( 'Saving Option', 'wvt' ),
				'saved'    => esc_html__( 'Saved', 'wvt' ),
				'spotlist' => esc_html__( 'Hotspot & Tour List', 'wvt' ),
			),
		);
		?>
		<script type="text/javascript">
			window.wvt_global = <?php echo wp_json_encode( $global ); ?>;
			window.wvtf = [];
		</script>
		<?php
	}

	/**
	 * Edit Panorama Link
	 */
	public function edit_panorama( $options ) {
		if ( is_user_logged_in() && ! is_admin() && $options['edit'] ) {

			if ( ( class_exists( '\Elementor\Plugin' ) && \Elementor\Plugin::$instance->preview->is_preview_mode() )
				&& ( function_exists( 'vc_is_inline' ) && ! vc_is_inline() ) ) {
				return false;
			}

			return add_query_arg(
				array(
					'action' => Single_Panorama_Edit::$action,
					'nonce'  => wp_create_nonce( Single_Panorama_Edit::$action ),
				),
				admin_url( 'admin.php' )
			);
		}

		return false;
	}

	/**
	 * Load Asset
	 */
	public function load_assets() {
		wp_enqueue_style( 'font-awesome', WVT_URL . '/assets/fonts/font-awesome/font-awesome.css', null, WVT_VERSION );
		wp_enqueue_style( 'pannellum', WVT_URL . '/assets/lib/pannellum/css/pannellum.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster', WVT_URL . '/assets/lib/tooltipster/css/tooltipster.bundle.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster-borderless', WVT_URL . '/assets/lib/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster-light', WVT_URL . '/assets/lib/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster-noir', WVT_URL . '/assets/lib/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster-punk', WVT_URL . '/assets/lib/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'tooltipster-shadow', WVT_URL . '/assets/lib/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'perfect-scrollbar', WVT_URL . '/assets/lib/perfect-scrollbar/perfect-scrollbar.css', null, '1.4.0' );
		wp_enqueue_style( 'magnific-popup', WVT_URL . '/assets/lib/magnific-popup/magnific-popup.css', null, WVT_VERSION );
		wp_enqueue_style( 'loader', WVT_URL . '/assets/lib/vendor/loaders.min.css', null, WVT_VERSION );
		wp_enqueue_style( 'wvt-frontend', WVT_URL . '/assets/css/wvt-frontend.css', null, WVT_VERSION );

		wp_enqueue_script( 'jquery' );
		wp_enqueue_script( 'jquery-ui-draggable' );
		wp_enqueue_script( 'underscore' );
		wp_enqueue_script( 'wp-util' );
		wp_enqueue_script( 'tooltipster', WVT_URL . '/assets/lib/tooltipster/js/tooltipster.bundle.min.js', null, WVT_VERSION, true );
		wp_enqueue_script( 'magnific-popup', WVT_URL . '/assets/lib/magnific-popup/jquery.magnific-popup.min.js', null, '1.1.0', true );
		wp_enqueue_script( 'perfect-scrollbar', WVT_URL . '/assets/lib/perfect-scrollbar/perfect-scrollbar.min.js', null, '1.4.0', true );

		if ( SCRIPT_DEBUG ) {
			wp_enqueue_script( 'wvt-helper', WVT_URL . '/assets/js/wvt-helper.js', null, WVT_VERSION, true );
			wp_enqueue_script( 'wvt-frontend', WVT_URL . '/assets/js/wvt-frontend.js', null, WVT_VERSION, true );
		} else {
			wp_enqueue_script( 'wvt-frontend', WVT_URL . '/assets/js/wvt-frontend.min.js', null, WVT_VERSION, true );
		}

		wp_enqueue_script( 'raf', WVT_URL . '/assets/lib/pannellum/js/RequestAnimationFrame.js', null, WVT_VERSION, true );
		wp_enqueue_script( 'lib-pannellum', WVT_URL . '/assets/lib/pannellum/js/libpannellum.js', null, WVT_VERSION, true );
		wp_enqueue_script( 'pannellum', WVT_URL . '/assets/lib/pannellum/js/pannellum.js', null, WVT_VERSION, true );

		if ( function_exists( 'vc_is_page_editable' ) && vc_is_page_editable() ) {
			wp_enqueue_script( 'vc-page-iframe', WVT_URL . '/assets/js/integration/vc.page.iframe.js', null, WVT_VERSION, true );
		}
	}

	/**
	 * Add WVT shortcode
	 */
	public function prepare_shortcode() {
		add_shortcode( 'wvt', array( $this, 'generate_shortcode' ) );
	}

	/**
	 * Generate CSS
	 *
	 * @param string $item_id ID of item.
	 *
	 * @return string Generated CSS
	 */
	public function generate_css( $item_id, $data ) {
		$css    = '';
		$option = Helper::get_global_option();

		if ( ! empty( $option['load_image'] ) ) {
			$css .= "#{$item_id}.pnlm-container { background: url('" . $option['load_image'] . "'); }" . "\n";
		}

		$setting = $data['option'];

		foreach ( $setting['height'] as $key => $height ) {
			switch ( $key ) {
				case 'tablet':
					$deviceWidth = 768;
					break;
				case 'mobile':
					$deviceWidth = 600;
					break;
				default:
					$deviceWidth = 1200;
					break;
			}

			if ( 'desktop' === $key ) {
				$css .= "#{$item_id} { padding-bottom: {$height}%; }" . "\n";
			} else {
				$css .= "@media only screen and (max-width:{$deviceWidth}px) { 
					#{$item_id} { padding-bottom: {$height}%; } 
				}" . "\n";
			}
		}

		return $css;
	}

	/**
	 * Get Item ID
	 *
	 * @param array $id String ID.
	 *
	 * @return string ID of string
	 */
	public function get_id( $id ) {
		return 'wvt_' . $id . '_' . self::$sequence;
	}

	/**
	 * Generate shortcode for WVT
	 *
	 * @param array $attr Shortcode Attribute.
	 *
	 * @return String HTML string of shortcode.
	 *
	 * @throws \Exception Throw Exception.
	 */
	public function generate_shortcode( $attr ) {
		ob_start();
		try {
			if ( ! isset( $attr['pid'] ) ) {
				throw( new \Exception( esc_html__( 'No ID Available', 'wvt' ) ) );
			}

			$post = get_post( $attr['pid'] );

			if ( ! $post ) {
				throw( new \Exception( esc_html__( 'Panorama Not Available', 'wvt' ) ) );
			}

			if ( 'publish' !== $post->post_status ) {
				throw( new \Exception( esc_html__( 'This panorama is not published yet!', 'wvt' ) ) );
			}

			if ( 'single-panorama' !== $post->post_type ) {
				throw( new \Exception( esc_html__( 'Not an Panorama', 'wvt' ) ) );
			}

			$this->render_output( $post );
		} catch ( \Exception $e ) {
			// @todo Show Error
			jlog( $e->getMessage() );
		}

		return ob_get_clean();
	}

	/**
	 * Render Output
	 *
	 * @param $post
	 */
	public function render_output( $post ) {
		$id = $this->get_id( $post->ID );

		$options = array(
			'post_id' => $post->ID,
			'option'  => Helper::get_panorama_option( $post->ID ),
		);
		?>
		<div class="wvt-panorama-wrapper">
			<style id="<?php echo esc_html( $id ); ?>-panorama-css">
				<?php echo esc_html( $this->generate_css( $id, $options['option'] ) ); ?>
				<?php echo isset( $options['option']['option']['css'] ) ? esc_html( $options['option']['option']['css'] ) : ''; ?>
			</style>
			<div id="<?php echo esc_html( $id ); ?>" data-id="<?php echo esc_html( $post->ID ); ?>"
				 data-sequence="<?php echo esc_html( self::$sequence ); ?>" class="wvt-panorama">
				<div class="wvt-panorama-content"></div>
			</div>
			<script>
				window.wvtf['<?php echo esc_attr( $id ); ?>'] = <?php echo wp_json_encode( $options ); ?>;
			</script>
		</div>
		<?php

		// need to increase sequence
		self::$sequence ++;
	}
}