'noaccess']; } include 'general/noaccess.php'; return; } $access = ($event_a == true) ? 'ER' : (($event_w == true) ? 'EW' : (($event_m == true) ? 'EM' : 'ER')); $readonly = false; if (is_metaconsole() === false && isset($config['event_replication']) && $config['event_replication'] == 1 && $config['show_events_in_local'] == 1 ) { $readonly = true; } // Load specific stylesheet. ui_require_css_file('events'); ui_require_css_file('tables'); if (is_metaconsole() === true) { ui_require_css_file('tables_meta', ENTERPRISE_DIR.'/include/styles/'); } // Load extra javascript. ui_require_javascript_file('pandora_events'); // Get requests. $default_filter = [ 'status' => EVENT_NO_VALIDATED, 'event_view_hr' => $config['event_view_hr'], 'group_rep' => 1, 'tag_with' => [], 'tag_without' => [], 'history' => false, ]; $fb64 = get_parameter('fb64', null); if (isset($fb64)) { $filter = json_decode(base64_decode($fb64), true); $filter['tag_with'] = []; $filter['tag_without'] = []; } else { $filter = get_parameter( 'filter', $default_filter ); } $id_group = get_parameter( 'filter[id_group]', ($filter['id_group'] ?? '') ); $event_type = get_parameter( 'filter[event_type]', ($filter['event_type'] ?? '') ); $severity = get_parameter( 'filter[severity]', ($filter['severity'] ?? '') ); $status = get_parameter( 'filter[status]', ($filter['status'] ?? '') ); $search = get_parameter( 'filter[search]', ($filter['search'] ?? '') ); $text_agent = get_parameter( 'filter[text_agent]', ($filter['text_agent'] ?? '') ); $id_agent = get_parameter( 'filter[id_agent]', ($filter['id_agent'] ?? '') ); $text_module = get_parameter( 'filter[module_search]', ($filter['module_search'] ?? '') ); $id_agent_module = get_parameter( 'id_agent_module', get_parameter( 'filter[id_agent_module]', ($filter['id_agent_module'] ?? '') ) ); $pagination = get_parameter( 'filter[pagination]', ($filter['pagination'] ?? '') ); $event_view_hr = get_parameter( 'filter[event_view_hr]', ($filter['event_view_hr'] ?? '') ); $id_user_ack = get_parameter( 'filter[id_user_ack]', ($filter['id_user_ack'] ?? '') ); $group_rep = get_parameter( 'filter[group_rep]', ($filter['group_rep'] ?? '') ); $tag_with = get_parameter( 'filter[tag_with]', ($filter['tag_with'] ?? '') ); $tag_without = get_parameter( 'filter[tag_without]', ($filter['tag_without'] ?? '') ); $filter_only_alert = get_parameter( 'filter[filter_only_alert]', ($filter['filter_only_alert'] ?? '') ); $id_group_filter = get_parameter( 'filter[id_group_filter]', ($filter['id_group_filter'] ?? '') ); $date_from = get_parameter( 'filter[date_from]', ($filter['date_from'] ?? '') ); $date_to = get_parameter( 'filter[date_to]', ($filter['date_to'] ?? '') ); $time_from = get_parameter( 'filter[time_from]', ($filter['time_from'] ?? '') ); $time_to = get_parameter( 'filter[time_to]', ($filter['time_to'] ?? '') ); $source = get_parameter( 'filter[source]', ($filter['source'] ?? '') ); $id_extra = get_parameter( 'filter[id_extra]', ($filter['id_extra'] ?? '') ); $user_comment = get_parameter( 'filter[user_comment]', ($filter['user_comment'] ?? '') ); $history = get_parameter( 'history', ($filter['history'] ?? '') ); $section = get_parameter('section', false); $id_source_event = get_parameter( 'filter[id_source_event]', ($filter['id_source_event'] ?? '') ); $server_id = get_parameter( 'filter[server_id]', ($filter['id_server_meta'] ?? 0) ); $custom_data_filter_type = get_parameter( 'filter[custom_data_filter_type]', ($filter['custom_data_filter_type'] ?? '') ); $custom_data = get_parameter( 'filter[custom_data]', ($filter['custom_data'] ?? '') ); if (is_metaconsole() === true) { // Connect to node database. $id_node = $server_id; if ($id_node != 0) { if (metaconsole_connect(null, $id_node) != NOERR) { return false; } } } if (empty($text_agent) && empty($id_agent) === false) { $text_agent = agents_get_alias($id_agent); } if (empty($text_module) && empty($id_agent_module) === false) { $text_module = modules_get_agentmodule_name($id_agent_module); $text_agent = agents_get_alias(modules_get_agentmodule_agent($id_agent_module)); } if (is_metaconsole() === true) { // Return to metaconsole database. if ($id_node != 0) { metaconsole_restore_db(); } } // Ajax responses. if (is_ajax() === true) { $get_events = get_parameter('get_events', 0); // Datatables offset, limit. $start = get_parameter('start', 0); $length = get_parameter('length', $config['block_size']); if ($get_events) { try { ob_start(); $fields = [ '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_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', 'if(te.ack_utimestamp > 0, from_unixtime(te.ack_utimestamp),"") as ack_utimestamp', 'te.custom_data', 'te.data', 'te.module_status', 'ta.alias as agent_name', 'tg.nombre as group_name', 'ta.direccion', ]; $order = get_datatable_order(true); if (is_array($order) === true && $order['field'] === 'mini_severity') { $order['field'] = 'te.criticity'; } // Find the order field and set the table and field name. foreach ($fields as $field) { if (str_contains($field, $order['field']) === true) { $order['field'] = $field; break; } } $fields[] = 'am.nombre as module_name'; $fields[] = 'am.id_agente_modulo as id_agentmodule'; $fields[] = 'am.custom_id as module_custom_id'; $fields[] = 'ta.server_name as server_name'; $events = events_get_all( // Fields. $fields, // Filter. $filter, // Offset. $start, // Limit. $length, // Order. $order['direction'], // Sort field. $order['field'], // History. $history ); // $count = events_get_all( // 'count', // $filter, // null, // null, // null, // null, // $history // ); // // if ($count !== false) { // $count = $count['0']['nitems']; // } $count = count($events); if ($events) { $data = array_reduce( $events, function ($carry, $item) { global $config; $tmp = (object) $item; // $tmp->meta = is_metaconsole(); //// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps // if ($tmp->meta === true) { // if ($tmp->server_name !== null) { // $tmp->data_server = metaconsole_get_servers($tmp->server_id); // $tmp->server_url_hash = metaconsole_get_servers_url_hash($tmp->data_server); // } // } $tmp->evento = str_replace('"', '', io_safe_output($tmp->evento)); if (strlen($tmp->evento) >= 255) { $tmp->evento = ui_print_truncate_text($tmp->evento, 255, $tmp->evento, true, false); } if ($tmp->module_name) { $tmp->module_name = io_safe_output($tmp->module_name); } if ($tmp->comments) { $tmp->comments = ui_print_comments($tmp->comments); } // Show last event. if (isset($tmp->max_id_evento) && $tmp->max_id_evento !== $tmp->id_evento) { $max_event = db_get_row_sql( sprintf( 'SELECT criticity, timestamp FROM %s WHERE id_evento = %s', ($tmp->meta === true) ? 'tmetaconsole_event' : 'tevento', $tmp->max_id_evento ) ); $tmp->timestamp = $max_event['timestamp']; $tmp->criticity = $max_event['criticity']; } $tmp->agent_name = io_safe_output($tmp->agent_name); $tmp->ack_utimestamp_raw = strtotime($tmp->ack_utimestamp); $tmp->ack_utimestamp = ui_print_timestamp( $tmp->ack_utimestamp, true ); $tmp->timestamp = ui_print_timestamp( $tmp->timestamp, true ); if (is_numeric($tmp->data) === true) { $tmp->data = format_numeric( $tmp->data, $config['graph_precision'] ); } else { $tmp->data = ui_print_truncate_text($tmp->data, 10); } $tmp->instructions = events_get_instructions($item); $tmp->b64 = base64_encode(json_encode($tmp)); $carry[] = $tmp; return $carry; } ); } // RecordsTotal && recordsfiltered resultados totales. echo json_encode( [ 'data' => ($data ?? []), 'recordsTotal' => $count, 'recordsFiltered' => $count, ] ); $response = ob_get_clean(); // Clean output buffer. while (ob_get_level() !== 0) { ob_end_clean(); } } catch (Exception $e) { echo json_encode( ['error' => $e->getMessage()] ); } // 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. exit; } /* * Load user default form. */ $load_filter_id = (int) get_parameter('filter_id', 0); if ($load_filter_id === 0) { // Load user filter. $loaded_filter = db_get_row_sql( sprintf( 'SELECT f.id_filter, f.id_name FROM tevent_filter f INNER JOIN tusuario u ON u.default_event_filter=f.id_filter WHERE u.id_user = "%s" ', $config['id_user'] ) ); } else { // Load filter selected by user. $loaded_filter['id_filter'] = $load_filter_id; $loaded_filter['id_name'] = db_get_value( 'id_name', 'tevent_filter', 'id_filter', $load_filter_id ); } // Do not load the user filter if we come from the 24h event graph. $from_event_graph = get_parameter('filter[from_event_graph]', ($filter['from_event_graph'] ?? '')); if ($loaded_filter !== false && $from_event_graph != 1 && !isset($fb64)) { $filter = events_get_event_filter($loaded_filter['id_filter']); if ($filter !== false) { $id_group = $filter['id_group']; $event_type = $filter['event_type']; $severity = $filter['severity']; $status = $filter['status']; $search = $filter['search']; $text_agent = $filter['text_agent']; $id_agent = $filter['id_agent']; $id_agent_module = $filter['id_agent_module']; $text_module = io_safe_output( db_get_value_filter( 'nombre', 'tagente_modulo', ['id_agente_modulo' => $filter['id_agent_module']] ) ); $pagination = $filter['pagination']; $event_view_hr = $filter['event_view_hr']; $id_user_ack = $filter['id_user_ack']; $group_rep = $filter['group_rep']; $tag_with = json_decode(io_safe_output($filter['tag_with'])); $tag_without = json_decode(io_safe_output($filter['tag_without'])); $tag_with_base64 = base64_encode(json_encode($tag_with)); $tag_without_base64 = base64_encode(json_encode($tag_without)); $filter_only_alert = $filter['filter_only_alert']; $id_group_filter = $filter['id_group_filter']; $date_from = $filter['date_from']; $time_from = $filter['time_from']; $date_to = $filter['date_to']; $time_to = $filter['time_to']; $source = $filter['source']; $id_extra = $filter['id_extra']; $user_comment = $filter['user_comment']; $id_source_event = ($filter['id_source_event'] ?? ''); $server_id = $filter['server_id']; $custom_data = $filter['custom_data']; $custom_data_filter_type = $filter['custom_data_filter_type']; } } // TAGS. // Get the tags where the user have permissions in Events reading tasks. $tags = tags_get_user_tags($config['id_user'], $access); $tags_select_with = []; $tags_select_without = []; $tag_with_temp = []; $tag_without_temp = []; if (is_array($tag_with) === false) { $tag_with = json_decode(base64_decode($tag_with), true); } if (is_array($tag_without) === false) { $tag_without = json_decode(base64_decode($tag_without), true); } foreach ((array) $tags as $id_tag => $tag) { if (is_array($tag_with) === true && ((array_search($id_tag, $tag_with) === false) || (array_search($id_tag, $tag_with) === null)) ) { $tags_select_with[$id_tag] = ui_print_truncate_text($tag, 50, true); } else { $tag_with_temp[$id_tag] = ui_print_truncate_text($tag, 50, true); } if (is_array($tag_without) === true && ((array_search($id_tag, $tag_without) === false) || (array_search($id_tag, $tag_without) === null)) ) { $tags_select_without[$id_tag] = ui_print_truncate_text($tag, 50, true); } else { $tag_without_temp[$id_tag] = ui_print_truncate_text($tag, 50, true); } } $add_with_tag_disabled = empty($tags_select_with); $remove_with_tag_disabled = empty($tag_with_temp); $add_without_tag_disabled = empty($tags_select_without); $remove_without_tag_disabled = empty($tag_without_temp); $tabletags_with = html_get_predefined_table('transparent', 2); $tabletags_with->id = 'filter_events_tags_with'; $tabletags_with->width = '100%'; $tabletags_with->cellspacing = 4; $tabletags_with->cellpadding = 4; $tabletags_with->class = 'noshadow'; $tabletags_with->styleTable = 'border: 0px;'; if (is_metaconsole() === true) { $tabletags_with->class = 'nobady'; $tabletags_with->cellspacing = 0; $tabletags_with->cellpadding = 0; } $data = []; $data[0] = html_print_select( $tags_select_with, 'select_with', '', '', '', 0, true, true, true, '', false, 'width: 200px;' ); $data[1] = html_print_image( 'images/darrowright.png', true, [ 'id' => 'button-add_with', 'style' => 'cursor: pointer;', 'title' => __('Add'), 'class' => 'invert_filter', ] ); $data[1] .= html_print_input_hidden( 'tag_with', ($tag_with_base64 ?? ''), true ); $data[1] .= '

