<?php

// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; version 2

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

/**
 * @package Include
 * @subpackage Planned downtimes
 */

// Load global vars
global $config;

/**
 * Include the usual functions
 */
require_once($config["homedir"] . "/include/functions_ui.php");
// enterprise_include_once('include/functions_inventory.php');

function planned_downtimes_check_dates ($type_execution = 'once', $type_periodicity = '', $datetime_from = false, $datetime_to = false, $periodically_time_from = false, $periodically_time_to = false, $periodically_day_from = false, $periodically_day_to = false) {
	global $config;

	$now = time();

	$result = array(
			'result' => false,
			'message' => ''
		);

	if ($type_execution == 'once' && !$config["past_planned_downtimes"] && $datetime_from < $now) {
		$result['message'] = ui_print_error_message(__('Not created. Error inserting data. Start time must be higher than the current time' ), '', true);
	}
	else if ($type_execution == 'once' && $datetime_from >= $datetime_to) {
		$result['message'] = ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end date must be higher than the start date'), '', true);
	}
	else if ($type_execution == 'periodically'
			&& (($type_periodicity == 'weekly' && $periodically_time_from >= $periodically_time_to)
				|| ($type_periodicity == 'monthly' && $periodically_day_from == $periodically_day_to && $periodically_time_from >= $periodically_time_to))) {
		$result['message'] = ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end time must be higher than the start time'), '', true);
	}
	else if ($type_execution == 'periodically' && $type_periodicity == 'monthly' && $periodically_day_from > $periodically_day_to) {
		$result['message'] = ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end day must be higher than the start day'), '', true);
	}
	else {
		$result['result'] = true;
	}

	return $result;
}

/** 
 * Update or create a planned downtime.
 *
 * @param array Values of the planned downtime.
 * @param int Id of the planned downtime. Empty to create a new downtime.
 * 
 * @return array Id of the updated/created planned downtime, result of the operation and result message.
 */
function planned_downtimes_update ($values, $downtime_id = 0, $check_dates = true) {
	$result = array(
			'id' => $downtime_id,
			'result' => false,
			'message' => ''
		);

	if ($check_dates) {
		$dates_check = planned_downtimes_check_dates($values['type_execution'], $values['type_periodicity'],
			$values['date_from'], $values['date_to'], $values['periodically_time_from'], $values['periodically_time_to'],
			$values['periodically_day_from'], $values['periodically_day_to']);

		if (!$dates_check['result']) {
			$result['message'] = $dates_check['message'];

			return $result;
		}
	}

	$name_trimmed = trim(io_safe_output($values['name']));
	if (!empty($name_trimmed)) {
		$name_exists = (bool) db_get_value('id', 'tplanned_downtime', 'name', $values['name']);

		if ($name_exists) {
			$result['message'] = ui_print_error_message(__('Each planned downtime must have a different name'), '', true);

			return $result;
		}
	}
	else {
		$result['message'] = ui_print_error_message(__('Planned downtime must have a name'), '', true);

		return $result;
	}
	

	if (empty($downtime_id)) {
		$res = db_process_sql_insert('tplanned_downtime', $values);

		if ($res === false) {
			$result['message'] = ui_print_error_message(__('Could not be created'), '', true);
		}
		else {
			$result['message'] = ui_print_success_message(__('Successfully created'), '', true);
			$result['result'] = true;
			$result['id'] = $res;
		}
	}
	else {
		$res = db_process_sql_update('tplanned_downtime', $values, array('id' => $downtime_id));

		if (empty($res)) {
			$result['message'] = ui_print_error_message(__('Could not be updated'), '', true);
		}
		else {
			$result['message'] = ui_print_success_message(__('Successfully updated'), '', true);
			$result['result'] = true;
		}
	}
	

	return $result;
}

/** 
 * Add new agents and modules to the planned downtime.
 *
 * @param int Id of the planned downtime.
 * @param array IDs of the agents to add.
 * @param bool Add all modules of the agents or not.
 * @param array Names of the modules to add. Empty to add all the modules.
 * 
 * @return array The status will be false id any insertion fails.
 * The failed insertions will be added to bad_agents and bad_modules.
 */
