__x('dropdown action', 'Delete'), 2 => __x('dropdown action', 'Publish'), 3 => __x('dropdown action', 'Un Publish') ); /* set default action */ set_default_action(); if (get_request_var('action') != '') { /* ================= input validation and session storage ================= */ $filters = array( 'tree_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'leaf_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'graph_tree_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'parent_item_id' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'parent' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '/([_\-a-z:0-9#]+)/')), 'pageset' => true, 'default' => '' ), 'position' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => '' ), 'nodeid' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '/([_\-a-z:0-9#]+)/')), 'pageset' => true, 'default' => '' ), 'id' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp' => '/([_\-a-z:0-9#]+)/')), 'pageset' => true, 'default' => '' ), 'text' => array( 'filter' => FILTER_CALLBACK, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ), 'filter' => array( 'filter' => FILTER_CALLBACK, 'default' => '', 'options' => array('options' => 'sanitize_search_string') ) ); validate_store_request_vars($filters); /* ================= input validation ================= */ } switch (get_request_var('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 'tree_up': tree_up(); break; case 'tree_down': tree_down(); break; case 'lock': api_tree_lock(get_request_var('id'), $_SESSION['sess_user_id']); break; case 'unlock': api_tree_unlock(get_request_var('id'), $_SESSION['sess_user_id']); break; case 'copy_node': api_tree_copy_node(get_request_var('tree_id'), get_request_var('id'), get_request_var('parent'), get_request_var('position')); break; case 'create_node': api_tree_create_node(get_request_var('tree_id'), get_request_var('id'), get_request_var('position'), get_request_var('text')); break; case 'delete_node': api_tree_delete_node(get_request_var('tree_id'), get_request_var('id')); break; case 'move_node': api_tree_move_node(get_request_var('tree_id'), get_request_var('id'), get_request_var('parent'), get_request_var('position')); break; case 'rename_node': api_tree_rename_node(get_request_var('tree_id'), get_request_var('id'), get_request_var('text')); break; case 'get_node': api_tree_get_node(get_request_var('tree_id'), get_request_var('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 tree_down() { $tree_id = get_filter_request_var('id'); $seq = db_fetch_cell_prepared('SELECT sequence FROM graph_tree WHERE id = ?', array($tree_id)); $new_seq = $seq + 1; /* update the old tree first */ db_execute_prepared('UPDATE graph_tree SET sequence = ? WHERE sequence = ?', array($seq, $new_seq)); /* update the tree in question */ db_execute_prepared('UPDATE graph_tree SET sequence = ? WHERE id = ?', array($new_seq, $tree_id)); header('Location: tree.php?header=false'); exit; } function tree_up() { $tree_id = get_filter_request_var('id'); $seq = db_fetch_cell_prepared('SELECT sequence FROM graph_tree WHERE id = ?', array($tree_id)); $new_seq = $seq - 1; /* update the old tree first */ db_execute_prepared('UPDATE graph_tree SET sequence = ? WHERE sequence = ?', array($seq, $new_seq)); /* update the tree in question */ db_execute_prepared('UPDATE graph_tree SET sequence = ? WHERE id = ?', array($new_seq, $tree_id)); header('Location: tree.php?header=false'); exit; } function get_host_sort_type() { if (isset_request_var('nodeid')) { $ndata = explode('_', get_request_var('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_var('type')) { set_request_var('type', sanitize_search_string(get_request_var('type'))); } if (isset_request_var('nodeid')) { $ndata = explode('_', get_request_var('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 (get_request_var('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 = ? WHERE id = ?', array($type, $branch)); break; } } } } return; } function get_branch_sort_type() { if (isset_request_var('nodeid')) { $ndata = explode('_', get_request_var('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 __x('ordering of tree items', 'inherit'); break; case TREE_ORDERING_NONE: print __x('ordering of tree items', 'manual'); break; case TREE_ORDERING_ALPHABETIC: print __x('ordering of tree items', 'alpha'); break; case TREE_ORDERING_NATURAL: print __x('ordering of tree items', 'natural'); break; case TREE_ORDERING_NUMERIC: print __x('ordering of tree items', 'numeric'); break; default: print ''; break; } break; } } } }else{ print ''; } } function set_branch_sort_type() { $type = ''; $branch = ''; /* clean up type string */ if (isset_request_var('type')) { set_request_var('type', sanitize_search_string(get_request_var('type'))); } if (isset_request_var('nodeid')) { $ndata = explode('_', get_request_var('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(get_request_var('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 (is_numeric($type) && is_numeric($branch)) { db_execute_prepared('UPDATE graph_tree_items SET sort_children_type = ? WHERE id = ?', array($type, $branch)); } $first_child = db_fetch_row_prepared('SELECT id, graph_tree_id FROM graph_tree_items WHERE parent = ? ORDER BY position LIMIT 1', array($branch)); if (!empty($first_child)) { api_tree_sort_branch($first_child['id'], $first_child['graph_tree_id']); } 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_request_var('save_component_tree')) { /* ================= input validation ================= */ get_filter_request_var('id'); /* ==================================================== */ if (get_filter_request_var('id') > 0) { $prev_order = db_fetch_cell_prepared('SELECT sort_type FROM graph_tree WHERE id = ?', array(get_request_var('id'))); } $save['id'] = get_request_var('id'); $save['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', false, 3); $save['sort_type'] = form_input_validate(get_nfilter_request_var('sort_type'), 'sort_type', '', true, 3); $save['last_modified'] = date('Y-m-d H:i:s', time()); $save['enabled'] = get_nfilter_request_var('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 */ if ($save['sort_type'] != $prev_order) { if ($save['sort_type'] != TREE_ORDERING_NONE) { sort_recursive(0, $tree_id); } } }else{ raise_message(2); } } header("Location: tree.php?header=false&action=edit&id=$tree_id"); exit; } } function sort_recursive($branch, $tree_id) { $leaves = db_fetch_assoc_prepared('SELECT * FROM graph_tree_items WHERE graph_tree_id = ? AND parent = ? AND local_graph_id = 0 AND host_id = 0', array($tree_id, $branch)); if (sizeof($leaves)) { foreach($leaves as $leaf) { if ($leaf['sort_children_type'] == TREE_ORDERING_INHERIT) { $first_child = db_fetch_cell_prepared('SELECT id FROM graph_tree_items WHERE parent = ?', array($leaf['id'])); if (!empty($first_child)) { api_tree_sort_branch($first_child, $tree_id); if (leaves_exist($leaf['id'], $tree_id)) { sort_recursive($first_child, $tree_id); } } } } } } function leaves_exist($parent, $tree_id) { return db_fetch_assoc_prepared('SELECT COUNT(*) FROM graph_tree_items WHERE graph_tree_id = ? AND parent = ? AND local_graph_id = 0 AND host_id = 0', array($tree_id, $parent)); } /* ----------------------- Tree Item Functions ----------------------- */ function form_actions() { global $tree_actions; /* ================= input validation ================= */ get_filter_request_var('drp_action', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^([a-zA-Z0-9_]+)$/'))); /* ==================================================== */ /* if we are to save this form, instead of display it */ if (isset_request_var('selected_items')) { $selected_items = sanitize_unserialize_selected_items(get_nfilter_request_var('selected_items')); if ($selected_items != false) { if (get_nfilter_request_var('drp_action') == '1') { /* delete */ db_execute('DELETE FROM graph_tree WHERE ' . array_to_sql_or($selected_items, 'id')); db_execute('DELETE FROM graph_tree_items WHERE ' . array_to_sql_or($selected_items, 'graph_tree_id')); }elseif (get_nfilter_request_var('drp_action') == '2') { /* publish */ db_execute("UPDATE graph_tree SET enabled='on', last_modified=NOW(), modified_by=" . $_SESSION['sess_user_id'] . ' WHERE ' . array_to_sql_or($selected_items, 'id')); }elseif (get_nfilter_request_var('drp_action') == '3') { /* un-publish */ db_execute("UPDATE graph_tree SET enabled='', last_modified=NOW(), modified_by=" . $_SESSION['sess_user_id'] . ' WHERE ' . array_to_sql_or($selected_items, 'id')); } } header('Location: tree.php?header=false'); exit; } /* setup some variables */ $tree_list = ''; $i = 0; /* loop through each of the selected items */ while (list($var,$val) = each($_POST)) { if (preg_match('/^chk_([0-9]+)$/', $var, $matches)) { /* ================= input validation ================= */ input_validate_input_number($matches[1]); /* ==================================================== */ $tree_list .= '
" . __n('Click \'Continue\' to delete the following Tree.', 'Click \'Continue\' to delete following Trees.', sizeof($tree_array)) . "
" . __n('Click \'Continue\' to publish the following Tree.', 'Click \'Continue\' to publish following Trees.', sizeof($tree_array)) . "
" . __n('Click \'Continue\' to un-publish the following Tree.', 'Click \'Continue\' to un-publish following Trees.', sizeof($tree_array)) . "
| " . __('To Edit this tree, you must first lock it by pressing the Edit Tree button.') . " |
| " . __('This tree has been locked for Editing on %1$s by %2$s.', $tree['locked_date'], get_username($tree['modified_by'])); if ($tree['modified_by'] == $_SESSION['sess_user_id']) { $editable = true; $lockdiv .= ' |
| \n"; html_start_box( __('Tree Items'), '100%', '', '3', 'center', ''); echo " |
| \n"; html_start_box( __('Available Devices'), '100%', '', '3', 'center', ''); ?> | \n";
display_hosts();
echo " | \n";
html_end_box();
print "\n"; html_start_box( __('Available Graphs'), '100%', '', '3', 'center', ''); ?> | \n";
display_graphs();
echo " | \n";
html_end_box();
print "