From aee5a86441ff4fa98ae1759170134b15c45738bc Mon Sep 17 00:00:00 2001
From: jsatoh <junichi@rworks.jp>
Date: Wed, 20 Oct 2010 04:58:22 +0000
Subject: [PATCH] 2010-10-20  Junichi Satoh  <junichi@rworks.jp>

	* godmode/massive/massive_enable_disable_alerts.php: Improved template
	selection to be selected more than one. Added agent selection. (It can
	also be selected more than one.)

	* godmode/include/functions_alerts.php: Added a argument, $id_agents
	array, to get_agents_with_alert_template(). It is used to select
	specific agents in the function.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@3426 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_console/ChangeLog                     |  10 +
 .../massive/massive_enable_disable_alerts.php | 182 +++++++++++++-----
 pandora_console/include/functions_alerts.php  |   8 +-
 3 files changed, 144 insertions(+), 56 deletions(-)

diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog
index 3e9cf88f2b..16d88e8d41 100644
--- a/pandora_console/ChangeLog
+++ b/pandora_console/ChangeLog
@@ -1,3 +1,13 @@
+2010-10-20  Junichi Satoh  <junichi@rworks.jp>
+
+	* godmode/massive/massive_enable_disable_alerts.php: Improved template
+	selection to be selected more than one. Added agent selection. (It can
+	also be selected more than one.)
+
+	* godmode/include/functions_alerts.php: Added a argument, $id_agents
+	array, to get_agents_with_alert_template(). It is used to select
+	specific agents in the function.
+
 2010-10-19  Sergio Martin <sergio.martin@artica.es>
 
 	* include/functions_visual_map.php
diff --git a/pandora_console/godmode/massive/massive_enable_disable_alerts.php b/pandora_console/godmode/massive/massive_enable_disable_alerts.php
index 11e43d5995..a897b4cbb5 100644
--- a/pandora_console/godmode/massive/massive_enable_disable_alerts.php
+++ b/pandora_console/godmode/massive/massive_enable_disable_alerts.php
@@ -31,29 +31,42 @@ if (is_ajax ()) {
 	$get_alerts = (bool) get_parameter ('get_alerts');
 	
 	if ($get_alerts) {
-		$id_group = (int) get_parameter ('id_group');
-		$id_alert_template = (int) get_parameter ('id_alert_template');
-		$disabled = (int) get_parameter ('disabled');
+		$id_agents = get_parameter ('id_agents');
+		$get_templates = (bool) get_parameter ('get_templates');
 
-		$agents_alerts = get_agents_with_alert_template ($id_alert_template, $id_group,
-			array('order' => 'tagente.nombre, talert_template_modules.disabled', '`talert_template_modules`.disabled' => $disabled), 
-			array ('LEFT(CONCAT(LEFT(tagente.nombre,40), " - ", tagente_modulo.nombre), 85) as agent_agentmodule_name', 
-			'talert_template_modules.id as template_module_id'));
+		if ($get_templates) {
+			if (!is_array($id_agents)) {
+				echo json_encode ('');
+				return;
+			}
+			$alert_templates = get_agent_alerts_simple ($id_agents);
+			echo json_encode (index_array ($alert_templates, 'id_alert_template', 'template_name'));
+			return;
+		} else {
+			$id_alert_templates = (array) get_parameter ('id_alert_templates');
+			$disabled = (int) get_parameter ('disabled');
 
-		echo json_encode (index_array ($agents_alerts, 'template_module_id', 'agent_agentmodule_name'));
-		return;
+			$agents_alerts = get_agents_with_alert_template ($id_alert_templates, false,
+				array('order' => 'tagente.nombre, talert_template_modules.disabled', '`talert_template_modules`.disabled' => $disabled), 
+				array ('LEFT(CONCAT(LEFT(tagente.nombre,40), " - ", tagente_modulo.nombre), 85) as agent_agentmodule_name', 
+				'talert_template_modules.id as template_module_id'), $id_agents);
+
+			echo json_encode (index_array ($agents_alerts, 'template_module_id', 'agent_agentmodule_name'));
+			return;
+		}
 	}
 	return;
 }
 
 $id_group = (int) get_parameter ('id_group');