function planned_downtimes_add_items ($downtime_id, $agents, $all_modules = true, $module_names = array()) {
	global $config;

	include_once($config['homedir'] . "/include/functions_modules.php");

	$return = array(
			'status' => true,
			'bad_agents' => array(),
			'bad_modules' => array()
		);

	if (empty($module_names)) {
		$all_modules = true;
	}
	else {
		//It is empty.
		if ($module_names[0] == "0")
			$all_modules = true;
	}

	if (empty($agents)) {
		$agents = array();
		$return['status'] = false;
	}
	
	foreach ($agents as $agent_id) {
		
		$values = array(
			'id_downtime' => $downtime_id,
			'id_agent' => $agent_id,
			'all_modules' => $all_modules
		);
		
		$result = db_process_sql_insert('tplanned_downtime_agents', $values);
		
		if (empty($result)) {
			$return['bad_agents'][] = $agent_id;
		}
		else if (!$all_modules) {
			foreach ($module_names as $module_name) {
				
				$module = modules_get_agentmodule_id(io_safe_input($module_name), $agent_id);
				$result = false;
				
				if ($module) {
					
					$module_id = $module["id_agente_modulo"];

					$values = array(
							'id_downtime' => $downtime_id,
							'id_agent' => $agent_id,
							'id_agent_module' => $module_id
						);
					$result = db_process_sql_insert('tplanned_downtime_modules', $values);
				}
				
				if (!$result) {
					$return['bad_modules'][] = $module_name;
				}
			}
		}
	}
	
	return $return;
}

/** 
 * Delete the agents and modules asociated to a planned downtime.
 *
 * @param int Id of the planned downtime.
 * @param int ID of the agent to delete.
 * 
 * @return bool The result of the operation.
 */
function planned_downtimes_delete_items ($downtime_id, $agent_id) {
	$filter = array(
				'id_downtime' => $downtime_id,
				'id_agent' => $agent_id
			);
	$downtime_agent_row = db_get_row('tplanned_downtime_agents', $filter);
	
	$result = db_process_sql_delete('tplanned_downtime_agents', array('id' => $downtime_agent_row['id']));
	
	if (!empty($result) && $downtime_agent_row['all_modules'] == 0) {
		//Delete modules in downtime
		$filter = array(
				'id_downtime' => $downtime_id,
				'id_agent' => $agent_id
			);
		db_process_sql_delete('tplanned_downtime_modules', $filter);
	}

	return $result;
}

/** 
 * Get the planned downtimes that don't comply the actual rules of dates
 * 
 * @return array List of planned downtimes
 */
function planned_downtimes_get_malformed () {

	$sql = "SELECT *
			FROM tplanned_downtime
			WHERE type_execution = 'periodically'
				AND ((type_periodicity = 'monthly'
						AND (periodically_day_from > periodically_day_to
							OR (periodically_day_from = periodically_day_to
								AND periodically_time_from >= periodically_time_to)))
					OR (type_periodicity = 'weekly'
						AND periodically_time_from >= periodically_time_to))";
	$malformed_downtimes = db_get_all_rows_sql($sql);

	if ($malformed_downtimes === false) {
		return false;
	}

	$malformed_downtimes_aux = array();
	foreach ($malformed_downtimes as $malformed_downtime) {
		$malformed_downtimes_aux[$malformed_downtime['id']] = $malformed_downtime;
	}
	$malformed_downtimes = $malformed_downtimes_aux;

	return $malformed_downtimes;
}

/** 
 * Create new downtimes with the correct format and delete the malformed
 *
 * @param array List with the malformed downtimes
 * 
 * @return bool The result of the migration
 */
