diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 2293ac11d1..6d99e8b22e 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -287,9 +287,8 @@ function show_filter() { $("#load-filter-select").dialog({ resizable: true, draggable: true, - modal: true, - closeOnEscape: true, - open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } + modal: false, + closeOnEscape: true }); } @@ -487,12 +486,29 @@ if ($save_filter_modal) { ?> <script type="text/javascript"> function show_save_filter() { + $('#save_filter_row1').show(); + $('#save_filter_row2').show(); + $('#update_filter_row1').hide(); + // Filter save mode selector + $("[name='filter_mode']").click(function() { + if ($(this).val() == 'new') { + $('#save_filter_row1').show(); + $('#save_filter_row2').show(); + $('#submit-save_filter').show(); + $('#update_filter_row1').hide(); + } + else { + $('#save_filter_row1').hide(); + $('#save_filter_row2').hide(); + $('#update_filter_row1').show(); + $('#submit-save_filter').hide(); + } + }); $("#save-filter-select").dialog({ resizable: true, draggable: true, - modal: true, - closeOnEscape: true, - open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } + modal: false, + closeOnEscape: true }); } @@ -1110,7 +1126,7 @@ if ($get_extended_event) { $childrens_ids ))) ) { - $responses = events_page_responses($event, $childrens_ids); + $responses = events_page_responses($event); } else { $responses = ''; } @@ -1147,7 +1163,7 @@ if ($get_extended_event) { $general = events_page_general($event); - $comments = events_page_comments($event, $childrens_ids); + $comments = events_page_comments($event); $notifications = '<div id="notification_comment_error" style="display:none">'.ui_print_error_message(__('Error adding comment'), '', true).'</div>'; $notifications .= '<div id="notification_comment_success" style="display:none">'.ui_print_success_message(__('Comment added successfully'), '', true).'</div>'; diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index b9feaf5d40..effc674289 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -147,7 +147,7 @@ define('COL_UNKNOWN', '#B2B2B2'); define('COL_DOWNTIME', '#976DB1'); define('COL_IGNORED', '#DDD'); define('COL_ALERTFIRED', '#FFA631'); -define('COL_MINOR', '#F099A2'); +define('COL_MINOR', '#B2B2B2'); define('COL_MAJOR', '#C97A4A'); define('COL_INFORMATIONAL', '#E4E4E4'); define('COL_MAINTENANCE', '#4a83f3'); diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index 4fad541ee7..6055e0fdad 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -492,7 +492,7 @@ function events_get_all( if (isset($filter['id_agent']) && $filter['id_agent'] > 0) { $sql_filters[] = sprintf( - ' AND id_agente = %d ', + ' AND te.id_agente = %d ', $filter['id_agent'] ); } @@ -4249,34 +4249,49 @@ function events_page_general($event) /** * Generate 'comments' page for event viewer. * - * @param array $event Event. - * @param array $childrens_ids Children ids. + * @param array $event Event. * * @return string HTML. */ -function events_page_comments($event, $childrens_ids=[]) +function events_page_comments($event) { // Comments. global $config; + $comments = ''; + + $comments = $event['user_comment']; + if (isset($event['comments'])) { + $comments = $event['comments']; + } + $table_comments = new stdClass; $table_comments->width = '100%'; $table_comments->data = []; $table_comments->head = []; $table_comments->class = 'table_modal_alternate'; - $event_comments = $event['user_comment']; - $event_comments = str_replace(["\n", '
'], '<br>', $event_comments); + $comments = str_replace(["\n", '
'], '<br>', $comments); // If comments are not stored in json, the format is old. - $event_comments_array = json_decode($event_comments, true); - - // Show the comments more recent first. - if (is_array($event_comments_array)) { - $event_comments_array = array_reverse($event_comments_array); + $comments_array = json_decode(io_safe_output($comments), true); + if (json_last_error() != JSON_ERROR_NONE) { + $comments_array = [ + [ + 'comment' => 'Error retrieving comments', + 'action' => 'Internal message', + 'id_user' => 'SYSTEM', + 'utimestamp' => time(), + ], + ]; } - if (empty($event_comments_array)) { + // Show the comments more recent first. + if (is_array($comments_array)) { + $comments_array = array_reverse($comments_array); + } + + if (empty($comments_array)) { $comments_format = 'old'; } else { $comments_format = 'new'; @@ -4284,7 +4299,7 @@ function events_page_comments($event, $childrens_ids=[]) switch ($comments_format) { case 'new': - if (empty($event_comments_array)) { + if (empty($comments_array)) { $table_comments->style[0] = 'text-align:center;'; $table_comments->colspan[0][0] = 2; $data = []; @@ -4292,10 +4307,10 @@ function events_page_comments($event, $childrens_ids=[]) $table_comments->data[] = $data; } - if (isset($event_comments_array) === true - && is_array($event_comments_array) === true + if (isset($comments_array) === true + && is_array($comments_array) === true ) { - foreach ($event_comments_array as $c) { + foreach ($comments_array as $c) { $data[0] = '<b>'.$c['action'].' by '.$c['id_user'].'</b>'; $data[0] .= '<br><br><i>'.date($config['date_format'], $c['utimestamp']).'</i>'; $data[1] = $c['comment']; @@ -4305,7 +4320,7 @@ function events_page_comments($event, $childrens_ids=[]) break; case 'old': - $comments_array = explode('<br>', $event_comments); + $comments_array = explode('<br>', $comments); // Split comments and put in table. $col = 0; diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 4f3dd76663..dda9fa3f0e 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -3167,8 +3167,21 @@ function ui_print_datatable(array $parameters) type: "POST", dataSrc: function (json) { if (json.error) { - console.log(error); - alert(error); + console.log(json.error); + $("#error-'.$table_id.'").html(json.error); + $("#error-'.$table_id.'").dialog({ + title: "Filter failed", + width: 630, + resizable: true, + draggable: true, + modal: false, + closeOnEscape: true, + buttons: { + "Ok" : function () { + $(this).dialog("close"); + } + } + }).parent().addClass("ui-state-error"); } else {'; if (isset($parameters['ajax_postprocess'])) { $js .= ' diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js index a2180668f9..11ec207380 100644 --- a/pandora_console/include/javascript/pandora_events.js +++ b/pandora_console/include/javascript/pandora_events.js @@ -515,7 +515,7 @@ function event_change_owner() { } // Save a comment into an event -function event_comment() { +function event_comment(e) { var event_id = $("#hidden-id_event").val(); var comment = $("#textarea_comment").val(); var meta = $("#hidden-meta").val(); diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 0c7b604d3c..68c6553f26 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -115,76 +115,95 @@ if (is_ajax()) { $length = get_parameter('length', $config['block_size']); if ($get_events) { - $order = get_datatable_order(true); + try { + ob_start(); + $order = get_datatable_order(true); - $events = events_get_all( - [ - 'te.id_evento', - 'te.id_agente', - 'te.id_usuario', - 'te.id_grupo', - 'te.estado', - 'te.timestamp', - 'te.evento', - 'te.utimestamp', - 'te.event_type', - 'te.id_agentmodule', - 'te.id_alert_am', - 'te.criticity', - 'te.user_comment', - 'te.tags', - 'te.source', - 'te.id_extra', - 'te.critical_instructions', - 'te.warning_instructions', - 'te.unknown_instructions', - 'te.owner_user', - 'te.ack_utimestamp', - 'te.custom_data', - 'te.data', - 'te.module_status', - 'ta.alias as agent_name', - 'tg.nombre as group_name', - ], - $filter, - // Offset. - $start, - // Limit. - $length, - // Order. - $order['direction'], - // Sort field. - $order['field'] - ); - $count = events_get_all( - 'count', - $filter - ); + $events = events_get_all( + [ + 'te.id_evento', + 'te.id_agente', + 'te.id_usuario', + 'te.id_grupo', + 'te.estado', + 'te.timestamp', + 'te.evento', + 'te.utimestamp', + 'te.event_type', + 'te.id_agentmodule', + 'te.id_alert_am', + 'te.criticity', + 'te.user_comment', + 'te.tags', + 'te.source', + 'te.id_extra', + 'te.critical_instructions', + 'te.warning_instructions', + 'te.unknown_instructions', + 'te.owner_user', + 'te.ack_utimestamp', + 'te.custom_data', + 'te.data', + 'te.module_status', + 'ta.alias as agent_name', + 'tg.nombre as group_name', + ], + $filter, + // Offset. + $start, + // Limit. + $length, + // Order. + $order['direction'], + // Sort field. + $order['field'] + ); + $count = events_get_all( + 'count', + $filter + ); - if ($count !== false) { - $count = $count['0']['nitems']; - } + if ($count !== false) { + $count = $count['0']['nitems']; + } - if ($events) { - $data = array_reduce( - $events, - function ($carry, $item) { - $tmp = (object) $item; - $tmp->evento = io_safe_output($tmp->evento); - $carry[] = $tmp; - return $carry; - } + if ($events) { + $data = array_reduce( + $events, + function ($carry, $item) { + $tmp = (object) $item; + $tmp->evento = io_safe_output($tmp->evento); + $carry[] = $tmp; + return $carry; + } + ); + } + + // RecordsTotal && recordsfiltered resultados totales. + echo json_encode( + [ + 'data' => $data, + 'recordsTotal' => $count, + 'recordsFiltered' => $count, + ] + ); + $response = ob_get_clean(); + } catch (Exception $e) { + echo json_encode( + ['error' => $e->getMessage()] ); } - // RecordsTotal && recordsfiltered resultados totales. - echo json_encode( - [ - 'data' => $data, - 'recordsTotal' => $count, - 'recordsFiltered' => $count, - ] - ); + // If not valid it will throw an exception. + json_decode($response); + if (json_last_error() == JSON_ERROR_NONE) { + // If valid dump. + echo $response; + } else { + echo json_encode( + ['error' => $response] + ); + } } // AJAX section ends. @@ -1279,6 +1298,7 @@ html_print_input_hidden( echo "<div id='event_details_window'></div>"; echo "<div id='event_response_window'></div>"; echo "<div id='event_response_command_window' title='".__('Parameters')."'></div>"; +echo "<div id='error-".$table_id."'></div>"; // Load filter div for dialog. echo '<div id="load-modal-filter" style="display: none"></div>'; @@ -1422,7 +1442,7 @@ function process_datatables_item(item) { evn += '<div><a href="javascript:" onclick="show_event_dialog(\''; evn += btoa(JSON.stringify(item))+'\','+$("#group_rep").val()+');">'; // Grouped events. - if(item.event_rep) { + if(item.event_rep && item.event_rep > 1) { evn += '('+item.event_rep+') '; } evn += item.evento+'</a></div>';