<?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 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.

global $config;

// Login check
check_login ();

require_once("include/functions_reporting.php");
require_once("include/functions_events.php");

if (is_ajax()) {
	
	$save_item_shorcut  = (bool) get_parameter("save_item_shorcut");
	$update_shortcut_state = (bool) get_parameter('update_shortcut_state');
	$get_alerts_fired = (bool) get_parameter('get_alerts_fired');
	$get_critical_events = (bool) get_parameter('get_critical_events');
	$get_opened_incidents = (bool) get_parameter('get_opened_incidents');
	
	if ($save_item_shorcut) {
		$result = false;
		$data = get_parameter("data", '');
		$id_user = get_parameter('id_user', 0);
		
		if ($config['id_user'] != $id_user) return;
		
		$shortcut_data = db_get_value('shortcut_data', 'tusuario', 'id_user', $id_user);
		if ($shortcut_data !== false) {
			$serialize = $shortcut_data;
			$unserialize = json_decode($serialize, true);
			
			$unserialize['item_shorcut'][] = $data;
			$shortcut_data = array();
			$shortcut_data['shortcut_data'] = json_encode($unserialize);
			
			db_process_sql_update('tusuario', $shortcut_data, array('id_user' => $id_user));
		}

		echo json_encode($result);
		return;
	}
	
	// Update if shortcut is visible or hidden
	if ($update_shortcut_state) {
		$value = (int) get_parameter('value');
		$result = db_process_sql_update('tusuario', array('shortcut' => $value), array('id_user' => $config['id_user']));

		echo json_encode($result);
		return;
	}

	// Get critical events (realtime update)
	if ($get_alerts_fired){
		echo sc_get_alerts_fired();
		return;
	}
	
	// Get critical events (realtime update)
	if ($get_critical_events){
		echo sc_get_critical_events();
		return;
	}
	
	// Select only opened incidents
	if ($get_opened_incidents) {
		echo sc_get_opened_incidents();
		return;
	}
	
	return;
}

function sc_get_alerts_fired () {
	global $config;

	$data_reporting = reporting_get_group_stats();

	return $data_reporting['monitor_alerts_fired'];
}

function sc_get_critical_events () {
	global $config;

	$own_info = get_user_info ($config['id_user']);
	
	if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM"))
		$own_groups = array_keys(users_get_groups($config['id_user'], "IR"));
	else
		$own_groups = array_keys(users_get_groups($config['id_user'], "IR", false));
	
	// Get events in the last 8 hours
	$shortcut_events_update = events_get_group_events($own_groups, 28800, time());
	if ($shortcut_events_update == false)
		$shortcut_events_update = array();
	
	$critical_events_update = 0;
	foreach($shortcut_events_update as $event_update){
		if ($event_update['criticity'] == 4 and $event_update['estado'] == 0) {
			$critical_events_update++;
		}
	}

	return $critical_events_update;
}

function sc_get_opened_incidents () {
	global $config;

	$own_info = get_user_info ($config['id_user']);
	
	if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM")) {
		$sql = "SELECT count(*) total_incidents
				FROM tincidencia
				WHERE estado = 0 
				ORDER BY actualizacion";
		$result_incidents_update = db_get_all_rows_sql ($sql);
	}
	else {
		$own_groups = array_keys(users_get_groups($config['id_user'], "IR", false));
		$sql = "SELECT count(*) total_incidents
				FROM tincidencia
				WHERE id_grupo IN (".implode (",",array_keys ($own_groups)).")
					AND estado = 0
				ORDER BY actualizacion";
		if (!empty($own_groups)) {
			$result_incidents_update = db_get_all_rows_sql($sql);
		}
		else {
			$result_incidents_update = false;
		}
	}
	
	if ($result_incidents_update === false)
		$shortcut_incidents = 0;
	else 
		$shortcut_incidents = $result_incidents_update[0]['total_incidents'];

	return $shortcut_incidents;
}


$shortcut_state = db_get_value_filter('shortcut', 'tusuario', array('id_user' => $config['id_user']));

// If shortcut bar is disabled return to index.php
if ($shortcut_state == 0)
	return;

$own_info = get_user_info ($config['id_user']);

