HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/globfdxw/www/wp-content/plugins/ubermenu/pro/menuitems/UberMenuItemTabs_relative.class.php
<?php


	//ID is the numeric ID of the [Tabs] Menu Item  ex "269"
		//This item does not actually produce any output apart from the 
		//HTML comments denoting start and end.  What it does is create two new items:
		//Tabs (Group) and Panels (Group)

	//Tabs ID is the Tabs Group child for this menu item ex "tabs-269"
	//Panels Group ID is the Panels child for this Tab Group ex "panels-group-269"
	
	//Each Tab has an ID ($tab->ID) based on the ID of the child item of [Tabs]
		//which comprises the individual tabs.  e.g. "242"
	//Each individual PANEL (which is a submenu of the Tab) has an ID based on the parent tab
		//e.g. "panel-242"




/*
 This item does not produce any output, it just rearranges this children
 so that their output is set up appropriately
 */
class UberMenuItemTabs extends UberMenuItem{

	protected $type = 'tabs';
	protected $auto_child = 'toggle';
	protected $alter_structure = true;

	function init(){

		if( $this->depth == 0 ){
			$this->walker->set_ignore( $this->ID );

			$this->branch_prefix = $this->walker->get_branch_prefix();
		}

	}


	function alter( &$children ){

		if( !isset( $children[$this->source_id] ) ) return;


		//Keep track of the original children
		//$my_children = $children[$this->ID];
		$my_children = $children[$this->source_id];	//in case parent is dynamic

		


		//The original children become the children of the new Tabs Group
		$tabs_id = 'tabs-'.$this->ID;
		$children[$tabs_id] = $my_children;

		
		//The children of the original Tabs become the children of the new Panels Group
		//TODO: test for tabs, or keep traversing if the child items are anything but normal menu items (skip columns, for example?)
		$panels_group_id = 'panels-group-'.$this->ID;
		$children[$panels_group_id] = array();

//echo 'created '.$panels_group_id.'<br/>';



		///////////////////////////////////////
		/// CREATE TABS FOR THE TOGGLE GROUP
		///////////////////////////////////////


		//For each child item (these are the Tabs/Toggles), create a new Content Panel
		//to hold its children.  Then copy over the children into that panel
		foreach( $my_children as $k => $tab ){
			//$tab is WP_Post object
			
			//Only move the children if this tab actually has children
			if( isset( $children[$tab->ID] ) ){
				$panel_id = 'panel-'.$tab->ID;
//echo '<em>Panel ID: '.$panel_id.'</em><br/>';

//echo 'add to ' . $panels_group_id;
				//Add Content Panel to Panels Group
				$children[$panels_group_id][] 
					= new UberMenu_dummy_item( 
							$panel_id , 
							'toggle_content_panel' , 
							'Toggle Content Panel' ,
							$tab->ID,
							array( 'menu_item_parent' => $panels_group_id , 'original_parent_id' => $this->ID ),
							array()

				);

				//Move the children of the menu item that became the tab
				//into the Content Panel for that tab
				
//echo 'add kids for ' .$tab->ID;
				
				
				//$panel_reference_index = $this->create_reference( $tab->ID , $children );
				//$children[$panel_id] = $children[$panel_reference_index];
//echo '[['.$tab->ID. ']]<br/>';
				$children[$panel_id] = $children[$tab->ID];

				//??
				//$reference_index = $this->create_reference( $tab->ID , $children );
				//$children[$panel_id] = $children[$reference_index];

				
/*				//This part is for Dynamic child content
				$_kids = array();

				foreach( $children[$tab->ID] as $kid ){
					$clone_id = $kid->ID . '-panel-' . $tab->ID;

					$clone = clone $kid;
					$clone->ID = $clone_id;
					//$clone->db_id = $clone_id;
					$clone->menu_item_parent = $panels_group_id;

					$_kids[] = $clone;

					//$this->walker->set_ignore( $kid->ID );
				}
				
				$children[$panel_id] = $_kids;
*/



				//These children are no longer children of this tab,
				//they are now only children of the panel
				

				//$this->walker->set_ignore_children( $tab->ID );
				//$this->create_reference( $tab->ID , $children );

				unset( $children[$tab->ID] );
				//$this->walker->set_ignore_children( $tab->ID );
				//$this->walker->feed_trash_collector( $tab->ID );


				//$this->walker->set_ignore( $tab->ID );
				//foreach( $children[$tab->ID] as $kid ){
				// 	$this->walker->set_ignore( $kid->ID );
				//}

//echo 'Create Dummy Panel ' . $panel_id . '<br/>';
//up( $children , 2 );
			}

			//Make a reference 
			$panels_group_reference_index = $this->create_reference( $panels_group_id , $children );

		}

		$tab_layout = $this->getSetting( 'tab_layout' );
		$tab_layout_class = 'ubermenu-tab-layout-'.$tab_layout;

		$tabs_group_layout = $this->getSetting( 'tabs_group_layout' );
		$panels_group_layout = $this->getSetting( 'panels_group_layout' );

		if( $tab_layout == 'right' || $tab_layout == 'left' ){
			if( $tabs_group_layout == 'auto' ) $tabs_group_layout = '1-4';
			if( $panels_group_layout == 'auto' ) $panels_group_layout = '3-4';
		}
		
		$tabs_column_class = 'ubermenu-column ubermenu-column-'.$tabs_group_layout; //' ubermenu-column-1-3';
		$panels_column_class = 'ubermenu-column ubermenu-column-'.$panels_group_layout; //ubermenu-column-2-3';
		
		
		$tabs_default_panel_class = $panels_default_panel_class = '';
		if( $this->getSetting( 'show_default_panel' ) == 'on' ){
			$tabs_default_panel_class = $panels_default_panel_class = 'ubermenu-toggle-show-default';
		}


		
		////////////////////////////////////////////////////
		/// Setup the Tabs and Panels wrappers for this item
		////////////////////////////////////////////////////
		
		$children[$this->ID] = array();

		//Tab Group
		$this->settings['menu_item_parent'] = $this->source_id; //$this->ID;
		$tab_group = new UberMenu_dummy_item( 
						$tabs_id , 
						'toggle_group' , 
						'Toggle Group' , 
						$this->ID ,
						$this->settings,
						array( $tab_layout_class , $tabs_column_class , $tabs_default_panel_class )
					);


		//Panels Group
		$this->settings['menu_item_parent'] = $this->source_id; //$this->ID;
		$panel_group = new UberMenu_dummy_item( 
						$panels_group_id , 
						'toggle_content_panels_group' , 
						'Toggle Content Panels Group' , 
						$this->ID ,
						$this->settings,
						array( $tab_layout_class , $panels_column_class , $panels_default_panel_class )
					);

		//Reorder to move before/after
		if( $tab_layout == 'right' || $tab_layout == 'bottom' ){
			$children[$this->ID][] = $panel_group;
			$children[$this->ID][] = $tab_group;
		}
		else{
			$children[$this->ID][] = $tab_group;
			$children[$this->ID][] = $panel_group;
		}



		//Find Tabs - only menu items, not custom UberMenu types
		//Find Tabs children (Content Panels)
		//Create new wrapper element
	}

