$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');
}