$shortcut_html = "<div id='shortcut_container'>";
$shortcut_html .= "<div id='shortcut_button'>";
$shortcut_html .= html_print_image("images/control_play.png", true, array("title" => __("Press here to activate shortcut bar")));
$shortcut_html .= "</div>";
$shortcut_html .= "<div id='shortcut_bar'>";

$num_shortcut_items = 0;

// Alerts item
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM") || check_acl ($config['id_user'], 0, "AR")) {
	$alerts_fired = sc_get_alerts_fired();

	$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=120&filter=fired&filter_button=Filter'>";
	$shortcut_html .= html_print_image("images/op_alerts.png", true, array("title" => __("Alerts fired"), "style" => "margin-bottom: 0px;"));
	$shortcut_html .= "&nbsp;";
	$shortcut_html .= "<span id='shortcut_alerts_fired' title='" . __('Alerts fired') . "'>" . $alerts_fired . "</span>";
	$shortcut_html .= "</a>";

	$num_shortcut_items++;
}

// Events item
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM") || check_acl ($config['id_user'], 0, "IR")) {	
	$critical_events = sc_get_critical_events();

	$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=eventos&sec2=operation/events/events&status=3&severity=4&event_view_hr=8&id_group=0&group_rep=1&filter_only_alert=-1'>";
	$shortcut_html .= html_print_image("images/op_events.png", true, array("title" => __("Critical events"), "style" => "margin-bottom: 0px;"));
	$shortcut_html .= "&nbsp;";
	$shortcut_html .= "<span id='shortcut_critical_events' title='" . __('Critical events') . "'>" . $critical_events . "</span>";
	$shortcut_html .= "</a>";

	$num_shortcut_items++;
}

// Calculate opened incidents (id integria incidents are not enabled)
if ($config['integria_enabled'] == 0) {
	$shortcut_incidents = sc_get_opened_incidents();
	
	$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=incidencias&sec2=operation/incidents/incident&estado=0'>";
	$shortcut_html .= html_print_image("images/book_edit.png", true, array("title" => __("Incidents opened"),  "style" => "margin-bottom: 0px;"));
	$shortcut_html .= "&nbsp;";
	$shortcut_html .= "<span id='shortcut_incidents_opened' title='" . __('Incidents opened') . "'>" . $shortcut_incidents . "</span>";
	$shortcut_html .= "</a>";

	$num_shortcut_items++;
}

if ($num_shortcut_items > 0) {
	$shortcut_html .= "<span class='shortcut_item' href='javascript:;'>";
	$shortcut_html .= "<span>|</span>";
	$shortcut_html .= "</span>";
}

