$val) { // save form data $form_data[$var] = $val; if (preg_match('/^cg_(\d+)$/', $var, $matches)) { $selected_graphs['cg'][$matches[1]][$matches[1]] = true; } elseif (preg_match('/^cg_g$/', $var)) { if (gnrv('cg_g') > 0) { $selected_graphs['cg'][gnrv('cg_g')][gnrv('cg_g')] = true; } } elseif (preg_match('/^sg_(\d+)_([a-f0-9]{32})$/', $var, $matches)) { $selected_graphs['sg'][$matches[1]][gnrv('sgg_' . $matches[1])][$matches[2]] = true; } if (str_contains($var, 'sgg_')) { $snmp_query_id = intval(str_replace('sgg_', '', $var)); input_validate_input_number($snmp_query_id, 'sgg'); store_get_selected_dq_index($snmp_query_id); } } // save the json_encoded form data in case of an error $form_data['header'] = false; // every $_POST key lands in $form_data and it is replayed into an // inline __('All')]; $gt = ['-1' => __('Graph Template Based')]; if (!cacti_sizeof($host)) { $host['id'] = ''; $host['description'] = __('Select a Device'); } $graph_types = array_rekey($snmp_queries, 'id', 'name'); $graph_types = $all + $gt + $graph_types; $filters = [ 'rows' => [ [ 'host_id' => [ 'method' => 'drop_callback', 'friendly_name' => __('Device'), 'filter' => FILTER_VALIDATE_INT, 'default' => '', 'pageset' => true, 'sql' => 'SELECT DISTINCT id, description AS name FROM host ORDER BY description', 'action' => 'ajax_hosts', 'id' => $host['id'], 'value' => $host['description'], 'on_change' => 'applyFilter()' ], 'graph_type' => [ 'method' => 'drop_array', 'friendly_name' => __('Graph Type'), 'filter' => FILTER_CALLBACK, 'filter_options' => ['options' => 'sanitize_search_string'], 'default' => read_user_setting('graph_type', read_config_option('default_graphs_new_dropdown'), true), 'pageset' => true, 'array' => $graph_types, 'value' => '-1' ] ], [ 'filter' => [ 'method' => 'textbox', 'friendly_name' => __('Search'), 'filter' => FILTER_DEFAULT, 'placeholder' => __('Enter a search term'), 'size' => '30', 'default' => '', 'pageset' => true, 'max_length' => '120', 'value' => '' ], 'rows' => [ 'method' => 'drop_array', 'friendly_name' => __('Rows'), 'filter' => FILTER_VALIDATE_INT, 'default' => '-1', 'pageset' => true, 'array' => $item_rows, 'value' => '-1' ] ] ], 'buttons' => [ 'go' => [ 'method' => 'submit', 'display' => __('Go'), 'title' => __('Apply Filter to Table'), ], 'clear' => [ 'method' => 'button', 'display' => __('Clear'), 'title' => __('Reset Filter to Default Values'), ], 'save' => [ 'method' => 'button', 'display' => __('Save'), 'title' => __('Save the Filter for the User'), 'url' => 'graphs_new.php?action=ajax_save_filter', 'status' => __('Filter Settings Saved') ] ], 'links' => [ [ 'display' => __('Edit this Device'), 'url' => 'host.php?action=edit&id=' . grv('host_id'), 'class' => 'ti ti-tool newDevice' ], [ 'display' => __('Create New Device'), 'url' => 'host.php?action=edit', 'class' => 'fa-solid fa-gear editDevice' ], ] ]; // process plugin links ob_start(); /** * Prototype - We will convert links into nice glyphs potentially * * * * Auto-create Thresholds *
'; */ api_plugin_hook('graphs_new_top_links'); $new_links = ob_get_clean(); /** * Now that we have anchors, let's add them to the * filter array. */ if ($new_links != '') { $links = new DOMDocument(); $links->loadHTML($new_links); $anchors = $links->getElementsByTagName('a'); if (cacti_sizeof($anchors)) { foreach ($anchors as $a) { $name = $a->textContent; $href = $a->getAttribute('href'); $filters['links'][] = [ 'display' => $name, 'url' => $href, 'class' => 'fa fa-funny' ]; } } } return $filters; } function draw_graphs_new_filter(bool $render = false, string $header_label = '', array $host = [], array $snmp_queries = []) : void { $filters = create_graphs_new_filter($host, $snmp_queries); // create the page filter $pageFilter = new CactiTableFilter($header_label, 'graphs_new.php', 'form_gn', 'sess_gn', '', '', false); $pageFilter->set_filter_array($filters); if ($render) { $pageFilter->render(); } else { $pageFilter->sanitize(); } } function graphs() : void { global $item_rows; if (isrv('host_id') && gfrv('host_id') > 0) { $host = db_fetch_row_prepared('SELECT id, description, hostname, host_template_id FROM host WHERE id = ?', [gfrv('host_id')]); } else { $host = db_fetch_row('SELECT id, description, hostname, host_template_id FROM host ORDER BY description ASC LIMIT 1'); if (cacti_sizeof($host)) { srv('host_id', $host['id']); } else { srv('host_id', '0'); } } if (cacti_sizeof($host)) { $name = db_fetch_cell_prepared('SELECT name FROM host_template WHERE id = ?', [$host['host_template_id']]); $header_label = __esc('New Graphs [ %s - %s ] [ %s ]', $host['description'], $host['hostname'], (!empty($host['host_template_id']) ? $name : '')); } else { $header_label = __('New Graphs [ Search for a Device First ]'); } $snmp_queries = db_fetch_assoc_prepared('SELECT sq.id, sq.name FROM snmp_query AS sq INNER JOIN host_snmp_query AS hsq ON hsq.snmp_query_id = sq.id WHERE hsq.host_id = ? ORDER BY sq.name', [grv('host_id')]); draw_graphs_new_filter(true, $header_label, $host, $snmp_queries); if (grv('rows') == '-1') { $rows = read_user_setting('num_rows_table', read_config_option('num_rows_table'), true); } else { $rows = gfrv('rows'); } form_start('graphs_new.php', 'chk'); $total_rows = cacti_sizeof(db_fetch_assoc_prepared('SELECT graph_template_id FROM host_graph WHERE host_id = ?', [grv('host_id')])); $i = 0; if (grv('changed')) { foreach ($snmp_queries as $query) { kill_session_var('sess_grn_page' . $query['id']); unsrv('page' . $query['id']); load_current_session_value('page' . $query['id'], 'sess_grn_page' . $query['id'], '1'); } } if (grv('graph_type') > 0) { // validate the page filter if (isrv('page' . grv('graph_type'))) { gfrv('page' . grv('graph_type')); } load_current_session_value('page' . grv('graph_type'), 'sess_grn_page' . grv('graph_type'), '1'); } elseif (grv('graph_type') == -2) { foreach ($snmp_queries as $query) { // validate the page filter if (isrv('page' . $query['id'])) { gfrv('page' . $query['id']); } load_current_session_value('page' . $query['id'], 'sess_grn_page' . $query['id'], '1'); } } $script = ""; print $script; } form_hidden_box('save_component_graph', '1', ''); if (!ierv('host_id')) { form_hidden_box('host_id', $host['id'], '0'); form_hidden_box('host_template_id', $host['host_template_id'], '0'); } if (isset($_SERVER['HTTP_REFERER'])) { set_request_var('returnto', validate_redirect_url($_SERVER['HTTP_REFERER'], 'host.php')); } elseif (isset_request_var('returnto')) { set_request_var('returnto', validate_redirect_url(get_nfilter_request_var('returnto'), 'host.php')); } load_current_session_value('returnto', 'sess_grn_returnto', ''); if (!str_contains(gnrv('returnto'), 'host.php')) { srv('returnto', ''); } form_save_button(gnrv('returnto'), 'create'); }