1<?php
2
3// Pandora FMS - http://pandorafms.com
4// ==================================================
5// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas
6// Please see http://pandorafms.org for full contribution list
7
8// This program is free software; you can redistribute it and/or
9// modify it under the terms of the GNU General Public License
10// as published by the Free Software Foundation for version 2.
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16require_once ('include/functions_events.php');
17require_once ('include/functions_agents.php');
18require_once ('include/functions_ui.php');
19require_once ('include/functions_db.php');
20require_once ('include/functions_io.php');
21require_once ('include/functions.php');
22enterprise_include_once ('meta/include/functions_events_meta.php');
23enterprise_include_once ('include/functions_metaconsole.php');
24
25$get_events_details = (bool) get_parameter ('get_events_details');
26$get_extended_event = (bool) get_parameter ('get_extended_event');
27$change_status = (bool) get_parameter ('change_status');
28$change_owner = (bool) get_parameter ('change_owner');
29$add_comment = (bool) get_parameter ('add_comment');
30$dialogue_event_response = (bool) get_parameter ('dialogue_event_response');
31$perform_event_response = (bool) get_parameter ('perform_event_response');
32$get_response = (bool) get_parameter ('get_response');
33$get_response_target = (bool) get_parameter ('get_response_target');
34$get_response_params = (bool) get_parameter ('get_response_params');
35$get_response_description = (bool) get_parameter ('get_response_description');
36$get_event_name = (bool) get_parameter ('get_event_name');
37$meta = get_parameter ('meta', 0);
38$history = get_parameter ('history', 0);
39$table_events = get_parameter('table_events', 0);
40
41if ($get_event_name) {
42	$event_id = get_parameter ('event_id');
43
44	if ($meta) {
45		$name = events_meta_get_event_name($event_id, $history);
46	}
47	else {
48		$name = db_get_value('evento','tevento','id_evento',$event_id);
49	}
50
51	if ($name === false) {
52		return;
53	}
54
55	ui_print_truncate_text(io_safe_output($name), 75, false, false, false, '...');
56
57	return;
58}
59
60if ($get_response_description) {
61	$response_id = get_parameter ('response_id');
62
63	$description = db_get_value('description','tevent_response','id',$response_id);
64
65	if ($description === false) {
66		return;
67	}
68
69	$description = io_safe_output($description);
70	$description = str_replace("\r\n", '<br>', $description);
71
72	echo $description;
73
74	return;
75}
76
77if ($get_response_params) {
78	$response_id = get_parameter ('response_id');
79
80	$params = db_get_value('params','tevent_response','id',$response_id);
81
82	if ($params === false) {
83		return;
84	}
85
86	echo json_encode(explode(',',$params));
87
88	return;
89}
90
91if ($get_response_target) {
92	$response_id = get_parameter ('response_id');
93	$event_id = get_parameter ('event_id');
94	$server_id = get_parameter ('server_id', 0);
95
96	$event_response = db_get_row('tevent_response','id',$response_id);
97
98	if (empty($event_response)) {
99		return;
100	}
101
102	echo events_get_response_target($event_id, $response_id, $server_id);
103
104	return;
105}
106
107if ($get_response) {
108	$response_id = get_parameter ('response_id');
109
110	$event_response = db_get_row('tevent_response','id',$response_id);
111
112	if (empty($event_response)) {
113		return;
114	}
115
116	echo json_encode($event_response);
117	return;
118}
119
120if ($perform_event_response) {
121	global $config;
122
123	$command = get_parameter('target','');
124
125	switch (PHP_OS) {
126		case "DragonFly":
127		case "FreeBSD":
128			$timeout_bin = '/usr/local/bin/gtimeout';
129			break;
130		case "NetBSD":
131			$timeout_bin = '/usr/pkg/bin/gtimeout';
132			break;
133		default:
134			$timeout_bin = '/usr/bin/timeout';
135			break;
136	}
137	echo system($timeout_bin . ' 9 '.io_safe_output($command).' 2>&1');
138
139	return;
140}
141
142if ($dialogue_event_response) {
143	global $config;
144
145	$event_id = get_parameter ('event_id');
146	$response_id = get_parameter ('response_id');
147	$command = get_parameter ('target');
148
149	$event_response = db_get_row('tevent_response','id',$response_id);
150
151	$event = db_get_row('tevento','id_evento',$event_id);
152
153	$prompt = "<br>> ";
154
155	switch($event_response['type']) {
156		case 'command':
157			echo "<div style='text-align:left'>";
158			echo $prompt.sprintf(__('Executing command: %s',$command));
159			echo "</div><br>";
160
161			echo "<div id='response_loading_command' style='display:none'>".html_print_image('images/spinner.gif', true)."</div>";
162			echo "<br><div id='response_out' style='text-align:left'></div>";
163
164			echo "<br><div id='re_exec_command' style='display:none;'>";
165			html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\');', "class='sub next'");
166			echo "</div>";
167			break;
168		case 'url':
169			$command = str_replace("localhost",$_SERVER['SERVER_NAME'],$command);
170			echo "<iframe src='$command' id='divframe' style='width:100%;height:90%;'></iframe>";
171			break;
172	}
173}
174
175if ($add_comment) {
176	$comment = get_parameter ('comment');
177	$event_id = get_parameter ('event_id');
178
179	$return = events_comment ($event_id, $comment, 'Added comment', $meta, $history);
180
181	if ($return)
182		echo 'comment_ok';
183	else
184		echo 'comment_error';
185
186	return;
187}
188
189if ($change_status) {
190	$event_ids = get_parameter ('event_ids');
191	$new_status = get_parameter ('new_status');
192
193	$return = events_change_status (explode(',',$event_ids), $new_status, $meta, $history);
194
195	if ($return)
196		echo 'status_ok';
197	else
198		echo 'status_error';
199
200	return;
201}
202
203if ($change_owner) {
204	$new_owner = get_parameter ('new_owner');
205	$event_id = get_parameter ('event_id');
206	$similars = true;
207
208	if ($new_owner == -1) {
209		$new_owner = '';
210	}
211
212	$return = events_change_owner($event_id, $new_owner, true, $meta, $history);
213
214	if ($return)
215		echo 'owner_ok';
216	else
217		echo 'owner_error';
218
219	return;
220}
221
222if ($get_extended_event) {
223	global $config;
224
225	$event_id = get_parameter('event_id',false);
226	$childrens_ids = get_parameter('childrens_ids');
227	$childrens_ids = json_decode($childrens_ids);
228
229	if ($meta) {
230		$event = events_meta_get_event($event_id, false, $history, "ER");
231	}
232	else {
233		$event = events_get_event($event_id);
234	}
235
236	$readonly = false;
237	if (!$meta &&
238		isset($config['event_replication']) &&
239		$config['event_replication'] == 1 &&
240		$config['show_events_in_local'] == 1) {
241			$readonly = true;
242	}
243
244	// Clean url from events and store in array
245	$event['clean_tags'] = events_clean_tags($event['tags']);
246
247	// If the event is not found, we abort
248	if (empty($event)) {
249		ui_print_error_message('Event not found');
250		return false;
251	}
252
253	$dialog_page = get_parameter('dialog_page','general');
254	$similar_ids = get_parameter('similar_ids', $event_id);
255	$group_rep = get_parameter('group_rep',false);
256	$event_rep = get_parameter('event_rep',1);
257	$timestamp_first = get_parameter('timestamp_first', $event['utimestamp']);
258	$timestamp_last = get_parameter('timestamp_last', $event['utimestamp']);
259	$server_id = get_parameter('server_id', 0);
260
261	$event['similar_ids'] = $similar_ids;
262	$event['timestamp_first'] = $timestamp_first;
263	$event['timestamp_last'] = $timestamp_last;
264	$event['event_rep'] = $event_rep;
265
266	// Check ACLs
267	if (is_user_admin ($config["id_user"])) {
268		//Do nothing if you're admin, you get full access
269	}
270	else if ($config["id_user"] == $event['owner_user']) {
271		//Do nothing if you're the owner user, you get access
272	}
273	else if ($event['id_grupo'] == 0) {
274		//If the event has access to all groups, you get access
275	}
276	else {
277		// Get your groups
278		$groups = users_get_groups($config['id_user'], 'ER');
279
280		if (in_array ($event['id_grupo'], array_keys ($groups))) {
281			//If the event group is among the groups of the user, you get access
282		}
283		else {
284			// If all the access types fail, abort
285			echo 'Access denied';
286			return false;
287		}
288	}
289
290	// Print group_rep in a hidden field to recover it from javascript
291	html_print_input_hidden('group_rep',(int)$group_rep);
292
293	if ($event === false) {
294		return;
295	}
296
297	// Tabs
298	$tabs = "<ul style='background:#ffffff !important; border-top: 0px; border-left: 0px; border-right: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; border-color: #D3D3D3;'>";
299	$tabs .= "<li><a href='#extended_event_general_page' id='link_general'>".html_print_image('images/lightning_go.png',true).__('General')."</a></li>";
300	$tabs .= "<li><a href='#extended_event_details_page' id='link_details'>".html_print_image('images/zoom.png',true).__('Details')."</a></li>";
301	$tabs .= "<li><a href='#extended_event_custom_fields_page' id='link_custom_fields'>".html_print_image('images/custom_field_col.png',true).__('Agent fields')."</a></li>";
302	$tabs .= "<li><a href='#extended_event_comments_page' id='link_comments'>".html_print_image('images/pencil.png',true).__('Comments')."</a></li>";
303
304	if (!$readonly &&
305		(tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids)) || (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'],$childrens_ids))) {
306		$tabs .= "<li><a href='#extended_event_responses_page' id='link_responses'>".html_print_image('images/event_responses_col.png',true).__('Responses')."</a></li>";
307	}
308	if ($event['custom_data'] != '') {
309		$tabs .= "<li><a href='#extended_event_custom_data_page' id='link_custom_data'>".html_print_image('images/custom_field_col.png',true).__('Custom data')."</a></li>";
310	}
311	$tabs .= "</ul>";
312
313	// Get criticity image
314	switch ($event["criticity"]) {
315		default:
316		case 0:
317			$img_sev = "images/status_sets/default/severity_maintenance.png";
318			break;
319		case 1:
320			$img_sev = "images/status_sets/default/severity_informational.png";
321			break;
322		case 2:
323			$img_sev = "images/status_sets/default/severity_normal.png";
324			break;
325		case 3:
326			$img_sev = "images/status_sets/default/severity_warning.png";
327			break;
328		case 4:
329			$img_sev = "images/status_sets/default/severity_critical.png";
330			break;
331		case 5:
332			$img_sev = "images/status_sets/default/severity_minor.png";
333			break;
334		case 6:
335			$img_sev = "images/status_sets/default/severity_major.png";
336			break;
337	}
338
339	if (!$readonly &&
340	(tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids)) || (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'],$childrens_ids))) {
341		$responses = events_page_responses($event, $childrens_ids);
342	}
343	else {
344		$responses = '';
345	}
346
347	$console_url = '';
348	// If metaconsole switch to node to get details and custom fields
349	if ($meta) {
350		$server = metaconsole_get_connection_by_id ($server_id);
351		metaconsole_connect($server);
352	}
353	else {
354		$server = "";
355	}
356
357	$details = events_page_details($event, $server);
358
359	// Juanma (09/05/2014) Fix: Needs to reconnect to node, in previous funct node connection was lost
360	if ($meta) {
361		$server = metaconsole_get_connection_by_id ($server_id);
362			metaconsole_connect($server);
363	}
364
365	$custom_fields = events_page_custom_fields($event);
366
367	$custom_data = events_page_custom_data($event);
368
369	if ($meta) {
370		metaconsole_restore_db_force();
371	}
372
373	$general = events_page_general($event);
374
375	$comments = events_page_comments($event, $childrens_ids);
376
377	$notifications = '<div id="notification_comment_error" style="display:none">'.ui_print_error_message(__('Error adding comment'),'',true).'</div>';
378	$notifications .= '<div id="notification_comment_success" style="display:none">'.ui_print_success_message(__('Comment added successfully'),'',true).'</div>';
379	$notifications .= '<div id="notification_status_error" style="display:none">'.ui_print_error_message(__('Error changing event status'),'',true).'</div>';
380	$notifications .= '<div id="notification_status_success" style="display:none">'.ui_print_success_message(__('Event status changed successfully'),'',true).'</div>';
381	$notifications .= '<div id="notification_owner_error" style="display:none">'.ui_print_error_message(__('Error changing event owner'),'',true).'</div>';
382	$notifications .= '<div id="notification_owner_success" style="display:none">'.ui_print_success_message(__('Event owner changed successfully'),'',true).'</div>';
383
384	$loading = '<div id="response_loading" style="display:none">'.html_print_image('images/spinner.gif',true).'</div>';
385
386	$out = '<div id="tabs" style="height:95%; overflow: auto">'.
387				$tabs.
388				$notifications.
389				$loading.
390				$general.
391				$details.
392				$custom_fields.
393				$comments.
394				$responses.
395				$custom_data.
396				html_print_input_hidden('id_event',$event['id_evento']).
397			'</div>';
398
399	$js = '<script>
400	$(function() {
401		$tabs = $( "#tabs" ).tabs({
402		});
403		';
404
405	// Load the required tab
406	switch ($dialog_page) {
407		case "general":
408			$js .= '$tabs.tabs( "option", "active", 0);';
409			break;
410		case "details":
411			$js .= '$tabs.tabs( "option", "active", 1);';
412			break;
413		case "custom_fields":
414			$js .= '$tabs.tabs( "option", "active", 2);';
415			break;
416		case "comments":
417			$js .= '$tabs.tabs( "option", "active", 3);';
418			break;
419		case "responses":
420			$js .= '$tabs.tabs( "option", "active", 4);';
421			break;
422		case "custom_data":
423			$js .= '$tabs.tabs( "option", "active", 5);';
424			break;
425	}
426
427	$js .= '
428	});
429	</script>';
430
431	echo $out.$js;
432}
433
434if ($get_events_details) {
435	$event_ids = explode(',',get_parameter ('event_ids'));
436	$events = db_get_all_rows_filter ('tevento',
437		array ('id_evento' => $event_ids,
438			'order' => 'utimestamp ASC'),
439			array ('evento', 'utimestamp', 'estado', 'criticity', 'id_usuario'));
440
441	$out = '<table class="eventtable" style="width:100%;height:100%;padding:0px 0px 0px 0px; border-spacing: 0px; margin: 0px 0px 0px 0px;">';
442	$out .= '<tr style="font-size:0px; heigth: 0px; background: #ccc;"><td></td><td></td></tr>';
443	foreach ($events as $event) {
444		switch ($event["estado"]) {
445			case 0:
446				$img = ui_get_full_url("images/star.png", false, false, false);
447				$title = __('New event');
448				break;
449			case 1:
450				$img = ui_get_full_url("images/tick.png", false, false, false);
451				$title = __('Event validated');
452				break;
453			case 2:
454				$img = ui_get_full_url("images/hourglass.png", false, false, false);
455				$title = __('Event in process');
456				break;
457		}
458
459		$out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="height: 25px;">';
460		$out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt" colspan=2>';
461		$out .= io_safe_output($event['evento']);
462		$out .= '</td></tr>';
463
464		$out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="font-size:0px; height: 25px;">';
465		$out .= '<td class="'.get_priority_class ($event['criticity']).'" style="width: 18px; text-align:center;">';
466		$out .= html_print_image(ui_get_full_url('images/clock.png', false, false, false), true, array('title' => __('Timestamp')), false, true);
467
468		$out .= '</td>';
469		$out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt">';
470		$out .= date($config['date_format'], $event['utimestamp']);
471		$out .= '</td></tr>';
472
473		$out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="font-size:0px; height: 25px;">';
474		$out .= '<td class="'.get_priority_class ($event['criticity']).'" style="width: 18px; text-align:center;">';
475		$out .= html_print_image($img, true, array('title' => $title), false, true);
476		$out .= '</td>';
477		$out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt">';
478		$out .= $title;
479		if ($event["estado"] == 1) {
480			if (empty($event['id_usuario'])) {
481				$ack_user = '<i>' . __('Auto') . '</i>';
482			}
483			else {
484				$ack_user = $event['id_usuario'];
485			}
486
487			$out .= ' (' . $ack_user . ')';
488		}
489
490		$out .= '</td></tr>';
491
492		$out .= '<tr style="font-size:0px; heigth: 0px; background: #999;"><td></td><td>';
493		$out .= '</td></tr><tr style="font-size:0px; heigth: 0px; background: #ccc;"><td></td><td>';
494		$out .= '</td></tr>';
495	}
496	$out .= '</table>';
497
498	echo $out;
499}
500
501if ($table_events) {
502	require_once ("include/functions_events.php");
503	require_once ("include/functions_graph.php");
504
505	$id_agente = (int)get_parameter('id_agente', 0);
506
507	// Fix: for tag functionality groups have to be all user_groups (propagate ACL funct!)
508	$groups = users_get_groups($config["id_user"]);
509
510	$tags_condition = tags_get_acl_tags($config['id_user'],
511		array_keys($groups), 'ER', 'event_condition', 'AND');
512
513	events_print_event_table ("estado <> 1 $tags_condition", 10, '100%',
514		false, $id_agente,true);
515}
516?>
517