$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=reporting&sec2=operation/reporting/custom_reporting'>";
$shortcut_html .= html_print_image("images/op_reporting.png", true, array("title" => __("View reports"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "</a>";
$num_shortcut_items++;

$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=workspace&sec2=operation/messages/message_list'>";
$shortcut_html .= html_print_image("images/email_mc.png", true, array("title" => __("Create new message"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "</a>";
$num_shortcut_items++;

//Quick access
// $shortcut_data = db_get_value('shortcut_data', 'tusuario', 'id_user', $config['id_user']);
// if (!empty($shortcut_data)) {
// 	$serialize = $shortcut_data;
// 	$unserialize = json_decode($serialize, true);
	
// 	$items = $unserialize['item_shorcut'];
// }
// else {
// 	$items = array();
// }
// $shortcut_html .= "<div id='shortcut_icons_box' style='font-size: 9pt; color:#696969; font-weight: bold; display: inline; float: right; padding-right: 20px;'>" . 
// 	__("Shortcut: ");
// $shortcut_html .= "<ul style='display: inline; font-size: 9pt; color:#000;'>";
// foreach ($items as $item) {
// 	$shortcut_html .= "<li style='display: inline; padding-right: 10px;'>" . io_safe_output($item) . "</li>";
// }
// $shortcut_html .= "</ul>";

$shortcut_html .= "</div>";
$shortcut_html .= "</div>";

echo $shortcut_html;

// Login in Console and shortcut bar is disabled
// This will show and hide the shortcut value in Javascript code
if (isset($_POST['nick']) and $shortcut_state != 2) {
	html_print_input_hidden("login_console", 1);
}
else {
	html_print_input_hidden("login_console", 0);
}

html_print_input_hidden("shortcut_id_user", $config['id_user']);

?>

<script type='text/javascript'>
	$(function() {
		
		if (<?php echo json_encode((int) $shortcut_state); ?> < 2) {
			$('#shortcut_bar').hide();
			
			$('#shortcut_button>img')
				.css('transform', 'rotate(-90deg)')
				.css('-o-transform', 'rotate(-90deg)')
				.css('-ms-transform', 'rotate(-90deg)')
				.css('-moz-transform', 'rotate(-90deg)')
				.css('-webkit-transform', 'rotate(-90deg)');
		}
		else {
			$('#shortcut_button>img')
				.css('transform', 'rotate(90deg)')
				.css('-o-transform', 'rotate(90deg)')
				.css('-ms-transform', 'rotate(90deg)')
				.css('-moz-transform', 'rotate(90deg)')
				.css('-webkit-transform', 'rotate(90deg)');
		}
		
		
		$('#shortcut_button').click (function () {
			if ($('#shortcut_bar').is(":visible")) {
				$('#shortcut_bar').slideUp();

				$('#shortcut_button>img')
					.css('transform', 'rotate(-90deg)')
					.css('-o-transform', 'rotate(-90deg)')
					.css('-ms-transform', 'rotate(-90deg)')
					.css('-moz-transform', 'rotate(-90deg)')
					.css('-webkit-transform', 'rotate(-90deg)');

				jQuery.post (
					"ajax.php",
					{
						"page" : "general/shortcut_bar",
						"update_shortcut_state" : 1,
						"value" : 1
					},
					function (data) {}
				);
			}
			else {
				$('#shortcut_bar').slideDown();

				$('#shortcut_button>img')
					.css('transform', 'rotate(90deg)')
					.css('-o-transform', 'rotate(90deg)')
					.css('-ms-transform', 'rotate(90deg)')
					.css('-moz-transform', 'rotate(90deg)')
					.css('-webkit-transform', 'rotate(90deg)');

				jQuery.post (
					"ajax.php",
					{
						"page" : "general/shortcut_bar",
						"update_shortcut_state" : 1,
						"value" : 2
					},
					function (data) {}
				);
			}
		});
	});
	
	var id_user = $('#hidden-shortcut_id_user').val();

	function shortcut_check_alerts() {
		jQuery.post (
			"ajax.php",
			{
				"page" : "general/shortcut_bar",
				"get_alerts_fired": 1
			},
			function (data) {
				$('#shortcut_alerts_fired').html(data);
			}
		);
	}
	
	function shortcut_check_events() {
		jQuery.post (
			"ajax.php",
			{
				"page" : "general/shortcut_bar",
				"get_critical_events": 1
			},
			function (data) {
				$('#shortcut_critical_events').html(data);
			}
		);
	}
	
	function shortcut_check_incidents() {
		jQuery.post (
			"ajax.php",
			{
				"page" : "general/shortcut_bar",
				"get_opened_incidents": 1
			},
			function (data) {
				$('#shortcut_incidents_opened').html(data);
			}
		);
	}
	
	$(document).ready (function () {
		setInterval("shortcut_check_alerts()", (10 * 1000)); //10 seconds between ajax request
		setInterval("shortcut_check_events()", (10 * 1000)); //10 seconds between ajax request
		setInterval("shortcut_check_incidents()", (10 * 1000)); //10 seconds between ajax request
		
		//To make a link as item for drag only put "item_drag_shortcut" as class.
		
		//TODO: In the future show better as icons and the handle some icon.
		//TODO: Remove the class "item_drag_shortcut" for avoid drag.
		//TODO: Method for remove items.
		
		$("#shortcut_icons_box").droppable({
			drop: function( event, ui ) {
				var item = ui.draggable.clone();
				//unescape for avoid change returns 
				var content_item = unescape($('<div id="content_item"></div>').html(item).html()); //hack
				
				//Add the element
				$("<li style='display: inline; padding-right: 10px;'></li>").html(item).appendTo($("#shortcut_icons_box > ul"));
				
				jQuery.post ('ajax.php', 
					{"page": "general/shortcut_bar",
					"save_item_shorcut": 1,
					"id_user": "<?php echo $config['id_user'];?>",
					"data": content_item
					},
					function (data) {
					}
				);
			}
		});
		
		$(".item_drag_shortcut").draggable({
			appendTo: 'body',
			helper: "clone",
			scroll: false
		});
	});	
</script>