function planned_downtimes_migrate_malformed_downtimes ($malformed_downtimes = array()) {
	global $config;

	$migration_result = array(
			'status' => true,
			'bad_downtimes' => array()
		);

	if (empty($malformed_downtimes))
		$malformed_downtimes = planned_downtimes_get_malformed();

	foreach ($malformed_downtimes as $key => $downtime) {
		$downtime_type = $downtime['type_downtime'];
		$downtime_execution = $downtime['type_execution'];
		$downtime_periodicity = $downtime['type_periodicity'];

		$downtime_time_from = $downtime['periodically_time_from'];
		$downtime_time_to = $downtime['periodically_time_to'];

		if ($downtime_execution == 'periodically') {
			if ($downtime_periodicity == 'monthly') {
				$downtime_day_from = $downtime['periodically_day_from'];
				$downtime_day_to = $downtime['periodically_day_to'];

				if (($downtime_day_from > $downtime_day_to) || ($downtime_day_from == $downtime_day_to && $downtime_time_from > $downtime_time_to)) {
					$values_first = array(
							'name' => $downtime['name'] . "&nbsp;[1/2]",
							'description' => $downtime['description'],
							'executed' => $downtime['executed'],
							'id_group' => $downtime['id_group'],
							'only_alerts' => $downtime['only_alerts'],
							'periodically_time_from' => $downtime_time_from,
							'periodically_time_to' => "23:59:59",
							'periodically_day_from' => $downtime_day_from,
							'periodically_day_to' => 31,
							'type_downtime' => $downtime_type,
							'type_execution' => $downtime_execution,
							'type_periodicity' => $downtime_periodicity,
							'id_user' => $config['id_user']
						);
					$values_second = $values_first;
					$values_second['name'] = $downtime['name'] . "&nbsp;[2/2]";
					$values_second['periodically_day_from'] = 1;
					$values_second['periodically_time_from'] = "00:00:00";
					$values_second['periodically_day_to'] = $downtime_day_to;
					$values_second['periodically_time_to'] = $downtime_time_to;
					
					$result_first = planned_downtimes_update($values_first, 0, false);

					if ($result_first['result']) {
						$result_second = planned_downtimes_update($values_second, 0, false);

						if (!$result_second['result']) {
							db_process_sql_delete('tplanned_downtime', array('id' => $result_first['id']));
						}
					}

					if ($result_first['result'] && $result_second['result']) {
						$result_copy = planned_downtimes_migrate_malformed_downtimes_copy_items($downtime['id'], $result_first['id'], $result_second['id']);
						
						if (!$result_copy) {
							$migration_result['status'] = false;
							$migration_result['bad_downtimes'][] = $downtime['id'];
						}
					}
					else {
						$migration_result['status'] = false;
						$migration_result['bad_downtimes'][] = $downtime['id'];
					}
				}
				else if ($downtime_day_from == $downtime_day_to && $downtime_time_from == $downtime_time_to) {

					$utimestamp = strtotime("1-1-1970 $downtime_time_to");
					$time = date('H:i:s', $utimestamp + 1);

					if ($time != '00:00:00') {
						$values = array('periodically_time_to' => $time);
					}
					else {
						$utimestamp = strtotime("1-1-1970 $downtime_time_from");
						$time = date('H:i:s', $utimestamp - 1);
						$values = array('periodically_time_from' => $time);
					}

					$filter = array('id' => $downtime['id']);
					$result_update = db_process_sql_update('tplanned_downtime', $values, $filter);

					if (!$result_update) {
						$migration_result['status'] = false;
						$migration_result['bad_downtimes'][] = $downtime['id'];
					}
				}
			}
			else if ($downtime_periodicity == 'weekly') {
				if ($downtime_time_from > $downtime_time_to) {
					$days = array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday");

					$values_first = array(
							'name' => $downtime['name'] . "&nbsp;[1/2]",
							'description' => $downtime['description'],
							'executed' => $downtime['executed'],
							'id_group' => $downtime['id_group'],
							'only_alerts' => $downtime['only_alerts'],
							'monday' => $downtime['monday'],
							'tuesday' => $downtime['tuesday'],
							'wednesday' => $downtime['wednesday'],
							'thursday' => $downtime['thursday'],
							'friday' => $downtime['friday'],
							'saturday' => $downtime['saturday'],
							'sunday' => $downtime['sunday'],
							'periodically_time_from' => $downtime_time_from,
							'periodically_time_to' => "23:59:59",
							'type_downtime' => $downtime_type,
							'type_execution' => $downtime_execution,
							'type_periodicity' => $downtime_periodicity,
							'id_user' => $config['id_user']
						);

					$values_second = $values_first;
					$values_second['name'] = $downtime['name'] . "&nbsp;[2/2]";
					$values_second['periodically_time_from'] = "00:00:00";
					$values_second['periodically_time_to'] = $downtime_time_to;
					$values_second['tuesday'] = $downtime['monday'] ? 1 : 0;
					$values_second['wednesday'] = $downtime['tuesday'] ? 1 : 0;
					$values_second['thursday'] = $downtime['wednesday'] ? 1 : 0;
					$values_second['friday'] = $downtime['thursday'] ? 1 : 0;
					$values_second['saturday'] = $downtime['friday'] ? 1 : 0;
					$values_second['sunday'] = $downtime['saturday'] ? 1 : 0;
					$values_second['monday'] = $downtime['sunday'] ? 1 : 0;

					$result_first = planned_downtimes_update($values_first, 0, false);

					if ($result_first['result']) {
						$result_second = planned_downtimes_update($values_second, 0, false);

						if (!$result_second['result']) {
							db_process_sql_delete('tplanned_downtime', array('id' => $result_first['id']));
						}
					}

					if ($result_first['result'] && $result_second['result']) {
						$result_copy = planned_downtimes_migrate_malformed_downtimes_copy_items($downtime['id'], $result_first['id'], $result_second['id']);

						if (!$result_copy) {
							$migration_result['status'] = false;
							$migration_result['bad_downtimes'][] = $downtime['id'];
						}
					}
					else {
						$migration_result['status'] = false;
						$migration_result['bad_downtimes'][] = $downtime['id'];
					}
				}
				else if ($downtime_time_from == $downtime_time_to) {
					$utimestamp = strtotime("1-1-1970 $downtime_time_to");
					$time = date('H:i:s', $utimestamp + 1);

					if ($time != '00:00:00') {
						$values = array('periodically_time_to' => $time);
					}
					else {
						$utimestamp = strtotime("1-1-1970 $downtime_time_from");
						$time = date('H:i:s', $utimestamp - 1);
						$values = array('periodically_time_from' => $time);
					}

					$filter = array('id' => $downtime['id']);
					$result_update = db_process_sql_update('tplanned_downtime', $values, $filter);

					if (!$result_update) {
						$migration_result['status'] = false;
						$migration_result['bad_downtimes'][] = $downtime['id'];
					}
				}
			}
		}
	}

	return $migration_result;
}

