HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: /home/mmickelson/tfgarchive/wpblogtest1.old/wp-content/themes/rt_nexus_wp/features/RokMenu.php
<?php
/**
 * @package     wp_nexus
 * @subpackage  features
 * @version     1.1 February 28, 2010
 * @author      RocketTheme http://www.rockettheme.com
 * @copyright   Copyright (C) 2007 - 2010 RocketTheme, LLC
 * @license     http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
 */

require_once(dirname(__FILE__).'/RokMenu/lib/RokMenuTree.php');
require_once(dirname(__FILE__).'/RokMenu/lib/BaseRokMenuFormatter.php');
require_once(dirname(__FILE__).'/RokMenu/lib/BaseRokMenuLayout.php');
require_once(dirname(__FILE__).'/RokMenu/lib/BaseRokMenuOptions.php');
require_once(dirname(__FILE__).'/RokMenu/lib/BaseRokMenuHeader.php');

/**
 * @package   wp_nexus
 * @subpackage features
 */
class RokMenu {

    function _defaults() {
        return array(
            'theme' => 'fusion',
            'show_home' => 1,
            'home_text' => 'Home',
            'limit_levels' => 0,
            'startLevel' => 0,
            'endLevel' => 0,
            'showAllChildren' => 1,
            'maxdepth' => 10,
            'exclude' => '',
            'echo' => 1,
            'sort_column' => 'menu_order',
        );
    }
    function render($args = '') {
        global $wp_query;

        $output = '';
        $current_page = 0;
        
        $defaults = RokMenu::_defaults();
        $r_temp = wp_parse_args( $args, $defaults );
        $theme_defaults = RokMenu::getThemeDefaults($r_temp['theme']);
        $full_defaults =  array_merge($defaults, $theme_defaults);
        $r = wp_parse_args( $args, $full_defaults );
        extract( $r, EXTR_SKIP );

        // sanitize, mostly to keep spaces out
        $r['exclude'] = preg_replace('/[^0-9,]/', '', $r['exclude']);

        // Allow plugins to filter an array of excluded pages (but don't put a nullstring into the array)
        $exclude_array = ( $r['exclude'] ) ? explode(',', $r['exclude']) : array();
        $r['exclude'] = implode( ',', apply_filters('wp_list_pages_excludes', $exclude_array) );

        $r['hierarchical'] = 0;

        $pages = get_pages($r);

        $current_page = $wp_query->get_queried_object_id();
        $menu = RokMenu::_getMenuTree($pages, $r);

        if (!empty($menu) && $menu !== false){
            $formatter = RokMenu::getFormatterInstance($r['theme'], $r);
            $layout = RokMenu::getLayoutInstance($r['theme'], $r);

            if ($formatter !== false && $layout !== false){
                $formatter->format_tree($menu);
                $output = $layout->render($menu);
            }
        }
        
        if ( $r['echo'] )
            echo $output;
        else
        return $output;
    }

    function _getMenuTree(&$pages, $args)
	{
        if (null == $pages){
            $pages = array();
        }

        $home_array = array();
        $menu = null;

        if ($args['show_home'] == 1) {
		$text = _r($args['home_text']);
        $home = new stdClass();
        $home->ID = 0;
        $home->post_parent = 0;
        $home->post_title = $text;
        $home_array = array($home);
        }

		// Get Menu Items
		$rows = array_merge($home_array,$pages);

        if (!empty($rows)){
            $menu = new RokMenuTree();
            $maxdepth = $args['maxdepth'];
            // Build Menu Tree root down (orphan proof - child might have lower id than parent)
            $ids = array();
            $ids[0] = true;
            $last = null;
            $unresolved = array();
            // pop the first item until the array is empty if there is any item
            if ( is_array($rows)) {
                while (count($rows) && !is_null($row = array_shift($rows)))
                {
                    if (!$menu->addNode($row)) {
                        if(!array_key_exists($row->id, $unresolved) || $unresolved[$row->id] < $maxdepth) {
                            array_push($rows, $row);
                            if(!isset($unresolved[$row->id])) $unresolved[$row->id] = 1;
                            else $unresolved[$row->id]++;
                        }
                    }
                }
            }
        }
		return $menu;
	}

    function getThemes(){
        $themes = array();

        $themes_dir = dirname(__FILE__).'/RokMenu/themes';
        if (file_exists($themes_dir) && is_dir($themes_dir)) {
            $d = dir($themes_dir);
            while (false !== ($entry = $d->read())) {
                if(!preg_match("/^\./", $entry)&& is_dir($themes_dir.'/'.$entry) ){
                    $themes[]=$entry;
                }
            }
        }
        return $themes;
    }

    function getThemeDefaults($theme) {
        $options = RokMenu::getOptionsInstance($theme);
        if ($options !== false) {
            return $options->getDefaults();            
        }
    }

    function getDefaults() {
        $defaults = RokMenu::_defaults();
        $themes = RokMenu::getThemes();
        foreach($themes as $theme) {
            $theme_options = RokMenu::getThemeDefaults($theme);
            $defaults =  array_merge($defaults, $theme_options);
        }
        return $defaults;
    }

    function getThemeForm($theme, &$widget, $args) {
        $option = RokMenu::getOptionsInstance($theme);
        if ($option !== false) {
            return $option->getForm($widget, $args);            
        }
    }
    
    function getOptionsInstance($theme) {
        $file = dirname(__FILE__).'/RokMenu/themes/'.$theme.'/options.php';
        $className = 'RokMenuOptions'.ucfirst($theme);
        if(!class_exists($className) && file_exists($file)) {
            require_once($file);
        }
        if (class_exists($className)) {
            return new $className();
        }
        else {
            return false;
        }
    }

    function getFormatterInstance($theme, $args) {
        $file = dirname(__FILE__).'/RokMenu/themes/'.$theme.'/formatter.php';
        $className = 'RokMenuFormatter'.ucfirst($theme);
        if(!class_exists($className) && file_exists($file)) {
            require_once($file);
        }
        if (class_exists($className)) {
            return new $className($args);
        }
        else {
            return false;
        }
    }
    
    function getLayoutInstance($theme, $args) {
        $file = dirname(__FILE__).'/RokMenu/themes/'.$theme.'/layout.php';
        $className = 'RokMenuLayout'.ucfirst($theme);
        if(!class_exists($className) && file_exists($file)) {
            require_once($file);
        }
        if (class_exists($className)) {
            return new $className($args);
        }
        else {
            return false;
        }
    }

    function getHeaderInstance($theme, $args) {
        $file = dirname(__FILE__).'/RokMenu/themes/'.$theme.'/header.php';
        $className = 'RokMenuHeader'.ucfirst($theme);
        if(!class_exists($className) && file_exists($file)) {
            require_once($file);
        }
        if (class_exists($className)) {
            return new $className($args);
        }
        else {
            return false;
        }
    }

}