PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/trave494/internetmoney.kerihosting.com/wp-content/themes/jnews/class/Menu/
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
IP: 209.182.202.254
Choose File :

Url:
Dir : /home/trave494/internetmoney.kerihosting.com/wp-content/themes/jnews/class/Menu/Menu.php

<?php
/**
 * @author : Jegtheme
 */

namespace JNews\Menu;

use JNews\Module\ModuleQuery;

/**
 * Class JNews Menu
 */
Class Menu {
	/**
	 * @var Menu
	 */
	private static $instance;

	/**
	 * @var array
	 *
	 * Menu location
	 */
	protected $menu_location;

	/**
	 * @var MegaMenu
	 */
	protected $mega_class;

	/**
	 * @return Menu
	 */
	public static function getInstance() {
		if ( null === static::$instance ) {
			static::$instance = new static();
		}

		return static::$instance;
	}

	private function __construct() {
		$this->menu_location = array(
			'top_navigation'    => esc_html__( 'Top Bar Navigation', 'jnews' ),
			'navigation'        => esc_html__( 'Main Navigation', 'jnews' ),
			'mobile_navigation' => esc_html__( 'Mobile Navigation', 'jnews' ),
			'footer_navigation' => esc_html__( 'Footer Navigation', 'jnews' ),
		);

		$this->mega_class = new MegaMenu();
        $this->setup_hook();
	}

	public function setup_hook() {
		add_action( 'after_setup_theme', array( $this, 'register_menu' ) );
		add_filter( 'wp_setup_nav_menu_item', array( $this, 'custom_nav_item' ) );
		add_filter( 'widget_nav_menu_args', array( $this, 'navigation_menu_widget' ) );
	}

	public function register_menu() {
		register_nav_menus( $this->menu_location );
	}

	public function custom_nav_item( $menu_item ) {
		$menu_item->mega_menu = get_post_meta( $menu_item->ID, 'menu_item_jnews_mega_menu', true );
		return $menu_item;
	}

	public function navigation_menu_widget( $nav_menu_args ){
			$nav_menu_args['walker'] = new WidgetMenuWalker();
		return $nav_menu_args;
	}

	public function top_navigation() {
		wp_nav_menu(
			array(
				'theme_location' => 'top_navigation',
				'container'      => 'ul',
				'menu_class'     => 'jeg_menu jeg_top_menu',
				'depth'          => 3,
				'items_wrap'     => '<ul class="%2$s">%3$s</ul>',
				'echo'           => true
			)
		);
	}

	public function mobile_navigation() {
		wp_nav_menu(
			array(
				'theme_location' => 'mobile_navigation',
				'container'      => 'ul',
				'menu_class'     => 'jeg_mobile_menu',
				'depth'          => 3,
				'items_wrap'     => '<ul class="%2$s">%3$s</ul>',
				'echo'           => true
			)
		);
	}

	public function footer_navigation() {
		wp_nav_menu(
			array(
				'theme_location' => 'footer_navigation',
				'container'      => 'ul',
				'menu_class'     => 'jeg_menu_footer',
				'depth'          => 1,
				'items_wrap'     => '<ul class="%2$s">%3$s</ul>',
				'echo'           => true
			)
		);
	}

	public function main_navigation() {
		$menu_class = array( 'jeg_menu', 'jeg_main_menu' );

		$menu_class[] = get_theme_mod( 'jnews_header_menu_style', 'jeg_menu_style_1' );

		add_filter( 'pre_wp_nav_menu', array( $this, 'jeg_pre_wp_nav_menu' ), null, 2 );

		wp_nav_menu(
			array(
				'theme_location'  => 'navigation',
				'container_class' => 'jeg_nav_item jeg_mainmenu_wrap',
				'menu_class'      => implode( ' ', $menu_class ),
				'depth'           => 0,
				'items_wrap'      => '<ul class="%2$s" data-animation="%3$s">%4$s</ul>',
				'echo'            => true
			)
		);

		jnews_remove_filters( 'pre_wp_nav_menu', array( $this, 'jeg_pre_wp_nav_menu' ), null );
	}

	public function jeg_pre_wp_nav_menu( $nav_menu, $args ) {
		static $menu_id_slugs = array();
		$args->walker = new MenuWalker();

		// Get the nav menu based on the requested menu
		$menu = wp_get_nav_menu_object( $args->menu );

		// Get the nav menu based on the theme_location
		if ( ! $menu && $args->theme_location && ( $locations = get_nav_menu_locations() ) && isset( $locations[ $args->theme_location ] ) ) {
			$menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] );
		}

		// get the first menu that has items if we still can't find a menu
		if ( ! $menu && ! $args->theme_location ) {
			$menus = wp_get_nav_menus();
			foreach ( $menus as $menu_maybe ) {
				if ( $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ) ) {
					$menu = $menu_maybe;
					break;
				}
			}
		}

		if ( empty( $args->menu ) ) {
			$args->menu = $menu;
		}

		// If the menu exists, get its items.
		if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) {
			$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
		}

		/*
		 * If no menu was found:
		 *  - Fall back (if one was specified), or bail.
		 *
		 * If no menu items were found:
		 *  - Fall back, but only if no theme location was specified.
		 *  - Otherwise, bail.
		 */
		if ( ( ! $menu || is_wp_error( $menu ) || ( isset( $menu_items ) && empty( $menu_items ) && ! $args->theme_location ) )
		     && isset( $args->fallback_cb ) && $args->fallback_cb && is_callable( $args->fallback_cb ) ) {
			return call_user_func( $args->fallback_cb, (array) $args );
		}

		if ( ! $menu || is_wp_error( $menu ) ) {
			return false;
		}

		$nav_menu = $items = '';

		$show_container = false;
		if ( $args->container ) {
			/**
			 * Filters the list of HTML tags that are valid for use as menu containers.
			 *
			 * @since 3.0.0
			 *
			 * @param array $tags The acceptable HTML tags for use as menu containers.
			 *                    Default is array containing 'div' and 'nav'.
			 */
			$allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) );
			if ( is_string( $args->container ) && in_array( $args->container, $allowed_tags ) ) {
				$show_container = true;
				$class          = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-' . $menu->slug . '-container"';
				$id             = $args->container_id ? ' id="' . esc_attr( $args->container_id ) . '"' : '';
				$nav_menu       .= '<' . $args->container . $id . $class . '>';
			}
		}

		// Set up the $menu_item variables
		_wp_menu_item_classes_by_context( $menu_items );

		$sorted_menu_items = $menu_items_with_children = array();
		foreach ( (array) $menu_items as $menu_item ) {
			$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
			if ( $menu_item->menu_item_parent ) {
				$menu_items_with_children[ $menu_item->menu_item_parent ] = true;
			}
		}

		// Add the menu-item-has-children class where applicable
		if ( $menu_items_with_children ) {
			foreach ( $sorted_menu_items as &$menu_item ) {
				if ( isset( $menu_items_with_children[ $menu_item->ID ] ) ) {
					$menu_item->classes[] = 'menu-item-has-children';
				}
			}
		}

		unset( $menu_items, $menu_item );

		/**
		 * Filters the sorted list of menu item objects before generating the menu's HTML.
		 *
		 * @since 3.1.0
		 *
		 * @param array $sorted_menu_items The menu items, sorted by each menu item's menu order.
		 * @param object $args An object containing wp_nav_menu() arguments.
		 */
		$sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args );

		$items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );
		unset( $sorted_menu_items );

		// Attributes
		if ( ! empty( $args->menu_id ) ) {
			$wrap_id = $args->menu_id;
		} else {
			$wrap_id = 'menu-' . $menu->slug;
			while ( in_array( $wrap_id, $menu_id_slugs ) ) {
				if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) {
					$wrap_id = preg_replace( '#-(\d+)$#', '-' . ++ $matches[1], $wrap_id );
				} else {
					$wrap_id = $wrap_id . '-1';
				}
			}
		}
		$menu_id_slugs[] = $wrap_id;

		$wrap_class = $args->menu_class ? $args->menu_class : '';

		/**
		 * Filters the HTML list content for navigation menus.
		 *
		 * @since 3.0.0
		 *
		 * @see wp_nav_menu()
		 *
		 * @param string $items The HTML list content for the menu items.
		 * @param object $args An object containing wp_nav_menu() arguments.
		 */
		$items = apply_filters( 'wp_nav_menu_items', $items, $args );
		/**
		 * Filters the HTML list content for a specific navigation menu.
		 *
		 * @since 3.0.0
		 *
		 * @see wp_nav_menu()
		 *
		 * @param string $items The HTML list content for the menu items.
		 * @param object $args An object containing wp_nav_menu() arguments.
		 */
		$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );

		// Don't print any markup if there are no items at this point.
		if ( empty( $items ) ) {
			return false;
		}

		if ( isset( $args->theme_location ) && $args->theme_location === 'navigation' ) {
			$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), get_theme_mod( 'jnews_header_menu_animation', 'animate' ), $items );
		} else {
			$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
		}

		unset( $items );

		if ( $show_container ) {
			$nav_menu .= '</' . $args->container . '>';
		}

		/**
		 * Filters the HTML content for navigation menus.
		 *
		 * @since 3.0.0
		 *
		 * @see wp_nav_menu()
		 *
		 * @param string $nav_menu The HTML content for the navigation menu.
		 * @param object $args An object containing wp_nav_menu() arguments.
		 */
		$nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );

		return $nav_menu;
	}

	/**
	 * @return array
	 *
	 * get menu location
	 */
	public function get_menu_location() {
		return $this->menu_location;
	}

	public function mega_menu_category_1_article() {
		if ( isset( $_POST['cat_id'] ) ) {
			$category = $_POST['cat_id'];

			$article =
				"<div data-cat-id=\"" . esc_attr( $category ) . "\" data-load-status=\"loaded\" class=\"jeg_newsfeed_container\">
                    <div class=\"newsfeed_carousel owl-carousel with_subcat\">
                        " . Menu::build_article_category_1( $category, $_REQUEST['number'] ) . "
                    </div>
                </div>";

			echo jnews_sanitize_output( $article );
		}
		exit;
	}

	public function mega_menu_category_2_article() {
		if ( isset( $_POST['cat_id'] ) ) {
			$category = $_POST['cat_id'];

			$article =
				"<div data-cat-id=\"" . esc_attr( $category ) . "\" data-load-status=\"loaded\" class=\"jeg_newsfeed_container\">
                    <div class=\"newsfeed_static  with_subcat\">
                        " . Menu::build_article_category_2( $category, $_REQUEST['number'] ) . "
                    </div>
                </div>";

			echo jnews_sanitize_output( $article );
		}
		exit;
	}

	public function newsfeed_overlay() {
        return "<div class=\"newsfeed_overlay\">
                    <div class=\"preloader_type preloader_" . get_theme_mod('jnews_loader_mega_menu', 'circle') . "\">
                        <div class=\"newsfeed_preloader jeg_preloader dot\">
                            <span></span><span></span><span></span>
                        </div>
                        <div class=\"newsfeed_preloader jeg_preloader circle\">
                            <div class=\"jnews_preloader_circle_outer\">
                                <div class=\"jnews_preloader_circle_inner\"></div>
                            </div>
                        </div>
                        <div class=\"newsfeed_preloader jeg_preloader square\">
                            <div class=\"jeg_square\"><div class=\"jeg_square_inner\"></div></div>
                        </div>
                    </div>
                </div>";
    }

	public function build_subcat_menu( $category ) {
        $subcat_output = $subcat_li = '';
        $children = get_categories ( array( 'parent' => $category ) );

        if( ! empty( $children ) )
        {
            foreach( $children as $child ){
                $subcat_li .= "<li data-cat-id=\"{$child->term_id}\" class=\"\"><a href=\"" . get_category_link($child->term_id) . "\">{$child->name}</a></li>";
            }

            $subcat_output =
                "<div class=\"jeg_newsfeed_subcat\">
                    <ul class=\"jeg_subcat_item\">
                        <li data-cat-id=\"{$category}\" class=\"active\"><a href=\"" . get_category_link($category)  ."\">" . jnews_return_translation('All', 'jnews', 'all') . "</a></li>
                        {$subcat_li}
                    </ul>
                </div>";
        }

        return $subcat_output;
    }

	public function build_megamenu_category_1_article() {
		if ( isset( $_POST['cat_id'] ) && isset( $_POST['number'] ) ) {
			$category = $_POST['cat_id'];
			$number = $_POST['number'];

			$subcat_menu_output     = $this->build_subcat_menu($category);
            $subcat_class           = empty ( $subcat_menu_output )  ? 'no_subcat' : 'with_subcat';
            $article_output         = Menu::build_article_category_1($category, $number);

            $mega_output = 
                "{$subcat_menu_output}
                <div class=\"jeg_newsfeed_list\">
                    <div data-cat-id=\"{$category}\" data-load-status=\"loaded\" class=\"jeg_newsfeed_container\">
                        <div class=\"newsfeed_carousel owl-carousel {$subcat_class}\">
                            {$article_output}
                        </div>
                    </div>
                    " . $this->newsfeed_overlay() . "
                </div>";

			echo jnews_sanitize_output( $mega_output );
		}
		exit;
	}


	public function build_megamenu_category_2_article() {
		if ( isset( $_POST['cat_id'] ) && isset( $_POST['number'] ) ) {
			$category = $_POST['cat_id'];
			$number = $_POST['number'];
			$tags = isset( $_POST['tags'] ) ? $_POST['tags'] : '';

			$tag_string         = '';
            $subcat_menu_output = $this->build_subcat_menu($category);
            $subcat_class       = empty ( $subcat_menu_output )  ? 'no_subcat' : 'with_subcat';
            $article_output     = Menu::build_article_category_2($category, $number);
            $tags               = explode( ',', $tags );

            foreach ( $tags as $tag ) {
                $tag_detail  = get_tag( $tag );
                if ( ! is_wp_error( $tag_detail ) ) {
                    $tag_string .= "<li><a href='" . get_tag_link( $tag ) . "'>{$tag_detail->name}</a></li>";
                }
            }

            $mega_output = 
                    "{$subcat_menu_output}
                    <div class=\"jeg_newsfeed_list loaded\">
                        <div data-cat-id=\"{$category}\" data-load-status=\"loaded\" class=\"jeg_newsfeed_container\">
                            <div class=\"newsfeed_static {$subcat_class}\">
                                {$article_output}
                            </div>
                        </div>
                        {$this->newsfeed_overlay()}
                    </div>
                    <div class=\"jeg_newsfeed_tags\">
                        <h3>" . esc_html__('Trending Tags', 'jnews') . "</h3>
                        <ul>{$tag_string}</ul>
                    </div>";

			echo jnews_sanitize_output( $mega_output );
		}
		exit;
	}


	public static function build_article_category_1( $category, $number ) {
		$article_output = '';

		$results = ModuleQuery::do_query( array(
			'post_type'              => 'post',
			'sort_by'                => 'latest',
			'post_offset'            => 0,
			'include_category'       => $category,
			'number_post'            => $number,
			'pagination_number_post' => $number,
		) );

		foreach ( $results['result'] as $result ) {
			$thumbnail        = apply_filters( 'jnews_image_lazy_owl', $result->ID, 'jnews-360x180' );
			$additional_class = ( ! has_post_thumbnail( $result->ID ) ) ? 'no_thumbnail' : '';

			$article_output .=
				"<div class=\"jeg_newsfeed_item {$additional_class}\">
                    <div class=\"jeg_thumb\">
                        " . jnews_edit_post( $result->ID ) . "
                        <a href=\"" . get_the_permalink( $result ) . "\">" . $thumbnail . "</a>
                    </div>
                    <h3 class=\"jeg_post_title\"><a href=\"" . get_the_permalink( $result ) . "\">" . get_the_title( $result ) . "</a></h3>
                </div>";

		}


		return $article_output;
	}

	public static function build_article_category_2( $category, $number ) {
		$article_output = '';

		$results = ModuleQuery::do_query( array(
			'post_type'              => 'post',
			'sort_by'                => 'latest',
			'post_offset'            => 0,
			'include_category'       => $category,
			'number_post'            => $number,
			'pagination_number_post' => $number,
		) );

		foreach ( $results['result'] as $result ) {
			$thumbnail        = apply_filters( 'jnews_image_thumbnail', $result->ID, 'jnews-360x180' );
			$additional_class = ( ! has_post_thumbnail( $result->ID ) ) ? 'no_thumbnail' : '';

			$article_output .=
				"<div class=\"jeg_newsfeed_item {$additional_class}\">
                    <div class=\"jeg_thumb\">
                        " . jnews_edit_post( $result->ID ) . "
                        <a href=\"" . get_the_permalink( $result ) . "\">" . $thumbnail . "</a>
                    </div>
                    <h3 class=\"jeg_post_title\"><a href=\"" . get_the_permalink( $result ) . "\">" . get_the_title( $result ) . "</a></h3>
                </div>";
		}


		return $article_output;
	}
}