[Back] <?php
class Latepoint_Elementor_Widget_Book_Form extends \Elementor\Widget_Base {
protected $widget_data;
/**
* Widget base constructor
*/
public function __construct( $data = [], $args = null ) {
$this->widget_data = $args;
parent::__construct( $data, $args );
wp_register_script(
'elementor_widget_book_form_script',
LATEPOINT_PLUGIN_URL . 'blocks/assets/javascripts/elementor-widget-book-form.js',
['jquery'],
LATEPOINT_VERSION
);
}
/**
* Get widget name
*/
public function get_name(): string {
return 'latepoint_book_form';
}
/**
* Get widget title
*/
public function get_title(): string {
return esc_html__( 'Booking Form', 'latepoint' );
}
/**
* Get widget icon
*/
public function get_icon(): string {
return 'eicon-form-horizontal';
}
/**
* Get widget categories
*/
public function get_categories(): array {
return [ OsElementorHelper::$category ];
}
public function get_script_depends() {
if (\Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode()) {
return ['elementor_widget_book_form_script'];
}
return [];
}
/**
* Register widget controls
*/
protected function register_controls(): void {
# Booking Form Settings Section
$this->start_controls_section(
'content_section_booking_form_settings',
[
'label' => esc_html__( 'Booking Form Settings', 'latepoint' ),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'hide_summary',
[
'label' => esc_html__( 'Hide Summary Panel', 'latepoint' ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'latepoint' ),
'label_off' => esc_html__( 'No', 'latepoint' ),
'return_value' => 'yes',
'default' => 'no',
]
);
$this->add_control(
'hide_side_panel',
[
'label' => esc_html__( 'Hide Side Panel', 'latepoint' ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'latepoint' ),
'label_off' => esc_html__( 'No', 'latepoint' ),
'return_value' => 'yes',
'default' => 'no',
]
);
$this->end_controls_section();
# Step Settings Section
$this->start_controls_section(
'content_section_step_settings',
[
'label' => esc_html__( 'Step Settings', 'latepoint' ),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'selected_agent',
[
'label' => esc_html__('Preselected Agent', 'latepoint'),
'type' => \Elementor\Controls_Manager::SELECT,
'default' => '',
'options' => $this->widget_data['selected_agents_options'],
]
);
$this->add_control(
'selected_service',
[
'label' => esc_html__('Preselected Service', 'latepoint'),
'type' => \Elementor\Controls_Manager::SELECT,
'default' => '',
'options' => $this->widget_data['selected_services_options'],
]
);
$this->add_control(
'selected_service_category',
[
'label' => esc_html__('Preselected Service Category', 'latepoint'),
'type' => \Elementor\Controls_Manager::SELECT,
'default' => '',
'options' => $this->widget_data['selected_service_categories_options'],
]
);
$this->add_control(
'selected_location',
[
'label' => esc_html__('Preselected Location', 'latepoint'),
'type' => \Elementor\Controls_Manager::SELECT,
'default' => '',
'options' => $this->widget_data['selected_locations_options'],
]
);
$this->add_control(
'selected_start_date',
[
'label' => esc_html__( 'Preselected Booking Start Date', 'latepoint' ),
'type' => \Elementor\Controls_Manager::DATE_TIME,
'picker_options' => ['enableTime' => false],
'label_block' => false
]
);
$this->add_control(
'selected_start_time',
[
'label' => esc_html__( 'Preselected Booking Start Time', 'latepoint' ),
'type' => \Elementor\Controls_Manager::TEXT,
'input_type' => 'time',
'placeholder' => esc_html__( 'HH:MM', 'latepoint' ),
'description' => esc_html__( 'Choose a time (format HH:MM)', 'latepoint' ),
]
);
$this->add_control(
'selected_duration',
[
'label' => esc_html__( 'Preselected Duration', 'latepoint' ),
'type' => \Elementor\Controls_Manager::NUMBER,
'min' => 0,
'step' => 1,
'default' => 0,
'description' => esc_html__( 'Minutes', 'latepoint' ),
]
);
$this->add_control(
'selected_total_attendees',
[
'label' => esc_html__( 'Preselected Total Attendees', 'latepoint' ),
'type' => \Elementor\Controls_Manager::NUMBER,
'min' => 0,
'step' => 1,
'default' => "",
]
);
$this->end_controls_section();
# Other Settings Section
$this->start_controls_section(
'content_section_other_settings',
[
'label' => esc_html__( 'Other Settings', 'latepoint' ),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'source_id',
[
'label' => esc_html__( 'Source ID', 'latepoint' ),
'type' => \Elementor\Controls_Manager::NUMBER,
'min' => 0,
'step' => 1,
'default' => "",
]
);
$this->add_control(
'calendar_start_date',
[
'label' => esc_html__( 'Calendar Start Date', 'latepoint' ),
'type' => \Elementor\Controls_Manager::DATE_TIME,
'picker_options' => ['enableTime' => false],
'label_block' => false
]
);
$this->add_control(
'show_services',
[
'label' => esc_html__('Show Services', 'latepoint'),
'type' => \Elementor\Controls_Manager::SELECT2,
'default' => '',
'options' => $this->widget_data['services'],
'multiple' => true
]
);
$this->add_control(
'show_service_categories',
[
'label' => esc_html__( 'Show Service Categories', 'latepoint' ),
'type' => \Elementor\Controls_Manager::SELECT2,
'default' => '',
'multiple' => true,
'options' => $this->widget_data['service_categories'],
]
);
$this->add_control(
'show_agents',
[
'label' => esc_html__( 'Show Agents', 'latepoint' ),
'type' => \Elementor\Controls_Manager::SELECT2,
'default' => '',
'multiple' => true,
'options' => $this->widget_data['agents'],
]
);
$this->add_control(
'show_locations',
[
'label' => esc_html__( 'Show Locations', 'latepoint' ),
'type' => \Elementor\Controls_Manager::SELECT2,
'default' => '',
'multiple' => true,
'options' => $this->widget_data['locations'],
]
);
$this->end_controls_section();
}
/**
* Render widget output on the frontend
*/
protected function render(): void {
$settings = $this->get_settings_for_display();
$allowed_params = [
'hide_summary',
'hide_side_panel',
'selected_agent',
'selected_service',
'selected_service_category',
'selected_location',
'selected_start_date',
'selected_start_time',
'selected_duration',
'selected_total_attendees',
'source_id',
'calendar_start_date',
'show_services',
'show_service_categories',
'show_agents',
'show_locations',
];
$params = OsBlockHelper::attributes_to_data_params($settings, $allowed_params);
echo do_shortcode('[latepoint_book_form ' . $params . ']');
}
}