From 7403890e6cf6d87d101a6a76dae4d757e36780e3 Mon Sep 17 00:00:00 2001 From: m-lopez-f Date: Thu, 12 Jan 2017 15:51:59 +0100 Subject: [PATCH] Add selection modules in bulk operations: Add action alerts. --- .../massive/massive_add_action_alerts.php | 96 ++++++++++----- .../massive/massive_delete_action_alerts.php | 113 +++++++++++------- pandora_console/include/javascript/pandora.js | 72 +++++++++++ .../operation/agentes/ver_agente.php | 41 +++++++ 4 files changed, 244 insertions(+), 78 deletions(-) diff --git a/pandora_console/godmode/massive/massive_add_action_alerts.php b/pandora_console/godmode/massive/massive_add_action_alerts.php index 8154dbaec7..ca4c33e262 100755 --- a/pandora_console/godmode/massive/massive_add_action_alerts.php +++ b/pandora_console/godmode/massive/massive_add_action_alerts.php @@ -52,7 +52,6 @@ $id_group = (int) get_parameter ('id_group'); $id_agents = get_parameter ('id_agents'); $id_alert_templates = (array) get_parameter ('id_alert_templates'); $recursion = get_parameter ('recursion'); - $add = (bool) get_parameter_post ('add'); if ($add) { @@ -64,45 +63,61 @@ if ($add) { $fires_max = (int) get_parameter ('fires_max'); if (!empty($actions)) { - $agent_alerts = agents_get_alerts($id_agents); - $cont = 0; - $agent_alerts_id = array(); - foreach ($agent_alerts['simple'] as $agent_alert) { - if (in_array($agent_alert['id_alert_template'], $id_alert_templates)) { - $agent_alerts_id[$cont] = $agent_alert['id']; - $cont = $cont + 1; - } - } - - $options = array(); - - if ($fires_min > 0) - $options['fires_min'] = $fires_min; - if ($fires_max > 0) - $options['fires_max'] = $fires_max; - - if (empty($agent_alerts_id)) { - ui_print_result_message (false, '', __('Could not be added').". ".__('No alerts selected')); - } - else { - $results = true; - foreach ($agent_alerts_id as $agent_alert_id) { - foreach ($actions as $action) { - $result = alerts_add_alert_agent_module_action($agent_alert_id, $action, $options); - if ($result === false) - $results = false; + $modules = get_parameter ('module'); + $modules_id = array(); + if (!empty($modules)) { + foreach ($modules as $module) { + foreach ($id_agents as $id_agent) { + $module_id = modules_get_agentmodule_id($module, $id_agent); + $modules_id[] = $module_id['id_agente_modulo']; } } - db_pandora_audit("Massive management", "Add alert action " . json_encode($id_agents), false, false, 'Agents: ' . - json_encode($id_agents) . ' Alerts : ' . json_encode($agent_alerts) . - ' Fires Min: ' . $fires_min . ' Fires Max: ' . $fires_max . ' Actions: ' . implode(',',$actions)); + $agent_alerts = agents_get_alerts($id_agents); + $cont = 0; + $agent_alerts_id = array(); - ui_print_result_message ($results, __('Successfully added'), __('Could not be added')); + foreach ($agent_alerts['simple'] as $agent_alert) { + + if ((in_array($agent_alert['id_alert_template'], $id_alert_templates)) && (in_array($agent_alert['id_agent_module'], $modules_id))) { + $agent_alerts_id[$cont] = $agent_alert['id']; + $cont += 1; + } + } + + $options = array(); + + if ($fires_min > 0) + $options['fires_min'] = $fires_min; + if ($fires_max > 0) + $options['fires_max'] = $fires_max; + + if (empty($agent_alerts_id)) { + ui_print_result_message (false, '', __('Could not be added').". ".__('No alerts selected')); + } + else { + $results = true; + foreach ($agent_alerts_id as $agent_alert_id) { + foreach ($actions as $action) { + $result = alerts_add_alert_agent_module_action($agent_alert_id, $action, $options); + if ($result === false) + $results = false; + } + } + + db_pandora_audit("Massive management", "Add alert action " . json_encode($id_agents), false, false, 'Agents: ' . + json_encode($id_agents) . ' Alerts : ' . json_encode($agent_alerts) . + ' Fires Min: ' . $fires_min . ' Fires Max: ' . $fires_max . ' Actions: ' . implode(',',$actions)); + + ui_print_result_message ($results, __('Successfully added'), __('Could not be added')); + } + } + else { + ui_print_result_message (false, '', __('Could not be added').". ".__('No modules selected')); } } else { - ui_print_result_message (false, '', __('Could not be added').". ".__('No action selected')); + ui_print_result_message (false, '', __('Could not be added').". ".__('No actions selected')); } } @@ -150,6 +165,15 @@ $table->data[2][0] .= ''; $table->data[2][1] = html_print_select (array(), 'id_alert_templates[]', '', '', '', '', true, true, true, '', $alert_templates == 0); +$table->data[2][2] = __('When select agents'); +$table->data[2][2] .= '
'; +$table->data[2][2] .= html_print_select ( + array('common' => __('Show common modules'), + 'all' => __('Show all modules'),'unknown' => __('Show unknown and not init modules')), + 'modules_selection_mode', + 'common', false, '', '', true); +$table->data[2][3] = html_print_select (array(), 'module[]', + $modules_select, false, '', '', true, true, false); $actions = alerts_get_alert_actions (); $table->data[3][0] = __('Action'); @@ -233,6 +257,12 @@ $(document).ready (function () { update_alerts(); }); + $("#id_alert_templates").change(alert_templates_changed_by_multiple_agents_with_alerts); + + $("#modules_selection_mode").click(function () { + $("#id_alert_templates").trigger("change"); + }); + function update_alerts() { var idAgents = Array(); jQuery.each ($("#id_agents option:selected"), function (i, val) { diff --git a/pandora_console/godmode/massive/massive_delete_action_alerts.php b/pandora_console/godmode/massive/massive_delete_action_alerts.php index b41642ecf8..a36363d19f 100644 --- a/pandora_console/godmode/massive/massive_delete_action_alerts.php +++ b/pandora_console/godmode/massive/massive_delete_action_alerts.php @@ -58,52 +58,65 @@ if ($delete) { $actions = get_parameter ('action'); if (!empty($actions)) { - $agent_alerts = agents_get_alerts($id_agents); - - $alerts_agent_modules = array(); - foreach ($agent_alerts['simple'] as $agent_alert) { - if (in_array($agent_alert['id_alert_template'], $id_alert_templates)) { - $alerts_agent_modules = array_merge($alerts_agent_modules, alerts_get_alerts_agent_module ($agent_alert['id_agent_module'], true, false, 'id')); + $modules = (array) get_parameter ('module'); + $modules_id = array(); + if (!empty($modules)) { + foreach ($modules as $module) { + foreach ($id_agents as $id_agent) { + $module_id = modules_get_agentmodule_id($module, $id_agent); + $modules_id[] = $module_id['id_agente_modulo']; + } } - } - - if (empty($alerts_agent_modules)) { - ui_print_result_message (false, '', - __('Could not be deleted. No alerts selected')); - } - else { - $results = true; - $agent_module_actions = array(); - - foreach ($alerts_agent_modules as $alert_agent_module) { - $agent_module_actions = alerts_get_alert_agent_module_actions ($alert_agent_module['id'], array('id','id_alert_action')); - - foreach ($agent_module_actions as $agent_module_action) { - foreach ($actions as $action) { - if ($agent_module_action['id_alert_action'] == $action) { - $result = alerts_delete_alert_agent_module_action ($agent_module_action['id']); - - if ($result === false) - $results = false; - } - } + + $agent_alerts = agents_get_alerts($id_agents); + $alerts_agent_modules = array(); + foreach ($agent_alerts['simple'] as $agent_alert) { + if ((in_array($agent_alert['id_alert_template'], $id_alert_templates)) && (in_array($agent_alert['id_agent_module'], $modules_id))) { + $alerts_agent_modules = array_merge($alerts_agent_modules, alerts_get_alerts_agent_module ($agent_alert['id_agent_module'], true, false, 'id')); } } - if ($results) { - db_pandora_audit("Massive management", "Delete alert action", false, false, - 'Agent: ' . json_encode($id_agents) . ' Alert templates: ' . json_encode($id_alert_templates) . - ' Actions: ' . implode(',',$actions)); + if (empty($alerts_agent_modules)) { + ui_print_result_message (false, '', + __('Could not be deleted. No alerts selected')); } else { - db_pandora_audit("Massive management", "Fail try to delete alert action", false, false, - 'Agent: ' . json_encode($id_agents) . ' Alert templates: ' . json_encode($id_alert_templates) . - ' Actions: ' . implode(',',$actions)); + $results = true; + $agent_module_actions = array(); + + foreach ($alerts_agent_modules as $alert_agent_module) { + $agent_module_actions = alerts_get_alert_agent_module_actions ($alert_agent_module['id'], array('id','id_alert_action')); + + foreach ($agent_module_actions as $agent_module_action) { + foreach ($actions as $action) { + if ($agent_module_action['id_alert_action'] == $action) { + $result = alerts_delete_alert_agent_module_action ($agent_module_action['id']); + + if ($result === false) + $results = false; + } + } + } + } + + if ($results) { + db_pandora_audit("Massive management", "Delete alert action", false, false, + 'Agent: ' . json_encode($id_agents) . ' Alert templates: ' . json_encode($id_alert_templates) . + ' Actions: ' . implode(',',$actions)); + } + else { + db_pandora_audit("Massive management", "Fail try to delete alert action", false, false, + 'Agent: ' . json_encode($id_agents) . ' Alert templates: ' . json_encode($id_alert_templates) . + ' Actions: ' . implode(',',$actions)); + } + + ui_print_result_message ($results, + __('Successfully deleted'), + __('Could not be deleted')); } - - ui_print_result_message ($results, - __('Successfully deleted'), - __('Could not be deleted')); + } + else { + ui_print_result_message (false, '', __('Could not be added').". ".__('No modules selected')); } } else { @@ -143,9 +156,6 @@ $table->data[0][3] = html_print_checkbox ("recursion", 1, $recursion, true, false); $table->data[1][0] = __('Agents with templates'); -$table->data[1][0] .= ''; $table->data[1][1] = html_print_select (array(),'id_agents[]', 0, false, '', '', true, true); if (empty($id_agents)) { @@ -155,10 +165,17 @@ else { $alert_templates = agents_get_alerts_simple ($id_agents); } $table->data[2][0] = __('Alert templates'); -$table->data[2][0] .= ''; $table->data[2][1] = html_print_select (index_array ($alert_templates, 'id_alert_template', 'template_name'), 'id_alert_templates[]', '', '', '', '', true, true, true, '', $alert_templates == 0); +$table->data[2][2] = __('When select agents'); +$table->data[2][2] .= '
'; +$table->data[2][2] .= html_print_select ( + array('common' => __('Show common modules'), + 'all' => __('Show all modules'),'unknown' => __('Show unknown and not init modules')), + 'modules_selection_mode', + 'common', false, '', '', true); +$table->data[2][3] = html_print_select (array(), 'module[]', + $modules_select, false, '', '', true, true, false); + $actions = alerts_get_alert_actions (); $table->data[3][0] = __('Action'); @@ -221,6 +238,12 @@ $(document).ready (function () { update_alerts(); }); + $("#id_alert_templates").change(alert_templates_changed_by_multiple_agents_with_alerts); + + $("#modules_selection_mode").click(function () { + $("#id_alert_templates").trigger("change"); + }); + function update_alerts() { var idAgents = Array(); jQuery.each ($("#id_agents option:selected"), function (i, val) { diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index c83d7062a1..3c38c43a87 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -373,6 +373,78 @@ function agent_changed_by_multiple_agents_with_alerts (event, id_agent, selected ); } +/** + * Fill up select box with id "module" with modules with alerts of one or more templates + * before agent has been selected, but this not empty the select box.s + * + * @param event that has been triggered + * @param id_agent Agent ID that has been selected + * @param selected Which module(s) have to be selected + */ +function alert_templates_changed_by_multiple_agents_with_alerts (event, id_agent, selected) { + var idAgents = Array(); + + jQuery.each ($("#id_agents option:selected"), function (i, val) { + //val() because the var is same + idAgents.push($(val).val()); + }); + + var selection_mode = $('#modules_selection_mode').val(); + if(selection_mode == undefined) { + selection_mode = 'common'; + } + + templates = Array(); + jQuery.each ($("#id_alert_templates option:selected"), function (i, val) { + //val() because the var is same + templates.push($(val).val()); + }); + + console.log(templates); + + $('#module').attr ('disabled', 1); + $('#module').empty (); + $('#module').append ($('').html ("Loading...").attr ("value", 0)); + jQuery.post ('ajax.php', + {"page": "operation/agentes/ver_agente", + "get_agent_modules_alerts_json_for_multiple_agents": 1, + "templates[]": templates, + "id_agent[]": idAgents, + "selection_mode": selection_mode + }, + function (data) { + $('#module').empty (); + + if (typeof($(document).data('text_for_module')) != 'undefined') { + $('#module').append ($('').html ($(document).data('text_for_module')).attr("value", 0).prop('selected', true)); + } + else { + if (typeof(data['any_text']) != 'undefined') { + $('#module').append ($('').html (data['any_text']).attr ("value", 0).prop('selected', true)); + } + else { + var anyText = $("#any_text").html(); //Trick for catch the translate text. + + if (anyText == null) { + anyText = 'Any'; + } + + $('#module').append ($('').html (anyText).attr ("value", 0).prop('selected', true)); + } + } + jQuery.each (data, function (i, val) { + s = js_html_entity_decode(val); + $('#module').append ($('').html (s).attr ("value", val)); + $('#module').fadeIn ('normal'); + }); + if (selected != undefined) + $('#module').attr ('value', selected); + $('#module').removeAttr('disabled'); + }, + "json" + ); +} + /** * Fill up select box with id "agent" with agents after module has been selected, but this not empty the select box.s * diff --git a/pandora_console/operation/agentes/ver_agente.php b/pandora_console/operation/agentes/ver_agente.php index 90cb6544dc..da23b601dd 100644 --- a/pandora_console/operation/agentes/ver_agente.php +++ b/pandora_console/operation/agentes/ver_agente.php @@ -38,6 +38,7 @@ if (is_ajax ()) { $get_modules_group_json = (bool) get_parameter ("get_modules_group_json"); $get_agent_modules_json_for_multiple_agents = (bool) get_parameter("get_agent_modules_json_for_multiple_agents"); $get_agent_modules_alerts_json_for_multiple_agents = (bool) get_parameter("get_agent_modules_alerts_json_for_multiple_agents"); + $get_agent_modules_multiple_alerts_json_for_multiple_agents = (bool) get_parameter("get_agent_modules_multiple_alerts_json_for_multiple_agents"); $get_agents_json_for_multiple_modules = (bool) get_parameter("get_agents_json_for_multiple_modules"); $get_agent_modules_json_for_multiple_agents_id = (bool) get_parameter("get_agent_modules_json_for_multiple_agents_id"); $get_agentmodule_status_tooltip = (bool) get_parameter ("get_agentmodule_status_tooltip"); @@ -273,6 +274,46 @@ if (is_ajax ()) { } if ($get_agent_modules_alerts_json_for_multiple_agents) { + $idAgents = (array) get_parameter('id_agent'); + $templates = (array) get_parameter('templates'); + + $selection_mode = get_parameter('selection_mode','common'); + + $sql = 'SELECT DISTINCT(nombre) + FROM tagente_modulo t1, talert_template_modules t2 + WHERE t2.id_agent_module = t1.id_agente_modulo + AND delete_pending = 0 + AND id_alert_template IN (' . implode(',', $templates) . ') + AND id_agente IN (' . implode(',', $idAgents) . ')'; + + if ($selection_mode == 'common') { + $sql .= ' AND ( + SELECT count(nombre) + FROM tagente_modulo t3, talert_template_modules t4 + WHERE t4.id_agent_module = t3.id_agente_modulo + AND delete_pending = 0 AND t1.nombre = t3.nombre + AND id_agente IN (' . implode(',', $idAgents) . ') + AND id_alert_template IN (' . implode(',', $templates) . ')) = (' . count($idAgents) . ')'; + } + + $sql .= ' ORDER BY t1.nombre'; + + $nameModules = db_get_all_rows_sql($sql); + + if ($nameModules == false) { + $nameModules = array(); + } + + $result = array(); + foreach($nameModules as $nameModule) { + $result[] = io_safe_output($nameModule['nombre']); + } + + echo json_encode($result); + return; + } + + if ($get_agent_modules_multiple_alerts_json_for_multiple_agents) { $idAgents = get_parameter('id_agent'); $id_template = get_parameter('template');