<?php
namespace CarouselSlider\Integration\Elementor;
use CarouselSlider\Frontend\Frontend;
use CarouselSlider\Helper;
use Elementor\Controls_Manager;
use Elementor\Widget_Base;
defined( 'ABSPATH' ) || exit;
/**
* ElementorWidget class
*/
class ElementorWidget extends Widget_Base {
/**
* Get element name.
*
* @inheritDoc
*/
public function get_name(): string {
return 'carousel-slider-elementor';
}
/**
* Get element title.
*
* @inheritDoc
*/
public function get_title(): string {
return esc_html__( 'Carousel Slider - Elementor', 'carousel-slider' );
}
/**
* Get widget icon.
*
* @inheritDoc
*/
public function get_icon(): string {
return 'eicon-carousel';
}
/**
* Get script dependencies.
*
* @inheritDoc
*/
public function get_script_depends(): array {
return [ 'carousel-slider-frontend' ];
}
/**
* Get style dependencies.
*
* @inheritDoc
*/
public function get_style_depends(): array {
return [ 'carousel-slider-frontend' ];
}
/**
* Get widget keywords.
*
* @inheritDoc
*/
public function get_keywords(): array {
return [ 'image', 'photo', 'carousel', 'slider' ];
}
/**
* Register controls.
*
* @inheritDoc
*/
protected function register_controls() {
$posts = Helper::get_sliders();
$options = [];
foreach ( $posts as $post ) {
$options[ $post->ID ] = $post->post_title;
}
$this->start_controls_section(
'content_section',
[
'label' => __( 'Slider Settings', 'carousel-slider' ),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'slider_id',
[
'label' => __( 'Choose slider', 'carousel-slider' ),
'type' => Controls_Manager::SELECT,
'input_type' => 'url',
'options' => $options,
]
);
$this->add_control(
'site_url',
[
'type' => Controls_Manager::HIDDEN,
'input_type' => 'hidden',
'value' => site_url(),
]
);
$this->end_controls_section();
}
/**
* Render element output in the editor.
*
* @inheritDoc
*/
public function content_template() {
?>
<div class="carousel-slider-iframe-container">
<div class="carousel-slider-iframe-overlay"></div>
<iframe class="carousel-slider-iframe"
src="{{settings.site_url}}?carousel_slider_preview=1&carousel_slider_iframe=1&slider_id={{settings.slider_id}}"
height="0" width="500"></iframe>
</div>
<?php
}
/**
* Render element.
*
* @inheritDoc
*/
protected function render() {
$settings = $this->get_settings_for_display();
$slider_id = intval( $settings['slider_id'] );
if ( 'elementor' === ( $_GET['action'] ?? '' ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$args = add_query_arg(
[
'carousel_slider_preview' => true,
'carousel_slider_iframe' => true,
'slider_id' => $slider_id,
],
site_url()
);
$html = '<div class="carousel-slider-iframe-container">';
$html .= '<div class="carousel-slider-iframe-overlay"></div>';
$html .= '<iframe class="carousel-slider-iframe" src="' . $args . '" height="0" width="500"></iframe>';
$html .= '</div>';
echo wp_kses_post( $html );
return;
}
$html = '<div class="carousel-slider-elementor-widget">';
$html .= Frontend::init()->carousel_slide( [ 'id' => $slider_id ] );
$html .= '</div>';
echo wp_kses_post( $html );
}
}