<?php
/**
* RMP Widget class that hold the responsive menu elementor widget.
*
* @category Class
* @package responsive-menu-pro
* @author Expresstech System
* @since 4.0.2
*/
namespace RMP\Features\Inc\Elementor\Widgets;
use Elementor\Controls_Manager;
use Elementor\Widget_Base;
use RMP\Features\Inc\RMP_Menu;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class RMP_Widget extends Widget_Base {
/**
* Class constructor.
*
* @param array $data Widget data.
* @param array $args Widget arguments.
*/
public function __construct( $data = array(), $args = null ) {
parent::__construct( $data, $args );
}
/**
* Function to return the widget name.
*
* @since 4.0.2
*
* @return string
*/
public function get_name() {
return 'RMP_Widget';
}
/**
* Function to return the widget title.
*
* @since 4.0.2
*
* @return string
*/
public function get_title() {
return esc_html__( 'Responsive Menu', 'responsive-menu' );
}
/**
* Function to return the widget icon.
*
* @since 4.0.2
*
* @return string
*/
public function get_icon() {
return 'eicon-menu-bar';
}
/**
* Function to add the widget in the category list.
*
* @since 4.0.2
*
* @return array
*/
public function get_categories() {
return array( 'general' );
}
/**
* Add keywords to search the widget in elementor.
*
* @since 4.0.2
*
* @return array
*/
public function get_keywords() {
return array( 'menu', 'nav', 'button', 'responsive' );
}
/**
* Function to registered the input controls.
*
* @since 4.0.2
*/
protected function _register_controls() {
$this->start_controls_section(
'section_layout',
array(
'label' => esc_html__( 'Menu Setting', 'responsive-menu' ),
)
);
$menus = rmp_get_all_menus();
if ( ! empty( $menus ) ) {
$menu_id = null;
if ( function_exists( 'array_key_first' ) ) {
$menu_id = array_key_first( $menus );
} else {
$menu_id = ! empty( $menus ) ? array_keys( $menus )[0] : null;
}
$this->add_control(
'rmp_menu',
array(
'label' => esc_html__( 'Responsive Menu', 'responsive-menu' ),
'type' => Controls_Manager::SELECT,
'options' => $menus,
'default' => array_keys( $menus )[0],
'save_default' => true,
'separator' => 'after',
/* translators: %s: HTML tag */
'description' => sprintf( esc_html__( 'Go to the %1$sResponsive menu customizer%2$s to style your menu.', 'responsive-menu' ), '<a class="rmp-menu-edit-link" href="' . admin_url( 'post.php?post=' . $menu_id . '&action=edit&editor=true' ) . '" target="_blank" rel="noopener">', '</a>' ),
)
);
} else {
$this->add_control(
'rmp_menu',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %s: HTML tag */
'raw' => '<strong>' . esc_html__( 'There are no menus in your site.', 'responsive-menu' ) . '</strong><br>' . sprintf( esc_html__( 'Go to the %1$s Menus screen %2$s to create one.', 'responsive-menu' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=rmp_menu' ) ) . '" target="_blank" rel="noopener">', '</a>' ),
'separator' => 'after',
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
)
);
}
$this->end_controls_section();
}
/**
* Function to update the contents in preview and render the menu.
*
* @since 4.0.2
*/
protected function render() {
$available_menus = rmp_get_all_menus();
if ( ! $available_menus ) {
return;
}
$settings = $this->get_settings_for_display();
$menu_id = $settings['rmp_menu'];
$menu = new RMP_Menu( $menu_id );
$menu->mobile_menu();
}
}