From dccd950e9ed6247e5b60258a0a3a7addea463e64 Mon Sep 17 00:00:00 2001 From: "jose.gonzalez@pandorafms.com" <jose.gonzalez@pandorafms.com> Date: Wed, 30 Nov 2022 10:14:42 +0100 Subject: [PATCH] Changes --- .../extensions/files_repo/files_repo_list.php | 2 +- .../godmode/agentes/agent_template.php | 2 +- .../godmode/agentes/configurar_agente.php | 862 ++++++++---------- .../godmode/agentes/fields_manager.php | 2 +- .../godmode/agentes/modificar_agente.php | 2 +- .../godmode/agentes/module_manager.php | 83 +- .../godmode/agentes/module_manager_editor.php | 90 +- .../agentes/module_manager_editor_common.php | 754 +++++++-------- .../godmode/alerts/alert_actions.php | 4 +- .../godmode/alerts/alert_commands.php | 2 +- .../godmode/alerts/alert_list.list.php | 4 +- .../godmode/alerts/alert_templates.php | 2 +- pandora_console/godmode/category/category.php | 2 +- .../godmode/events/event_filter.php | 2 +- .../godmode/events/event_responses.list.php | 2 +- pandora_console/godmode/extensions.php | 2 +- pandora_console/godmode/groups/group_list.php | 2 +- .../godmode/groups/modu_group_list.php | 2 +- .../godmode/modules/manage_nc_groups.php | 2 +- .../modules/manage_network_components.php | 2 +- .../modules/manage_network_templates.php | 2 +- pandora_console/godmode/netflow/nf_edit.php | 2 +- pandora_console/godmode/reporting/graphs.php | 2 +- .../godmode/reporting/map_builder.php | 4 +- .../reporting_builder.list_items.php | 2 +- .../godmode/reporting/reporting_builder.php | 2 +- .../godmode/servers/modificar_server.php | 97 +- .../godmode/servers/servers.build_table.php | 2 +- pandora_console/godmode/setup/gis.php | 2 +- pandora_console/godmode/setup/links.php | 2 +- pandora_console/godmode/setup/news.php | 2 +- pandora_console/godmode/setup/os.list.php | 2 +- .../godmode/snmpconsole/snmp_filters.php | 2 +- pandora_console/godmode/tag/tag.php | 2 +- .../godmode/users/profile_list.php | 2 +- pandora_console/godmode/users/user_list.php | 2 +- .../wizards/DiscoveryTaskList.class.php | 2 +- .../images/svg/Iconset_7_11_22.zip | Bin 110340 -> 0 bytes .../include/class/AuditLog.class.php | 4 +- .../include/class/ConfigPEN.class.php | 2 +- .../include/class/CredentialStore.class.php | 2 +- .../include/class/ModuleTemplates.class.php | 2 +- pandora_console/include/functions_agents.php | 14 + pandora_console/include/functions_html.php | 34 +- pandora_console/include/functions_ui.php | 2 +- .../lib/Dashboard/Widgets/events_list.php | 2 +- pandora_console/include/styles/pandora.css | 86 +- .../include/styles/pandora_black.css | 4 +- pandora_console/include/styles/tables.css | 66 +- pandora_console/index.php | 1 - .../operation/agentes/pandora_networkmap.php | 6 +- .../operation/agentes/status_monitor.php | 2 +- pandora_console/operation/events/events.php | 4 +- .../operation/gis_maps/gis_map.php | 2 +- .../incidents/list_integriaims_incidents.php | 2 +- .../operation/messages/message_list.php | 2 +- pandora_console/pandoradb_data.sql | 40 +- pandora_console/views/calendar/list.php | 2 +- pandora_console/views/dashboard/list.php | 6 +- 59 files changed, 1135 insertions(+), 1106 deletions(-) delete mode 100644 pandora_console/images/svg/Iconset_7_11_22.zip diff --git a/pandora_console/extensions/files_repo/files_repo_list.php b/pandora_console/extensions/files_repo/files_repo_list.php index 783e155dc4..6c75218d18 100644 --- a/pandora_console/extensions/files_repo/files_repo_list.php +++ b/pandora_console/extensions/files_repo/files_repo_list.php @@ -98,7 +98,7 @@ if (!empty($files)) { // Last modification // Public URL $data[4] = ''; - $table->cellclass[][4] = 'action_buttons'; + $table->cellclass[][4] = 'table_action_buttons'; if (!empty($file['hash'])) { $public_url = ui_get_full_url( EXTENSIONS_DIR.'/files_repo/files_repo_get_file.php?file='.$file['hash'] diff --git a/pandora_console/godmode/agentes/agent_template.php b/pandora_console/godmode/agentes/agent_template.php index b4313aee88..64ef76af2b 100644 --- a/pandora_console/godmode/agentes/agent_template.php +++ b/pandora_console/godmode/agentes/agent_template.php @@ -269,7 +269,7 @@ foreach ($result as $row) { $data[2] = mb_substr($row['descripcion'], 0, 60); - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = '<a href="index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&tab=template&id_agente='.$id_agente.'&delete_module='.$row['id_agente_modulo'].'">'.html_print_image('images/cross.png', true, ['class' => 'invert_filter', 'border' => '0', 'alt' => __('Delete'), 'onclick' => "if (!confirm('".__('Are you sure?')."')) return false;"]).'</a>'; $data[3] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module&edit_module=1&id_agent_module='.$row['id_agente_modulo'].'">'.html_print_image('images/config.png', true, ['class' => 'invert_filter', 'border' => '0', 'alt' => __('Update')]).'</a>'; diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 70df1cb88e..d072bbc02c 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -42,24 +42,184 @@ use PandoraFMS\Event; check_login(); -// Get tab parameter to check ACL in each tabs. -$tab = get_parameter('tab', 'main'); +$tab = (string) get_parameter('tab', 'main'); +$id_agente = (int) get_parameter('id_agente'); +$agentAddress = (string) get_parameter('direccion'); +$alias = (string) get_parameter('alias'); +$alias_as_name = (int) get_parameter_post('alias_as_name'); +$direccion_agente = (string) get_parameter_post('direccion'); +$unique_ip = (int) get_parameter_post('unique_ip'); +// $alerttype = get_parameter('alerttype'); UNUSED. +$id_module = (int) get_parameter('id_module'); +$id_agent_module = (int) get_parameter('id_agent_module'); +$intervalo = (string) get_parameter_post('intervalo', SECONDS_5MINUTES); +$comentarios = (string) get_parameter_post('comentarios'); +$modo = (int) get_parameter_post('modo'); +$id_parent = (int) get_parameter_post('id_agent_parent'); +$server_name = (string) get_parameter_post('server_name'); +$id_os = (int) get_parameter_post('id_os'); +$disabled = (int) get_parameter_post('disabled'); +$custom_id = (string) get_parameter_post('custom_id'); +$cascade_protection = (int) get_parameter_post('cascade_protection'); +$cascade_protection_module = (int) get_parameter_post('cascade_protection_module'); +$safe_mode = (int) get_parameter_post('safe_mode'); +$safe_mode_module = (int) get_parameter_post('safe_mode_module'); +$icon_path = (string) get_parameter_post('icon_path'); +$update_gis_data = (int) get_parameter_post('update_gis_data'); +$url_description = (string) get_parameter('url_description'); +$quiet = (int) get_parameter('quiet'); +$cps = (int) get_parameter_switch('cps', -1); +$fixed_ip = (int) get_parameter_switch('fixed_ip'); +$secondary_groups = (string) get_parameter('secondary_hidden'); +$grupo = (int) get_parameter_post('grupo'); +$id_extension = get_parameter('id_extension'); +$type_module_t = get_parameter('moduletype'); +$wizardSection = (string) get_parameter('wizard_section'); +$fix_module = get_parameter_get('fix_module', 0); +$address_list = (string) get_parameter_post('address_list'); +$agentName = (string) get_parameter_post('agente'); +$disabled = (bool) get_parameter_post('disabled'); +$satellite_server = (int) get_parameter('satellite_server', 0); +$max_timeout = (int) get_parameter('max_timeout'); +$max_retries = (int) get_parameter('max_retries'); +$min = (int) get_parameter('min'); +$max = (int) get_parameter('max'); +$interval = (int) get_parameter('module_interval', $intervalo); +$ff_interval = (int) get_parameter('module_ff_interval'); +$quiet_module = (int) get_parameter('quiet_module'); +$cps_module = (int) get_parameter('cps_module'); +$id_plugin = (int) get_parameter('id_plugin'); +$id_export = (int) get_parameter('id_export'); +$disabled = (bool) get_parameter('disabled'); +$tcp_send = (string) get_parameter('tcp_send'); +$tcp_rcv = (string) get_parameter('tcp_rcv'); +$tcp_port = (int) get_parameter('tcp_port'); +$delete_ip = (string) get_parameter_post('address_list'); +// Correction in order to not insert 0 as port. +$is_port_empty = (string) get_parameter('tcp_port'); +$prediction_module = (int) get_parameter('prediction_module'); -// See if id_agente is set (either POST or GET, otherwise -1. -$id_agente = (int) get_parameter('id_agente'); +$id_module_type = (int) get_parameter('id_module_type'); +$name = (string) get_parameter('name'); +$description = (string) get_parameter('description'); +$id_module_group = (int) get_parameter('id_module_group'); +$flag = (bool) get_parameter('flag'); +$post_process = (string) get_parameter('post_process', 0.0); +$configuration_data = (string) get_parameter('configuration_data'); +$old_configuration_data = (string) get_parameter('old_configuration_data'); +$custom_string_1 = (string) get_parameter('custom_string_1'); +$custom_string_2 = (string) get_parameter('custom_string_2'); +$custom_string_3 = (string) get_parameter('custom_string_3'); +$custom_integer_1 = (int) get_parameter('custom_integer_1'); +$custom_integer_2 = (int) get_parameter('custom_integer_2'); +$custom_id = (string) get_parameter('custom_id'); +$history_data = (int) get_parameter('history_data'); +$dynamic_interval = (int) get_parameter('dynamic_interval'); +$dynamic_max = (int) get_parameter('dynamic_max'); +$dynamic_min = (int) get_parameter('dynamic_min'); +$dynamic_two_tailed = (int) get_parameter('dynamic_two_tailed'); +$min_warning = (float) get_parameter('min_warning'); +$max_warning = (float) get_parameter('max_warning'); +$str_warning = (string) get_parameter('str_warning'); +$min_critical = (float) get_parameter('min_critical'); +$max_critical = (float) get_parameter('max_critical'); +$str_critical = (string) get_parameter('str_critical'); +$ff_event = (int) get_parameter('ff_event'); +$ff_event_normal = (int) get_parameter('ff_event_normal'); +$ff_event_warning = (int) get_parameter('ff_event_warning'); +$ff_event_critical = (int) get_parameter('ff_event_critical'); +$ff_type = (int) get_parameter('ff_type'); +$each_ff = (int) get_parameter('each_ff', $module['each_ff']); +$ff_timeout = (int) get_parameter('ff_timeout'); +$unit = (string) get_parameter('unit'); +$id_tag = (array) get_parameter('id_tag_selected'); +$serialize_ops = (string) get_parameter('serialize_ops'); +$critical_instructions = (string) get_parameter('critical_instructions'); +$warning_instructions = (string) get_parameter('warning_instructions'); +$unknown_instructions = (string) get_parameter('unknown_instructions'); +$critical_inverse = (int) get_parameter('critical_inverse'); +$warning_inverse = (int) get_parameter('warning_inverse'); +$percentage_critical = (int) get_parameter('percentage_critical'); +$percentage_warning = (int) get_parameter('percentage_warning'); +$combo_snmp_oid = (string) get_parameter_post('combo_snmp_oid'); +$id_category = (int) get_parameter('id_category'); +$hour_from = get_parameter('hour_from'); +$minute_from = get_parameter('minute_from'); +$mday_from = get_parameter('mday_from'); +$month_from = get_parameter('month_from'); +$wday_from = get_parameter('wday_from'); +$hour_to = get_parameter('hour_to'); +$minute_to = get_parameter('minute_to'); +$mday_to = get_parameter('mday_to'); +$month_to = get_parameter('month_to'); +$wday_to = get_parameter('wday_to'); +$http_user = get_parameter('http_user'); +$http_pass = get_parameter('http_pass'); +$snmp_community = (string) get_parameter('snmp_community'); +$snmp_oid = (string) get_parameter('snmp_oid'); +$select_snmp_oid = (string) get_parameter('select_snmp_oid'); +$tcp_send = (string) get_parameter('snmp_version'); +$plugin_user = (string) get_parameter('snmp3_auth_user'); +$snmp3_auth_pass = (string) get_parameter('snmp3_auth_pass'); +$snmp3_privacy_pass = (string) get_parameter('snmp3_privacy_pass'); +$snmp3_security_level = (string) get_parameter('snmp3_security_level'); +$snmp3_auth_method = (string) get_parameter('snmp3_auth_method'); +$custom_string_1 = (string) get_parameter('snmp3_privacy_method'); +$command_os = (string) get_parameter('command_os'); +$command_text = (string) get_parameter('command_text'); +$command_credential_identifier = (string) get_parameter('command_credential_identifier'); +$plugin_user = (string) get_parameter('plugin_user'); +$id_module_component_type = (int) get_parameter('id_module_component_type'); +$plugin_parameter = (string) get_parameter('plugin_parameter'); +$parent_module_id = (int) get_parameter('parent_module_id'); +$ip_target = (string) get_parameter('ip_target'); +$estimation_type = (string) get_parameter('estimation_type', 'estimation_calculation'); +$estimation_days = (int) get_parameter('estimation_days', -1); +$estimation_interval = (string) get_parameter('estimation_interval', '300'); +$active_snmp_v3 = get_parameter('active_snmp_v3'); +$throw_unknown_events = (bool) get_parameter('throw_unknown_events'); +$module_macro_names = (array) get_parameter('module_macro_names'); +$module_macro_values = (array) get_parameter('module_macro_values'); +$moduletype = (int) get_parameter('moduletype'); +$id_extension = (int) get_parameter('id_extension'); +$updateGisData = get_parameter('update_gis_data'); +$lastLatitude = get_parameter('latitude'); +$lastLongitude = get_parameter('longitude'); +$lastAltitude = get_parameter('altitude'); +$idAgente = get_parameter('id_agente'); +// Get macros. +$macros = (string) get_parameter('macros'); +$macros_names = (array) get_parameter('macro_name', []); +// Actions. +$pure = (bool) get_parameter('pure'); +$create_agent = (bool) get_parameter('create_agent'); +$update_agent = (bool) get_parameter('update_agent'); +$delete_conf_file = (bool) get_parameter('delete_conf_file'); +$action_delete_ip = (bool) get_parameter('delete_ip'); +$updateGIS = (bool) get_parameter('update_gis'); +$update_module = (bool) get_parameter('update_module'); +$create_module = (bool) get_parameter('create_module'); +$edit_module = (bool) get_parameter('edit_module'); +$delete_module = (bool) get_parameter('delete_module'); +$enable_module = (int) get_parameter('enable_module'); +$disable_module = (int) get_parameter('disable_module'); +// It is the id_agent_module to duplicate. +$duplicate_module = (int) get_parameter('duplicate_module'); + +// Variable definitions. $group = 0; $all_groups = [$group]; -if ($id_agente) { +if ($id_agente > 0) { $group = agents_get_agent_group($id_agente); $all_groups = agents_get_all_groups_agent($id_agente, $group); } -if (!check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { +if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === false) { $access_granted = false; switch ($tab) { case 'alert': case 'module': - if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AD')) { + if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AD') === true) { $access_granted = true; } break; @@ -69,7 +229,7 @@ if (!check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { break; } - if (!$access_granted) { + if ($access_granted === false) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to access agent manager' @@ -83,22 +243,10 @@ require_once 'include/functions_modules.php'; require_once 'include/functions_alerts.php'; require_once 'include/functions_reporting.php'; -// Get passed variables. -$alerttype = get_parameter('alerttype'); -$id_agent_module = (int) get_parameter('id_agent_module'); - // Init vars. -$descripcion = ''; -$comentarios = ''; -$campo_1 = ''; -$campo_2 = ''; -$campo_3 = ''; -$maximo = 0; -$minimo = 0; $nombre_agente = ''; -$alias = get_parameter('alias', ''); $alias_as_name = 0; -$direccion_agente = get_parameter('direccion', ''); +$direccion_agente = $agentAddress; $direccion_agente = trim(io_safe_output($direccion_agente)); $direccion_agente = io_safe_input($direccion_agente); $unique_ip = 0; @@ -110,20 +258,6 @@ $id_server = ''; $max_alerts = 0; $modo = 1; $update_module = 0; -$modulo_id_agente = ''; -$modulo_id_tipo_modulo = ''; -$modulo_nombre = ''; -$modulo_descripcion = ''; -$alerta_id_aam = ''; -$alerta_campo1 = ''; -$alerta_campo2 = ''; -$alerta_campo3 = ''; -$alerta_dis_max = ''; -$alerta_dis_min = ''; -$alerta_min_alerts = 0; -$alerta_max_alerts = 1; -$alerta_time_threshold = ''; -$alerta_descripcion = ''; $disabled = ''; $id_parent = 0; $modulo_max = ''; @@ -174,31 +308,23 @@ $quiet = 0; $macros = ''; $cps = 0; $fixed_ip = 0; - -$create_agent = (bool) get_parameter('create_agent'); $module_macros = []; // Create agent. -if ($create_agent) { - $mssg_warning = 0; - $alias_safe_output = strip_tags(io_safe_output(get_parameter('alias', ''))); +if ($create_agent === true) { + $mssg_warning = false; + $alias_safe_output = strip_tags(io_safe_output($alias)); $alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output))); - $alias_as_name = (int) get_parameter_post('alias_as_name', 0); - $direccion_agente = (string) get_parameter_post('direccion', ''); - $unique_ip = (int) get_parameter_post('unique_ip', 0); - // Safe_output only validate ip. $direccion_agente = trim(io_safe_output($direccion_agente)); - if (!validate_address($direccion_agente)) { - $mssg_warning = 1; + if (validate_address($direccion_agente) === false) { + $mssg_warning = true; } // Safe-input before validate ip. $direccion_agente = io_safe_input($direccion_agente); - - $nombre_agente = hash('sha256', $alias.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000))); - $grupo = (int) get_parameter_post('grupo'); + $nombre_agente = hash_agent_name($alias, $nombre_agente); if ((bool) check_acl($config['id_user'], $grupo, 'AW') === false) { db_pandora_audit( @@ -209,26 +335,6 @@ if ($create_agent) { return; } - $intervalo = (string) get_parameter_post('intervalo', SECONDS_5MINUTES); - $comentarios = (string) get_parameter_post('comentarios', ''); - $modo = (int) get_parameter_post('modo'); - $id_parent = (int) get_parameter_post('id_agent_parent'); - $server_name = (string) get_parameter_post('server_name'); - $id_os = (int) get_parameter_post('id_os'); - $disabled = (int) get_parameter_post('disabled'); - $custom_id = (string) get_parameter_post('custom_id', ''); - $cascade_protection = (int) get_parameter_post('cascade_protection', 0); - $cascade_protection_module = (int) get_parameter_post('cascade_protection_module', 0); - $safe_mode = (int) get_parameter_post('safe_mode', 0); - $safe_mode_module = (int) get_parameter_post('safe_mode_module', 0); - $icon_path = (string) get_parameter_post('icon_path', ''); - $update_gis_data = (int) get_parameter_post('update_gis_data', 0); - $url_description = (string) get_parameter('url_description'); - $quiet = (int) get_parameter('quiet', 0); - $cps = (int) get_parameter_switch('cps', -1); - $fixed_ip = (int) get_parameter_switch('fixed_ip', 0); - - $secondary_groups = (string) get_parameter('secondary_hidden', ''); $fields = db_get_all_fields_in_table('tagent_custom_fields'); if ($fields === false) { @@ -242,14 +348,14 @@ if ($create_agent) { } // Check if agent exists (BUG WC-50518-2). - if ($alias == '') { + if (empty($alias) === true) { $agent_creation_error = __('No agent alias specified'); $agent_created_ok = 0; } else if (group_allow_more_agents($grupo, true, 'create') === false) { $agent_creation_error = __('Agent cannot be created due to the maximum agent limit for this group'); $agent_created_ok = 0; } else { - if ($alias_as_name) { + if ((bool) $alias_as_name === true) { $sql = 'SELECT nombre FROM tagente WHERE nombre = "'.$alias.'"'; $exists_alias = db_get_row_sql($sql); $nombre_agente = $alias; @@ -443,12 +549,7 @@ if ($id_agente) { ] ).'</a>'; - if ($tab == 'template') { - $templatetab['active'] = true; - } else { - $templatetab['active'] = false; - } - + $templatetab['active'] = ($tab === 'template'); // Inventory. $inventorytab = enterprise_hook('inventory_tab'); @@ -491,35 +592,42 @@ if ($id_agente) { } // Group tab. - $grouptab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&ag_group='.$group.'">'.html_print_image( - 'images/group.png', - true, + $grouptab['text'] = html_print_anchor( [ - 'title' => __('Group'), - 'class' => 'invert_filter', - ] - ).'</a>'; + 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&ag_group='.$group, + 'content' => html_print_image( + 'images/group.png', + true, + [ + 'title' => __('Group'), + 'class' => 'invert_filter', + ] + ), + ], + true + ); $grouptab['active'] = false; $gistab = []; - // GIS tab. - if ($config['activate_gis']) { - $gistab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=gis&id_agente='.$id_agente.'">'.html_print_image( - 'images/gm_gis.png', - true, + if ((bool) $config['activate_gis'] === true) { + $gistab['text'] = html_print_anchor( [ - 'title' => __('GIS data'), - 'class' => 'invert_filter', - ] - ).'</a>'; + 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=gis&id_agente='.$id_agente, + 'content' => html_print_image( + 'images/gm_gis.png', + true, + [ + 'title' => __('GIS data'), + 'class' => 'invert_filter', + ] + ), + ], + true + ); - if ($tab == 'gis') { - $gistab['active'] = true; - } else { - $gistab['active'] = false; - } + $gistab['active'] = ($tab === 'gis'); } // Agent wizard tab. @@ -565,89 +673,71 @@ if ($id_agente) { ).'</a>'; $agent_wizard['sub_menu'] .= '</li>'; $agent_wizard['sub_menu'] .= '</ul>'; - - - if ($tab == 'agent_wizard') { - $agent_wizard['active'] = true; - } else { - $agent_wizard['active'] = false; - } - + $agent_wizard['active'] = ($tab === 'agent_wizard'); $total_incidents = agents_get_count_incidents($id_agente); // Incident tab. if ($total_incidents > 0) { - $incidenttab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=incident&id_agente='.$id_agente.'">'.html_print_image( - 'images/book_edit.png', - true, + $incidenttab['text'] = html_print_anchor( [ - 'title' => __('Incidents'), - 'class' => 'invert_filter', - ] - ).'</a>'; + 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=incident&id_agente='.$id_agente, + 'content' => html_print_image( + 'images/book_edit.png', + true, + [ + 'title' => __('Incidents'), + 'class' => 'invert_filter', + ] + ), + ], + true + ); - if ($tab == 'incident') { - $incidenttab['active'] = true; - } else { - $incidenttab['active'] = false; - } + $incidenttab['active'] = ($tab === 'incident'); } - if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { - if ($has_remote_conf) { + if ((bool) check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === true) { + $onheader = [ + 'view' => $viewtab, + 'separator' => '', + 'main' => $maintab, + 'module' => $moduletab, + 'ncm' => $ncm_tab, + 'alert' => $alerttab, + 'template' => $templatetab, + 'inventory' => $inventorytab, + 'pluginstab' => $pluginstab, + 'collection' => $collectiontab, + 'group' => $grouptab, + 'gis' => $gistab, + 'agent_wizard' => $agent_wizard, + + ]; + + if ((bool) $has_remote_conf === true) { $agent_name = agents_get_name($id_agente); $agent_name = io_safe_output($agent_name); $agent_md5 = md5($agent_name, false); - $remote_configuration_tab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=remote_configuration&id_agente='.$id_agente.'&disk_conf='.$agent_md5.'">'.html_print_image( - 'images/remote_configuration.png', - true, + $remote_configuration_tab['text'] = html_print_anchor( [ - 'title' => __('Remote configuration'), - 'class' => 'invert_filter', - ] - ).'</a>'; - if ($tab == 'remote_configuration') { - $remote_configuration_tab['active'] = true; - } else { - $remote_configuration_tab['active'] = false; - } + '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.png', + true, + [ + 'title' => __('Remote configuration'), + 'class' => 'invert_filter', + ] + ), + ], + true + ); + $remote_configuration_tab['active'] = ($tab === 'remote_configuration'); - $onheader = [ - 'view' => $viewtab, - 'separator' => '', - 'main' => $maintab, - 'remote_configuration' => $remote_configuration_tab, - 'module' => $moduletab, - 'ncm' => $ncm_tab, - 'alert' => $alerttab, - 'template' => $templatetab, - 'inventory' => $inventorytab, - 'pluginstab' => $pluginstab, - 'collection' => $collectiontab, - 'group' => $grouptab, - 'gis' => $gistab, - 'agent_wizard' => $agent_wizard, - ]; - } else { - $onheader = [ - 'view' => $viewtab, - 'separator' => '', - 'main' => $maintab, - 'module' => $moduletab, - 'ncm' => $ncm_tab, - 'alert' => $alerttab, - 'template' => $templatetab, - 'inventory' => $inventorytab, - 'pluginstab' => $pluginstab, - 'collection' => $collectiontab, - 'group' => $grouptab, - 'gis' => $gistab, - 'agent_wizard' => $agent_wizard, - - ]; + $onheader[] = $remote_configuration_tab; } // Only if the agent has incidents associated show incidents tab. @@ -665,14 +755,12 @@ if ($id_agente) { // Extensions tabs. foreach ($config['extensions'] as $extension) { - if (isset($extension['extension_god_tab'])) { + if (isset($extension['extension_god_tab']) === true) { if (check_acl($config['id_user'], $group, $extension['extension_god_tab']['acl'])) { $image = $extension['extension_god_tab']['icon']; $name = $extension['extension_god_tab']['name']; $id = $extension['extension_god_tab']['id']; - $id_extension = get_parameter('id_extension', ''); - if ($id_extension == $id) { $active = true; } else { @@ -719,7 +807,6 @@ if ($id_agente) { break; case 'module': - $type_module_t = get_parameter('moduletype', ''); $tab_name = __('Modules'); if ($type_module_t === 'webux') { $help_header = 'wux_console'; @@ -751,7 +838,7 @@ if ($id_agente) { break; case 'agent_wizard': - switch (get_parameter('wizard_section')) { + switch ($wizardSection) { case 'snmp_explorer': $help_header = 'agent_snmp_explorer_tab'; $tab_name = __('SNMP Wizard'); @@ -774,7 +861,6 @@ if ($id_agente) { break; case 'extension': - $id_extension = get_parameter('id_extension', ''); switch ($id_extension) { case 'snmp_explorer': $tab_description = '- '.__('SNMP explorer'); @@ -792,14 +878,12 @@ if ($id_agente) { break; } - $helper = ($help_header === 'main_tab') ? 'main_tab' : ''; - $pure = get_parameter('pure', 0); - if (!$pure) { + if ($pure === false) { ui_print_standard_header( agents_get_alias($id_agente), 'images/agent.png', false, - $helper, + ($help_header === 'main_tab') ? $help_header : '', false, $onheader, [ @@ -839,9 +923,7 @@ if ($id_agente) { ); } -$delete_conf_file = (bool) get_parameter('delete_conf_file'); - -if ($delete_conf_file) { +if ($delete_conf_file === true) { $correct = false; // Delete remote configuration. if (isset($config['remote_config'])) { @@ -865,8 +947,8 @@ if ($delete_conf_file) { } // Show agent creation results. -if ($create_agent) { - if (!isset($agent_creation_error)) { +if ($create_agent === true) { + if (isset($agent_creation_error) === false) { $agent_creation_error = __('Could not be created'); } @@ -876,14 +958,13 @@ if ($create_agent) { $agent_creation_error ); - if ($mssg_warning) { + if ($mssg_warning === true) { ui_print_warning_message(__('The ip or dns name entered cannot be resolved')); } } // Fix / Normalize module data. -if (isset($_GET['fix_module'])) { - $id_module = get_parameter_get('fix_module', 0); +if (isset($_GET['fix_module']) === true) { // Get info about this module. $media = reporting_get_agentmodule_data_average($id_module, 30758400); // Get average over the year. @@ -892,7 +973,7 @@ if (isset($_GET['fix_module'])) { $result = true; // If the value of media is 0 or something went wrong, don't delete. - if (!empty($media)) { + if (empty($media) === false) { $where = [ 'datos' => '>'.$media, 'id_agente_modulo' => $id_module, @@ -918,31 +999,23 @@ if (isset($_GET['fix_module'])) { ); } -$update_agent = (bool) get_parameter('update_agent'); - // Update AGENT. -if ($update_agent) { +if ($update_agent === true) { // If modified some agent paramenter. - $mssg_warning = 0; - $id_agente = (int) get_parameter_post('id_agente'); - $nombre_agente = str_replace('`', '‘', (string) get_parameter_post('agente', '')); - $alias_safe_output = strip_tags(io_safe_output(get_parameter('alias', ''))); + $mssg_warning = false; + $nombre_agente = str_replace('`', '‘', $agentName); + $alias_safe_output = strip_tags(io_safe_output($alias)); $alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output))); - $alias_as_name = (int) get_parameter_post('alias_as_name', 0); - $direccion_agente = (string) get_parameter_post('direccion', ''); - $unique_ip = (int) get_parameter_post('unique_ip', 0); // Safe_output only validate ip. $direccion_agente = trim(io_safe_output($direccion_agente)); - if (!validate_address($direccion_agente)) { - $mssg_warning = 1; + if (validate_address($direccion_agente) === false) { + $mssg_warning = true; } // Safe-input before validate ip. $direccion_agente = io_safe_input($direccion_agente); - $address_list = (string) get_parameter_post('address_list', ''); - if ($address_list != $direccion_agente && $direccion_agente == agents_get_address($id_agente) && $address_list != agents_get_address($id_agente) @@ -954,34 +1027,14 @@ if ($update_agent) { * c) selectbox is not the current IP. */ - if (!empty($address_list)) { + if (empty($address_list) === false) { $direccion_agente = $address_list; } } - $grupo = (int) get_parameter_post('grupo', 0); - $intervalo = (int) get_parameter_post('intervalo', SECONDS_5MINUTES); - $comentarios = str_replace('`', '‘', (string) get_parameter_post('comentarios', '')); - $modo = (int) get_parameter_post('modo', 0); - // Mode: Learning, Normal or Autodisabled. - $id_os = (int) get_parameter_post('id_os'); - $disabled = (bool) get_parameter_post('disabled'); - $server_name = (string) get_parameter_post('server_name', ''); - $id_parent = (int) get_parameter_post('id_agent_parent'); - $custom_id = (string) get_parameter_post('custom_id', ''); - $cascade_protection = (int) get_parameter_post('cascade_protection', 0); - $cascade_protection_module = (int) get_parameter('cascade_protection_module', 0); - $safe_mode_module = (int) get_parameter('safe_mode_module', 0); - $icon_path = (string) get_parameter_post('icon_path', ''); - $update_gis_data = (int) get_parameter_post('update_gis_data', 0); - $url_description = (string) get_parameter('url_description'); - $quiet = (int) get_parameter('quiet', 0); - $cps = get_parameter_switch('cps', -1); + $comentarios = str_replace('`', '‘', $comentarios); $old_values = db_get_row('tagente', 'id_agente', $id_agente); $fields = db_get_all_fields_in_table('tagent_custom_fields'); - $secondary_groups = (string) get_parameter('secondary_hidden', ''); - $satellite_server = (int) get_parameter('satellite_server', 0); - $fixed_ip = (int) get_parameter_switch('fixed_ip', 0); if ($fields === false) { $fields = []; @@ -1028,12 +1081,12 @@ if ($update_agent) { } } - if ($mssg_warning) { + if ($mssg_warning === true) { ui_print_warning_message(__('The ip or dns name entered cannot be resolved')); } // Verify if there is another agent with the same name but different ID. - if ($alias == '') { + if (empty($alias) === true) { ui_print_error_message(__('No agent alias specified')); // If there is an agent with the same name, but a different ID. } @@ -1052,16 +1105,14 @@ if ($update_agent) { ui_print_error_message(__('Duplicate main IP address')); } else { // If different IP is specified than previous, add the IP. - if ($direccion_agente != '' + if (empty($direccion_agente) === false && $direccion_agente != agents_get_address($id_agente) ) { agents_add_address($id_agente, $direccion_agente); } - $action_delete_ip = (bool) get_parameter('delete_ip', false); // If IP is set for deletion, delete first. - if ($action_delete_ip) { - $delete_ip = get_parameter_post('address_list'); + if ($action_delete_ip === true) { if (empty($direccion_agente) === true) { $direccion_agente = agents_delete_address($id_agente, $delete_ip, true); } else { @@ -1194,7 +1245,7 @@ if ($id_agente) { } $agent = db_get_row('tagente', 'id_agente', $id_agente, false, false); - if (empty($agent)) { + if (empty($agent) === true) { // Close out the page. ui_print_error_message(__('There was a problem loading the agent')); return; @@ -1203,9 +1254,9 @@ if ($id_agente) { $intervalo = $agent['intervalo']; // Define interval in seconds. $nombre_agente = $agent['nombre']; - if (empty($alias)) { + if (empty($alias) === true) { $alias = $agent['alias']; - if (empty($alias)) { + if (empty($alias) === true) { $alias = $nombre_agente; } } @@ -1234,15 +1285,6 @@ if ($id_agente) { $fixed_ip = (int) $agent['fixed_ip']; } -$update_module = (bool) get_parameter('update_module'); -$create_module = (bool) get_parameter('create_module'); -$delete_module = (bool) get_parameter('delete_module'); -$enable_module = (int) get_parameter('enable_module'); -$disable_module = (int) get_parameter('disable_module'); -// It is the id_agent_module to duplicate. -$duplicate_module = (int) get_parameter('duplicate_module'); -$edit_module = (bool) get_parameter('edit_module'); - // GET DATA for MODULE UPDATE OR MODULE INSERT. if ($update_module || $create_module) { $id_grupo = agents_get_agent_group($id_agente); @@ -1257,56 +1299,23 @@ if ($update_module || $create_module) { exit; } - $id_agent_module = (int) get_parameter('id_agent_module'); - $id_module_type = (int) get_parameter('id_module_type'); - $name = (string) get_parameter('name'); - $description = (string) get_parameter('description'); - $id_module_group = (int) get_parameter('id_module_group'); - $flag = (bool) get_parameter('flag'); - /* * Don't read as (float) because it lost it's decimals when put into MySQL * where are very big and PHP uses scientific notation, p.e: * 1.23E-10 is 0.000000000123. */ - $post_process = (string) get_parameter('post_process', 0.0); - if (get_parameter('prediction_module')) { - $prediction_module = 1; - } else { - $prediction_module = 0; - } - - $max_timeout = (int) get_parameter('max_timeout'); - $max_retries = (int) get_parameter('max_retries'); - $min = (int) get_parameter('min'); - $max = (int) get_parameter('max'); - $interval = (int) get_parameter('module_interval', $intervalo); - $ff_interval = (int) get_parameter('module_ff_interval'); - $quiet_module = (int) get_parameter('quiet_module'); - $cps_module = (int) get_parameter('cps_module'); - $id_plugin = (int) get_parameter('id_plugin'); - $id_export = (int) get_parameter('id_export'); - $disabled = (bool) get_parameter('disabled'); - $tcp_send = (string) get_parameter('tcp_send'); - $tcp_rcv = (string) get_parameter('tcp_rcv'); - $tcp_port = (int) get_parameter('tcp_port'); - // Correction in order to not insert 0 as port. - $is_port_empty = get_parameter('tcp_port', ''); - if ($is_port_empty === '') { + if (empty($is_port_empty) === true) { $tcp_port = null; } - $configuration_data = (string) get_parameter('configuration_data'); - $old_configuration_data = (string) get_parameter('old_configuration_data'); $new_configuration_data = ''; - $custom_string_1_default = ''; $custom_string_2_default = ''; $custom_string_3_default = ''; $custom_integer_1_default = 0; $custom_integer_2_default = 0; - if ($update_module) { + if ($update_module === true) { $module = modules_get_agentmodule($id_agent_module); $custom_string_1_default = $module['custom_string_1']; @@ -1318,33 +1327,26 @@ if ($update_module || $create_module) { if ($id_module_type === 25) { // Web analysis, from MODULE_WUX. - $custom_string_1 = base64_encode((string) get_parameter('custom_string_1')); + $custom_string_1 = base64_encode($custom_string_1); // If the custom_string_1 parameter come empty, set the content // of the module (it is base64_encoded). if (empty($custom_string_1) === true) { $custom_string_1 = $custom_string_1_default; } - - $custom_integer_1 = (int) get_parameter('custom_integer_1', $custom_integer_1_default); - } else { - $custom_string_1 = (string) get_parameter('custom_string_1', $custom_string_1_default); - $custom_integer_1 = (int) get_parameter('prediction_module', $custom_integer_1_default); } - $custom_string_2 = (string) get_parameter('custom_string_2', $custom_string_2_default); - $custom_string_3 = (string) get_parameter('custom_string_3', $custom_string_3_default); - $custom_integer_2 = (int) get_parameter('custom_integer_2', 0); - - // Get macros. - $macros = (string) get_parameter('macros'); - $macros_names = (array) get_parameter('macro_name', []); + $custom_string_1 = (empty($custom_string_1) === true) ? $custom_string_1_default : $custom_string_1; + $custom_string_2 = (empty($custom_string_2) === true) ? $custom_string_2_default : $custom_string_2; + $custom_string_3 = (empty($custom_string_3) === true) ? $custom_string_3_default : $custom_string_3; + $custom_integer_1 = ($custom_integer_1 === 0) ? $custom_integer_1_default : $custom_integer_1; + $custom_integer_2 = ($custom_integer_2 === 0) ? $custom_integer_2_default : $custom_integer_2; if (empty($macros) === false) { $macros = json_decode(base64_decode($macros), true); foreach ($macros as $k => $m) { $m_hide = '0'; - if (isset($m['hide'])) { + if (isset($m['hide']) === true) { $m_hide = $m['hide']; } @@ -1397,146 +1399,79 @@ if ($update_module || $create_module) { agents_get_name($id_agente) ); - $snmp_community = (string) get_parameter('snmp_community'); - $snmp_oid = (string) get_parameter('snmp_oid'); // Change double quotes by single. $snmp_oid = preg_replace('/"/', ''', $snmp_oid); if (empty($snmp_oid) === true) { // The user did not set any OID manually but did a SNMP walk. - $snmp_oid = (string) get_parameter('select_snmp_oid'); + $snmp_oid = $select_snmp_oid; } if ($id_module_type >= 15 && $id_module_type <= 18) { // New support for snmp v3. - $tcp_send = (string) get_parameter('snmp_version'); - $plugin_user = (string) get_parameter('snmp3_auth_user'); - $plugin_pass = io_input_password( - (string) get_parameter('snmp3_auth_pass') - ); - $plugin_parameter = (string) get_parameter('snmp3_auth_method'); - - $custom_string_1 = (string) get_parameter('snmp3_privacy_method'); - $custom_string_2 = io_input_password( - (string) get_parameter('snmp3_privacy_pass') - ); - $custom_string_3 = (string) get_parameter('snmp3_security_level'); + $plugin_pass = io_input_password($snmp3_auth_pass); + $custom_string_1 = $snmp3_privacy_method; + $custom_string_2 = io_input_password($snmp3_privacy_pass); + $custom_string_3 = $snmp3_security_level; + $plugin_parameter = $snmp3_auth_method; } else if ($id_module_type >= 34 && $id_module_type <= 37) { - $tcp_send = (string) get_parameter('command_text'); - $custom_string_1 = (string) get_parameter( - 'command_credential_identifier' - ); - $custom_string_2 = (string) get_parameter('command_os'); + $tcp_send = $command_text; + $custom_string_1 = $command_credential_identifier; + $custom_string_2 = $command_os; } else { - $plugin_user = (string) get_parameter('plugin_user'); - if (get_parameter('id_module_component_type') == 7) { - $plugin_pass = (int) get_parameter('plugin_pass'); - } else { - $plugin_pass = io_input_password( - (string) get_parameter('plugin_pass') - ); + if ($id_module_component_type !== 7) { + $plugin_pass = io_input_password($plugin_pass); } - - $plugin_parameter = (string) get_parameter('plugin_parameter'); } - $parent_module_id = (int) get_parameter('parent_module_id'); - $ip_target = (string) get_parameter('ip_target'); // No autofill if the module is a webserver module. - if ($ip_target == '' + if (empty($ip_target) === true && $id_module_type < MODULE_TYPE_WEB_DATA && $id_module_type > MODULE_TYPE_WEB_CONTENT_STRING ) { $ip_target = 'auto'; } - $custom_id = (string) get_parameter('custom_id'); - $history_data = (int) get_parameter('history_data'); - $dynamic_interval = (int) get_parameter('dynamic_interval'); - $dynamic_max = (int) get_parameter('dynamic_max'); - $dynamic_min = (int) get_parameter('dynamic_min'); - $dynamic_two_tailed = (int) get_parameter('dynamic_two_tailed'); - $min_warning = (float) get_parameter('min_warning'); - $max_warning = (float) get_parameter('max_warning'); - $str_warning = (string) get_parameter('str_warning'); - $min_critical = (float) get_parameter('min_critical'); - $max_critical = (float) get_parameter('max_critical'); - $str_critical = (string) get_parameter('str_critical'); - $ff_event = (int) get_parameter('ff_event'); - $ff_event_normal = (int) get_parameter('ff_event_normal'); - $ff_event_warning = (int) get_parameter('ff_event_warning'); - $ff_event_critical = (int) get_parameter('ff_event_critical'); - $ff_type = (int) get_parameter('ff_type'); - $each_ff = (int) get_parameter('each_ff', $module['each_ff']); - $ff_timeout = (int) get_parameter('ff_timeout'); - $unit = (string) get_parameter('unit'); if ($unit === '0') { $unit = ''; } - $id_tag = (array) get_parameter('id_tag_selected'); - $serialize_ops = (string) get_parameter('serialize_ops'); - $critical_instructions = (string) get_parameter('critical_instructions'); - $warning_instructions = (string) get_parameter('warning_instructions'); - $unknown_instructions = (string) get_parameter('unknown_instructions'); - $critical_inverse = (int) get_parameter('critical_inverse'); - $warning_inverse = (int) get_parameter('warning_inverse'); - $percentage_critical = (int) get_parameter('percentage_critical'); - $percentage_warning = (int) get_parameter('percentage_warning'); - - $id_category = (int) get_parameter('id_category'); - - $hour_from = get_parameter('hour_from'); - $minute_from = get_parameter('minute_from'); - $mday_from = get_parameter('mday_from'); - $month_from = get_parameter('month_from'); - $wday_from = get_parameter('wday_from'); - - $hour_to = get_parameter('hour_to'); - $minute_to = get_parameter('minute_to'); - $mday_to = get_parameter('mday_to'); - $month_to = get_parameter('month_to'); - $wday_to = get_parameter('wday_to'); - - $http_user = get_parameter('http_user'); - $http_pass = get_parameter('http_pass'); - - if ($hour_to != '*') { + if ($hour_to !== '*') { $hour_to = '-'.$hour_to; } else { $hour_to = ''; } - if ($minute_to != '*') { + if ($minute_to !== '*') { $minute_to = '-'.$minute_to; } else { $minute_to = ''; } - if ($mday_to != '*') { + if ($mday_to !== '*') { $mday_to = '-'.$mday_to; } else { $mday_to = ''; } - if ($month_to != '*') { + if ($month_to !== '*') { $month_to = '-'.$month_to; } else { $month_to = ''; } - if ($wday_to != '*') { + if ($wday_to !== '*') { $wday_to = '-'.$wday_to; } else { $wday_to = ''; } $cron_interval = $minute_from.$minute_to.' '.$hour_from.$hour_to.' '.$mday_from.$mday_to.' '.$month_from.$month_to.' '.$wday_from.$wday_to; - if (!cron_check_syntax($cron_interval)) { + if (cron_check_syntax($cron_interval) === false) { $cron_interval = ''; } - if ($prediction_module != MODULE_PREDICTION_SYNTHETIC) { + if ((int) $prediction_module !== MODULE_PREDICTION_SYNTHETIC) { unset($serialize_ops); enterprise_hook( 'modules_delete_synthetic_operations', @@ -1545,30 +1480,17 @@ if ($update_module || $create_module) { } if ($prediction_module === MODULE_PREDICTION_PLANNING) { - $custom_string_2 = get_parameter('estimation_type', 'estimation_calculation'); + $custom_string_2 = $estimation_type; if ($custom_string_2 === 'estimation_calculation') { - $custom_string_1 = get_parameter('estimation_days', -1); + $custom_string_1 = $estimation_days; } else { - $custom_string_1 = get_parameter('estimation_interval', '300'); + $custom_string_1 = $estimation_interval; } } - $active_snmp_v3 = get_parameter('active_snmp_v3'); - - /* - * if ($active_snmp_v3) { - * // LOST CODE?. - * - * } - */ - - $throw_unknown_events = (bool) get_parameter('throw_unknown_events', false); // Set the event type that can show. $disabled_types_event = [EVENTS_GOING_UNKNOWN => (int) $throw_unknown_events]; $disabled_types_event = io_json_mb_encode($disabled_types_event); - - $module_macro_names = (array) get_parameter('module_macro_names', []); - $module_macro_values = (array) get_parameter('module_macro_values', []); $module_macros = modules_get_module_macros_json($module_macro_names, $module_macro_values); // Make changes in the conf file if necessary. @@ -1582,9 +1504,7 @@ if ($update_module || $create_module) { $success_action = NOERR; // MODULE UPDATE. -if ($update_module) { - $id_agent_module = (int) get_parameter('id_agent_module'); - +if ($update_module === true) { $values = [ 'id_agente_modulo' => $id_agent_module, 'descripcion' => $description, @@ -1654,13 +1574,13 @@ if ($update_module) { ]; - if ($id_module_type == 30 || $id_module_type == 31 || $id_module_type == 32 || $id_module_type == 33) { + if ($id_module_type === 30 || $id_module_type === 31 || $id_module_type === 32 || $id_module_type === 33) { $plugin_parameter_split = explode('
', $values['plugin_parameter']); $values['plugin_parameter'] = ''; foreach ($plugin_parameter_split as $key => $value) { - if ($key == 1) { + if ((int) $key === 1) { if ($http_user) { $values['plugin_parameter'] .= 'http_auth_user '.$http_user.'
'; } @@ -1668,23 +1588,21 @@ if ($update_module) { if ($http_pass) { $values['plugin_parameter'] .= 'http_auth_pass '.$http_pass.'
'; } - - $values['plugin_parameter'] .= $value.'
'; - } else { - $values['plugin_parameter'] .= $value.'
'; } + + $values['plugin_parameter'] .= $value.'
'; } } // In local modules, the interval is updated by agent. - $module_kind = (int) get_parameter('moduletype'); - if ($module_kind == MODULE_DATA) { + $module_kind = $moduletype; + if ($module_kind === MODULE_DATA) { unset($values['module_interval']); } - if ($prediction_module == MODULE_PREDICTION_SYNTHETIC - && $serialize_ops == '' + if ($prediction_module === MODULE_PREDICTION_SYNTHETIC + && empty($serialize_ops) === true ) { $result = false; } else { @@ -1693,10 +1611,10 @@ if ($update_module) { FROM tagente_modulo WHERE id_agente_modulo ='.$id_agent_module ); - if (($check_dynamic['dynamic_interval'] == $dynamic_interval) - && ($check_dynamic['dynamic_max'] == $dynamic_max) - && ($check_dynamic['dynamic_min'] == $dynamic_min) - && ($check_dynamic['dynamic_two_tailed'] == $dynamic_two_tailed) + if (((int) $check_dynamic['dynamic_interval'] === $dynamic_interval) + && ((int) $check_dynamic['dynamic_max'] === $dynamic_max) + && ((int) $check_dynamic['dynamic_min'] === $dynamic_min) + && ((int) $check_dynamic['dynamic_two_tailed'] === $dynamic_two_tailed) ) { $result = modules_update_agent_module($id_agent_module, $values, false, $id_tag); } else { @@ -1705,7 +1623,7 @@ if ($update_module) { } } - if (is_error($result)) { + if (is_error($result) === true) { switch ($result) { case ERR_EXIST: $msg = __('There was a problem updating module. Another module already exists with the same name.'); @@ -1768,32 +1686,14 @@ if ($update_module) { } // MODULE INSERT. -if ($create_module) { +if ($create_module === true) { // Old configuration data must always be empty in case of creation. $old_configuration_data = ''; - if (isset($_POST['combo_snmp_oid'])) { - $combo_snmp_oid = get_parameter_post('combo_snmp_oid'); - } - - if ($snmp_oid == '') { + if (empty($snmp_oid) === true) { $snmp_oid = $combo_snmp_oid; } - $id_module = (int) get_parameter('id_module'); - - switch ($config['dbtype']) { - case 'oracle': - if (empty($description) || !isset($description)) { - $description = ' '; - } - break; - - default: - // Default. - break; - } - $values = [ 'id_tipo_modulo' => $id_module_type, 'descripcion' => $description, @@ -1883,7 +1783,7 @@ if ($create_module) { } } - if ($prediction_module == MODULE_PREDICTION_SYNTHETIC && $serialize_ops == '') { + if ($prediction_module === MODULE_PREDICTION_SYNTHETIC && empty($serialize_ops) === true) { $id_agent_module = false; } else { $id_agent_module = modules_create_agent_module( @@ -1895,7 +1795,7 @@ if ($create_module) { ); } - if (is_error($id_agent_module)) { + if (is_error($id_agent_module) === true) { switch ($id_agent_module) { case ERR_EXIST: $msg = __('There was a problem adding module. Another module already exists with the same name.'); @@ -1956,7 +1856,7 @@ if ($create_module) { // MODULE ENABLE/DISABLE // =====================. -if ($enable_module) { +if ($enable_module === true) { $result = modules_change_disabled($enable_module, 0); $module_name = modules_get_agentmodule_name($enable_module); @@ -1991,7 +1891,7 @@ if ($enable_module) { } } -if ($disable_module) { +if ($disable_module === true) { $result = modules_change_disabled($disable_module, 1); $module_name = modules_get_agentmodule_name($disable_module); @@ -2013,7 +1913,6 @@ if ($disable_module) { // Successfull action. $success_action = $result; - if ($result === NOERR) { db_pandora_audit( AUDIT_LOG_MODULE_MANAGEMENT, @@ -2051,19 +1950,18 @@ if ($update_module || $create_module // MODULE DELETION // =================. -if ($delete_module) { +if ($delete_module === true) { // DELETE agent module ! - $id_borrar_modulo = (int) get_parameter_get('delete_module', 0); $module_data = db_get_row_sql( 'SELECT tam.id_agente, tam.nombre FROM tagente_modulo tam, tagente_estado tae WHERE tam.id_agente_modulo = tae.id_agente_modulo - AND tam.id_agente_modulo = '.$id_borrar_modulo + AND tam.id_agente_modulo = '.$id_agent_module ); $id_grupo = (int) agents_get_agent_group($id_agente); $all_groups = agents_get_all_groups_agent($id_agente, $id_grupo); - if (! check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { + if ((bool) check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === false) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to delete a module without admin rights' @@ -2073,7 +1971,7 @@ if ($delete_module) { exit; } - if (empty($module_data) || $id_borrar_modulo < 1) { + if (empty($module_data) === true || $id_agent_module < 1) { db_pandora_audit( AUDIT_LOG_HACK_ATTEMPT, 'Expected variable from form is not correct' @@ -2084,10 +1982,10 @@ if ($delete_module) { } // Also call base function to delete modules. - modules_delete_agent_module($id_borrar_modulo); + modules_delete_agent_module($id_agent_module); // Check for errors. - if ($error != 0) { + if (isset($error) === true && (empty($error) === false || $error !== 0)) { ui_print_error_message(__('There was a problem deleting the module')); } else { echo '<script type="text/javascript"> @@ -2104,7 +2002,7 @@ if ($delete_module) { } // MODULE DUPLICATION. -if (!empty($duplicate_module)) { +if (empty($duplicate_module) === false) { // DUPLICATE agent module ! $id_duplicate_module = $duplicate_module; @@ -2113,14 +2011,14 @@ if (!empty($duplicate_module)) { $cont = 0; $exists = true; - while ($exists) { + while ($exists === true) { $exists = (bool) db_get_value( 'id_agente_modulo', 'tagente_modulo', 'nombre', $copy_name ); - if ($exists) { + if ($exists === true) { $cont++; $copy_name = io_safe_input( sprintf(__('copy of %s (%d)'), io_safe_output($original_name), $cont) @@ -2136,7 +2034,7 @@ if (!empty($duplicate_module)) { $agent = db_get_row('tagente', 'id_agente', $id_agente); - if ($result) { + if ((bool) $result === true) { db_pandora_audit( AUDIT_LOG_AGENT_MANAGEMENT, "Duplicate module '".$id_duplicate_module."' for agent ".$agent['alias'].' with the new id for clon '.$result @@ -2150,9 +2048,9 @@ if (!empty($duplicate_module)) { } // MODULE ENABLE/DISABLE. -if ($enable_module) { +if ($enable_module === true) { $result = modules_change_disabled($enable_module, 0); - $modulo_nombre = db_get_row_sql('SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = '.$enable_module.''); + $modulo_nombre = db_get_row_sql('SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = '.$enable_module); $modulo_nombre = io_safe_output($modulo_nombre['nombre']); if ($result === NOERR) { @@ -2175,9 +2073,9 @@ if ($enable_module) { ); } -if ($disable_module) { +if ($disable_module === true) { $result = modules_change_disabled($disable_module, 1); - $modulo_nombre = db_get_row_sql('SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = '.$disable_module.''); + $modulo_nombre = db_get_row_sql('SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = '.$disable_module); $modulo_nombre = io_safe_output($modulo_nombre['nombre']); if ($result === NOERR) { @@ -2201,17 +2099,9 @@ if ($disable_module) { } // UPDATE GIS. -$updateGIS = (bool) get_parameter('update_gis', 0); if ($updateGIS === true) { - $updateGisData = get_parameter('update_gis_data'); - $lastLatitude = get_parameter('latitude'); - $lastLongitude = get_parameter('longitude'); - $lastAltitude = get_parameter('altitude'); - $idAgente = get_parameter('id_agente'); - $previusAgentGISData = db_get_row_sql( - ' - SELECT * + 'SELECT * FROM tgis_data_status WHERE tagente_id_agente = '.$idAgente ); @@ -2324,20 +2214,18 @@ switch ($tab) { case 'extension': $found = false; foreach ($config['extensions'] as $extension) { - if (isset($extension['extension_god_tab'])) { + if (isset($extension['extension_god_tab']) === true) { $id = $extension['extension_god_tab']['id']; $function = $extension['extension_god_tab']['function']; - $id_extension = get_parameter('id_extension', ''); - - if ($id_extension == $id) { + if ($id_extension === (int) $id) { call_user_func_array($function, []); $found = true; } } } - if (!$found) { + if ($found === false) { ui_print_error_message(__('Invalid tab specified')); } break; @@ -2347,7 +2235,7 @@ switch ($tab) { break; default: - if (enterprise_hook('switch_agent_tab', [$tab])) { + if ((bool) enterprise_hook('switch_agent_tab', [$tab]) === true) { // This will make sure that blank pages will have at least some // debug info in them - do not translate debug. ui_print_error_message(__('Invalid tab specified')); @@ -2360,23 +2248,21 @@ switch ($tab) { <script type="text/javascript"> /* <![CDATA[ */ var wizard_tab_showed = 0; - $(document).ready (function () { - $('body').append('<div id="dialog"></div>'); // Control the tab and subtab hover. When mouse leave one, // check if is hover the other before hide the subtab $('.agent_wizard_tab').hover(agent_wizard_tab_show, agent_wizard_tab_hide); - + $('#module_form').submit(function() { - - var aget_id_os = '<?php echo agents_get_os(modules_get_agentmodule_agent(get_parameter('id_agent_module'))); ?>'; - - if('<?php echo io_safe_output(modules_get_agentmodule_name(get_parameter('id_agent_module'))); ?>' != $('#text-name').val() && - '<?php echo agents_get_os(modules_get_agentmodule_agent(get_parameter('id_agent_module'))); ?>' == 19){ - + + var aget_id_os = '<?php echo agents_get_os(modules_get_agentmodule_agent($id_agent_module)); ?>'; + + if('<?php echo io_safe_output(modules_get_agentmodule_name($id_agent_module)); ?>' != $('#text-name').val() && + '<?php echo agents_get_os(modules_get_agentmodule_agent($id_agent_module)); ?>' == 19){ + event.preventDefault(); - + $("#dialog").dialog({ resizable: true, draggable: true, @@ -2401,16 +2287,13 @@ switch ($tab) { } }] }); - - } - - var module_type_snmp = '<?php echo modules_get_agentmodule_type(get_parameter('id_agent_module')); ?>'; - - if('<?php echo io_safe_output(modules_get_agentmodule_name(get_parameter('id_agent_module'))); ?>' != $('#text-name').val() && ( + } + + var module_type_snmp = '<?php echo modules_get_agentmodule_type($id_agent_module); ?>'; + + if('<?php echo io_safe_output(modules_get_agentmodule_name($id_agent_module)); ?>' != $('#text-name').val() && ( module_type_snmp == 15 || module_type_snmp == 16 || module_type_snmp == 17 || module_type_snmp == 18)){ - event.preventDefault(); - $("#dialog").dialog({ resizable: true, draggable: true, @@ -2438,33 +2321,24 @@ switch ($tab) { } }); }); - - // Set the position and width of the subtab - /* - function agent_wizard_tab_setup() { - $('#agent_wizard_subtabs').css('left', $('.agent_wizard_tab').offset().left-5) - $('#agent_wizard_subtabs').css('top', $('.agent_wizard_tab').offset().top + $('.agent_wizard_tab').height() + 7) - $('#agent_wizard_subtabs').css('width', $('.agent_wizard_tab').width() + 19) - } - */ + function agent_wizard_tab_show() { - wizard_tab_showed = wizard_tab_showed + 1; - + if(wizard_tab_showed == 1) { $('.subsubmenu').show("fast"); } } - + function agent_wizard_tab_hide() { wizard_tab_showed = wizard_tab_showed - 1; - + setTimeout(function() { if(wizard_tab_showed <= 0) { $('.subsubmenu').hide("fast"); } },15000); } - + /* ]]> */ </script> diff --git a/pandora_console/godmode/agentes/fields_manager.php b/pandora_console/godmode/agentes/fields_manager.php index b310f049c9..19855ebb95 100644 --- a/pandora_console/godmode/agentes/fields_manager.php +++ b/pandora_console/godmode/agentes/fields_manager.php @@ -150,7 +150,7 @@ foreach ($fields as $field) { ); } - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configure_field&id_field='.$field['id_field'].'">'.html_print_image('images/config.png', true, ['alt' => __('Edit'), 'title' => __('Edit'), 'border' => '0', 'class' => 'invert_filter']).'</a>'; $data[3] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/fields_manager&delete_field=1&id_field='.$field['id_field'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['alt' => __('Delete'), 'title' => __('Delete'), 'border' => '0', 'class' => 'invert_filter']).'</a>'; diff --git a/pandora_console/godmode/agentes/modificar_agente.php b/pandora_console/godmode/agentes/modificar_agente.php index b1aa96fd7e..7b0a48e460 100644 --- a/pandora_console/godmode/agentes/modificar_agente.php +++ b/pandora_console/godmode/agentes/modificar_agente.php @@ -905,7 +905,7 @@ if ($agents !== false) { $offsetArg = $offset; } - echo "<td class='$tdcolor action_buttons' align='left' width=7% valign='middle'>"; + echo "<td class='$tdcolor table_action_buttons' align='left' width=7% valign='middle'>"; if ($agent['disabled']) { echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente& diff --git a/pandora_console/godmode/agentes/module_manager.php b/pandora_console/godmode/agentes/module_manager.php index bd4b324982..6514f0563d 100644 --- a/pandora_console/godmode/agentes/module_manager.php +++ b/pandora_console/godmode/agentes/module_manager.php @@ -196,12 +196,12 @@ if ($show_creation === true) { // Create module/type combo. $tableCreateModule = new stdClass(); $tableCreateModule->id = 'create'; + $tableCreateModule->class = 'pacullos'; $tableCreateModule->width = '100%'; $tableCreateModule->data = []; $tableCreateModule->style = []; - $tableCreateModule->data['caption_type'] = '<form id="create_module_type" method="post" action="'.$url.'">'; - $tableCreateModule->data['caption_type'] .= html_print_input_hidden('edit_module', 1); + $tableCreateModule->data['caption_type'] = html_print_input_hidden('edit_module', 1); $tableCreateModule->data['caption_type'] .= __('Type'); $tableCreateModule->data['type'] = html_print_select( $modules, @@ -215,33 +215,22 @@ if ($show_creation === true) { false, '', false, - 'max-width:400px;' + 'width:380px;' ); - $tableCreateModule->data['submitButton'] = html_print_submit_button( - __('Create'), - 'updbutton', - false, - [ - 'icon' => 'next', - 'mode' => 'mini secondary', - ], - true - ); - - $tableCreateModule->data['submitButton'] .= '</form>'; -} - -// echo '</table>'; -/* - if (!$config['disable_help']) { - echo '<div class="disable_help">'; - echo '<strong>'; - echo "<a class='color-black-grey invert_filter' target='_blank' href='https://pandorafms.com/Library/Library/'>".__('Get more modules on Monitoring Library').'</a>'; - echo '</strong>'; - echo '</div>'; + // Link for get more modules. + if ((bool) $config['disable_help'] === false) { + $tableCreateModule->data['get_more_modules'] = html_print_anchor( + [ + 'href' => 'https://pandorafms.com/Library/Library/', + 'target' => '_blank', + 'class' => 'color-black-grey', + 'content' => __('Get more modules on Monitoring Library'), + ], + true + ); } -*/ +} if (isset($id_agente) === false) { return; @@ -1083,9 +1072,9 @@ foreach ($modules as $module) { $data[7] = ''; } - if ($module['disabled']) { + if ((bool) $module['disabled'] === true) { $data[8] = "<a href='index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente=".$id_agente.'&enable_module='.$module['id_agente_modulo']."'>".html_print_image( - 'images/lightbulb_off.png', + 'images/svg/change-active.svg', true, [ 'alt' => __('Enable module'), @@ -1095,7 +1084,7 @@ foreach ($modules as $module) { ).'</a>'; } else { $data[8] = "<a href='index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente=".$id_agente.'&disable_module='.$module['id_agente_modulo']."'>".html_print_image( - 'images/lightbulb.png', + 'images/svg/change-pause.svg', true, [ 'alt' => __('Disable module'), @@ -1108,7 +1097,7 @@ foreach ($modules as $module) { $data[8] .= '<a href="index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&duplicate_module='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; $data[8] .= html_print_image( - 'images/copy.png', + 'images/svg/duplicate.svg', true, [ 'title' => __('Duplicate'), @@ -1118,11 +1107,11 @@ foreach ($modules as $module) { $data[8] .= '</a> '; // Make a data normalization. - if (isset($numericModules[$type])) { + if (isset($numericModules[$type]) === true) { if ($numericModules[$type] === true) { $data[8] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module&fix_module='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; $data[8] .= html_print_image( - 'images/chart.png', + 'images/svg/module-graph.svg', true, [ 'title' => __('Normalize'), @@ -1133,16 +1122,19 @@ foreach ($modules as $module) { } } else { $data[8] .= html_print_image( - 'images/chart_curve.disabled.png', + 'images/svg/module-graph.svg', true, - ['title' => __('Normalize (Disabled)')] + [ + 'title' => __('Normalize (Disabled)'), + 'style' => 'opacity: 0.5;', + ] ); $data[8] .= ' '; } // Create network component action. - if ((is_user_admin($config['id_user'])) - && ($module['id_modulo'] == MODULE_NETWORK) + if ((is_user_admin($config['id_user']) === true) + && ((int) $module['id_modulo'] === MODULE_NETWORK) ) { $data[8] .= '<a href="index.php?sec=gmodules&sec2=godmode/modules/manage_network_components&create_network_from_module=1&id_agente='.$id_agente.'&create_module_from='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; @@ -1170,7 +1162,7 @@ foreach ($modules as $module) { $data[9] = '<a href="index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; $data[9] .= html_print_image( - 'images/cross.png', + 'images/svg/delete.svg', true, [ 'title' => __('Delete'), @@ -1181,13 +1173,13 @@ foreach ($modules as $module) { } $table->cellclass[] = [ - 8 => 'action_buttons', - 9 => 'action_buttons', + 8 => 'table_action_buttons', + 9 => 'table_action_buttons', ]; array_push($table->data, $data); $table->cellclass[] = [ - 8 => 'action_buttons', - 9 => 'action_buttons', + 8 => 'table_action_buttons', + 9 => 'table_action_buttons', ]; } @@ -1254,12 +1246,12 @@ if ((bool) check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === tr [ 'class' => 'action-buttons', 'content' => html_print_submit_button( - __('Add'), - 'create_module_dialog', + __('Create'), + 'create_module', false, [ - 'icon' => 'add', - 'mode' => 'secondary mini', + 'icon' => 'next', + 'mode' => 'mini secondary', ], true ), @@ -1281,7 +1273,6 @@ if ((bool) check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === tr <script type="text/javascript"> function create_module_dialog(){ - console.log('holaaa'); $('#modal') .dialog({ title: '<?php echo __('Create Module'); ?>', diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php index f5845d7226..49c23f3fe5 100644 --- a/pandora_console/godmode/agentes/module_manager_editor.php +++ b/pandora_console/godmode/agentes/module_manager_editor.php @@ -395,9 +395,9 @@ if ($id_agent_module) { ); } } else { - if (isset($moduletype) === false) { + if (isset($moduletype) === false || $moduletype === 0) { $moduletype = (string) get_parameter('moduletype'); - if ($_SESSION['create_module'] && $config['welcome_state'] == 1) { + if ((bool) $_SESSION['create_module'] === true && (bool) $config['welcome_state'] === true) { $moduletype = 'networkserver'; } @@ -579,11 +579,11 @@ if ($__code_from !== 'policies') { $tag_acl = true; // If edit a existing module. - if (!empty($id_agent_module)) { + if (empty($id_agent_module) === false) { $tag_acl = tags_check_acl_by_module($id_agent_module); } - if (!$tag_acl) { + if ($tag_acl !== true) { db_pandora_audit( AUDIT_LOG_ACL_VIOLATION, 'Trying to access agent manager' @@ -593,16 +593,15 @@ if ($__code_from !== 'policies') { } } - switch ($moduletype) { case 'dataserver': case MODULE_DATA: $moduletype = MODULE_DATA; // Has remote configuration ? $remote_conf = false; - if (enterprise_installed()) { + if (enterprise_installed() === true) { enterprise_include_once('include/functions_config_agents.php'); - $remote_conf = enterprise_hook( + $remote_conf = (bool) enterprise_hook( 'config_agents_has_remote_configuration', [$id_agente] ); @@ -619,7 +618,7 @@ switch ($moduletype) { ]; include 'module_manager_editor_common.php'; include 'module_manager_editor_data.php'; - if ($config['enterprise_installed'] && $remote_conf) { + if ((bool) $config['enterprise_installed'] === true && $remote_conf === true) { if ($id_agent_module) { enterprise_include_once('include/functions_config_agents.php'); $configuration_data = enterprise_hook( @@ -647,7 +646,7 @@ switch ($moduletype) { 4, 5, ]; - if (enterprise_installed()) { + if (enterprise_installed() === true) { $categories[] = 10; } @@ -698,7 +697,7 @@ switch ($moduletype) { $moduletype = MODULE_WEB; // Remove content of $ip_target when it is ip_agent because // it is used as HTTP auth (server) ....ONLY IN NEW MODULE!!! - if (empty($id_agent_module) + if (empty($id_agent_module) === true && ($ip_target === agents_get_address($id_agente)) ) { $ip_target = ''; @@ -722,8 +721,8 @@ switch ($moduletype) { } -if ($config['enterprise_installed'] && $id_agent_module) { - if (policies_is_module_in_policy($id_agent_module)) { +if ((bool) $config['enterprise_installed'] === true && $id_agent_module) { + if (policies_is_module_in_policy($id_agent_module) === true) { policies_add_policy_linkation($id_agent_module); } } @@ -764,7 +763,6 @@ if ($moduletype != 13) { } // Submit. -echo '<div class="action-buttons" style="width: '.$table_simple->width.'">'; if ($id_agent_module) { $actionButtons = html_print_submit_button( __('Update'), @@ -785,50 +783,40 @@ if ($id_agent_module) { true ); - html_print_div( - [ - 'class' => 'action-buttons', - 'content' => $actionButtons, - ] + $actionButtons .= html_print_input_hidden('update_module', 1); + $actionButtons .= html_print_input_hidden('id_agent_module', $id_agent_module); + $actionButtons .= html_print_input_hidden('id_module_type', $id_module_type); + + html_print_action_buttons( + $actionButtons, + [ 'type' => 'form_action' ] ); - - html_print_input_hidden('update_module', 1); - html_print_input_hidden('id_agent_module', $id_agent_module); - html_print_input_hidden('id_module_type', $id_module_type); - - if ($config['enterprise_installed'] && $remote_conf) { - ?> - <script type="text/javascript"> - var check_remote_conf = true; - </script> - <?php - } } else { - html_print_div( - [ - 'class' => 'action-buttons', - 'content' => html_print_submit_button( - __('Create'), - 'crtbutton', - false, - [ 'icon' => 'wand' ], - true - ), - ] + $actionButtons = html_print_submit_button( + __('Create'), + 'crtbutton', + false, + [ 'icon' => 'wand' ], + true ); - html_print_input_hidden('id_module', $moduletype); - html_print_input_hidden('create_module', 1); - if ($config['enterprise_installed'] && $remote_conf) { - ?> - <script type="text/javascript"> - var check_remote_conf = true; - </script> - <?php - } + $actionButtons .= html_print_input_hidden('id_module', $moduletype); + $actionButtons .= html_print_input_hidden('create_module', 1); + + html_print_action_buttons( + $actionButtons, + ['type' => 'form_action'] + ); +} + +if ((bool) $config['enterprise_installed'] === true && $remote_conf === true) { + ?> + <script type="text/javascript"> + var check_remote_conf = true; + </script> + <?php } -echo '</div>'; echo '</form>'; ui_require_jquery_file('ui'); diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php index c59fc48ccb..68b903e687 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_common.php +++ b/pandora_console/godmode/agentes/module_manager_editor_common.php @@ -14,7 +14,7 @@ * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ - * Copyright (c) 2005-2021 Artica Soluciones Tecnologicas + * Copyright (c) 2005-2022 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 @@ -194,7 +194,7 @@ $update_module_id = (int) get_parameter_get('update_module'); $edit_module = (bool) get_parameter_get('edit_module'); $table_simple = new stdClass(); $table_simple->id = 'simple'; -$table_simple->class = 'w100p mrgn_10px'; +$table_simple->class = 'w100p mrgn_10px floating_form'; $table_simple->data = []; $table_simple->style = []; $table_simple->cellclass = []; @@ -220,13 +220,13 @@ if (empty($id_agent_module) === false && isset($id_agente) === true) { $moduleIdContent = ''; } -$table_simple->data[$dataRow][$dataCol++] = __('Name'); -$table_simple->data[$dataRow][$dataCol++] = html_print_input_text_extended( +$table_simple->data['caption_module_name'][0] = __('Name'); +$table_simple->data['module_name'][0] = html_print_input_text_extended( 'name', $name, 'text-name', '', - 45, + 65, 100, $disabledBecauseInPolicy, '', @@ -246,9 +246,17 @@ if ($policy_link != 0) { $disabled_enable = 1; } -$table_simple->cellclass[$dataRow][$dataCol] = 'flex_center '; -$table_simple->data[$dataRow][$dataCol] = __('Disabled'); -$table_simple->data[$dataRow][$dataCol++] .= html_print_checkbox( +$table_simple->rowclass['disable_module'] = 'flex_center '; +$table_simple->data['disable_module'][0] = __('Disabled'); +$table_simple->data['disable_module'][1] .= html_print_checkbox_switch( + 'disabled', + 1, + $disabled, + true, + $disabled_enable +); +/* + html_print_checkbox( 'disabled', 1, $disabled, @@ -259,13 +267,18 @@ $table_simple->data[$dataRow][$dataCol++] .= html_print_checkbox( '', '', 'style="margin-left: 5px;"' -); - -$dataRow++; -$dataCol = 0; -$table_simple->data[$dataRow][$dataCol++] = __('Module group'); -$table_simple->colspan[$dataRow][$dataCol] = '3'; -$table_simple->data[$dataRow][$dataCol++] .= html_print_select_from_sql( + ); +*/ +// Caption for Module group and Type. +$table_simple->cellstyle['captions_module_n_type'][0] = 'width: 50%;'; +$table_simple->cellstyle['captions_module_n_type'][1] = 'width: 50%;'; +$table_simple->data['captions_module_n_type'][0] = html_print_input_hidden('id_module_type_hidden', $id_module_type, true); +$table_simple->data['captions_module_n_type'][0] .= __('Module group'); +$table_simple->data['captions_module_n_type'][1] = __('Type').ui_print_help_icon($help_type, true, '', 'images/help_green.png', '', 'module_type_help'); +// Module group and Type. +$table_simple->cellstyle['module_n_type'][0] = 'width: 50%;'; +$table_simple->cellstyle['module_n_type'][1] = 'width: 50%;'; +$table_simple->data['module_n_type'][0] .= html_print_select_from_sql( 'SELECT id_mg, name FROM tmodule_group ORDER BY name', 'id_module_group', $id_module_group, @@ -276,10 +289,10 @@ $table_simple->data[$dataRow][$dataCol++] .= html_print_select_from_sql( false, true, $disabledBecauseInPolicy, - 'width: 280px' + 'width: 480px' ); -if ((isset($id_agent_module) === true && $id_agent_module) || $id_policy_module != 0) { +if ((isset($id_agent_module) === true && $id_agent_module > 0) || (int) $id_policy_module !== 0) { $edit = false; } else { $edit = true; @@ -287,12 +300,6 @@ if ((isset($id_agent_module) === true && $id_agent_module) || $id_policy_module $in_policy = strstr($page, 'policy_modules'); -$dataRow++; -$dataCol = 0; -$table_simple->data[$dataRow][$dataCol] .= html_print_input_hidden('id_module_type_hidden', $id_module_type, true); -$table_simple->data[$dataRow][$dataCol++] = __('Type').ui_print_help_icon($help_type, true, '', 'images/help_green.png', '', 'module_type_help'); -$table_simple->colspan[$dataRow][$dataCol] = '3'; - if ($edit === false) { $sql = sprintf( 'SELECT id_tipo, nombre @@ -309,23 +316,18 @@ if ($edit === false) { $type_names_hash[$tn['id_tipo']] = $tn['nombre']; } - $table_simple->data[$dataRow][$dataCol] = '<em>'.modules_get_moduletype_description($id_module_type).' ('.$type_names_hash[$id_module_type].')</em>'; - $table_simple->data[$dataRow][$dataCol] .= html_print_input_hidden( + $table_simple->data['module_n_type'][1] = '<em>'.modules_get_moduletype_description($id_module_type).' ('.$type_names_hash[$id_module_type].')</em>'; + $table_simple->data['module_n_type'][1] .= html_print_input_hidden( 'type_names', base64_encode(io_json_mb_encode($type_names_hash)), true ); } else { - if (isset($id_module_type) === true) { - $idModuleType = $id_module_type; - } else { - $idModuleType = ''; - } - + $idModuleType = (isset($id_module_type) === true) ? $idModuleType : ''; // Removed web analysis and log4x from select. $tipe_not_in = '24, 25'; if (is_metaconsole() === true) { - $tipe_not_in = '24, 25, 34, 35, 36, 37'; + $tipe_not_in .= ', 34, 35, 36, 37'; } $sql = sprintf( @@ -351,7 +353,7 @@ if ($edit === false) { } } - $table_simple->data[$dataRow][$dataCol] = html_print_select( + $table_simple->data['module_n_type'][1] = html_print_select( $type_description_hash, 'id_module_type', $idModuleType, @@ -363,24 +365,24 @@ if ($edit === false) { false, '', false, - 'width: 280px;', + 'width: 480px;', false, 100 ); // Store the relation between id and name of the types on a hidden field. - $table_simple->data[$dataRow][$dataCol] .= html_print_input_hidden( + $table_simple->data['module_n_type'][1] .= html_print_input_hidden( 'type_names', base64_encode(io_json_mb_encode($type_names_hash)), true ); } -if ($edit_module) { +if ($edit_module === true) { $id_module_type = (int) $id_module_type; if (($id_module_type >= 1 && $id_module_type <= 5) || ($id_module_type >= 21 && $id_module_type <= 23) - || ($id_module_type == 100) + || ($id_module_type === 100) ) { $help_header = 'local_module'; } @@ -403,157 +405,182 @@ if ($edit_module) { } } -if ($disabledBecauseInPolicy) { - $table_simple->data[$dataRow][3] .= html_print_input_hidden( +if ((bool) $disabledBecauseInPolicy === true) { + $table_simple->data['module'][0] .= html_print_input_hidden( 'id_module_group', $id_module_group, true ); } -$dataRow++; -$table_simple->data[$dataRow][0] .= __('Warning threshold'); -$table_simple->cellclass[$dataRow][1] = 'module_thresholds_fields'; -if (modules_is_string_type($id_module_type) === false || $edit === true) { - $table_simple->data[$dataRow][1] .= '<span class="flex_center" id="minmax_warning"><em>'.__('Min. ').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( +// Thresholds Table. +$tableBasicThresholds = new stdClass(); +$tableBasicThresholds->class = 'w100p table_section'; +$tableBasicThresholds->id = 'basic_thresholds'; +$tableBasicThresholds->style = []; +$tableBasicThresholds->data = []; + +// WARNING THRESHOLD. +if (modules_is_string_type($id_module_type) === false) { + $tableBasicThresholds->cellclass['caption_warning_threshold'] = 'show_hide_thresholds_minmax'; + $tableBasicThresholds->cellclass['warning_threshold'] = 'show_hide_thresholds_minmax'; + $tableBasicThresholds->data['caption_warning_threshold'][0] .= __('Warning threshold').' ('.__('Min / Max').')'; + $tableBasicThresholds->data['warning_threshold'][0] .= html_print_input_text( 'min_warning', $min_warning, '', 10, 255, true, - $disabledBecauseInPolicy, + $disabledBecauseInPolicy || $edit === true, false, '', $classdisabledBecauseInPolicy ); - $table_simple->data[$dataRow][1] .= '<em>'.__('Max.').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( + $tableBasicThresholds->data['warning_threshold'][1] .= html_print_input_text( 'max_warning', $max_warning, '', 10, 255, true, - $disabledBecauseInPolicy, + $disabledBecauseInPolicy || $edit === true, false, '', $classdisabledBecauseInPolicy ).'</span>'; + + $tableBasicThresholds->data['switch_warning_threshold'][0] .= html_print_switch_radio_button( + [ + html_print_radio_button_extended('warning_thresholds_checks', 'normal_warning', __('Normal'), ($percentage_warning && $warning_inverse) === false, false, '', '', true, false, '', 'radius-normal_warning'), + html_print_radio_button_extended('warning_thresholds_checks', 'warning_inverse', __('Inverse interval'), $warning_inverse, $disabledBecauseInPolicy, '', '', true, false, '', 'radius-warning_inverse'), + html_print_radio_button_extended('warning_thresholds_checks', 'percentage_warning', __('Percentage'), $percentage_warning, $disabledBecauseInPolicy, '', '', true, false, '', 'radius-percentage_warning'), + ], + [], + true + ); } -if (modules_is_string_type($id_module_type) === true || $edit === true) { - $table_simple->data[$dataRow][1] .= '<span id="string_warning"><em>'.__('Str.').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( +if (modules_is_string_type($id_module_type) === true) { + $tableBasicThresholds->cellclass['caption_warning_threshold'] = 'show_hide_thresholds_string'; + $tableBasicThresholds->cellclass['warning_threshold'] = 'show_hide_thresholds_string'; + $tableBasicThresholds->data['caption_warning_threshold'][0] .= __('Warning threshold').' ('.__('Str.').')'; + $tableBasicThresholds->data['warning_threshold'][1] .= html_print_input_text( 'str_warning', str_replace('"', '', $str_warning), '', 10, 1024, true, - $disabledBecauseInPolicy, + $disabledBecauseInPolicy || $edit === false, false, '', $classdisabledBecauseInPolicy ).'</span>'; -} -$table_simple->data[$dataRow][1] .= '<div class="flex_center" id="warning_inverse"><em>'.__('Inverse interval').'</em>'; -$table_simple->data[$dataRow][1] .= html_print_checkbox('warning_inverse', 1, $warning_inverse, true, $disabledBecauseInPolicy); -$table_simple->data[$dataRow][1] .= '</div>'; + $divPercentageContent = __('Percentage'); + $divPercentageContent .= html_print_checkbox_switch('percentage_warning', 1, $percentage_warning, true, $disabledBecauseInPolicy); + $divPercentageContent .= ui_print_help_tip('Defines threshold as a percentage of value decrease/increment', true); -if (modules_is_string_type($id_module_type) === false) { - $table_simple->data[$dataRow][1] .= '<div class="flex_center" id="percentage_warning"><em>'.__('Percentage').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_checkbox('percentage_warning', 1, $percentage_warning, true, $disabledBecauseInPolicy); - $table_simple->data[$dataRow][1] .= ui_print_help_tip('Defines threshold as a percentage of value decrease/increment', true); - $table_simple->data[$dataRow][1] .= '</div>'; -} - - - -if (modules_is_string_type($id_module_type) === false || (bool) $edit === true) { - $table_simple->cellstyle[$dataRow][2] = 'top: 160px; left: 700px; position: absolute; width: 280px;'; - $table_simple->colspan[$dataRow][2] = '2'; - $table_simple->data[$dataRow][2] = '<svg id="svg_dinamic" width="500" height="300"> </svg>'; -} - -$dataRow++; -$table_simple->data[$dataRow][0] = __('Critical threshold'); -$table_simple->cellclass[$dataRow][1] = 'module_thresholds_fields'; -if (modules_is_string_type($id_module_type) === false || $edit === true) { - $table_simple->data[$dataRow][1] .= '<span class="flex_center" id="minmax_critical"><em>'.__('Min').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( - 'min_critical', - $min_critical, - '', - 10, - 255, - true, - $disabledBecauseInPolicy, - false, - '', - $classdisabledBecauseInPolicy + $tableBasicThresholds->data['switch_warning_threshold'][0] .= html_print_div( + [ + 'id' => 'percentage_warning', + 'content' => $divPercentageContent, + ], + true ); - $table_simple->data[$dataRow][1] .= '<br /><em>'.__('Max').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( - 'max_critical', - $max_critical, - '', - 10, - 255, - true, - $disabledBecauseInPolicy, - false, - '', - $classdisabledBecauseInPolicy - ).'</span>'; } -if (modules_is_string_type($id_module_type) === true || $edit === true) { - $table_simple->data[$dataRow][1] .= '<span class="flex_center" id="string_critical"><em>'.__('Str.').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_input_text( - 'str_critical', - str_replace('"', '', $str_critical), - '', - 10, - 1024, - true, - $disabledBecauseInPolicy, - false, - '', - $classdisabledBecauseInPolicy - ).'</span>'; + +// CRITICAL THRESHOLD. +$tableBasicThresholds->cellclass['caption_critical_threshold'] = 'show_hide_thresholds_minmax'; +$tableBasicThresholds->cellclass['critical_threshold'] = 'show_hide_thresholds_minmax'; +$tableBasicThresholds->data['caption_critical_threshold'][0] .= __('Critical threshold').' ('.__('Min / Max').')'; +$tableBasicThresholds->data['critical_threshold'][0] .= html_print_input_text( + 'min_critical', + $min_critical, + '', + 10, + 255, + true, + $disabledBecauseInPolicy || $edit === false, + false, + '', + $classdisabledBecauseInPolicy +); +$tableBasicThresholds->data['critical_threshold'][1] .= html_print_input_text( + 'max_critical', + $max_critical, + '', + 10, + 255, + true, + $disabledBecauseInPolicy || $edit === false, + false, + '', + $classdisabledBecauseInPolicy +).'</span>'; + +$tableBasicThresholds->data['switch_critical_threshold'][0] .= html_print_switch_radio_button( + [ + html_print_radio_button_extended('critical_thresholds_checks', 'normal_critical', __('Normal'), ($percentage_critical && $critical_inverse) === false, false, '', '', true, false, '', 'radius-normal_critical'), + html_print_radio_button_extended('critical_thresholds_checks', 'critical_inverse', __('Inverse interval'), $critical_inverse, $disabledBecauseInPolicy, '', '', true, false, '', 'radius-critical_inverse'), + html_print_radio_button_extended('critical_thresholds_checks', 'percentage_critical', __('Percentage'), $percentage_critical, $disabledBecauseInPolicy, '', '', true, false, '', 'radius-percentage_critical'), + ], + [], + true +); + +$divPercentageContent = __('Percentage'); +$divPercentageContent .= html_print_checkbox_switch('percentage_critical', 1, $percentage_critical, true, $disabledBecauseInPolicy); +$divPercentageContent .= ui_print_help_tip('Defines threshold as a percentage of value decrease/increment', true); + +$tableBasicThresholds->data['switch_critical_threshold'][0] .= html_print_div( + [ + 'id' => 'percentage_critical', + 'content' => $divPercentageContent, + ], + true +); + +$tableBasicThresholds->cellclass['caption_critical_threshold'] = 'show_hide_thresholds_string'; +$tableBasicThresholds->cellclass['critical_threshold'] = 'show_hide_thresholds_string'; +$tableBasicThresholds->data['caption_critical_threshold'][0] .= __('Critical threshold').' ('.__('Str.').')'; +$tableBasicThresholds->data['critical_threshold'][1] .= html_print_input_text( + 'str_critical', + str_replace('"', '', $str_critical), + '', + 10, + 1024, + true, + $disabledBecauseInPolicy, + false, + '', + $classdisabledBecauseInPolicy +); + +$table_simple->cellstyle['thresholds_table'][0] = 'width: 50%;'; +$table_simple->data['thresholds_table'][0] = html_print_table($tableBasicThresholds, true); +if (modules_is_string_type($id_module_type) === false || (bool) $edit === true) { + $table_simple->cellstyle['thresholds_table'][1] = 'width: 50%;'; + $table_simple->data['thresholds_table'][1] = '<svg id="svg_dinamic" width="500" height="300"> </svg>'; } -$table_simple->data[$dataRow][1] .= '<div class="flex_center" id="critical_inverse"><em>'.__('Inverse interval').'</em>'; -$table_simple->data[$dataRow][1] .= html_print_checkbox('critical_inverse', 1, $critical_inverse, true, $disabledBecauseInPolicy); -$table_simple->data[$dataRow][1] .= '</div>'; - - -if (modules_is_string_type($id_module_type) === false) { - $table_simple->data[$dataRow][1] .= '<div class="flex_center" id="percentage_critical" /><em>'.__('Percentage').'</em>'; - $table_simple->data[$dataRow][1] .= html_print_checkbox('percentage_critical', 1, $percentage_critical, true, $disabledBecauseInPolicy); - $table_simple->data[$dataRow][1] .= ui_print_help_tip('Defines threshold as a percentage of value decrease/increment', true); - $table_simple->data[$dataRow][1] .= '</div>'; -} - -$dataRow++; -$table_simple->data[$dataRow][0] = __('Historical data'); +$table_simple->data['historical_data'][0] = __('Historical data'); if ($disabledBecauseInPolicy) { // If is disabled, we send a hidden in his place and print a false // checkbox because HTML dont send disabled fields // and could be disabled by error. - $table_simple->data[$dataRow][1] = html_print_checkbox( + $table_simple->data['historical_data'][1] = html_print_checkbox_switch( 'history_data_fake', 1, $history_data, true, $disabledBecauseInPolicy ); - $table_simple->data[$dataRow][1] .= '<input type="hidden" name="history_data" value="'.(int) $history_data.'">'; + $table_simple->data['historical_data'][1] .= html_print_input_hidden('history_data', (int) $history_data, true); } else { - $table_simple->data[$dataRow][1] = html_print_checkbox( + $table_simple->data['historical_data'][1] = html_print_checkbox_switch( 'history_data', 1, $history_data, @@ -574,9 +601,10 @@ $table_advanced->colspan = []; $table_advanced->colspan[5][1] = 3; -$table_advanced->data[0][0] = __('Custom ID'); -$table_advanced->colspan[0][1] = 2; -$table_advanced->data[0][1] = html_print_input_text( +$table_advanced->data['captions_custom_id_unit'][0] = __('Custom ID'); +$table_advanced->data['captions_custom_id_unit'][1] = __('Unit'); +// $table_advanced->colspan[0][1] = 2; +$table_advanced->data['custom_id_unit'][0] = html_print_input_text( 'custom_id', $custom_id, '', @@ -589,8 +617,7 @@ $table_advanced->data[0][1] = html_print_input_text( (($config['module_custom_id_ro'] && $__code_from != 'policies') ? 'readonly' : $classdisabledBecauseInPolicy) ); -$table_advanced->data[0][3] = __('Unit'); -$table_advanced->data[0][4] = html_print_input_text( +$table_advanced->data['custom_id_unit'][1] = html_print_input_text( 'unit', $unit, '', @@ -603,7 +630,7 @@ $table_advanced->data[0][4] = html_print_input_text( $classdisabledBecauseInPolicy ); // $table_advanced->colspan[1][4] = 3; -$table_advanced->data[0][4] = html_print_extended_select_for_unit( +$table_advanced->data['custom_id_unit'][1] = html_print_extended_select_for_unit( 'unit', $unit, '', @@ -616,8 +643,163 @@ $table_advanced->data[0][4] = html_print_extended_select_for_unit( ); $table_advanced->colspan[0][4] = 3; +// Tags +global $__code_from; +$table_advanced->data['caption_tags_module_parent'][0] = __('Tags available'); +$table_advanced->data['caption_tags_module_parent'][1] = __('Tags selected'); +$table_advanced->data['caption_tags_module_parent'][2] = __('Tags from policy'); +// Code comes from module_editor. +if ($__code_from === 'modules') { + $__table_modules = 'ttag_module'; + $__id_where = 'b.id_agente_modulo'; + $__id = (int) $id_agent_module; + + $__sql = ' AND b.id_policy_module = 0'; + $__sql_policy = ' AND b.id_policy_module != 0'; +} else { + // Code comes from policy module editor. + global $__id_pol_mod; + $__table_modules = 'ttag_policy_module'; + $__id_where = 'b.id_policy_module'; + $__id = $__id_pol_mod; + + $__sql = ''; +} + +if (tags_has_user_acl_tags($config['id_user']) === false) { + $table_advanced->data['tags_module_parent'][0] = html_print_select_from_sql( + "SELECT id_tag, name + FROM ttag + WHERE id_tag NOT IN ( + SELECT a.id_tag + FROM ttag a, $__table_modules b + WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) + ORDER BY name", + 'id_tag_available[]', + '', + '', + '', + '', + true, + true, + false, + $disabledBecauseInPolicy, + 'width: 200px', + '5' + ); +} else { + $user_tags = tags_get_user_tags($config['id_user'], 'AW'); + if (empty($user_tags) === false) { + $id_user_tags = array_keys($user_tags); + + $table_advanced->data['tags_module_parent'][0] = html_print_select_from_sql( + 'SELECT id_tag, name + FROM ttag + WHERE id_tag IN ('.implode(',', $id_user_tags).") AND + id_tag NOT IN ( + SELECT a.id_tag + FROM ttag a, $__table_modules b + WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) + ORDER BY name", + 'id_tag_available[]', + '', + '', + '', + '', + true, + true, + false, + $disabledBecauseInPolicy, + 'width: 200px', + '5' + ); + } else { + $table_advanced->data['tags_module_parent'][0] = html_print_select_from_sql( + "SELECT id_tag, name + FROM ttag + WHERE id_tag NOT IN ( + SELECT a.id_tag + FROM ttag a, $__table_modules b + WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) + ORDER BY name", + 'id_tag_available[]', + '', + '', + '', + '', + true, + true, + false, + $disabledBecauseInPolicy, + 'width: 200px', + '5' + ); + } +} + +$table_advanced->data['tags_module_parent'][2] = html_print_image( + 'images/darrowright.png', + true, + [ + 'id' => 'right', + 'title' => __('Add tags to module'), + 'class' => 'invert_filter', + ] +); +$table_advanced->data['tags_module_parent'][2] .= '<br><br><br><br>'.html_print_image( + 'images/darrowleft.png', + true, + [ + 'id' => 'left', + 'title' => __('Delete tags to module'), + 'class' => 'invert_filter', + ] +); +$table_advanced->data['tags_module_parent'][3] = ''; +// .__('Tags selected') +$table_advanced->data['tags_module_parent'][4] = html_print_select_from_sql( + "SELECT a.id_tag, name + FROM ttag a, $__table_modules b + WHERE a.id_tag = b.id_tag AND $__id_where = $__id + $__sql + ORDER BY name", + 'id_tag_selected[]', + '', + '', + '', + '', + true, + true, + false, + $disabledBecauseInPolicy, + 'width: 200px', + '5' +); + +if ($__code_from === 'modules') { + $table_advanced->data['tags_module_parent'][5] = '<b>'.''.'</b>'; + $table_advanced->data['tags_module_parent'][6] = html_print_select_from_sql( + "SELECT a.id_tag, name + FROM ttag a, $__table_modules b + WHERE a.id_tag = b.id_tag AND $__id_where = $__id + $__sql_policy + ORDER BY name", + 'id_tag_policy[]', + '', + '', + '', + '', + true, + true, + false, + $disabledBecauseInPolicy, + 'width: 200px', + '5' + ); +} + $module_id_policy_module = 0; -if (isset($module['id_policy_module'])) { +if (isset($module['id_policy_module']) === true) { $module_id_policy_module = $module['id_policy_module']; } @@ -908,160 +1090,6 @@ if (!preg_match('/async/', $module_type_name) || $edit) { $table_advanced->colspan[6][4] = 3; -/* - Tags */ -// This var comes from module_manager_editor.php or policy_modules.php -global $__code_from; -$table_advanced->data[7][0] = __('Tags available'); -// Code comes from module_editor -if ($__code_from == 'modules') { - $__table_modules = 'ttag_module'; - $__id_where = 'b.id_agente_modulo'; - $__id = (int) $id_agent_module; - - $__sql = ' AND b.id_policy_module = 0'; - $__sql_policy = ' AND b.id_policy_module != 0'; -} else { - // Code comes from policy module editor - global $__id_pol_mod; - $__table_modules = 'ttag_policy_module'; - $__id_where = 'b.id_policy_module'; - $__id = $__id_pol_mod; - - $__sql = ''; -} - -if (!tags_has_user_acl_tags($config['id_user'])) { - $table_advanced->data[7][1] = html_print_select_from_sql( - "SELECT id_tag, name - FROM ttag - WHERE id_tag NOT IN ( - SELECT a.id_tag - FROM ttag a, $__table_modules b - WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) - ORDER BY name", - 'id_tag_available[]', - '', - '', - '', - '', - true, - true, - false, - $disabledBecauseInPolicy, - 'width: 200px', - '5' - ); -} else { - $user_tags = tags_get_user_tags($config['id_user'], 'AW'); - if (!empty($user_tags)) { - $id_user_tags = array_keys($user_tags); - - $table_advanced->data[7][1] = html_print_select_from_sql( - 'SELECT id_tag, name - FROM ttag - WHERE id_tag IN ('.implode(',', $id_user_tags).") AND - id_tag NOT IN ( - SELECT a.id_tag - FROM ttag a, $__table_modules b - WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) - ORDER BY name", - 'id_tag_available[]', - '', - '', - '', - '', - true, - true, - false, - $disabledBecauseInPolicy, - 'width: 200px', - '5' - ); - } else { - $table_advanced->data[7][1] = html_print_select_from_sql( - "SELECT id_tag, name - FROM ttag - WHERE id_tag NOT IN ( - SELECT a.id_tag - FROM ttag a, $__table_modules b - WHERE a.id_tag = b.id_tag AND $__id_where = $__id ) - ORDER BY name", - 'id_tag_available[]', - '', - '', - '', - '', - true, - true, - false, - $disabledBecauseInPolicy, - 'width: 200px', - '5' - ); - } -} - -$table_advanced->data[7][2] = html_print_image( - 'images/darrowright.png', - true, - [ - 'id' => 'right', - 'title' => __('Add tags to module'), - 'class' => 'invert_filter', - ] -); -$table_advanced->data[7][2] .= '<br><br><br><br>'.html_print_image( - 'images/darrowleft.png', - true, - [ - 'id' => 'left', - 'title' => __('Delete tags to module'), - 'class' => 'invert_filter', - ] -); -$table_advanced->data[7][3] = '<b>'.__('Tags selected').'</b>'; -$table_advanced->data[7][4] = html_print_select_from_sql( - "SELECT a.id_tag, name - FROM ttag a, $__table_modules b - WHERE a.id_tag = b.id_tag AND $__id_where = $__id - $__sql - ORDER BY name", - 'id_tag_selected[]', - '', - '', - '', - '', - true, - true, - false, - $disabledBecauseInPolicy, - 'width: 200px', - '5' -); - -if ($__code_from == 'modules') { - $table_advanced->data[7][5] = '<b>'.__('Tags from policy').'</b>'; - $table_advanced->data[7][6] = html_print_select_from_sql( - "SELECT a.id_tag, name - FROM ttag a, $__table_modules b - WHERE a.id_tag = b.id_tag AND $__id_where = $__id - $__sql_policy - ORDER BY name", - 'id_tag_policy[]', - '', - '', - '', - '', - true, - true, - false, - $disabledBecauseInPolicy, - 'width: 200px', - '5' - ); -} - $table_advanced->data[8][0] = __('Quiet'); $table_advanced->data[8][1] = html_print_checkbox('quiet_module', 1, $quiet_module, true, $disabledBecauseInPolicy); @@ -1667,71 +1695,87 @@ $(document).ready (function () { } }); - if ($('#checkbox-warning_inverse').prop('checked') === true) { - $('#percentage_warning').hide(); - } - - if ($('#checkbox-critical_inverse').prop('checked') === true) { - $('#percentage_critical').hide(); - } - - if ($('#checkbox-percentage_warning').prop('checked') === true) { - $('#warning_inverse').hide(); - } - - if ($('#checkbox-percentage_critical').prop('checked') === true) { - $('#critical_inverse').hide(); - } - - $('#checkbox-warning_inverse').change (function() { - paint_graph_values(); - if ($('#checkbox-warning_inverse').prop('checked') === true){ - $('#checkbox-percentage_warning').prop('checked', false); - $('#percentage_warning').attr('onClick', 'return false;'); - $('#percentage_warning>em').addClass('color_666'); - } else { - $('#percentage_warning').removeAttr('onClick'); - $('#percentage_warning>em').removeClass('color_666'); + $('.switch_radio_button label').on('click', function(){ + var thisLabel = $(this).attr('for'); + /* + console.log(thisLabel); + console.log($('#'+thisLabel).attr('name')); + console.log($('#'+thisLabel).attr('value')); + console.log($('[name='+$('#'+thisLabel).attr('name')+']')); + */ + //console.log($('#'+$('#'+thisLabel).attr('name')).val()); + //$('[name='+$('#'+thisLabel).attr('name')+']').val($('#'+thisLabel).attr('value')); + //$('[name='+$('#'+thisLabel).attr('name')+']').prop('checked', true); + $('#'+thisLabel).attr('checked', 'checked'); + $('#'+thisLabel).siblings().attr('checked', false); + + if ($('#radius-warning_inverse').prop('checked') === true) { + $('#percentage_warning').hide(); } - }); - $('#checkbox-critical_inverse').change (function() { - paint_graph_values(); - - if ($('#checkbox-critical_inverse').prop('checked') === true){ - $('#checkbox-percentage_critical').prop('checked', false); - $('#percentage_critical').attr('onClick', 'return false;'); - $('#percentage_critical>em').addClass('color_666'); - } else { - $('#percentage_critical').removeAttr('onClick'); - $('#percentage_critical>em').removeClass('color_666'); + if ($('#radius-critical_inverse').prop('checked') === true) { + $('#percentage_critical').hide(); } + + if ($('#radius-percentage_warning').prop('checked') === true) { + $('#warning_inverse').hide(); + } + + if ($('#radius-percentage_critical').prop('checked') === true) { + $('#critical_inverse').hide(); + } + + $('#radius-warning_inverse').change (function() { + paint_graph_values(); + if ($('#radius-warning_inverse').prop('checked') === true){ + $('#radius-percentage_warning').prop('checked', false); + $('#percentage_warning').attr('onClick', 'return false;'); + $('#percentage_warning>em').addClass('color_666'); + } else { + $('#percentage_warning').removeAttr('onClick'); + $('#percentage_warning>em').removeClass('color_666'); + } + }); + + $('#radius-critical_inverse').change (function() { + paint_graph_values(); + + if ($('#radius-critical_inverse').prop('checked') === true){ + $('#radius-percentage_critical').prop('checked', false); + $('#percentage_critical').attr('onClick', 'return false;'); + $('#percentage_critical>em').addClass('color_666'); + } else { + $('#percentage_critical').removeAttr('onClick'); + $('#percentage_critical>em').removeClass('color_666'); + } + }); + + $('#radius-percentage_warning').change (function() { + paint_graph_values(); + if ($('#radius-percentage_warning').prop('checked') === true){ + $('#radius-warning_inverse').prop('checked', false); + $('#warning_inverse').attr('onClick', 'return false;'); + $('#warning_inverse>em').addClass('color_666'); + } else { + $('#warning_inverse').removeAttr('onClick'); + $('#warning_inverse>em').removeClass('color_666'); + } + }); + + $('#radius-percentage_critical').change (function() { + paint_graph_values(); + if ($('#radius-percentage_critical').prop('checked') === true){ + $('#radius-critical_inverse').prop('checked', false); + $('#critical_inverse').attr('onClick', 'return false;'); + $('#critical_inverse>em').addClass('color_666'); + } else { + $('#critical_inverse').removeAttr('onClick'); + $('#critical_inverse>em').removeClass('color_666'); + } + }); }); - $('#checkbox-percentage_warning').change (function() { - paint_graph_values(); - if ($('#checkbox-percentage_warning').prop('checked') === true){ - $('#checkbox-warning_inverse').prop('checked', false); - $('#warning_inverse').attr('onClick', 'return false;'); - $('#warning_inverse>em').addClass('color_666'); - } else { - $('#warning_inverse').removeAttr('onClick'); - $('#warning_inverse>em').removeClass('color_666'); - } - }); - - $('#checkbox-percentage_critical').change (function() { - paint_graph_values(); - if ($('#checkbox-percentage_critical').prop('checked') === true){ - $('#checkbox-critical_inverse').prop('checked', false); - $('#critical_inverse').attr('onClick', 'return false;'); - $('#critical_inverse>em').addClass('color_666'); - } else { - $('#critical_inverse').removeAttr('onClick'); - $('#critical_inverse>em').removeClass('color_666'); - } - - }); + }); @@ -1998,9 +2042,9 @@ function paint_graph_values(){ if(min_c =='0.00'){ min_c = 0; } var max_c = parseFloat($('#text-max_critical').val()); if(max_c =='0.00'){ max_c = 0; } - var inverse_w = $('input:checkbox[name=warning_inverse]:checked').val(); + var inverse_w = $('input:radio[name=warning_inverse]:checked').val(); if(!inverse_w){ inverse_w = 0; } - var inverse_c = $('input:checkbox[name=critical_inverse]:checked').val(); + var inverse_c = $('input:radio[name=critical_inverse]:checked').val(); if(!inverse_c){ inverse_c = 0; } //inicialiced error diff --git a/pandora_console/godmode/alerts/alert_actions.php b/pandora_console/godmode/alerts/alert_actions.php index 873d91598c..379d27fcca 100644 --- a/pandora_console/godmode/alerts/alert_actions.php +++ b/pandora_console/godmode/alerts/alert_actions.php @@ -416,8 +416,8 @@ foreach ($actions as $action) { && check_acl($config['id_user'], $action['id_group'], 'LM') ) { $table->cellclass[] = [ - 3 => 'action_buttons', - 4 => 'action_buttons', + 3 => 'table_action_buttons', + 4 => 'table_action_buttons', ]; $id_action = $action['id']; diff --git a/pandora_console/godmode/alerts/alert_commands.php b/pandora_console/godmode/alerts/alert_commands.php index 121828de32..464df772d2 100644 --- a/pandora_console/godmode/alerts/alert_commands.php +++ b/pandora_console/godmode/alerts/alert_commands.php @@ -793,7 +793,7 @@ foreach ($commands as $command) { io_safe_output($command['description']) ); $data['action'] = ''; - $table->cellclass[]['action'] = 'action_buttons'; + $table->cellclass[]['action'] = 'table_action_buttons'; // (IMPORTANT, DO NOT CHANGE!) only users with permissions over "All" group have access to edition of commands belonging to "All" group. if ($is_management_allowed === true && !$command['internal'] && check_acl_restricted_all($config['id_user'], $command['id_group'], 'LM')) { diff --git a/pandora_console/godmode/alerts/alert_list.list.php b/pandora_console/godmode/alerts/alert_list.list.php index f087bfe664..435cc19322 100644 --- a/pandora_console/godmode/alerts/alert_list.list.php +++ b/pandora_console/godmode/alerts/alert_list.list.php @@ -834,8 +834,8 @@ foreach ($simple_alerts as $alert) { } $table_alert_list->cellclass[] = [ - 1 => 'action_buttons', - 4 => 'action_buttons', + 1 => 'table_action_buttons', + 4 => 'table_action_buttons', ]; $data[4] = '<form class="disable_alert_form display_in" action="'.$url.'" method="post" >'; if ($alert['disabled']) { diff --git a/pandora_console/godmode/alerts/alert_templates.php b/pandora_console/godmode/alerts/alert_templates.php index c0374c210b..0227f2eb93 100644 --- a/pandora_console/godmode/alerts/alert_templates.php +++ b/pandora_console/godmode/alerts/alert_templates.php @@ -419,7 +419,7 @@ foreach ($templates as $template) { if (is_management_allowed() === true && check_acl($config['id_user'], $template['id_group'], 'LM') ) { - $table->cellclass[][4] = 'action_buttons'; + $table->cellclass[][4] = 'table_action_buttons'; $data[4] = '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_template&pure='.$pure.'" class="float-left inline_line">'; $data[4] .= html_print_input_hidden('duplicate_template', 1, true); $data[4] .= html_print_input_hidden('source_id', $template['id'], true); diff --git a/pandora_console/godmode/category/category.php b/pandora_console/godmode/category/category.php index 4ac78b7414..b20bbc85b5 100755 --- a/pandora_console/godmode/category/category.php +++ b/pandora_console/godmode/category/category.php @@ -202,7 +202,7 @@ if (empty($result) === false) { } if ($is_management_allowed === true) { - $table->cellclass[][1] = 'action_buttons'; + $table->cellclass[][1] = 'table_action_buttons'; $data[1] = "<a href='index.php?sec=gmodules&sec2=godmode/category/edit_category&action=update&id_category=".$category['id'].'&pure='.(int) $config['pure']."'>".html_print_image( 'images/config.png', true, diff --git a/pandora_console/godmode/events/event_filter.php b/pandora_console/godmode/events/event_filter.php index b781f31a9f..ca75e6ff27 100644 --- a/pandora_console/godmode/events/event_filter.php +++ b/pandora_console/godmode/events/event_filter.php @@ -184,7 +184,7 @@ foreach ($filters as $filter) { if (check_acl_restricted_all($config['id_user'], $filter['id_group'], 'EW') || check_acl_restricted_all($config['id_user'], $filter['id_group'], 'EM') ) { - $table->cellclass[][6] = 'action_buttons'; + $table->cellclass[][6] = 'table_action_buttons'; $data[6] = "<a onclick='if(confirm(\"".__('Are you sure?')."\")) return true; else return false;'href='index.php?sec=geventos&sec2=godmode/events/events§ion=filter&delete=1&id=".$filter['id_filter'].'&offset=0&pure='.$config['pure']."'>".html_print_image( 'images/cross.png', true, diff --git a/pandora_console/godmode/events/event_responses.list.php b/pandora_console/godmode/events/event_responses.list.php index 550ac994e9..2ae6361537 100644 --- a/pandora_console/godmode/events/event_responses.list.php +++ b/pandora_console/godmode/events/event_responses.list.php @@ -63,7 +63,7 @@ foreach ($event_responses as $response) { $data[0] = '<a href="index.php?sec=geventos&sec2=godmode/events/events§ion=responses&mode=editor&id_response='.$response['id'].'&pure='.$config['pure'].'">'.$response['name'].'</a>'; $data[1] = $response['description']; $data[2] = ui_print_group_icon($response['id_group'], true); - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = '<a href="index.php?sec=geventos&sec2=godmode/events/events§ion=responses&action=delete_response&id_response='.$response['id'].'&pure='.$config['pure'].'">'.html_print_image( 'images/cross.png', true, diff --git a/pandora_console/godmode/extensions.php b/pandora_console/godmode/extensions.php index a9df7146c3..966ecd0ce7 100644 --- a/pandora_console/godmode/extensions.php +++ b/pandora_console/godmode/extensions.php @@ -252,7 +252,7 @@ foreach ($extensions as $file => $extension) { // Avoid to delete or disabled update_manager if ($file != 'update_manager.php') { - $table->cellclass[][10] = 'action_buttons'; + $table->cellclass[][10] = 'table_action_buttons'; if (!$extension['enabled']) { $data[] = '<a title="'.__('Delete').'" href="index.php?sec=godmode/extensions&sec2=godmode/extensions&enterprise='.(int) $extension['enterprise'].'&delete='.$file.'" class="mn">'.html_print_image('images/cross.disabled.png', true, ['class' => 'filter_none']).'</a>'.' <a title="'.__('Enable').'" href="index.php?sec=godmode/extensions&sec2=godmode/extensions&enterprise='.(int) $extension['enterprise'].'&enabled='.$file.'" class="mn">'.html_print_image('images/lightbulb_off.png', true, ['class' => 'filter_none']).'</a>'; } else { diff --git a/pandora_console/godmode/groups/group_list.php b/pandora_console/godmode/groups/group_list.php index 990b0bac77..87d0e91b53 100644 --- a/pandora_console/godmode/groups/group_list.php +++ b/pandora_console/godmode/groups/group_list.php @@ -909,7 +909,7 @@ if ($tab == 'tree') { $table->data[$key][4] = $group['parent_name']; $table->data[$key][5] = $group['description']; if ($is_management_allowed === true) { - $table->cellclass[$key][6] = 'action_buttons'; + $table->cellclass[$key][6] = 'table_action_buttons'; $table->data[$key][6] = '<a href="'.$url.'">'.html_print_image( 'images/config.png', true, diff --git a/pandora_console/godmode/groups/modu_group_list.php b/pandora_console/godmode/groups/modu_group_list.php index 5fa233ce86..cbd9a4c0d5 100644 --- a/pandora_console/godmode/groups/modu_group_list.php +++ b/pandora_console/godmode/groups/modu_group_list.php @@ -272,7 +272,7 @@ if (empty($groups) === false) { if (is_metaconsole() === true) { $data[2] = '<a href="index.php?sec=advanced&sec2=advanced/component_management&tab=module_group&id_group='.$id_group['id_mg'].'&delete_group=1" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['border' => '0']).'</a>'; } else { - $table->cellclass[][2] = 'action_buttons'; + $table->cellclass[][2] = 'table_action_buttons'; $data[2] = '<a href="index.php?sec=gmodules&sec2=godmode/groups/modu_group_list&id_group='.$id_group['id_mg'].'&delete_group=1" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['border' => '0']).'</a>'; } } else { diff --git a/pandora_console/godmode/modules/manage_nc_groups.php b/pandora_console/godmode/modules/manage_nc_groups.php index e3a546d16f..60d72aea79 100644 --- a/pandora_console/godmode/modules/manage_nc_groups.php +++ b/pandora_console/godmode/modules/manage_nc_groups.php @@ -270,7 +270,7 @@ foreach ($groups as $group) { $data[0] = $tabulation.'<a href="index.php?sec=gmodules&sec2=godmode/modules/manage_nc_groups&id='.$group['id_sg'].'">'.$group['name'].'</a>'; } - $table->cellclass[][1] = 'action_buttons'; + $table->cellclass[][1] = 'table_action_buttons'; if (is_management_allowed() === true || is_metaconsole()) { $data[1] = "<a onclick='if(confirm(\"".__('Are you sure?')."\")) return true; else return false;' href='index.php?sec=".$sec.'&sec2=godmode/modules/manage_nc_groups&delete=1&id='.$group['id_sg']."&offset=0'>".html_print_image('images/cross.png', true, ['title' => __('Delete')]).'</a>'; diff --git a/pandora_console/godmode/modules/manage_network_components.php b/pandora_console/godmode/modules/manage_network_components.php index 6841449ea6..54ff9f07cb 100644 --- a/pandora_console/godmode/modules/manage_network_components.php +++ b/pandora_console/godmode/modules/manage_network_components.php @@ -851,7 +851,7 @@ foreach ($components as $component) { $data[5] = $component['max'].' / '.$component['min']; if ($is_management_allowed === true) { - $table->cellclass[][6] = 'action_buttons'; + $table->cellclass[][6] = 'table_action_buttons'; $data[6] = '<a class="inline_line float-left" href="'.$url.'&search_id_group='.$search_id_group.'search_string='.$search_string.'&duplicate_network_component=1&source_id='.$component['id_nc'].'">'.html_print_image( 'images/copy.png', true, diff --git a/pandora_console/godmode/modules/manage_network_templates.php b/pandora_console/godmode/modules/manage_network_templates.php index 00dab888b2..2fd5707570 100644 --- a/pandora_console/godmode/modules/manage_network_templates.php +++ b/pandora_console/godmode/modules/manage_network_templates.php @@ -261,7 +261,7 @@ foreach ($result as $row) { $data[0] = html_print_checkbox_extended('delete_multiple[]', $row['id_np'], false, false, '', 'class="check_delete"', true); $data[1] = '<a href="index.php?sec=gmodules&sec2=godmode/modules/manage_network_templates_form&id_np='.$row['id_np'].'">'.io_safe_output($row['name']).'</a>'; $data[2] = ui_print_truncate_text(io_safe_output($row['description']), 'description', true, true, true, '[…]'); - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = html_print_input_image( 'delete_profile', 'images/cross.png', diff --git a/pandora_console/godmode/netflow/nf_edit.php b/pandora_console/godmode/netflow/nf_edit.php index 4ba54a9c75..0df87401ac 100644 --- a/pandora_console/godmode/netflow/nf_edit.php +++ b/pandora_console/godmode/netflow/nf_edit.php @@ -191,7 +191,7 @@ foreach ($filters as $filter) { $data[3] = ''; if (check_acl_restricted_all($config['id_user'], $filter['id_group'], 'AW')) { - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = "<a onclick='if(confirm(\"".__('Are you sure?')."\")) return true; else return false;' href='".$config['homeurl'].'index.php?sec=netf&sec2=godmode/netflow/nf_edit&delete=1&id='.$filter['id_sg']."&offset=0&pure=$pure'>".html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']).'</a>'; } diff --git a/pandora_console/godmode/reporting/graphs.php b/pandora_console/godmode/reporting/graphs.php index 67131715cf..b5c3524d93 100644 --- a/pandora_console/godmode/reporting/graphs.php +++ b/pandora_console/godmode/reporting/graphs.php @@ -348,7 +348,7 @@ $table_aux = new stdClass(); $data[3] = ui_print_group_icon($graph['id_group'], true); $data[4] = ''; - $table->cellclass[][4] = 'action_buttons'; + $table->cellclass[][4] = 'table_action_buttons'; if (($report_w || $report_m)) { $data[4] = '<a href="index.php?sec=reporting&sec2=godmode/reporting/graph_builder&edit_graph=1&id='.$graph['id_graph'].'">'.html_print_image( 'images/config.png', diff --git a/pandora_console/godmode/reporting/map_builder.php b/pandora_console/godmode/reporting/map_builder.php index dd35798ff6..575c5456e6 100644 --- a/pandora_console/godmode/reporting/map_builder.php +++ b/pandora_console/godmode/reporting/map_builder.php @@ -509,8 +509,8 @@ if (!$maps && is_metaconsole() === false) { if ($vconsoles_write_action_btn || $vconsoles_manage_action_btn) { if (is_metaconsole() === false) { $table->cellclass[] = [ - 3 => 'action_buttons', - 4 => 'action_buttons', + 3 => 'table_action_buttons', + 4 => 'table_action_buttons', ]; $data[3] = '<a class="copy_visualmap" href="index.php?sec=network&sec2=godmode/reporting/map_builder&id_layout='.$map['id'].'&copy_layout=1">'.html_print_image( 'images/copy.png', diff --git a/pandora_console/godmode/reporting/reporting_builder.list_items.php b/pandora_console/godmode/reporting/reporting_builder.list_items.php index c69f98d3c1..ae2d92bfbc 100755 --- a/pandora_console/godmode/reporting/reporting_builder.list_items.php +++ b/pandora_console/godmode/reporting/reporting_builder.list_items.php @@ -616,7 +616,7 @@ foreach ($items as $item) { $row[6] = ''; if (check_acl($config['id_user'], $item['id_group'], 'RM')) { - $table->cellclass[][6] = 'action_buttons'; + $table->cellclass[][6] = 'table_action_buttons'; $row[6] .= '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=item_editor&action=edit&id_report='.$idReport.'&id_item='.$item['id_rc'].'">'.html_print_image( 'images/config.png', true, diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index d12c8212ab..3979a2159d 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -1148,7 +1148,7 @@ switch ($action) { if ($edit || $delete) { $columnview = true; - $table->cellclass[][$next] = 'action_buttons'; + $table->cellclass[][$next] = 'table_action_buttons'; if (!isset($table->head[$next])) { $table->head[$next] = '<span title="Operations">'.__('Op.').'</span>'.html_print_checkbox('all_delete', 0, false, true, false); diff --git a/pandora_console/godmode/servers/modificar_server.php b/pandora_console/godmode/servers/modificar_server.php index f7775e7a6f..cbfe76dc0f 100644 --- a/pandora_console/godmode/servers/modificar_server.php +++ b/pandora_console/godmode/servers/modificar_server.php @@ -1,17 +1,32 @@ <?php +/** + * Server list view. + * + * @category Server + * @package Pandora FMS + * @subpackage Community + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2005-2023 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. + * ============================================================================ + */ -// Pandora FMS - http://pandorafms.com -// ================================================== -// Copyright (c) 2005-2021 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. -// Load global vars +// Load global vars. global $config; require_once 'include/functions_servers.php'; @@ -28,10 +43,28 @@ if (! check_acl($config['id_user'], 0, 'AW')) { exit; } -if (isset($_GET['server'])) { +if (isset($_GET['server']) === true) { $id_server = get_parameter_get('server'); // Headers. - ui_print_page_header(__('Update Server'), 'images/gm_servers.png', false, 'servers', true); + ui_print_standard_header( + __('Update Server'), + 'images/gm_servers.png', + false, + '', + true, + [], + [ + [ + 'link' => '', + 'label' => __('Servers'), + ], + [ + 'link' => 'index.php?sec=gservers&sec2=godmode/servers/modificar_server', + 'label' => __('%s servers', get_product_name()), + ], + ] + ); + $sql = sprintf('SELECT name, ip_address, description, server_type, exec_proxy, port FROM tserver WHERE id_server = %d', $id_server); $row = db_get_row_sql($sql); echo '<form name="servers" method="POST" action="index.php?sec=gservers&sec2=godmode/servers/modificar_server&update=1">'; @@ -67,7 +100,7 @@ if (isset($_GET['server'])) { html_print_input_text('description', $row['description'], '', 50, 0, true), ]; - if (enterprise_installed()) { + if (enterprise_installed() === true) { $table->data[] = [ __('Type'), $server_type, @@ -163,7 +196,24 @@ if (isset($_GET['server'])) { $buttons[$tab]['active'] = true; - ui_print_page_header(__('Remote Configuration'), 'images/gm_servers.png', false, 'servers', true, $buttons); + ui_print_standard_header( + __('Remote Configuration'), + 'images/gm_servers.png', + false, + 'servers', + true, + $buttons, + [ + [ + 'link' => '', + 'label' => __('Servers'), + ], + [ + 'link' => 'index.php?sec=gservers&sec2=godmode/servers/modificar_server', + 'label' => __('%s servers', get_product_name()), + ], + ] + ); if ($tab === 'standard_editor') { $advanced_editor = false; @@ -186,7 +236,20 @@ if (isset($_GET['server'])) { enterprise_include('godmode/servers/server_disk_conf_editor.php'); } else { // Header. - ui_print_page_header(__('%s servers', get_product_name()), 'images/gm_servers.png', false, '', true); + ui_print_standard_header( + __('%s servers', get_product_name()), + 'images/gm_servers.png', + false, + '', + true, + [], + [ + [ + 'link' => '', + 'label' => __('Servers'), + ], + ] + ); // Move SNMP modules back to the enterprise server. if (isset($_GET['server_reset_snmp_enterprise']) === true) { diff --git a/pandora_console/godmode/servers/servers.build_table.php b/pandora_console/godmode/servers/servers.build_table.php index 9629dccb22..4943d7af0d 100644 --- a/pandora_console/godmode/servers/servers.build_table.php +++ b/pandora_console/godmode/servers/servers.build_table.php @@ -106,7 +106,7 @@ foreach ($servers as $server) { $table->cellclass[] = [ 3 => 'progress_bar', - 8 => 'action_buttons', + 8 => 'table_action_buttons', ]; $data[0] = '<span title="'.$server['version'].'">'.strip_tags($server['name']).'</span>'; diff --git a/pandora_console/godmode/setup/gis.php b/pandora_console/godmode/setup/gis.php index ff0f4f426c..960529d930 100755 --- a/pandora_console/godmode/setup/gis.php +++ b/pandora_console/godmode/setup/gis.php @@ -85,7 +85,7 @@ if ($mapsConnections !== false) { '<a href="index.php?sec=gsetup&sec2=godmode/setup/setup&section=gis&id_connection_map='.$mapsConnection['id_tmap_connection'].'&action=delete_connection" onClick="javascript: if (!confirm(\''.__('Do you wan delete this connection?').'\')) return false;">'.html_print_image('images/cross.png', true, ['class' => 'invert_filter']).'</a>', ]; - $table->cellclass[][2] = 'action_buttons'; + $table->cellclass[][2] = 'table_action_buttons'; } } diff --git a/pandora_console/godmode/setup/links.php b/pandora_console/godmode/setup/links.php index adb23600d5..f1a5e9fca2 100644 --- a/pandora_console/godmode/setup/links.php +++ b/pandora_console/godmode/setup/links.php @@ -171,7 +171,7 @@ if ((isset($_GET['form_add'])) or (isset($_GET['form_edit']))) { } echo "<tr><td class='$tdcolor'><b><a href='index.php?sec=gsetup&sec2=godmode/setup/links&form_edit=1&id_link=".$row['id_link']."'>".$row['name'].'</a></b></td>'; - echo '<td class="'.$tdcolor.' action_buttons"><a href="index.php?sec=gsetup&sec2=godmode/setup/links&id_link='.$row['id_link'].'&borrar='.$row['id_link'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image( + echo '<td class="'.$tdcolor.' table_action_buttons"><a href="index.php?sec=gsetup&sec2=godmode/setup/links&id_link='.$row['id_link'].'&borrar='.$row['id_link'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image( 'images/cross.png', true, ['class' => 'invert_filter'] diff --git a/pandora_console/godmode/setup/news.php b/pandora_console/godmode/setup/news.php index a7a22cfe67..633e8f224f 100644 --- a/pandora_console/godmode/setup/news.php +++ b/pandora_console/godmode/setup/news.php @@ -287,7 +287,7 @@ if ((isset($_GET['form_add'])) || (isset($_GET['form_edit']))) { echo "<td class='$tdcolor'>".__('No').'</b></td>'; } - echo '<td class="'.$tdcolor.' action_buttons"><a href="index.php?sec=gsetup&sec2=godmode/setup/news&id_news='.$row['id_news'].'&borrar='.$row['id_news'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['border' => '0', 'class' => 'invert_filter']).'</a></td></tr>'; + echo '<td class="'.$tdcolor.' table_action_buttons"><a href="index.php?sec=gsetup&sec2=godmode/setup/news&id_news='.$row['id_news'].'&borrar='.$row['id_news'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['border' => '0', 'class' => 'invert_filter']).'</a></td></tr>'; } echo '</table>'; diff --git a/pandora_console/godmode/setup/os.list.php b/pandora_console/godmode/setup/os.list.php index 507f098bc0..48a8b9b534 100644 --- a/pandora_console/godmode/setup/os.list.php +++ b/pandora_console/godmode/setup/os.list.php @@ -117,7 +117,7 @@ foreach ($osList as $os) { $data[] = ui_print_truncate_text(io_safe_output($os['description']), 'description', true, true); if ($is_management_allowed === true) { - $table->cellclass[][4] = 'action_buttons'; + $table->cellclass[][4] = 'table_action_buttons'; if ($os['id_os'] > 16) { if (is_metaconsole()) { $data[] = '<a href="index.php?sec=advanced&sec2=advanced/component_management&tab=os_manage&action=delete&tab2=list&id_os='.$os['id_os'].'">'.html_print_image('images/cross.png', true).'</a>'; diff --git a/pandora_console/godmode/snmpconsole/snmp_filters.php b/pandora_console/godmode/snmpconsole/snmp_filters.php index de9f86697a..59b01469ca 100644 --- a/pandora_console/godmode/snmpconsole/snmp_filters.php +++ b/pandora_console/godmode/snmpconsole/snmp_filters.php @@ -320,7 +320,7 @@ if ($edit_filter > -2) { $data[0] = $compose_id; $data[1] = implode(' AND ', $compose_filter); $data[2] = $compose_action; - $table->cellclass[][2] = 'action_buttons'; + $table->cellclass[][2] = 'table_action_buttons'; array_push($table->data, $data); } } diff --git a/pandora_console/godmode/tag/tag.php b/pandora_console/godmode/tag/tag.php index b808edde9b..da4a638208 100644 --- a/pandora_console/godmode/tag/tag.php +++ b/pandora_console/godmode/tag/tag.php @@ -381,7 +381,7 @@ if (empty($result) === false) { $data[5] = $output; if ($is_management_allowed === true) { - $table->cellclass[][6] = 'action_buttons'; + $table->cellclass[][6] = 'table_action_buttons'; $data[6] = "<a href='index.php?sec=".$sec.'&sec2=godmode/tag/edit_tag&action=update&id_tag='.$tag['id_tag']."'>"; $data[6] .= html_print_image( 'images/config.png', diff --git a/pandora_console/godmode/users/profile_list.php b/pandora_console/godmode/users/profile_list.php index 7ce7c82cc0..da8eac4e9e 100644 --- a/pandora_console/godmode/users/profile_list.php +++ b/pandora_console/godmode/users/profile_list.php @@ -425,7 +425,7 @@ foreach ($profiles as $profile) { $data['NW'] = (empty($profile['network_config_edit']) === false) ? $img : ''; $data['NM'] = (empty($profile['network_config_management']) === false) ? $img : ''; $data['PM'] = (empty($profile['pandora_management']) === false) ? $img : ''; - $table->cellclass[]['operations'] = 'action_buttons'; + $table->cellclass[]['operations'] = 'table_action_buttons'; if ($is_management_allowed === true) { $data['operations'] = '<a href="index.php?sec='.$sec.'&sec2=godmode/users/configure_profile&id='.$profile['id_perfil'].'&pure='.$pure.'">'.html_print_image( 'images/config.png', diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php index b7e45f0fac..c9f6dce01f 100644 --- a/pandora_console/godmode/users/user_list.php +++ b/pandora_console/godmode/users/user_list.php @@ -769,7 +769,7 @@ foreach ($info as $user_id => $user_info) { $data[5] = ui_print_string_substr($user_info['comments'], 24, true); if ($is_management_allowed === true) { - $table->cellclass[][6] = 'action_buttons'; + $table->cellclass[][6] = 'table_action_buttons'; $data[6] = ''; if ($user_is_admin || $config['id_user'] == $user_info['id_user'] diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php index 8b94093eb1..76ab825db3 100644 --- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php +++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php @@ -1033,7 +1033,7 @@ class DiscoveryTaskList extends HTML $data[9] = '-'; } - $table->cellclass[][9] = 'action_buttons'; + $table->cellclass[][9] = 'table_action_buttons'; // Div neccesary for modal progress task. echo '<div id="progress_task_'.$task['id_rt'].'" class="invisible"></div>'; diff --git a/pandora_console/images/svg/Iconset_7_11_22.zip b/pandora_console/images/svg/Iconset_7_11_22.zip deleted file mode 100644 index d5605989f370783fb699aed362874d709cbbd695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110340 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 diff --git a/pandora_console/include/class/AuditLog.class.php b/pandora_console/include/class/AuditLog.class.php index 0fa0e62cb1..69c14bd565 100644 --- a/pandora_console/include/class/AuditLog.class.php +++ b/pandora_console/include/class/AuditLog.class.php @@ -116,11 +116,11 @@ class AuditLog extends HTML $columns, [ 'text' => 'security', - 'class' => 'w80px action_buttons show_security_info', + 'class' => 'w80px table_action_buttons show_security_info', ], [ 'text' => 'action', - 'class' => 'w80px action_buttons show_extended_info', + 'class' => 'w80px table_action_buttons show_extended_info', ] ); diff --git a/pandora_console/include/class/ConfigPEN.class.php b/pandora_console/include/class/ConfigPEN.class.php index b3e8d9d319..87bfd223a2 100644 --- a/pandora_console/include/class/ConfigPEN.class.php +++ b/pandora_console/include/class/ConfigPEN.class.php @@ -599,7 +599,7 @@ class ConfigPEN extends HTML __('Description'), [ 'text' => __('Options'), - 'class' => 'action_buttons', + 'class' => 'table_action_buttons', ], ]; diff --git a/pandora_console/include/class/CredentialStore.class.php b/pandora_console/include/class/CredentialStore.class.php index a134f999b8..01810c341a 100644 --- a/pandora_console/include/class/CredentialStore.class.php +++ b/pandora_console/include/class/CredentialStore.class.php @@ -843,7 +843,7 @@ class CredentialStore extends Wizard __('User'), [ 'text' => __('Options'), - 'class' => 'action_buttons', + 'class' => 'table_action_buttons', ], ]; diff --git a/pandora_console/include/class/ModuleTemplates.class.php b/pandora_console/include/class/ModuleTemplates.class.php index 312c69bf86..e60bad1951 100644 --- a/pandora_console/include/class/ModuleTemplates.class.php +++ b/pandora_console/include/class/ModuleTemplates.class.php @@ -870,7 +870,7 @@ class ModuleTemplates extends HTML $data[0] = html_print_checkbox_extended('delete_multiple[]', $row['id_np'], false, false, '', 'class="check_delete"', true); $data[1] = '<a href="'.$this->baseUrl.'&id_np='.$row['id_np'].'">'.io_safe_output($row['name']).'</a>'; $data[2] = ui_print_truncate_text(io_safe_output($row['description']), 'description', true, true, true, '[…]'); - $table->cellclass[][3] = 'action_buttons'; + $table->cellclass[][3] = 'table_action_buttons'; $data[3] = html_print_input_image( 'delete_profile', 'images/cross.png', diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index c0d91e35f1..5e654faa3b 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -4456,3 +4456,17 @@ function agents_get_starmap(int $id_agent, float $width=0, float $height=0) return $html; } + + +/** + * Defines a hash for agent name. + * + * @param string $alias Alias. + * @param string $nombre_agente Agent name. + * + * @return string. + */ +function hash_agent_name(string $alias, string $nombre_agente) +{ + return hash('sha256', $alias.'|'.$nombre_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000))); +} \ No newline at end of file diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 97a9e56f21..5bf22a21d8 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -4053,6 +4053,28 @@ function html_print_radio_button($name, $value, $label='', $checkedvalue='', $re } +/** + * Render a Switch-Radio selector buttons. + * + * @param array $switches Switches for add (html_print_radio_button). + * @param array $attributes Special attributes. + * @param boolean $return Return. False by default. + * + * @return mixed. + */ +function html_print_switch_radio_button(array $switches, array $attributes=[], bool $return=false) +{ + return html_print_div( + [ + 'id' => ($attributes['id'] ?? ''), + 'class' => 'switch_radio_button '.($attributes['class'] ?? ''), + 'content' => implode('', $switches), + ], + $return + ); +} + + /** * Render a checkbox button input. Extended version, use html_print_checkbox() to simplify. * @@ -4065,6 +4087,7 @@ function html_print_radio_button($name, $value, $label='', $checkedvalue='', $re * @param boolean $return Whether to return an output string or echo now (optional, echo by default). * @param string $id Custom id. * @param string $customAttributes Custom Attribute for customized checkbox. + * @param string $customHTML Custom HTML for customized checkbox. * * @return string HTML code if return parameter is true. */ @@ -4077,7 +4100,8 @@ function html_print_checkbox_extended( $attributes, $return=false, $id='', - $customAttributes='' + $customAttributes='', + $customHTML='' ) { static $idcounter = []; @@ -4097,6 +4121,7 @@ function html_print_checkbox_extended( $output .= ((bool) $disabled === true) ? ' disabled="disabled"' : ''; $output .= ' '.$attributes; $output .= ' />'; + $output .= $customHTML; $output .= '<span class="custom_checkbox_show custom_checkbox_image" '.$customAttributes.'></span>'; $output .= '</label>'; $output .= "\n"; @@ -4122,6 +4147,7 @@ function html_print_checkbox_extended( * @param string $attributes Extra attributes. * @param string $id Custom ID. * @param string $customAttributes Custom Attribute for customized checkbox. + * @param string $customHTML Custom HTML for customized checkbox. * * @return string HTML code if return parameter is true. */ @@ -4135,7 +4161,8 @@ function html_print_checkbox( $disabled_hidden=false, $attributes='', $id='', - $customAttributes='' + $customAttributes='', + $customHTML='' ) { $output = html_print_checkbox_extended( $name, @@ -4146,7 +4173,8 @@ function html_print_checkbox( $attributes, true, $id, - $customAttributes + $customAttributes, + $customHTML ); if (!$disabled_hidden) { $output .= html_print_input_hidden($name.'_sent', 1, true); diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index c5a1a643c6..d2eec15e5f 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -3580,7 +3580,7 @@ function ui_print_datatable(array $parameters) if($("#button-'.$form_id.'_search_bt") != undefined) { $("#'.$form_id.'_loading").remove(); } - // Move elements to action_buttons bar. + // Move elements to table_action_buttons bar. $(".action_buttons_right_content").append($("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers")); $(".action_buttons_right_content").append($("#'.$table_id.'_wrapper > #table_events_length")); diff --git a/pandora_console/include/lib/Dashboard/Widgets/events_list.php b/pandora_console/include/lib/Dashboard/Widgets/events_list.php index 2dc1d57426..58c947f4bf 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/events_list.php +++ b/pandora_console/include/lib/Dashboard/Widgets/events_list.php @@ -617,7 +617,7 @@ class EventsListWidget extends Widget 'event_type', [ 'text' => 'options', - 'class' => 'action_buttons w120px', + 'class' => 'table_action_buttons w120px', ], ]; $fields = explode(',', $config['event_fields']); diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index e7e008185b..1f9f043f3a 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -1047,12 +1047,13 @@ select:-internal-list-box { div#page { background: #fbfbfb; background-image: none; - clear: both; + /* clear: both; */ width: auto; - padding-top: 5px; - /*padding-right: 3em;*/ + /* padding-top: 5px; */ + /* padding-right: 3em; */ display: flex; flex-direction: column; + margin-top: 58px; } body.pure { @@ -1068,11 +1069,13 @@ div#container { } div#main { - /*width: 100%;*/ - /*margin-left: 3em;*/ + display: flex; + /* width: 100%; */ + /* margin-left: 3em; */ margin-bottom: 3em; position: relative; - margin-top: 8.8em; + /* margin-top: 8.8em; */ + flex-direction: column; } textarea.conf_editor { @@ -1711,23 +1714,23 @@ div.title_line { #menu_tab_frame, #menu_tab_frame_view, #menu_tab_frame_view_bc { - position: fixed; + position: sticky; top: 59px; z-index: 10; display: flex; align-items: flex-end; justify-content: space-between; border-bottom: 4px solid #14524f; - /*width: calc(100% + 3em);*/ + /* width: calc(100% + 3em); */ width: -webkit-fill-available; width: -moz-fill-available; padding-right: 0px; - margin-bottom: 20px; + /* margin-bottom: 20px; */ height: 56px; box-sizing: border-box; background-color: #fff; - box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.1); - /*margin-left: -3em;*/ + box-shadow: 1px 1px 4px rgb(0 0 0 / 10%); + /* margin-left: -3em;*/ } /* Breadcrum */ @@ -2257,8 +2260,8 @@ table#simple span#component { table#simple label { display: inline; - font-weight: normal; - font-style: italic; + /*font-weight: normal;*/ + /*font-style: italic;*/ } .clickable { @@ -5280,42 +5283,6 @@ input:checked + .p-slider:before { color: #4d4d4d; } -/* This class is for the icons of actions and operations in the tables. */ -.action_buttons a[href] img, -.action_buttons input[type="image"], -.action_button_img { - border-radius: 4px; - border: 1px solid #dcdcdc !important; - padding: 1px !important; - box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); - max-width: 21px; -} - -/* This class is for only one icon to be a button type. */ -.action_button_img { - cursor: pointer; -} - -.action_buttons a, -.action_buttons input[type="image"] { - margin-right: 5px; - display: inline-block; -} - -.action_buttons a:last-child, -.action_buttons input[type="image"]:last-child { - margin-right: 0px; -} - -.action_buttons a:hover { - background-color: #fff; - border-radius: 4px; -} - -.action_buttons input[type="image"]:hover { - background-color: #fff; -} - /* Tables to upload files */ #table_filemanager tr:first-child th span { font-weight: bold; @@ -5706,6 +5673,7 @@ div.label_select_child_left > span { .switch_radio_button { display: flex; overflow: hidden; + height: 32px; } .switch_radio_button input { @@ -5720,7 +5688,7 @@ div.label_select_child_left > span { .switch_radio_button label { background-color: #fff; color: rgba(0, 0, 0, 0.6); - line-height: 1; + line-height: 0; text-align: center; padding: 14px 10px; margin-right: -1px; @@ -5728,7 +5696,7 @@ div.label_select_child_left > span { transition: all 0.1s ease-in-out; } -.switch_radio_button label:first-child { +.switch_radio_button label:first { border-top-left-radius: 4px; border-bottom-left-radius: 4px; } @@ -5743,12 +5711,22 @@ div.label_select_child_left > span { cursor: pointer; } -.switch_radio_button input:checked + label { +.switch_radio_button input:checked + label, +.switch_radio_button input:checked:has(.custom_checkbox) { background-color: #1d7873; box-shadow: none; color: #fff !important; } +/* +.switch_radio_button .custom_checkbox_show { + display: none; +} +.switch_radio_button .custom_checkbox_caption { + line-height: 0; +} + +*/ /* * --------------------------------------------------------------------- * - MODULE GRAPHS @@ -10632,12 +10610,12 @@ pre.external_tools_output { } .fixed_filter_bar { - position: fixed; + position: sticky; height: 60px; top: 114px; border: 1px solid #e5e9ed; background-color: #fff; - z-index: 0; + z-index: 1; width: -webkit-fill-available; width: -moz-fill-available; } diff --git a/pandora_console/include/styles/pandora_black.css b/pandora_console/include/styles/pandora_black.css index 2affa15eb4..4cb0411131 100644 --- a/pandora_console/include/styles/pandora_black.css +++ b/pandora_console/include/styles/pandora_black.css @@ -330,8 +330,8 @@ table.black_table_modal_alternate tr:nth-child(even) td { color: #fff; } -.action_buttons a[href] img, -.action_buttons input[type="image"], +.table_action_buttons a[href] img, +.table_action_buttons input[type="image"], .action_button_img { filter: brightness(4.5) contrast(50%); background-color: transparent !important; diff --git a/pandora_console/include/styles/tables.css b/pandora_console/include/styles/tables.css index c0c3875521..8e3fdddbe8 100644 --- a/pandora_console/include/styles/tables.css +++ b/pandora_console/include/styles/tables.css @@ -91,7 +91,6 @@ .info_table { background-color: #fff; /* margin-bottom: 10px; */ - margin: 64px auto 0; border-spacing: 0; border-collapse: collapse; overflow: hidden; @@ -99,7 +98,8 @@ } .info_table > tbody > tr:nth-child(even) { - background-color: #f5f5f5; + /*background-color: #f5f5f5;*/ + background-color: #f6f7fb; } .info_table tr > td:first-child, @@ -164,7 +164,7 @@ } .info_table > tbody > tr { - border-bottom: 1px solid #e2e2e2; + /*border-bottom: 1px solid #e2e2e2;*/ } .info_table > tbody > tr > td { @@ -193,9 +193,19 @@ vertical-align: middle; } +.table_action_buttons > a, +.table_action_buttons > img { + visibility: hidden; +} .info_table > tbody > tr:hover { /* This !important is necessary to overwrite the white background of tables with less than 5 rows. */ - background-color: #eee !important; + /*background-color: #eee !important;*/ + background-color: #d9efee !important; +} + +.info_table > tbody > tr:hover .table_action_buttons > a, +.info_table > tbody > tr:hover .table_action_buttons > img { + visibility: visible; } .info_.profile_list > thead > tr > th > a.tip { @@ -233,9 +243,8 @@ .datos4 *, .info_table .datos3 *, .info_table .datos4 * { - font-size: 8.6pt; - font-weight: 600; - padding: 1.3em 0; + font-size: 11pt; + padding: 1.5em 0 0.5em; } .datos5 * { @@ -263,7 +272,6 @@ table.dataTable.info_table.no-footer { a.pandora_pagination { background-color: #f6f7fb; - border: 1px solid #c0ccdc; padding: 11px; color: #000; border: 1px solid #cacaca; @@ -367,3 +375,45 @@ a.pandora_pagination.current:hover { .info_table tr th.sorting_desc { padding-left: 15px; } + +/* This class is for the icons of actions and operations in the tables. */ +.table_action_buttons a[href] img, +.table_action_buttons input[type="image"], +.action_button_img { + border-radius: 4px; + /*border: 1px solid #dcdcdc !important;*/ + padding: 1px !important; + /*box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);*/ + width: 24px; + height: 24px; +} + +/* This class is for only one icon to be a button type. */ +.action_button_img { + cursor: pointer; +} + +.table_action_buttons a, +.table_action_buttons input[type="image"] { + margin-right: 5px; + display: inline-block; +} + +.table_action_buttons a:last-child, +.table_action_buttons input[type="image"]:last-child { + margin-right: 0px; +} + +.table_action_buttons a:hover { + background-color: #fff; + border-radius: 4px; +} + +.table_action_buttons input[type="image"]:hover { + background-color: #fff; +} + +.table_action_buttons_image { + width: 24px; + height: 24px; +} diff --git a/pandora_console/index.php b/pandora_console/index.php index 050cdcac38..6e872cc1bf 100755 --- a/pandora_console/index.php +++ b/pandora_console/index.php @@ -1566,7 +1566,6 @@ require 'include/php_to_js_values.php'; } // Set the position of principal action buttons. //actionButtons.setAttribute('style', $left+$bottom); - } } diff --git a/pandora_console/operation/agentes/pandora_networkmap.php b/pandora_console/operation/agentes/pandora_networkmap.php index 5a03df54a4..ac011ae87b 100644 --- a/pandora_console/operation/agentes/pandora_networkmap.php +++ b/pandora_console/operation/agentes/pandora_networkmap.php @@ -802,9 +802,9 @@ switch ($tab) { if ($networkmap_write || $networkmap_manage) { $table->cellclass[] = [ - 'copy' => 'action_buttons', - 'edit' => 'action_buttons', - 'delete' => 'action_buttons', + 'copy' => 'table_action_buttons', + 'edit' => 'table_action_buttons', + 'delete' => 'table_action_buttons', ]; $data['copy'] = '<a href="index.php?'.'sec=network&'.'sec2=operation/agentes/pandora_networkmap&'.'copy_networkmap=1&'.'id_networkmap='.$network_map['id'].'" alt="'.__('Copy').'">'.html_print_image('images/copy.png', true, ['class' => 'invert_filter']).'</a>'; $data['edit'] = '<a href="index.php?'.'sec=network&'.'sec2=operation/agentes/pandora_networkmap&'.'tab=edit&'.'edit_networkmap=1&'.'id_networkmap='.$network_map['id'].'" alt="'.__('Config').'">'.html_print_image('images/config.png', true, ['class' => 'invert_filter']).'</a>'; diff --git a/pandora_console/operation/agentes/status_monitor.php b/pandora_console/operation/agentes/status_monitor.php index 2f9e747fcf..3cb91d03ca 100644 --- a/pandora_console/operation/agentes/status_monitor.php +++ b/pandora_console/operation/agentes/status_monitor.php @@ -1519,7 +1519,7 @@ if (!empty($result)) { } if ($show_edit_icon) { - $table->cellclass[][2] = 'action_buttons'; + $table->cellclass[][2] = 'table_action_buttons'; $data[2] .= '<a href="'.$url_edit_module.'">'.html_print_image( 'images/config.png', true, diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index ea53180ad8..bd4b875fe9 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -2177,7 +2177,7 @@ try { 'event_type', [ 'text' => 'options', - 'class' => 'action_buttons w120px', + 'class' => 'table_action_buttons w120px', ], [ 'text' => 'm', @@ -2221,7 +2221,7 @@ try { [ [ 'text' => 'options', - 'class' => 'action_buttons mw120px', + 'class' => 'table_action_buttons mw120px', ], [ 'text' => 'm', diff --git a/pandora_console/operation/gis_maps/gis_map.php b/pandora_console/operation/gis_maps/gis_map.php index a8a12b0012..0e044d37cb 100644 --- a/pandora_console/operation/gis_maps/gis_map.php +++ b/pandora_console/operation/gis_maps/gis_map.php @@ -186,7 +186,7 @@ if ($maps !== false) { $data['default'] = html_print_radio_button_extended('default_map', $map['id_tgis_map'], '', $checked, false, 'setDefault('.$map['id_tgis_map'].');', '', true); } - $table->cellclass[]['op'] = 'action_buttons'; + $table->cellclass[]['op'] = 'table_action_buttons'; $data['op'] = '<a href="index.php?sec=godgismaps&sec2=godmode/gis_maps/configure_gis_map&map_id='.$map['id_tgis_map'].'&action=edit_map">'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'</a>'.'<a href="index.php?sec=godgismaps&sec2=operation/gis_maps/gis_map&map_id='.$map['id_tgis_map'].'&action=delete_map" onclick="return confirmDelete();">'.html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']).'</a>'; } diff --git a/pandora_console/operation/incidents/list_integriaims_incidents.php b/pandora_console/operation/incidents/list_integriaims_incidents.php index 5f32cb7398..cb66d978d4 100644 --- a/pandora_console/operation/incidents/list_integriaims_incidents.php +++ b/pandora_console/operation/incidents/list_integriaims_incidents.php @@ -545,7 +545,7 @@ foreach ($incidents_paginated as $key => $value) { $table->data[$i][6] = $array_get_incidents[$key][10]; $table->data[$i][7] = $array_get_incidents[$key][5]; $table->data[$i][8] = ''; - $table->cellclass[$i][8] = 'action_buttons'; + $table->cellclass[$i][8] = 'table_action_buttons'; $table->data[$i][8] .= '<a href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/configure_integriaims_incident&incident_id='.$array_get_incidents[$key][0]).'">'; $table->data[$i][8] .= html_print_image('images/config.png', true, ['title' => __('Edit')]); $table->data[$i][8] .= '</a>'; diff --git a/pandora_console/operation/messages/message_list.php b/pandora_console/operation/messages/message_list.php index f39cc920aa..b57d1f6532 100644 --- a/pandora_console/operation/messages/message_list.php +++ b/pandora_console/operation/messages/message_list.php @@ -266,7 +266,7 @@ if (empty($messages) === true) { ['prominent' => 'timestamp'] ); - $table->cellclass[][4] = 'action_buttons'; + $table->cellclass[][4] = 'table_action_buttons'; if ($show_sent === true) { $data[4] = '<a href="index.php?sec=message_list&sec2=operation/messages/message_list&show_sent=1&delete_message=1&id='.$message_id.'" onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']).'</a>'; diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index 1c25b7404f..f4a6693277 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -155,26 +155,26 @@ UNLOCK TABLES; LOCK TABLES `tconfig_os` WRITE; INSERT INTO `tconfig_os` (`id_os`, `name`, `description`, `icon_name`, `previous_name`) VALUES -(1,'Linux','Linux: All versions','so_linux.png', ''), -(2,'Solaris','Sun Solaris','so_solaris.png', ''), -(3,'AIX','IBM AIX','so_aix.png', ''), -(4,'BSD','OpenBSD, FreeBSD and Others','so_bsd.png', ''), -(5,'HP-UX','HP-UX Unix OS','so_hpux.png', ''), -(7,'Cisco','CISCO IOS','so_cisco.png', ''), -(8,'MacOS','MAC OS','so_mac.png', ''), -(9,'Windows','Microsoft Windows OS','so_win.png', ''), -(10,'Other','Other SO','so_other.png', ''), -(11,'Network','Network Agent','network.png', ''), -(12,'Web Server','Web Server/Application','network.png', ''), -(13,'Sensor','Hardware Agent (Sensor)','network.png', ''), -(14,'Embedded','Embedded device running an agent','embedded.png', ''), -(15,'Android','Android agent','android.png', ''), -(16, 'VMware', 'VMware Architecture', 'so_vmware.png', ''), -(17, 'Router', 'Generic router', 'so_router.png', ''), -(18, 'Switch', 'Generic switch', 'so_switch.png', ''), -(19, 'Satellite', 'Satellite agent', 'satellite.png', ''), -(20, 'Mainframe', 'Mainframe agent', 'so_mainframe.png', ''), -(100, 'Cluster', 'Cluster agent', 'so_cluster.png', ''); +(1,'Linux','Linux: All versions','linux@svg.svg', ''), +(2,'Solaris','Sun Solaris','solaris@svg.svg', ''), +(3,'AIX','IBM AIX','aix@svg.svg', ''), +(4,'BSD','OpenBSD, FreeBSD and Others','freebsd@svg.svg', ''), +(5,'HP-UX','HP-UX Unix OS','HP@svg.svg', ''), +(7,'Cisco','CISCO IOS','cisco@svg.svg', ''), +(8,'MacOS','MAC OS','apple@svg.svg', ''), +(9,'Windows','Microsoft Windows OS','windows@svg.svg', ''), +(10,'Other','Other SO','other-OS@svg.svg', ''), +(11,'Network','Network Agent','network-server@svg.svg', ''), +(12,'Web Server','Web Server/Application','network-server@svg.svg', ''), +(13,'Sensor','Hardware Agent (Sensor)','network-server@svg.svg', ''), +(14,'Embedded','Embedded device running an agent','embedded@svg.svg', ''), +(15,'Android','Android agent','android@svg.svg', ''), +(16, 'VMware', 'VMware Architecture', 'vmware@svg.svg', ''), +(17, 'Router', 'Generic router', 'routers@svg.svg', ''), +(18, 'Switch', 'Generic switch', 'switch@svg.svg', ''), +(19, 'Satellite', 'Satellite agent', 'satellite@svg.svg', ''), +(20, 'Mainframe', 'Mainframe agent', 'mainframe@svg.svg', ''), +(100, 'Cluster', 'Cluster agent', 'cluster@svg.svg', ''); UNLOCK TABLES; diff --git a/pandora_console/views/calendar/list.php b/pandora_console/views/calendar/list.php index 80a1811b8f..65fc99554d 100644 --- a/pandora_console/views/calendar/list.php +++ b/pandora_console/views/calendar/list.php @@ -84,7 +84,7 @@ try { 'description', [ 'text' => 'options', - 'class' => 'w150px action_buttons', + 'class' => 'w150px table_action_buttons', ], ]; diff --git a/pandora_console/views/dashboard/list.php b/pandora_console/views/dashboard/list.php index c1117e3f36..46b1cd68cc 100644 --- a/pandora_console/views/dashboard/list.php +++ b/pandora_console/views/dashboard/list.php @@ -192,9 +192,9 @@ if (empty($dashboards) === true) { } $table->cellclass[] = [ - 'full_screen' => 'action_buttons', - 'copy' => 'action_buttons', - 'delete' => 'action_buttons', + 'full_screen' => 'table_action_buttons', + 'copy' => 'table_action_buttons', + 'delete' => 'table_action_buttons', ]; $table->data[] = $data;