	function get_start_el(){
		$this->setupAutoChild();
		//$this->settings['submenu_type_calc'] = 'toggles-group';
		return "<!-- begin Tabs: ".$this->item->title." $this->ID -->";
	}
	function get_end_el(){
		$this->resetAutoChild();
		return "<!-- end Tabs: ".$this->item->title." $this->ID -->";
	}


	/* No submenus for the Tabs Item */
	function get_submenu_wrap_start(){
		return '';
	}
	function get_submenu_wrap_end(){
		return '';
	}
}

/* An individual toggle item (regular menu item) */
class UberMenuItemToggle extends UberMenuItem{

	protected $type = 'toggle';
	protected $auto_child = 'toggle-content-panel';	

	function get_start_el(){

		$this->setupAutoChild();

		$this->settings['submenu_type_calc'] = 'toggles-content-panel';

		//Variable Initialization
		$item_output = '';
		$class_names = $value = '';

		//Setup Classes
		$this->add_class_item_defaults();
		$this->add_class_id();
		$this->prefix_classes();
		$this->add_class_item_display();
		$this->add_class_level();
		$this->add_class_layout_columns();
		//$this->add_class_submenu();	//Tabs won't have submenus, add manually
		$this->item_classes[] = 'ubermenu-has-submenu-drop';
//echo '>> ' . $this->item->title . ' : ' . implode(',' , $this->item_classes ) .'<br/>';

		$this->item_classes[] = 'ubermenu-toggle';

		$class_names = $this->filter_item_classes();

		//Setup ID
		$id = $this->filter_item_id();

		//Data target
		$data_target = ' data-ubermenu-toggle-target="#ubermenu-panel-'.$this->ID.'"';

		//Item LI
		$item_output .= '<li' . $id . $value . $class_names . $data_target .'>';

		//Anchor
		$atts = $this->anchor_atts(); //Attributes
		//$atts['data-ubermenu-toggle-target'] = '#ubermenu-panel-'.$this->ID;
		$item_output .= $this->get_anchor( $atts );

		//Custom Content
		$item_output .= $this->get_custom_content();

		return $item_output;

	}

	function get_end_el(){
		$this->resetAutoChild();
		$item_output = "</li>"; //<!-- end tabs group wrap ".$this->item->ID."-->\n";
		return $item_output;
	}

	function get_submenu_wrap_start(){

		$id = 'id="ubermenu-panel-'.$this->ID.'"';
		$class = 'class="ubermenu-submenu ubermenu-toggle-content-panel"';
		$out = "<ul $id $class>";
		return $out;
	}
}

/* A wrapper for a group of toggles - Dummy */
class UberMenuItemToggleGroup extends UberMenuItem{

	protected $type = 'toggle_group';

	function get_settings(){
		//up( $this->item );
		return $this->item->settings;
	}