/** 
 * Aux function to copy the items of the selected downtime to the new downtimes.
 * Deletes the new downtimes if the items are not copied.
 */
function planned_downtimes_migrate_malformed_downtimes_copy_items ($original_downtime_id, $new_downtime_first_id, $new_downtime_second_id) {
	$sql = "SELECT *
			FROM tplanned_downtime_agents
			WHERE id_downtime = " . $original_downtime_id;
	$downtime_agents_rows = db_get_all_rows_sql($sql);
	$sql = "SELECT *
			FROM tplanned_downtime_modules
			WHERE id_downtime = " . $original_downtime_id;
	$downtime_modules_rows = db_get_all_rows_sql($sql);

	if (!empty($downtime_agents_rows)) {
		$result_agents = true;

		foreach ($downtime_agents_rows as $downtime_agents_row) {
			$values_agent = array(
					'id_agent' => $downtime_agents_row['id_agent'],
					'all_modules' => $downtime_agents_row['all_modules']
				);
			$values_agent['id_downtime'] = $new_downtime_first_id;
			$result_agent_first = db_process_sql_insert('tplanned_downtime_agents', $values_agent);
			$values_agent['id_downtime'] = $new_downtime_second_id;
			$result_agent_second = db_process_sql_insert('tplanned_downtime_agents', $values_agent);

			if (empty($result_agent_first) || empty($result_agent_second)) {
				$result_agents = false;
				db_process_sql_delete('tplanned_downtime', array('id' => $new_downtime_first_id));
				db_process_sql_delete('tplanned_downtime', array('id' => $new_downtime_second_id));
				break;
			}
		}

		if ($result_agents) {
			if (!empty($downtime_modules_rows)) {
				foreach ($downtime_modules_rows as $downtime_modules_row) {
					$values_module = array(
							'id_agent' => $downtime_modules_row['id_agent'],
							'id_agent_module' => $downtime_modules_row['id_agent_module']
						);
					$values_module['id_downtime'] = $new_downtime_first_id;
					$result_module_first = db_process_sql_insert('tplanned_downtime_modules', $values_module);
					$values_module['id_downtime'] = $new_downtime_second_id;
					$result_module_second = db_process_sql_insert('tplanned_downtime_modules', $values_module);

					if (empty($result_module_first) || empty($result_module_second)) {
						db_process_sql_delete('tplanned_downtime', array('id' => $new_downtime_first_id));
						db_process_sql_delete('tplanned_downtime', array('id' => $new_downtime_second_id));
						break;
					}
				}
			}
		}
	}

	// The new downtimes are created
	$new_planned_downtimes_exists = (bool) db_get_value('id', 'tplanned_downtime', 'id', $new_downtime_first_id)
		&& (bool) db_get_value('id', 'tplanned_downtime', 'id', $new_downtime_second_id);

	if ($new_planned_downtimes_exists) {
		// Delete the migrated downtime and its items
		db_process_sql_delete('tplanned_downtime', array('id' => $original_downtime_id));
	}

	return $new_planned_downtimes_exists;
}