+$id_agents = (array) get_parameter ('id_agents');
 $action = (string) get_parameter ('action', '');
 
 $result = false;
 
 switch($action) {
 	case 'enable_alerts':
-		$id_alert_template = (int) get_parameter ('id_alert_template_disabled', 0);
+		$id_alert_templates = (int) get_parameter ('id_alert_template_disabled', 0);
 		$id_disabled_alerts = get_parameter_post ('id_disabled_alerts', array());
 		foreach($id_disabled_alerts as $id_alert) {
 			$result = set_alerts_agent_module_disable ($id_alert, false);
@@ -61,7 +74,7 @@ switch($action) {
 			print_result_message ($result, __('Successfully enabled'), __('Could not be enabled'));
 		break;
 	case 'disable_alerts':
-		$id_alert_template = (int) get_parameter ('id_alert_template_enabled', 0);
+		$id_alert_templates = (int) get_parameter ('id_alert_template_enabled', 0);
 		$id_enabled_alerts = get_parameter_post ('id_enabled_alerts', array());
 		
 		foreach($id_enabled_alerts as $id_alert) {
@@ -70,7 +83,7 @@ switch($action) {
 			print_result_message ($result, __('Successfully disabled'), __('Could not be disabled'));
 		break;
 	default:
-		$id_alert_template = (int) get_parameter ('id_alert_template', 0);
+		$id_alert_templates = (int) get_parameter ('id_alert_template', 0);
 		break;
 }
 
@@ -88,41 +101,49 @@ $table->size[1] = '85%';
 
 $table->data = array ();
 
-$templates = get_alert_templates (false, array ('id', 'name'));
 $table->data[0][0] = '<form method="post" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_alerts&option=enable_disable_alerts&action=disable_alerts" onsubmit="if (! confirm(\''.__('Are you sure?').'\')) return false;">';
-$table->data[0][0] .= print_input_hidden('id_alert_template_enabled', $id_alert_template, true);
-$table->data[0][0] .= __('Alert template');
-$table->data[0][1] = print_select (index_array ($templates, 'id', 'name'),
-	'id_alert_template', $id_alert_template, false, __('Select'), 0, true);
-	
-$table->data[1][0] = __('Group');
-$table->data[1][1] = print_select_groups(false, "AR", true, 'id_group', $id_group,
-	'', '', '', true, false, true, '', $id_alert_template == 0);
+$table->data[0][0] .= print_input_hidden('id_alert_template_enabled', $id_alert_templates, true);
 
-$table->data[2][0] = __('Enabled alerts').print_help_tip(__('Format').":<br> ".__('Agent')." - ".__('Module'), true);
-$table->data[2][0] .= '<span id="alerts_loading" class="invisible">';
+$table->data[0][0] .= __('Group');
+$table->data[0][1] = print_select_groups(false, "AR", true, 'id_group', $id_group, '', '', '', true);
+
+$table->data[1][0] = __('Agents');
+$table->data[1][0] .= '<span id="agent_loading" class="invisible">';
+$table->data[1][0] .= '<img src="images/spinner.png" />';
+$table->data[1][0] .= '</span>';
+$table->data[1][1] = print_select (get_group_agents ($id_group, false, "none"),
+        'id_agents[]', 0, false, '', '', true, true);
+
+$table->data[2][0] = __('Alert template');
+$table->data[2][0] .= '<span id="template_loading" class="invisible">';
 $table->data[2][0] .= '<img src="images/spinner.png" />';
 $table->data[2][0] .= '</span>';
-$agents_alerts = get_agents_with_alert_template ($id_alert_template, $id_group,
+$table->data[2][1] = print_select ('',  'id_alert_templates[]', '', '', '', '', true, true, true, '', true);
+	
+$table->data[3][0] = __('Enabled alerts').print_help_tip(__('Format').":<br> ".__('Agent')." - ".__('Module'), true);
+$table->data[3][0] .= '<span id="alerts_loading" class="invisible">';
+$table->data[3][0] .= '<img src="images/spinner.png" />';
+$table->data[3][0] .= '</span>';
+$agents_alerts = get_agents_with_alert_template ($id_alert_templates, $id_group,
 	false, array ('tagente.nombre', 'tagente.id_agente'));
-$table->data[2][1] = print_select (index_array ($agents_alerts, 'id_agente', 'nombre'),
-	'id_enabled_alerts[]', '', '', '', '', true, true, true, '', $id_alert_template == 0);
+$table->data[3][1] = print_select (index_array ($agents_alerts, 'id_agente', 'nombre'),
+	'id_enabled_alerts[]', '', '', '', '', true, true, true, '', $id_alert_templates == 0);
 
-$table->data[3][0] = __('Action');
+$table->data[4][0] = __('Action');
 
-$table->data[3][1] = "<table border='0' width='100%'><tr><td>".print_input_image ('disable_alerts', 'images/darrowdown.png', 1, 'margin-left: 150px;', true, array ('title' => __('Disable selected alerts')))."</td><td>";
-$table->data[3][1] .= '</form>';
-$table->data[3][1] .= '<form method="post" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_alerts&option=enable_disable_alerts&action=enable_alerts" onsubmit="if (! confirm(\''.__('Are you sure?').'\')) return false;">';
-$table->data[3][1] .= print_input_hidden('id_alert_template_disabled', $id_alert_template, true);
-$table->data[3][1] .= print_input_image ('enable_alerts', 'images/darrowup.png', 1, 'margin-left: 200px;', true, array ('title' => __('Enable selected alerts')))."</td></tr></table>";
-
-$table->data[4][0] = __('Disabled alerts').print_help_tip(__('Format').":<br> ".__('Agent')." - ".__('Module'), true);
-$table->data[4][0] .= '<span id="alerts_loading2" class="invisible">';
-$table->data[4][0] .= '<img src="images/spinner.png" />';
-$table->data[4][0] .= '</span>';
-$table->data[4][1] = print_select (index_array ($agents_alerts, 'id_agente2', 'nombre'),
-	'id_disabled_alerts[]', '', '', '', '', true, true, true, '', $id_alert_template == 0);
+$table->data[4][1] = "<table border='0' width='100%'><tr><td>".print_input_image ('disable_alerts', 'images/darrowdown.png', 1, 'margin-left: 150px;', true, array ('title' => __('Disable selected alerts')))."</td><td>";
 $table->data[4][1] .= '</form>';
+$table->data[4][1] .= '<form method="post" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_alerts&option=enable_disable_alerts&action=enable_alerts" onsubmit="if (! confirm(\''.__('Are you sure?').'\')) return false;">';
+$table->data[4][1] .= print_input_hidden('id_alert_template_disabled', $id_alert_templates, true);
+$table->data[4][1] .= print_input_image ('enable_alerts', 'images/darrowup.png', 1, 'margin-left: 200px;', true, array ('title' => __('Enable selected alerts')))."</td></tr></table>";
+
+$table->data[5][0] = __('Disabled alerts').print_help_tip(__('Format').":<br> ".__('Agent')." - ".__('Module'), true);
+$table->data[5][0] .= '<span id="alerts_loading2" class="invisible">';
+$table->data[5][0] .= '<img src="images/spinner.png" />';
+$table->data[5][0] .= '</span>';
+$table->data[5][1] = print_select (index_array ($agents_alerts, 'id_agente2', 'nombre'),
+	'id_disabled_alerts[]', '', '', '', '', true, true, true, '', $id_alert_templates == 0);
+$table->data[5][1] .= '</form>';
 
 print_table ($table);
 
@@ -135,23 +156,70 @@ require_jquery_file ('pandora.controls');
 <script type="text/javascript">
 /* <![CDATA[ */
 $(document).ready (function () {
-	update_alerts();
+	clear_alert_fields();
+
+	$("#id_group").pandoraSelectGroupAgent ({
+                agentSelect: "select#id_agents",
+		callbackPost: function () {
+			clear_alert_fields();
+                }
+	});
+
+	$("#id_agents").change (function () {
+		clear_alert_fields();
+		update_alert_templates();
+	});
 	
-	$("#id_alert_template").change (function () {
+	$("#id_alert_templates").change (function () {
 		if (this.value != 0) {
 			$("#id_enabled_alerts").enable ();
 			$("#id_disabled_alerts").enable ();
-			$("#id_group").enable ().change ();
 		} else {
-			$("#id_group, #id_enabled_alerts").disable ();
-			$("#id_group, #id_disabled_alerts").disable ();
+			$("#id_enabled_alerts").disable ();
+			$("#id_disabled_alerts").disable ();
 		}
-		$("#hidden-id_alert_template_enabled").attr("value",$("#id_alert_template").attr("value"));
-		$("#hidden-id_alert_template_disable").val($("#id_alert_template").attr("value"));
+		update_alerts();
 	});
 	
+	function update_alert_templates() {
+		var idAgents = Array();
+		jQuery.each ($("#id_agents option:selected"), function (i, val) {
+			idAgents.push($(val).val());
+		});
+                $("#template_loading").show();
+
+		var $select_template = $("#id_alert_templates").disable ();
+		$("option", $select_template).remove ();
+
+		jQuery.post ("ajax.php",
+				{"page" : "godmode/massive/massive_enable_disable_alerts",
+				"get_alerts" : 1,
+				"get_templates" : 1,
+				"id_agents[]" : idAgents
+				},
+				function (data, status) {
+					options = "";
+					jQuery.each (data, function (id, value) {
+						options += "<option value=\""+id+"\">"+value+"</option>";
+					});
+					$("#id_alert_templates").append (options);
+					$("#template_loading").hide ();
+					$select_template.enable ();
+				},
+				"json"
+			);
+	}
 	
 	function update_alerts() {
+		var idAgents = Array();
+		jQuery.each ($("#id_agents option:selected"), function (i, val) {
+			idAgents.push($(val).val());
+		});
+		var idAlertTemplates = Array();
+		jQuery.each ($("#id_alert_templates option:selected"), function (i, val) {
+			idAlertTemplates.push($(val).val());
+                });
+
 		var $select = $("#id_enabled_alerts").disable ();
 		var $select2 = $("#id_disabled_alerts").disable ();
 		$("#alerts_loading").show ();
@@ -162,8 +230,9 @@ $(document).ready (function () {
 		jQuery.post ("ajax.php",
 			{"page" : "godmode/massive/massive_enable_disable_alerts",
 			"get_alerts" : 1,
-			"id_group" : $("#id_group").attr("value"),
-			"id_alert_template" : $("#id_alert_template").attr("value"),
+			"get_templates" : 0,
+			"id_agents[]" : idAgents,
+			"id_alert_templates[]" : idAlertTemplates,
 			"disabled" : 0
 			},
 			function (data, status) {
@@ -181,8 +250,9 @@ $(document).ready (function () {
 		jQuery.post ("ajax.php",
 			{"page" : "godmode/massive/massive_enable_disable_alerts",
 			"get_alerts" : 1,
-			"id_group" : $("#id_group").attr("value"),
-			"id_alert_template" : $("#id_alert_template").attr("value"),
+			"get_templates" : 0,
+			"id_agents[]" : idAgents,
+			"id_alert_templates[]" : idAlertTemplates,
 			"disabled" : 1
 			},
 			function (data, status) {
@@ -197,10 +267,16 @@ $(document).ready (function () {
 			"json"
 		);
 	}
+
+	function clear_alert_fields() {
+                var $select_template = $("#id_alert_templates").disable ();
+                var $select_enabled = $("#id_enabled_alerts").disable ();
+                var $select_disabled = $("#id_disabled_alerts").disable ();
+                $("option", $select_template).remove ();
+                $("option", $select_enabled).remove ();
+                $("option", $select_disabled).remove ();
+        }
 	
-	$("#id_group").change (function () {
-		update_alerts();
-	});
 });
 /* ]]> */
 </script>
diff --git a/pandora_console/include/functions_alerts.php b/pandora_console/include/functions_alerts.php
index 0fe8b32037..eac1252d29 100644
--- a/pandora_console/include/functions_alerts.php
+++ b/pandora_console/include/functions_alerts.php
@@ -900,7 +900,7 @@ function delete_alert_compound ($id_alert_compound) {
 		array ('id' => $id_alert_compound))) !== false;
 }
 
-function get_agents_with_alert_template ($id_alert_template, $id_group, $filter = false, $fields = false) {
+function get_agents_with_alert_template ($id_alert_template, $id_group, $filter = false, $fields = false, $id_agents = false) {
 	if (empty ($id_alert_template))
 		return false;
 	if (! is_array ($filter))
@@ -908,11 +908,13 @@ function get_agents_with_alert_template ($id_alert_template, $id_group, $filter
 	$filter[] = 'tagente_modulo.id_agente_modulo = talert_template_modules.id_agent_module';
 	$filter[] = 'tagente_modulo.id_agente = tagente.id_agente';
 	$filter['id_alert_template'] = $id_alert_template;
-	$filter['`tagente`.id_agente'] = array_keys (get_group_agents ($id_group, false, "none"));
+	if (empty ($id_agents))
+		$filter['`tagente`.id_agente'] = array_keys (get_group_agents ($id_group, false, "none"));
+	else
+		$filter['`tagente`.id_agente'] = $id_agents;
 	
 	return get_db_all_rows_filter ('tagente, tagente_modulo, talert_template_modules',
 		$filter, $fields);
 }
 
-
 ?>