'.html_print_image( 'images/darrowleft.png', true, [ 'id' => 'button-remove_with', 'style' => 'cursor: pointer;', 'title' => __('Remove'), 'class' => 'invert_filter', ] ); $data[2] = html_print_select( $tag_with_temp, 'tag_with_temp', [], '', '', 0, true, true, true, '', false, 'width: 200px;' ); $tabletags_with->data[] = $data; $tabletags_with->rowclass[] = ''; $tabletags_without = html_get_predefined_table('transparent', 2); $tabletags_without->id = 'filter_events_tags_without'; $tabletags_without->width = '100%'; $tabletags_without->cellspacing = 4; $tabletags_without->cellpadding = 4; $tabletags_without->class = 'noshadow'; if (is_metaconsole() === true) { $tabletags_without->class = 'nobady'; $tabletags_without->cellspacing = 0; $tabletags_without->cellpadding = 0; } $tabletags_without->styleTable = 'border: 0px;'; $data = []; $data[0] = html_print_select( $tags_select_without, 'select_without', '', '', '', 0, true, true, true, '', false, 'width: 200px;' ); $data[1] = html_print_image( 'images/darrowright.png', true, [ 'id' => 'button-add_without', 'style' => 'cursor: pointer;', 'title' => __('Add'), 'class' => 'invert_filter', ] ); $data[1] .= html_print_input_hidden( 'tag_without', ($tag_without_base64 ?? ''), true ); $data[1] .= '

