include("./include/auth.php"); include_once(CACTI_BASE_PATH . "/lib/utility.php"); include_once(CACTI_BASE_PATH . "/lib/api_graph.php"); include_once(CACTI_BASE_PATH . "/lib/api_tree.php"); include_once(CACTI_BASE_PATH . "/lib/api_data_source.php"); include_once(CACTI_BASE_PATH . "/lib/template.php"); include_once(CACTI_BASE_PATH . "/lib/html_tree.php"); include_once(CACTI_BASE_PATH . "/lib/html_form_template.php"); include_once(CACTI_BASE_PATH . "/lib/rrd.php"); include_once(CACTI_BASE_PATH . "/lib/data_query.php"); include_once(CACTI_BASE_PATH . "/lib/graph/graph_info.php"); include_once(CACTI_BASE_PATH . "/lib/graph/graphs_form.php"); define("MAX_DISPLAY_PAGES", 21); $graph_actions = api_plugin_hook_function('graphs_action_array', graph_actions_list()); /* set default action */ if (!isset($_REQUEST["action"])) { $_REQUEST["action"] = ""; } switch (get_request_var_request("action")) { case 'save': graph_form_save(); break; case 'actions': graph_form_actions(); break; case 'graph_diff': include_once(CACTI_BASE_PATH . "/include/top_header.php");
function graph() { global $colors, $item_rows; require_once(CACTI_BASE_PATH . "/lib/graph/graph_info.php"); require_once(CACTI_BASE_PATH . "/include/auth/auth_constants.php"); /* ================= input validation ================= */ input_validate_input_number(get_request_var_request("device_id")); input_validate_input_number(get_request_var_request("rows")); input_validate_input_number(get_request_var_request("template_id")); input_validate_input_number(get_request_var_request("page")); /* ==================================================== */ /* clean up search string */ if (isset($_REQUEST["filter"])) { $_REQUEST["filter"] = sanitize_search_string(get_request_var("filter")); } /* clean up sort_column string */ if (isset($_REQUEST["sort_column"])) { $_REQUEST["sort_column"] = sanitize_search_string(get_request_var("sort_column")); } /* clean up sort_direction string */ if (isset($_REQUEST["sort_direction"])) { $_REQUEST["sort_direction"] = sanitize_search_string(get_request_var("sort_direction")); } /* if the user pushed the 'clear' button */ if (isset($_REQUEST["clear_x"])) { kill_session_var("sess_graph_current_page"); kill_session_var("sess_graph_filter"); kill_session_var("sess_graph_sort_column"); kill_session_var("sess_graph_sort_direction"); if (!substr_count($_SERVER["REQUEST_URI"], "/devices.php")) { kill_session_var("sess_graph_device_id"); } kill_session_var("sess_graph_rows"); kill_session_var("sess_graph_template_id"); unset($_REQUEST["page"]); unset($_REQUEST["filter"]); unset($_REQUEST["sort_column"]); unset($_REQUEST["sort_direction"]); if (!substr_count($_SERVER["REQUEST_URI"], "/devices.php")) { unset($_REQUEST["device_id"]); } unset($_REQUEST["rows"]); unset($_REQUEST["template_id"]); } /* let's see if someone changed an important setting */ $changed = FALSE; $changed += check_changed("filter", "sess_ds_filter"); $changed += check_changed("rows", "sess_ds_rows"); $changed += check_changed("device_id", "sess_ds_device_id"); $changed += check_changed("template_id", "sess_ds_template_id"); if ($changed) { $_REQUEST["page"] = "1"; } /* remember these search fields in session vars so we don't have to keep passing them around */ load_current_session_value("page", "sess_graph_current_page", "1"); load_current_session_value("filter", "sess_graph_filter", ""); load_current_session_value("sort_column", "sess_graph_sort_column", "title_cache"); load_current_session_value("sort_direction", "sess_graph_sort_direction", "ASC"); load_current_session_value("device_id", "sess_graph_device_id", "-1"); load_current_session_value("rows", "sess_graph_rows", "-1"); load_current_session_value("template_id", "sess_graph_template_id", "-1"); ?> <script type="text/javascript"> <!-- $().ready(function() { $("#device").autocomplete("./lib/ajax/get_devices_brief.php", { max: 8, highlight: false, scroll: true, scrollHeight: 300 }); $("#device").result(function(event, data, formatted) { if (data) { $(this).parent().find("#device_id").val(data[1]); applyGraphsFilterChange(document.form_graph_id); }else{ $(this).parent().find("#device_id").val(0); } }); }); function clearGraphsFilterChange(objForm) { strURL = '?filter='; <?php # called from outside if (isset($_REQUEST["tab"])) { # print the tab print "strURL = strURL + &tab=" . $_REQUEST["tab"] . "';"; # now look for more parameters if (isset($_REQUEST["device_id"])) { print "strURL = strURL + '&device_id=" . $_REQUEST["device_id"] . "&id=" . $_REQUEST["device_id"] . "';"; } if (isset($_REQUEST["template_id"])) { print "strURL = strURL + '&template_id=" . $_REQUEST["template_id"] . "&id=" . $_REQUEST["template_id"] . "';"; } }else { # clear all parms print "strURL = strURL + '&device_id=-1';"; print "strURL = strURL + '&template_id=-1';"; } ?> strURL = strURL + '&rows=-1'; document.location = strURL; } function applyGraphsFilterChange(objForm) { strURL = '?filter=' + objForm.filter.value; // take care of parms provided via autocomplete // those are passed as objForm.<parm>.value // instead of $_REQUEST["<parm>"] when called from outside if (objForm.device_id.value) { strURL = '?device_id=' + objForm.device_id.value; }else{ <?php print (isset($_REQUEST["device_id"]) ? "strURL = strURL + '&device_id=" . $_REQUEST["device_id"] . "&id=" . $_REQUEST["device_id"] . "';" : "strURL = strURL + '&device_id=-1';");?> } if (objForm.template_id.value) { strURL = '?template_id=' + objForm.template_id.value; }else{ <?php print (isset($_REQUEST["template_id"]) ? "strURL = strURL + '&template_id=" . $_REQUEST["template_id"] . "&id=" . $_REQUEST["template_id"] . "';" : "strURL = strURL + '&template_id=-1';");?> } strURL = strURL + '&rows=' + objForm.rows.value; document.location = strURL; } --> </script> <?php html_start_box("<strong>" . __("Graph Management") . "</strong>", "100", $colors["header"], "3", "center", "graphs.php?action=graph_edit&device_id=" . $_REQUEST["device_id"], true); ?> <tr class='rowAlternate2'> <td> <form name="form_graph_id" action="graphs.php"> <table cellpadding="0" cellspacing="3"> <tr> <td class="nw50"> <?php print __("Host:");?> </td> <td width="1"> <?php if (isset($_REQUEST["device_id"])) { $hostname = db_fetch_cell("SELECT description as name FROM device WHERE id=".$_REQUEST["device_id"]." ORDER BY description,hostname"); } else { $hostname = ""; } ?> <input class="ac_field" type="text" id="device" size="30" value="<?php print $hostname; ?>"> <input type="hidden" id="device_id"> </td> <td width="70"> <?php print __("Template:");?> </td> <td width="1"> <select name="template_id" onChange="applyGraphsFilterChange(document.form_graph_id)"> <option value="-1"<?php if (get_request_var_request("template_id") == "-1") {?> selected<?php }?>><?php print __("Any");?></option> <option value="0"<?php if (get_request_var_request("template_id") == "0") {?> selected<?php }?>><?php print __("None");?></option> <?php if (read_config_option("auth_method") != 0) { $templates = db_fetch_assoc("SELECT DISTINCT graph_templates.id, graph_templates.name FROM (graph_templates_graph,graph_local) LEFT JOIN device ON (device.id=graph_local.device_id) LEFT JOIN graph_templates ON (graph_templates.id=graph_local.graph_template_id) LEFT JOIN user_auth_perms ON ((graph_templates_graph.local_graph_id=user_auth_perms.item_id and user_auth_perms.type=" . PERM_GRAPHS . " and user_auth_perms.user_id=" . $_SESSION["sess_user_id"] . ") OR (device.id=user_auth_perms.item_id and user_auth_perms.type=" . PERM_DEVICES . " and user_auth_perms.user_id=" . $_SESSION["sess_user_id"] . ") OR (graph_templates.id=user_auth_perms.item_id and user_auth_perms.type=" . PERM_GRAPH_TEMPLATES . " and user_auth_perms.user_id=" . $_SESSION["sess_user_id"] . ")) WHERE graph_templates_graph.local_graph_id=graph_local.id AND graph_templates.id IS NOT NULL " . (empty($sql_where) ? "" : "AND $sql_where") . " ORDER BY name"); }else{ $templates = db_fetch_assoc("SELECT DISTINCT graph_templates.id, graph_templates.name FROM graph_templates ORDER BY name"); } if (sizeof($templates) > 0) { foreach ($templates as $template) { print "<option value='" . $template["id"] . "'"; if (get_request_var_request("template_id") == $template["id"]) { print " selected"; } print ">" . title_trim($template["name"], 40) . "</option>\n"; } } ?> </select> </td> <td class="nw120"> <input type="submit" Value="<?php print __("Go");?>" name="go" align="middle"> <input type="button" Value="<?php print __("Clear");?>" name="clear_x" align="middle" onClick="clearGraphsFilterChange(document.form_graph_id)"> </td> </tr> </table> <table cellpadding="0" cellspacing="3"> <tr> <td class="nw50"> <?php print __("Search:");?> </td> <td> <input type="text" name="filter" size="40" value="<?php print $_REQUEST["filter"];?>"> </td> <td class="nw50"> <?php print __("Rows:");?> </td> <td width="1"> <select name="rows" onChange="applyGraphsFilterChange(document.form_graph_id)"> <option value="-1"<?php if (get_request_var_request("rows") == "-1") {?> selected<?php }?>><?php print __("Default");?></option> <?php if (sizeof($item_rows) > 0) { foreach ($item_rows as $key => $value) { print "<option value='" . $key . "'"; if (get_request_var_request("rows") == $key) { print " selected"; } print ">" . $value . "</option>\n"; } } ?> </select> </td> </tr> </table> <input type='hidden' name='page' value='1'> </form> </td> </tr> <?php html_end_box(false); /* form the 'where' clause for our main sql query */ if (strlen(get_request_var_request("filter"))) { $sql_where = "AND (graph_templates_graph.title_cache like '%%" . $_REQUEST["filter"] . "%%'" . " OR graph_templates.name like '%%" . get_request_var_request("filter") . "%%')"; }else{ $sql_where = ""; } if (get_request_var_request("device_id") == "-1") { /* Show all items */ }elseif (get_request_var_request("device_id") == "0") { $sql_where .= " AND graph_local.device_id=0"; }elseif (!empty($_REQUEST["device_id"])) { $sql_where .= " AND graph_local.device_id=" . $_REQUEST["device_id"]; } if (get_request_var_request("template_id") == "-1") { /* Show all items */ }elseif (get_request_var_request("template_id") == "0") { $sql_where .= " AND graph_templates_graph.graph_template_id=0"; }elseif (!empty($_REQUEST["template_id"])) { $sql_where .= " AND graph_templates_graph.graph_template_id=" . $_REQUEST["template_id"]; } html_start_box("", "100", $colors["header"], "0", "center", ""); if (get_request_var_request("rows") == "-1") { $rows = read_config_option("num_rows_graph"); }else{ $rows = get_request_var_request("rows"); } $total_rows = db_fetch_cell("SELECT COUNT(graph_templates_graph.id) FROM (graph_local,graph_templates_graph) LEFT JOIN graph_templates ON (graph_local.graph_template_id=graph_templates.id) WHERE graph_local.id=graph_templates_graph.local_graph_id $sql_where"); $graph_list = db_fetch_assoc("SELECT graph_templates_graph.id, graph_templates_graph.local_graph_id, graph_templates_graph.height, graph_templates_graph.width, graph_templates_graph.title_cache, graph_templates.name, graph_local.device_id FROM (graph_local,graph_templates_graph) LEFT JOIN graph_templates ON (graph_local.graph_template_id=graph_templates.id) WHERE graph_local.id=graph_templates_graph.local_graph_id $sql_where ORDER BY " . get_request_var_request('sort_column') . " " . get_request_var_request('sort_direction') . " LIMIT " . ($rows*(get_request_var_request("page")-1)) . "," . $rows); /* generate page list navigation */ $nav = html_create_nav($_REQUEST["page"], MAX_DISPLAY_PAGES, $rows, $total_rows, 7, "graphs.php"); print $nav; html_end_box(false); $display_text = array( "title_cache" => array(__("Graph Title"), "ASC"), "local_graph_id" => array(__("ID"), "ASC"), "name" => array(__("Template Name"), "ASC"), "height" => array(__("Size"), "ASC")); html_header_sort_checkbox($display_text, get_request_var_request("sort_column"), get_request_var_request("sort_direction")); if (sizeof($graph_list) > 0) { foreach ($graph_list as $graph) { $template_name = ((empty($graph["name"])) ? "<em>" . __("None") . "</em>" : $graph["name"]); form_alternate_row_color('line' . $graph["local_graph_id"], true); form_selectable_cell("<a class='linkEditMain' href='" . htmlspecialchars("graphs.php?action=graph_edit&id=" . $graph["local_graph_id"] . "' title='" . $graph["title_cache"]) . "'>" . (($_REQUEST["filter"] != "") ? preg_replace("/(" . preg_quote($_REQUEST["filter"]) . ")/i", "<span class=\"filter\">\\1</span>", title_trim($graph["title_cache"], read_config_option("max_title_graph"))) : title_trim($graph["title_cache"], read_config_option("max_title_graph"))) . "</a>", $graph["local_graph_id"]); form_selectable_cell($graph["local_graph_id"], $graph["local_graph_id"]); form_selectable_cell((($_REQUEST["filter"] != "") ? preg_replace("/(" . preg_quote($_REQUEST["filter"]) . ")/i", "<span class=\"filter\">\\1</span>", $template_name) : $template_name), $graph["local_graph_id"]); form_selectable_cell($graph["height"] . "x" . $graph["width"], $graph["local_graph_id"]); form_checkbox_cell($graph["title_cache"], $graph["local_graph_id"]); form_end_row(); } form_end_table(); /* put the nav bar on the bottom as well */ print $nav; }else{ print "<tr><td><em>" . __("No Graphs Found") . "</em></td></tr>"; } print "</table>\n"; # end table of html_header_sort_checkbox /* add a list of tree names to the actions dropdown */ $graph_actions = array_merge(graph_actions_list(), api_tree_add_tree_names_to_actions_array()); /* draw the dropdown containing a list of available actions for this form */ draw_actions_dropdown($graph_actions); print "</form>\n"; # end form of html_header_sort_checkbox }