0) { $sql .= ' WHERE id_grupo = '.$inventory_id_group; } else { $user_groups = implode(',', array_keys(users_get_groups($config['id_user']))); // Avoid errors if there are no groups. if (empty($user_groups) === true) { $user_groups = '"0"'; } $sql .= ' WHERE id_grupo IN ('.$user_groups.')'; } $result = db_get_all_rows_sql($sql); if ($result !== false) { foreach ($result as $row) { $agents[$row['id_agente']] = $row['nombre']; } } $agents_select = $agents; if (strlen($inventory_agent) == 0) { $inventory_id_agent = -1; $inventory_agent = __('All'); } else if ($inventory_agent == __('All')) { $inventory_id_agent = 0; } else { $sql = 'SELECT id_agente FROM tagente WHERE nombre LIKE "'.$inventory_agent.'"'; $result = db_get_all_rows_sql($sql); $inventory_id_agent = $result[0]['id_agente']; } // Single agent selected. if ($inventory_id_agent > 0 && isset($agents[$inventory_id_agent]) === true) { $agents = [$inventory_id_agent => $agents[$inventory_id_agent]]; } $agents_ids = array_keys($agents); if (count($agents_ids) > 0) { $inventory_data = inventory_get_data( $agents_ids, $inventory_module, $utimestamp, $inventory_search_string, $export, false, $order_by_agent ); if ((int) $inventory_data === ERR_NODATA) { $inventory_data = ''; } } return; } if ($get_data_basic_info === true) { // Datatables offset, limit and order. $filter = get_parameter('search', []); $start = (int) get_parameter('start', 0); $length = (int) get_parameter('length', $config['block_size']); $order = get_datatable_order(); $id_agent = (int) get_parameter('id_agent', 0); $params = [ 'search' => $filter['value'], 'start' => $start, 'length' => $length, 'order' => $order, 'id_agent' => $id_agent, ]; $data = get_data_basic_info_sql($params); $count = get_data_basic_info_sql($params, true); try { ob_start(); $data = array_reduce( $data, function ($carry, $agent) { // Transforms array of arrays $data into an array // of objects, making a post-process of certain fields. $tmp = new stdClass(); $tmp->alias = ''; if (is_metaconsole() === true) { $server = metaconsole_get_connection_by_id($agent['id_tmetaconsole_setup']); metaconsole_connect($server); $tmp->alias .= $server['server_name'].' » '; } $id = $agent['id_agente']; $tmp->alias .= $agent['alias']; $ip = ''.__('N/A').''; if (empty($agent['direccion']) === false) { $ip = $agent['direccion']; } $tmp->ip = $ip; $secondary_ips = ''; foreach (agents_get_addresses($id) as $ip) { if ($ip !== $agent['direccion']) { $secondary_ips .= ''.$ip.''; } } $tmp->secondaryIp = $secondary_ips; $tmp->group = groups_get_name($agent['id_grupo']); $secondary_groups = enterprise_hook('agents_get_secondary_groups', [$id]); if (empty($secondary_groups['for_select']) === true) { $sec_group_data = ''.__('N/A').''; } else { $sec_group = []; foreach ($secondary_groups['for_select'] as $name) { $sec_group[] = $name; } $sec_group_data = implode(', ', $sec_group); } $tmp->secondaryGroups = $sec_group_data; $tmp->os = ui_print_os_icon( $agent['id_os'], false, true, true, false, false, false, ['class' => 'main_menu_icon invert_filter'] ); $interval = human_time_description_raw($agent['intervalo'], false, 'large'); $last_contact = ui_print_timestamp($agent['ultimo_contacto'], true); // $last_contact .= ' / '.date_w_fixed_tz($agent['ultimo_contacto_remoto']); $last_status_change_agent = agents_get_last_status_change($agent['id_agente']); $time_elapsed = !empty($last_status_change_agent) ? human_time_comparation($last_status_change_agent) : ''.__('N/A').''; $sql_fields = 'SELECT tcf.name, tcd.description, tcf.is_password_type FROM tagent_custom_fields tcf INNER JOIN tagent_custom_data tcd ON tcd.id_field=tcf.id_field WHERE tcd.id_agent='.$id.' AND tcd.description!=""'; $field_result = db_get_all_rows_sql($sql_fields); $custom_fields_names = ''; $custom_fields_values = ''; foreach ($field_result as $field) { $field_name = str_replace(' ', ' ', io_safe_output($field['name'])); $custom_fields_names .= ''.$field_name.''; $description = $field['description']; $password_length = strlen(io_safe_output($field['description'])); $asterisks = ''; if ((int) $field['is_password_type'] === 1) { for ($i = 0; $i < $password_length; $i++) { $asterisks .= '●'; } $description = $asterisks; } $custom_fields_values .= ''.$description.''; } $tmp->description = $agent['comentarios']; $tmp->interval = $interval; $tmp->lastContact = $last_contact; $tmp->lastStatusChange = $time_elapsed; $tmp->customFields = $custom_fields_names; $tmp->valuesCustomFields = $custom_fields_values; if (is_metaconsole() === true) { metaconsole_restore_db(); } $carry[] = $tmp; return $carry; }, [] ); // Datatables format: RecordsTotal && recordsfiltered. echo json_encode( [ 'data' => $data, 'recordsTotal' => $count, 'recordsFiltered' => $count, ] ); // Capture output. $response = ob_get_clean(); } catch (\Exception $e) { echo json_encode(['error' => $e->getMessage()]); exit; } // If not valid, show error with issue. json_decode($response); if (json_last_error() == JSON_ERROR_NONE) { // If valid dump. echo $response; } else { echo json_encode( ['error' => $response] ); } return; } return; } global $config; check_login(); $is_metaconsole = is_metaconsole(); if (! check_acl($config['id_user'], 0, 'AR') && ! check_acl($config['id_user'], 0, 'AW')) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to access Inventory' ); include 'general/noaccess.php'; return; } require_once $config['homedir'].'/include/functions_users.php'; require_once $config['homedir'].'/include/functions_inventory.php'; // TODO: Button // echo "".__('Export this list to CSV').''.html_print_image('images/csv.png', true, ['title' => __('Export this list to CSV')]).''; // Header. ui_print_standard_header( __('Inventory'), 'images/op_inventory.png', false, '', false, [], [ [ 'link' => '', 'label' => __('Monitoring'), ], ] ); $inventory_id_agent = (int) get_parameter('agent_id', -1); $inventory_agent = (string) get_parameter('agent', ''); if (strlen($inventory_agent) == 0) { $inventory_id_agent = -1; $inventory_agent = __('All'); } else if ($inventory_agent == __('All')) { $inventory_id_agent = 0; } $inventory_module = get_parameter('module_inventory_general_view', 'basic'); $inventory_id_group = (int) get_parameter('id_group'); $inventory_search_string = (string) get_parameter('search_string'); $order_by_agent = (bool) get_parameter('order_by_agent'); $export = (string) get_parameter('export'); $utimestamp = (int) get_parameter('utimestamp'); $submit_filter = (bool) get_parameter('submit_filter'); $pagination_url_parameters = [ 'inventory_id_agent' => $inventory_id_agent, 'inventory_agent' => $inventory_agent, 'inventory_id_group' => $inventory_id_group, ]; $noFilterSelected = false; // Get variables. if ($is_metaconsole === true) { $nodes_connection = metaconsole_get_connections(); $id_server = (int) get_parameter('id_server', 0); $pagination_url_parameters['id_server'] = $id_server; if ($inventory_id_agent > 0) { $inventory_id_server = (int) get_parameter('id_server_agent', -1); $pagination_url_parameters['inventory_id_server'] = $inventory_id_server; if ($inventory_id_server !== -1) { $id_server = $inventory_id_server; $pagination_url_parameters['id_server'] = $id_server; } } // No filter selected. $noFilterSelected = $inventory_id_agent === -1 && $inventory_id_group === 0 && $id_server === 0; } if ($is_metaconsole === true) { $nodo_image_url = $config['homeurl'].'/images/node.png'; if ($id_server > 0) { $connection = metaconsole_get_connection_by_id($id_server); $agents_node = metaconsole_get_agents_servers($connection['server_name'], $inventory_id_group); $node = metaconsole_get_servers($id_server); $nodos = []; if (metaconsole_connect($connection) !== NOERR) { ui_print_error_message( __('There was a problem connecting with the node') ); } $sql = 'SELECT DISTINCT name as indexname, name FROM tmodule_inventory, tagent_module_inventory WHERE tmodule_inventory.id_module_inventory = tagent_module_inventory.id_module_inventory'; if ($inventory_id_agent > 0) { $sql .= ' AND id_agente = '.$inventory_id_agent; } $result_module = db_get_all_rows_sql($sql); if ($submit_filter === true) { // Get the data. $rows_meta = inventory_get_datatable( array_keys($agents_node), $inventory_module, $utimestamp, $inventory_search_string, $export, false, $order_by_agent, $server, $pagination_url_parameters ); $data_tmp['server_name'] = $connection['server_name']; $data_tmp['dbhost'] = $connection['dbhost']; $data_tmp['server_uid'] = $connection['server_uid']; $data_tmp['data'] = $rows_meta; $nodos[$connection['id']] = $data_tmp; if ($result_data !== ERR_NODATA) { $inventory_data .= $result_data; } } // Restore db connection. metaconsole_restore_db(); } else { $result_module = []; $nodos = []; foreach ($nodes_connection as $key => $server) { $agents_node = metaconsole_get_agents_servers($server['server_name'], $inventory_id_group); $connection = metaconsole_get_connection($server['server_name']); if (metaconsole_connect($connection) !== NOERR) { continue; } $sql = 'SELECT DISTINCT name as indexname, name FROM tmodule_inventory, tagent_module_inventory WHERE tmodule_inventory.id_module_inventory = tagent_module_inventory.id_module_inventory'; if ($inventory_id_agent > 0) { $sql .= ' AND id_agente = '.$inventory_id_agent; } $result = db_get_all_rows_sql($sql); if ($result !== false) { $result_module = array_merge($result_module, $result); if ($submit_filter === true) { // Get the data. $rows_meta = inventory_get_datatable( array_keys($agents_node), $inventory_module, $utimestamp, $inventory_search_string, $export, false, $order_by_agent, $server, $pagination_url_parameters ); $data_tmp['server_name'] = $server['server_name']; $data_tmp['dbhost'] = $server['dbhost']; $data_tmp['server_uid'] = $server['server_uid']; $data_tmp['data'] = $rows_meta; $nodos[$server['id']] = $data_tmp; if ($result_data !== ERR_NODATA) { $inventory_data .= $result_data; } } } // Restore db connection. metaconsole_restore_db(); } } $fields = []; foreach ($result_module as $row) { $id = array_shift($row); $value = array_shift($row); $fields[$id] = $value; } } $agent_a = (bool) check_acl($config['id_user'], 0, 'AR'); $agent_w = (bool) check_acl($config['id_user'], 0, 'AW'); $access = ($agent_a === true) ? 'AR' : (($agent_w === true) ? 'AW' : 'AR'); $searchForm = '
'; ui_toggle( $searchForm, ''.__('Filters').'', 'filter_form', '', true, false, '', 'white-box-content', 'box-flat white_table_graph fixed_filter_bar' ); if (is_metaconsole() === true) { $filteringFunction = 'active_inventory_submit()'; ui_print_info_message(['no_close' => true, 'message' => __('You must select at least one filter.'), 'force_class' => 'select_one_filter']); ?> 0 && isset($agents[$inventory_id_agent]) === true) { $agents = [$inventory_id_agent => $agents[$inventory_id_agent]]; } $agents_ids = array_keys($agents); if (count($agents_ids) > 0) { $rows = inventory_get_datatable( $agents_ids, $inventory_module, $utimestamp, $inventory_search_string, $export, false, $order_by_agent ); } if (count($agents_ids) === 0 || (int) $rows === ERR_NODATA) { ui_print_info_message(['no_close' => true, 'message' => __('No data found.') ]); echo '