From 354324b9d14b38d686f7b19ee4d072c794294997 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Mon, 24 Jul 2023 13:11:05 +0200 Subject: [PATCH 01/23] implemented database ha view in metaconsole --- pandora_console/include/functions_html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 68b90c5dc9..4bc25da298 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -3294,7 +3294,7 @@ function html_print_input_image($name, $src, $value, $style='', $return=false, $ // If metaconsole is activated and image doesn't exists try to search on normal console. if (is_metaconsole() === true) { - if (false === @file_get_contents($src, 0, null, 0, 1)) { + if ($src !== null && false === @file_get_contents($src, 0, null, 0, 1)) { $src = '../../'.$src; } } From 3429e0d190bbdb38123b55bb2fe6d6ec65b65de7 Mon Sep 17 00:00:00 2001 From: Jorge Rincon Date: Mon, 7 Aug 2023 14:43:50 +0200 Subject: [PATCH 02/23] #10065 Added the option to create-edit a private event filter. --- pandora_console/extras/mr/66.sql | 5 ++++ .../godmode/events/event_edit_filter.php | 30 +++++++++++++++++-- .../godmode/events/event_filter.php | 12 ++++++++ pandora_console/include/ajax/events.php | 25 ++++++++++++++-- pandora_console/include/functions_events.php | 17 +++++++++-- pandora_console/operation/events/events.php | 24 +++++++++++++++ 6 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 pandora_console/extras/mr/66.sql diff --git a/pandora_console/extras/mr/66.sql b/pandora_console/extras/mr/66.sql new file mode 100644 index 0000000000..cffa3707c1 --- /dev/null +++ b/pandora_console/extras/mr/66.sql @@ -0,0 +1,5 @@ +START TRANSACTION; + +ALTER TABLE tevent_filter ADD private_filter_user text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL; + +COMMIT; diff --git a/pandora_console/godmode/events/event_edit_filter.php b/pandora_console/godmode/events/event_edit_filter.php index e230055f1e..aaf5d00b9b 100644 --- a/pandora_console/godmode/events/event_edit_filter.php +++ b/pandora_console/godmode/events/event_edit_filter.php @@ -61,6 +61,9 @@ if ($id) { $filter = events_get_event_filter($id); $id_group_filter = $filter['id_group_filter']; $id_group = $filter['id_group']; + // Get owner user private filter. + $private_filter = ($filter['private_filter_user'] === null || $filter['private_filter_user'] === '') ? 0 : 1; + $private_filter_user = $filter['private_filter_user']; $id_name = $filter['id_name']; $event_type = $filter['event_type']; $severity = explode(',', $filter['severity']); @@ -113,6 +116,7 @@ if ($id) { $server_id = ($filter['server_id'] ?? ''); } else { $id_group = ''; + $private_filter = 0; $id_group_filter = ''; $id_name = ''; $event_type = ''; @@ -167,8 +171,8 @@ if ($update || $create) { $id_user_ack = get_parameter('id_user_ack', ''); $owner_user = get_parameter('owner_user', ''); $group_rep = get_parameter('group_rep', ''); - $date_from = get_parameter('date_from', ''); - $date_to = get_parameter('date_to', ''); + $date_from = get_parameter('date_from', '0000-00-00'); + $date_to = get_parameter('date_to', '0000-00-00'); $source = get_parameter('source'); $id_extra = get_parameter('id_extra'); $user_comment = get_parameter('user_comment'); @@ -192,6 +196,16 @@ if ($update || $create) { $server_id = implode(',', $servers_array); } + // Get private filter from user. + $private_filter = get_parameter_switch('private_filter_event', 0); + if ((int) $private_filter === 1 && $create) { + $private_filter_user = $_SESSION['id_usuario']; + } else if ((int) $private_filter === 1 && $update) { + $private_filter_user = ($private_filter_user === $_SESSION['id_usuario']) ? $private_filter_user : $_SESSION['id_usuario']; + } else if ((int) $private_filter === 0) { + $private_filter_user = null; + } + $values = [ 'id_name' => $id_name, 'id_group_filter' => $id_group_filter, @@ -222,6 +236,7 @@ if ($update || $create) { 'custom_data' => $custom_data, 'custom_data_filter_type' => $custom_data_filter_type, 'server_id' => $server_id, + 'private_filter_user' => $private_filter_user, ]; $severity = explode(',', $severity); @@ -293,6 +308,17 @@ $table->data[0][0] = html_print_label_input_block( false, '', 'w100p' + ).html_print_label_input_block( + __('Private event'), + html_print_checkbox_switch( + 'private_filter_event', + $private_filter, + $private_filter, + true, + false, + 'checked_slide_events(this);', + true + ) ) ); diff --git a/pandora_console/godmode/events/event_filter.php b/pandora_console/godmode/events/event_filter.php index 533bfe1190..0be93fa4a4 100644 --- a/pandora_console/godmode/events/event_filter.php +++ b/pandora_console/godmode/events/event_filter.php @@ -133,6 +133,18 @@ $filters = db_get_all_rows_sql($sql); if ($filters === false) { $filters = []; +} else { + foreach ($filters as $key => $filter) { + $permission = check_acl($config['id_user'], 0, 'PM'); + // Validate permission and private filter user. + if ($permission || $filter['private_filter_user'] === $config['id_user']) { + if ($filter['private_filter_user'] !== null) { + $filters[$key]['id_name'] = $filter['id_name'].' (P)'; + } + } else if ($filter['private_filter_user'] !== null) { + unset($filters[$key]); + } + } } $table = new stdClass(); diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 571955fd25..b3a6be0670 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -337,6 +337,14 @@ if ($save_event_filter) { $values['custom_data'] = get_parameter('custom_data'); $values['custom_data_filter_type'] = get_parameter('custom_data_filter_type'); + // Get private filter from user. + $private_filter = get_parameter_switch('private_filter_user', 0); + if ((int) $private_filter === 1) { + $values['private_filter_user'] = $config['id_user']; + } else { + $values['private_filter_user'] = null; + } + if (is_metaconsole() === true) { $values['server_id'] = implode(',', get_parameter('server_id')); } @@ -397,6 +405,17 @@ if ($update_event_filter) { $values['custom_data'] = get_parameter('custom_data'); $values['custom_data_filter_type'] = get_parameter('custom_data_filter_type'); + // Get private filter from user. + $private_filter = get_parameter('private_filter_user', 0); + $user_private_filter = events_get_event_filter($id); + if ((int) $private_filter === 1 && $user_private_filter['private_filter_user'] === null) { + $values['private_filter_user'] = $config['id_user']; + } else if ($private_filter === $user_private_filter['private_filter_user'] && $user_private_filter['private_filter_user'] !== $config['id_user']) { + $values['private_filter_user'] = $user_private_filter['private_filter_user']; + } else { + $values['private_filter_user'] = null; + } + if (is_metaconsole() === true) { $values['server_id'] = implode(',', get_parameter('server_id')); } @@ -936,7 +955,8 @@ function save_new_filter() { "id_source_event": $("#text-id_source_event").val(), "server_id": $("#server_id").val(), "custom_data": $("#text-custom_data").val(), - "custom_data_filter_type": $("#custom_data_filter_type").val() + "custom_data_filter_type": $("#custom_data_filter_type").val(), + "private_filter_user": $("#checkbox-private_filter_event").val() }, function (data) { $("#info_box").hide(); @@ -1015,7 +1035,8 @@ function save_update_filter() { "id_source_event": $("#text-id_source_event").val(), "server_id": $("#server_id").val(), "custom_data": $("#text-custom_data").val(), - "custom_data_filter_type": $("#custom_data_filter_type").val() + "custom_data_filter_type": $("#custom_data_filter_type").val(), + "private_filter_user": $("#checkbox-private_filter_event").val() }, function (data) { diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index 49007aaca1..516f01d876 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -3343,7 +3343,7 @@ function events_get_event_filter_select($manage=true) } $sql = ' - SELECT id_filter, id_name + SELECT id_filter, id_name, private_filter_user FROM tevent_filter WHERE id_group_filter IN (0, '.implode(',', array_keys($user_groups)).')'; @@ -3354,7 +3354,20 @@ function events_get_event_filter_select($manage=true) } else { $result = []; foreach ($event_filters as $event_filter) { - $result[$event_filter['id_filter']] = $event_filter['id_name']; + $permission = check_acl($config['id_user'], 0, 'PM'); + if ($permission || $event_filter['private_filter_user'] === $config['id_user']) { + if ($event_filter['private_filter_user'] !== null) { + $filter_name = $event_filter['id_name'].' (P)'; + } else { + $filter_name = $event_filter['id_name']; + } + + $result[$event_filter['id_filter']] = $filter_name; + } + + if ($event_filter['private_filter_user'] === null) { + $result[$event_filter['id_filter']] = $event_filter['id_name']; + } } } diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 0152fea782..fd5ab1a46c 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -196,6 +196,10 @@ $search_recursive_groups = get_parameter( 'filter[search_recursive_groups]', ($filter['search_recursive_groups'] ?? '') ); +$search_recursive_groups = get_parameter( + 'filter[private_filter_event]', + ($filter['private_filter_event'] ?? '') +); $id_group_filter = get_parameter( 'filter[id_group_filter]', ($filter['id_group'] ?? '') @@ -1322,6 +1326,7 @@ if ($loaded_filter !== false && $from_event_graph != 1 && isset($fb64) === false $filter_only_alert = $filter['filter_only_alert']; $search_secondary_groups = ($filter['search_secondary_groups'] ?? 0); + $private_filter_event = ($filter['private_filter_user'] ?? 0); $search_recursive_groups = ($filter['search_recursive_groups'] ?? 0); $id_group_filter = $filter['id_group_filter']; $date_from = $filter['date_from']; @@ -1938,6 +1943,25 @@ $in_sec_group .= ''; $in_sec_group .= ''; $in .= $in_sec_group; +// User private filter. +$data = html_print_checkbox_switch( + 'private_filter_event', + $private_filter_event, + $private_filter_event, + true, + false, + 'checked_slide_events(this);', + true +); + +$in_third_group = '
'; +$in_third_group .= $data; +$in_third_group .= ''; +$in_third_group .= '
'; +$in .= $in_third_group; + $in .= ''; $inputs[] = $in; From 74f2fa7a74549521cdb9faed1d3ac0f149648f51 Mon Sep 17 00:00:00 2001 From: Jorge Rincon Date: Wed, 9 Aug 2023 15:35:03 +0200 Subject: [PATCH 03/23] #10065 added private_filter_user field for new installations. --- pandora_console/pandoradb.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index cb5598f957..cf9265cfc8 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1296,6 +1296,7 @@ CREATE TABLE IF NOT EXISTS `tevent_filter` ( `custom_data` VARCHAR(500) DEFAULT '', `custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0, `owner_user` TEXT, + `private_filter_user` TEXT, PRIMARY KEY (`id_filter`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; From 76b3e1da4a02e93b77932e0ebda1e102ff65ab7f Mon Sep 17 00:00:00 2001 From: Jorge Rincon Date: Mon, 21 Aug 2023 13:29:58 +0200 Subject: [PATCH 04/23] #10065 Fixed query that adds private_filter_user field in the database --- pandora_console/extras/mr/66.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/extras/mr/66.sql b/pandora_console/extras/mr/66.sql index 0251ea70cc..d3fe3a7c70 100644 --- a/pandora_console/extras/mr/66.sql +++ b/pandora_console/extras/mr/66.sql @@ -1,6 +1,6 @@ START TRANSACTION; -ALTER TABLE tevent_filter ADD private_filter_user text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL; +ALTER TABLE tevent_filter ADD private_filter_user text NULL; UPDATE `twelcome_tip` SET title = 'Scheduled downtimes', From 797b24af86a515a7f79c9dccf31ab4d83b24c96a Mon Sep 17 00:00:00 2001 From: Jorge Rincon Date: Mon, 28 Aug 2023 13:54:35 +0200 Subject: [PATCH 05/23] #10065 Added switch to filter create/edit modal. --- .../godmode/events/event_edit_filter.php | 2 +- .../godmode/events/event_filter.php | 2 +- pandora_console/include/ajax/events.php | 58 +++++++++++++++---- pandora_console/operation/events/events.php | 27 +++------ 4 files changed, 57 insertions(+), 32 deletions(-) diff --git a/pandora_console/godmode/events/event_edit_filter.php b/pandora_console/godmode/events/event_edit_filter.php index aaf5d00b9b..113c156df3 100644 --- a/pandora_console/godmode/events/event_edit_filter.php +++ b/pandora_console/godmode/events/event_edit_filter.php @@ -309,7 +309,7 @@ $table->data[0][0] = html_print_label_input_block( '', 'w100p' ).html_print_label_input_block( - __('Private event'), + __('Private'), html_print_checkbox_switch( 'private_filter_event', $private_filter, diff --git a/pandora_console/godmode/events/event_filter.php b/pandora_console/godmode/events/event_filter.php index 0be93fa4a4..c4f1860e6f 100644 --- a/pandora_console/godmode/events/event_filter.php +++ b/pandora_console/godmode/events/event_filter.php @@ -135,7 +135,7 @@ if ($filters === false) { $filters = []; } else { foreach ($filters as $key => $filter) { - $permission = check_acl($config['id_user'], 0, 'PM'); + $permission = users_is_admin($config['id_user']); // Validate permission and private filter user. if ($permission || $filter['private_filter_user'] === $config['id_user']) { if ($filter['private_filter_user'] !== null) { diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index b3a6be0670..dbab927606 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -92,6 +92,9 @@ $get_id_source_event = get_parameter('get_id_source_event'); $node_id = (int) get_parameter('node_id', 0); $settings_modal = get_parameter('settings', 0); $parameters_modal = get_parameter('parameters', 0); +// User private filter. +$current_filter = get_parameter('current_filter', 0); +$private_filter_event = get_parameter('private_filter_event', 0); if ($get_comments === true) { global $config; @@ -731,8 +734,8 @@ if ($save_filter_modal) { $table = new StdClass; $table->id = 'save_filter_form'; $table->width = '100%'; - $table->cellspacing = 4; - $table->cellpadding = 4; + $table->cellspacing = 5; + $table->cellpadding = 5; $table->class = 'databox'; if (is_metaconsole() === true) { $table->class = 'databox filters'; @@ -751,7 +754,7 @@ if ($save_filter_modal) { 'filter_mode', 'new', __('New filter'), - true, + ((int) $current_filter === 0) ? true : false, true ); @@ -759,7 +762,7 @@ if ($save_filter_modal) { 'filter_mode', 'update', __('Update filter'), - false, + ((int) $current_filter > 0) ? true : false, true ); @@ -774,6 +777,7 @@ if ($save_filter_modal) { $table->rowclass[2] = 'flex'; $table->rowclass[3] = 'flex'; $table->rowclass[4] = 'flex'; + $table->rowclass[5] = 'flex'; $data[0] = ''.__('Filter name').''.$jump; $data[0] .= html_print_input_text('id_name', '', '', 15, 255, true); if (is_metaconsole()) { @@ -820,9 +824,9 @@ if ($save_filter_modal) { $data[0] .= html_print_select( $_filters_update, 'overwrite_filter', + $current_filter, '', - '', - '', + __('None'), 0, true, false, @@ -833,6 +837,31 @@ if ($save_filter_modal) { $table->data[] = $data; $table->rowclass[] = ''; + $data = []; + $table->rowid[4] = 'update_filter_row2'; + + $table->data[] = $data; + $table->rowclass[] = ''; + + // Update user private filter. + $data = []; + $table->rowid[6] = 'private_filter_event_row1'; + $data[0] = html_print_label_input_block( + __('Private'), + html_print_checkbox_switch( + 'private_filter_event', + $private_filter_event, + $private_filter_event, + true, + false, + 'checked_slide_events(this);', + true + ) + ); + + $table->data[] = $data; + $table->rowclass[] = ''; + html_print_table($table); html_print_div( @@ -877,10 +906,19 @@ if ($save_filter_modal) { ?>