'; $sec = (string) get_parameter ('sec'); $sec2 = (string) get_parameter ('sec2'); $menu_selected = false; $allsec2 = explode('sec2=', $_SERVER['REQUEST_URI']); if (isset($allsec2[1])) { $allsec2 = $allsec2[1]; } else { $allsec2 = $sec2; } //Open list of menu echo ''; foreach ($menu as $mainsec => $main) { $extensionInMenuParameter = (string) get_parameter ('extension_in_menu',''); $showSubsection = true; if ($extensionInMenuParameter != '') { if ($extensionInMenuParameter == $mainsec) $showSubsection = true; else $showSubsection = false; } if ($mainsec == 'class') continue; //~ if (enterprise_hook ('enterprise_acl', array ($config['id_user'], $mainsec)) == false) //~ continue; if (! isset ($main['id'])) { $id = 'menu_'.++$idcounter; } else { $id = $main['id']; } $submenu = false; $classes = array ('menu_icon'); if (isset ($main["sub"])) { $classes[] = ''; $submenu = true; } if (!isset ($main["refr"])) $main["refr"] = 0; if (($sec == $mainsec) && ($showSubsection)) { $classes[] = ''; } else { $classes[] = ''; if ($extensionInMenuParameter == $mainsec) $classes[] = ''; } $output = ''; if (! $submenu) { $main["sub"] = array (); //Empty array won't go through foreach } $submenu_output = ''; $count_sub = 0; $count_sub_access = 0; $first_sub_sec2 = ''; foreach ($main["sub"] as $subsec2 => $sub) { $count_sub++; //Init some variables $visible = false; $selected = false; $subsec2 = io_safe_output($subsec2); // Choose valid suboptions (sec2) $check_2 = true; if (isset($sub['sub2'])) $check_2 = false; if (enterprise_hook ('enterprise_acl', array ($config['id_user'], $mainsec, $subsec2, $check_2)) == false) { continue; } // We store the first subsection to use it if the main section has not access if ($count_sub_access == 0) { $first_sub_sec2 = $subsec2; } $count_sub_access++; $class = ''; $selected_submenu2 = false; //Look for submenus in level2! if (isset($sub['sub2'])) { $class .= 'has_submenu '; //This hacks avoid empty delimiter error when sec2 is not provided. if (!$sec2) { $sec2 = " "; } //Check if some submenu was selected to mark this (the parent) as selected foreach (array_keys($sub['sub2']) as $key) { if (strpos($key, $sec2) !== false) { $selected_submenu2 = true; break; } } } //Create godmode option if submenu has godmode on if (isset($sub['subsecs'])) { //Sometimes you need to add all paths because in the //same dir are code from visual console and reports //for example if (is_array($sub['subsecs'])) { //Compare each string foreach ($sub['subsecs'] as $god_path) { if (strpos($sec2, $god_path) !== false) { $selected_submenu2=true; break; } } } else { //If there is only a string just compare if (strpos($sec2, $sub['subsecs']) !== false) { $selected_submenu2=true; } } } //Set class if (($sec2 == $subsec2 || $allsec2 == $subsec2 || $selected_submenu2) && isset ($sub[$subsec2]["options"]) && ( get_parameter_get ($sub[$subsec2]["options"]["name"]) == $sub[$subsec2]["options"]["value"]) ) { //If the subclass is selected and there are options and that options value is true $class .= 'submenu_selected selected'; $menu_selected = true; $selected = true; $visible = true; } elseif (($sec2 == $subsec2 || $allsec2 == $subsec2|| $selected_submenu2) && !isset ($sub[$subsec2]["options"])) { $class .= 'submenu_selected selected'; $selected = true; $menu_selected = true; $hasExtensions = (array_key_exists('hasExtensions',$main)) ? $main['hasExtensions'] : false; if (($extensionInMenuParameter != '') && ($hasExtensions)) $visible = true; else $visible = false; } elseif (isset($sub['pages']) && (array_search($sec2, $sub['pages']) !== false)) { $class .= 'submenu_selected selected'; $menu_selected = true; $selected = true; $visible = true; } else { //Else it's not selected $class .= 'submenu_not_selected'; } if (! isset ($sub["refr"])) { $sub["refr"] = 0; } // Define submenu class to draw tree image if($count_sub >= count($main['sub'])) { $sub_tree_class = 'submenu_text submenu_text_last'; } else { $sub_tree_class = 'submenu_text submenu_text_middle'; } if (isset ($sub["type"]) && $sub["type"] == "direct") { //This is an external link $submenu_output .= '
  • '; if (isset ($sub["subtype"]) && $sub["subtype"] == "nolink") { $submenu_output .= ''; } else if (isset ($sub["subtype"]) && $sub["subtype"] == "new_blank") $submenu_output .= '
    '.$sub["text"].'
    '; else $submenu_output .= '
    '.$sub["text"].'
    '; } else { //This is an internal link if (isset ($sub[$subsec2]["options"])) { $link_add = "&".$sub[$subsec2]["options"]["name"]."=".$sub[$subsec2]["options"]["value"]; } else { $link_add = ""; } $submenu_output .= '
  • '; //Ini Add icon extension $secExtension = null; if (array_key_exists('extension',$sub)) $secExtensionBool = $sub["extension"]; else $secExtensionBool = false; // DISABLE SUBMENU IMAGES $secExtensionBool = false; if ($secExtensionBool) { //$imageIconDefault = 'images/extensions.png'; if (strlen($sub["icon"]) > 0) { $icon_enterprise = false; if (isset($sub['enterprise'])) { $icon_enterprise = (bool)$sub['enterprise']; } if ($icon_enterprise) { $imageIcon ='enterprise/extensions/'.$sub["icon"]; } else { $imageIcon ='extensions/'.$sub["icon"]; } if (!file_exists(realpath($imageIcon))) $imageIcon = $imageIconDefault; } else { $imageIcon = $imageIconDefault; } //$submenu_output .= '
     
    '; } $secExtension = null; if (array_key_exists('sec',$sub)) $secExtension = $sub["sec"]; if (strlen($secExtension) > 0) { $secUrl = $secExtension; $extensionInMenu = 'extension_in_menu='.$mainsec.'&'; } else { $secUrl = $mainsec; $extensionInMenu = ''; } if (isset ($sub["text"]) || $selected) { $title = ' title="' . $sub["text"] . ' "'; } else { $title = ''; } $submenu_output .= '' . '
    '.$sub["text"].'
    ' . '
    '; if (isset($sub['sub2'])) { //$submenu_output .= html_print_image("include/styles/images/toggle.png", true, array("class" => "toggle", "alt" => "toogle")); } } //Print second level submenu if (isset($sub['sub2'])) { //Display if father is selected $display = "style='display:none;'"; if ($selected) { $display = ""; } $submenu2_list = ''; $count_sub2 = 0; foreach ($sub['sub2'] as $key => $sub2) { if (enterprise_hook ('enterprise_acl', array ($config['id_user'], $mainsec, $subsec2, false, $key)) == false) { continue; } $count_sub2++; if (isset ($sub2["type"]) && $sub2["type"] == "direct") { if (isset ($sub2["subtype"]) && $sub2["subtype"] == "new_blank") $link = $key . '"' . 'target = \'_blank\''; } else $link = "index.php?sec=".$subsec2."&sec2=".$key; $class = "sub_subMenu"; if ($key == $sec2) { $class .= " selected"; } // Define submenu2 class to draw tree image if($count_sub2 >= count($sub['sub2'])) { $sub_tree_class = 'submenu_text submenu2_text_last'; } else { $sub_tree_class = 'submenu_text submenu2_text_middle'; } if (isset($sub2['title'])) $sub_title = $sub2['title']; else $sub_title = ''; $submenu2_list .= '
  • '; $submenu2_list .= '
    '. $sub2["text"].'
  • '; $sub_title = ''; } //Add submenu2 to submenu string $submenu_output .= ""; } //Submenu close list! $submenu_output .= ''; } // Choose valid section (sec) if (enterprise_hook ('enterprise_acl', array ($config['id_user'], $mainsec, $main["sec2"])) == false) { if ($count_sub_access > 0) { // If any susection have access but main section not, we change main link to first subsection found $main["sec2"] = $first_sub_sec2; } else { continue; } } if ($menu_selected) $seleccionado = 'selected'; else $seleccionado = ''; //Print out the first level $output .= '
  • '; //onclick="location.href=\'index.php?sec='.$mainsec.'&sec2='.$main["sec2"].($main["refr"] ? '&refr='.$main["refr"] : '').'\'">'; $length = strlen(__($main["text"])); $padding_top = ( $length >= 18) ? 6 : 12; $output .= ''; // Add the notification ball if defined if (isset($main["notification"])) { $output .= '
    ' . $main["notification"] . '
    '; } $padding_top = 0; $length = 0; //$output .= html_print_image("include/styles/images/toggle.png", true, array("class" => "toggle", "alt" => "toogle")); if ($submenu_output != '') { //WARNING: IN ORDER TO MODIFY THE VISIBILITY OF MENU'S AND SUBMENU'S (eg. with cookies) YOU HAVE TO ADD TO THIS ELSEIF. DON'T MODIFY THE CSS if ($visible || in_array ("selected", $classes)) { $visible = true; } if (!$showSubsection) { $visible = false; } $output .= ''; } $output .= '
  • '; echo $output; $menu_selected = false; } //Finish menu echo ''; //Invisible UL for adding border-top echo ''; } /** * Get all the data structure of menu. Operation and Godmode * * @return array Menu structure. */ function menu_get_full_sec() { global $menu_operation; global $menu_godmode; if ($menu_godmode == null || $menu_operation == null) { return array(); } else { $menu = $menu_operation + $menu_godmode; } unset($menu['class']); menu_add_extras($menu); return $menu; } /** * Build an extra access pages array and merge it with menu * * @param menu array (pass by reference) * */ function menu_add_extras(&$menu) { global $config; $menu_extra = array(); $menu_extra['gusuarios']['sub']['godmode/users/configure_user']['text'] = __('Configure user'); $menu_extra['gusuarios']['sub']['godmode/users/configure_profile']['text'] = __('Configure profile'); $menu_extra['gservers']['sub']['godmode/servers/manage_recontask_form']['text'] = __('Manage recontask'); $menu_extra['gmodules']['sub']['godmode/modules/manage_network_templates_form']['text'] = __('Module templates management'); $menu_extra['gmodules']['sub']['enterprise/godmode/modules/manage_inventory_modules_form']['text'] = __('Inventory modules management'); $menu_extra['gmodules']['sub']['godmode/tag/edit_tag']['text'] = __('Tags management'); $menu_extra['gagente']['sub']['godmode/agentes/configurar_agente']['text'] = __('Agents management'); $menu_extra['estado']['sub']['operation/agentes/ver_agente']['text'] = __('View agent'); $menu_extra['galertas']['sub']['godmode/alerts/configure_alert_template']['text'] = __('Configure alert template'); $menu_extra['network']['sub']['operation/agentes/networkmap']['text'] = __('Manage network map'); $menu_extra['network']['sub']['operation/visual_console/render_view']['text'] = __('View visual console'); $menu_extra['network']['sub']['godmode/reporting/visual_console_builder']['text'] = __('Builder visual console'); $menu_extra['eventos']['sub']['godmode/events/events']['text'] = __('Administration events'); $menu_extra['reporting']['sub']['operation/reporting/reporting_viewer']['text'] = __('View reporting'); $menu_extra['reporting']['sub']['godmode/reporting/graph_builder']['text'] = __('Manage custom graphs'); $menu_extra['reporting']['sub']['enterprise/dashboard/dashboard_replicate']['text'] = __('Copy dashboard'); if ($config['activate_gis']) $menu_extra['godgismaps']['sub']['godmode/gis_maps/configure_gis_map']['text'] = __('Manage GIS Maps'); $menu_extra['workspace']['sub']['operation/incidents/incident_statistics']['text'] = __('Incidents statistics'); $menu_extra['workspace']['sub']['operation/messages/message_edit']['text'] = __('Manage messages'); $menu_extra['gagente']['sub']['godmode/groups/configure_group']['text'] = __('Manage groups'); $menu_extra['gagente']['sub']['godmode/groups/configure_modu_group']['text'] = __('Manage module groups'); $menu_extra['gagente']['sub']['godmode/agentes/configure_field']['text'] = __('Manage custom field'); $menu_extra['galertas']['sub']['godmode/alerts/configure_alert_action']['text'] = __('Manage alert actions'); $menu_extra['galertas']['sub']['godmode/alerts/configure_alert_command']['text'] = __('Manage commands'); $menu_extra['galertas']['sub']['enterprise/godmode/alerts/alert_events']['text'] = __('Manage event alerts'); $menu_extra['gservers']['sub']['enterprise/godmode/servers/manage_export_form']['text'] = __('Manage export targets'); $menu_extra['estado']['sub']['enterprise/godmode/services/manage_services']['text'] = __('Manage services'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); $menu_extra['estado']['sub']['enterprise/godmode/snmpconsole/snmp_trap_editor']['text'] = __('SNMP trap editor'); $menu_extra['estado']['sub']['snmpconsole']['sub2']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); $menu_extra['estado']['sub']['snmpconsole']['sub2']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); $menu_extra['workspace']['sub']['operation/incidents/incident_detail']['text'] = __('Manage incident'); $menu_extra['reporting']['sub']['godmode/reporting/visual_console_builder']['text'] = __('Manage visual console'); // Duplicate extensions as sec=extension to check it from url foreach ($menu as $k => $m) { if (!isset($m['sub'])) { continue; } foreach ($m['sub'] as $kk => $mm) { if (isset($mm['sec'])) { $menu_extra[$mm['sec']]['sub'][$kk]['text'] = $mm['text']; } } } $menu = array_merge_recursive($menu, $menu_extra); //Remove the duplicate the text entries. foreach ($menu as $k => $m) { if (!empty($m['text'])) { if (is_array($m['text'])) { $menu[$k]['text'] = reset($m['text']); } } } } /** * Get the sec list built in menu * * @param bool If true, the array returned will have the structure * to combo categories (optgroup) * * @return array Sections list */ function menu_get_sec($with_categories = false) { $menu = menu_get_full_sec(); unset($menu['class']); $in_godmode = false; foreach ($menu as $k => $v) { if ($with_categories) { if (!$in_godmode && $k[0] == 'g') { // Hack to dont confuse with gis activated because godmode // sec starts with g (like gismaps) if ($k != 'gismaps') { $in_godmode = true; } } if ($in_godmode) { $category = __('Administration'); } else { $category = __('Operation'); } $sec_array[$k]['optgroup'] = $category; $sec_array[$k]['name'] = $v['text']; } else { $sec_array[$k] = $v['text']; } } return $sec_array; } /** * Get the sec list built in menu * * @param bool If true, the array returned will have the structure * to combo categories (optgroup) * * @return array Sections list */ function get_sec($sec = false) { $menu = menu_get_full_sec(); unset($menu['class']); $in_godmode = false; foreach ($menu as $k => $v) { if (isset($v["sub"][$sec])) return $k; } return false; } /** * Get the pages in a section * * @param string sec code * @param string menu hash. All the menu structure (For example * returned by menu_get_full_sec(), json encoded and after that * base64 encoded. If this value is false this data is obtained from * menu_get_full_sec(); * * @return array Sections list */ function menu_get_sec_pages($sec, $menu_hash = false) { if (!$menu_hash) { $menu = menu_get_full_sec(); } else { $menu = json_decode(base64_decode($menu_hash),true); } $sec2_array = array(); if (isset($sec)) { // Get the sec2 of the main section $sec2_array[$menu[$sec]['sec2']] = $menu[$sec]['text']; // Get the sec2 of the subsections foreach ($menu[$sec]['sub'] as $k => $v) { // Avoid special cases of standalone windows if (preg_match('/^javascript:/', $k) || preg_match('/\.php/', $k)) { continue; } // If this value has various parameters, we only get the first $k = explode('&',$k); $k = $k[0]; $sec2_array[$k] = $v['text']; } } return $sec2_array; } /** * Get the pages in a section2 * * @param string sec code * @param string menu hash. All the menu structure (For example * returned by menu_get_full_sec(), json encoded and after that * base64 encoded. If this value is false this data is obtained from * menu_get_full_sec(); * * @return array Sections list */ function menu_get_sec2_pages($sec, $sec2, $menu_hash = false) { if ($menu_hash === false) { $menu = menu_get_full_sec(); } else { $menu = json_decode(base64_decode($menu_hash),true); } $sec3_array = array(); if (isset($menu[$sec]['sub']) AND isset($menu[$sec]['sub'][$sec2]['sub2'])) { // Get the sec2 of the subsections foreach ($menu[$sec]['sub'][$sec2]['sub2'] as $k => $v) { $sec3_array[$k] = $v['text']; } } return $sec3_array; } /** * Check if a page (sec2) is in a section (sec) * * @param string section (sec) code * @param string page (sec2)code * * @return true if the page is in section, false otherwise */ function menu_sec2_in_sec($sec,$sec2) { $sec2_array = menu_get_sec_pages($sec); // If this value has various parameters, we only get the first $sec2 = explode('&',$sec2); $sec2 = $sec2[0]; if ($sec2_array != null && in_array($sec2,array_keys($sec2_array))) { return true; } return false; } function menu_sec3_in_sec2($sec,$sec2,$sec3) { $sec3_array = menu_get_sec2_pages($sec, $sec2, $menu_hash = false); // If this value has various parameters, we only get the first $sec3 = explode('&',$sec3); $sec3 = $sec3[0]; if ($sec3_array != null && in_array($sec3,array_keys($sec3_array))) { return true; } return false; } ?>