	function get_start_el(){

		$this->settings['submenu_type_calc'] = 'toggles-group';
		$classes = array();
		$classes[] = 'ubermenu-tabs';
		$classes[] = 'ubermenu-toggles-group-wrap';
		$classes = array_merge( $classes , $this->item->classes );

		$class= 'class="'.implode( ' ' , $classes ).'"';

		$id = 'id="ubermenu-'.$this->ID.'"';

		return "<li $id $class>";
	}
	function get_submenu_wrap_start(){
		$trigger = $this->getSetting( 'tabs_trigger' );
		$data = 'data-ubermenu-toggle-trigger="'.$trigger.'"';
		
		$class = 'class="ubermenu-submenu ubermenu-toggles-group"';

		return "<ul $class $data>";
	}
	
}

/* An individual Panel that a Toggle is linked to */
class UberMenuItemToggleContentPanel extends UberMenuItem{

	//ref_id is the parent item (the tab)

	protected $type = 'toggle_content_panel';
	protected $auto_child = '';

	function get_term_id(){

		if( isset( $this->item->settings ) && isset( $this->item->settings['term_id'] ) ){
			return $this->item->settings['term_id'];
		}
		return false;
	}

	function get_start_el(){

//echo '<br/><br/>UberMenuItemToggleContentPanel  ** '. $this->ID;

		if( isset( $this->item->settings['ignore'] ) && $this->item->settings['ignore'] ){
			//echo 'ignore';
			//return;
		}

		$this->setupAutoChild();

		//Get the settings of the parent menu item for this panel
		$ref_settings = get_post_meta( $this->item->ref_id, UBERMENU_MENU_ITEM_META_KEY , true );
//up( $ref_settings );
		$this->settings['submenu_type_calc'] = 'stack';
		
		$col_def = isset( $ref_settings['submenu_column_default'] ) ? $ref_settings['submenu_column_default'] : 'auto';
		if( $col_def == 'auto' ) $col_def = '1-3';	//Default to 1/3 for 
		$this->settings['submenu_column_default'] = $col_def;

			//$this->walker->get_item_setting( $this->item->ref_id , 'submenu_column_default' );//$this->walker->parent_item()->getSetting( 'submenu_column_default' );

		$classes = array();
		$classes[] = 'ubermenu-submenu ubermenu-toggle-content-panel';
		$classes[] = 'ubermenu-submenu-id-'.$this->item->ref_id;

		//Background Image
		if( isset( $ref_settings['submenu_background_image'] ) && $ref_settings['submenu_background_image'] ){
			$classes[] = 'ubermenu-submenu-bkg-img';
		}



		$class = 'class="'.implode( ' ' , $classes ).'"';
		$id = 'id="ubermenu-'.$this->ID.'"';
		return "<ul $id $class >";
	}
	function get_end_el(){

		if( isset( $this->item->settings['ignore'] ) && $this->item->settings['ignore'] ){
			//return;
		}

		$this->resetAutoChild();

		$html = '';

		$ref_settings = get_post_meta( $this->item->ref_id, UBERMENU_MENU_ITEM_META_KEY , true );

		//Submenu Footer Content
		if( isset( $ref_settings['submenu_footer_content'] ) && $ref_settings['submenu_footer_content'] ){ 
			$html.= '<li class="ubermenu-submenu-footer ubermenu-submenu-footer-id-'.$this->item->ref_id.'">'.$ref_settings['submenu_footer_content'].'</li>';
		}

		$html.= '</ul>';

		return $html;
	}

	/* No submenus for the Content Panel */
	function get_submenu_wrap_start(){
		return '';
	}
	function get_submenu_wrap_end(){
		return '';
	}
}

/* A wrapper for a group of Toggle Panels - Dummy */
class UberMenuItemToggleContentPanelsGroup extends UberMenuItem{

	//protected $alter_structure = true;
	protected $type = 'toggle_content_panels_group';

/*
	function alter( &$children ){

		$panels_group_id = $this->ID;

		echo 'before '. $panels_group_id;
up( $children[$panels_group_id] );

			$panels_group_reference_index = $this->create_reference( $panels_group_id , $children );

			//Restore
			$children[$panels_group_id] = $children[$panels_group_reference_index];

echo 'after ' . $panels_group_id. ' :: from :: ' . $panels_group_reference_index ;
up( $children[$panels_group_id] );

	}
*/

	function get_settings(){
		//up( $this->item );
		return $this->item->settings;
	}

	function get_start_el(){

		$this->settings['submenu_type_calc'] = 'stack';

		$classes = array();
		$classes[] = 'ubermenu-tabs-panels';
		$classes[] = 'ubermenu-toggle-contents-group';
		$classes = array_merge( $classes , $this->item->classes );

		$class = 'class="'.implode( ' ' , $classes ).'"';

		$id = 'id="ubermenu-'.$this->ID.'"';

		return "<li $id $class>";
		//return "<!-- Begin Toggle Content Panels Group ".$this->ID."--><li $id $class>";
	}
	// function get_end_el(){
	// 	return "</li><!-- End Toggle Content Panels Group ".$this->ID."-->";
	// }

	/* No submenus for the content panels group */
	function get_submenu_wrap_start(){
		return '';
	}
	function get_submenu_wrap_end(){
		return '';
	}
}