File "custom-functions.php"

Full Path: /home/vantageo/public_html/wp-admin-20240915120854/wp-includes-20240915121038/IXR/plugins/responsive-menu/v4.0.0/inc/helpers/custom-functions.php
File size: 9.17 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * RMP features custom functions.
 *
 * @version 4.0.0
 *
 * @package responsive-menu
 */

// namespace RMP\Features\Inc\Helpers;

/**
 * Function to check the input is checked or not.
 *
 * @version 4.0.0
 *
 * @param string $actual_value
 *
 * @return string|null
 */
function is_rmp_option_checked( $actual_value, $options, $key ) {
	if ( empty( $options[ $key ] ) ) {
		return;
	}

	$checked_value = $options[ $key ];
	if ( $actual_value == $checked_value ) {
		return 'checked';
	}

	return;
}

/**
 * Function to return the value from option
 *
 * @version 4.0.0
 *
 * @param string $key
 * @param array  $options
 *
 * @return string|array
 */
function rmp_get_value( $options, $key ) {
	if ( empty( $options[ $key ] ) ) {
		return;
	}

	return $options[ $key ];
}

function rmp_get_list_of_pages() {
	$posts = get_posts(
		array(
			'numberposts' => -1,
			'post_type'   => 'any',
		)
	);

	$all_pages = array();

	foreach ( $posts as $post ) {
		$all_pages[ $post->ID ] = $post->post_title;
	}
	wp_reset_postdata();
	return $all_pages;
}

/**
 * Return the form to select a dashicon
 *
 * @since 1.5.2
 * @return string
 */
function rmp_dashicon_selector() {
	foreach ( rmp_all_dash_icons() as $code => $class ) {
		$bits = explode( '-', $code );
		$type = $bits[0]; ?>
		<div class="<?php echo esc_attr( $type ); ?> font-icon">
			<input class="radio" id="<?php echo esc_attr( $class ); ?>" type="radio" rel="<?php echo '&#x' . esc_attr( $bits[1] ); ?>" name="icon" value="dashicons <?php echo esc_attr( $class ); ?>" />
			<label rel="<?php echo '&#x' . esc_attr( $bits[1] ); ?>" for="<?php echo esc_attr( $class ); ?>" title="<?php echo esc_attr( $class ); ?>" ></label>
		</div>
		<?php
	}
}


/**
 * Function to return the all menu ids of published menu.
 *
 * @since 4.0.0
 * @return array $menu_ids;
 */
function get_all_rmp_menu_ids() {
	$args = array(
		'post_type'      => 'rmp_menu',
		'posts_per_page' => -1,
		'post_status'    => 'publish',
	);

	$all_menus    = get_posts( $args );
	$menu_ids = array();

	if ( ! empty( $all_menus ) ) {
		foreach ( $all_menus as $menu ) {
			setup_postdata( $menu );
			$menu_ids[] = $menu->ID;
		}
	}
	wp_reset_postdata();
	return $menu_ids;
}

/**
 * Function to return the all published menu list.
 *
 * @since 4.0.0
 * @return array;
 */
function rmp_get_all_menus() {
	$args = array(
		'post_type'      => 'rmp_menu',
		'posts_per_page' => -1,
		'post_status'    => 'publish',
	);

	$all_menus    = get_posts( $args );
	$menus = array();

	if ( ! empty( $all_menus ) ) {
		foreach ( $all_menus as $menu ) {
			setup_postdata( $menu );
			$menus[ $menu->ID ] = $menu->post_title;
		}
	}
	wp_reset_postdata();
	return $menus;
}



/**
 * Get image alt text by image URL
 *
 * @param String $image_url
 *
 * @return Bool | String
 */
function rmp_image_alt_by_url( $image_url ) {
	global $wpdb;

	if ( empty( $image_url ) ) {
		return '';
	}

	$query_arr = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE guid='%s';", strtolower( $image_url ) ) );
	$image_id  = ( ! empty( $query_arr ) ) ? $query_arr[0] : 0;

	return get_post_meta( $image_id, '_wp_attachment_image_alt', true );
}

/**
 * Return the menu items.
 */
function rmp_get_wp_nav_menu_items( $options ) {
	$menu = '';

	if ( ! empty( $options['theme_location_menu'] ) && has_nav_menu( $options['theme_location_menu'] ) ) {
		$menu = get_term( get_nav_menu_locations()[ $options['theme_location_menu'] ], 'nav_menu' )->slug;
	} elseif ( ! empty( $options['menu_to_use'] ) ) {
		$menu = $options['menu_to_use'];
	} elseif ( ! empty( get_terms( 'nav_menu' )[0]->slug ) ) {
		$menu = get_terms( 'nav_menu' )[0]->slug;
	}

	return wp_get_nav_menu_items( $menu );
}


/**
 * @return allow svg html tags.
 */
function rmp_allow_svg_html_tags() {
	$kses_defaults = wp_kses_allowed_html( 'post' );

	$svg_args = array(
		'svg'   => array(
			'class'           => true,
			'aria-hidden'     => true,
			'aria-labelledby' => true,
			'role'            => true,
			'xmlns'           => true,
			'width'           => true,
			'height'          => true,
			'viewbox'         => true, // <= Must be lower case!
		),
		'g'     => array( 'fill' => true ),
		'title' => array( 'title' => true ),
		'path'  => array(
			'd'    => true,
			'fill' => true,
		),
	);

	return array_merge( $kses_defaults, $svg_args );
}

/**
 * Sanitizes multi-dimentional array
 *
 * @since 4.1.6
 */
