$agent['id_agente'], 'name' => io_safe_output($agent['nombre']), 'ip' => io_safe_output($agent['direccion']), ]; } echo io_json_mb_encode($data); return; } $get_modules_json_for_multiple_snmp = (bool) get_parameter('get_modules_json_for_multiple_snmp', 0); $get_common_modules = (bool) get_parameter('get_common_modules', 1); if ($get_modules_json_for_multiple_snmp) { include_once 'include/graphs/functions_utils.php'; $idSNMP = get_parameter('id_snmp'); $id_snmp_serialize = get_parameter('id_snmp_serialize'); $snmp = unserialize_in_temp($id_snmp_serialize, false); $oid_snmp = []; $out = false; foreach ($idSNMP as $id) { foreach ($snmp[$id] as $key => $value) { // Check if it has "ifXXXX" syntax and skip it. if (! preg_match('/if/', $key)) { continue; } $oid_snmp[$value['oid']] = $key; } if ($out === false) { $out = $oid_snmp; } else { $commons = array_intersect($out, $oid_snmp); if ($get_common_modules) { // Common modules is selected (default). $out = $commons; } else { // All modules is selected. $array1 = array_diff($out, $oid_snmp); $array2 = array_diff($oid_snmp, $out); $out = array_merge($commons, $array1, $array2); } } $oid_snmp = []; } echo io_json_mb_encode($out); } // And and remove groups use the same function. $add_secondary_groups = get_parameter('add_secondary_groups'); $remove_secondary_groups = get_parameter('remove_secondary_groups'); if ($add_secondary_groups || $remove_secondary_groups) { $id_agent = get_parameter('id_agent'); $groups_to_add = get_parameter('groups'); if (enterprise_installed()) { if (empty($groups_to_add)) { return 0; } enterprise_include('include/functions_agents.php'); $ret = enterprise_hook( 'agents_update_secondary_groups', [ $id_agent, (($add_secondary_groups) ? $groups_to_add : []), (($remove_secondary_groups) ? $groups_to_add : []), ] ); // Echo 0 in case of error. 0 Otherwise. echo ((bool) $ret === true) ? 1 : 0; } } return; } ui_require_javascript_file('openlayers.pandora'); if (isset($id_agente) === false) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to access agent manager witout an agent' ); include 'general/noaccess.php'; return; } $new_agent = (empty($id_agente) === true) ? true : false; if ($new_agent === true) { if (empty($direccion_agente) === false && empty($nombre_agente) === true) { $nombre_agente = $direccion_agente; } $servers = servers_get_names(); if (empty($servers) === false) { $array_keys_servers = array_keys($servers); $server_name = reset($array_keys_servers); } } else { // Agent remote configuration editor. enterprise_include_once('include/functions_config_agents.php'); if (enterprise_installed() === true) { $filename = config_agents_get_agent_config_filenames($id_agente); } } $disk_conf_delete = (bool) get_parameter('disk_conf_delete'); // Agent remote configuration DELETE. if ($disk_conf_delete === true) { // TODO: Get this working on computers where the Pandora server(s) are not on the webserver // TODO: Get a remote_config editor working in the open version. @unlink($filename['md5']); @unlink($filename['conf']); } echo '
'; echo '
'; // Custom ID. $custom_id_div = '
'; $custom_id_div .= '

'.__('Custom ID').':

'; $custom_id_div .= html_print_input_text( 'custom_id', $custom_id, '', 16, 255, true, false, false, '', 'agent_custom_id' ).'
'; // Get groups. $groups = users_get_groups($config['id_user'], 'AR', false); // Get modules. $modules = db_get_all_rows_sql( 'SELECT id_agente_modulo as id_module, nombre as name FROM tagente_modulo WHERE id_agente = '.$id_parent ); $modules_values = []; $modules_values[0] = __('Any'); if (is_array($modules) === true) { foreach ($modules as $m) { $modules_values[$m['id_module']] = $m['name']; } } // Remote configuration available. if (isset($filename) === true && file_exists($filename['md5']) === true) { $remote_agent = true; $agent_md5 = md5(io_safe_output(agents_get_name($id_agente)), false); } else { $remote_agent = false; } // Get Servers. $servers = servers_get_names(); // Set the agent have not server. if (array_key_exists($server_name, $servers) === false) { $server_name = 0; } if ($new_agent === true) { // Set first server by default. $servers_get_names = $servers; $array_keys_servers_get_names = array_keys($servers_get_names); $server_name = reset($array_keys_servers_get_names); } // QR Code table. if ($new_agent === false) { $CodeQRContent .= html_print_div(['id' => 'qr_container_image'], true); $CodeQRContent .= html_print_anchor( [ 'id' => 'qr_code_agent_view', 'href' => ui_get_full_url('mobile/index.php?page=agent&id='.$id_agente), ], true ); $CodeQRContent .= '
'.$custom_id_div; // QR code div. $CodeQRTable = html_print_div( [ 'class' => 'agent_qr', 'content' => $CodeQRContent, ], true ); } else { $CodeQRTable = ''; } // Advanced mode. if (enterprise_installed() === true) { // Safe operation mode. if ($new_agent === false) { $sql_modules = db_get_all_rows_sql( 'SELECT id_agente_modulo as id_module, nombre as name FROM tagente_modulo WHERE id_agente = '.$id_agente ); $safe_mode_modules = []; $safe_mode_modules[0] = __('Any'); if (is_array($sql_modules) === true) { foreach ($sql_modules as $m) { $safe_mode_modules[$m['id_module']] = $m['name']; } } } // Calculate cps value - agents. if ($new_agent === false) { $cps_val = service_agents_cps($id_agente); } else { // No agent defined, use received cps as base value. if ($cps >= 0) { $cps_val = $cps; } } // Parent agents. $paramsParentAgent = []; $paramsParentAgent['return'] = true; $paramsParentAgent['show_helptip'] = false; $paramsParentAgent['input_name'] = 'id_parent'; $paramsParentAgent['print_hidden_input_idagent'] = true; $paramsParentAgent['hidden_input_idagent_name'] = 'id_agent_parent'; $paramsParentAgent['hidden_input_idagent_value'] = $id_parent; $paramsParentAgent['value'] = db_get_value('alias', 'tagente', 'id_agente', $id_parent); $paramsParentAgent['selectbox_id'] = 'cascade_protection_module'; $paramsParentAgent['javascript_is_function_select'] = true; $paramsParentAgent['cascade_protection'] = true; $paramsParentAgent['input_style'] = 'width: 100%;'; if ($id_agente !== 0) { // Deletes the agent's offspring. $paramsParentAgent['delete_offspring_agents'] = $id_agente; } } $listIcons = gis_get_array_list_icons(); $arraySelectIcon = []; foreach ($listIcons as $index => $value) { $arraySelectIcon[$index] = $index; } // Agent icons. $path = 'images/gis_map/icons/'; // TODO set better method the path. $table_adv_agent_icon = '

'.__('Agent icon').'

'; if ($icon_path == '') { $display_icons = 'none'; // Hack to show no icon. Use any given image to fix not found image errors. $path_without = 'images/spinner.gif'; $path_default = 'images/spinner.gif'; $path_ok = 'images/spinner.gif'; $path_bad = 'images/spinner.gif'; $path_warning = 'images/spinner.gif'; } else { $display_icons = ''; $path_without = $path.$icon_path.'.default.png'; $path_default = $path.$icon_path.'.default.png'; $path_ok = $path.$icon_path.'.ok.png'; $path_bad = $path.$icon_path.'.bad.png'; $path_warning = $path.$icon_path.'.warning.png'; } $tableAgent = new stdClass(); $tableAgent->class = 'floating_form primary_form'; $tableAgent->data = []; $tableAgent->style = []; $tableAgent->cellclass = []; $tableAgent->colspan = []; $tableAgent->rowspan = []; // Agent name. if ($new_agent === false) { $tableAgent->data['caption_name'][0] = __('Agent name'); $tableAgent->rowclass['name'] = 'w540px'; $tableAgent->cellstyle['name'][0] = 'width: 100%;'; $tableAgent->data['name'][0] = html_print_input_text('agente', $nombre_agente, '', 76, 100, true, false, false, '', 'w100p'); $tableAgent->data['name'][0] .= html_print_div( [ 'class' => 'moduleIdBox', 'content' => __('ID').' '.$id_agente.'', ], true ); // Agent options for QR code. $agent_options_update = 'agent_options_update'; } // Alias. $tableAgent->data['caption_alias'][0] = __('Alias'); $tableAgent->rowclass['alias'] = 'w540px'; $tableAgent->data['alias'][0] = html_print_input_text('alias', $alias, '', 50, 100, true, false, true, '', 'w540px'); if ($new_agent === true) { $tableAgent->rowclass['additional_alias'] = 'subinput'; $tableAgent->data['additional_alias'][0] = html_print_checkbox_switch('alias_as_name', 1, $config['alias_as_name'], true); $tableAgent->data['additional_alias'][1] = __('Use alias as name'); } else { if ($remote_agent === true) { $tableAgent->data['alias'][0] .= html_print_anchor( [ 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=remote_configuration&id_agente='.$id_agente.'&disk_conf='.$agent_md5, 'content' => html_print_image( 'images/remote-configuration@svg.svg', true, [ 'border' => 0, 'title' => __('This agent can be remotely configured'), 'class' => 'invert_filter after_input_icon', ] ), ], true ); } } // Ip adress. $tableAgent->data['caption_ip_address'] = __('IP Address'); $tableAgent->rowclass['ip_address'] = 'w540px'; $tableAgent->data['ip_address'][0] = html_print_input_text('direccion', $direccion_agente, '', 16, 100, true, false, false, '', 'w540px'); $tableAgent->rowclass['additional_ip_address'] = 'subinput'; $tableAgent->data['additional_ip_address'][0] = html_print_checkbox_switch('unique_ip', 1, $config['unique_ip'], true); $tableAgent->data['additional_ip_address'][1] = __('Unique IP'); $tableAgent->cellclass['additional_ip_address'][1] = 'w120px'; $tableAgent->data['additional_ip_address'][2] = html_print_input( [ 'type' => 'switch', 'id' => 'fixed_ip', 'name' => 'fixed_ip', 'value' => $fixed_ip, ] ); $table_ip .= '
'; if ($id_agente) { $ip_all = agents_get_addresses($id_agente); $table_ip .= '
'; $table_ip .= '
'; $table_ip .= '
'.html_print_select($ip_all, 'address_list', $direccion_agente, '', '', 0, true).'
'; $table_ip .= '
'.html_print_checkbox_switch('delete_ip', 1, false, true).__('Delete selected IPs').'
'; $table_ip .= '
'; } ?> data['additional_ip_address'][3] = __('Fix IP address'); $tableAgent->data['additional_ip_address'][3] .= ui_print_help_tip(__('Avoid automatic IP address update when agent IP changes.'), true); // IP Address List. if ($new_agent === false) { $tableAgent->data['caption_ip_address_list'] = __('IP Address list'); $tableAgent->data['ip_address_list'][0] = html_print_select(agents_get_addresses($id_agente), 'address_list', $direccion_agente, '', '', 0, true, false, true, 'w540px'); $tableAgent->rowclass['additional_ip_address_list'] = 'subinput'; $tableAgent->data['additional_ip_address_list'][0] = html_print_checkbox_switch('delete_ip', 1, false, true); $tableAgent->data['additional_ip_address_list'][1] = __('Delete selected IPs'); } // Select primary group. $tableAgent->data['caption_primary_group'][0] = __('Primary group'); if (isset($groups[$grupo]) === true || $new_agent === true) { $tableAgent->rowclass['primary_group'] = 'w540px'; // Cannot change primary group if user have not permission for that group. $tableAgent->data['primary_group'][0] = html_print_select_groups( false, 'AW', false, 'grupo', $grupo, '', '', 0, true, false, true, '', false, '', '', false, 'id_grupo', false, false, false, '540px', false, true, ); } else { $tableAgent->data['primary_group'][0] .= groups_get_name($grupo); $tableAgent->data['primary_group'][0] .= html_print_input_hidden('grupo', $grupo, true); } $tableAgent->data['primary_group'][0] .= ''; $tableAgent->data['primary_group'][0] .= ui_print_group_icon( $grupo, true, '', ($id_agente === 0) ? 'display: none;' : '', true, false, false, 'after_input_icon' ); $tableAgent->data['primary_group'][0] .= ''; $tableAgent->data['caption_interval'][0] = __('Interval'); // $tableAgent->rowstyle['interval'] = 'width: 260px'; $tableAgent->rowclass['interval'] = 'w540px'; $tableAgent->data['interval'][0] = html_print_extended_select_for_time( 'intervalo', $intervalo, '', '', '0', 10, true, false, true, 'w33p' ); if ($intervalo < SECONDS_5MINUTES) { $tableAgent->data['interval'][0] .= clippy_context_help('interval_agent_min'); } $tableAgent->data['caption_os'][0] = __('OS'); $tableAgent->rowclass['os'] = 'w540px'; $tableAgent->data['os'][0] = html_print_select_from_sql( 'SELECT id_os, name FROM tconfig_os', 'id_os', $id_os, '', '', '0', true, false, true, false, 'width: 540px;' ); $tableAgent->data['os'][0] .= html_print_div( [ 'class' => 'after_input_icon', 'id' => 'os_preview', 'content' => ui_print_os_icon( $id_os, false, true ), ], true ); $tableAgent->data['caption_server'][0] = __('Server'); $tableAgent->rowclass['server'] = 'w540px'; $tableAgent->data['server'][0] = html_print_select( $servers, 'server_name', $server_name, '', __('None'), 0, true, false, true, 'w540px', false, 'width: 540px;' ); // Description. $tableAgent->data['caption_description'][0] = __('Description'); $tableAgent->rowclass['description'] = 'w540px'; $tableAgent->data['description'][0] = html_print_textarea( 'comentarios', 3, 80, $comentarios, '', true, 'agent_description w540px' ); html_print_div( [ 'class' => 'box-flat white_table_flex white_box agent_details_col', 'style' => 'display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 20px', 'content' => html_print_table($tableAgent, true).$CodeQRTable, ] ); /* TODO REVIEW $table_satellite = ''; if ($remote_agent === true) { // Satellite server selector. $satellite_servers = db_get_all_rows_filter( 'tserver', ['server_type' => SERVER_TYPE_ENTERPRISE_SATELLITE], [ 'id_server', 'name', ] ); $satellite_names = []; if (empty($satellite_servers) === false) { foreach ($satellite_servers as $s_server) { $satellite_names[$s_server['id_server']] = $s_server['name']; } $table_satellite = '

