File "class-rmp-menu.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/responsive-menu/v4.0.0/inc/classes/class-rmp-menu.php
File size: 13.32 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* This is core class file for responsive menu pro.
*
* @package responsive_menu_pro
* @since 4.0.0
*/
namespace RMP\Features\Inc;
use RMP\Features\Inc\Option_Manager;
use RMP\Features\Inc\Walker;
/** Disbale the direct access to this class */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'RMP_Menu' ) ) :
/**
* Class RMP_Menu prepare the menu as per loction and menu id.
*
* @package responsive_menu_pro
*
* @author Expresstech System
*/
class RMP_Menu {
/**
* Hold the menu id.
*
* @since 4.0.0
* @access protected
* @var string $menu_id
*/
protected $menu_id;
/**
* Hold the menu id.
*
* @since 4.0.0
* @access protected
* @var array $options
*/
public $options;
/**
* This is menu class constructor function.
*
* @access public
*/
public function __construct( $menu_id ) {
$option_manager = Option_Manager::get_instance();
$this->options = $option_manager->get_options( $menu_id );
$this->menu_id = $menu_id;
}
/**
* Prepare mobile menu markup.
*
* @version 4.0.0
*
* @return HTML|string
*/
public function mobile_menu() {
$menu_items = '';
if ( ! empty( $this->options['items_order'] ) ) {
$menu_items = $this->options['items_order'];
}
if ( empty( $menu_items ) ) {
return;
}
$side_animation = 'rmp-' . $this->options['animation_type'] . '-' . $this->options['menu_appear_from'];
$menu_container_classes = apply_filters( 'rmp_menu_container_classes', array( 'rmp-container', $side_animation ), $this->menu_id );
$menu_container_classes = implode( ' ', $menu_container_classes );
$this->menu_trigger()
?>
<div id="rmp-container-<?php echo esc_attr( $this->menu_id ); ?>" class="rmp-container <?php echo esc_attr( $menu_container_classes ); ?>">
<?php
foreach ( $menu_items as $key => $value ) {
if ( ! empty( $value ) && 'on' === $value ) {
if ( 'menu' === $key ) {
$this->menu();
} elseif ( 'title' === $key ) {
$this->menu_title();
} elseif ( 'search' === $key ) {
$this->menu_search_box();
} else {
$this->menu_additional_content();
}
}
}
?>
</div>
<?php
}
/**
* Function to print the menu markups in webpage.
*/
public function build_menu() {
$this->mobile_menu();
/**
* Filters the menu marksup.
*
* @since 4.1.0
*
* @param HTML|string $html
* @param int menu_id
*/
echo apply_filters( 'rmp_menu_html', '', $this->menu_id );
}
/**
* Function to return the prepared menu items.
*
* @since 4.0.0
*
* @return HTML|string
*/
public function menu() {
$param = $this->rmp_nav_menu_args();
if ( empty( $param ) ) {
return;
}
$param['echo'] = false;
echo wp_nav_menu( $param );
/**
* Filters the nav menu markups.
*
* @since 4.1.2
*
* @param HTML $menu_markups
* @param int $this->menu_id
* @param array $param
*/
echo apply_filters( 'rmp_menu_markups', '', $this->menu_id, $param );
}
public function menu_trigger() {
$trigger_click_animation = '';
if ( ! empty( $this->options['button_click_animation'] ) ) {
$trigger_click_animation = 'rmp-menu-trigger-' . $this->options['button_click_animation'];
}
$toggle_theme_class = '';
if ( ! empty( $this->options['menu_theme'] ) ) {
$toggle_theme_class = 'rmp-' . str_replace( ' ', '-', strtolower( $this->options['menu_theme'] ) ) . '-trigger';
}
$toggle_theme_class = apply_filters( 'rmp_menu_toggle_classes', array( 'rmp_menu_trigger', $trigger_click_animation ), $this->menu_id );
$toggle_theme_class = implode( ' ', $toggle_theme_class );
if ( wp_is_mobile() ) {
$toggle_theme_class .= ' rmp-mobile-device-menu';
}
$menu_trigger_destination = '';
if ( ! empty( $this->options['hamburger_position_selector'] ) ) {
$menu_trigger_destination = 'data-destination=' . $this->options['hamburger_position_selector'];
}
?>
<button type="button" aria-controls="rmp-container-<?php echo esc_attr( $this->menu_id ); ?>" aria-label="Menu Trigger" id="rmp_menu_trigger-<?php echo esc_attr( $this->menu_id ); ?>" <?php echo esc_attr( $menu_trigger_destination ); ?> class="<?php echo esc_attr( $toggle_theme_class ); ?>">
<?php
$trigger_text_position = '';
if ( ! empty( $this->options['button_title_position'] ) ) {
$trigger_text_position = $this->options['button_title_position'];
}
if ( ( 'left' === $trigger_text_position || 'top' === $trigger_text_position ) && ! empty( $this->options['button_title'] ) ) {
// Menu trigger text.
?>
<div class="rmp-trigger-label rmp-trigger-label-<?php echo esc_attr( $trigger_text_position ); ?>">
<span class="rmp-trigger-text"><?php echo esc_html( $this->options['button_title'] ); ?></span>
<?php
if ( ! empty( $this->options['button_title_open'] ) ) {
?>
<span class="rmp-trigger-text-open"><?php echo esc_html( $this->options['button_title_open'] ); ?></span>
<?php } ?>
</div>
<?php } ?>
<span class="rmp-trigger-box">
<?php
// Normal state menu trigger type.
if ( ! empty( $this->options['button_font_icon'] ) ) {
?>
<span class="rmp-trigger-icon rmp-trigger-icon-inactive"><?php echo wp_kses_post( $this->options['button_font_icon'] ); ?></span>
<?php
} elseif ( ! empty( $this->options['button_image'] ) ) {
?>
<img src="<?php echo esc_url( $this->options['button_image'] ); ?>" alt="<?php echo esc_attr( rmp_image_alt_by_url( $this->options['button_image'] ) ); ?>" class="rmp-trigger-icon rmp-trigger-icon-inactive" width="100" height="100">
<?php
} else {
?>
<span class="responsive-menu-pro-inner"></span>
<?php
}
// Active state menu trigger type.
if ( ! empty( $this->options['button_font_icon_when_clicked'] ) ) {
?>
<span class="rmp-trigger-icon rmp-trigger-icon-active"><?php echo wp_kses_post( $this->options['button_font_icon_when_clicked'] ); ?></span>
<?php
} elseif ( ! empty( $this->options['button_image_when_clicked'] ) ) {
?>
<img src="<?php echo esc_url( $this->options['button_image_when_clicked'] ); ?>" alt="<?php echo esc_attr( rmp_image_alt_by_url( $this->options['button_image_when_clicked'] ) ); ?>" class="rmp-trigger-icon rmp-trigger-icon-active" width="100" height="100">
<?php
}
?>
</span>
<?php
if ( ( 'bottom' === $trigger_text_position || 'right' === $trigger_text_position ) && ! empty( $this->options['button_title'] ) ) {
// Menu trigger text.
?>
<div class="rmp-trigger-label rmp-trigger-label-<?php echo esc_attr( $trigger_text_position ); ?>">
<span class="rmp-trigger-text"><?php echo esc_html( $this->options['button_title'] ); ?></span>
<?php
if ( ! empty( $this->options['button_title_open'] ) ) {
?>
<span class="rmp-trigger-text-open"><?php echo esc_html( $this->options['button_title_open'] ); ?></span>
<?php } ?>
</div>
<?php } ?>
</button>
<?php
}
/**
* Returns menu title.
*
* @return HTML|string
*/
public function menu_title() {
$menu_title_wrap = null;
$menu_title = '';
if ( ! empty( $this->options['menu_title'] ) ) {
$menu_title = $this->options['menu_title'];
}
$menu_image = '';
if ( ! empty( $this->options['menu_title_image'] ) ) {
$image_alt = rmp_image_alt_by_url( $this->options['menu_title_image'] );
$menu_image = sprintf(
'<img class="rmp-menu-title-image" src="%1$s" alt="%2$s" title="%2$s" width="100" height="100"/>',
esc_url( $this->options['menu_title_image'] ),
esc_attr( $image_alt )
);
}
if ( ! empty( $this->options['menu_title_font_icon'] ) ) {
$menu_image = sprintf( '%s', $this->options['menu_title_font_icon'] );
}
$link_target = '_self';
if ( ! empty( $this->options['menu_title_link_location'] ) ) {
$link_target = $this->options['menu_title_link_location'];
}
?>
<div id="rmp-menu-title-<?php echo esc_attr( $this->menu_id ); ?>" class="rmp-menu-title">
<?php if ( ! empty( $this->options['menu_title_link'] ) ) { ?>
<a href="<?php echo esc_url( $this->options['menu_title_link'] ); ?>" target="<?php echo esc_attr( $link_target ); ?>" class="rmp-menu-title-link" id="rmp-menu-title-link">
<?php }else { ?>
<span class="rmp-menu-title-link">
<?php } ?>
<?php $title_html = $menu_image;
$title_html .= "<span>" . $menu_title . "</span>";
echo rm_sanitize_html_tags( $title_html );
if ( ! empty( $this->options['menu_title_link'] ) ) { ?>
</a>
<?php }else { ?>
</span>
<?php } ?>
</div>
<?php
}
/**
* Return menu search box.
*
* @return HTML|string
*/
public function menu_search_box() {
?>
<div id="rmp-search-box-<?php echo esc_attr( $this->menu_id ); ?>" class="rmp-search-box">
<form action="<?php echo esc_url( home_url( '/' ) ); ?>" class="rmp-search-form" role="search">
<input type="search" name="s" title="Search" placeholder="<?php esc_attr_e( 'Search', 'responsive-menu' ); ?>" class="rmp-search-box">
</form>
</div>
<?php
}
/**
* Function to prepare the the menu additional content section.
*
* @since 4.0.0
*
* @return HTML|string $content
*/
public function menu_additional_content() {
$content = '';
if ( ! empty( $this->options['menu_additional_content'] ) ) {
// Remove script tags if found in menu contents.
$content = preg_replace( '#<script(.*?)>(.*?)</script>#', '', $this->options['menu_additional_content'] );
}
?>
<div id="rmp-menu-additional-content-<?php echo esc_attr( $this->menu_id ); ?>" class="rmp-menu-additional-content">
<?php echo do_shortcode( $content ); ?>
</div>
<?php
/**
* Filters the menu additional contents markups.
*
* @since 4.1.0
*
* @param string $content
* @param int $menu_id
*/
echo apply_filters( 'menu_additional_content_html', '', $this->menu_id );
}
public function rmp_nav_menu_args( $args = null ) {
$menu = $this->get_wp_menu_to_use();
$menu_location = $this->get_wp_menu_location();
$wp_menu_obj = wp_get_nav_menu_object( $menu );
// Check menu object is not empty.
if ( empty( $wp_menu_obj ) ) {
return $args;
}
$menu_depth = 0;
if ( ! empty( $this->options['menu_depth'] ) ) {
$menu_depth = $this->options['menu_depth'];
}
$menu_label = ! empty( $this->options['menu_name'] ) ? $this->options['menu_name'] : 'Default';
if ( empty( $menu_label ) ) {
$menu_label = $menu;
}
$item_wrap_attrs = array(
'id' => '%1$s',
'class' => '%2$s',
'role' => 'menubar',
'aria-label' => $menu_label,
);
$wrap_attributes = apply_filters( 'rmp_wrap_attributes', $item_wrap_attrs, $this->menu_id, $menu_location );
$attributes = '';
foreach ( $wrap_attributes as $attribute => $value ) {
if ( ! empty( $value ) ) {
$attributes .= sprintf( ' %s="%s"', $attribute, esc_attr( $value ) );
}
}
$walker = new Walker( $this->options );
if ( ! empty( $this->options['custom_walker'] ) ) {
$walker = new $this->options['custom_walker']( $this->options );
}
$param = array(
'container' => 'div',
'container_id' => 'rmp-menu-wrap-' . $this->menu_id,
'container_class' => 'rmp-menu-wrap',
'menu_id' => 'rmp-menu-' . $this->menu_id,
'menu_class' => 'rmp-menu',
'menu' => $wp_menu_obj,
'depth' => $menu_depth,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'theme_location' => '',
'walker' => $walker,
'items_wrap' => '<ul' . $attributes . '>%3$s</ul>',
);
$param = apply_filters( 'rmp_nav_menu_args', $param, $wp_menu_obj->term_id, $menu_location );
return $param;
}
/**
* Function to return the correct wp menu name.
*
* @version 4.0.0
*
* @return string Name of wp menu.
*/
public function get_wp_menu_to_use() {
$menu = '';
// Set menu as per settings priority.
if ( ! empty( $this->options['different_menu_for_mobile'] ) && 'on' === $this->options['different_menu_for_mobile'] && wp_is_mobile() ) {
$menu = $this->options['menu_to_use_in_mobile'];
} elseif ( ! empty( $this->options['theme_location_menu'] ) && has_nav_menu( $this->options['theme_location_menu'] ) ) {
$menu = get_term( get_nav_menu_locations()[ $this->options['theme_location_menu'] ], 'nav_menu' )->slug;
} elseif ( ! empty( $this->options['menu_to_use'] ) ) {
$menu = $this->options['menu_to_use'];
} elseif ( ! empty( get_terms( 'nav_menu' )[0]->slug ) ) {
$menu = get_terms( 'nav_menu' )[0]->slug;
}
return $menu;
}
/**
* Function to get the location of menu.
*
* @return string Returns the menu location.
*/
public function get_wp_menu_location() {
$menu = $this->get_wp_menu_to_use();
if ( empty( $menu ) ) {
return;
}
$theme_location = null;
$menu_object = wp_get_nav_menu_object( $menu );
$theme_locations = get_nav_menu_locations();
foreach ( $theme_locations as $location => $value ) {
if ( $value === $menu_object->term_id ) {
$theme_location = $location;
break;
}
}
return $theme_location;
}
}
endif;