diff --git a/pandora_console/extras/mr/67.sql b/pandora_console/extras/mr/67.sql index b39966171c..b39a27be08 100644 --- a/pandora_console/extras/mr/67.sql +++ b/pandora_console/extras/mr/67.sql @@ -18,6 +18,8 @@ ALTER TABLE `tevent_rule` DROP COLUMN `operator_user_comment`; ALTER TABLE treport_content ADD check_unknowns_graph tinyint DEFAULT 0 NULL; +ALTER TABLE `tevent_filter` +ADD COLUMN `regex` TEXT NULL AFTER `private_filter_user`; -- Update macros for plugin oracle UPDATE `tdiscovery_apps` SET `version` = '1.1' WHERE `short_name` = 'pandorafms.oracle'; diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 2072cd1d5d..0aea4cf37f 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -314,6 +314,7 @@ if ($save_event_filter) { $values['severity'] = implode(',', get_parameter('severity', -1)); $values['status'] = get_parameter('status'); $values['search'] = get_parameter('search'); + $values['regex'] = get_parameter('regex'); $values['not_search'] = get_parameter('not_search'); $values['text_agent'] = get_parameter('text_agent'); $values['id_agent'] = get_parameter('id_agent'); @@ -382,6 +383,7 @@ if ($update_event_filter) { $values['severity'] = implode(',', get_parameter('severity', -1)); $values['status'] = get_parameter('status'); $values['search'] = get_parameter('search'); + $values['regex'] = get_parameter('regex'); $values['not_search'] = get_parameter('not_search'); $values['text_agent'] = get_parameter('text_agent'); $values['id_agent'] = get_parameter('id_agent'); @@ -641,6 +643,8 @@ function load_form_filter() { $("#status").val(val); if (i == 'search') $('#text-search').val(val); + if (i == 'regex') + $('#text-regex').val(val); if (i == 'not_search') $('#checkbox-not_search').val(val); if (i == 'text_agent') @@ -971,6 +975,7 @@ function save_new_filter() { "severity" : $("#severity").val(), "status" : $("#status").val(), "search" : $("#text-search").val(), + "regex" : $('#text-regex').val(), "not_search" : $("#checkbox-not_search").val(), "text_agent" : $("#text_id_agent").val(), "id_agent" : $('input:hidden[name=id_agent]').val(), @@ -1051,6 +1056,7 @@ function save_update_filter() { "severity" : $("#severity").val(), "status" : $("#status").val(), "search" : $("#text-search").val(), + "regex" : $('#text-regex').val(), "not_search" : $("#checkbox-not_search").val(), "text_agent" : $("#text_id_agent").val(), "id_agent" : $('input:hidden[name=id_agent]').val(), diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 08c3740276..5292bb46a1 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -130,6 +130,11 @@ $severity = get_parameter( 'filter[severity]', ($filter['severity'] ?? '') ); +$regex = get_parameter( + 'filter[regex]', + (io_safe_output($filter['regex']) ?? '') +); +unset($filter['regex']); $status = get_parameter( 'filter[status]', ($filter['status'] ?? '') @@ -473,7 +478,7 @@ if (is_ajax() === true) { $data = array_reduce( $events, - function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url, $compact_name_event) { + function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url, $compact_name_event, $regex) { global $config; $tmp = (object) $item; @@ -1208,12 +1213,34 @@ if (is_ajax() === true) { } } + if (empty($tmp) === false && $regex !== '') { + $regex_validation = false; + foreach (json_decode(json_encode($tmp), true) as $key => $field) { + if (preg_match('/'.$regex.'/', $field)) { + $regex_validation = true; + } + } + + if ($regex_validation === false) { + unset($tmp); + } + } + $carry[] = $tmp; return $carry; } ); } + $data = array_values( + array_filter( + $data, + function ($item) { + return (bool) (array) $item; + } + ) + ); + $count = count($data); // RecordsTotal && recordsfiltered resultados totales. echo json_encode( [ @@ -1294,6 +1321,7 @@ if ($loaded_filter !== false && $from_event_graph != 1 && isset($fb64) === false $severity = $filter['severity']; $status = $filter['status']; $search = $filter['search']; + $regex = $filter['regex']; $not_search = $filter['not_search']; $text_agent = $filter['text_agent']; $id_agent = $filter['id_agent']; @@ -2058,6 +2086,12 @@ $in = '
'; $in .= $data.'
'; $inputs[] = $in; +// REGEX search datatable. +$in = '
'; +$in .= html_print_input_text('regex', $regex, '', '', 255, true); +$in .= '
'; +$inputs[] = $in; + // User private filter. $inputs[] = html_print_input_hidden('private_filter_event', $private_filter_event, true); // Trick view in table. @@ -3489,6 +3523,10 @@ $(document).ready( function() { click_button_remove_tag("without"); }); + $('#myInputTextField').keyup(function(){ + $("#table_events").search($(this).val()).draw() ; + }); + $("#button-events_form_search_bt").click(function(){ show_events_graph(); }); diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index b98f706667..fca9535e63 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1272,6 +1272,7 @@ CREATE TABLE IF NOT EXISTS `tevent_filter` ( `custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0, `owner_user` TEXT, `private_filter_user` TEXT, + `regex` TEXT, PRIMARY KEY (`id_filter`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;