function rm_sanitize_rec_array( $array, $allowhtml = false ) {
    if ( ! is_array( $array ) ) {
        return $allowhtml ? rm_sanitize_html_tags( wp_specialchars_decode( (string) $array, ENT_QUOTES ) ) : sanitize_text_field( (string) $array );
    }
    foreach ( $array as $key => $value ) {
        if ( is_array( $value ) ) {
            $array[ $key ] = rm_sanitize_rec_array( $value, $allowhtml );
        } else {
            $array[ $key ] = $allowhtml ? rm_sanitize_html_tags( wp_specialchars_decode( (string) $value, ENT_QUOTES ) ) : sanitize_text_field( (string) $value );
        }
    }
    return $array;
}

function rm_sanitize_html_tags( $content ) {
    // Define allowed HTML tags and attributes
    $common_attrs = array(
		'class' => true,
		'id'    => true,
	);
	$form_common_attrs = array_merge($common_attrs, array(
		'name'     => true,
		'disabled' => true,
		'required' => true,
		'readonly' => true,
	));

	$allowed_tags = array(
		'svg'      => array(
			'xmlns'   => true,
			'viewBox' => true,
			'width'   => true,
			'height'  => true,
			'fill'    => true,
		),
		'path'     => array(
			'd'               => true,
			'fill'            => true,
			'stroke'          => true,
			'stroke-width'    => true,
			'stroke-linecap'  => true,
			'stroke-linejoin' => true,
		),
		'div'      => $common_attrs,
		'span'     => $common_attrs,
		'br'       => true,
		'b'        => true,
		'strong'   => true,
		'img'      => array(
			'src'    => true,
			'alt'    => true,
			'width'  => true,
			'height' => true,
			'class'  => true,
			'id'     => true,
			'style'  => true,
		),
		'i'        => $common_attrs,
		'label'    => $common_attrs,
		'a'        => array(
			'href'   => true,
			'target' => true,
			'rel'    => true,
		),
		'h1'       => $common_attrs,
		'h2'       => $common_attrs,
		'h3'       => $common_attrs,
		'h4'       => $common_attrs,
		'h5'       => $common_attrs,
		'h6'       => $common_attrs,
		'p'        => $common_attrs,
		'form'     => array(
			'action' => true,
			'method' => true,
			'class'  => true,
			'id'     => true,
		),
		'input'    => array_merge($form_common_attrs, array(
			'type'        => true,
			'value'       => true,
			'placeholder' => true,
			'checked'     => true,
		)),
		'textarea' => array_merge($form_common_attrs, array(
			'placeholder' => true,
			'rows'        => true,
			'cols'        => true,
		)),
		'select'   => $form_common_attrs,
		'option'   => array(
			'value'    => true,
			'selected' => true,
		),
		'button'   => array_merge($form_common_attrs, array(
			'type'  => true,
			'value' => true,
		)),
	);

    // Sanitize content
    return wp_kses($content, $allowed_tags);
}
/**
 * Add RM customize button for admin menus
 * @since 4.3.0
 */
function add_rm_customize_button_to_save_menu() {
	global $pagenow;
    if ( 'edit.php' === $pagenow && ! empty( $_REQUEST['post_type'] ) && ! empty( $_REQUEST['open'] ) && 'rmp_menu' === $_REQUEST['post_type'] && 'wizard' === $_REQUEST['open'] ) {
		$inline_script = "jQuery('#rmp-new-menu-wizard').fadeIn();";
		if ( ! empty( $_REQUEST['menu-to-use'] ) ) {
			$inline_script .= "jQuery('#rmp-menu-to-use').val('".esc_attr( sanitize_text_field( wp_unslash( $_REQUEST['menu-to-use'] ) ) ) ."' );";
		}
		wp_add_inline_script( 'rmp_admin_scripts', $inline_script );
	}
    // Check if it's the admin menu page
    if ( 'nav-menus.php' === $pagenow ) {
		$menu_id = isset($_REQUEST['menu']) ? sanitize_text_field( wp_unslash( intval( $_REQUEST['menu'] ) ) ) : absint( get_user_option( 'nav_menu_recently_edited' ) );
		$nav_menus  = wp_get_nav_menus();
		if ( ( empty( $menu_id ) || ! is_nav_menu( $menu_id ) ) && 0 < count( $nav_menus ) ) {
			$menu_id = $nav_menus[0]->term_id;
		}
		$rmp_customize_menu = admin_url( 'edit.php?post_type=rmp_menu&open=wizard' );
		if ( ! empty( $menu_id ) && is_nav_menu( $menu_id ) ) {
			$rmp_customize_menu = admin_url( 'edit.php?post_type=rmp_menu&open=wizard&menu-to-use='.esc_attr( $menu_id ) );
			$query = new WP_Query(array(
				'post_type'      => 'rmp_menu',
				'posts_per_page' => 1,
				'meta_query'     => array(
					array(
						'key'     => 'rmp_menu_meta',
						'value'   => '"menu_to_use";s:'.strlen( $menu_id ).':"'. esc_sql( $menu_id ).'";',
						'compare' => 'LIKE',
					),
				),
			));
			if ( $query->have_posts() ) {
				$query->the_post();
				$post_id = get_the_ID();
				wp_reset_postdata();
				$rmp_customize_menu = admin_url( 'post.php?post='.esc_attr( $post_id ).'&action=edit&editor=true' );
			}
		}
		$inline_script = "jQuery(document).ready(function($) {
			$('#save_menu_footer').before('<a href=\"".esc_url( $rmp_customize_menu )."\" style=\"margin-right:5px;\" class=\"button button-secondary button-large rmp-customize-menu\">". __('Customize Menu', 'responsive-menu') ."</a>');
		});";
		// Enqueue the script
		wp_add_inline_script( 'admin-bar', $inline_script  );
	}
}
add_action('admin_footer', 'add_rm_customize_button_to_save_menu', 999);