'.html_print_image( 'images/darrowleft.png', true, [ 'id' => 'button-remove_without', 'style' => 'cursor: pointer;', 'title' => __('Remove'), 'class' => 'invert_filter', ] ); $data[2] = html_print_select( $tag_without_temp, 'tag_without_temp', [], '', '', 0, true, true, true, '', false, 'width: 200px;' ); $tabletags_without->data[] = $data; $tabletags_without->rowclass[] = ''; if (io_safe_output($tag_with) == '["0"]') { $tag_with = '[]'; } if (io_safe_output($tag_without) == '["0"]') { $tag_without = '[]'; } /* * END OF TAGS. */ // View. $pure = get_parameter('pure', 0); $url = ui_get_full_url('index.php?sec=eventos&sec2=operation/events/events'); // Concatenate parameters. $url .= ''; if ($pure) { // Fullscreen. // Floating menu - Start. echo '
'; echo ''; echo '
'; // Floating menu - End. ui_require_jquery_file('countdown'); } else { if (is_metaconsole() === true) { // Load metaconsole frame. enterprise_hook('open_meta_frame'); } // Header. $pss = get_user_info($config['id_user']); $hashup = md5($config['id_user'].$pss['password']); // Fullscreen. $fullscreen['active'] = false; $fullscreen['text'] = ''.html_print_image( 'images/full_screen.png', true, [ 'title' => __('Full screen'), 'class' => 'invert_filter', ] ).''; // Event list. $list['active'] = false; $list['text'] = ''.html_print_image( 'images/events_list.png', true, [ 'title' => __('Event list'), 'class' => 'invert_filter', ] ).''; // History event list. $history_list['active'] = false; $history_list['text'] = ''.html_print_image( 'images/books.png', true, [ 'title' => __('History event list'), 'class' => 'invert_filter', ] ).''; // RSS. $rss['active'] = false; $rss['text'] = ''.html_print_image( 'images/rss.png', true, [ 'title' => __('RSS Events'), 'class' => 'invert_filter', ] ).''; // CSV. $csv['active'] = false; $csv['text'] = ''.html_print_image( 'images/csv.png', true, [ 'title' => __('Export to CSV file'), 'class' => 'invert_filter', ] ).''; // Sound events. $sound_event['active'] = false; $sound_event['text'] = ''.html_print_image( 'images/sound.png', true, [ 'title' => __('Sound events'), 'class' => 'invert_filter', ] ).''; // If the user has administrator permission display manage tab. if ($event_w || $event_m) { // Manage events. $manage_events['active'] = false; $manage_events['text'] = ''.html_print_image( 'images/setup.png', true, [ 'title' => __('Manage events'), 'class' => 'invert_filter', ] ).''; $manage_events['godmode'] = true; $onheader = [ 'manage_events' => $manage_events, 'fullscreen' => $fullscreen, 'list' => $list, 'history' => $history_list, 'rss' => $rss, 'csv' => $csv, 'sound_event' => $sound_event, ]; } else { $onheader = [ 'fullscreen' => $fullscreen, 'list' => $list, 'history' => $history_list, 'rss' => $rss, 'csv' => $csv, 'sound_event' => $sound_event, ]; } // If the history event is not enabled, dont show the history tab. if (isset($config['metaconsole_events_history']) === false || $config['metaconsole_events_history'] != 1) { unset($onheader['history']); } switch ($section) { case 'sound_event': $onheader['sound_event']['active'] = true; $section_string = __('Sound events'); break; case 'history': $onheader['history']['active'] = true; $section_string = __('History'); break; default: $onheader['list']['active'] = true; $section_string = __('List'); break; } if (is_metaconsole() === false) { unset($onheader['history']); ui_print_page_header( __('Events'), 'images/lightning_go.png', false, 'eventview', false, $onheader, true, 'eventsmodal' ); } else { unset($onheader['rss']); unset($onheader['sound_event']); unset($onheader['fullscreen']); ui_meta_print_header(__('Events'), $section_string, $onheader); } ?> '; echo $events_merge_state; echo ''; } } $tittle_error = __('Errors'); echo '
'; } } // Error div for ajax messages. html_print_div( [ 'id' => 'show_message_error', 'content' => '', ] ); // Controls. if (is_metaconsole() !== true) { if (isset($config['event_replication']) === true && $config['event_replication'] == 1 ) { if ($config['show_events_in_local'] == 0) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to access event viewer. View disabled due event replication.' ); ui_print_info_message( [ 'message' => __( 'Event viewer is disabled due event replication. For more information, please contact with the administrator' ), 'no_close' => true, ] ); return; } else { $readonly = true; } } } if (enterprise_hook( 'enterprise_acl', [ $config['id_user'], 'eventos', 'execute_event_responses', ] ) === false ) { $readonly = true; } /* * Load filter form. */ // Group. if ($id_group_filter === null) { $id_group_filter = 0; } $data = html_print_input( [ 'name' => 'id_group_filter', 'returnAllGroup' => true, 'privilege' => 'AR', 'type' => 'select_groups', 'selected' => $id_group_filter, 'nothing' => false, 'return' => true, 'size' => '80%', ] ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; // Event type. $types = get_event_types(); $types['not_normal'] = __('Not normal'); $data = html_print_select( $types, 'event_type', $event_type, '', __('All'), '', true ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; // Event status. $data = html_print_select( events_get_all_status(), 'status', $status, '', '', '', true ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; // Max hours old. $data = html_print_input_text( 'event_view_hr', $event_view_hr, '', 5, 255, true ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; // Duplicates group { events | agents }. $data = html_print_select( [ 0 => __('All events'), 1 => __('Group events'), 2 => __('Group agents'), ], 'group_rep', $group_rep, '', '', 0, true ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; // Free search. $data = html_print_input_text('search', $search, '', '', 255, true); $in = '
'; $in .= $data.'
'; $inputs[] = $in; if (empty($severity) === true && $severity !== '0') { $severity = -1; } // Criticity - severity. $data = html_print_select( get_priorities(), 'severity', explode(',', $severity), '', __('All'), -1, true, true, true, '', false ); $in = '
'; $in .= $data.'
'; $inputs[] = $in; $buttons = []; $buttons[] = [ 'id' => 'load-filter', 'class' => 'float-left margin-right-2 sub config', 'text' => __('Load filter'), 'onclick' => '', ]; if ($event_w || $event_m) { $buttons[] = [ 'id' => 'save-filter', 'class' => 'float-left margin-right-2 sub wand', 'text' => __('Save filter'), 'onclick' => '', ]; } /* * Advanced filter. */ $adv_inputs = []; // Source. $data = html_print_input_text('source', $source, '', '', 255, true); $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Extra ID. $data = html_print_input_text('id_extra', $id_extra, '', 11, 255, true); $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Comment. $data = html_print_input_text( 'user_comment', $user_comment, '', '', 255, true ); $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Agent search. $params = []; $params['show_helptip'] = true; $params['input_name'] = 'text_agent'; $params['value'] = $text_agent; $params['return'] = true; if (is_metaconsole() === true) { $params['javascript_page'] = 'enterprise/meta/include/ajax/events.ajax'; } $params['print_hidden_input_idagent'] = true; $params['hidden_input_idagent_name'] = 'id_agent'; $params['hidden_input_idagent_value'] = $id_agent; $params['size'] = ''; if ($id_agent !== null) { if (is_metaconsole() === true) { $metaconsole_agent = db_get_row_sql( sprintf( 'SELECT alias, server_name FROM tmetaconsole_agent WHERE id_tagente = "%d" ', $id_agent ) ); if ($metaconsole_agent !== false) { $params['value'] = $metaconsole_agent['alias'].' ('.$metaconsole_agent['server_name'].')'; } } else { $params['value'] = agents_get_alias($id_agent); } } $data = ui_print_agent_autocomplete_input($params); $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Mixed. Metaconsole => server, Console => module. if (is_metaconsole() === true) { $title = __('Server'); $data = html_print_select_from_sql( 'SELECT id, server_name FROM tmetaconsole_setup', 'server_id', $server_id, '', __('All'), '0', true ); } else { $title = __('Module search'); $data = html_print_autocomplete_modules( 'module_search', $text_module, false, true, '', [], true, $id_agent_module, '' ); } $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // User ack. $user_users = users_get_user_users( $config['id_user'], $access, true ); $data = html_print_select( $user_users, 'id_user_ack', $id_user_ack, '', __('Any'), 0, true ); $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Only alert events. $data = html_print_select( [ '0' => __('Filter alert events'), '1' => __('Only alert events'), ], 'filter_only_alert', $filter_only_alert, '', __('All'), -1, true ); $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s', __('Alert events'), $data ), ], true ); if (is_metaconsole() === true) { $data = html_print_input_text( 'id_source_event', $id_source_event, '', 5, 255, true ); $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s', __('Id source event'), $data ), ], true ); } // Date from. $inputDateFrom = html_print_input_text( 'date_from', ($date_from === '0000-00-00') ? '' : $date_from, '', false, 10, true, // Disabled. false, // Required. false, // Function. '', // Class. '', // OnChange. '', // Autocomplete. 'off' ); // Time from. $inputTimeFrom = html_print_input_text( 'time_from', $time_from, '', false, 10, true, // Disabled. false, // Required. false, // Function. '', // Class. '', // OnChange. '', // Autocomplete. 'off' ); // Date and Time From. $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s:%s', __('From (date:time)'), $inputDateFrom, $inputTimeFrom ), ], true ); // Time to. $inputTimeTo = html_print_input_text( 'time_to', $time_to, '', false, 10, true, // Disabled. false, // Required. false, // Function. '', // Class. '', // OnChange. '', // Autocomplete. 'off' ); // Date to. $inputDateTo = html_print_input_text( 'date_to', ($date_to === '0000-00-00') ? '' : $date_to, '', false, 10, true, // Disabled. false, // Required. false, // Function. '', // Class. '', // OnChange. '', // Autocomplete. 'off' ); // Date and Time To. $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s:%s', __('To (date:time)'), $inputDateTo, $inputTimeTo ), ], true ); // Custom data filter type. $custom_data_filter_type_input = html_print_select( [ '0' => __('Filter custom data by field name'), '1' => __('Filter custom data by field value'), ], 'custom_data_filter_type', $custom_data_filter_type, '', false, -1, true ); $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s', __('Custom data filter'), $custom_data_filter_type_input ), ], true ); // Custom data. $custom_data_input = html_print_input_text( 'custom_data', $custom_data, '', 5, 255, true ); $adv_inputs[] = html_print_div( [ 'class' => 'filter_input', 'content' => sprintf( '%s', __('Custom data search'), $custom_data_input ), ], true ); // Tags. if (is_metaconsole() === true) { $data = '
'.__('Events with following tags').''.html_print_table($tabletags_with, true).'
'; $data .= '
'.__('Events without following tags').''.html_print_table($tabletags_without, true).'
'; } else { $data = '
'.__('Events with following tags').''.html_print_table($tabletags_with, true).'
'; $data .= '
'.__('Events without following tags').''.html_print_table($tabletags_without, true).'
'; } $in = '
'; $in .= $data.'
'; $adv_inputs[] = $in; // Load view. $adv_filter = join('', $adv_inputs); $filter = join('', $inputs); $filter .= ui_toggle( $adv_filter, __('Advanced options'), '', '', true, true, 'white_box white_box_opened', 'no-border flex-row' ); try { $checkbox_all = html_print_checkbox( 'all_validate_box', 1, false, true ); $default_fields = [ [ 'text' => 'evento', 'class' => 'mw120px', ], [ 'text' => 'mini_severity', 'class' => 'no-padding', ], 'id_evento', // 'id_agente', // 'id_usuario', // 'id_grupo', // 'estado', 'agent_name', 'timestamp', // 'utimestamp', // 'event_type', // 'id_agentmodule', // 'id_alert_am', 'event_type', // 'user_comment', // 'tags', // 'source', // 'id_extra', // 'critical_instructions', // 'warning_instructions', // 'unknown_instructions', // 'owner_user', // 'ack_utimestamp', // 'custom_data', // 'data', // 'module_status', // 'similar_ids', // 'event_rep', // 'timestamp_rep', // 'timestamp_rep_min', // 'module_name', [ 'text' => 'options', 'class' => 'action_buttons w120px', ], [ 'text' => 'm', 'extra' => $checkbox_all, 'class' => 'mw120px', ], ]; $fields = explode(',', $config['event_fields']); // Always check something is shown. if (empty($fields)) { $fields = $default_fields; } if (in_array('mini_severity', $fields) > 0) { $fields[array_search('mini_severity', $fields)] = [ 'text' => 'mini_severity', 'class' => 'no-padding-imp', ]; } // Identifies column instructions to make it unsortable. if (in_array('instructions', $fields) > 0) { $fields[array_search('instructions', $fields)] = [ 'text' => 'instructions', 'class' => 'column-instructions', ]; } $evento_id = array_search('evento', $fields); if ($evento_id !== false) { $fields[$evento_id] = [ 'text' => 'evento', 'class' => 'mw250px', ]; } // Always add options column. $fields = array_merge( $fields, [ [ 'text' => 'options', 'class' => 'action_buttons mw120px', ], [ 'text' => 'm', 'extra' => $checkbox_all, 'class' => 'w20px no-text-imp', ], ] ); // Get column names. $column_names = events_get_column_names($fields, true); foreach ($column_names as $key => $column) { if (is_array($column) && $column['text'] == 'S') { $column_names[$key]['style'] = 'padding-left: 1em !important;'; } } // Open current filter quick reference. $active_filters_div = '
'; // Current filter. $active_filters_div .= '
'; $active_filters_div .= '
'.__('Current filter').'
'; $active_filters_div .= '
'; if ($loaded_filter !== false) { $active_filters_div .= htmlentities(io_safe_output($loaded_filter['id_name'])); } else { $active_filters_div .= __('Not set.'); } $active_filters_div .= '
'; $active_filters_div .= '
'; // Event status. $active_filters_div .= '
'; $active_filters_div .= '
'.__('Event status').'
'; $active_filters_div .= '
'; switch ($status) { case EVENT_ALL: default: $active_filters_div .= __('Any status.'); break; case EVENT_NEW: $active_filters_div .= __('New events.'); break; case EVENT_VALIDATE: $active_filters_div .= __('Validated.'); break; case EVENT_PROCESS: $active_filters_div .= __('In proccess.'); break; case EVENT_NO_VALIDATED: $active_filters_div .= __('Not validated.'); break; } $active_filters_div .= '
'; $active_filters_div .= '
'; // Max. hours old. $active_filters_div .= '
'; $active_filters_div .= '
'.__('Max. hours old').'
'; $active_filters_div .= '
'; if ($event_view_hr == 0) { $active_filters_div .= __('Any time.'); } else if ($event_view_hr == 1) { $active_filters_div .= __('Last hour.'); } else if ($event_view_hr > 1) { $active_filters_div .= __('Last %d hours.', $event_view_hr); } $active_filters_div .= '
'; $active_filters_div .= '
'; // Duplicates. $active_filters_div .= '
'; $active_filters_div .= '
'.__('Duplicated').'
'; $active_filters_div .= '
'; if ($group_rep == 0) { $active_filters_div .= __('All events.'); } else if ($group_rep == 1) { $active_filters_div .= __('Group events'); } else if ($group_rep == 2) { $active_filters_div .= __('Group agents.'); } $active_filters_div .= '
'; $active_filters_div .= '
'; // Close. $active_filters_div .= '
'; $table_id = 'events'; $form_id = 'events_form'; // Print datatable. ui_print_datatable( [ 'id' => $table_id, 'class' => 'info_table events', 'style' => 'width: 100%;', 'ajax_url' => 'operation/events/events', 'ajax_data' => [ 'get_events' => 1, 'history' => (int) $history, ], 'form' => [ 'id' => $form_id, 'class' => 'flex-row', 'html' => $filter, 'inputs' => [], 'extra_buttons' => $buttons, ], 'extra_html' => $active_filters_div, 'pagination_options' => [ [ $config['block_size'], 10, 25, 100, 200, 500, 1000, -1, ], [ $config['block_size'], 10, 25, 100, 200, 500, 1000, 'All', ], ], 'order' => [ 'field' => 'timestamp', 'direction' => 'desc', ], 'column_names' => $column_names, 'columns' => $fields, 'no_sortable_columns' => [ -1, -2, 'column-instructions', ], 'ajax_postprocess' => 'process_datatables_item(item)', 'drawCallback' => 'process_datatables_callback(this, settings)', ] ); } catch (Exception $e) { ui_print_error_message($e->getMessage()); } // Event responses. if (is_user_admin($config['id_user'])) { $sql_event_resp = "SELECT id, name FROM tevent_response WHERE type LIKE 'command'"; $event_responses = db_get_all_rows_sql($sql_event_resp); } else { $id_groups = array_keys(users_get_groups(false, 'EW')); $event_responses = db_get_all_rows_filter( 'tevent_response', [ 'id_group' => $id_groups, 'type' => 'command', ] ); } if ($config['event_replication'] != 1) { if ($event_w && !$readonly) { $array_events_actions['in_progress_selected'] = __('In progress selected'); $array_events_actions['validate_selected'] = __('Validate selected'); } if ($event_m == 1 && !$readonly) { $array_events_actions['delete_selected'] = __('Delete selected'); } } foreach ($event_responses as $val) { $array_events_actions[$val['id']] = $val['name']; } if (check_acl( $config['id_user'], 0, 'EW' ) ) { echo '
'; echo '
'; echo ''; html_print_select( $array_events_actions, 'response_id', '', '', '', 0, false, false, false ); echo '  '; html_print_button( __('Execute event response'), 'submit_event_response', false, 'execute_event_response(true);', 'class="sub next"' ); echo "'; echo '
'; echo ''; echo ''; echo '
'; } // Close viewer. enterprise_hook('close_meta_frame'); // Datepicker requirements. ui_require_css_file('datepicker'); ui_include_time_picker(); ui_require_jquery_file( 'ui.datepicker-'.get_user_language(), 'include/javascript/i18n/' ); // End. Load required JS. html_print_input_hidden('meta', (int) is_metaconsole()); html_print_input_hidden('history', (int) $history); html_print_input_hidden( 'ajax_file', ui_get_full_url('ajax.php', false, false, false) ); // AJAX call options responses. echo "
"; echo "
"; echo "
"; // Load filter div for dialog. echo ''; echo ''; $autorefresh_draw = false; if ($_GET['refr'] || (bool) ($do_refresh ?? false) === true) { $autorefresh_draw = true; } ?>