From 91a39ab01e32293eac550f7c2008cb43376f3d9d Mon Sep 17 00:00:00 2001 From: Arturo Gonzalez Date: Thu, 26 Oct 2017 11:03:08 +0200 Subject: [PATCH] Added visual upgrades to filter view --- .../godmode/snmpconsole/snmp_filters.php | 151 ++++++++++++------ pandora_console/include/ajax/snmp.ajax.php | 9 ++ pandora_server/lib/PandoraFMS/SNMPServer.pm | 11 +- 3 files changed, 116 insertions(+), 55 deletions(-) diff --git a/pandora_console/godmode/snmpconsole/snmp_filters.php b/pandora_console/godmode/snmpconsole/snmp_filters.php index 3def7ed776..9316b36b05 100644 --- a/pandora_console/godmode/snmpconsole/snmp_filters.php +++ b/pandora_console/godmode/snmpconsole/snmp_filters.php @@ -45,31 +45,27 @@ else {// Overview header // Create/update filter if ($update_filter > -2) { + // UPDATE if ($update_filter > -1) { $new_unified_id = (db_get_value_sql("SELECT unified_filters_id FROM tsnmp_filter WHERE id_snmp_filter = " . $update_filter)); $elements = get_parameter('elements', array()); - if ($index_post == 1) { - $filter = get_parameter('filter_' . $update_filter); + $elements = explode(",", $elements); + foreach ($elements as $e) { + $filter = get_parameter('filter_' . $e); $values = array('description' => $description, 'filter' => $filter, 'unified_filters_id' => $new_unified_id); - $result = db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $update_filter)); + $result = db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $e)); } - else { - $elements = explode(",", $elements); - foreach ($elements as $e) { - $filter = get_parameter('filter_' . $e); - $values = array('description' => $description, 'filter' => $filter, 'unified_filters_id' => $new_unified_id); - $result = db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $e)); - } - if (count($elements) == 1) { - $new_unified_id = (db_get_value_sql("SELECT MAX(unified_filters_id) FROM tsnmp_filter")) + 1; + if (count($elements) == 1) { + $new_unified_id = (db_get_value_sql("SELECT MAX(unified_filters_id) FROM tsnmp_filter")) + 1; - $filter = get_parameter('filter_' . $elements[0]); - $values = array('description' => $description, 'filter' => $filter, 'unified_filters_id' => $new_unified_id); - $result = db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $elements[0])); - } - for ($i = 1; $i < $index_post; $i++) { - $filter = get_parameter('filter_' . $i); + $filter = get_parameter('filter_' . $elements[0]); + $values = array('description' => $description, 'filter' => $filter, 'unified_filters_id' => $new_unified_id); + $result = db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $elements[0])); + } + for ($i = 1; $i < $index_post; $i++) { + $filter = get_parameter('filter_' . $i); + if ($filter != "") { $values = array( 'description' => $description, 'filter' => $filter, @@ -77,6 +73,7 @@ if ($update_filter > -2) { $result = db_process_sql_insert('tsnmp_filter', $values); } } + if ($result === false) { ui_print_error_message (__('There was a problem updating the filter')); } @@ -84,6 +81,7 @@ if ($update_filter > -2) { ui_print_success_message (__('Successfully updated')); } } + // CREATE else { $new_unified_id = (db_get_value_sql("SELECT MAX(unified_filters_id) FROM tsnmp_filter")) + 1; @@ -115,17 +113,15 @@ if ($update_filter > -2) { } } else if ($delete_filter > -1) { // Delete - $filters_to_upd = db_get_all_rows_sql("SELECT * FROM tsnmp_filter WHERE unified_filters_id = (SELECT unified_filters_id FROM tsnmp_filter WHERE id_snmp_filter = " . $delete_filter . ")"); - if (count($filters_to_upd) == 2) { - foreach ($filters_to_upd as $fil) { - if ($fil['id_snmp_filter'] != $delete_filter) { - $values = array('description' => $fil['description'], 'filter' => $fil['filter'], 'unified_filters_id' => 0); - db_process_sql_update('tsnmp_filter', $values, array('id_snmp_filter' => $fil['id_snmp_filter'])); - } - } - + $unified_id_to_delete = (db_get_value_sql("SELECT unified_filters_id FROM tsnmp_filter WHERE id_snmp_filter = " . $delete_filter)); + + if ($unified_id_to_delete == 0) { + $result = db_process_sql_delete('tsnmp_filter', array('id_snmp_filter' => $delete_filter)); } - $result = db_process_sql_delete('tsnmp_filter', array('id_snmp_filter' => $delete_filter)); + else { + $result = db_process_sql_delete('tsnmp_filter', array('unified_filters_id' => $unified_id_to_delete)); + } + if ($result === false) { ui_print_error_message (__('There was a problem deleting the filter')); } @@ -164,7 +160,11 @@ if ($edit_filter > -2) { if ($j == 1) { $table->data[$j][1] .= ui_print_help_tip (__("This field contains a substring, could be part of a IP address, a numeric OID, or a plain substring") . SEPARATOR_COLUMN, true); } + else { + $table->data[$j][1] .= html_print_image('images/cross.png', true, array('id' => 'delete_filter_' . $f['id_snmp_filter'], 'alt' => __('Click to add new filter'), 'title' => __('Click to add new filter'))); + } $j++; + $index++; } } else { @@ -196,13 +196,13 @@ if ($edit_filter > -2) { // Overview } else { - $result = db_get_all_rows_sql("SELECT * FROM tsnmp_filter ORDER BY unified_filters_id ASC"); - if ($result === false) { - $result = array (); - require_once ($config['homedir'] . "/general/firts_task/snmp_filters.php"); - return; + $result_unified = db_get_all_rows_sql("SELECT DISTINCT(unified_filters_id) FROM tsnmp_filter ORDER BY unified_filters_id ASC"); + + $aglomerate_result = array(); + foreach ($result_unified as $res) { + $aglomerate_result[$res['unified_filters_id']] = db_get_all_rows_sql("SELECT * FROM tsnmp_filter WHERE unified_filters_id = " . $res['unified_filters_id'] . " ORDER BY id_snmp_filter ASC"); } - + $table->data = array (); $table->head = array (); $table->size = array (); @@ -214,26 +214,46 @@ else { $table->head[0] = __('Description'); $table->head[1] = __('Filter'); - $table->head[2] = __('Function'); - $table->head[3] = __('Action'); - $table->size[3] = "50px"; - $table->align[3] = 'center'; - - foreach ($result as $row) { - $data = array (); - $data[0] = '' . $row['description'] . ''; - $data[1] = $row['filter']; - if ($row['unified_filters_id'] == 0) { - $data[2] = "OR"; + $table->head[2] = __('Action'); + $table->size[2] = "50px"; + $table->align[2] = 'center'; + + foreach ($aglomerate_result as $ind => $row) { + if ($ind == 0) { + foreach ($row as $r) { + $data = array (); + $data[0] = '' . $r['description'] . ''; + $data[1] = $r['filter']; + $data[2] = '' . + html_print_image("images/config.png", true, array("border" => '0', "alt" => __('Update'))) . '' . + '  ' . + html_print_image("images/cross.png", true, array("border" => '0', "alt" => __('Delete'))) . ''; + array_push ($table->data, $data); + } } else { - $data[2] = "AND (" . $row['unified_filters_id'] . ")"; + $ind2 = 0; + $compose_filter = array(); + $compose_id = ""; + $compose_action = ""; + foreach ($row as $i => $r) { + if ($ind2 == 0) { + $compose_id = '' . $r['description'] . ''; + $compose_action = '' . + html_print_image("images/config.png", true, array("border" => '0', "alt" => __('Update'))) . '' . + '  ' . + html_print_image("images/cross.png", true, array("border" => '0', "alt" => __('Delete'))) . ''; + $ind2++; + } + $compose_filter[] = $r['filter']; + } + $data = array (); + $data[0] = $compose_id; + $data[1] = implode(" AND ", $compose_filter); + $data[2] = $compose_action; + array_push ($table->data, $data); } - $data[3] = '' . - html_print_image("images/config.png", true, array("border" => '0', "alt" => __('Update'))) . '' . - '  ' . - html_print_image("images/cross.png", true, array("border" => '0', "alt" => __('Delete'))) . ''; - array_push ($table->data, $data); + } if (!empty ($table->data)) { @@ -254,11 +274,38 @@ else { $(document).ready (function () { $('#add_filter').click(function(e) { - $('#filter_table').append(''); + $('#filter_table').append('Click to delete the filter'); id++; $('#hidden-index_post').val(id); }); + + $('[id^=delete_filter_]').click(function(e) { + var elem_id = this.id; + var id_array = elem_id.split("delete_filter_"); + var id = id_array[1]; + + params = {}; + params['page'] = "include/ajax/snmp.ajax"; + params['delete_snmp_filter'] = 1; + params['filter_id'] = id; + + jQuery.ajax ({ + data: params, + type: "POST", + url: "ajax.php", + dataType: "html", + success: function(data){ + var elem = $('#hidden-elements').val(); + $('#hidden-elements').val(elem - 1); + $('#' + elem_id).parent().parent().remove(); + } + }); + }); }); + + function delete_this_row (id_row) { + $('#filter_table-' + id_row).remove(); + } diff --git a/pandora_console/include/ajax/snmp.ajax.php b/pandora_console/include/ajax/snmp.ajax.php index 7b3e45c704..a372d50e11 100644 --- a/pandora_console/include/ajax/snmp.ajax.php +++ b/pandora_console/include/ajax/snmp.ajax.php @@ -20,6 +20,7 @@ require_once("include/functions_snmp.php"); $save_snmp_translation = (bool)get_parameter('save_snmp_translation', 0); $delete_snmp_translation = (bool)get_parameter('delete_snmp_translation', 0); $update_snmp_translation = (bool)get_parameter('update_snmp_translation', 0); +$delete_snmp_filter = (bool)get_parameter('delete_snmp_filter', 0); /* skins image checks */ if ($save_snmp_translation) { @@ -56,4 +57,12 @@ if ($update_snmp_translation) { return; } + +if ($delete_snmp_filter) { + $filter_id = get_parameter('filter_id'); +html_debug($filter_id, true); + db_process_sql_delete('tsnmp_filter', array('id_snmp_filter' => $filter_id)); + + return; +} ?> diff --git a/pandora_server/lib/PandoraFMS/SNMPServer.pm b/pandora_server/lib/PandoraFMS/SNMPServer.pm index 2ea002bb1b..83af3c24ac 100644 --- a/pandora_server/lib/PandoraFMS/SNMPServer.pm +++ b/pandora_server/lib/PandoraFMS/SNMPServer.pm @@ -344,13 +344,18 @@ sub pandora_snmptrapd { ######################################################################################## sub matches_filter ($$$) { my ($dbh, $pa_config, $string) = @_; - + use Data::Dumper; + $Data::Dumper::Sortkeys = 1; my @filter_unique_functions = get_db_rows ($dbh, 'SELECT DISTINCT(unified_filters_id) FROM tsnmp_filter ORDER BY unified_filters_id'); - + Dumper("++++++++++++++++++++++"); + Dumper(@filter_unique_functions); + Dumper("++++++++++++++++++++++"); foreach my $filter_unique_func (@filter_unique_functions) { # Get filters my @filters = get_db_rows ($dbh, 'SELECT filter FROM tsnmp_filter WHERE unified_filters_id = ' . $filter_unique_func->{'unified_filters_id'}); - + Dumper("-----------------------"); + Dumper(@filters); + Dumper("-----------------------"); my $eval_acum = 1; foreach my $filter (@filters) { my $regexp = safe_output($filter->{'filter'}) ;