/** 
 * Stop a planned downtime.
 *
 * @param array Planned downtime data.
 * 
 * @return mixes False on error or an array with the result and a message of the operation.
 */
function planned_downtimes_stop ($downtime) {
	$result = false;
	$message = '';
	
	if (empty($downtime))
		return false;
	
	$id_downtime = $downtime['id'];
	
	switch ($downtime['type_execution']) {
		case 'once':
			$values = array(
					'executed' => 0,
					'date_to' => time()
				);
			
			$result = db_process_sql_update('tplanned_downtime',
				$values, array ('id' => $id_downtime));
			break;
		case 'periodically':
			return false;
			break;
	}
	
	$message .= ui_print_result_message($result,
		__('Succesful stopped the Downtime'),
		__('Unsuccesful stopped the Downtime'),
		true);
	
	if ($result) {
		events_create_event ("Manual stop downtime  ".
			$downtime['name'] . " (" . $downtime['id'] . ") by " .
			$config['id_user'], 0, 0, EVENT_STATUS_NEW, $config["id_user"],
			"system", 1);
		db_pandora_audit("Planned Downtime management",
			"Manual stop downtime " . $downtime['name'] . " (ID " . $downtime['id'] . ")",
			false, true);
		
		//Reenabled the Agents or Modules or alerts...depends of type
		switch ($downtime['type_downtime']) {
			case 'quiet':
				$agents = db_get_all_rows_filter(
					'tplanned_downtime_agents',
					array('id_downtime' => $id_downtime));
				if (empty($agents))
					$agents = array();
				
				$count = 0;
				foreach ($agents as $agent) {
					if ($agent['all_modules']) {
						$result = db_process_sql_update('tagente',
							array('quiet' => 0),
							array('id_agente' => $agent['id_agent']));
						
						if ($result)
							$count++;
					}
					else {
						$modules = db_get_all_rows_filter(
							'tplanned_downtime_modules',
							array('id_agent' => $agent['id_agent'],
								'id_downtime' => $id_downtime));
						if (empty($modules))
							$modules = array();
						
						foreach ($modules as $module) {
							$result = db_process_sql_update(
								'tagente_modulo',
								array('quiet' => 0),
								array('id_agente_modulo' =>
									$module['id_agent_module']));
							
							if ($result)
								$count++;
						}
					}
				}
				break;
			case 'disable_agents':
				$agents = db_get_all_rows_filter(
					'tplanned_downtime_agents',
					array('id_downtime' => $id_downtime));
				if (empty($agents))
					$agents = array();
				
				$count = 0;
				foreach ($agents as $agent) {
					$result = db_process_sql_update('tagente',
						array('disabled' => 0),
						array('id_agente' => $agent['id_agent']));
					
					if ($result)
						$count++;
				}
				break;
			case 'disable_agents_alerts':
				$agents = db_get_all_rows_filter(
					'tplanned_downtime_agents',
					array('id_downtime' => $id_downtime));
				if (empty($agents))
					$agents = array();
				
				$count = 0;
				foreach ($agents as $agent) {
					$modules = db_get_all_rows_filter(
						'tagente_modulo',
						array('id_agente' => $agent['id_agent']));
					if (empty($modules))
						$modules = array();
					
					foreach ($modules as $module) {
						$result = db_process_sql_update(
							'talert_template_modules',
							array('disabled' => 0),
							array('id_agent_module' =>
								$module['id_agente_modulo']));
						
						if ($result)
							$count++;
					}
				}
				break;
		}
		
		$message .= ui_print_info_message(
			sprintf(__('Enabled %s elements from the downtime'), $count), true);
	}
	
	return array('result' => $result, 'message' => $message);
}