'.__('Satellite').'

'; $table_satellite .= '
'; $table_satellite .= html_print_input( [ 'type' => 'select', 'fields' => $satellite_names, 'name' => 'satellite_server', 'selected' => $satellite_server, 'nothing' => __('None'), 'nothinf_value' => 0, 'return' => true, ] ).'
'; } } */ // Advanced options. $tableAdvancedAgent = new stdClass(); $tableAdvancedAgent->class = 'filter-table-adv floating_form primary_form'; $tableAdvancedAgent->data = []; $tableAdvancedAgent->style = []; $tableAdvancedAgent->cellclass = []; $tableAdvancedAgent->colspan = []; $tableAdvancedAgent->rowspan = []; // Secondary groups. $tableAdvancedAgent->data['secondary_groups'][] = html_print_label_input_block( __('Secondary groups'), html_print_select_agent_secondary( $agent, $id_agente ) ); // Parent agent. $tableAdvancedAgent->data['parent_agent'][] = html_print_label_input_block( __('Parent'), ui_print_agent_autocomplete_input($paramsParentAgent) ); if (enterprise_installed() === true) { $cascadeProtectionContents = []; $cascadeProtectionContents[] = html_print_checkbox_switch( 'cascade_protection', 1, $cascade_protection, true ); $cascadeProtectionContents[] = html_print_select( $modules_values, 'cascade_protection_module', $cascade_protection_module, '', '', 0, true, false, true, 'w220p' ); $tableAdvancedAgent->data['caption_cascade_protection'][] = html_print_label_input_block( __('Cascade protection modules'), html_print_div( [ 'class' => 'flex-row-center', 'content' => implode('', $cascadeProtectionContents), ], true ) ); } // Module Definition (Learn mode). $switchButtons = []; $switchButtons[] = html_print_radio_button_extended( 'modo', 1, __('Learning mode'), $modo, false, 'show_modules_not_learning_mode_context_help();', '', true ); $switchButtons[] = html_print_radio_button_extended( 'modo', 0, __('Normal mode'), $modo, false, 'show_modules_not_learning_mode_context_help();', '', true ); $switchButtons[] = html_print_radio_button_extended( 'modo', 2, __('Autodisable mode'), $modo, false, 'show_modules_not_learning_mode_context_help();', '', true ); $tableAdvancedAgent->data['module_definition'][] = html_print_label_input_block( __('Module definition'), html_print_div( [ 'class' => 'switch_radio_button', 'content' => implode('', $switchButtons), ], true ) ); // CPS - Cascade Protection Services. $tableAdvancedAgent->data['cps_value'][] = html_print_label_input_block( __('Cascade protection services'), html_print_checkbox_switch('cps', $cps_val, ($cps >= 0), true) ); // Update GIS data. if ((bool) $config['activate_gis'] === true) { $tableAdvancedAgent->data['gis'][] = html_print_label_input_block( __('Update new GIS data'), html_print_checkbox_switch('update_gis_data', 1, ($new_agent === true), true) ); } // Agent Icons. $tableAdvancedAgent->data['agent_icon'][] = html_print_label_input_block( __('Agent icon'), html_print_select( $arraySelectIcon, 'icon_path', $icon_path, 'changeIcons();', __('None'), '', true, false, true, 'w540px' ).html_print_image( $path_ok, true, [ 'id' => 'icon_ok', 'style' => 'display:'.$display_icons.';', ] ).html_print_image( $path_bad, true, [ 'id' => 'icon_bad', 'style' => 'display:'.$display_icons.';', ] ).html_print_image( $path_warning, true, [ 'id' => 'icon_warning', 'style' => 'display:'.$display_icons.';', ] ) ); // Url address. if (enterprise_installed() === true) { $urlAddressInput = html_print_input_text( 'url_description', $url_description, '', 45, 255, true, false, false, '', 'w540px', '', // Autocomplete. 'new-password' ); } else { $urlAddressInput = html_print_input_text( 'url_description', $url_description, '', 45, 255, true ); } $tableAdvancedAgent->data['url_description'][] = html_print_label_input_block( __('URL Address'), $urlAddressInput ); // Agent status. $tableAdvancedAgent->data['agent_status'][] = html_print_label_input_block( __('Disabled mode'), html_print_checkbox_switch( 'disabled', 1, $disabled, true ) ); // Quiet mode. $tableAdvancedAgent->data['agent_quiet'][] = html_print_label_input_block( __('Quiet'), html_print_checkbox_switch('quiet', 1, $quiet, true) ); // Remote configuration. if ($new_agent === false && isset($filename) === true && file_exists($filename['md5']) === true) { $remoteConfigurationElements = []; $remoteConfigurationElements[] = html_print_input_text( 'remote_file_timestamp', date('F d Y H:i:s', fileatime($filename['md5'])), '', 0, 100, true, true, false, '', 'w540px' ); $remoteConfigurationElements[] = html_print_anchor( [ 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=main&disk_conf_delete=1&id_agente='.$id_agente, 'content' => html_print_image( 'images/delete.svg', true, [ 'border' => 0, 'title' => __('Delete remote configuration file'), 'class' => 'invert_filter after_input_icon', ] ), ], true ); $tableAdvancedAgent->data['remote_configuration'][] = html_print_label_input_block( __('Remote configuration'), html_print_div( [ 'class' => 'flex-row-center', 'content' => implode('', $remoteConfigurationElements), ], true ) ); } // Safe operation mode. $safeOperationElements = []; $safeOperationElements[] = html_print_checkbox_switch( 'safe_mode', 1, $safe_mode, true ); $safeOperationElements[] = html_print_select( $safe_mode_modules, 'safe_mode_module', $safe_mode_module, '', '', 0, true ); $tableAdvancedAgent->data['safe_operation'][] = html_print_label_input_block( __('Safe operation mode'), html_print_div( [ 'class' => 'flex-row-center', 'content' => implode('', $safeOperationElements), ], true ) ); if (enterprise_installed() === true) { ui_toggle( html_print_table($tableAdvancedAgent, true), ''.__('Advanced options').'', '', '', true, false, 'white_box_content', 'no-border white_table_graph' ); } // Custom fields. $customOutputData = ''; $fields = db_get_all_fields_in_table('tagent_custom_fields'); if ($fields === false) { $fields = []; } foreach ($fields as $field) { // Filling the data. $combo = []; $combo = $field['combo_values']; $combo = explode(',', $combo); $combo_values = []; foreach ($combo as $value) { $combo_values[$value] = $value; } $custom_value = db_get_value_filter( 'description', 'tagent_custom_data', [ 'id_field' => $field['id_field'], 'id_agent' => $id_agente, ] ); if ($custom_value === false) { $custom_value = ''; } if ((bool) $field['is_password_type'] === true) { $customContent = html_print_input_text_extended( 'customvalue_'.$field['id_field'], $custom_value, 'customvalue_'.$field['id_field'], '', 30, 100, $view_mode, '', '', true, true ); } else if ($field['is_link_enabled']) { list($link_text, $link_url) = json_decode($custom_value, true); if (json_last_error() !== JSON_ERROR_NONE) { $link_text = ''; $link_url = ''; } $data_field[1] = ''.__('Link text:').''; $data_field[1] .= '
'; $data_field[1] .= html_print_textarea( 'customvalue_'.$field['id_field'].'[]', 2, 65, $link_text, 'class="min-height-30px w100p"', true ); $data_field[1] .= '
'; $data_field[1] .= ''.__('Link URL:').''; $data_field[1] .= '
'; $data_field[1] .= html_print_textarea( 'customvalue_'.$field['id_field'].'[]', 2, 65, $link_url, 'class="min-height-30px w100p"', true ); } else { $customContent = html_print_textarea( 'customvalue_'.$field['id_field'], 2, 65, $custom_value, 'class="min-height-30px w100p"', true ); } if (empty($field['combo_values']) === false) { $customContent = html_print_input( [ 'type' => 'select_search', 'fields' => $combo_values, 'name' => 'customvalue_'.$field['id_field'], 'selected' => $custom_value, 'nothing' => __('None'), 'nothing_value' => '', 'return' => true, 'sort' => false, 'size' => '400px', 'dropdownAutoWidth' => true, ] ); }; $customOutputData .= ui_toggle( html_print_div( [ 'content' => $customContent ], true ), $field['name'], $field['name'], 'custom_field_toggle_'.$field['id_field'], true, true, ); } if (empty($fields) === false) { ui_toggle( $customOutputData, ''.__('Custom fields').'', '', '', true, false, 'white_box white_box_opened white_table_graph_fixed', 'no-border custom_fields_elements' ); } // The context help about the learning mode. if ($modo == 0) { echo ""; } else { echo "'; if ($new_agent === false) { $actionButtons = html_print_submit_button( __('Update'), 'updbutton', false, [ 'icon' => 'update'], true ); $actionButtons .= html_print_input_hidden('update_agent', 1); $actionButtons .= html_print_input_hidden('id_agente', $id_agente); if (is_management_allowed() === true) { $actionButtons .= html_print_button( __('Delete agent'), 'deleteAgent', false, 'deleteAgentDialog('.$id_agente.')', [ 'icon' => 'delete', 'mode' => 'secondary dialog_opener', ], true ); } } else { $actionButtons = html_print_input_hidden('create_agent', 1); $actionButtons .= html_print_submit_button( __('Create'), 'crtbutton', false, [ 'icon' => 'wand'], true ); } $actionButtons .= html_print_go_back_button( 'index.php?sec=gagente&sec2=godmode/agentes/modificar_agente', ['button_class' => ''], true ); html_print_action_buttons($actionButtons, ['type' => 'form_action']); echo ''; echo ''; ui_require_jquery_file('pandora.controls'); ui_require_jquery_file('ajaxqueue'); ui_require_jquery_file('bgiframe'); ?>