From 49df65e69a4a3d9214cd0b0a3266efdf86ca07ba Mon Sep 17 00:00:00 2001 From: Calvo Date: Fri, 17 Jun 2022 15:02:57 +0200 Subject: [PATCH 01/83] Fix ACL for ncm --- pandora_console/include/functions_users.php | 46 +++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/pandora_console/include/functions_users.php b/pandora_console/include/functions_users.php index f4e6e25be8..da732c658e 100755 --- a/pandora_console/include/functions_users.php +++ b/pandora_console/include/functions_users.php @@ -235,27 +235,31 @@ function groups_combine_acl($acl_group_a, $acl_group_b) } $acl_list = [ - 'agent_view' => 1, - 'agent_edit' => 1, - 'agent_disable' => 1, - 'alert_edit' => 1, - 'alert_management' => 1, - 'pandora_management' => 1, - 'db_management' => 1, - 'user_management' => 1, - 'report_view' => 1, - 'report_edit' => 1, - 'report_management' => 1, - 'event_view' => 1, - 'event_edit' => 1, - 'event_management' => 1, - 'map_view' => 1, - 'map_edit' => 1, - 'map_management' => 1, - 'vconsole_view' => 1, - 'vconsole_edit' => 1, - 'vconsole_management' => 1, - 'tags' => 1, + 'agent_view' => 1, + 'agent_edit' => 1, + 'agent_disable' => 1, + 'alert_edit' => 1, + 'alert_management' => 1, + 'pandora_management' => 1, + 'db_management' => 1, + 'user_management' => 1, + 'report_view' => 1, + 'report_edit' => 1, + 'report_management' => 1, + 'event_view' => 1, + 'event_edit' => 1, + 'event_management' => 1, + 'map_view' => 1, + 'map_edit' => 1, + 'map_management' => 1, + 'vconsole_view' => 1, + 'vconsole_edit' => 1, + 'vconsole_management' => 1, + 'tags' => 1, + 'network_config_view' => 1, + 'network_config_edit' => 1, + 'network_config_management' => 1, + ]; foreach ($acl_group_a['tags'] as $key => $value) { From b67f73539ff6cece292992fdcd40e933d138b4b3 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Date: Thu, 15 Sep 2022 12:07:05 +0200 Subject: [PATCH 02/83] fixed tree view services pandora_enterprise#9493 --- pandora_console/include/functions_modules.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pandora_console/include/functions_modules.php b/pandora_console/include/functions_modules.php index 6c265e8e0f..3f1644693d 100755 --- a/pandora_console/include/functions_modules.php +++ b/pandora_console/include/functions_modules.php @@ -4191,6 +4191,11 @@ function modules_get_counter_by_states($state) function modules_get_state_condition($state, $prefix='tae') { + // Not use empty state 0 -> AGENT_MODULE_STATUS_NORMAL. + if ($state === '') { + return '1=1'; + } + switch ($state) { case AGENT_MODULE_STATUS_CRITICAL_ALERT: case AGENT_MODULE_STATUS_CRITICAL_BAD: From 181a480b9d7b3a696622b312596d91081cc0ca00 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Mon, 19 Sep 2022 10:44:25 +0200 Subject: [PATCH 03/83] fixed api methods for creating and deleting scheduled downtimes agents --- pandora_console/include/functions_api.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index d711432ef9..2eb053e83a 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -7685,8 +7685,7 @@ function api_set_planned_downtimes_delete_agents($id, $thrash1, $other, $thrash3 } if (!empty($other['data'][0])) { - $agents = io_safe_input($other['data']); - $agents = explode(';', $agents); + $agents = $other['data']; $results = false; foreach ($agents as $agent) { if (db_get_value_sql(sprintf('SELECT id from tplanned_downtime_agents WHERE id_agent = %d AND id_downtime = %d', $agent, $id)) !== false) { @@ -7762,8 +7761,7 @@ function api_set_planned_downtimes_add_agents($id, $thrash1, $other, $thrash3) } if (!empty($other['data'][0])) { - $agents = io_safe_input($other['data']); - $agents = explode(';', $agents); + $agents = $other['data']; $results = false; foreach ($agents as $agent) { if (db_get_value_sql(sprintf('SELECT id from tplanned_downtime_agents tpd WHERE tpd.id_agent = %d AND id_downtime = %d', $agent, $id)) === false) { From 5a237971f881a78861e5e5c223cbe90584832b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Gonz=C3=A1lez?= Date: Tue, 20 Sep 2022 13:02:32 +0200 Subject: [PATCH 04/83] Fix style issue --- pandora_console/include/styles/omnishell.css | 1 - 1 file changed, 1 deletion(-) diff --git a/pandora_console/include/styles/omnishell.css b/pandora_console/include/styles/omnishell.css index a958eb630a..16b5fdd50a 100644 --- a/pandora_console/include/styles/omnishell.css +++ b/pandora_console/include/styles/omnishell.css @@ -398,7 +398,6 @@ li > input[type="email"], border: none; border-radius: 0; border-bottom: 1px solid #ccc; - font-weight: lighter; padding: 0px 0px 2px 0px; box-sizing: border-box; margin-bottom: 4px; From 9e90c8da07a2f361fc8c0649c8fc8e91d008d63d Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Tue, 20 Sep 2022 13:56:36 +0200 Subject: [PATCH 05/83] #9506 Changes in user profiles --- pandora_console/godmode/users/user_list.php | 113 +++++++++++++++----- 1 file changed, 85 insertions(+), 28 deletions(-) diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php index efc3321c2c..b0dda31890 100644 --- a/pandora_console/godmode/users/user_list.php +++ b/pandora_console/godmode/users/user_list.php @@ -52,6 +52,8 @@ if (is_ajax()) { $method = get_parameter('method'); $group_id = get_parameter('group_id'); $group_recursion = (bool) get_parameter('group_recursion', 0); + $get_user_profile_group = (bool) get_parameter('get_user_profile_group', false); + $return_all = false; if ($group_id == -1) { @@ -93,6 +95,37 @@ if (is_ajax()) { echo json_encode($ret_id); return; } + + if ($get_user_profile_group === true) { + $id_user = get_parameter('id_user'); + + $user_profiles = []; + + // User profiles. + if (users_is_admin()) { + $user_profiles = db_get_all_rows_field_filter( + 'tusuario_perfil', + 'id_usuario', + $id_user + ); + } else { + $user_profiles_aux = users_get_user_profile($id_user); + foreach ($group_um as $key => $value) { + if (isset($user_profiles_aux[$key]) === true) { + $user_profiles[$key] = $user_profiles_aux[$key]; + unset($user_profiles_aux[$key]); + } + } + } + + foreach ($user_profiles as $key => $value) { + $user_profiles[$key]['id_perfil'] = profile_get_name($value['id_perfil']); + $user_profiles[$key]['id_grupo'] = groups_get_name($value['id_grupo'], true); + } + + echo json_encode($user_profiles); + return; + } } $sortField = get_parameter('sort_field'); @@ -588,10 +621,8 @@ $cont = 0; foreach ($info as $user_id => $user_info) { // User profiles. if ($user_is_admin || $user_id == $config['id_user'] || isset($group_um[0])) { - $user_profiles = db_get_all_rows_field_filter( - 'tusuario_perfil', - 'id_usuario', - $user_id + $user_profiles = db_get_all_rows_sql( + 'SELECT * FROM tusuario_perfil where id_usuario LIKE "'.$user_id.'" LIMIT 5' ); } else { $user_profiles_aux = users_get_user_profile($user_id); @@ -674,9 +705,9 @@ foreach ($info as $user_id => $user_info) { if ($user_profiles !== false) { $total_profile = 0; - $data[4] .= '
'; + $data[4] .= '
'; foreach ($user_profiles as $row) { - if ($total_profile <= 5) { + if ($total_profile < 5) { $data[4] .= "
"; $data[4] .= profile_get_name($row['id_perfil']); $data[4] .= ' /
'; @@ -685,8 +716,7 @@ foreach ($info as $user_id => $user_info) { $data[4] .= '
'; if ($total_profile == 0 && count($user_profiles) >= 5) { - $data[4] .= ' - '.html_print_image( + $data[4] .= ''.html_print_image( 'images/zoom.png', true, [ @@ -694,16 +724,15 @@ foreach ($info as $user_id => $user_info) { 'class' => 'invert_filter', ] ).''; + + $data[4] .= html_print_input_hidden( + 'show_groups_'.$row['id_usuario'], + -1, + true + ); } - $data[4] .= '
'; - $data[4] .= '
'; - $data[4] .= '
'; - } else { - $data[4] .= "'; enterprise_hook('close_meta_frame'); -echo ''; +; From 9b79ea79128db9cd8b19f9c49e0f9d5177d7f404 Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Tue, 20 Sep 2022 16:05:27 +0200 Subject: [PATCH 06/83] #9506 Fixed um --- pandora_console/godmode/users/user_list.php | 14 ++++++++++---- pandora_console/include/functions_users.php | 7 ++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php index b0dda31890..d282ff05af 100644 --- a/pandora_console/godmode/users/user_list.php +++ b/pandora_console/godmode/users/user_list.php @@ -99,10 +99,16 @@ if (is_ajax()) { if ($get_user_profile_group === true) { $id_user = get_parameter('id_user'); + $user_is_admin = users_is_admin(); + $user_profiles = []; + if ($user_is_admin === false) { + $group_um = users_get_groups_UM($config['id_user']); + } + // User profiles. - if (users_is_admin()) { + if ($user_is_admin || $id_user == $config['id_user'] || isset($group_um[0])) { $user_profiles = db_get_all_rows_field_filter( 'tusuario_perfil', 'id_usuario', @@ -625,7 +631,7 @@ foreach ($info as $user_id => $user_info) { 'SELECT * FROM tusuario_perfil where id_usuario LIKE "'.$user_id.'" LIMIT 5' ); } else { - $user_profiles_aux = users_get_user_profile($user_id); + $user_profiles_aux = users_get_user_profile($user_id, 'LIMIT 5'); $user_profiles = []; foreach ($group_um as $key => $value) { if (isset($user_profiles_aux[$key]) === true) { @@ -911,7 +917,7 @@ echo ''; enterprise_hook('close_meta_frame'); -?>; +?> ; + diff --git a/pandora_console/include/functions_users.php b/pandora_console/include/functions_users.php index f4e6e25be8..5db489377a 100755 --- a/pandora_console/include/functions_users.php +++ b/pandora_console/include/functions_users.php @@ -838,13 +838,14 @@ function users_has_profile_without_UM($id_user, $id_groups) } -function users_get_user_profile($id_user) +function users_get_user_profile($id_user, $limit='') { $sql = sprintf( "SELECT * FROM tusuario_perfil INNER JOIN tperfil ON tperfil.id_perfil = tusuario_perfil.id_perfil - WHERE tusuario_perfil.id_usuario like '%s'", - $id_user + WHERE tusuario_perfil.id_usuario like '%s' %s", + $id_user, + $limit ); $aux = db_get_all_rows_sql($sql); From 927658448e8327330294265aecf8f34fd49964d7 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Tue, 20 Sep 2022 18:03:29 +0200 Subject: [PATCH 07/83] change permissions --- pandora_console/include/functions_api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index d711432ef9..0b11d77926 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -10174,7 +10174,7 @@ function api_set_module_data($id, $thrash2, $other, $trash1) } if ($other['type'] == 'array') { - if (!util_api_check_agent_and_print_error(modules_get_agentmodule_agent($id), 'string', 'AW')) { + if (!util_api_check_agent_and_print_error(modules_get_agentmodule_agent($id), 'string')) { return; } From 29c06a17f7c7b94d7de377d427feb0b228996cd0 Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Wed, 21 Sep 2022 11:19:00 +0200 Subject: [PATCH 08/83] #9506 Fixed show profiles --- pandora_console/godmode/users/user_list.php | 59 ++++++++++----------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php index d282ff05af..85a95a8f22 100644 --- a/pandora_console/godmode/users/user_list.php +++ b/pandora_console/godmode/users/user_list.php @@ -711,37 +711,35 @@ foreach ($info as $user_id => $user_info) { if ($user_profiles !== false) { $total_profile = 0; - $data[4] .= '
'; + $data[4] .= '
'; foreach ($user_profiles as $row) { - if ($total_profile < 5) { - $data[4] .= "
"; - $data[4] .= profile_get_name($row['id_perfil']); - $data[4] .= ' /
'; - $data[4] .= "
"; - $data[4] .= groups_get_name($row['id_grupo'], true); - $data[4] .= '
'; + $data[4] .= "
"; + $data[4] .= profile_get_name($row['id_perfil']); + $data[4] .= ' /
'; + $data[4] .= "
"; + $data[4] .= groups_get_name($row['id_grupo'], true); + $data[4] .= '
'; - if ($total_profile == 0 && count($user_profiles) >= 5) { - $data[4] .= ''.html_print_image( - 'images/zoom.png', - true, - [ - 'title' => __('Show'), - 'class' => 'invert_filter', - ] - ).''; + if ($total_profile == 0 && count($user_profiles) >= 5) { + $data[4] .= ''.html_print_image( + 'images/zoom.png', + true, + [ + 'title' => __('Show profiles'), + 'class' => 'invert_filter', + ] + ).''; - $data[4] .= html_print_input_hidden( - 'show_groups_'.$row['id_usuario'], - -1, - true - ); - } - - $data[4] .= '
'; - $data[4] .= '
'; + $data[4] .= html_print_input_hidden( + 'show_groups_'.$row['id_usuario'], + -1, + true + ); } + $data[4] .= '
'; + $data[4] .= '
'; + $total_profile++; } @@ -754,6 +752,8 @@ foreach ($info as $user_id => $user_info) { } $data[4] .= '
'; + $data[4] .= ''; } else { $data[4] .= __('The user doesn\'t have any assigned profile/group'); } @@ -946,14 +946,13 @@ enterprise_hook('close_meta_frame'); } }); $(`#hidden-show_groups_${id_user}`).val('1'); + $(`#profiles_${id_user}`).show(); } else if ($(`#hidden-show_groups_${id_user}`).val() === '1') { $(`#hidden-show_groups_${id_user}`).val('0'); - $(`div[id^=left_${id_user}_]`).hide(); - $(`div[id^=right_${id_user}_]`).hide(); + $(`#profiles_${id_user}`).hide(); } else { $(`#hidden-show_groups_${id_user}`).val('1'); - $(`div[id^=left_${id_user}_]`).show(); - $(`div[id^=right_${id_user}_]`).show(); + $(`#profiles_${id_user}`).show(); } } From 1e590728aa53c1338744a0e55c11a51dcdb1a222 Mon Sep 17 00:00:00 2001 From: "edu.corral" Date: Wed, 21 Sep 2022 17:41:09 +0200 Subject: [PATCH 09/83] ent 9098 gis cli --- pandora_server/util/pandora_manage.pl | 45 ++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 8df2893194..1539d1f5ee 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -251,6 +251,11 @@ sub help_screen{ print "\nEVENTS\n\n" unless $param ne ''; help_screen_line('--event_in_progress', ' ', 'Set event in progress'); + print "\nGIS\n\n" unless $param ne ''; + help_screen_line('--get_gis_agent', ' ', 'Gets agent GIS information'); + help_screen_line('--insert_gis_data', ' [] [] []', 'Sets new GIS data for specified agent'); + + print "\n"; exit; } @@ -275,10 +280,11 @@ sub api_call($$$;$$$$) { $params->{"other"} = $other; $params->{"return_type"} = $return_type; $params->{"other_mode"} = "url_encode_separator_|"; - + # Call the API. my $ua = new LWP::UserAgent; my $url = $pa_config->{"console_api_url"}; + my $response = $ua->post($url, $params); if ($response->is_success) { @@ -8043,6 +8049,14 @@ sub pandora_manage_main ($$$) { param_check($ltotal, 4, 5); cli_agent_update_custom_fields(); } + elsif ($param eq '--get_gis_agent') { + param_check($ltotal, 1, 0); + cli_get_gis_agent(); + } + elsif ($param eq '--insert_gis_data'){ + # param_check($ltotal, 4, 0); + cli_insert_gis_data(); + } else { print_log "[ERROR] Invalid option '$param'.\n\n"; $param = ''; @@ -8763,3 +8777,32 @@ sub pandora_validate_alert_id($$$$) { return 1; } + +############################################################################## +# Get GIS data from agent +############################################################################## + +sub cli_get_gis_agent(){ + + my $agent_id = @ARGV[2]; + + my $result = api_call(\%conf,'get', 'gis_agent', $agent_id); + print "$result \n\n "; + +} + +############################################################################## +# Set GIS data for specified agent +############################################################################## + +sub cli_insert_gis_data(){ + + my ($agent_id, $latitude, $longitude, $altitude) = @ARGV[2..5]; + my $agent_id = @ARGV[2]; + my @position = @ARGV[3..5]; + my $other = join('|', @position); + + my $result = api_call(\%conf,'set', 'gis_agent_only_position', $agent_id, undef, "$other"); + print "$result \n\n "; + +} \ No newline at end of file From 8a1740ddfb5dc5337abab76b819fa425e23c8240 Mon Sep 17 00:00:00 2001 From: Calvo Date: Thu, 22 Sep 2022 09:27:08 +0200 Subject: [PATCH 10/83] Added ldap timeout --- pandora_console/godmode/setup/setup_auth.php | 15 +++++++++++++++ pandora_console/include/auth/mysql.php | 20 +++++++++++++++----- pandora_console/include/functions_config.php | 8 ++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/pandora_console/godmode/setup/setup_auth.php b/pandora_console/godmode/setup/setup_auth.php index e1318f96c2..0a93a36da2 100644 --- a/pandora_console/godmode/setup/setup_auth.php +++ b/pandora_console/godmode/setup/setup_auth.php @@ -199,6 +199,21 @@ if (is_ajax()) { ); $table->data['ldap_admin_pass'] = $row; + // Ldapsearch timeout. + // Default Ldapsearch timeout. + set_when_empty($config['ldap_searh_timeout'], 5); + $row = []; + $row['name'] = __('Ldap search timeout (secs)'); + $row['control'] = html_print_input_text( + 'ldap_search_timeout', + $config['ldap_search_timeout'], + '', + 10, + 10, + true + ); + $table->data['ldap_search_timeout'] = $row; + // Enable/disable secondary ldap. // Set default value. set_unless_defined($config['secondary_ldap_enabled'], false); diff --git a/pandora_console/include/auth/mysql.php b/pandora_console/include/auth/mysql.php index 67053ab0be..16ea1456f2 100644 --- a/pandora_console/include/auth/mysql.php +++ b/pandora_console/include/auth/mysql.php @@ -799,8 +799,16 @@ function ldap_process_user_login($login, $password, $secondary_server=false) return false; } - // Set the LDAP version + // Set the LDAP version. ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $ldap['ldap_version']); + ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 1); + + // Set ldap search timeout. + ldap_set_option( + $ds, + LDAP_OPT_TIMELIMIT, + (empty($config['ldap_search_timmeout']) === true) ? 5 : ((int) $config['ldap_search_timeout']) + ); if ($ldap['ldap_start_tls']) { if (!@ldap_start_tls($ds)) { @@ -821,7 +829,8 @@ function ldap_process_user_login($login, $password, $secondary_server=false) io_safe_output($ldap['ldap_admin_login']), io_output_password($ldap['ldap_admin_pass']), io_safe_output($login), - $ldap['ldap_start_tls'] + $ldap['ldap_start_tls'], + $config['ldap_search_timeout'] ); if ($sr) { @@ -1430,7 +1439,8 @@ function local_ldap_search( $ldap_admin_user=null, $ldap_admin_pass=null, $user=null, - $ldap_start_tls=null + $ldap_start_tls=null, + $ldap_search_time=5 ) { global $config; @@ -1463,8 +1473,8 @@ function local_ldap_search( } $dn = " -b '".$dn."'"; - - $shell_ldap_search = explode("\n", shell_exec('ldapsearch -LLL -o ldif-wrap=no -x'.$ldap_host.$ldap_version.' -E pr=10000/noprompt '.$ldap_admin_user.$ldap_admin_pass.$dn.$filter.$tls.' | grep -v "^#\|^$" | sed "s/:\+ /=>/g"')); + $ldapsearch_command = 'ldapsearch -LLL -o ldif-wrap=no -o nettimeout='.$ldap_search_time.' -x'.$ldap_host.$ldap_version.' -E pr=10000/noprompt '.$ldap_admin_user.$ldap_admin_pass.$dn.$filter.$tls.' | grep -v "^#\|^$" | sed "s/:\+ /=>/g"'; + $shell_ldap_search = explode("\n", shell_exec($ldapsearch_command)); foreach ($shell_ldap_search as $line) { $values = explode('=>', $line); if (!empty($values[0]) && !empty($values[1])) { diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index e0a3547ec5..f0b6691751 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -612,6 +612,10 @@ function config_update_config() $error_update[] = __('Admin LDAP password'); } + if (config_update_value('ldap_search_timeout', (int) get_parameter('ldap_search_timeout', 5), true) === false) { + $error_update[] = __('Ldap search timeout'); + } + if (config_update_value('ldap_server_secondary', get_parameter('ldap_server_secondary'), true) === false) { $error_update[] = __('Secondary LDAP server'); } @@ -2651,6 +2655,10 @@ function config_process_config() config_update_value('ldap_admin_pass', ''); } + if (!isset($config['ldap_search_timeout'])) { + config_update_value('ldap_search_timeout', 5); + } + if (!isset($config['ldap_server_secondary'])) { config_update_value('ldap_server_secondary', 'localhost'); } From 9499da3176cf42be275ec210fabfbbe872a88525 Mon Sep 17 00:00:00 2001 From: Calvo Date: Thu, 22 Sep 2022 12:34:40 +0200 Subject: [PATCH 11/83] API and LDAP remote user fix with login error fix --- pandora_console/include/auth/mysql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/auth/mysql.php b/pandora_console/include/auth/mysql.php index 67053ab0be..cf11f7fc5f 100644 --- a/pandora_console/include/auth/mysql.php +++ b/pandora_console/include/auth/mysql.php @@ -289,7 +289,7 @@ function process_user_login_remote($login, $pass, $api=false) // Authentication ok, check if the user exists in the local database if (is_user($login)) { - if (!user_can_login($login)) { + if (!user_can_login($login) && $api === false) { return false; } From eed28bc668504e382d6800ec9d76954dc6770ff7 Mon Sep 17 00:00:00 2001 From: Calvo Date: Thu, 22 Sep 2022 17:07:43 +0200 Subject: [PATCH 12/83] Fix user form reset if profile fails --- pandora_console/godmode/users/configure_user.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php index 3ed36f8737..d98fc1d944 100644 --- a/pandora_console/godmode/users/configure_user.php +++ b/pandora_console/godmode/users/configure_user.php @@ -512,6 +512,14 @@ if ($create_user) { $result_profile = profile_create_user_profile($id, $profile2, $group2, false, $tags, $no_hierarchy); + if ($result_profile === false) { + $is_err = true; + $user_info = $values; + $password_new = ''; + $password_confirm = ''; + $new_user = true; + } + ui_print_result_message( $result_profile, __('Profile added successfully'), From 795308367fb80bc5557dd6760f6e812e77cec526 Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Fri, 23 Sep 2022 13:24:46 +0200 Subject: [PATCH 13/83] #9254 load password with ajax --- pandora_console/include/ajax/config.ajax.php | 7 ++++++- pandora_console/include/javascript/pandora.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/ajax/config.ajax.php b/pandora_console/include/ajax/config.ajax.php index 1f0ea777f9..abe4d6f1ff 100644 --- a/pandora_console/include/ajax/config.ajax.php +++ b/pandora_console/include/ajax/config.ajax.php @@ -1,6 +1,7 @@ Date: Fri, 23 Sep 2022 13:55:01 +0200 Subject: [PATCH 14/83] fixed response events pandora_enterprise#9423 --- pandora_console/include/ajax/events.php | 317 +++++----- pandora_console/include/functions_events.php | 105 +++- pandora_console/include/functions_ui.php | 7 +- .../include/javascript/pandora_events.js | 551 +++++++----------- pandora_console/include/styles/events.css | 33 ++ 5 files changed, 479 insertions(+), 534 deletions(-) diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index c902a6479a..0d9dbda151 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -64,7 +64,8 @@ $add_comment = (bool) get_parameter('add_comment'); $dialogue_event_response = (bool) get_parameter('dialogue_event_response'); $perform_event_response = (bool) get_parameter('perform_event_response'); $get_response = (bool) get_parameter('get_response'); -$get_response_target = (bool) get_parameter('get_response_target'); +$get_response_massive = (bool) get_parameter('get_response_massive'); +$get_row_response_action = (bool) get_parameter('get_row_response_action'); $get_response_params = (bool) get_parameter('get_response_params'); $get_response_description = (bool) get_parameter('get_response_description'); $meta = get_parameter('meta', 0); @@ -1090,50 +1091,6 @@ if ($get_response_params) { return; } -if ($get_response_target === true) { - if (! check_acl($config['id_user'], 0, 'EW')) { - echo 'unauthorized'; - return; - } - - $response_id = (int) get_parameter('response_id'); - $event_id = (int) get_parameter('event_id'); - $server_id = (int) get_parameter('server_id'); - - try { - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node = new Node($server_id); - $node->connect(); - } - - $event_response = db_get_row('tevent_response', 'id', $response_id); - - if (empty($event_response) === true) { - return; - } - - echo events_get_response_target($event_id, $response_id); - } catch (\Exception $e) { - // Unexistent agent. - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node->disconnect(); - } - - return; - } finally { - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node->disconnect(); - } - } - - return; -} if ($get_response === true) { if (! check_acl($config['id_user'], 0, 'EW')) { @@ -1142,62 +1099,21 @@ if ($get_response === true) { } $response_id = get_parameter('response_id'); - $server_id = (int) get_parameter('server_id'); + $server_id = (int) get_parameter('server_id', 0); + $event_id = (int) get_parameter('event_id', 0); - try { - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node = new Node($server_id); - $node->connect(); - } - - $event_response = db_get_row( - 'tevent_response', - 'id', - $response_id - ); - } catch (\Exception $e) { - // Unexistent agent. - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node->disconnect(); - } - - return; - } finally { - if (is_metaconsole() === true - && $server_id > 0 - ) { - $node->disconnect(); - } - } + $event_response = db_get_row( + 'tevent_response', + 'id', + $response_id + ); if (empty($event_response) === true) { - return; + return []; } - echo json_encode($event_response); - return; -} - -if ($perform_event_response === true) { - global $config; - - if (! check_acl($config['id_user'], 0, 'EW')) { - echo 'unauthorized'; - return; - } - - $target = get_parameter('target', ''); - $response_id = get_parameter('response_id'); - $event_id = (int) get_parameter('event_id'); - $server_id = (int) get_parameter('server_id', 0); - - $event_response = false; - if (empty($target) === true) { + if (empty($event_id) === false) { try { if (is_metaconsole() === true && $server_id > 0 @@ -1206,20 +1122,9 @@ if ($perform_event_response === true) { $node->connect(); } - $event_response = db_get_row( - 'tevent_response', - 'id', - $response_id - ); - - if (empty($event_response) === true) { - return; - } - - $command = events_get_response_target( + $event_response['target'] = events_get_response_target( $event_id, - $response_id, - $server_id + $event_response ); } catch (\Exception $e) { // Unexistent agent. @@ -1237,10 +1142,121 @@ if ($perform_event_response === true) { $node->disconnect(); } } - } else { - $command = $target; } + echo json_encode($event_response); + + return; +} + + +if ($get_response_massive === true) { + if (! check_acl($config['id_user'], 0, 'EW')) { + echo 'unauthorized'; + return; + } + + $response_id = get_parameter('response_id'); + + $event_response = db_get_row( + 'tevent_response', + 'id', + $response_id + ); + + if (empty($event_response) === true) { + return []; + } + + + $events = json_decode( + io_safe_output( + get_parameter('events', '') + ), + true + ); + + $event_response_targets = []; + if (is_metaconsole() === true) { + foreach ($events as $server_id => $idEvents) { + foreach ($idEvents as $idEvent) { + $event_response_targets[$idEvent.'|'.$server_id]['target'] = get_events_get_response_target( + $idEvent, + $event_response, + $server_id + ); + } + } + } else { + foreach ($idEvents as $idEvent) { + $event_response_targets[$idEvent]['target'] = get_events_get_response_target( + $idEvent, + $event_response + ); + } + } + + $result = [ + 'event_response' => $event_response, + 'event_response_targets' => $event_response_targets, + ]; + + echo json_encode($result); + + return; +} + +if ($get_row_response_action === true) { + $response_id = get_parameter('response_id'); + $response = json_decode( + io_safe_output( + get_parameter('response', '') + ), + true + ); + + $end = (bool) get_parameter('end', false); + $index = $response['event_id']; + if (is_metaconsole() === true) { + $index .= '-'.$response['server_id']; + } + + echo get_row_response_action( + $response, + $response_id, + $end, + $index + ); + + return; +} + +if ($perform_event_response === true) { + global $config; + + if (! check_acl($config['id_user'], 0, 'EW')) { + echo __('unauthorized'); + return; + } + + $target = get_parameter('target', ''); + $response_id = get_parameter('response_id'); + $event_id = (int) get_parameter('event_id'); + $server_id = (int) get_parameter('server_id', 0); + $response = json_decode( + io_safe_output( + get_parameter('response', '') + ), + true + ); + + $event_response = $response; + if (empty($event_response) === true) { + echo __('No data'); + return; + } + + $command = $event_response['target']; $command_timeout = ($event_response !== false) ? $event_response['command_timeout'] : 90; if (enterprise_installed() === true) { if ($event_response !== false @@ -1320,7 +1336,7 @@ if ($perform_event_response === true) { break; } - system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val); + system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val); } if ($ret_val != 0) { @@ -1343,78 +1359,19 @@ if ($dialogue_event_response) { $event_id = get_parameter('event_id'); $response_id = get_parameter('response_id'); $command = get_parameter('target'); - $massive = get_parameter('massive'); - $end = get_parameter('end'); - $show_execute_again_btn = get_parameter('show_execute_again_btn'); - $out_iterator = get_parameter('out_iterator'); - $event_response = db_get_row('tevent_response', 'id', $response_id); - $server_id = get_parameter('server_id'); + $event_response = json_decode( + io_safe_output( + get_parameter('response', '') + ), + true + ); - $event = db_get_row('tevento', 'id_evento', $event_id); - - $prompt = '
> '; switch ($event_response['type']) { case 'command': - $display_command = (bool) $event_response['display_command']; - $command_str = ($display_command === true) ? $command : ''; - - if ($massive) { - echo "
"; - echo $prompt.sprintf( - '(Event #'.$event_id.') '.__( - 'Executing command: %s', - $command_str - ) - ); - echo '

'; - - echo "
'; - echo "



"; - - if ($end) { - echo "
'; - } - } else { - echo "
"; - - echo $prompt.'Executing command: '.$command_str; - echo '

'; - - echo "'; - echo "


"; - - echo "
'; - } + echo get_row_response_action( + $event_response, + $response_id + ); break; case 'url': diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index c36536348f..5537a7b521 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -3430,7 +3430,7 @@ function events_page_responses($event) __('Execute'), 'custom_response_button', false, - 'execute_response('.$event['id_evento'].','.$server_id.')', + 'execute_response('.$event['id_evento'].','.$server_id.',0)', "class='sub next w70p'", true ); @@ -3438,6 +3438,7 @@ function events_page_responses($event) $table_responses->data[] = $data; + // TODO quitar el async: false. get_response_params and get_response_description. $responses_js = ""; - $responses = '
'.html_print_table($table_responses, true).$responses_js.'
'; + $responses = '
'; + $responses .= html_print_table($table_responses, true); + $responses .= $responses_js; + $responses .= '
'; return $responses; } @@ -3471,14 +3458,16 @@ function events_page_responses($event) /** * Replace macros in the target of a response and return it. * - * @param integer $event_id Event identifier. - * @param integer $response_id Event response identifier. + * @param integer $event_id Event identifier. + * @param array $event_response Event Response. + * @param array|null $response_parameters If parameters response values. * * @return string The response text with the macros applied. */ function events_get_response_target( int $event_id, - array $event_response + array $event_response, + ?array $response_parameters=null ) { global $config; @@ -3492,6 +3481,35 @@ function events_get_response_target( $event = db_get_row('tevento', 'id_evento', $event_id); $target = io_safe_output($event_response['target']); + + // Replace parameters response. + if (isset($response_parameters) === true + && empty($response_parameters) === false + ) { + $response_parameters = array_reduce( + $response_parameters, + function ($carry, $item) { + $carry[$item['name']] = $item['value']; + return $carry; + } + ); + } + + if (empty($event_response['params']) === false) { + $response_params = explode(',', $event_response['params']); + if (is_array($response_params) === true) { + foreach ($response_params as $param) { + $param = trim(io_safe_output($param)); + $target = str_replace( + '_'.$param.'_', + $response_parameters['values_params_'.$param], + $target + ); + } + } + } + + // Replace macros. if (strpos($target, '_agent_alias_') !== false) { $agente_table_name = 'tagente'; $filter = ['id_agente' => $event['id_agente']]; @@ -5465,7 +5483,16 @@ function events_get_criticity_class($criticity) } -// TODO +/** + * Draw row response events. + * + * @param array $event_response Response. + * @param integer|null $response_id Id . + * @param boolean $end End block. + * @param integer|null $index Index block. + * + * @return string Html output. + */ function get_row_response_action( array $event_response, ?int $response_id, @@ -5530,7 +5557,8 @@ function get_row_response_action( function get_events_get_response_target( $event_id, $event_response, - $server_id=0 + $server_id=0, + $response_parameters=[] ) { try { if (is_metaconsole() === true @@ -5542,7 +5570,8 @@ function get_events_get_response_target( return events_get_response_target( $event_id, - $event_response + $event_response, + $response_parameters ); } catch (\Exception $e) { // Unexistent agent. diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js index 5e0ec83920..17fac351f3 100644 --- a/pandora_console/include/javascript/pandora_events.js +++ b/pandora_console/include/javascript/pandora_events.js @@ -96,12 +96,28 @@ function show_event_dialog(event, dialog_page) { function execute_response(event_id, server_id) { var response_id = $("#select_custom_response option:selected").val(); + var response_parameters_list = $('input[name^="values_params_"]'); + var response_parameters = []; + if (response_parameters_list.length > 0) { + response_parameters_list.each(function() { + var acum = { + name: $(this).attr("name"), + value: $(this).val() + }; + response_parameters.push(acum); + }); + } + var params = []; params.push({ name: "page", value: "include/ajax/events" }); params.push({ name: "get_response", value: 1 }); params.push({ name: "response_id", value: response_id }); params.push({ name: "server_id", value: server_id }); params.push({ name: "event_id", value: event_id }); + params.push({ + name: "response_parameters", + value: JSON.stringify(response_parameters) + }); jQuery.ajax({ data: params, @@ -126,12 +142,13 @@ function execute_response(event_id, server_id) { } // Check the response type and open it in a modal dialog or new window -function execute_response_massive(events, response_id) { +function execute_response_massive(events, response_id, response_parameters) { var params = []; params.push({ name: "page", value: "include/ajax/events" }); params.push({ name: "get_response_massive", value: 1 }); params.push({ name: "response_id", value: response_id }); params.push({ name: "events", value: JSON.stringify(events) }); + params.push({ name: "response_parameters", value: response_parameters }); jQuery.ajax({ data: params, @@ -193,10 +210,16 @@ function execute_response_massive(events, response_id) { response["event_id"] = event_id; response["server_id"] = server_id; response["target"] = target; + + var indexstr = event_id; + if (meta != 0) { + indexstr += "-" + server_id; + } + perform_response( btoa(JSON.stringify(response)), response_id, - event_id + "-" + server_id + indexstr ); } }); @@ -236,71 +259,14 @@ function show_response_dialog(response_id, response) { perform_response(btoa(JSON.stringify(response)), response_id, ""); }, width: response["modal_width"], - height: response["modal_height"] + height: response["modal_height"], + buttons: [] }) .show(); } }); } -// Get an event response params from db -function get_response_params(response_id) { - var response_params; - - var params = []; - params.push("page=include/ajax/events"); - params.push("get_response_params=1"); - params.push("response_id=" + response_id); - - jQuery.ajax({ - data: params.join("&"), - type: "POST", - url: $("#hidden-ajax_file").val(), - async: false, - dataType: "json", - success: function(data) { - response_params = data; - } - }); - - return response_params; -} - -// Get an event response description from db -function get_response_description(response_id) { - var response_description = ""; - - var params = []; - params.push("page=include/ajax/events"); - params.push("get_response_description=1"); - params.push("response_id=" + response_id); - - jQuery.ajax({ - data: params.join("&"), - type: "POST", - url: $("#hidden-ajax_file").val(), - async: false, - dataType: "html", - success: function(data) { - response_description = data; - } - }); - - return response_description; -} - -function add_row_param(id_table, param) { - $("#" + id_table).append( - '' + - param + - '' - ); -} - // Perform a response and put the output into a div function perform_response(response, response_id, index) { $("#re_exec_command" + index).hide(); @@ -670,8 +636,13 @@ function execute_delete_event_reponse( // Imported from old files. function execute_event_response(event_list_btn) { + var response_id = $("select[name=response_id]").val(); + if (!isNaN(response_id)) { + table_info_response_event(response_id, 0, 0, true); + } + var message = - "

Are you sure?

"; + "

Are you sure?

"; confirmDialog({ title: "ATTENTION", message: message, @@ -683,8 +654,6 @@ function execute_event_response(event_list_btn) { $("#max_custom_event_resp_msg").hide(); $("#max_custom_selected").hide(); - var response_id = $("select[name=response_id]").val(); - var total_checked = $(".chk_val:checked").length; // Check select an event. @@ -694,14 +663,28 @@ function execute_event_response(event_list_btn) { } if (!isNaN(response_id)) { + var response_parameters_list = $('input[name^="values_params_"]'); + var response_parameters = []; + if (response_parameters_list.length > 0) { + response_parameters_list.each(function() { + var acum = { + name: $(this).attr("name"), + value: $(this).val() + }; + response_parameters.push(acum); + }); + } + + response_parameters = JSON.stringify(response_parameters); + if (event_list_btn) { $("#button-submit_event_response").hide(function() { $("#response_loading_dialog").show(function() { - show_response_dialog_massive(response_id); + show_response_dialog_massive(response_id, response_parameters); }); }); } else { - check_execute_response_massive(response_id); + check_execute_response_massive(response_id, response_parameters); } } else { // It is not a custom response @@ -776,7 +759,7 @@ function execute_event_response(event_list_btn) { }); } -function show_response_dialog_massive(response_id) { +function show_response_dialog_massive(response_id, response_parameters) { var params = []; params.push({ name: "page", value: "include/ajax/events" }); params.push({ name: "get_response", value: 1 }); @@ -803,7 +786,7 @@ function show_response_dialog_massive(response_id) { draggable: true, modal: false, open: function() { - check_execute_response_massive(response_id); + check_execute_response_massive(response_id, response_parameters); }, close: function() { $("#checkbox-all_validate_box").prop("checked", false); @@ -830,7 +813,7 @@ function show_response_dialog_massive(response_id) { }); } -function check_execute_response_massive(response_id) { +function check_execute_response_massive(response_id, response_parameters) { var events = []; $(".container-massive-events-response").empty(); $(".chk_val:checked").each(function() { @@ -852,7 +835,7 @@ function check_execute_response_massive(response_id) { } }); - execute_response_massive(events, response_id); + execute_response_massive(events, response_id, response_parameters); } function event_widget_options() { @@ -1136,3 +1119,43 @@ function check_event_sound(settings) { "json" ); } + +function table_info_response_event(response_id, event_id, server_id, massive) { + var params = []; + params.push({ name: "page", value: "include/ajax/events" }); + params.push({ name: "get_response", value: 1 }); + params.push({ name: "response_id", value: response_id }); + params.push({ name: "server_id", value: server_id }); + params.push({ name: "event_id", value: event_id }); + + jQuery.ajax({ + data: params, + type: "POST", + url: $("#hidden-ajax_file").val(), + dataType: "json", + success: function(response) { + if (response) { + var params = []; + params.push({ name: "page", value: "include/ajax/events" }); + params.push({ name: "draw_row_response_info", value: 1 }); + params.push({ name: "massive", value: massive === true ? 1 : 0 }); + params.push({ name: "response", value: JSON.stringify(response) }); + + jQuery.ajax({ + data: params, + type: "POST", + url: $("#hidden-ajax_file").val(), + dataType: "html", + success: function(output) { + if (massive === true) { + $("#massive-parameters-response").append(output); + } else { + $(".params_rows").remove(); + $("#responses_table").append(output); + } + } + }); + } + } + }); +} diff --git a/pandora_console/include/styles/events.css b/pandora_console/include/styles/events.css index 5ad4579f61..a235861c27 100644 --- a/pandora_console/include/styles/events.css +++ b/pandora_console/include/styles/events.css @@ -429,3 +429,26 @@ div.multi-response-buttons { justify-content: flex-end; align-items: center; } + +#massive-parameters-response { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +#massive-parameters-response > div { + width: 80%; +} + +#massive-parameters-response > div h5 { + text-align: center; +} + +#massive-parameters-response > div div { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 5px; +} diff --git a/pandora_console/operation/agentes/estado_generalagente.php b/pandora_console/operation/agentes/estado_generalagente.php index 42d325e7f0..91714803f9 100755 --- a/pandora_console/operation/agentes/estado_generalagente.php +++ b/pandora_console/operation/agentes/estado_generalagente.php @@ -564,7 +564,10 @@ for ($i = 0; $i < $custom_fields_count; $i++) { $columns = array_merge($first_column, $second_column); } else { $columns = $first_column; - $filas = count($table_data->data); + if ($table_data->data !== null) { + $filas = count($table_data->data); + } + $table_data->colspan[$filas][1] = 3; } From 9e2c6edfebd756d8cfa075cd0863e27cc1d01a00 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Date: Tue, 27 Sep 2022 15:08:09 +0200 Subject: [PATCH 17/83] new group by events for extraid pandora_enterprise#9425 --- pandora_console/include/ajax/events.php | 24 ++--- pandora_console/include/constants.php | 5 ++ pandora_console/include/functions_api.php | 32 +++---- pandora_console/include/functions_events.php | 88 +++++++++++++------ .../include/functions_reporting.php | 2 +- pandora_console/mobile/operation/events.php | 6 +- pandora_console/operation/events/events.php | 17 ++-- pandora_console/operation/menu.php | 2 +- 8 files changed, 111 insertions(+), 65 deletions(-) diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index c902a6479a..4dd887d37b 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -90,7 +90,7 @@ $node_id = (int) get_parameter('node_id', 0); if ($get_comments === true) { $event = get_parameter('event', false); - $event_rep = get_parameter('event_rep', false); + $event_rep = (int) get_parameter('event_rep', 0); if ($event === false) { return __('Failed to retrieve comments'); } @@ -98,7 +98,7 @@ if ($get_comments === true) { $eventsGrouped = []; // Consider if the event is grouped. $whereGrouped = '1=1'; - if (isset($event_rep) === true && $event_rep > 0) { + if ($event_rep === EVENT_GROUP_REP_EVENTS) { // Default grouped message filtering (evento and estado). $whereGrouped = sprintf( '`evento` = "%s"', @@ -119,6 +119,11 @@ if ($get_comments === true) { (int) $event['id_agentmodule'] ); } + } else if ($event_rep === EVENT_GROUP_REP_EXTRAIDS) { + $whereGrouped = sprintf( + '`id_extra` = "%s"', + $event['id_extra'] + ); } else { $whereGrouped = sprintf('`id_evento` = %d', $event['id_evento']); } @@ -175,7 +180,7 @@ if ($delete_event === true) { $filter = get_parameter('filter', []); $id_evento = (int) get_parameter('id_evento', 0); $server_id = (int) get_parameter('server_id', 0); - $event_rep = get_parameter('event_rep', 0); + $event_rep = (int) get_parameter('event_rep', 0); try { if (is_metaconsole() === true @@ -228,7 +233,7 @@ if ($validate_event === true) { $filter = get_parameter('filter', []); $id_evento = (int) get_parameter('id_evento', 0); $server_id = (int) get_parameter('server_id', 0); - $event_rep = get_parameter('event_rep', 0); + $event_rep = (int) get_parameter('event_rep', 0); try { if (is_metaconsole() === true @@ -240,7 +245,7 @@ if ($validate_event === true) { if ($event_rep === 0) { // Disable group by when there're result is unique. - $filter['group_rep'] = 0; + $filter['group_rep'] = EVENT_GROUP_REP_ALL; } // Check acl. @@ -285,7 +290,7 @@ if ($in_process_event === true) { $filter = get_parameter('filter', []); $id_evento = (int) get_parameter('id_evento', 0); $server_id = (int) get_parameter('server_id', 0); - $event_rep = get_parameter('event_rep', 0); + $event_rep = (int) get_parameter('event_rep', 0); try { if (is_metaconsole() === true @@ -297,7 +302,7 @@ if ($in_process_event === true) { if ($event_rep === 0) { // Disable group by when there're result is unique. - $filter['group_rep'] = 0; + $filter['group_rep'] = EVENT_GROUP_REP_ALL; } // Check acl. @@ -464,7 +469,6 @@ if ($get_filter_values) { $event_filter = [ 'status' => EVENT_NO_VALIDATED, 'event_view_hr' => $config['event_view_hr'], - 'group_rep' => 1, 'tag_with' => [], 'tag_without' => [], 'history' => false, @@ -480,7 +484,7 @@ if ($get_filter_values) { 'time_to' => '', 'severity' => '', 'event_type' => '', - 'group_rep' => 0, + 'group_rep' => EVENT_GROUP_REP_ALL, 'id_group' => 0, 'id_group_filter' => 0, 'group_name' => 'All', @@ -2474,7 +2478,7 @@ if ($get_events_fired) { 'id_agent_module' => 0, 'pagination' => 0, 'id_user_ack' => 0, - 'group_rep' => 0, + 'group_rep' => EVENT_GROUP_REP_ALL, 'tag_with' => [], 'tag_without' => [], 'filter_only_alert' => -1, diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index 64be59b7aa..6688a91d78 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -45,6 +45,11 @@ define('EVENT_VALIDATE', 1); define('EVENT_PROCESS', 2); define('EVENT_NO_VALIDATED', 3); +// Events group by constants. +define('EVENT_GROUP_REP_ALL', 0); +define('EVENT_GROUP_REP_EVENTS', 1); +define('EVENT_GROUP_REP_AGENTS', 2); +define('EVENT_GROUP_REP_EXTRAIDS', 3); // Agents disabled status. define('AGENT_ENABLED', 0); diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index 3bf6845eae..c8219f86e3 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -11297,7 +11297,7 @@ function get_events_with_user($trash1, $trash2, $other, $returnType, $user_in_db $id_user_ack = 0; $event_view_hr = 0; $tag = ''; - $group_rep = 0; + $group_rep = EVENT_GROUP_REP_ALL; $utimestamp_upper = 0; $utimestamp_bottom = 0; $id_alert_template = -1; @@ -11500,7 +11500,7 @@ function get_events_with_user($trash1, $trash2, $other, $returnType, $user_in_db $alert_join = ' INNER JOIN talert_template_modules ON '.$table_events.'.id_alert_am=talert_template_modules.id'; } - if ($group_rep == 0) { + if ($group_rep == EVENT_GROUP_REP_ALL) { if ($filter['total']) { $sql = 'SELECT COUNT(*) FROM '.$table_events.' @@ -15953,7 +15953,7 @@ function api_set_create_event_filter($name, $thrash1, $other, $thrash3) $id_user_ack = (in_array($other['data'][9], $users)) ? $other['data'][9] : 0; - $group_rep = ($other['data'][10] == 0 || $other['data'][10] == 1) ? $other['data'][10] : 0; + $group_rep = ($other['data'][10] == EVENT_GROUP_REP_ALL || $other['data'][10] == EVENT_GROUP_REP_EVENTS) ? $other['data'][10] : EVENT_GROUP_REP_ALL; $date_from = (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/', $other['data'][11])) ? $other['data'][11] : '0000-00-00'; @@ -16180,7 +16180,7 @@ function api_set_update_event_filter($id_event_filter, $thrash1, $other, $thrash break; case 11: - $values['group_rep'] = ($other['data'][11] == 0 || $other['data'][11] == 1) ? $other['data'][11] : 0; + $values['group_rep'] = ($other['data'][11] == EVENT_GROUP_REP_ALL || $other['data'][11] == EVENT_GROUP_REP_EVENTS) ? $other['data'][11] : EVENT_GROUP_REP_ALL; break; case 12: @@ -17549,9 +17549,11 @@ function api_set_enable_disable_discovery_task($id_task, $thrash2, $other) } } + /** * Make report (PDF, CSV or XML) and send it via e-mail (this method is intended to be used by server's execution * of alert actions that involve sending reports by e-mail). + * * @param [string] $server_id id server (Node) * @param [string] $console_event_id console Id node event in tevent * @param [string] $trash2 don't use @@ -17598,15 +17600,12 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType) $date_today = preg_split('/[\s,]+/', io_safe_output($date_today)); $date_today = __($date_today[0]).' '.$date_today[1].' '.$date_today[2].' '.$date_today[3].' '.$date_today[4]; - if ($make_report_from_template === true) { $filter['id_report'] = $id_item; $template = reports_get_report_templates( $filter, - [ - 'description' - ], + ['description'], $return_all_group, 'RR' )[0]; @@ -17614,15 +17613,16 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType) $description = $template['description']; // Report macros post-process. - $body_email = str_replace([ + $body_email = str_replace( + [ '_report_description_', '_report_generated_date_', - '_report_date_' + '_report_date_', ], [ $description, $date_today, - $date_today + $date_today, ], $body_email ); @@ -17636,7 +17636,7 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType) $template_regex_agents, false, '', - $email, + $email, $subject_email, $body_email, $report_type, @@ -17651,15 +17651,16 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType) } // Report macros post-process. - $body_email = str_replace([ + $body_email = str_replace( + [ '_report_description_', '_report_generated_date_', - '_report_date_' + '_report_date_', ], [ $report['description'], $date_today, - $date_today + $date_today, ], $body_email ); @@ -17846,4 +17847,3 @@ function api_set_send_report($thrash1, $thrash2, $other, $returnType) returnData($returnType, $data, ';'); } } - diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index b3aece13a3..65adff285a 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -382,14 +382,16 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal } if (isset($filter) === false - || is_array($filter) === true + || is_array($filter) === false ) { - $filter = ['group_rep' => 0]; + $filter = ['group_rep' => EVENT_GROUP_REP_ALL]; } + hd($filter['group_rep'], true); + switch ($filter['group_rep']) { - case '0': - case '2': + case EVENT_GROUP_REP_ALL: + case EVENT_GROUP_REP_AGENTS: default: // No groups option direct update. $delete_sql = sprintf( @@ -399,7 +401,8 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal ); break; - case '1': + case EVENT_GROUP_REP_EVENTS: + case EVENT_GROUP_REP_EXTRAIDS: // Group by events. $sql = events_get_all( ['te.*'], @@ -418,8 +421,16 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal true ); - $target_ids = db_get_all_rows_sql( - sprintf( + if ((int) $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) { + $sql = sprintf( + 'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf + ON tu.id_extra = tf.id_extra + AND tf.max_id_evento = %d', + $sql, + $id_evento + ); + } else { + $sql = sprintf( 'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf ON tu.estado = tf.estado AND tu.evento = tf.evento @@ -428,8 +439,10 @@ function events_delete($id_evento, $filter=null, $history=false, $force_node=fal AND tf.max_id_evento = %d', $sql, $id_evento - ) - ); + ); + } + + $target_ids = db_get_all_rows_sql($sql); // Try to avoid deadlock while updating full set. if ($target_ids !== false && count($target_ids) > 0) { @@ -475,12 +488,12 @@ function events_update_status($id_evento, $status, $filter=null) } if (isset($filter) === false || is_array($filter) === false) { - $filter = ['group_rep' => 0]; + $filter = ['group_rep' => EVENT_GROUP_REP_ALL]; } switch ($filter['group_rep']) { - case '0': - case '2': + case EVENT_GROUP_REP_ALL: + case EVENT_GROUP_REP_AGENTS: default: // No groups option direct update. $update_sql = sprintf( @@ -492,7 +505,8 @@ function events_update_status($id_evento, $status, $filter=null) ); break; - case '1': + case EVENT_GROUP_REP_EVENTS: + case EVENT_GROUP_REP_EXTRAIDS: // Group by events. $sql = events_get_all( ['te.*'], @@ -511,8 +525,16 @@ function events_update_status($id_evento, $status, $filter=null) true ); - $target_ids = db_get_all_rows_sql( - sprintf( + if ((int) $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) { + $sql = sprintf( + 'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf + ON tu.id_extra = tf.id_extra + AND tf.max_id_evento = %d', + $sql, + $id_evento + ); + } else { + $sql = sprintf( 'SELECT tu.id_evento FROM tevento tu INNER JOIN ( %s ) tf ON tu.estado = tf.estado AND tu.evento = tf.evento @@ -521,8 +543,10 @@ function events_update_status($id_evento, $status, $filter=null) AND tf.max_id_evento = %d', $sql, $id_evento - ) - ); + ); + } + + $target_ids = db_get_all_rows_sql($sql); // Try to avoid deadlock while updating full set. if ($target_ids !== false && count($target_ids) > 0) { @@ -1363,7 +1387,10 @@ function events_get_all( // Order. $order_by = ''; if (isset($order, $sort_field) === true) { - if (isset($filter['group_rep']) === true && $filter['group_rep'] == 1) { + if (isset($filter['group_rep']) === true + && $filter['group_rep'] === EVENT_GROUP_REP_EVENTS + && $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS + ) { $order_by = events_get_sql_order('MAX('.$sort_field.')', $order); } else { $order_by = events_get_sql_order($sort_field, $order); @@ -1397,22 +1424,22 @@ function events_get_all( $group_by = 'GROUP BY '; $tagente_join = 'LEFT'; if (isset($filter['group_rep']) === false) { - $filter['group_rep'] = 0; + $filter['group_rep'] = EVENT_GROUP_REP_ALL; } switch ($filter['group_rep']) { - case '0': + case EVENT_GROUP_REP_ALL: default: // All events. $group_by = ''; break; - case '1': + case EVENT_GROUP_REP_EVENTS: // Group by events. $group_by .= 'te.evento, te.id_agente, te.id_agentmodule'; break; - case '2': + case EVENT_GROUP_REP_AGENTS: // Group by agents. $tagente_join = 'INNER'; $group_by = ''; @@ -1426,6 +1453,11 @@ function events_get_all( ); } break; + + case EVENT_GROUP_REP_EXTRAIDS: + // Group by events. + $group_by .= 'te.id_extra'; + break; } $tgrupo_join = 'LEFT'; @@ -1511,7 +1543,9 @@ function events_get_all( } } - if ((int) $filter['group_rep'] === 1 && $count === false) { + if (($filter['group_rep'] === EVENT_GROUP_REP_EVENTS + || $filter['group_rep'] === EVENT_GROUP_REP_EXTRAIDS) && $count === false + ) { $sql = sprintf( 'SELECT %s %s @@ -2880,9 +2914,9 @@ function events_get_agent( // Group by agent. if ((bool) $show_summary_group === true) { - $filters['group_rep'] = 1; + $filters['group_rep'] = EVENT_GROUP_REP_EVENTS; } else { - $filters['group_rep'] = 2; + $filters['group_rep'] = EVENT_GROUP_REP_AGENTS; } $events = Event::search( @@ -5092,7 +5126,7 @@ function events_get_count_events_validated_by_user($data) * * @return string SQL. */ -function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=0, $only_fields=false) +function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=EVENT_GROUP_REP_ALL, $only_fields=false) { $sort_field_translated = $sort_field; switch ($sort_field) { @@ -5113,7 +5147,7 @@ function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep= break; case 'timestamp': - $sort_field_translated = ($group_rep == 0) ? 'timestamp' : 'timestamp_last'; + $sort_field_translated = ($group_rep == EVENT_GROUP_REP_ALL) ? 'timestamp' : 'timestamp_last'; break; case 'user_id': diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 5217ba2b15..bd9f4a076d 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -4011,7 +4011,7 @@ function reporting_groups_nodes($content) } // Grouped. - $filters['group_rep'] = 1; + $filters['group_rep'] = EVENT_GROUP_REP_EVENTS; $events = Event::search( [ diff --git a/pandora_console/mobile/operation/events.php b/pandora_console/mobile/operation/events.php index 360f2710d6..50e9aab8ba 100644 --- a/pandora_console/mobile/operation/events.php +++ b/pandora_console/mobile/operation/events.php @@ -357,10 +357,10 @@ class Events ); if (isset($group_rep) === false) { - $group_rep = 0; + $group_rep = EVENT_GROUP_REP_ALL; } - if ((int) $group_rep !== 0) { + if ((int) $group_rep !== EVENT_GROUP_REP_ALL) { if ($event['event_rep'] <= 1) { $event['event_repeated'] = ''.__('No').''; } else { @@ -1068,7 +1068,7 @@ class Events $filters['id_agent'] = $this->id_agent; } - $filters['group_rep'] = 1; + $filters['group_rep'] = EVENT_GROUP_REP_EVENTS; if (isset($this->limit) === true && $this->limit !== -1 diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index b3d4b52377..e17dd58854 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -84,7 +84,7 @@ ui_require_javascript_file('pandora_events'); $default_filter = [ 'status' => EVENT_NO_VALIDATED, 'event_view_hr' => $config['event_view_hr'], - 'group_rep' => 1, + 'group_rep' => EVENT_GROUP_REP_EVENTS, 'tag_with' => [], 'tag_without' => [], 'history' => false, @@ -1626,9 +1626,10 @@ $inputs[] = $in; // Duplicates group { events | agents }. $data = html_print_select( [ - 0 => __('All events'), - 1 => __('Group events'), - 2 => __('Group agents'), + EVENT_GROUP_REP_ALL => __('All events'), + EVENT_GROUP_REP_EVENTS => __('Group events'), + EVENT_GROUP_REP_AGENTS => __('Group agents'), + EVENT_GROUP_REP_EXTRAIDS => __('Group extra id'), ], 'group_rep', $group_rep, @@ -2227,12 +2228,14 @@ try { $active_filters_div .= '
'; $active_filters_div .= '
'.__('Duplicated').'
'; $active_filters_div .= '
'; - if ($group_rep == 0) { + if ($group_rep == EVENT_GROUP_REP_ALL) { $active_filters_div .= __('All events.'); - } else if ($group_rep == 1) { + } else if ($group_rep == EVENT_GROUP_REP_EVENTS) { $active_filters_div .= __('Group events'); - } else if ($group_rep == 2) { + } else if ($group_rep == EVENT_GROUP_REP_AGENTS) { $active_filters_div .= __('Group agents.'); + } else if ($group_rep == EVENT_GROUP_REP_EXTRAIDS) { + $active_filters_div .= __('Group extra id.'); } $active_filters_div .= '
'; diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php index 1e3eae4c8a..de5c92ac29 100644 --- a/pandora_console/operation/menu.php +++ b/pandora_console/operation/menu.php @@ -404,7 +404,7 @@ if ($access_console_node === true) { $user_event_filter = [ 'status' => EVENT_NO_VALIDATED, 'event_view_hr' => $config['event_view_hr'], - 'group_rep' => 1, + 'group_rep' => EVENT_GROUP_REP_EVENTS, 'tag_with' => [], 'tag_without' => [], 'history' => false, From 8d8140faa46149f932de170ea6309ccbe27a3d38 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Date: Wed, 28 Sep 2022 09:30:30 +0200 Subject: [PATCH 18/83] add new macros response events pandora_enterprise#9423 --- pandora_console/include/ajax/events.php | 4 ++- pandora_console/include/functions_events.php | 36 +++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index dbb7924517..7075016c64 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -1093,7 +1093,9 @@ if ($get_response === true) { $event_response['target'] = events_get_response_target( $event_id, $event_response, - $response_parameters + $response_parameters, + $server_id, + ($server_id !== 0) ? $node->server_name() : 'Metaconsole' ); } catch (\Exception $e) { // Unexistent agent. diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index a91868a2c2..cdbd930972 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -3522,16 +3522,20 @@ function events_page_responses($event) /** * Replace macros in the target of a response and return it. * - * @param integer $event_id Event identifier. - * @param array $event_response Event Response. - * @param array|null $response_parameters If parameters response values. + * @param integer $event_id Event identifier. + * @param array $event_response Event Response. + * @param array|null $response_parameters If parameters response values. + * @param integer|null $server_id Server Id. + * @param string|null $server_name Name server. * * @return string The response text with the macros applied. */ function events_get_response_target( int $event_id, array $event_response, - ?array $response_parameters=null + ?array $response_parameters=null, + ?int $server_id=0, + ?string $server_name='' ) { global $config; @@ -3899,6 +3903,26 @@ function events_get_response_target( ); } + if (is_metaconsole() === true + && strpos($target, '_node_id_') !== false + ) { + $target = str_replace( + '_node_id_', + $server_id, + $target + ); + } + + if (is_metaconsole() === true + && strpos($target, '_node_name_') !== false + ) { + $target = str_replace( + '_node_name_', + $server_name, + $target + ); + } + return $target; } @@ -5635,7 +5659,9 @@ function get_events_get_response_target( return events_get_response_target( $event_id, $event_response, - $response_parameters + $response_parameters, + $server_id, + ($server_id !== 0) ? $node->server_name() : 'Metaconsole' ); } catch (\Exception $e) { // Unexistent agent. From 8438045cf6edecdb0b5050cb02414ec609454792 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Date: Thu, 29 Sep 2022 12:54:46 +0200 Subject: [PATCH 19/83] filter recursive groups in events pandora_enterprise#2133 --- pandora_console/extras/mr/58.sql | 5 +++ .../godmode/events/event_edit_filter.php | 4 ++ pandora_console/include/ajax/events.php | 12 +++++- pandora_console/include/functions_events.php | 6 ++- pandora_console/operation/events/events.php | 38 ++++++++++++++++++- pandora_console/pandoradb.sql | 1 + 6 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 pandora_console/extras/mr/58.sql diff --git a/pandora_console/extras/mr/58.sql b/pandora_console/extras/mr/58.sql new file mode 100644 index 0000000000..ea5c7e0135 --- /dev/null +++ b/pandora_console/extras/mr/58.sql @@ -0,0 +1,5 @@ +START TRANSACTION; + +ALTER TABLE `tevent_filter` ADD COLUMN `search_recursive_groups` INT NOT NULL DEFAULT 0; + +COMMIT; \ No newline at end of file diff --git a/pandora_console/godmode/events/event_edit_filter.php b/pandora_console/godmode/events/event_edit_filter.php index 91045ce0ea..2e7e009686 100644 --- a/pandora_console/godmode/events/event_edit_filter.php +++ b/pandora_console/godmode/events/event_edit_filter.php @@ -90,6 +90,7 @@ if ($id) { $filter_only_alert = $filter['filter_only_alert']; $search_secondary_groups = $filter['search_secondary_groups']; + $search_recursive_groups = $filter['search_recursive_groups']; $custom_data = $filter['custom_data']; $custom_data_filter_type = $filter['custom_data_filter_type']; @@ -128,6 +129,7 @@ if ($id) { $tag_without_base64 = base64_encode($tag_without_json); $filter_only_alert = ''; $search_secondary_groups = 0; + $search_recursive_groups = 0; } if ($update || $create) { @@ -170,6 +172,7 @@ if ($update || $create) { $filter_only_alert = get_parameter('filter_only_alert', ''); $search_secondary_groups = get_parameter('search_secondary_groups', 0); + $search_recursive_groups = get_parameter('search_recursive_groups', 0); $custom_data = get_parameter('custom_data', ''); $custom_data_filter_type = get_parameter('custom_data_filter_type', ''); @@ -198,6 +201,7 @@ if ($update || $create) { 'user_comment' => $user_comment, 'filter_only_alert' => $filter_only_alert, 'search_secondary_groups' => $search_secondary_groups, + 'search_recursive_groups' => $search_recursive_groups, 'custom_data' => $custom_data, 'custom_data_filter_type' => $custom_data_filter_type, ]; diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index c902a6479a..674bd8131b 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -360,10 +360,11 @@ if ($save_event_filter) { ); $values['filter_only_alert'] = get_parameter('filter_only_alert'); $values['search_secondary_groups'] = get_parameter('search_secondary_groups'); + $values['search_recursive_groups'] = get_parameter('search_recursive_groups'); $values['id_group_filter'] = get_parameter('id_group_filter'); - $values['date_from'] = get_parameter('date_from'); + $values['date_from'] = get_parameter('date_from', null); $values['time_from'] = get_parameter('time_from'); - $values['date_to'] = get_parameter('date_to'); + $values['date_to'] = get_parameter('date_to', null); $values['time_to'] = get_parameter('time_to'); $values['source'] = get_parameter('source'); $values['id_extra'] = get_parameter('id_extra'); @@ -417,6 +418,7 @@ if ($update_event_filter) { ); $values['filter_only_alert'] = get_parameter('filter_only_alert'); $values['search_secondary_groups'] = get_parameter('search_secondary_groups'); + $values['search_recursive_groups'] = get_parameter('search_recursive_groups'); $values['id_group_filter'] = get_parameter('id_group_filter'); $values['date_from'] = get_parameter('date_from'); $values['time_from'] = get_parameter('time_from'); @@ -471,6 +473,7 @@ if ($get_filter_values) { 'module_search' => '', 'filter_only_alert' => '-1', 'search_secondary_groups' => 0, + 'search_recursive_groups' => 0, 'user_comment' => '', 'id_extra' => '', 'id_user_ack' => '', @@ -657,6 +660,8 @@ function load_form_filter() { $("#filter_only_alert").val(val); if (i == 'search_secondary_groups') $("#checkbox-search_secondary_groups").val(val); + if (i == 'search_recursive_groups') + $("#checkbox-search_recursive_groups").val(val); if (i == 'id_group_filter') $("#id_group_filter").val(val); if (i == 'source') @@ -900,6 +905,7 @@ function save_new_filter() { "tag_without": Base64.decode($("#hidden-tag_without").val()), "filter_only_alert" : $("#filter_only_alert").val(), "search_secondary_groups" : $("#checkbox-search_secondary_groups").val(), + "search_recursive_groups" : $("#checkbox-search_recursive_groups").val(), "id_group_filter": $("#id_group_filter_dialog").val(), "date_from": $("#text-date_from").val(), "time_from": $("#text-time_from").val(), @@ -976,6 +982,7 @@ function save_update_filter() { "tag_without" : Base64.decode($("#hidden-tag_without").val()), "filter_only_alert" : $("#filter_only_alert").val(), "search_secondary_groups" : $("#checkbox-search_secondary_groups").val(), + "search_recursive_groups" : $("#checkbox-search_recursive_groups").val(), "id_group_filter": $("#id_group_filter_dialog").val(), "date_from": $("#text-date_from").val(), "time_from": $("#text-time_from").val(), @@ -2479,6 +2486,7 @@ if ($get_events_fired) { 'tag_without' => [], 'filter_only_alert' => -1, 'search_secondary_groups' => 0, + 'search_recursive_groups' => 0, 'source' => '', 'id_extra' => '', 'user_comment' => '', diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index b3aece13a3..b5bdb156ff 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -627,6 +627,7 @@ function events_update_status($id_evento, $status, $filter=null) * 'tag_without' * 'filter_only_alert' * 'search_secondary_groups' + * 'search_recursive_groups' * 'module_search' * 'group_rep' * 'server_id' @@ -864,7 +865,10 @@ function events_get_all( if (isset($groups) === true && (is_array($groups) === true || ($groups > 0)) ) { - if ($recursiveGroups === true) { + if ($recursiveGroups === true + || (isset($filter['search_recursive_groups']) === true + && (bool) $filter['search_recursive_groups'] === true) + ) { // Add children groups. $children = []; if (is_array($groups) === true) { diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index b3d4b52377..f37f000e9c 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -173,6 +173,10 @@ $search_secondary_groups = get_parameter( 'filter[search_secondary_groups]', 0 ); +$search_recursive_groups = get_parameter( + 'filter[search_recursive_groups]', + 0 +); $id_group_filter = get_parameter( 'filter[id_group_filter]', ($filter['id_group'] ?? '') @@ -1058,6 +1062,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); + $search_recursive_groups = ($filter['search_recursive_groups'] ?? 0); $id_group_filter = $filter['id_group_filter']; $date_from = $filter['date_from']; $time_from = $filter['time_from']; @@ -1676,6 +1681,28 @@ $in = '
'; $in .= $data.'
'; $inputs[] = $in; +// Search recursive groups. +$data = html_print_checkbox_switch( + 'search_recursive_groups', + $search_recursive_groups, + $search_recursive_groups, + true, + false, + 'search_in_secondary_groups(this);', + true +); + +$in = '
'; +$in .= $data; +$in .= '
'; +$inputs[] = $in; + // Search secondary groups. $data = html_print_checkbox_switch( 'search_secondary_groups', @@ -1687,8 +1714,15 @@ $data = html_print_checkbox_switch( true ); -$in = '
'; -$in .= $data.'
'; +$in = '
'; +$in .= $data; +$in .= '
'; $inputs[] = $in; // Trick view in table. diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 8e794fb15d..5e8ebb5460 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1245,6 +1245,7 @@ CREATE TABLE IF NOT EXISTS `tevent_filter` ( `tag_without` TEXT, `filter_only_alert` INT NOT NULL DEFAULT -1, `search_secondary_groups` INT NOT NULL DEFAULT 0, + `search_recursive_groups` INT NOT NULL DEFAULT 0, `date_from` date DEFAULT NULL, `date_to` date DEFAULT NULL, `source` TINYTEXT, From 429cefcf2be2e5dcaf9bb83d51e7eb5a9b993149 Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 30 Sep 2022 09:59:53 +0200 Subject: [PATCH 20/83] #9300 label change --- pandora_console/include/lib/Dashboard/Widgets/service_map.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/lib/Dashboard/Widgets/service_map.php b/pandora_console/include/lib/Dashboard/Widgets/service_map.php index 0fa8d13f10..9dfe181fd8 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/service_map.php +++ b/pandora_console/include/lib/Dashboard/Widgets/service_map.php @@ -328,7 +328,7 @@ class ServiceMapWidget extends Widget ]; $inputs[] = [ - 'label' => __('Enable sunburst'), + 'label' => __('Show sunburst by default'), 'arguments' => [ 'type' => 'switch', 'name' => 'sunburst', From f367e852d19d47296e97e410cce44885cbc30e50 Mon Sep 17 00:00:00 2001 From: "edu.corral" Date: Fri, 30 Sep 2022 11:06:28 +0200 Subject: [PATCH 21/83] ent 8956 cli create user comment entities --- pandora_server/util/pandora_manage.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 1f04ef717c..e1f5730316 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -567,8 +567,8 @@ sub pandora_create_user ($$$$$) { exit; } - return db_insert ($dbh, 'id_user', 'INSERT INTO tusuario (id_user, fullname, password, comments, is_admin) - VALUES (?, ?, ?, ?, ?)', safe_input($name), safe_input($name), $password, safe_input($comments), $is_admin); + return db_insert ($dbh, 'id_user', 'INSERT INTO tusuario (id_user, fullname, password, is_admin, comments) + VALUES (?, ?, ?, ?, ?)', safe_input($name), safe_input($name), $password, $is_admin, decode_entities($comments)); } ########################################################################## From b29f7eb1606ba4ec51081384570413d2d1460bcc Mon Sep 17 00:00:00 2001 From: Calvo Date: Fri, 30 Sep 2022 14:54:16 +0200 Subject: [PATCH 22/83] Fix planned downtime issues --- .../agentes/planned_downtime.editor.php | 100 ++++++++++++------ .../godmode/agentes/planned_downtime.list.php | 41 ++++++- pandora_console/include/javascript/pandora.js | 13 ++- .../operation/agentes/ver_agente.php | 9 +- 4 files changed, 125 insertions(+), 38 deletions(-) diff --git a/pandora_console/godmode/agentes/planned_downtime.editor.php b/pandora_console/godmode/agentes/planned_downtime.editor.php index cec18a21ca..cdd5152bd0 100644 --- a/pandora_console/godmode/agentes/planned_downtime.editor.php +++ b/pandora_console/godmode/agentes/planned_downtime.editor.php @@ -1104,11 +1104,7 @@ $table->data[1][0] = __('Available agents'); $table->data[1][1] = html_print_select($agents, 'id_agents[]', -1, '', _('Any'), -2, true, true, true, '', false, 'min-width: 250px;width: 70%;'); -if ($type_downtime != 'quiet') { - echo '