HEX
Server: LiteSpeed
System: Linux starfruit.7ho.st 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64
User: edtir (1699)
PHP: 7.4.33
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: /home/edtir/public_html/nabilico.ir/wp-content/plugins/codevz-plus/elementor/widgets/360_degree.php
<?php if ( ! defined( 'ABSPATH' ) ) {exit;} // Exit if accessed directly.

use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Image_Size;

class Xtra_Elementor_Widget_360_degree extends Widget_Base { 

	protected $id = 'cz_360_degree';

	public function get_name() {
		return $this->id;
	}

	public function get_title() {
		return esc_html__( '360 Degree', 'codevz' );
	}

	public function get_icon() {
		return 'xtra-360-degree';
	}

	public function get_categories() {
		return [ 'xtra' ];
	}

	public function get_keywords() {

		return [

			esc_html__( 'XTRA', 'codevz' ),
			esc_html__( 'Images', 'codevz' ),
			esc_html__( '360 Degree', 'codevz' ),

		];

	}

	public function get_style_depends() {
		return [ $this->id, 'cz_parallax' ];
	}

	public function get_script_depends() {
		return [ $this->id, 'cz_parallax' ];
	}

	public function register_controls() {

		$free = Codevz_Plus::is_free();

		$this->start_controls_section(
			'360_degree',
			[
				'label' 	=> esc_html__( 'Settings', 'codevz' ),
			]
		);

		$this->add_control(
			'image',
			[
				'label' 	=> esc_html__( 'Placeholder (loading image)', 'codevz' ),
				'type' 		=> Controls_Manager::MEDIA,
				'default' 	=> [
					'url' 		=> 'https://xtratheme.com/img/360.jpg',
				],
			]
		);

		$this->add_control(
			'stripe_image',
			[
				'label' 	=> esc_html__( 'Stripe image', 'codevz' ),
				'type' 		=> Controls_Manager::MEDIA,
				'default' 	=> [
					'url' 		=> 'https://xtratheme.com/img/360s.jpg',
				],
			]
		);

		$this->add_control(
			'count',
			[
				'label' 	=> esc_html__( 'Frames count', 'codevz' ),
				'type' 		=> Controls_Manager::NUMBER,
				'min' 		=> 1,
				'step' 		=> 1,
				'max' 		=> 40,
				'default'   => 8,
			]
		);

		$this->add_control(
			'action',
			[
				'label' 	=> esc_html__( 'Rotate by', 'codevz' ),
				'type' 		=> $free ? 'codevz_pro' : Controls_Manager::SELECT,
				'default' 	=> 'drag',
				'options' 	=> [
					'drag' 		=> esc_html__( 'Mouse Dragging', 'codevz' ),
					'hover' 	=> esc_html__( 'Mouse Hover', 'codevz' ),
				],
			]
		);

		$this->add_control(
			'handle',
			[
				'label' 	=> esc_html__( 'Show handle', 'codevz' ),
				'type' 		=> $free ? 'codevz_pro' : Controls_Manager::SWITCHER
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'section_style',
			[
				'label' 	=> esc_html__( 'Style', 'codevz' ),
				'tab' 		=> Controls_Manager::TAB_STYLE,
			]
		);

		$this->add_responsive_control(
			'sk_con',
			[
				'label' 	=> esc_html__( 'Container', 'codevz' ),
				'type' 		=> $free ? 'stylekit_pro' : 'stylekit',
				'settings' 	=> [ 'background', 'padding', 'border' ],
				'selectors' => Xtra_Elementor::sk_selectors( '.cz_product-viewer-wrapper .product-viewer' ),
			]
		);

		$this->add_responsive_control(
			'sk_handle',
			[
				'label' 	=> esc_html__( 'Handle', 'codevz' ),
				'type' 		=> $free ? 'stylekit_pro' : 'stylekit',
				'settings' 	=> [ 'color', 'font-size', 'background' ],
				'selectors' => Xtra_Elementor::sk_selectors( '.cz_product-viewer-wrapper .handle' ),
			]
		);
		
		$this->add_responsive_control(
			'sk_bar',
			[
				'label' 	=> esc_html__( 'Bar', 'codevz' ),
				'type' 		=> $free ? 'stylekit_pro' : 'stylekit',
				'settings' 	=> [ 'background', 'border' ],
				'selectors' => Xtra_Elementor::sk_selectors( '.cz_product-viewer-wrapper .cz_product-viewer-handle' ),
			]
		);

		$this->end_controls_section();

	}

	public function render() {

		// Settings.
		$settings = $this->get_settings_for_display();

		$imgsrc = '';

		// Images
		if ( ! empty( $settings[ 'stripe_image' ][ 'url' ] ) ) {
			$imgsrc = $settings[ 'stripe_image' ][ 'url' ];
		}

		$plc_imgsrc = Group_Control_Image_Size::get_attachment_image_html( $settings );

		// Count
		$count = $settings['count'] ? $settings['count'] : 16;

		// Classes
		$classes = [];
		$classes[] = 'cz_product-viewer-wrapper';

		?>
		<div data-frame="<?php echo esc_attr( $count ); ?>" data-friction="0.33" data-action="<?php echo esc_attr( $settings['action'] ); ?>"<?php echo Codevz_Plus::classes( [], $classes ); ?>>
			<div>
				<figure class="product-viewer">
					<?php echo wp_kses_post( $plc_imgsrc ); ?>
					<div class="product-sprite" data-image="<?php echo esc_url( $imgsrc ); ?>" style="width: <?php echo esc_attr( $count ) * 100; ?>%;background-image:url(<?php echo esc_url( $imgsrc ); ?>)"></div>
				</figure>
				<?php if ( $settings['handle'] == true ) { ?>	
						<div class="cz_product-viewer-handle"><span class="fill"></span><span class="handle"><i class="fa fa-arrows-h"></i></span></div>
				<?php } ?>
			</div>
		</div>
		<?php
	}

	public function content_template___() {
		?>
		<#
		if ( settings.stripe_image.url ) {
			var stripe_image = {
				id: settings.stripe_image.id,
				url: settings.stripe_image.url,
				size: settings.image_size,
				dimension: settings.image_custom_dimension,
				model: view.getEditModel()
			},
			stripe_image_url = elementor.imagesManager.getImageUrl( stripe_image );

			if ( ! stripe_image_url ) {
				return;
			}
		}

		if ( settings.image.url ) {
			var image = {
				id: settings.image.id,
				url: settings.image.url,
				size: settings.image_size,
				dimension: settings.image_custom_dimension,
				model: view.getEditModel()
			},
			image_url = elementor.imagesManager.getImageUrl( image );

			if ( ! image_url ) {
				return;
			}
		}

		var imgsrc = stripe_image_url,
			plc_imgsrc = image_url,
			count = settings.count ? settings.count : 16,
			classes = 'cz_product-viewer-wrapper';

		#>

		<div data-frame={{{count}}} data-friction="0.33" data-action={{{settings.action}}} class="{{{classes}}}">
			<div>
				<figure class="product-viewer">
					<img src={{{plc_imgsrc}}} alt="Loading">
					<div class="product-sprite" data-image={{{imgsrc}}} style="width:{{{count}}}%;background-image:url({{{imgsrc}}})"></div>
				</figure>
				<# if ( settings.handle == true ) { #>	
						<div class="cz_product-viewer-handle"><span class="fill"></span><span class="handle"><i class="fa fa-arrows-h"></i></span></div>
				<# } #>
			</div>
		</div>

		<?php
	}
}