\n";
print "[root] \n";
}
if (sizeof($branches)) {
foreach ($branches as $leaf) {
$indent = str_repeat('---', $tier);
if ($selected_tree_item_id == $leaf['id']) {
$html_selected = ' selected';
}else{
$html_selected = '';
}
print "$indent " . $leaf['title'] . " \n";
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');
$default_tree_id = read_graph_config_option('default_tree_id');
if (empty($default_tree_id)) {
$user = db_fetch_row('SELECT * FROM user_auth WHERE id=' . $_SESSION['sess_user_id']);
if ($user['policy_trees'] == 1) {
$default_tree_id = db_fetch_cell("SELECT id
FROM graph_tree
WHERE id NOT IN (
SELECT item_id
FROM user_auth_perms
WHERE type=2 AND user_id=" . $_SESSION['sess_user_id'] . "
)
AND enabled='on'
ORDER BY id LIMIT 1");
}else{
$default_tree_id = db_fetch_cell("SELECT id
FROM graph_tree
WHERE id IN (
SELECT item_id
FROM user_auth_perms
WHERE type=2
AND user_id=" . $_SESSION['sess_user_id'] . "
)
AND enabled='on'
ORDER BY id LIMIT 1");
}
}
$dhtml_tree = create_dhtml_tree();
if (sizeof($dhtml_tree)) {
print "
\n";
}
?>
0) {
$dhtml_tree[] = "\t\t\t\n";
foreach ($heirarchy as $leaf) {
if ($leaf['host_id'] > 0) { //It's a host
$dhtml_tree[] = "\t\t\t\tDevice: " . htmlspecialchars($leaf['hostname']) . "\n";
$dhtml_tree[] = "\t\t\t\t \n";
}elseif ($leaf['local_graph_id'] > 0) {
$dhtml_tree[] = "\t\t\t\tGraph: " . htmlspecialchars(get_graph_title($leaf['local_graph_id'])) . "\n";
$dhtml_tree[] = "\t\t\t\t \n";
}else{ //It's not a host
$dhtml_tree[] = "\t\t\t\t" . htmlspecialchars($leaf['title']) . "\n";
$dhtml_tree[] = "\t\t\t\t \n";
}
}
$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');
$heirarchy = get_allowed_tree_content($tree_id, $parent);
$tree = db_fetch_cell("SELECT * FROM graph_tree WHERE id=$tree_id");
$dhtml_tree = array();
if (sizeof($heirarchy)) {
if ($tree_id > 0) {
$dhtml_tree[] = "\t\t\t\n";
foreach ($heirarchy as $leaf) {
if ($leaf['host_id'] > 0) { //It's a host
$dhtml_tree[] = "\t\t\t\tDevice: ' . htmlspecialchars($leaf['hostname']) . " \n";
if (read_graph_config_option('expand_hosts') == 'on') {
$dhtml_tree[] = "\t\t\t\t\t\n";
if ($leaf['host_grouping_type'] == HOST_GROUPING_GRAPH_TEMPLATE) {
$graph_templates = get_allowed_graph_templates('gl.host_id=' . $leaf['host_id']);
if (sizeof($graph_templates) > 0) {
foreach ($graph_templates as $graph_template) {
$dhtml_tree[] = "\t\t\t\t\t\t' . htmlspecialchars($graph_template['name']) . " \n";
}
}
}else if ($leaf['host_grouping_type'] == HOST_GROUPING_DATA_QUERY_INDEX) {
$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
AND gl.host_id=" . $leaf['host_id'] . "
GROUP BY sq.id
ORDER BY sq.name");
array_push($data_queries, array(
'id' => '0',
'name' => 'Non Query Based'
));
foreach ($data_queries as $data_query) {
/* fetch a list of field names that are sorted by the preferred sort field */
$sort_field_data = get_formatted_data_query_indexes($leaf['host_id'], $data_query['id']);
if ($data_query['id'] == 0) {
$non_template_graphs = get_allowed_graphs('gl.host_id=' . $leaf['host_id'] . ' AND gl.snmp_query_id=0');
}else{
$non_template_graphs = 0;
}
if ((($data_query['id'] == 0) && (sizeof($non_template_graphs))) ||
(($data_query['id'] > 0) && (sizeof($sort_field_data) > 0))) {
if ($data_query['name'] != 'Non Query Based') {
$dhtml_tree[] = "\t\t\t\t\t\t' . htmlspecialchars($data_query['name']) . " \n";
}else{
$dhtml_tree[] = "\t\t\t\t\t\t' . htmlspecialchars($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";
}
$dhtml_tree[] = "\t\t\t\t\t \n";
}
$dhtml_tree[] = "\t\t\t\t\n";
}else{ //It's not a host
$children = db_fetch_cell("SELECT COUNT(*) FROM graph_tree_items WHERE parent=" . $leaf['id'] . " AND local_graph_id=0");
$dhtml_tree[] = "\t\t\t\t 0 ? "class='jstree-closed'":"") . ">' . htmlspecialchars($leaf['title']) . " \n";
}
}
$dhtml_tree[] = "\t\t\t\n";
}else{
$dhtml_tree[] = "\n";
}
}
return $dhtml_tree;
}
function create_dhtml_tree() {
global $config;
$dhtml_tree = array();
$tree_list = get_graph_tree_array();
if (sizeof($tree_list)) {
foreach ($tree_list as $tree) {
$dhtml_tree['tree:'.$tree['id']] = true;
}
}
return $dhtml_tree;
}
function validate_tree_vars() {
/* ================= input validation ================= */
input_validate_input_number(get_request_var_request('graphs'));
input_validate_input_number(get_request_var_request('columns'));
input_validate_input_number(get_request_var_request('page'));
input_validate_input_number(get_request_var_request('tree_id'));
input_validate_input_number(get_request_var_request('leaf_id'));
/* ==================================================== */
/* clean up search string */
if (isset($_REQUEST['filter'])) {
$_REQUEST['filter'] = sanitize_search_string(get_request_var_request('filter'));
}
/* clean up search string */
if (isset($_REQUEST['thumbnails'])) {
$_REQUEST['thumbnails'] = sanitize_search_string(get_request_var_request('thumbnails'));
}
/* clean up host_group_data string */
if (isset($_REQUEST['host_group_data'])) {
$_REQUEST['host_group_data'] = sanitize_search_string(get_request_var_request('host_group_data'));
}
/* if the user pushed the 'clear' button */
if (isset($_REQUEST['clear'])) {
kill_session_var('sess_graph_tree_graphs');
kill_session_var('sess_graph_tree_columns');
kill_session_var('sess_graph_tree_filter');
kill_session_var('sess_graph_tree_thumbnails');
kill_session_var('sess_graph_tree_page');
unset($_REQUEST['graphs']);
unset($_REQUEST['columns']);
unset($_REQUEST['filter']);
unset($_REQUEST['page']);
unset($_REQUEST['thumbnails']);
$changed = true;
}else{
/* if any of the settings changed, reset the page number */
$changed = 0;
$changed += check_changed('graphs', 'sess_graph_tree_graphs');
$changed += check_changed('columns', 'sess_graph_tree_columns');
$changed += check_changed('filter', 'sess_graph_tree_filter');
}
if ($changed) {
$_REQUEST['page'] = 1;
}
load_current_session_value('page', 'sess_graph_tree_page', '1');
load_current_session_value('graphs', 'sess_graph_tree_graphs', read_graph_config_option('treeview_graphs_per_page'));
load_current_session_value('columns', 'sess_graph_tree_columns', read_graph_config_option('num_columns_tree'));
load_current_session_value('filter', 'sess_graph_tree_filter', '');
load_current_session_value('thumbnails', 'sess_graph_tree_thumbnails', read_graph_config_option('thumbnail_section_tree_2') == 'on' ? 'true':'false');
load_current_session_value('leaf_id', 'sess_graph_tree_leaf_id', '');
load_current_session_value('tree_id', 'sess_graph_tree_tree_id', read_graph_config_option('default_tree_id'));
load_current_session_value('nodeid', 'sess_graph_tree_nodeid', '');
load_current_session_value('host_group_data', 'sess_graph_tree_host_group_data', '');
}
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 = '';
$title_delimeter = '';
$leaf = db_fetch_row("SELECT title, host_id, host_grouping_type
FROM graph_tree_items
WHERE id=$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("SELECT name FROM graph_tree WHERE id=$tree_id"); }
if (!empty($leaf_id)) { $leaf_name = $leaf['title']; }
if (!empty($leaf_id)) { $host_name = db_fetch_cell("SELECT host.description FROM (graph_tree_items,host) WHERE graph_tree_items.host_id=host.id AND graph_tree_items.id=$leaf_id"); }
$host_group_data_array = explode(':', $host_group_data);
if ($host_group_data_array[0] == 'graph_template') {
$host_group_data_name = 'Graph Template: ' . db_fetch_cell('SELECT name FROM graph_templates WHERE id=' . $host_group_data_array[1]);
$graph_template_id = $host_group_data_array[1];
}elseif ($host_group_data_array[0] == 'data_query') {
$host_group_data_name = 'Graph Template: ' . (empty($host_group_data_array[1]) ? 'Non Query Based' : db_fetch_cell('SELECT name FROM snmp_query WHERE id=' . $host_group_data_array[1]));
$data_query_id = $host_group_data_array[1];
}elseif ($host_group_data_array[0] == 'data_query_index') {
$host_group_data_name = 'Graph Template: ' . (empty($host_group_data_array[1]) ? 'Non Query Based' : db_fetch_cell('SELECT name FROM snmp_query WHERE id=' . $host_group_data_array[1])) . '-> ' . (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 (!empty($tree_name)) { $title .= $title_delimeter . 'Tree: ' . htmlspecialchars($tree_name, ENT_QUOTES); $title_delimeter = '-> '; }
if (!empty($leaf_name)) { $title .= $title_delimeter . 'Leaf: ' . htmlspecialchars($leaf_name, ENT_QUOTES); $title_delimeter = '-> '; }
if (!empty($host_name)) { $title .= $title_delimeter . 'Device: ' . htmlspecialchars($host_name, ENT_QUOTES); $title_delimeter = '-> '; }
if (!empty($host_group_data_name)) { $title .= $title_delimeter . " $host_group_data_name"; $title_delimeter = '-> '; }
validate_tree_vars($tree_id, $leaf_id, $host_group_data);
html_start_box('Graph Filters ' . (strlen(get_request_var_request('filter')) ? " [ Filter '" . htmlspecialchars(get_request_var_request('filter')) . "' Applied ]" : ''), '100%', "", '3', 'center', '');
?>
$tree_id,
'leafid' => $leaf_id,
'mode' => 'tree',
'timespan' => $_SESSION['sess_current_timespan'],
'starttime' => get_current_graph_start(),
'endtime' => get_current_graph_end()
)
);
html_start_box('', '100%', "", '3', 'center', '');
$graph_list = array();
if (($leaf_type == 'header') || (empty($leaf_id))) {
$sql_where = '';
if (strlen(get_request_var_request('filter'))) {
$sql_where = " (gtg.title_cache LIKE '%" . get_request_var_request('filter') . "%' OR gtg.title LIKE '%" . get_request_var_request('filter') . "%')";
}
$graph_list = get_allowed_tree_header_graphs($tree_id, $leaf_id, $sql_where);
}elseif ($leaf_type == 'host') {
/* graph template grouping */
if ($leaf['host_grouping_type'] == HOST_GROUPING_GRAPH_TEMPLATE) {
$sql_where = 'gl.host_id=' . $leaf['host_id'] . (empty($graph_template_id) ? '' : ' AND gt.id=' . $graph_template_id);
$graph_templates = get_allowed_graph_templates($sql_where);
/* for graphs without a template */
array_push($graph_templates, array(
'id' => '0',
'name' => '(No Graph Template)'
));
if (sizeof($graph_templates) > 0) {
foreach ($graph_templates as $graph_template) {
$sql_where = '';
if (strlen(get_request_var_request('filter'))) {
$sql_where = " (gtg.title_cache LIKE '%" . get_request_var_request('filter') . "%')";
}
$sql_where .= (strlen($sql_where) ? 'AND':'') . ' gl.graph_template_id=' . $graph_template['id'] . ' AND gl.host_id=' . $leaf['host_id'];
$graphs = get_allowed_graphs($sql_where);
/* let's sort the graphs naturally */
usort($graphs, 'naturally_sort_graphs');
if (sizeof($graphs)) {
foreach ($graphs as $graph) {
$graph['graph_template_name'] = $graph_template['name'];
array_push($graph_list, $graph);
}
}
}
}
/* data query index grouping */
}elseif ($leaf['host_grouping_type'] == HOST_GROUPING_DATA_QUERY_INDEX) {
$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
WHERE gl.host_id=" . $leaf['host_id'] . "
" . (!isset($data_query_id) ? '' : "AND sq.id=$data_query_id") . "
GROUP BY sq.id
ORDER BY sq.name");
/* for graphs without a data query */
if (empty($data_query_id)) {
array_push($data_queries, array(
'id' => '0',
'name' => 'Non Query Based'
));
}
if (sizeof($data_queries) > 0) {
foreach ($data_queries as $data_query) {
$sql_where = '';
/* fetch a list of field names that are sorted by the preferred sort field */
$sort_field_data = get_formatted_data_query_indexes($leaf['host_id'], $data_query['id']);
if (strlen(get_request_var_request('filter'))) {
$sql_where = " (gtg.title_cache LIKE '%" . get_request_var_request('filter') . "%')";
}
/* grab a list of all graphs for this host/data query combination */
$sql_where .= (strlen($sql_where) ? ' AND ':'') . ' gl.snmp_query_id=' . $data_query['id'] . ' AND gl.host_id=' . $leaf['host_id'] . "
" . (empty($data_query_index) ? '' : " AND gl.snmp_index='$data_query_index'");
$graphs = get_allowed_graphs($sql_where);
/* re-key the results on data query index */
$snmp_index_to_graph = array();
if (sizeof($graphs) > 0) {
/* 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 */
while (list($snmp_index, $sort_field_value) = each($sort_field_data)) {
/* render each graph for the current data query index */
if (isset($snmp_index_to_graph[$snmp_index])) {
while (list($local_graph_id, $graph_title) = each($snmp_index_to_graph[$snmp_index])) {
/* 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[$graph['local_graph_id']], 'width' => $graphs_width[$graph['local_graph_id']]));
}
}
}
}
}
}
}
$total_rows = sizeof($graph_list);
/* generate page list */
$nav = html_nav_bar("graph_view.php?action=tree_content&tree_id=$tree_id&leaf_id=$leaf_id&nodeid=" . get_request_var_request('nodeid') . '&host_group_data=' . get_request_var_request('host_group_data'), MAX_DISPLAY_PAGES, get_request_var_request('page'), get_request_var_request('graphs'), $total_rows, 5, 'Graphs', 'page', 'main');
print $nav;
/* start graph display */
print "";
$i = get_request_var_request('graphs') * (get_request_var_request('page') - 1);
$last_graph = $i + get_request_var_request('graphs');
$new_graph_list = array();
while ($i < $total_rows && $i < $last_graph) {
$new_graph_list[] = $graph_list[$i];
$i++;
}
if ($_REQUEST['thumbnails'] == 'true') {
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_request('columns'));
}else{
html_graph_area($new_graph_list, '', 'view_type=tree&graph_start=' . get_current_graph_start() . '&graph_end=' . get_current_graph_end(), '', 1);
}
if (!empty($leaf_id)) {
api_plugin_hook_function('tree_after',$host_name.','.get_request_var_request('leaf_id'));
}
api_plugin_hook_function('tree_view_page_end');
if ($total_rows > 0) {
print $nav;
}
html_end_box();
}
function naturally_sort_graphs($a, $b) {
return strnatcasecmp($a['title_cache'], $b['title_cache']);
}