\n"; print "\n"; } if (cacti_sizeof($branches)) { foreach ($branches as $leaf) { if ($leaf['parent'] == 0) { $tier = 1; } $indent = str_repeat('-', $tier); if ($selected_tree_item_id == $leaf['id']) { $html_selected = ' selected'; } else { $html_selected = ''; } print "'; grow_dropdown_tree($tree_id, $leaf['id'], $form_name, $selected_tree_item_id, $tier); } } if ($parent == 0) { print "\n"; } } function grow_dhtml_trees() { global $config; include_once($config['library_path'] . '/data_query.php'); html_validate_tree_vars(); $default_tree_id = read_user_setting('default_tree_id'); if (empty($default_tree_id)) { $user = db_fetch_row_prepared('SELECT policy_trees FROM user_auth WHERE id = ?', array($_SESSION['sess_user_id'])); if ($user['policy_trees'] == 1) { $default_tree_id = db_fetch_cell_prepared('SELECT graph_tree.id FROM graph_tree LEFT JOIN user_auth_perms ON user_auth_perms.item_id = graph_tree.id AND user_auth_perms.type = 2 AND user_auth_perms.user_id = ? WHERE user_auth_perms.item_id IS NULL AND graph_tree.enabled = "on" ORDER BY graph_tree.id LIMIT 1', array($_SESSION['sess_user_id'])); } else { $default_tree_id = db_fetch_cell_prepared('SELECT graph_tree.id FROM graph_tree INNER JOIN user_auth_perms ON user_auth_perms.item_id = graph_tree.id AND user_auth_perms.type = 2 AND user_auth_perms.user_id = ? WHERE graph_tree.enabled = "on" ORDER BY graph_tree.id LIMIT 1', array($_SESSION['sess_user_id'])); } } else { $default_tree_id = db_fetch_cell('SELECT id FROM graph_tree ORDER BY sequence LIMIT 1'); } print "
" . __('Search') . "
\n"; $dhtml_tree = create_dhtml_tree(); if (cacti_sizeof($dhtml_tree)) { print "
\n"; } ?> 0) { $nstack .= '-site-' . get_request_var('site_id'); $nnodes[] = $nstack; if (isset_request_var('gti')) { $nstack .= '-gts'; $nnodes[] = $nstack; } else { if (get_request_var('host_template_id') > 0) { $nstack .= '-ht-' . get_request_var('host_template_id'); $nnodes[] = $nstack; } if (get_request_var('host_id') > 0) { $nstack .= '-host-' . get_request_var('host_id'); $nnodes[] = $nstack; } } } else { $nnodes[] = $nstack; } if (isset_request_var('hgd')) { $parts = explode(':', get_request_var('hgd')); switch($parts[0]) { case 'gt': $nnodes[] = $nstack . '-gt-' . $parts[1]; break; case 'dq': $nnodes[] = $nstack . '-dq-' . $parts[1]; break; case 'dqi': $nnodes[] = $nstack . '-dqi-' . $parts[1] . '-' . $parts[2]; $nnodes[] = $nstack . '-dq-' . $parts[1]; break; default: break; } } while (true) { if ($linknode['parent'] > 0) { $rnodes[] = 'tbranch-' . $linknode['parent']; $linknode = db_fetch_row_prepared('SELECT * FROM graph_tree_items WHERE id = ?', array($linknode['parent'])); } else { break; } } } if (cacti_sizeof($rnodes)) { $rnodes = array_reverse($rnodes); $nodes = array_merge($nodes, $rnodes); } if (cacti_sizeof($nnodes)) { $nodes = array_merge($nodes, $nnodes); } } elseif (strpos(get_request_var('node'), 'tree_anchor') !== false) { $parts = explode('-', get_request_var('node')); $nodes[] = 'tree_anchor-' . $parts[1] . '_anchor'; } return $nodes; } else { return array(); } } function get_device_leaf_class($host_id) { $status = db_fetch_cell_prepared('SELECT status FROM host WHERE id = ?', array($host_id)); switch($status) { case HOST_DOWN: $class = 'deviceDown'; break; case HOST_RECOVERING: $class = 'deviceRecovering'; break; case HOST_UP: $class = 'deviceUp'; break; case HOST_UNKNOWN: $class = 'deviceUnknown'; break; case HOST_ERROR: $class = 'deviceError'; break; default: $class = ''; } return $class; } function draw_dhtml_tree_level($tree_id, $parent = 0, $editing = false) { $dhtml_tree = array(); $hierarchy = get_allowed_tree_level($tree_id, $parent, $editing); if (cacti_sizeof($hierarchy)) { $dhtml_tree[] = "\t\t\t\n"; } return $dhtml_tree; } function draw_dhtml_tree_level_graphing($tree_id, $parent = 0) { global $config; include_once($config['base_path'] . '/lib/data_query.php'); $hierarchy = get_allowed_tree_content($tree_id, $parent); $dhtml_tree = array(); if (cacti_sizeof($hierarchy)) { if ($tree_id > 0) { $dhtml_tree[] = "\t\t\t\n"; } else { $dhtml_tree[] = "\n"; } } return $dhtml_tree; } function create_site_branch($leaf) { global $config, $unique_id; $unique_id++; $dhtml_tree = array(); $dhtml_tree[] = "\t\t\t\t
  • ' . html_escape($leaf['sitename']) . "\n"; $devices = get_allowed_site_devices($leaf['site_id'], '', 'ht.name ASC, h1.description ASC'); $ht_name = ''; if (cacti_sizeof($devices)) { $dhtml_tree[] = "\t\t\t\t\t
  • \n"; } $dhtml_tree[] = "\t\t\t\t\t\t
  • " . html_escape($d['host_template_name']) . "
  • \n"; $dhtml_tree[] = "\t\t\t\t\t\n"; } // suppress total rows collection $total_rows = -1; $graph_templates = get_allowed_graph_templates('h.site_id=' . $leaf['site_id'], 'name', '', $total_rows); if (cacti_sizeof($graph_templates)) { $dhtml_tree[] = "\t\t\t\t\t\t\n"; } $dhtml_tree[] = "\t\t\t\t\n"; return $dhtml_tree; } function create_branch($leaf) { global $config; $dhtml_tree = array(); $children = db_fetch_cell_prepared('SELECT COUNT(*) FROM graph_tree_items WHERE parent = ? AND local_graph_id=0', array($leaf['id'])); $dhtml_tree[] = "\t\t\t\t
  • 0 ? "class='jstree-closed'":"") . ">' . html_escape($leaf['title']) . "
  • \n"; return $dhtml_tree; } function create_host_branch($leaf, $site_id = -1, $ht = -1) { global $config, $unique_id; $unique_id++; if (isset($leaf['host_id']) && $leaf['host_id'] > 0) { $class = get_device_leaf_class($leaf['host_id']); } else { $class = ''; } $dhtml_tree[] = "\t\t\t\t
  • 0 ? '-site-' . $site_id:'') . ($ht > 0 ? '-ht-' . $ht:'') . '-host-' . $leaf['host_id'] . '-uid-' . $unique_id . "' data-jstree='{ \"type\" : \"device\" }'>' . html_escape(strip_domain($leaf['hostname'])) . "\n"; if (read_user_setting('expand_hosts') == 'on') { if ($leaf['host_grouping_type'] == HOST_GROUPING_DATA_QUERY_INDEX) { $dhtml_tree[] = "\t\t\t\t\t\n"; } elseif ($leaf['host_grouping_type'] == HOST_GROUPING_GRAPH_TEMPLATE) { $dhtml_tree[] = "\t\t\t\t\t\n"; } else { $dhtml_tree[] = "\t\t\t\t\t\n"; $dhtml_tree[] = "\t\t\t\t\t\n"; } } $dhtml_tree[] = "\t\t\t\t
  • \n"; return $dhtml_tree; } function create_graph_template_branch($leaf, $site_id = -1, $ht = -1) { global $config, $unique_id; $dhtml_tree = array(); // suppress total rows collection $total_rows = -1; $graph_templates = get_allowed_graph_templates('gl.host_id=' . $leaf['host_id'], 'name', '', $total_rows); if (cacti_sizeof($graph_templates)) { foreach ($graph_templates as $graph_template) { $unique_id++; $dhtml_tree[] = "\t\t\t\t\t\t
  • 0 ? '-site-' . $site_id . ($ht > 0 ? '-ht-' . $ht:'') . '-host-' . $leaf['host_id']:'') . '-gt-' . $graph_template['id'] . "-uid-$unique_id' data-jstree='{ \"type\" : \"graph_template\" }'>" . html_escape($graph_template['name']) . "
  • \n"; } } return $dhtml_tree; } function create_data_query_branch($leaf, $site_id = -1, $ht = -1) { global $config, $unique_id; $dhtml_tree = array(); $data_queries = db_fetch_assoc_prepared('SELECT sq.id, sq.name FROM graph_local AS gl INNER JOIN snmp_query AS sq ON gl.snmp_query_id=sq.id AND gl.host_id = ? GROUP BY sq.id ORDER BY sq.name', array($leaf['host_id'])); array_push($data_queries, array( 'id' => '0', 'name' => __('Non Query Based') )); if (cacti_sizeof($data_queries)) { if ($leaf['host_id'] > 0) { $ntg = get_allowed_graphs('gl.host_id=' . $leaf['host_id'] . ' AND gl.snmp_query_id=0'); if (read_user_setting('show_aggregates', 'on') == 'on') { $agg = get_allowed_aggregate_graphs('gl.host_id=' . $leaf['host_id'] . ' AND gl.snmp_query_id=0'); } else { $agg = array(); } } else { $ntg = get_allowed_graphs('gl.snmp_query_id=0'); if (read_user_setting('show_aggregates', 'on') == 'on') { $agg = get_allowed_aggregate_graphs('gl.snmp_query_id=0'); } else { $agg = array(); } } $ntg = array_merge($ntg, $agg); foreach ($data_queries as $data_query) { if ($data_query['id'] == 0) { $non_tg = $ntg; $sfd = array(); } else { $non_tg = array(); /* fetch a list of field names that are sorted by the preferred sort field */ $sfd = get_formatted_data_query_indexes($leaf['host_id'], $data_query['id']); } if (($data_query['id'] == 0 && cacti_sizeof($non_tg)) || ($data_query['id'] > 0 && cacti_sizeof($sfd))) { $unique_id++; if ($data_query['name'] != __('Non Query Based')) { $dhtml_tree[] = "\t\t\t\t\t\t
  • 0 ? '-site-' . $site_id . ($ht > 0 ? '-ht-' . $ht:'') . '-host-' . $leaf['host_id']:'') . '-dq-' . $data_query['id'] . "-uid-$unique_id' data-jstree='{ \"type\" : \"data_query\" }'>' . html_escape($data_query['name']) . "\n"; } else { $dhtml_tree[] = "\t\t\t\t\t\t
  • 0 ? '-site-' . $site_id . ($ht > 0 ? '-ht-' . $ht:'') . '-host-' . $leaf['host_id']:'') . '-dq-' . $data_query['id'] . "-uid-$unique_id' data-jstree='{ \"type\" : \"data_query\" }'>' . html_escape($data_query['name']) . "\n"; } if ($data_query['id'] > 0) { $dhtml_tree[] = "\t\t\t\t\t\t\t\n"; $dhtml_tree[] = "\t\t\t\t\t\t
  • \n"; } } } } $dhtml_tree[] = "\t\t\t\t\t\t\n"; return $dhtml_tree; } function create_dhtml_tree() { $dhtml_tree = array(); $tree_list = get_allowed_trees(); if (cacti_sizeof($tree_list)) { foreach ($tree_list as $tree) { $dhtml_tree['tree:'.$tree['id']] = true; } } return $dhtml_tree; } function html_validate_tree_vars() { static $count = false; // prevent double calls in the same stack if ($count) { return false; } /* ================= input validation and session storage ================= */ $filters = array( 'graphs' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => read_user_setting('treeview_graphs_per_page') ), 'graph_template_id' => array( 'filter' => FILTER_VALIDATE_IS_NUMERIC_LIST, 'pageset' => true, 'default' => '-1' ), 'columns' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('num_columns_tree', '2') ), 'page' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '1' ), 'predefined_timeshift' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('default_timeshift') ), 'predefined_timespan' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => read_user_setting('default_timespan') ), 'node' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '/([_\-a-z:0-9#]+)/')), 'pageset' => true, 'default' => '' ), 'site_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '-1' ), 'host_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '-1' ), 'host_template_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '-1' ), 'hgd' => array( 'filter' => FILTER_CALLBACK, 'pageset' => true, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'rfilter' => array( 'filter' => FILTER_VALIDATE_IS_REGEX, 'pageset' => true, 'default' => '', ), 'thumbnails' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '(true|false)')), 'pageset' => true, 'default' => read_user_setting('thumbnail_section_tree_2') == 'on' ? 'true':'false' ) ); validate_store_request_vars($filters, 'sess_grt'); /* ================= input validation ================= */ $count = true; } function grow_right_pane_tree($tree_id, $leaf_id, $host_group_data) { global $current_user, $config, $graphs_per_page, $graph_timeshifts; include($config['include_path'] . '/global_arrays.php'); include_once($config['library_path'] . '/data_query.php'); include_once($config['library_path'] . '/html_utility.php'); if (empty($tree_id)) { return; } if (empty($leaf_id)) { $leaf_id = 0; } $sql_where = ''; $sql_join = ''; $title = ''; $host_name = ''; $site_name = ''; $host_template_name = ''; $title_delimiter = ''; $host_group_data_name = ''; $graph_template_id = '-1'; $data_query_id = '-1'; $data_query_index = ''; $leaf_names = array(); $leaf = db_fetch_row_prepared('SELECT title, host_id, site_id, host_grouping_type, parent FROM graph_tree_items WHERE id = ?', array($leaf_id)); $leaf_type = api_tree_get_item_type($leaf_id); /* get information for the headers */ if (!empty($tree_id)) { $tree_name = db_fetch_cell_prepared('SELECT name FROM graph_tree WHERE id = ?', array($tree_id)); } if (isset($leaf['title']) && $leaf['title'] != '') { $leaf_names[] = $leaf['title']; } if (($leaf_type == 'site' || $leaf_type == 'host') && $leaf['parent'] != 0) { $parent = $leaf['parent']; $leaf_names = array(); while ($parent != 0) { $pleaf = db_fetch_row_prepared('SELECT * FROM graph_tree_items WHERE id = ?', array($parent)); if (cacti_sizeof($pleaf)) { $leaf_names[] = $pleaf['title']; $parent = $pleaf['parent']; } else { break; } } } if (!empty($leaf_id)) { $host_name = db_fetch_cell_prepared('SELECT description FROM host WHERE id = ?', array($leaf['host_id'])); $site_name = db_fetch_cell_prepared('SELECT name FROM sites WHERE id = ?', array($leaf['site_id'])); } if (isset_request_var('host_id') && get_request_var('host_id') > 0 && $host_name == '') { $host_name = db_fetch_cell_prepared('SELECT description FROM host WHERE id = ?', array(get_request_var('host_id'))); } if (isset_request_var('site_id') && get_request_var('site_id') > 0 && $site_name == '') { $site_name = db_fetch_cell_prepared('SELECT name FROM sites WHERE id = ?', array(get_request_var('site_id'))); } if (isset_request_var('host_template_id') && get_request_var('host_template_id') > 0) { $host_template_name = db_fetch_cell_prepared('SELECT name FROM host_template WHERE id = ?', array(get_request_var('host_template_id'))); } $host_group_data_array = explode(':', $host_group_data); if ($host_group_data_array[0] == 'gt') { $name = db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE id = ?', array($host_group_data_array[1])); $host_group_data_name = '' . __('Graph Template:'). ' ' . $name; $graph_template_id = $host_group_data_array[1]; } elseif ($host_group_data_array[0] == 'dq') { $name = db_fetch_cell_prepared('SELECT name FROM snmp_query WHERE id = ?', array($host_group_data_array[1])); $host_group_data_name = '' . __('Graph Template:') . ' ' . (empty($host_group_data_array[1]) ? __('Non Query Based') : $name); $data_query_id = $host_group_data_array[1]; } elseif ($host_group_data_array[0] == 'dqi') { $name = db_fetch_cell_prepared('SELECT name FROM snmp_query WHERE id = ?', array($host_group_data_array[1])); $host_group_data_name = '' . __('Graph Template:') . ' ' . (empty($host_group_data_array[1]) ? __('Non Query Based') : $name) . '-> ' . (empty($host_group_data_array[2]) ? __('Template Based') : get_formatted_data_query_index($leaf['host_id'], $host_group_data_array[1], $host_group_data_array[2])); $data_query_id = $host_group_data_array[1]; $data_query_index = $host_group_data_array[2]; } if ($tree_name != '') { $title .= $title_delimiter . '' . __('Tree:') . ' ' . html_escape($tree_name); $title_delimiter = '-> '; } if ($site_name != '') { $title .= $title_delimiter . '' . __('Site:') . ' ' . html_escape($site_name); $title_delimiter = '-> '; } if (cacti_sizeof($leaf_names)) { foreach($leaf_names as $leaf_name) { $title .= $title_delimiter . '' . __('Leaf:') . ' ' . html_escape($leaf_name); $title_delimiter = '-> '; } } if ($host_template_name != '') { $title .= $title_delimiter . '' . __('Device Template:') . ' ' . html_escape($host_template_name); $title_delimiter = '-> '; } if ($host_name != '') { $title .= $title_delimiter . '' . __('Device:') . ' ' . html_escape($host_name); $title_delimiter = '-> '; } if ($host_group_data_name != '') { $title .= $title_delimiter . " $host_group_data_name"; $title_delimiter = '-> '; } html_start_box(__('Graph Filters') . (get_request_var('rfilter') != '' ? " [ " . __('Filter') . " '" . html_escape_request_var('rfilter') . "' " . __('Applied') . " ]" : ''), '100%', "", '3', 'center', ''); ?>
    '> ' title=''> ' title=''> ' title=''>
    >
    graph_view.php'>
    '> '> '> '> '> '> ' title='' onClick='refreshGraphTimespanFilter()'> ' title='' onClick='clearGraphTimespanFilter()'>
    $tree_id, 'leafid' => $leaf_id, 'mode' => 'tree', 'timespan' => $_SESSION['sess_current_timespan'], 'starttime' => get_current_graph_start(), 'endtime' => get_current_graph_end() ) ); $graph_list = array(); if (($leaf_type == 'header') || (empty($leaf_id))) { $sql_where = ''; if (get_request_var('rfilter') != '') { $sql_where .= " (gtg.title_cache RLIKE '" . get_request_var('rfilter') . "' OR gtg.title RLIKE '" . get_request_var('rfilter') . "')"; } if (isset_request_var('graph_template_id') && get_request_var('graph_template_id') >= 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . ' (gl.graph_template_id IN (' . get_request_var('graph_template_id') . '))'; } $graph_list = get_allowed_tree_header_graphs($tree_id, $leaf_id, $sql_where); } elseif ($leaf_type == 'host') { if ($graph_template_id == '-1') { $graph_template_id = get_request_var('graph_template_id'); } $graph_list = get_host_graph_list($leaf['host_id'], $graph_template_id, $data_query_id, $leaf['host_grouping_type'], $data_query_index); } elseif ($leaf_type == 'site') { $sql_where = ''; if (isset_request_var('site_id') && get_filter_request_var('site_id') > 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . 'h.site_id = ' . get_request_var('site_id'); } if (isset_request_var('host_template_id') && get_filter_request_var('host_template_id') > 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . 'h.host_template_id = ' . get_request_var('host_template_id'); } if (isset_request_var('host_id') && get_filter_request_var('host_id') > 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.host_id = ' . get_request_var('host_id'); } if (isset_request_var('hgd')) { $parts = explode(':', get_request_var('hgd')); switch($parts[0]) { case 'gt': input_validate_input_number($parts[1]); $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.graph_template_id = ' . $parts[1]; break; case 'dq': input_validate_input_number($parts[1]); $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.snmp_query_id = ' . $parts[1]; break; case 'dqi': input_validate_input_number($parts[1]); $dqi = db_qstr($parts[2]); $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.snmp_query_id = ' . $parts[1] . ' AND snmp_index = ' . $dqi; break; default: break; } } if (get_request_var('rfilter') != '') { $sql_where .= ($sql_where != '' ? ' AND ':'') . "(gtg.title_cache RLIKE '" . get_request_var('rfilter') . "')"; } if (isset_request_var('graph_template_id') && get_request_var('graph_template_id') >= 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . '(gl.graph_template_id IN (' . get_request_var('graph_template_id') . '))'; } $graphs = get_allowed_graphs($sql_where); if (read_user_setting('show_aggregates', 'on') == 'on') { $agg = get_allowed_aggregate_graphs($sql_where); } else { $agg = array(); } $graphs = array_merge($graphs, $agg); /* let's sort the graphs naturally */ usort($graphs, 'naturally_sort_graphs'); if (cacti_sizeof($graphs)) { foreach ($graphs as $graph) { array_push($graph_list, $graph); } } } $total_rows = cacti_sizeof($graph_list); /* generate page list */ $nav = html_nav_bar($config['url_path'] . 'graph_view.php?action=tree_content&tree_id=' . $tree_id . '&leaf_id=' . $leaf_id . '&node=' . get_request_var('node') . '&hgd=' . $host_group_data, MAX_DISPLAY_PAGES, get_request_var('page'), get_request_var('graphs'), $total_rows, get_request_var('columns'), __('Graphs'), 'page', 'main'); print $nav; html_start_box('', '100%', '', '3', 'center', ''); /* start graph display */ print "$title"; $i = get_request_var('graphs') * (get_request_var('page') - 1); $last_graph = $i + get_request_var('graphs'); $new_graph_list = array(); while ($i < $total_rows && $i < $last_graph) { $new_graph_list[] = $graph_list[$i]; $i++; } if (get_request_var('thumbnails') == 'true' || get_request_var('thumbnails') == 'on') { html_graph_thumbnail_area($new_graph_list, '', 'view_type=tree&graph_start=' . get_current_graph_start() . '&graph_end=' . get_current_graph_end(), '', get_request_var('columns'), $tree_id, $leaf_id); } else { html_graph_area($new_graph_list, '', 'view_type=tree&graph_start=' . get_current_graph_start() . '&graph_end=' . get_current_graph_end(), '', get_request_var('columns'), $tree_id, $leaf_id); } if (!empty($leaf_id)) { api_plugin_hook_function('tree_after', $host_name . ',' . get_nfilter_request_var('leaf_id')); } api_plugin_hook_function('tree_view_page_end'); html_end_box(); if ($total_rows) { print $nav; } } function get_host_graph_list($host_id, $graph_template_id, $data_query_id, $host_grouping_type = '', $data_query_index = '') { $graph_list = array(); $sql_where = ''; /* graph template grouping */ if ($host_grouping_type == HOST_GROUPING_GRAPH_TEMPLATE) { if ($host_id > 0) { $sql_where = 'gl.host_id=' . $host_id; } if ($graph_template_id != '' && $graph_template_id != '-1' && $graph_template_id != '0') { $sql_where .= ($sql_where != '' ? ' AND ':'') . ' (gl.graph_template_id IN (' . $graph_template_id . '))'; } elseif ($graph_template_id == 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . ' (gl.graph_template_id IN (' . $graph_template_id . '))'; } // suppress total rows collection $total_rows = -1; $graph_templates = get_allowed_graph_templates('', 'name', '', $total_rows); $final_templates = array(); if ($graph_template_id != '' && $graph_template_id != '-1' && $graph_template_id != '0') { $templates = explode(',', $graph_template_id); foreach($templates as $id) { $ptemplates[$id]['id'] = $id; } foreach($graph_templates as $template) { if (isset($ptemplates[$template['id']])) { $final_templates[$template['id']]['id'] = $template['id']; $final_templates[$template['id']]['name'] = $template['name']; } } } elseif ($graph_template_id == '0') { $final_templates = array(); } else { $final_templates = $graph_templates; } /* for graphs without a template */ array_push( $final_templates, array( 'id' => '0', 'name' => __('(Non Graph Template)') ) ); if (cacti_sizeof($final_templates)) { $sql_where = ''; if (get_request_var('rfilter') != '') { $sql_where = " (gtg.title_cache RLIKE '" . get_request_var('rfilter') . "')"; } if ($host_id > 0) { $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.host_id=' . $host_id; } $graph_template_ids = []; foreach ($final_templates as $graph_template) { array_push($graph_template_ids, $graph_template['id']); } $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.graph_template_id IN (' . implode(', ', $graph_template_ids) . ')'; $graphs = get_allowed_graphs($sql_where); if (read_user_setting('show_aggregates', 'on') == 'on') { $agg = get_allowed_aggregate_graphs($sql_where); } else { $agg = array(); } $graphs = array_merge($graphs, $agg); /* let's sort the graphs naturally */ usort($graphs, 'naturally_sort_graphs'); if (cacti_sizeof($graphs)) { foreach ($graphs as $graph) { $graph['graph_template_name'] = $graph_template['name']; array_push($graph_list, $graph); } } } } elseif ($host_grouping_type == HOST_GROUPING_DATA_QUERY_INDEX) { /* data query index grouping */ if ($host_id > 0) { $sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') . 'gl.host_id=' . $host_id; } if ($data_query_id >= 0) { $sql_where .= ($sql_where != '' ? ' AND ':'WHERE ') . 'sq.id=' . $data_query_id; } $data_queries = db_fetch_assoc("SELECT sq.id, sq.name FROM graph_local AS gl INNER JOIN snmp_query AS sq ON gl.snmp_query_id=sq.id $sql_where GROUP BY sq.id ORDER BY sq.name"); /* for graphs without a data query */ if ($data_query_id <= 0) { array_push($data_queries, array( 'id' => '0', 'name' => __('Non Query Based') ) ); } if (cacti_sizeof($data_queries)) { foreach ($data_queries as $data_query) { $sql_where = ''; /* fetch a list of field names that are sorted by the preferred sort field */ $sfd = get_formatted_data_query_indexes($host_id, $data_query['id']); if (get_request_var('rfilter') != '') { $sql_where = " (gtg.title_cache RLIKE '" . get_request_var('rfilter') . "')"; } /* grab a list of all graphs for this host/data query combination */ $sql_where .= ($sql_where != '' ? ' AND ':'') . 'gl.snmp_query_id=' . $data_query['id'] . ($host_id > 0 ? ' AND gl.host_id=' . $host_id:'') . ' ' . ($data_query_index != '' ? ' AND gl.snmp_index = ' . db_qstr($data_query_index): ''); $graphs = get_allowed_graphs($sql_where); if (read_user_setting('show_aggregates', 'on') == 'on') { $agg = get_allowed_aggregate_graphs($sql_where); } else { $agg = array(); } $graphs = array_merge($graphs, $agg); /* re-key the results on data query index */ $snmp_index_to_graph = array(); if (cacti_sizeof($graphs)) { /* let's sort the graphs naturally */ usort($graphs, 'naturally_sort_graphs'); foreach ($graphs as $graph) { $snmp_index_to_graph[$graph['snmp_index']][$graph['local_graph_id']] = $graph['title_cache']; $graphs_height[$graph['local_graph_id']] = $graph['height']; $graphs_width[$graph['local_graph_id']] = $graph['width']; } } /* using the sorted data as they key; grab each snmp index from the master list */ foreach ($sfd as $snmp_index => $sort_field_value) { /* render each graph for the current data query index */ if (isset($snmp_index_to_graph[$snmp_index])) { foreach ($snmp_index_to_graph[$snmp_index] as $local_graph_id => $graph_title) { /* reformat the array so it's compatable with the html_graph* area functions */ array_push($graph_list, array( 'data_query_name' => $data_query['name'], 'sort_field_value' => $sort_field_value, 'local_graph_id' => $local_graph_id, 'title_cache' => $graph_title, 'height' => $graphs_height[$local_graph_id], 'width' => $graphs_width[$local_graph_id] )); } } } } } } return $graph_list; }