/**
* Displays Site Links Navigation Bar
* @param string $sep - Custom seperator text
* @param string $class - Class
* @param array $options -
*
* Default $options parameters:
* id - unique navbar id
* container - true for container mode
* navbar_class - switch between navbar-default, navbar-inverse or custom class
* item_class - the default li class
* separator - default li separator
* callback_data - replace default data callback
*
* @param int $id - 0 for root , Sitelink_ID to show child only
* @return string
*/
function showsublinks($sep = "", $class = "", array $options = array(), $id = 0)
{
$default_options = array("id" => "", "container" => FALSE, "navbar_class" => "navbar-default", "item_class" => $class, "separator" => $sep, "callback_data" => array(), "links_per_page" => fusion_get_settings("links_per_page"), "grouping" => fusion_get_settings("links_grouping"), "show_banner" => false, "show_header" => false);
$options += $default_options;
if (empty($options['id'])) {
$options['id'] = md5(str_shuffle(str_replace(" ", "_", fusion_get_settings("sitename"))));
}
$pageInfo = pathinfo($_SERVER['REQUEST_URI']);
$start_page = $pageInfo['dirname'] !== "/" ? ltrim($pageInfo['dirname'], "/") . "/" : "";
$site_path = ltrim(fusion_get_settings("site_path"), "/");
$start_page = str_replace($site_path, "", $start_page);
$start_page .= $pageInfo['basename'];
if (fusion_get_settings("site_seo") && defined('IN_PERMALINK') && !isset($_GET['aid'])) {
global $filepath;
$start_page = $filepath;
}
$res =& $res;
if (empty($data) && empty($options['callback_data'])) {
$data = \PHPFusion\SiteLinks::get_SiteLinksData(array('link_position' => array(2, 3)));
// Is Equivalent to:
//$data = dbquery_tree_full(DB_SITE_LINKS, "link_id", "link_cat", "WHERE link_position >= 2".(multilang_table("SL") ? " AND link_language='".LANGUAGE."'" : "")." AND ".groupaccess('link_visibility')." ORDER BY link_cat ASC, link_order ASC");
} else {
$data = $options['callback_data'];
}
/**
* Change hierarchy data when grouping is on
*/
if ($options['grouping'] == true) {
if (count($data[0]) > $options['links_per_page']) {
$more_index = 9 * 10000000;
$base_data = $data[0];
$data[$more_index] = array_slice($base_data, $options['links_per_page'], 9, TRUE);
$data[0] = array_slice($base_data, 0, $options['links_per_page'], TRUE);
$more[$more_index] = array("link_id" => $more_index, "link_cat" => 0, "link_name" => fusion_get_locale("global_700"), "link_url" => "#", "link_icon" => "", "link_visibility" => 0, "link_position" => 2, "link_window" => 0, "link_order" => $options['links_per_page'], "link_language" => LANGUAGE);
$data[0] += $more;
}
}
$banner = fusion_get_settings("sitebanner") && $options['show_banner'] == true ? "<img src='" . BASEDIR . fusion_get_settings("sitebanner") . "' alt='" . fusion_get_settings("sitename") . "'/>" : fusion_get_settings("sitename");
if (empty($id)) {
$res = "<div id='" . $options['id'] . "' class='navbar " . $options['navbar_class'] . "' role='navigation'>\n";
$res .= $options['container'] ? "<div class='container'>\n" : "";
$res .= "<div class='navbar-header'>\n";
$res .= "<!---Menu Header Start--->\n";
$res .= "<button type='button' class='navbar-toggle collapsed' data-toggle='collapse' data-target='#phpfusion-menu' aria-expanded='false'>\n\t\t\t\t\t<span class='sr-only'>Toggle navigation</span>\n\t\t\t\t\t<span class='icon-bar'></span>\n\t\t\t\t\t<span class='icon-bar'></span>\n\t\t\t\t\t<span class='icon-bar'></span>\n \t\t\t</button>\n";
if ($options['show_header']) {
$res .= "<a class='navbar-brand' href='" . BASEDIR . fusion_get_settings('opening_page') . "'>{$banner}</a>\n";
} else {
$res .= "<a class='navbar-brand visible-xs hidden-sm hidden-md hidden-lg' href='" . BASEDIR . fusion_get_settings('opening_page') . "'>" . fusion_get_settings("sitename") . "</a>\n";
}
$res .= "<!---Menu Header End--->\n";
$res .= "</div>\n";
$res .= "<div class='navbar-collapse collapse' id='" . $id . "-menu'>\n";
$res .= "<ul " . (fusion_get_settings("bootstrap") ? "class='nav navbar-nav primary'" : "id='main-menu' class='primary sm sm-simple'") . ">\n";
$res .= "<!---Menu Item Start--->\n";
}
if (!empty($data)) {
$i = 0;
$default_link_data = array("link_id" => 0, "link_name" => "", "link_cat" => 0, "link_url" => "", "link_icon" => "", "link_active" => FALSE, "link_title" => FALSE, "link_disabled" => FALSE, "link_window" => FALSE);
foreach ($data[$id] as $link_id => $link_data) {
$link_data += $default_link_data;
$link_data['link_name'] = parsesmileys(parseubb($link_data['link_name']));
$li_class = $options['item_class'];
if ($link_data['link_disabled']) {
$li_class = "disabled";
} else {
if ($link_data['link_title'] == TRUE) {
$li_class = "dropdown-header";
}
}
// Attempt to calculate a relative link
$secondary_active = FALSE;
if ($start_page !== $link_data['link_url']) {
$link_instance = \PHPFusion\BreadCrumbs::getInstance();
$link_instance->showHome(FALSE);
$reference = $link_instance->toArray();
if (!empty($reference)) {
foreach ($reference as $refData) {
if (!empty($link_data['link_url']) && !empty($refData['link']) && $link_data['link_url'] !== "index.php") {
if (stristr($refData['link'], str_replace("index.php", "", $link_data['link_url']))) {
$secondary_active = TRUE;
}
break;
// match found
}
}
}
}
if ($link_data['link_name'] != "---" && $link_data['link_name'] != "===") {
$link_target = $link_data['link_window'] == "1" ? " target='_blank'" : "";
if ($i == 0 && $id > 0) {
$li_class .= ($li_class ? " " : "") . "first-link";
}
if ($start_page == $link_data['link_url'] || fusion_get_settings('site_path') . $start_page == $link_data['link_url'] || $secondary_active == TRUE || $start_page == fusion_get_settings("opening_page") && $i == 0 && $id === 0) {
$li_class .= ($li_class ? " " : "") . "current-link active";
}
$itemlink = BASEDIR . $link_data['link_url'];
if (preg_match("!^(ht|f)tp(s)?://!i", $link_data['link_url']) || !empty(BASEDIR) && stristr($link_data['link_url'], BASEDIR)) {
$itemlink = $link_data['link_url'];
}
$has_child = false;
$l_1 = "";
$l_2 = "";
$tab_index = "";
if (isset($data[$link_id])) {
$has_child = true;
$l_1 = "class='dropdown-toggle' data-toggle='dropdown' ";
$l_1 .= empty($id) && $has_child ? "data-submenu " : "";
$l_2 = empty($id) ? " <i class='caret'></i>\n" : "";
$li_class .= !empty($id) ? " dropdown-submenu" : " dropdown";
$tab_index .= !empty($id) ? "tabindex='0'" : "";
}
$res .= "<li" . ($li_class ? " class='" . $li_class . "'" : "") . ">" . $sep . "\n";
$res .= "<a " . $l_1 . "href='" . $itemlink . "'" . $link_target . " {$tab_index}>\n";
$res .= !empty($link_data['link_icon']) ? "<i class='" . $link_data['link_icon'] . "'></i>" : "";
$res .= $link_data['link_name'] . $l_2 . "</a>\n";
if ($has_child) {
$res .= "<ul" . (fusion_get_settings("bootstrap") ? " class='dropdown-menu'" : "") . ">\n";
if (!empty($link_data['link_url']) and $link_data['link_url'] !== "#") {
$res .= "<li>" . $options['separator'] . "\n";
$res .= "<a href='" . $itemlink . "'" . $link_target . ">\n";
$res .= !empty($link_data['link_icon']) ? "<i class='" . $link_data['link_icon'] . "'></i>" : "";
$res .= $link_data['link_name'] . "</a>\n";
$res .= "</li>\n";
}
$res .= showsublinks($sep, $class, $options, $link_data['link_id']);
$res .= "</ul>\n";
}
$res .= "</li>\n";
} elseif ($link_data['link_cat'] > 0) {
$res .= "<li class='divider'></li>";
}
$i++;
}
}
if (empty($id)) {
$res .= "<!---Menu Item End--->\n";
$res .= "</ul>\n";
$res .= $options['container'] ? "</div>\n" : "";
$res .= "</div>\n</div>\n";
}
return $res;
}