• File: Widget.php
  • Full Path: /home/matthif/www/wp-content/plugins/wpforms-lite/src/Integrations/Elementor/Widget.php
  • Date Modified: 02/16/2024 11:45 AM
  • File size: 8.61 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace WPForms\Integrations\Elementor;

use 
Elementor\Plugin;
use 
Elementor\Widget_Base;
use 
Elementor\Controls_Manager;

/**
 * WPForms widget for Elementor page builder.
 *
 * @since 1.6.2
 */
class Widget extends Widget_Base {

    
/**
     * Get widget name.
     *
     * Retrieve shortcode widget name.
     *
     * @since 1.6.2
     *
     * @return string Widget name.
     */
    
public function get_name() {

        return 
'wpforms';
    }

    
/**
     * Get widget title.
     *
     * Retrieve shortcode widget title.
     *
     * @since 1.6.2
     *
     * @return string Widget title.
     */
    
public function get_title() {

        return 
__'WPForms''wpforms-lite' );
    }

    
/**
     * Get widget icon.
     *
     * Retrieve shortcode widget icon.
     *
     * @since 1.6.2
     *
     * @return string Widget icon.
     */
    
public function get_icon() {

        return 
'icon-wpforms';
    }

    
/**
     * Get widget keywords.
     *
     * Retrieve the list of keywords the widget belongs to.
     *
     * @since 1.6.2
     *
     * @return array Widget keywords.
     */
    
public function get_keywords() {

        return [
            
'form',
            
'forms',
            
'wpforms',
            
'contact form',
            
'sullie',
            
'the dude',
        ];
    }

    
/**
     * Get widget categories.
     *
     * @since 1.6.2
     *
     * @return array Widget categories.
     */
    
public function get_categories() {

        return [
            
'basic',
        ];
    }

    
/**
     * Register widget controls.
     *
     * Adds different input fields to allow the user to change and customize the widget settings.
     *
     * @since 1.6.2
     */
    
protected function register_controls() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore

        
$this->content_controls();
    }

    
/**
     * Register content tab controls.
     *
     * @since 1.6.2
     */
    
protected function content_controls() {

        
$this->start_controls_section(
            
'section_form',
            [
                
'label' => esc_html__'Form''wpforms-lite' ),
                
'tab'   => Controls_Manager::TAB_CONTENT,
            ]
        );

        
$forms $this->get_forms();

        if ( empty( 
$forms ) ) {
            
$this->add_control(
                
'add_form_notice',
                [
                    
'show_label'      => false,
                    
'type'            => Controls_Manager::RAW_HTML,
                    
'raw'             => wp_kses(
                        
__'<b>You haven\'t created a form yet.</b><br> What are you waiting for?''wpforms-lite' ),
                        [
                            
'b'  => [],
                            
'br' => [],
                        ]
                    ),
                    
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info wpforms-elementor-no-forms-notice',
                ]
            );
        }

        
$this->add_control(
            
'form_id',
            [
                
'label'       => esc_html__'Form''wpforms-lite' ),
                
'type'        => Controls_Manager::SELECT,
                
'label_block' => true,
                
'options'     => $forms,
                
'default'     => '0',
            ]
        );

        
$this->add_control(
            
'edit_form',
            [
                
'show_label' => false,
                
'type'       => Controls_Manager::RAW_HTML,
                
'raw'        => wp_kses/* translators: %s - WPForms documentation link. */
                    
__'Need to make changes? <a href="#">Edit the selected form.</a>''wpforms-lite' ),
                    [ 
'a' => [] ]
                ),
                
'condition'  => [
                    
'form_id!' => '0',
                ],
            ]
        );

        
$this->add_control(
            
'test_form_notice',
            [
                
'show_label'      => false,
                
'type'            => Controls_Manager::RAW_HTML,
                
'raw'             => sprintf(
                    
wp_kses/* translators: %s - WPForms documentation link. */
                        
__'<b>Heads up!</b> Don\'t forget to test your form. <a href="%s" target="_blank" rel="noopener noreferrer">Check out our complete guide!</a>''wpforms-lite' ),
                        [
                            
'b'  => [],
                            
'br' => [],
                            
'a'  => [
                                
'href'   => [],
                                
'rel'    => [],
                                
'target' => [],
                            ],
                        ]
                    ),
                    
'https://wpforms.com/docs/how-to-properly-test-your-wordpress-forms-before-launching-checklist/'
                
),
                
'condition'       => [
                    
'form_id!' => '0',
                ],
                
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
            ]
        );

        
$this->add_control(
            
'add_form_btn',
            [
                
'show_label'  => false,
                
'label_block' => false,
                
'type'        => Controls_Manager::BUTTON,
                
'button_type' => 'default',
                
'separator'   => 'before',
                
'text'        => '<b>+</b>' esc_html__'New form''wpforms-lite' ),
                
'event'       => 'elementorWPFormsAddFormBtnClick',
            ]
        );

        
