• File: class-elementor-widget.php
  • Full Path: /home/matthif/www/wp-content/plugins/visual-portfolio/classes/3rd/plugins/class-elementor-widget.php
  • Date Modified: 12/12/2023 4:36 AM
  • File size: 5.9 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * Widget for Elementor
 *
 * @package visual-portfolio/elementor
 */

if ( ! defined'ABSPATH' ) ) {
    exit;
}

/**
 * Class Visual_Portfolio_3rd_Elementor_Widget
 */
class Visual_Portfolio_3rd_Elementor_Widget extends \Elementor\Widget_Base {
    
/**
     * Constructor of Visual_Portfolio_3rd_Elementor_Widget class.
     *
     * @param array      $data default widget data.
     * @param null|array $args default widget args.
     */
    
public function __construct$data = array(), $args null ) {
        
// Migrate from old 'id' control to new 'saved_id'.
        
if ( isset( $data['settings']['id'] ) ) {
            if ( 
$data['settings']['id'] && ( ! isset( $data['settings']['saved_id'] ) || ! $data['settings']['saved_id'] ) ) {
                
$data['settings']['saved_id'] = $data['settings']['id'];
            }

            unset( 
$data['settings']['id'] );
        }

        
parent::__construct$data$args );

        if ( 
$this->is_preview_mode() ) {
            
Visual_Portfolio_Assets::register_script'iframe-resizer''assets/vendor/iframe-resizer/js/iframeResizer.min', array(), '4.3.7' );
            
Visual_Portfolio_Assets::register_script'visual-portfolio-elementor''build/assets/admin/js/elementor', array( 'elementor-frontend''iframe-resizer' ) );

            
Visual_Portfolio_Assets::register_style'visual-portfolio-elementor''build/assets/admin/css/elementor' );
            
wp_style_add_data'visual-portfolio-elementor''rtl''replace' );
            
wp_style_add_data'visual-portfolio-elementor''suffix''.min' );
        }
    }

    
/**
     * Is edit mode check.
     *
     * @return boolean
     */
    
public function is_preview_mode() {
        return 
\Elementor\Plugin::$instance->preview->is_preview_mode() || \Elementor\Plugin::$instance->editor->is_edit_mode();
    }

    
/**
     * Get widget name.
     *
     * @return string Widget name.
     */
    
public function get_name() {
        return 
'visual-portfolio';
    }

    
/**
     * Get widget title.
     *
     * @return string Widget title.
     */
    
public function get_title() {
        return 
visual_portfolio()->plugin_name;
    }

    
/**
     * Get widget icon.
     *
     * @return string Widget icon.
     */
    
public function get_icon() {
        return 
'eicon-gallery-grid';
    }

    
/**
     * Get widget categories.
     *
     * @return array Widget categories.
     */
    
public function get_categories() {
        return array( 
'general' );
    }

    
/**
     * Get widget keywords.
     *
     * @return array Widget keywords.
     */
    
public function get_keywords() {
        return array( 
'portfolio''gallery''images''visual portfolio''vpf' );
    }

    
/**
     * Get script dependencies.
     *
     * @return array Widget script dependencies.
     */
    
public function get_script_depends() {
        if ( 
$this->is_preview_mode() ) {
            return array( 
'visual-portfolio-elementor' );
        }

        return array();
    }

    
/**
     * We should add the prefix to all options, because Select2 conflicts with the Safari for some reason.
     *
     * @param String $option - option value.
     *
     * @return String
     */
    
public function set_option_prefix$option ) {
        return 
'post-id-' $option;
    }

    
/**
     * Remove prefix from the option.
     *
     * @param String $option - prefixed option value.
     *
     * @return String
     */
    
public function unset_option_prefix$option ) {
        return 
str_replace'post-id-'''$option );
    }

    
/**
     * Get style dependencies.
     *
     * @return array Widget style dependencies.
     */
    
public function get_style_depends() {
        if ( 
$this->is_preview_mode() ) {
            return array( 
'visual-portfolio-elementor' );
        }

        return array();
    }

    
/**
     * Adds different input fields to allow the user to change and customize the widget settings.
     *
     * @return void
     */
    
protected function register_controls() {
        
// get all visual-portfolio post types.
        // Don't use WP_Query on the admin side https://core.trac.wordpress.org/ticket/18408 .
        
$vp_query get_posts(
            array(
                
'post_type'              => 'vp_lists',
                
'posts_per_page'         => -1,
                
'paged'                  => -1,
                
'update_post_meta_cache' => false,
                
'update_post_term_cache' => false,
            )
        );

        
$options = array(
            
'' => esc_html__'-- Select Layout --''visual-portfolio' ),
        );
        foreach ( 
$vp_query as $post ) {
            
$options$this->set_option_prefix$post->ID ) ] = '#' $post->ID ' - ' $post->post_title;
        }

        
$this->start_controls_section(
            
'content_section',
            array(
                
'label' => __'General''visual-portfolio' ),
                
'tab'   => \Elementor\Controls_Manager::TAB_CONTENT,
            )
        );

        
$this->add_control(
            
'saved_id',
            array(
                
'label'   => esc_html__'Saved Layout''visual-portfolio' ),
                
'type'    => \Elementor\Controls_Manager::SELECT2,
                
'options' => $options,
                
'dynamic' => array(
                    
'active' => true,
                ),
            )
        );

        
$this->end_controls_section();
    }

    
/**
     * Render widget output on the frontend.
     */
    
protected function render() {
        
$settings array_merge(
            array(
                
'saved_id' => '',
                
'class'    => '',
            ),
            
$this->get_settings_for_display()
        );

        
// No saved layout selected.
        
if ( ! $settings['saved_id'] ) {
            return;
        }

        if ( 
$this->is_preview_mode() ) {
            
$this->add_render_attribute(
                
'wrapper',
                array(
                    
'class'   => 'visual-portfolio-elementor-preview',
                    
'data-id' => $this->unset_option_prefix$settings['saved_id'] ),
                )
            );
        }

        
?>
        <div
            <?php
                
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
                
echo $this->get_render_attribute_string'wrapper' );
            
?>
        >
            <?php if ( $this->is_preview_mode() ) : ?>
                <iframe allowtransparency="true"></iframe>
            <?php else : ?>
                <?php echo do_shortcode'[visual_portfolio id="' esc_attr$this->unset_option_prefix$settings['saved_id'] ) ) . '"]' ); ?>
            <?php endif; ?>
        </div>
        <?php
    
}

    
/**
     * Render shortcode widget output in the editor.
     *
     * Written as a Backbone JavaScript template and used to generate the live preview.
     *
     * @since 1.0.0
     * @access protected
     */
    
protected function content_template() {}

    
/**
     * Render Plain Content
     *
     * @param array $instance instance data.
     */
    // phpcs:ignore
    
public function render_plain_content$instance = array() ) {}
}