'Delete', 2 => 'Publish', 3 => 'Un Publish' ); input_validate_input_number(get_request_var_request('tree_id')); input_validate_input_number(get_request_var_request('leaf_id')); input_validate_input_number(get_request_var_post('graph_tree_id')); input_validate_input_number(get_request_var_post('parent_item_id')); /* clean up id string */ if (isset($_REQUEST['id']) && $_REQUEST['id'] != '#') { $_REQUEST['id'] = sanitize_search_string(get_request_var_request('id')); } /* set default action */ if (!isset($_REQUEST['action'])) { $_REQUEST['action'] = ''; } switch ($_REQUEST['action']) { case 'save': form_save(); break; case 'actions': form_actions(); break; case 'edit': top_header(); tree_edit(); bottom_footer(); break; case 'hosts': display_hosts(); break; case 'graphs': display_graphs(); break; case 'lock': api_tree_lock($_REQUEST['id'], $_SESSION['sess_user_id']); break; case 'unlock': api_tree_unlock($_REQUEST['id'], $_SESSION['sess_user_id']); break; case 'copy_node': api_tree_copy_node($_REQUEST['tree_id'], $_REQUEST['id'], $_REQUEST['parent'], $_REQUEST['position']); break; case 'create_node': api_tree_create_node($_REQUEST['tree_id'], $_REQUEST['id'], $_REQUEST['position'], $_REQUEST['text']); break; case 'delete_node': api_tree_delete_node($_REQUEST['tree_id'], $_REQUEST['id']); break; case 'move_node': api_tree_move_node($_REQUEST['tree_id'], $_REQUEST['id'], $_REQUEST['parent'], $_REQUEST['position']); break; case 'rename_node': api_tree_rename_node($_REQUEST['tree_id'], $_REQUEST['id'], $_REQUEST['text']); break; case 'get_node': api_tree_get_node($_REQUEST['tree_id'], $_REQUEST['id']); break; case 'get_host_sort': get_host_sort_type(); break; case 'set_host_sort': set_host_sort_type(); break; case 'get_branch_sort': get_branch_sort_type(); break; case 'set_branch_sort': set_branch_sort_type(); break; default: top_header(); tree(); bottom_footer(); break; } function get_host_sort_type() { if (isset($_REQUEST['nodeid'])) { $ndata = explode('_', $_REQUEST['nodeid']); if (sizeof($ndata)) { foreach($ndata as $n) { $parts = explode(':', $n); if (isset($parts[0]) && $parts[0] == 'tbranch') { $branch = $parts[1]; input_validate_input_number($branch); $sort_type = db_fetch_cell_prepared('SELECT host_grouping_type FROM graph_tree_items WHERE id = ?', array($branch)); if ($sort_type == HOST_GROUPING_GRAPH_TEMPLATE) { print 'hsgt'; }else{ print 'hsdq'; } } } } }else{ return ''; } } function set_host_sort_type() { $type = ''; $branch = ''; /* clean up type string */ if (isset($_REQUEST['type'])) { $_REQUEST['type'] = sanitize_search_string(get_request_var_request('type')); } if (isset($_REQUEST['nodeid'])) { $ndata = explode('_', $_REQUEST['nodeid']); if (sizeof($ndata)) { foreach($ndata as $n) { $parts = explode(':', $n); if (isset($parts[0]) && $parts[0] == 'tbranch') { $branch = $parts[1]; input_validate_input_number($branch); if ($_REQUEST['type'] == 'hsgt') { $type = HOST_GROUPING_GRAPH_TEMPLATE; }else{ $type = HOST_GROUPING_DATA_QUERY_INDEX; } db_execute_prepared("UPDATE graph_tree_items SET host_grouping_type=$type WHERE id = ?", array($branch)); break; } } } } return; } function get_branch_sort_type() { if (isset($_REQUEST['nodeid'])) { $ndata = explode('_', $_REQUEST['nodeid']); if (sizeof($ndata)) { foreach($ndata as $n) { $parts = explode(':', $n); if (isset($parts[0]) && $parts[0] == 'tbranch') { $branch = $parts[1]; input_validate_input_number($branch); $sort_type = db_fetch_cell_prepared('SELECT sort_children_type FROM graph_tree_items WHERE id = ?', array($branch)); switch($sort_type) { case TREE_ORDERING_INHERIT: print 'inherit'; break; case TREE_ORDERING_NONE: print 'manual'; break; case TREE_ORDERING_ALPHABETIC: print 'alpha'; break; case TREE_ORDERING_NATURAL: print 'natural'; break; case TREE_ORDERING_NUMERIC: print 'numeric'; break; default: print ''; break; } break; } } } }else{ print ''; } } function set_branch_sort_type() { $type = ''; $branch = ''; /* clean up type string */ if (isset($_REQUEST['type'])) { $_REQUEST['type'] = sanitize_search_string(get_request_var_request('type')); } if (isset($_REQUEST['nodeid'])) { $ndata = explode('_', $_REQUEST['nodeid']); if (sizeof($ndata)) { foreach($ndata as $n) { $parts = explode(':', $n); if (isset($parts[0]) && $parts[0] == 'tbranch') { $branch = $parts[1]; input_validate_input_number($branch); switch($_REQUEST['type']) { case 'inherit': $type = TREE_ORDERING_INHERIT; break; case 'manual': $type = TREE_ORDERING_NONE; break; case 'alpha': $type = TREE_ORDERING_ALPHABETIC; break; case 'natural': $type = TREE_ORDERING_NATURAL; break; case 'numeric': $type = TREE_ORDERING_NUMERIC; break; default: break; } if ($type != '' && $branch != '') { db_execute_prepared('UPDATE graph_tree_items SET sort_children_type=$type WHERE id = ?', array($branch)); } break; } } } } } /* -------------------------- The Save Function -------------------------- */ function form_save() { /* clear graph tree cache on save - affects current user only, other users should see changes in <5 minutes */ if (isset($_SESSION['dhtml_tree'])) { unset($_SESSION['dhtml_tree']); } if (isset($_POST['save_component_tree'])) { if (empty($_POST['id'])) { $header = true; }else{ $header = false; } $save['id'] = $_POST['id']; $save['name'] = form_input_validate($_POST['name'], 'name', '', false, 3); $save['sort_type'] = form_input_validate($_POST['sort_type'], 'sort_type', '', true, 3); $save['last_modified'] = date('Y-m-d H:i:s', time()); $save['enabled'] = $_POST['enabled'] == 'true' ? 'on':'-'; $save['modified_by'] = $_SESSION['sess_user_id']; if (empty($save['id'])) { $save['user_id'] = $_SESSION['sess_user_id']; } if (!is_error_message()) { $tree_id = sql_save($save, 'graph_tree'); if ($tree_id) { raise_message(1); /* sort the tree using the algorithm chosen by the user */ api_tree_sort_tree(SORT_TYPE_TREE, $tree_id, $_POST['sort_type']); }else{ raise_message(2); } } header("Location: tree.php?action=edit" . (!$header ? "&header=false":"") . "&id=$tree_id"); } } /* ----------------------- Tree Item Functions ----------------------- */ function form_actions() { global $tree_actions; /* ================= input validation ================= */ input_validate_input_regex(get_request_var_post('drp_action'), '^([a-zA-Z0-9_]+)$'); /* ==================================================== */ /* if we are to save this form, instead of display it */ if (isset($_POST['selected_items'])) { $selected_items = unserialize(stripslashes($_POST['selected_items'])); for ($i=0;($i\n"; html_start_box('' . $tree_actions{$_POST['drp_action']} . '', '60%', '', '3', 'center', ''); if (isset($tree_array) && sizeof($tree_array)) { if ($_POST['drp_action'] == '1') { /* delete */ print "

When you click \"Continue\", the folling Tree(s) will be deleted.

\n"; $save_html = " "; }elseif ($_POST['drp_action'] == '2') { /* publish */ print "

When you click \"Continue\", the following Tree(s) will be Published.

\n"; $save_html = " "; }elseif ($_POST['drp_action'] == '3') { /* un-publish */ print "

When you click \"Continue\", the following Tree(s) will be Un-Published.

\n"; $save_html = " "; } }else{ print "You must select at least one Tree.\n"; $save_html = ""; } print " $save_html \n"; html_end_box(); bottom_footer(); } /* --------------------- Tree Functions --------------------- */ function tree_remove() { /* ================= input validation ================= */ input_validate_input_number(get_request_var_request('id')); /* ==================================================== */ if ((read_config_option('deletion_verification') == 'on') && (!isset($_REQUEST['confirm']))) { top_header(); form_confirm('Are You Sure?', "Are you sure you want to delete the tree '" . htmlspecialchars(db_fetch_cell_prepared('SELECT name FROM graph_tree WHERE id = ?', array($_REQUEST['id'])), ENT_QUOTES) . "'?", htmlspecialchars('tree.php'), htmlspecialchars('tree.php?action=remove&id=' . $_REQUEST['id'])); bottom_footer(); exit; } if ((read_config_option('deletion_verification') == '') || (isset($_REQUEST['confirm']))) { db_execute_prepared('DELETE FROM graph_tree WHERE id = ?', array($_REQUEST['id'])); db_execute_prepared('DELETE FROM graph_tree_items WHERE graph_tree_id = ?', array($_REQUEST['id'])); } /* clear graph tree cache on save - affects current user only, other users should see changes in <5 minutes */ if (isset($_SESSION['dhtml_tree'])) { unset($_SESSION['dhtml_tree']); } } function tree_edit() { global $fields_tree_edit; /* ================= input validation ================= */ input_validate_input_number(get_request_var_request('id')); input_validate_input_number(get_request_var_request('type')); /* ==================================================== */ /* clean up search string */ if (isset($_REQUEST['filter'])) { $_REQUEST['filter'] = sanitize_search_string(get_request_var_request('filter')); } load_current_session_value('filter', 'sess_tree_edit_filter', ''); load_current_session_value('type', 'sess_tree_edit_type', '0'); if (!empty($_REQUEST['id'])) { $tree = db_fetch_row_prepared('SELECT * FROM graph_tree WHERE id = ?', array($_REQUEST['id'])); $header_label = '[edit: ' . htmlspecialchars($tree['name']) . ']'; // Reset the cookie state if tree id has changed if (isset($_SESSION['sess_tree_id']) && $_SESSION['sess_tree_id'] != $_REQUEST['id']) { $select_first = true; }else{ $select_first = false; } $_SESSION['sess_tree_id'] = $_REQUEST['id']; }else{ $tree = array(); $header_label = '[new]'; } html_start_box('Graph Trees ' . $header_label, '100%', '', '3', 'center', ''); draw_edit_form(array( 'config' => array(), 'fields' => inject_form_variables($fields_tree_edit, (isset($tree) ? $tree : array())) )); html_end_box(); $lockdiv = ''; if (isset($tree['locked']) && $tree['locked'] == 0) { $lockdiv = "
To Edit this tree, you must first lock it by pressing the Edit Tree button.
\n"; $editable = false; }elseif (isset($tree['locked']) && $tree['locked'] == 1) { $lockdiv = "
The tree was locked for Editing on '" . $tree['locked_date'] . "' by '" . get_username($tree['modified_by']) . "'"; if ($tree['modified_by'] == $_SESSION['sess_user_id']) { $editable = true; $lockdiv .= '
'; }else{ $editable = false; $lockdiv .= '. To edit the tree, you must first unlock it and then lock it as yourself'; } }else{ $tree['id'] = 0; $editable = true; } if ($editable) { form_save_button('tree.php', 'return'); } if (!empty($_REQUEST['id'])) { print $lockdiv; print "\n"; html_end_box(); print "\n"; html_end_box(); print "\n"; html_end_box(); print "
\n"; html_start_box('Tree Items', '100%', '', '3', 'center', ''); echo "
\n"; html_start_box('Available Devices', '100%', '', '3', 'center', ''); ?>
Search '>
\n"; display_hosts(); echo "
\n"; html_start_box('Available Graphs', '100%', '', '3', 'center', ''); ?>
Search '>
\n"; display_graphs(); echo "
\n"; ?>
  • " . $h['host'] . "
  • \n"; } } } } function display_graphs() { if ($_REQUEST['filter'] != '') { $sql_where = "WHERE (title_cache LIKE '%" . $_REQUEST['filter'] . "%' OR gt.name LIKE '%" . $_REQUEST['filter'] . "%') AND local_graph_id>0"; }else{ $sql_where = 'WHERE local_graph_id>0'; } $graphs = db_fetch_assoc("SELECT gtg.local_graph_id AS id, gtg.title_cache AS title, gt.name AS template_name FROM graph_templates_graph AS gtg LEFT JOIN graph_templates AS gt ON gt.id=gtg.graph_template_id $sql_where ORDER BY title_cache LIMIT 20"); if (sizeof($graphs)) { foreach($graphs as $g) { if (is_graph_allowed($g['id'])) { echo "'; } } } } function tree() { global $tree_actions, $item_rows; /* ================= input validation ================= */ input_validate_input_number(get_request_var_request('page')); input_validate_input_number(get_request_var_request('rows')); /* ==================================================== */ /* clean up search string */ if (isset($_REQUEST['filter'])) { $_REQUEST['filter'] = sanitize_search_string(get_request_var_request('filter')); } /* clean up sort_column */ if (isset($_REQUEST['sort_column'])) { $_REQUEST['sort_column'] = sanitize_search_string(get_request_var_request('sort_column')); } /* clean up search string */ if (isset($_REQUEST['sort_direction'])) { $_REQUEST['sort_direction'] = sanitize_search_string(get_request_var_request('sort_direction')); } /* if the user pushed the 'clear' button */ if (isset($_REQUEST['clear_x'])) { kill_session_var('sess_tree_current_page'); kill_session_var('sess_tree_filter'); kill_session_var('sess_default_rows'); kill_session_var('sess_tree_sort_column'); kill_session_var('sess_tree_sort_direction'); unset($_REQUEST['page']); unset($_REQUEST['filter']); unset($_REQUEST['rows']); unset($_REQUEST['sort_column']); unset($_REQUEST['sort_direction']); } /* remember these search fields in session vars so we don't have to keep passing them around */ load_current_session_value('page', 'sess_tree_current_page', '1'); load_current_session_value('filter', 'sess_tree_filter', ''); load_current_session_value('rows', 'sess_default_rows', read_config_option('num_rows_table')); load_current_session_value('sort_column', 'sess_tree_sort_column', 'name'); load_current_session_value('sort_direction', 'sess_tree_sort_direction', 'ASC'); /* if the number of rows is -1, set it to the default */ if ($_REQUEST['rows'] == -1) { $_REQUEST['rows'] = read_config_option('num_rows_table'); } ?> Graph Trees', '100%', '', '3', 'center', 'tree.php?action=edit'); ?>
    Search '> Trees
    '>
    \n"; html_start_box('', '100%', '', '3', 'center', ''); /* form the 'where' clause for our main sql query */ if (strlen(get_request_var_request('filter'))) { $sql_where = "WHERE (t.name LIKE '%" . get_request_var_request('filter') . "%' OR ti.title LIKE '%" . get_request_var_request('filter') . "%')"; }else{ $sql_where = ''; } $trees = db_fetch_assoc("SELECT t.*, SUM(CASE WHEN ti.host_id>0 THEN 1 ELSE 0 END) AS hosts, SUM(CASE WHEN ti.local_graph_id>0 THEN 1 ELSE 0 END) AS graphs, SUM(CASE WHEN ti.local_graph_id=0 AND host_id=0 THEN 1 ELSE 0 END) AS branches FROM graph_tree AS t LEFT JOIN graph_tree_items AS ti ON t.id=ti.graph_tree_id $sql_where GROUP BY t.id ORDER BY " . get_request_var_request('sort_column') . ' ' . get_request_var_request('sort_direction') . ' LIMIT ' . (get_request_var_request('rows')*(get_request_var_request('page')-1)) . ',' . get_request_var_request('rows')); $total_rows = db_fetch_cell("SELECT COUNT(*) FROM graph_tree AS t LEFT JOIN graph_tree_items AS ti ON t.id=ti.graph_tree_id $sql_where GROUP BY t.id"); $nav = html_nav_bar('tree.php?filter=' . get_request_var_request('filter'), MAX_DISPLAY_PAGES, get_request_var_request('page'), get_request_var_request('rows'), $total_rows, 11, 'Trees', 'page', 'main'); print $nav; $display_text = array( 'name' => array('display' => 'Tree Name', 'align' => 'left', 'sort' => 'ASC', 'tip' => 'The name by which this Tree will be referred to as.'), 'id' => array('display' => 'ID', 'align' => 'right', 'sort' => 'ASC', 'tip' => 'The internal database ID for this Tree. Usefull when performing automation or debugging.'), 'enabled' => array('display' => 'Published', 'align' => 'left', 'sort' => 'ASC', 'tip' => 'Unpublished Trees can not be viewed from the Graph tab'), 'locked' => array('display' => 'Locked', 'align' => 'left', 'sort' => 'ASC', 'tip' => 'A Tree must be locked in order to be edited.'), 'user_id' => array('display' => 'Owner', 'align' => 'left', 'sort' => 'ASC', 'tip' => 'The original author of this Tree.'), 'last_modified' => array('display' => 'Last Edited', 'align' => 'right', 'sort' => 'ASC', 'tip' => 'The date that this Tree was last edited.'), 'modified_by' => array('display' => 'Edited By', 'align' => 'right', 'sort' => 'ASC', 'tip' => 'The last user to have modified this Tree.'), 'branches' => array('display' => 'Branches', 'align' => 'right', 'sort' => 'DESC', 'tip' => 'The total number of Branches in this Tree.'), 'hosts' => array('display' => 'Devices', 'align' => 'right', 'sort' => 'DESC', 'tip' => 'The total number of individual Devices in this Tree.'), 'graphs' => array('display' => 'Graphs', 'align' => 'right', 'sort' => 'DESC', 'tip' => 'The total number of individual Graphs in this Tree.')); html_header_sort_checkbox($display_text, get_request_var_request('sort_column'), get_request_var_request('sort_direction'), false); $i = 0; if (sizeof($trees) > 0) { foreach ($trees as $tree) { form_alternate_row('line' . $tree['id'], true); form_selectable_cell("" . (strlen(get_request_var_request('filter')) ? preg_replace('/(' . preg_quote(get_request_var_request('filter'), '/') . ')/i', "\\1", htmlspecialchars($tree['name'])) : htmlspecialchars($tree['name'])) . '', $tree['id']); form_selectable_cell($tree['id'], $tree['id'], '', 'text-align:right'); form_selectable_cell($tree['enabled'] == 'on' ? 'Yes':'No', $tree['id']); form_selectable_cell($tree['locked'] == '1' ? 'Yes':'No', $tree['id']); form_selectable_cell(get_username($tree['user_id']), $tree['id']); form_selectable_cell(substr($tree['last_modified'],0,16), $tree['id'], '', 'text-align:right'); form_selectable_cell(get_username($tree['modified_by']), $tree['id'], '', 'text-align:right'); form_selectable_cell($tree['branches'] > 0 ? number_format($tree['branches']):'-', $tree['id'], '', 'text-align:right'); form_selectable_cell($tree['hosts'] > 0 ? number_format($tree['hosts']):'-', $tree['id'], '', 'text-align:right'); form_selectable_cell($tree['graphs'] > 0 ? number_format($tree['graphs']):'-', $tree['id'], '', 'text-align:right'); form_checkbox_cell($tree['name'], $tree['id']); form_end_row(); } print $nav; }else{ print "No Trees Found"; } html_end_box(false); /* draw the dropdown containing a list of available actions for this form */ draw_actions_dropdown($tree_actions); print "\n"; }