HEX
Server: Apache
System: Linux host.fiblib.com 5.14.0-570.58.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 29 06:24:11 EDT 2025 x86_64
User: scientificreligi (1062)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //home/scientificreligi/www/wp-content/plugins/auteur-framework/core/xmenu/xmenu.class.php
<?php
if (!defined('ABSPATH')) exit;
if (!class_exists('G5P_Core_XMenu')) {
	final class G5P_Core_XMenu
	{
		private static $_instance;
		public static function getInstance()
		{
			if (self::$_instance == NULL) {
				self::$_instance = new self();
			}

			return self::$_instance;
		}

		/**
		 * Plugin construct
		 */
		public function init()
		{
			$this->includes();
			$this->add_actions();
			$this->add_filters();
		}

		/**
		 * Include library for plugin
		 */
		private function includes()
		{
			require_once G5P()->pluginDir('core/xmenu/inc/xmenu-walker.php');
		}

		private function add_actions()
		{
			/**
			 * Load admin assets for xmenu
			 */
			add_action('admin_print_styles-nav-menus.php', array($this, 'admin_load_assets'));

			/**
			 * Load frontend assets for xmenu
			 */
			add_action('wp_enqueue_scripts', array($this, 'frontend_load_assets'));

			/**
			 * XMenu Ajax
			 */
			add_action('wp_ajax_nopriv_xmenu_get_xmenu_panel', array($this, 'xmenu_panel'));
			add_action('wp_ajax_xmenu_get_xmenu_panel', array($this, 'xmenu_panel'));

			add_action('wp_ajax_nopriv_xmenu_save_menu', array($this, 'save_menu'));
			add_action('wp_ajax_xmenu_save_menu', array($this, 'save_menu'));

			/**
			 * Register post type: xmenu_mega
			 */
			add_action('init', array($this, 'register_post_type_mega_menu'));

		}

		private function add_filters()
		{
			/**
			 * Filter for xmenu walker
			 */
			add_filter('wp_nav_menu_args', array($this, 'menu_walker'), 100);
		}

		public function admin_load_assets()
		{
			if (isset($_GET['action']) && ($_GET['action'] == 'locations')) {
				return;
			}
			GSF()->core()->iconPopup()->enqueue();

			wp_enqueue_style(G5P()->assetsHandle('xmenu_admin'), G5P()->helper()->getAssetUrl('core/xmenu/assets/css/xmenu-admin.min.css'), array(), G5P()->pluginVer());
			wp_enqueue_script(G5P()->assetsHandle('xmenu_admin'), G5P()->helper()->getAssetUrl('core/xmenu/assets/js/xmenu-admin.min.js'), array(), G5P()->pluginVer(), true);

			wp_localize_script(G5P()->assetsHandle('xmenu_admin'), 'xmenu_meta', array(
				'data'     => $this->get_menu_data(),
				'ajax_url' => admin_url('admin-ajax.php')
			));
		}

		public function frontend_load_assets() {
			wp_enqueue_style(G5P()->assetsHandle('xmenu-animate'), G5P()->helper()->getAssetUrl('core/xmenu/assets/css/animate.min.css'), array(), '3.5.1');
			//wp_enqueue_style(G5P()->assetsHandle('xmenu'), G5P()->helper()->getAssetUrl('core/xmenu/assets/css/xmenu.min.css'), array(), G5P()->pluginVer());
			wp_enqueue_script(G5P()->assetsHandle('xmenu'), G5P()->helper()->getAssetUrl('core/xmenu/assets/js/xmenu.min.js'), array(), G5P()->pluginVer(), true);
		}

		public function menu_walker($args)
		{
			$args['walker'] = new XMenuWalker();

			if (isset($args['main_menu']) && ($args['main_menu'])) {
				$args['menu_class'] .= ' x-nav-menu';
			}

			return $args;
		}

		/**
		 * Get XMENU Data
		 *
		 * @return array
		 */
		public function get_menu_data()
		{
			global $nav_menu_selected_id;
			$menu_items = wp_get_nav_menu_items($nav_menu_selected_id, array('post_status' => 'any'));
			$xmenu_data = array();
			if (is_array($menu_items)) {
				foreach ($menu_items as $key => $item) {
					$menu = array(
						'type_label'            => $item->type_label,
						'type'                  => $item->type,
						'menu-item-url'         => $item->url,
						'menu-item-title'       => $item->title,
						'menu-item-attr-title'  => $item->attr_title,
						'menu-item-target'      => $item->target,
						'menu-item-classes'     => join(' ', $item->classes),
						'menu-item-xfn'         => $item->xfn,
						'menu-item-description' => $item->description,
					);
					$menu_item_meta = get_post_meta($item->ID, $this->get_menu_meta_key(), true);
					if ($menu_item_meta) {
						$menu_item_meta = json_decode($menu_item_meta, true);
						$menu = array_merge($menu_item_meta, $menu);
					}
					$xmenu_data ['menu_' . $item->ID] = $menu;
				}
			}

			return $xmenu_data;
		}

		/**
		 * Get XMenu Panel
		 */
		public function xmenu_panel()
		{
			include_once G5P()->pluginDir('core/xmenu/templates/xmenu-panel.php');
			die();
		}

		/**
		 * Save Menu Items
		 */
		public function save_menu()
		{
			$nonce = $_POST['nonce'];
			if (!wp_verify_nonce($nonce, "XMENU_SAVE")) {
				echo 0;
				die();
			}
			$data = $_POST['data'];
			foreach ($data as $item) {
				$menu_id = $item['menu_id'];
				$term = wp_get_object_terms($menu_id, 'nav_menu');
				if (!is_array($term)) {
					continue;
				}
				$term = $term[0];

				$menu_list = wp_get_nav_menu_items($term->term_id, array('post_status' => 'any'));
				$menu_obj = null;
				foreach ($menu_list as $key => $menu_value) {
					if ($menu_value->ID == $menu_id) {
						$menu_obj = $menu_list[$key];
						break;
					}
				}
				if (!$menu_obj) {
					continue;
				}

				$args = array(
					'menu-item-db-id'       => $menu_id,
					'menu-item-object-id'   => $menu_obj->object_id,
					'menu-item-object'      => $menu_obj->object,
					'menu-item-parent-id'   => $menu_obj->menu_item_parent,
					'menu-item-position'    => $menu_obj->menu_order,
					'menu-item-type'        => $menu_obj->type,
					'menu-item-title'       => $item['data']['menu-item-title'],
					'menu-item-url'         => $menu_obj->type == 'custom' ? $item['data']['menu-item-url'] : $menu_obj->url,
					'menu-item-description' => $item['data']['menu-item-description'],
					'menu-item-attr-title'  => $item['data']['menu-item-attr-title'],
					'menu-item-target'      => $item['data']['menu-item-target'],
					'menu-item-classes'     => $item['data']['menu-item-classes'],
					'menu-item-xfn'         => $item['data']['menu-item-xfn'],
					'menu-item-status'      => $menu_obj->post_status,
				);

				/**
				 * Update menu item data
				 */
				$id = wp_update_nav_menu_item($term->term_id, $menu_id, $args);


				$xmenu_meta = array(
					'menu-item-featured-style'  => $item['data']['menu-item-featured-style'],
					'menu-item-featured-text'   => $item['data']['menu-item-featured-text'],
					'menu-item-icon'            => $item['data']['menu-item-icon'],
					'menu-submenu-width'        => $item['data']['menu-submenu-width'],
					'menu-submenu-custom-width' => $item['data']['menu-submenu-custom-width'],
					'menu-submenu-position'     => $item['data']['menu-submenu-position'],
					'menu-submenu-transition'   => $item['data']['menu-submenu-transition']
				);
				/**
				 * Update xmenu meta
				 */
				update_post_meta((int)$menu_id, $this->get_menu_meta_key(), json_encode($xmenu_meta));
			}
			echo 1;
			die();
		}

		public function register_post_type_mega_menu() {
			$post_type = G5P()->cpt()->get_xmenu_post_type();
			$post_type_name = esc_html__('Mega Menu', 'auteur-framework');
			$singular_name = esc_html__('Mega Menu', 'auteur-framework');

			$args = array(
				'label'              => $post_type_name,
				'public'             => true,
				'publicly_queryable' => true,
				'show_ui'            => true,
				'show_in_menu'       => true,
				'query_var'          => true,
				'rewrite'            => array('slug' => $post_type),
				'capability_type'    => 'post',
				'has_archive'        => true,
				'hierarchical'       => false,
				'menu_position'      => 35,
				'supports'           => array('title', 'editor'),
				'labels'             => array(
					'name'                  => $post_type_name,
					'singular_name'         => $singular_name,
					'add_new_item'          => sprintf(__('Add New %s', 'auteur-framework'), $singular_name),
					'edit_item'             => sprintf(__('Edit %s', 'auteur-framework'), $singular_name),
					'new_item'              => sprintf(__('New %s', 'auteur-framework'), $singular_name),
					'view_item'             => sprintf(__('View %s', 'auteur-framework'), $singular_name),
					'search_items'          => sprintf(__('Search %s', 'auteur-framework'), $post_type_name),
					'not_found'             => sprintf(__('No %s found.', 'auteur-framework'), strtolower($post_type_name)),
					'not_found_in_trash'    => sprintf(__('No %s found in Trash.', 'auteur-framework'), strtolower($post_type_name)),
					'all_items'             => sprintf(__('All %s', 'auteur-framework'), $post_type_name),
					'archives'              => sprintf(__('%s Archives', 'auteur-framework'), $post_type_name),
					'insert_into_item'      => sprintf(__('Insert into %s', 'auteur-framework'), strtolower($singular_name)),
					'uploaded_to_this_item' => sprintf(__('Uploaded to this %s', 'auteur-framework'), strtolower($singular_name)),
					'filter_items_list'     => sprintf(__('Filter %s list', 'auteur-framework'), strtolower($post_type_name)),
					'items_list_navigation' => sprintf(__('%s list navigation', 'auteur-framework'), $post_type_name),
					'items_list'            => sprintf(__('%s list', 'auteur-framework'), $post_type_name),
				)
			);

			register_post_type($post_type, $args);
		}

		/**
		 * Get Menu Meta Key
		 */
		private function get_menu_meta_key() {
			return apply_filters('xmenu_meta_key', '_menu_item_xmenu_config');
		}
	}
}