$this->end_controls_section();

        
$this->start_controls_section(
            
'section_display',
            [
                
'label'     => esc_html__'Display Options''wpforms-lite' ),
                
'tab'       => Controls_Manager::TAB_CONTENT,
                
'condition' => [
                    
'form_id!' => '0',
                ],
            ]
        );

        
$this->add_control(
            
'display_form_name',
            [
                
'label'        => esc_html__'Form Name''wpforms-lite' ),
                
'type'         => Controls_Manager::SWITCHER,
                
'label_on'     => esc_html__'Show''wpforms-lite' ),
                
'label_off'    => esc_html__'Hide''wpforms-lite' ),
                
'return_value' => 'yes',
                
'condition'    => [
                    
'form_id!' => '0',
                ],
            ]
        );

        
$this->add_control(
            
'display_form_description',
            [
                
'label'        => esc_html__'Form Description''wpforms-lite' ),
                
'type'         => Controls_Manager::SWITCHER,
                
'label_on'     => esc_html__'Show''wpforms-lite' ),
                
'label_off'    => esc_html__'Hide''wpforms-lite' ),
                
'separator'    => 'after',
                
'return_value' => 'yes',
                
'condition'    => [
                    
'form_id!' => '0',
                ],
            ]
        );

        
$this->end_controls_section();
    }

    
/**
     * Render widget output.
     *
     * @since 1.6.2
     */
    
protected function render() {

        if ( 
Plugin::$instance->editor->is_edit_mode() ) {
            
$this->render_edit_mode();
        } else {
            
$this->render_frontend();
        }
    }

    
/**
     * Render widget output in edit mode.
     *
     * @since 1.6.3.1
     */
    
protected function render_edit_mode() {

        
$form_id $this->get_settings_for_display'form_id' );

        
// Popup markup template.
        
echo wpforms_render'integrations/elementor/popup' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

        
if ( count$this->get_forms() ) < ) {

            
// No forms block.
            
echo wpforms_render'integrations/elementor/no-forms' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

            
return;
        }

        if ( empty( 
$form_id ) ) {

            
// Render form selector.
            
echo wpforms_render// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
                
'integrations/elementor/form-selector',
                [
                    
'forms' => $this->get_form_selector_options(),
                ],
                
true
            
);

            return;
        }

        
// Finally, render selected form.
        
$this->render_frontend();
    }

    
/**
     * Render widget output on the frontend.
     *
     * @since 1.6.3.1
     */
    
protected function render_frontend() {

        static 
$is_root_vars_displayed false;

        
$css_vars_obj wpforms()->get'css_vars' );

        if ( ! empty( 
$css_vars_obj ) && wpforms_get_render_engine() === 'modern' && ! $is_root_vars_displayed ) {
            
$css_vars_obj->output_roottrue );

            
$is_root_vars_displayed true;
        }

        
// Render selected form.
        
$this->render_form();
    }

    
/**
     * Render widget as plain content.
     *
     * @since 1.6.2
     */
    
public function render_plain_content() {

        
$this->render_form();
    }

    
/**
     * Render shortcode.
     *
     * @since 1.6.2
     * @deprecated 1.8.3
     */
    
public function render_shortcode() {

        
_deprecated_function__METHOD__'1.8.3 of the WPForms plugin'__CLASS__ '::render_form()' );

        return 
sprintf(
            
'[wpforms id="%1$d" title="%2$s" description="%3$s"]',
            
absint$this->get_settings_for_display'form_id' ) ),
            
sanitize_key$this->get_settings_for_display'display_form_name' ) === 'yes' 'true' 'false' ),
            
sanitize_key$this->get_settings_for_display'display_form_description' ) === 'yes' 'true' 'false' )
        );
    }

    
/**
     * Render a form.
     *
     * @since 1.8.3
     */
    
public function render_form() {

        
wpforms_display(
            
$this->get_settings_for_display'form_id' ),
            
$this->get_settings_for_display'display_form_name' ) === 'yes',
            
$this->get_settings_for_display'display_form_description' ) === 'yes'
        
);
    }

    
/**
     * Get forms list.
     *
     * @since 1.6.2
     *
     * @returns array Array of forms.
     */
    
public function get_forms() {

        static 
$forms_list = [];

        if ( empty( 
$forms_list ) ) {
            
$forms wpforms()->get'form' )->get();

            if ( ! empty( 
$forms ) ) {
                
$forms_list[0] = esc_html__'Select a form''wpforms-lite' );
                foreach ( 
$forms as $form ) {
                    
$forms_list$form->ID ] = mb_strlen$form->post_title ) > 100 mb_substr$form->post_title097 ) . '...' $form->post_title;
                }
            }
        }

        return 
$forms_list;
    }

    
/**
     * Get form selector options.
     *
     * @since 1.6.2
     *
     * @returns string Rendered options for the select tag.
     */
    
public function get_form_selector_options() {

        
$forms   $this->get_forms();
        
$options '';

        foreach ( 
$forms as $form_id => $form ) {
            
$options .= sprintf(
                
'<option value="%d">%s</option>',
                (int) 
$form_id,
                
esc_html$form )
            );
        }

        return 
$options;
    }
}