function planned_downtimes_created ($values) {
	global $config;
	
	$check = (bool) db_get_value ('name', 'tplanned_downtime', 'name', $values['name']);
	
	$datetime_from = strtotime ($values['once_date_from'] . ' ' . $values['once_time_from']);
	$datetime_to = strtotime ($values['once_date_to'] . ' ' . $values['once_time_to']);
	$now = time();
	$result = false;
	
	if ($values['type_execution'] == 'once' && !$config["past_planned_downtimes"] && $values['date_from'] < $now) {
		return array('return' => false,
			'message' => __('Not created. Error inserting data. Start time must be higher than the current time'));
	}
	else if ($values['type_execution'] == 'once' && $values['date_from'] >= $values['date_to']) {
		return array('return' => false,
			'message' => __('Not created. Error inserting data') . ". " 
				. __('The end date must be higher than the start date'));
	}
	else if ($values['type_execution'] == 'once' && $values['date_to'] <= $now) {
		return array('return' => false,
			'message' => __('Not created. Error inserting data') . ". " 
				. __('The end date must be higher than the current time'));
	}
	else if ($values['type_execution'] == 'periodically'
			&& (($values['type_periodicity'] == 'weekly' && $values['periodically_time_from'] >= $values['periodically_time_to'])
				|| ($values['type_periodicity'] == 'monthly' && $values['periodically_day_from'] == 
					$values['periodically_day_to'] && $values['periodically_time_from'] >= $values['periodically_time_to']))) {
		return array('return' => false,
			'message' => __('Not created. Error inserting data') . ". "
				. __('The end time must be higher than the start time'));
	}
	else if ($values['type_execution'] == 'periodically' && 
				$values['type_periodicity'] == 'monthly' &&
					$values['periodically_day_from'] > $values['periodically_day_to']) {
		return array('return' => false,
			'message' => __('Not created. Error inserting data') . ". "
				. __('The end day must be higher than the start day'));
	}
	else {
		if (trim(io_safe_output($values['name'])) != '') {
			if (!$check) {
				if ($config["dbtype"] == 'oracle') {
					$values['periodically_time_from'] = '1970/01/01 ' . $values['periodically_time_from'];
					$values['periodically_time_to'] = '1970/01/01 ' . $values['periodically_time_to'];
				}
				
				$result = db_process_sql_insert('tplanned_downtime', $values);
			}
			else {
				return array('return' => false,
					'message' => __('Each planned downtime must have a different name'));
			}
		}
		else {
			return array('return' => false,
				'message' => __('Planned downtime must have a name'));
		}
		
		if ($result === false) {
			return array('return' => false,
				'message' => __('Could not be created'));
		}
		else {
			return array('return' => $result,
				'message' => __('Successfully created'));
		}
	}
	
	return $return;
}


function all_planned_downtimes ($filter) {
	
	$fields = 'id, name, description, date_from, date_to, id_group, monday,
		tuesday, wednesday, thursday, friday, saturday, sunday,
		periodically_time_from, periodically_time_to, periodically_day_from, 
		periodically_day_to, type_downtime, type_execution, type_periodicity, id_user';
	
	$result = db_get_all_rows_filter('tplanned_downtime',$filter, $fields);
	
	return $result;
}

function planned_downtimes_items ($filter) {
	
	$downtime_agents = db_get_all_rows_filter('tplanned_downtime_agents',$filter, 'id_agent,id_downtime,all_modules');
	$downtime = db_get_row_filter('tplanned_downtime',array('id' => $filter['id_downtime']), 'type_downtime');
	
	foreach ( $downtime_agents as $key => $data ) {
		$return = $data;
		$modules = array();
		if ($downtime['type_downtime'] === 'quiet') {
			if (!$data['all_modules']) {
				$second_filter = array(
					'id_agent' => $data['id_agent'],
					'id_downtime' => $data['id_downtime']);
				
				$downtime_modules = db_get_all_rows_filter('tplanned_downtime_modules',$second_filter, 'id_agent_module');
				if ( $downtime_modules ) {
					foreach ( $downtime_modules as $data2 ) {
						$modules[] = $data2['id_agent_module'];
					}
					$return['modules'] = implode(',', $modules);
				}
			}
		}
	}
	
	return $return;
}

function delete_planned_downtimes ($filter) {
	
	
	$downtime_execute = db_get_row_filter('tplanned_downtime',array('id' => $filter['id_downtime']), 'execute');
	
	if ( $downtime_execute )
		$return = __("This planned downtime are executed now. Can't delete in this moment.");
	else {
		$delete = db_process_sql_delete ('tplanned_downtime',
					array('id'=>$filter['id_downtime']));
		if ($delete)
			$return = __("Deleted this planned downtime successfully.");
		else
			$return = __("Problems for deleted this planned downtime.");
	}
		
	return $return;
}
?>