pandorafms/pandora_console/mobile/operation/events.php

1231 lines
42 KiB
PHP

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2010 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 for 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.
class Events
{
private $correct_acl = false;
private $acl = 'ER';
private $default = true;
private $default_filters = [];
private $free_search = '';
private $hours_old = 8;
private $status = 3;
private $type = 'all';
private $severity = -1;
private $filter = 0;
private $group = 0;
private $id_agent = 0;
private $all_events = false;
private $columns = null;
private $readOnly = false;
function __construct()
{
$system = System::getInstance();
$this->columns = ['agent' => 1];
if ($system->checkACL($this->acl)) {
$this->correct_acl = true;
} else {
$this->correct_acl = false;
}
}
public function setReadOnly()
{
$this->readOnly = true;
}
public function ajax($parameter2=false)
{
$system = System::getInstance();
if (!$this->correct_acl) {
return;
} else {
switch ($parameter2) {
case 'get_events':
if ($system->getRequest('agent_events', '0') == 1) {
$this->disabledColumns(['agent']);
$filters = ['id_agent' => $system->getRequest('id_agent', 0)];
$this->setFilters($filters);
$this->setReadOnly();
$this->eventsGetFilters();
} else {
$this->eventsGetFilters();
}
$page = $system->getRequest('page', 0);
$system = System::getInstance();
$listEvents = $this->getListEvents($page);
$events_db = $listEvents['events'];
$total_events = $listEvents['total'];
$events = [];
$end = 1;
foreach ($events_db as $event) {
$end = 0;
switch ($event['estado']) {
case 0:
$img_st = 'images/star_white.png';
break;
case 1:
$img_st = 'images/tick_white.png';
break;
case 2:
$img_st = 'images/hourglass_white.png';
break;
}
if ($event['criticity'] == EVENT_CRIT_WARNING
|| $event['criticity'] == EVENT_CRIT_MAINTENANCE
|| $event['criticity'] == EVENT_CRIT_MINOR
) {
$img_st = str_replace('white.png', 'dark.png', $img_st);
}
$status_icon = html_print_image($img_st, true, false, false, false, false, true);
$row = [];
$row[] = '<b class="ui-table-cell-label">'.__('Event Name').'</b><a href="javascript: openDetails('.$event['id_evento'].')"><div class="event_name">'.io_safe_output(str_replace(['&nbsp;', '&#20;'], ' ', $event['evento'])).'</div></a>';
if ($event['id_agente'] == 0) {
$agent_name = __('System');
} else {
$agent_name = '<span class="nobold">'.ui_print_agent_name($event['id_agente'], true, 'agent_small', '', false, '', '', false, false).'</span>';
}
$row_1 = '<span class="events_agent">'.$agent_name.'</span>';
$row_1 .= '<span class="events_timestamp">'.ui_print_timestamp($event['timestamp_rep'], true, ['units' => 'tiny']).$status_icon.'</span>';
$row[] = $row_1;
$row[] = get_priority_class($event['criticity']);
$events[$event['id_evento']] = $row;
}
echo json_encode(['end' => $end, 'events' => $events]);
break;
case 'get_detail_event':
$system = System::getInstance();
$id_event = $system->getRequest('id_event', 0);
$meta = false;
if ($system->getConfig('metaconsole')) {
$meta = true;
}
$event = events_get_event($id_event, false, $meta);
if ($event) {
// Check if it is a event from module.
if ($event['id_agentmodule'] > 0) {
$event['module_graph_link'] = '<a data-ajax="false" href="index.php?page=module_graph&id='.$event['id_agentmodule'].'">'.html_print_image('images/chart_curve.png', true, ['style' => 'vertical-align: middle;'], false, false, false, true).'</a>';
} else {
$event['module_graph_link'] = '<i>'.__('N/A').'</i>';
}
if ($event['id_agente'] > 0) {
$event['agent'] = "<a style='color: black;'"."href='index.php?page=agent&id=".$event['id_agente']."'>".agents_get_alias($event['id_agente']).'</a>';
} else {
$event['agent'] = '<i>'.__('N/A').'</i>';
}
$event['evento'] = io_safe_output($event['evento']);
$event['clean_tags'] = events_clean_tags($event['tags']);
$event['timestamp'] = date($system->getConfig('date_format'), $event['utimestamp']);
if (empty($event['owner_user'])) {
$event['owner_user'] = '<i>'.__('N/A').'</i>';
} else {
$user_owner = db_get_value('fullname', 'tusuario', 'id_user', $event['owner_user']);
if (empty($user_owner)) {
$user_owner = $event['owner_user'];
}
$event['owner_user'] = $user_owner;
}
$event['event_type'] = events_print_type_description($event['event_type'], true);
$event['event_type'] .= ' ';
$event['event_type'] .= events_print_type_img($event['event_type'], true);
if (!isset($group_rep)) {
$group_rep = 0;
}
if ($group_rep != 0) {
if ($event['event_rep'] <= 1) {
$event['event_repeated'] = '<i>'.__('No').'</i>';
} else {
$event['event_repeated'] = sprintf('%d Times', $event['event_rep']);
}
} else {
$event['event_repeated'] = '<i>'.__('No').'</i>';
}
$event_criticity = get_priority_name($event['criticity']);
switch ($event['criticity']) {
default:
case 0:
$img_sev = 'images/status_sets/default/severity_maintenance.png';
break;
case 1:
$img_sev = 'images/status_sets/default/severity_informational.png';
break;
case 2:
$img_sev = 'images/status_sets/default/severity_normal.png';
break;
case 3:
$img_sev = 'images/status_sets/default/severity_warning.png';
break;
case 4:
$img_sev = 'images/status_sets/default/severity_critical.png';
break;
case 5:
$img_sev = 'images/status_sets/default/severity_minor.png';
break;
case 6:
$img_sev = 'images/status_sets/default/severity_major.png';
break;
}
$event['criticity'] = ' '.$event_criticity;
$event['criticity'] .= html_print_image(
$img_sev,
true,
[
'class' => 'image_status',
'width' => 12,
'height' => 12,
'title' => $event_criticity,
],
false,
false,
false,
true
);
if ($event['estado'] == 1) {
$user_ack = db_get_value('fullname', 'tusuario', 'id_user', $event['id_usuario']);
if (empty($user_ack)) {
$user_ack = $event['id_usuario'];
}
$date_ack = date($system->getConfig('date_format'), $event['ack_utimestamp']);
$event['acknowledged_by'] = $user_ack.' ('.$date_ack.')';
} else {
$event['acknowledged_by'] = '<i>'.__('N/A').'</i>';
}
// Get Status
switch ($event['estado']) {
case 0:
$img_st = 'images/star_dark.png';
$title_st = __('New event');
break;
case 1:
$img_st = 'images/tick.png';
$title_st = __('Event validated');
break;
case 2:
$img_st = 'images/hourglass.png';
$title_st = __('Event in process');
break;
}
$event['status'] = $title_st;
$event['status'] .= ' ';
$event['status'] .= html_print_image($img_st, true, false, false, false, false, true);
$event['group'] = groups_get_name($event['id_grupo'], true);
$event['group'] .= ui_print_group_icon($event['id_grupo'], true);
$event['tags'] = tags_get_tags_formatted($event['tags']);
if (empty($event['tags'])) {
$event['tags'] = '<i>'.__('N/A').'</i>';
}
$event_comments = db_get_value('user_comment', 'tevento', 'id_evento', $id_event);
$event_comments_array = [];
$event_comments_array = json_decode($event_comments, true);
// Support for new format only.
if (empty($event_comments_array)) {
$comment = '<i>'.__('N/A').'</i>';
} else {
$comment = '';
$event_comments_array = array_reverse($event_comments_array);
foreach ($event_comments_array as $c) {
$comment .= date($system->getConfig('date_format'), $c['utimestamp']).' ('.$c['id_user'].')';
$c['comment'] = io_safe_output($c['comment']);
$c['comment'] = str_replace("\n", '<br>', $c['comment']);
$comment .= '<br>'.$c['comment'].'<br>';
}
}
$event['comments'] = $comment;
echo json_encode(['correct' => 1, 'event' => $event]);
} else {
echo json_encode(['correct' => 0, 'event' => []]);
}
break;
case 'validate_event':
$system = System::getInstance();
$id_event = $system->getRequest('id_event', 0);
if (events_change_status($id_event, EVENT_VALIDATE, $system->getConfig('metaconsole'))) {
echo json_encode(['correct' => 1]);
} else {
echo json_encode(['correct' => 0]);
}
break;
}
}
}
public function disabledColumns($columns=null)
{
if (!empty($columns)) {
foreach ($columns as $column) {
$this->columns[$column] = 1;
}
}
}
private function eventsGetFilters()
{
$system = System::getInstance();
$user = User::getInstance();
$this->default_filters['severity'] = true;
$this->default_filters['group'] = true;
$this->default_filters['type'] = true;
$this->default_filters['status'] = true;
$this->default_filters['free_search'] = true;
$this->default_filters['hours_old'] = true;
$this->hours_old = $system->getRequest('hours_old', 8);
if ($this->hours_old != 8) {
$this->default = false;
$this->default_filters['hours_old'] = false;
}
$this->free_search = $system->getRequest('free_search', '');
if ($this->free_search != '') {
$this->default = false;
$this->default_filters['free_search'] = false;
}
$this->status = $system->getRequest('status', __('Status'));
if (($this->status === __('Status')) || ($this->status == 3)) {
$this->status = 3;
} else {
$this->status = (int) $this->status;
$this->default = false;
$this->default_filters['status'] = false;
}
$this->type = $system->getRequest('type', __('Type'));
if ($this->type === __('Type')) {
$this->type = 'all';
} else {
$this->default = false;
$this->default_filters['type'] = false;
}
$this->group = $system->getRequest('group', __('Group'));
if (!$user->isInGroup($this->acl, $this->group)) {
$this->group = 0;
}
if (($this->group === __('Group')) || ($this->group == 0)) {
$this->group = 0;
} else {
$this->default = false;
$this->default_filters['group'] = false;
}
$this->severity = $system->getRequest('severity', __('Severity'));
if ($this->severity === __('Severity')) {
$this->severity = -1;
} else {
$this->default = false;
$this->default_filters['severity'] = false;
}
if ($system->getRequest('filter', __('Preset Filters')) === __('Preset Filters')) {
// Set filter as default user event filter (only first time)
$this->filter = db_get_value('default_event_filter', 'tusuario', 'id_user', $system->getConfig('id_user'));
// Use user set default filter if admin set default filter is "none"
if ($this->filter == 0) {
$this->filter = db_get_value('id_filter', 'tusuario', 'id_user', $system->getConfig('id_user'));
}
} else {
$this->filter = $system->getRequest('filter', __('Preset Filters'));
}
if ($this->filter != 0) {
$this->default = false;
}
// The user set a preset filter
if ($this->filter > 0) {
$this->loadPresetFilter();
}
$this->limit = $system->getRequest('limit', -1);
}
public function setFilters($filters)
{
if (isset($filters['id_agent'])) {
$this->id_agent = $filters['id_agent'];
}
if (isset($filters['all_events'])) {
$this->all_events = $filters['all_events'];
}
}
private function loadPresetFilter()
{
$filter = db_get_row('tevent_filter', 'id_filter', $this->filter);
$this->free_search = $filter['search'];
$this->hours_old = $filter['event_view_hr'];
$this->status = $filter['status'];
$this->type = $filter['event_type'];
$this->severity = $filter['severity'];
}
public function show()
{
if (!$this->correct_acl) {
$this->show_fail_acl();
} else {
$this->eventsGetFilters();
$this->show_events();
}
}
private function show_fail_acl()
{
$error['type'] = 'onStart';
$error['title_text'] = __('You don\'t have access to this page');
$error['content_text'] = System::getDefaultACLFailText();
if (class_exists('HomeEnterprise')) {
$home = new HomeEnterprise();
} else {
$home = new Home();
}
$home->show($error);
}
public function get_event_dialog_error_options($options)
{
$options['type'] = 'hidden';
$options['dialog_id'] = 'detail_event_dialog_error';
$options['title_text'] = __('ERROR: Event detail');
$options['content_text'] = '<span style="color: #ff0000;">'.__('Error connecting to DB.').'</span>';
return $options;
}
public function get_event_dialog_options()
{
$ui = Ui::getInstance();
$options['type'] = 'hidden';
$options['dialog_id'] = 'detail_event_dialog';
$options['title_close_button'] = true;
$options['title_text'] = __('Event detail');
// Content
ob_start();
?>
<table class="pandora_responsive alternate event_details">
<tbody>
<tr class="event_name">
<td class="cell_event_name" colspan="2"></td>
</tr>
<tr class="event_id">
<th><?php echo __('Event ID'); ?></th>
<td class="cell_event_id"></td>
</tr>
<tr class="event_timestamp">
<th><?php echo __('Timestamp'); ?></th>
<td class="cell_event_timestamp"></td>
</tr>
<tr class="event_owner">
<th><?php echo __('Owner'); ?></th>
<td class="cell_event_owner"></td>
</tr>
<tr class="event_type">
<th><?php echo __('Type'); ?></th>
<td class="cell_event_type"></td>
</tr>
<tr class="event_repeated">
<th><?php echo __('Repeated'); ?></th>
<td class="cell_event_repeated"></td>
</tr>
<tr class="event_severity">
<th><?php echo __('Severity'); ?></th>
<td class="cell_event_severity"></td>
</tr>
<tr class="event_status">
<th><?php echo __('Status'); ?></th>
<td class="cell_event_status"></td>
</tr>
<tr class="event_acknowledged_by">
<th><?php echo __('Acknowledged by'); ?></th>
<td class="cell_event_acknowledged_by"></td>
</tr>
<tr class="event_group">
<th><?php echo __('Group'); ?></th>
<td class="cell_event_group"></td>
</tr>
</tr>
<tr class="event_module_graph">
<th><?php echo __('Module Graph'); ?></th>
<td class="cell_module_graph"></td>
</tr>
<tr class="event_agent">
<th><?php echo __('Agent'); ?></th>
<td class="cell_agent"></td>
</tr>
<tr class="event_tags">
<th><?php echo __('Tags'); ?></th>
<td class="cell_event_tags"></td>
</tr>
<tr class="event_comments">
<th><?php echo __('Comments'); ?></th>
<td class="cell_event_comments"></td>
</tr>
</tbody>
</table>
<?php
$options['content_text'] = ob_get_clean();
$options_button = [
'text' => __('Validate'),
'id' => 'validate_button',
'href' => 'javascript: validateEvent();',
];
$options['content_text'] .= $ui->createButton($options_button);
$options_hidden = [
'id' => 'event_id',
'value' => 0,
'type' => 'hidden',
];
$options['content_text'] .= $ui->getInput($options_hidden);
$options['content_text'] .= '<div id="validate_button_loading" style="display: none; text-align: center;">
<img src="images/ajax-loader.gif" /></div>';
$options['content_text'] .= '<div id="validate_button_correct" style="display: none; text-align: center;">
<h3>'.__('Sucessful validate').'</h3></div>';
$options['content_text'] .= '<div id="validate_button_fail" style="display: none; text-align: center;">
<h3 style="color: #ff0000;">'.__('Fail validate').'</h3></div>';
$options['button_close'] = false;
return $options;
}
private function show_events()
{
$ui = Ui::getInstance();
$ui->createPage();
$options = $this->get_event_dialog_options();
$ui->addDialog($options);
$options = $this->get_event_dialog_error_options($options);
$ui->addDialog($options);
$ui->createDefaultHeader(
__('Events'),
$ui->createHeaderButton(
[
'icon' => 'back',
'pos' => 'left',
'text' => __('Back'),
'href' => 'index.php?page=home',
]
)
);
$ui->showFooter(false);
$ui->beginContent();
$ui->contentAddHtml("<a id='detail_event_dialog_hook' href='#detail_event_dialog' style='display:none;'>detail_event_hook</a>");
$ui->contentAddHtml("<a id='detail_event_dialog_error_hook' href='#detail_event_dialog_error' style='display:none;'>detail_event_dialog_error_hook</a>");
$filter_title = sprintf(__('Filter Events by %s'), $this->filterEventsGetString());
$ui->contentBeginCollapsible($filter_title);
$ui->beginForm('index.php?page=events');
/*
$options = array(
'name' => 'page',
'type' => 'hidden',
'value' => 'events'
);
$ui->formAddInput($options);*/
$items = db_get_all_rows_in_table('tevent_filter');
$items[] = [
'id_filter' => 0,
'id_name' => __('None'),
];
$options = [
'name' => 'filter',
'title' => __('Preset Filters'),
'label' => __('Preset Filters'),
'items' => $items,
'item_id' => 'id_filter',
'item_value' => 'id_name',
'selected' => $this->filter,
];
$ui->formAddSelectBox($options);
$system = System::getInstance();
$groups = users_get_groups_for_select(
$system->getConfig('id_user'),
'ER',
true,
true,
false,
'id_grupo'
);
$options = [
'name' => 'group',
'title' => __('Group'),
'label' => __('Group'),
'items' => $groups,
'selected' => $this->group,
];
$ui->formAddSelectBox($options);
$options = [
'name' => 'status',
'title' => __('Status'),
'label' => __('Status'),
'items' => events_get_all_status(),
'selected' => $this->status,
];
$ui->formAddSelectBox($options);
$options = [
'name' => 'type',
'title' => __('Type'),
'label' => __('Type'),
'items' => array_merge(['all' => __('All')], get_event_types()),
'selected' => $this->type,
];
$ui->formAddSelectBox($options);
$options = [
'name' => 'severity',
'title' => __('Severity'),
'label' => __('Severity'),
'items' => (['-1' => __('All')] + get_priorities()),
'selected' => $this->severity,
];
$ui->formAddSelectBox($options);
$options = [
'name' => 'free_search',
'value' => $this->free_search,
'placeholder' => __('Free search'),
];
$ui->formAddInputSearch($options);
$options = [
'label' => __('Max. hours old'),
'name' => 'hours_old',
'value' => $this->hours_old,
'min' => 0,
'max' => (24 * 7),
'step' => 8,
];
$ui->formAddSlider($options);
$options = [
'icon' => 'refresh',
'icon_pos' => 'right',
'text' => __('Apply Filter'),
];
$ui->formAddSubmitButton($options);
$html = $ui->getEndForm();
$ui->contentCollapsibleAddItem($html);
$ui->contentEndCollapsible();
$this->listEventsHtml();
$ui->endContent();
$ui->showPage();
}
private function getListEvents($page=0)
{
$system = System::getInstance();
// --------------Fill the SQL POST-------------------------------
$sql_post = ' WHERE 1=1 ';
switch ($this->status) {
case 0:
case 1:
case 2:
$sql_post .= ' AND estado = '.$this->status;
break;
case 3:
$sql_post .= ' AND (estado = 0 OR estado = 2)';
break;
}
if ($this->free_search != '') {
$sql_post .= " AND evento LIKE '%".io_safe_input($this->free_search)."%'";
}
if ($this->severity != -1) {
switch ($this->severity) {
case EVENT_CRIT_WARNING_OR_CRITICAL:
$sql_post .= ' AND (criticity = '.EVENT_CRIT_WARNING.' OR
criticity = '.EVENT_CRIT_CRITICAL.')';
break;
case EVENT_CRIT_NOT_NORMAL:
$sql_post .= ' AND criticity != '.EVENT_CRIT_NORMAL;
break;
default:
$sql_post .= ' AND criticity = '.$this->severity;
break;
}
}
if ($this->hours_old > 0) {
$unixtime = (get_system_time() - ($this->hours_old * SECONDS_1HOUR));
$sql_post .= ' AND (utimestamp > '.$unixtime.')';
}
if ($this->type != '') {
// If normal, warning, could be several (going_up_warning, going_down_warning... too complex
// for the user so for him is presented only "warning, critical and normal"
if ($this->type == 'warning' || $this->type == 'critical'
|| $this->type == 'normal'
) {
$sql_post .= " AND event_type LIKE '%".$this->type."%' ";
} else if ($this->type == 'not_normal') {
$sql_post .= " AND event_type LIKE '%warning%' OR event_type LIKE '%critical%' OR event_type LIKE '%unknown%' ";
} else if ($this->type != 'all') {
$sql_post .= " AND event_type = '".$this->type."'";
}
}
$system = System::getInstance();
$groups = users_get_groups($system->getConfig('id_user'), 'ER');
// Group selection
if ($this->group > 0 && in_array($this->group, array_keys($groups))) {
// If a group is selected and it's in the groups allowed
$sql_post .= ' AND id_grupo = '.$this->group;
} else {
if (is_user_admin($system->getConfig('id_user'))) {
// Do nothing if you're admin, you get full access
$sql_post .= '';
} else {
// Otherwise select all groups the user has rights to.
$sql_post .= ' AND id_grupo IN ('.implode(',', array_keys($groups)).')';
}
}
if ($this->id_agent > 0) {
$sql_post .= ' AND id_agente = '.$this->id_agent;
}
// Skip system messages if user is not PM
if (!check_acl($system->getConfig('id_user'), 0, 'PM')) {
$sql_post .= ' AND id_grupo != 0';
}
// --------------------------------------------------------------
if (isset($this->limit) && $this->limit != -1) {
$offset = 0;
$pagination = $this->limit;
} else {
$offset = ($page * $system->getPageSize());
$pagination = $system->getPageSize();
}
$meta = false;
if ($system->getConfig('metaconsole')) {
$meta = true;
}
$events_db = events_get_events_grouped(
$sql_post,
$offset,
$pagination,
$meta,
false
);
if (empty($events_db)) {
$events_db = [];
}
$total_events = events_get_total_events_grouped($sql_post, $meta);
return [
'events' => $events_db,
'total' => $total_events,
];
}
public function listEventsHtml($page=0, $return=false, $id_table='list_events')
{
$system = System::getInstance();
$ui = Ui::getInstance();
// Create an empty table to be filled from ajax
$table = new Table();
$table->id = $id_table;
$no_events = '<p id="empty_advice_events" class="empty_advice" style="display: none;">'.__('No events').'</p>';
if (!$return) {
$ui->contentAddHtml($table->getHTML());
$ui->contentAddHtml(
'<div id="loading_rows">'.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'</div>'.$no_events
);
$this->addJavascriptAddBottom();
$this->addJavascriptDialog();
} else {
$this->addJavascriptAddBottom();
return ['table' => $table->getHTML().$no_events];
}
$ui->contentAddLinkListener('list_events');
}
public function putEventsTableJS($id_agent)
{
return '<script type="text/javascript">
ajax_load_latest_agent_events('.$id_agent.', 10);
</script>';
}
public function addJavascriptDialog()
{
$ui = Ui::getInstance();
$ui->contentAddHtml(
'
<script type="text/javascript">
function openDetails(id_event) {
$.mobile.showPageLoadingMsg();
postvars = {};
postvars["action"] = "ajax";
postvars["parameter1"] = "events";
postvars["parameter2"] = "get_detail_event";
postvars["id_event"] = id_event;
$.ajax ({
type: "POST",
url: "index.php",
dataType: "json",
data: postvars,
success:
function (data) {
if (data.correct) {
event = data.event;
//Fill the dialog
$("#detail_event_dialog h1.dialog_title")
.html(event["evento"]);
$("#detail_event_dialog .cell_event_name")
.html(event["evento"]);
$("#detail_event_dialog .cell_event_id")
.html(id_event);
$("#detail_event_dialog .cell_event_timestamp")
.html(event["timestamp"]);
$("#detail_event_dialog .cell_event_owner")
.html(event["owner_user"]);
$("#detail_event_dialog .cell_event_type")
.html(event["event_type"]);
$("#detail_event_dialog .cell_event_repeated")
.html(event["event_repeated"]);
$("#detail_event_dialog .cell_event_severity")
.html(event["criticity"]);
$("#detail_event_dialog .cell_event_status")
.html(event["status"]);
$("#detail_event_dialog .cell_event_acknowledged_by")
.html(event["acknowledged_by"]);
$("#detail_event_dialog .cell_event_group")
.html(event["group"]);
$("#detail_event_dialog .cell_event_tags")
.html(event["tags"]);
$("#detail_event_dialog .cell_event_comments")
.html(event["comments"]);
$("#detail_event_dialog .cell_agent")
.html(event["agent"]);
//The link to module graph
$(".cell_module_graph").html(event["module_graph_link"]);
$("#event_id").val(id_event);
if (event["estado"] != 1) {
$("#validate_button").show();
}
else {
//The event is validated.
$("#validate_button").hide();
}
$("#validate_button_loading").hide();
$("#validate_button_fail").hide();
$("#validate_button_correct").hide();
$.mobile.hidePageLoadingMsg();
$("#detail_event_dialog_hook").click();
}
else {
$.mobile.hidePageLoadingMsg();
$("#detail_event_dialog_error_hook").click();
}
},
error:
function (jqXHR, textStatus, errorThrown) {
$.mobile.hidePageLoadingMsg();
$("#detail_event_dialog_error_hook").click();
}
});
}
function validateEvent() {
id_event = $("#event_id").val();
$("#validate_button").hide();
$("#validate_button_loading").show();
//Hide the button to close
$("#detail_event_dialog div.ui-header a.ui-btn-right")
.hide();
postvars = {};
postvars["action"] = "ajax";
postvars["parameter1"] = "events";
postvars["parameter2"] = "validate_event";
postvars["id_event"] = id_event;
$.ajax ({
type: "POST",
url: "index.php",
dataType: "json",
data: postvars,
success:
function (data) {
$("#validate_button_loading").hide();
if (data.correct) {
$("#validate_button_correct").show();
}
else {
$("#validate_button_fail").show();
}
$("#detail_event_dialog div.ui-header a.ui-btn-right")
.show();
},
error:
function (jqXHR, textStatus, errorThrown) {
$("#validate_button_loading").hide();
$("#validate_button_fail").show();
$("#detail_event_dialog div.ui-header a.ui-btn-right")
.show();
}
});
}
</script>'
);
}
private function addJavascriptAddBottom()
{
$ui = Ui::getInstance();
$ui->contentAddHtml(
"<script type=\"text/javascript\">
var load_more_rows = 1;
var page = 0;
function add_rows(data, table_id) {
if (data.end) {
$(\"#loading_rows\").hide();
}
else {
var new_rows = \"\";
$.each(data.events, function(key, event) {
new_rows = \"<tr class='events \" + event[2] + \"'>\" +
\"<td class='cell_0' style='vertical-align:middle;'>\" +
event[0] +
\"</td>\" +
\"<td style='vertical-align:middle;'>\" + event[1] + \"</td>\" +
\"</tr>\" + new_rows;
});
$(\"table#\"+table_id+\" tbody\").append(new_rows);
load_more_rows = 1;
refresh_link_listener_list_events();
}
}
function ajax_load_rows() {
if (load_more_rows) {
load_more_rows = 0;
postvars = {};
postvars[\"action\"] = \"ajax\";
postvars[\"parameter1\"] = \"events\";
postvars[\"parameter2\"] = \"get_events\";
postvars[\"filter\"] = $(\"select[name='filter']\").val();
postvars[\"group\"] = $(\"select[name='group']\").val();
postvars[\"status\"] = $(\"select[name='status']\").val();
postvars[\"type\"] = $(\"select[name='type']\").val();
postvars[\"severity\"] = $(\"select[name='severity']\").val();
postvars[\"free_search\"] = $(\"input[name='free_search']\").val();
postvars[\"hours_old\"] = $(\"input[name='hours_old']\").val();
postvars[\"page\"] = page;
page++;
$.post(\"index.php\",
postvars,
function (data) {
add_rows(data, 'list_events');
if($('#list_events').offset() != undefined) {
//For large screens load the new events
//Check if the end of the event list tables is in the client limits
var table_end = $('#list_events').offset().top + $('#list_events').height();
if (table_end < document.documentElement.clientHeight) {
ajax_load_rows();
}
}
if (data.events.length == 0 && page == 1) {
$('#empty_advice_events').show();
}
},
\"json\");
}
}
function ajax_load_latest_agent_events(id_agent, limit) {
postvars = {};
postvars[\"action\"] = \"ajax\";
postvars[\"parameter1\"] = \"events\";
postvars[\"parameter2\"] = \"get_events\";
postvars[\"agent_events\"] = \"1\";
postvars[\"id_agent\"] = id_agent;
postvars[\"limit\"] = limit;
$.post(\"index.php\",
postvars,
function (data) {
add_rows(data, 'last_agent_events');
if (data.events.length == 0) {
$('#last_agent_events').css('visibility', 'hidden');
$('#empty_advice_events').show();
}
},
\"json\");
}
$(document).ready(function() {
ajax_load_rows();
$(window).bind(\"scroll\", function () {
custom_scroll();
});
$(window).on(\"touchmove\", function(event) {
custom_scroll();
});
});
function custom_scroll() {
if ($(this).scrollTop() + $(this).height()
>= ($(document).height() - 100)) {
ajax_load_rows();
}
}
</script>"
);
}
private function filterEventsGetString()
{
global $system;
if ($this->default) {
return __('(Default)');
} else {
if ($this->filter) {
$filter = db_get_row('tevent_filter', 'id_filter', $this->filter);
return sprintf(__('Filter: %s'), $filter['id_name']);
} else {
$filters_to_serialize = [];
if ($this->severity == -1) {
$severity = __('All');
} else {
$severity = get_priorities($this->severity);
}
if (!$this->default_filters['severity']) {
$filters_to_serialize[] = sprintf(
__('Severity: %s'),
$severity
);
}
if (!$this->default_filters['group']) {
$groups = users_get_groups_for_select(
$system->getConfig('id_user'),
'ER',
true,
true,
false,
'id_grupo'
);
$filters_to_serialize[] = sprintf(
__('Group: %s'),
$groups[$this->group]
);
}
if ($this->type == 'all') {
$type = __('All');
} else {
$type = get_event_types($this->type);
}
if (!$this->default_filters['type']) {
$filters_to_serialize[] = sprintf(
__('Type: %s'),
$type
);
}
if (!$this->default_filters['status']) {
$filters_to_serialize[] = sprintf(
__('Status: %s'),
events_get_status($this->status)
);
}
if (!$this->default_filters['free_search']) {
$filters_to_serialize[] = sprintf(
__('Free search: %s'),
$this->free_search
);
}
if (!$this->default_filters['hours_old']) {
$filters_to_serialize[] = sprintf(
__('Hours: %s'),
$this->hours_old
);
}
$string = '('.implode(' - ', $filters_to_serialize).')';
return $string;
}
}
}
}