#12350 resolved conflict

This commit is contained in:
Daniel Maya 2024-02-16 09:25:55 +01:00
commit ef3bfb35f0
143 changed files with 7209 additions and 2096 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.775-240208
Version: 7.0NG.775-240216
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.775-240208"
pandora_version="7.0NG.775-240216"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null

View File

@ -1039,7 +1039,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.775';
use constant AGENT_BUILD => '240208';
use constant AGENT_BUILD => '240216';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.775
%define release 240208
%define release 240216
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.775
%define release 240208
%define release 240216
%define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.775
%define release 240208
%define release 240216
%define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.775
%define release 240208
%define release 240216
Summary: Pandora FMS Linux agent, binary version
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.775
%define release 240208
%define release 240216
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.775"
PI_BUILD="240208"
PI_BUILD="240216"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{240208}
{240216}
ViewReadme
{Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.775 Build 240208")
#define PANDORA_VERSION ("7.0NG.775 Build 240216")
string pandora_path;
string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Pandora FMS"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.775(Build 240208))"
VALUE "ProductVersion", "(7.0NG.775(Build 240216))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.775-240208
Version: 7.0NG.775-240216
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.775-240208"
pandora_version="7.0NG.775-240216"
package_pear=0
package_pandora=1

View File

@ -394,7 +394,7 @@ function quickShellSettings()
__('Address'),
html_print_input_text(
'gotty_addr',
$config['gotty_addr'],
($config['gotty_addr'] ?? ''),
'',
30,
100,
@ -443,9 +443,8 @@ function quickShellSettings()
html_print_checkbox_switch(
'gotty_ssh_use_ssl',
1,
$config['gotty_ssh_use_ssl'],
true,
$disable_agentaccess
($config['gotty_ssh_use_ssl'] ?? false),
true
)
);
@ -497,7 +496,7 @@ function quickShellSettings()
html_print_checkbox_switch(
'gotty_telnet_use_ssl',
1,
$config['gotty_telnet_use_ssl'],
($config['gotty_telnet_use_ssl'] ?? false),
true
)
);

View File

@ -128,6 +128,6 @@ if (empty($data)) {
}
echo '{
"label": "'.htmlspecialchars($graph_title, ENT_QUOTES).'",
"data": [["'.time().'", '.htmlspecialchars($data, ENT_QUOTES).']]
"label": "'.htmlspecialchars(($graph_title ?? ''), ENT_QUOTES).'",
"data": [["'.time().'", '.htmlspecialchars(($data ?? ''), ENT_QUOTES).']]
}';

View File

@ -1,497 +0,0 @@
<?php
/**
* Resources exportation view.
*
* @category Extensions.
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2023 Pandora FMS
* Please see https://pandorafms.com/community/ 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.
if (isset($_GET['get_ptr'])) {
if ($_GET['get_ptr'] == 1) {
$ownDir = dirname(__FILE__).'/';
$ownDir = str_replace('\\', '/', $ownDir);
// Don't start a session before this import.
// The session is configured and started inside the config process.
include_once $ownDir.'../include/config.php';
// Login check
if (!isset($_SESSION['id_usuario'])) {
$config['id_user'] = null;
} else {
$config['id_user'] = $_SESSION['id_usuario'];
}
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access Setup Management'
);
include 'general/noaccess.php';
return;
}
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
header('Content-type: binary');
header('Content-Disposition: attachment; filename="'.get_name_xml_resource($hook_enterprise)).'"';
header('Pragma: no-cache');
header('Expires: 0');
output_xml_resource($hook_enterprise);
}
} else {
extensions_add_godmode_menu_option(__('Resource exportation'), 'PM', 'gagente', '', 'v1r1');
extensions_add_godmode_function('resource_exportation_extension_main');
}
function output_xml_resource($hook_enterprise)
{
global $config;
$type = get_parameter('type');
$id = (int) get_parameter('id');
switch ($type) {
case 'report':
output_xml_report($id);
break;
case 'visual_console':
output_xml_visual_console($id);
break;
default:
if ($hook_enterprise === true) {
$include_agents = get_parameter('include_agents', 0);
return enterprise_output_xml_resource($type, $id, $include_agents);
}
break;
}
}
function output_xml_report($id)
{
global $config;
include_once $config['homedir'].'/include/functions_agents.php';
$report = db_get_row('treport', 'id_report', $id);
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
echo "<report>\n";
echo '<name><![CDATA['.io_safe_output($report['name'])."]]></name>\n";
if (isset($report['description'])) {
echo '<description><![CDATA['.io_safe_output($report['description'])."]]></description>\n";
}
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $report['id_group']);
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
$items = db_get_all_rows_field_filter(
'treport_content',
'id_report',
$report['id_report']
);
foreach ($items as $item) {
echo "<item>\n";
echo '<type>'.io_safe_output($item['type'])."</type>\n";
echo '<description>'.io_safe_output($item['description'])."</description>\n";
echo '<period>'.io_safe_output($item['period'])."</period>\n";
if ($item['id_agent'] != 0) {
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
}
if ($item['id_agent_module'] != 0) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
}
if (isset($agent)) {
echo '<agent><![CDATA['.$agent."]]></agent>\n";
}
$agent = null;
switch (io_safe_output($item['type'])) {
case 2:
case 'custom_graph':
case 'automatic_custom_graph':
$graph = db_get_value('name', 'tgraph', 'id_graph', $item['id_gs']);
echo '<graph><![CDATA['.io_safe_output($graph)."]]></graph>\n";
break;
case 3:
case 'SLA':
echo '<only_display_wrong>'.$item['only_display_wrong']."</only_display_wrong>\n";
echo '<monday>'.$item['monday']."</monday>\n";
echo '<tuesday>'.$item['tuesday']."</tuesday>\n";
echo '<wednesday>'.$item['wednesday']."</wednesday>\n";
echo '<thursday>'.$item['thursday']."</thursday>\n";
echo '<friday>'.$item['friday']."</friday>\n";
echo '<saturday>'.$item['saturday']."</saturday>\n";
echo '<sunday>'.$item['sunday']."</sunday>\n";
echo '<time_from>'.$item['time_from']."</time_from>\n";
echo '<time_to>'.$item['time_to']."</time_to>\n";
$slas = db_get_all_rows_field_filter('treport_content_sla_combined', 'id_report_content', $item['id_rc']);
if ($slas === false) {
$slas = [];
}
foreach ($slas as $sla) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
$agent = db_get_value('alias', 'tagente', 'id_agente', $item['id_agent']);
echo '<sla>';
echo '<agent><![CDATA['.$agent."]]></agent>\n";
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
echo '<sla_max>'.$sla['sla_max']."</sla_max>\n";
echo '<sla_min>'.$sla['sla_min']."</sla_min>\n";
echo '<sla_limit>'.$sla['sla_limit']."</sla_limit>\n";
echo '</sla>';
}
break;
case 'text':
echo '<text><![CDATA['.io_safe_output($item['text'])."]]></text>\n";
break;
case 'sql':
echo '<header_definition><![CDATA['.io_safe_output($item['header_definition'])."]]></header_definition>\n";
if (!empty($item['external_source'])) {
echo '<sql><![CDATA['.io_safe_output($item['external_source'])."]]></sql>\n";
} else {
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
echo '<sql>'.io_safe_output($sql)."</sql>\n";
}
break;
case 'sql_graph_pie':
case 'sql_graph_vbar':
case 'sql_graph_hbar':
echo '<header_definition>'.io_safe_output($item['header_definition'])."</header_definition>\n";
if (!empty($item['external_source'])) {
echo '<sql>'.io_safe_output($item['external_source'])."</sql>\n";
} else {
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
echo '<sql>'.io_safe_output($sql)."</sql>\n";
}
break;
case 'event_report_group':
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $item['id_agent']);
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
break;
case 'url':
echo '<url><![CDATA['.io_safe_output($values['external_source']).']]></url>';
break;
case 'database_serialized':
echo '<header_definition><![CDATA['.io_safe_output($item['header_definition']).']]></header_definition>';
echo '<line_separator><![CDATA['.io_safe_output($item['line_separator']).']]></line_separator>';
echo '<column_separator><![CDATA['.io_safe_output($item['header_definition']).']]></column_separator>';
break;
case 1:
case 'simple_graph':
case 'simple_baseline_graph':
case 6:
case 'monitor_report':
case 7:
case 'avg_value':
case 8:
case 'max_value':
case 9:
case 'min_value':
case 10:
case 'sumatory':
case 'agent_detailed_event':
case 'event_report_agent':
case 'event_report_module':
case 'alert_report_module':
case 'alert_report_agent':
case 'alert_report_group':
default:
// Do nothing.
break;
}
echo "</item>\n";
}
echo "</report>\n";
}
function output_xml_visual_console($id)
{
$visual_map = db_get_row('tlayout', 'id', $id);
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
echo "<visual_map>\n";
echo '<name><![CDATA['.io_safe_output($visual_map['name'])."]]></name>\n";
if ($visual_map['id_group'] != 0) {
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $visual_map['id_group']);
echo '<group><![CDATA['.io_safe_output($group)."]]></group>\n";
}
echo '<background><![CDATA['.io_safe_output($visual_map['background'])."]]></background>\n";
echo '<height>'.io_safe_output($visual_map['height'])."</height>\n";
echo '<width>'.io_safe_output($visual_map['width'])."</width>\n";
$items = db_get_all_rows_field_filter('tlayout_data', 'id_layout', $visual_map['id']);
if ($items === false) {
$items = [];
}
foreach ($items as $item) {
echo "<item>\n";
echo '<other_id>'.$item['id']."</other_id>\n";
// OLD ID USE FOR parent item
$agent = '';
if ($item['id_agent'] != 0) {
$agent = db_get_value('nombre', 'tagente', 'id_agente', $item['id_agent']);
}
if (!empty($item['label'])) {
echo '<label><![CDATA['.io_safe_output($item['label'])."]]></label>\n";
}
echo '<x>'.$item['pos_x']."</x>\n";
echo '<y>'.$item['pos_y']."</y>\n";
echo '<type>'.$item['type']."</type>\n";
if ($item['width'] != 0) {
echo '<width>'.$item['width']."</width>\n";
}
if ($item['height'] != 0) {
echo '<height>'.$item['height']."</height>\n";
}
if (!empty($item['image'])) {
echo '<image>'.$item['image']."</image>\n";
}
if ($item['period'] != 0) {
echo '<period>'.$item['period']."</period>\n";
}
if (isset($item['id_agente_modulo'])) {
if ($item['id_agente_modulo'] != 0) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
$agent = db_get_value('nombre', 'tagente', 'id_agente', $id_agent);
echo '<module><![CDATA['.io_safe_output($module)."]]></module>\n";
}
}
if (!empty($agent)) {
echo '<agent><![CDATA['.$agent."]]></agent>\n";
}
if ($item['id_layout_linked'] != 0) {
echo '<id_layout_linked>'.$item['id_layout_linked']."</id_layout_linked>\n";
}
if ($item['parent_item'] != 0) {
echo '<parent_item>'.$item['parent_item']."</parent_item>\n";
}
if (!empty($item['clock_animation'])) {
echo '<clock_animation>'.$item['clock_animation']."</clock_animation>\n";
}
if (!empty($item['fill_color'])) {
echo '<fill_color>'.$item['fill_color']."</fill_color>\n";
}
if (!empty($item['type_graph'])) {
echo '<type_graph>'.$item['type_graph']."</type_graph>\n";
}
if (!empty($item['time_format'])) {
echo '<time_format>'.$item['time_format']."</time_format>\n";
}
if (!empty($item['timezone'])) {
echo '<timezone>'.$item['timezone']."</timezone>\n";
}
if (!empty($item['border_width'])) {
echo '<border_width>'.$item['border_width']."</border_width>\n";
}
if (!empty($item['border_color'])) {
echo '<border_color>'.$item['border_color']."</border_color>\n";
}
echo "</item>\n";
}
echo "</visual_map>\n";
}
function get_name_xml_resource($hook_enterprise)
{
global $config;
$type = get_parameter('type');
$id = (int) get_parameter('id');
switch ($type) {
case 'report':
$name = db_get_value('name', 'treport', 'id_report', $id);
break;
case 'visual_console':
$name = db_get_value('name', 'tlayout', 'id', $id);
break;
default:
if ($hook_enterprise === true) {
return enterprise_get_name_xml_resource($type, $id);
}
break;
}
$file = io_safe_output($name).'.ptr';
return $file;
}
function get_xml_resource()
{
global $config;
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
}
function resource_exportation_extension_main()
{
global $config;
check_login();
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access Setup Management'
);
include 'general/noaccess.php';
return;
}
$hook_enterprise = enterprise_include('extensions/resource_exportation/functions.php');
ui_print_standard_header(
__('Resource exportation'),
'images/extensions.png',
false,
'',
true,
[],
[
[
'link' => '',
'label' => __('Resources'),
],
[
'link' => '',
'label' => __('Resource exporting'),
],
]
);
ui_print_warning_message(
__('This extension makes exportation of resource template more easy.').'<br>'.__('You can export resource templates in .ptr format.')
);
$table = new stdClass();
$table->class = 'databox filter-table-adv';
$table->id = 'resource_exportation_table';
$table->style = [];
$table->style[0] = 'width: 30%';
$table->style[1] = 'vertical-align: bottom;';
$table->data = [];
$table->data[0][] = html_print_label_input_block(
__('Report'),
html_print_div(
[
'class' => 'flex-content-left',
'content' => html_print_select_from_sql('SELECT id_report, name FROM treport', 'report', '', '', '', 0, true),
],
true
)
);
$table->data[0][] = html_print_button(__('Export'), '', false, 'export_to_ptr("report");', '', true);
$table->data[1][] = html_print_label_input_block(
__('Visual console'),
html_print_div(
[
'class' => 'flex-content-left',
'content' => html_print_select_from_sql('SELECT id, name FROM tlayout', 'visual_console', '', '', '', 0, true),
],
true
)
);
$table->data[1][] = html_print_button(__('Export'), '', false, 'export_to_ptr("visual_console");', '', true);
if ($hook_enterprise === true) {
add_rows_for_enterprise($table->data);
}
html_print_table($table);
?>
<script type="text/javascript">
function export_to_ptr(type) {
id = $("select#" + type + " option:selected").val();
url = location.href.split('index');
if (type == "policy") {
var include_agents = $("#checkbox-export_agents").prop("checked")
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
+ '&id=' + id + '&include_agents=' + include_agents;
}
else {
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
+ '&id=' + id;
}
location.href=url;
}
</script>
<?php
}

File diff suppressed because it is too large Load Diff

View File

@ -1736,3 +1736,5 @@ extensions/files_repo/sql/files_repo.oracle.sql
extensions/files_repo/sql/files_repo.postgreSQL.sql
extensions/files_repo/sql/files_repo.sql
extensions/files_repo
extensions/resource_exportation.php
extensions/resource_registration.php

View File

@ -40,9 +40,6 @@ CREATE TABLE IF NOT EXISTS `tmerge_queries` (
ALTER TABLE `tmerge_queries` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-- Update version for plugin oracle
UPDATE `tdiscovery_apps` SET `version` = '1.2' WHERE `short_name` = 'pandorafms.oracle';
ALTER TABLE `tevent_sound` MODIFY COLUMN `name` text NULL;
ALTER TABLE `tevent_sound` MODIFY COLUMN `sound` text NULL;
ALTER TABLE `treport_content` MODIFY COLUMN `use_prefix_notation` tinyint unsigned NOT NULL DEFAULT 1;
@ -59,4 +56,34 @@ ALTER TABLE `tmensajes` ADD COLUMN `icon_notification` VARCHAR(250) NULL DEFAULT
UPDATE `tncm_template` SET `vendors` = CONCAT('["', TRIM(BOTH '"' FROM TRIM(BOTH ']' FROM TRIM(BOTH '[' FROM vendors))), '"]'), `models` = CONCAT('["', TRIM(BOTH '"' FROM TRIM(BOTH ']' FROM TRIM(BOTH '[' FROM models))), '"]');
UPDATE `tncm_agent_data_template` SET `vendors` = CONCAT('["', TRIM(BOTH '"' FROM TRIM(BOTH ']' FROM TRIM(BOTH '[' FROM vendors))), '"]'), `models` = CONCAT('["', TRIM(BOTH '"' FROM TRIM(BOTH ']' FROM TRIM(BOTH '[' FROM models))), '"]');
-- Update version for plugin oracle
UPDATE `tdiscovery_apps` SET `version` = '1.2' WHERE `short_name` = 'pandorafms.oracle';
SET @widget_id = NULL;
SELECT @widget_id := `id` FROM `twidget` WHERE `unique_name` = 'GisMap';
INSERT IGNORE INTO `twidget` (`id`,`class_name`,`unique_name`,`description`,`options`,`page`) VALUES (@widget_id,'GisMap','GisMap','Gis map','','GisMap.php');
-- Create SNMPv3 credentials for recon tasks and update them
SET @creds_name = 'Recon-SNMP-creds-';
INSERT IGNORE INTO `tcredential_store` (`identifier`, `id_group`, `product`, `extra_1`)
SELECT
CONCAT(@creds_name,`id_rt`) AS `identifier`,
`id_group`,
'SNMP' AS `product`,
CONCAT(
'{',
'"community":"',`snmp_community`,'",',
'"version":"',`snmp_version`,'",',
'"securityLevelV3":"',`snmp_security_level`,'",',
'"authUserV3":"',`snmp_auth_user`,'",',
'"authMethodV3":"',`snmp_auth_method`,'",',
'"authPassV3":"',`snmp_auth_pass`,'",',
'"privacyMethodV3":"',`snmp_privacy_method`,'",',
'"privacyPassV3":"',`snmp_privacy_pass`,'"',
'}'
) AS `extra1`
FROM `trecon_task` WHERE `snmp_version` = 3 AND `snmp_enabled` = 1
;
UPDATE `trecon_task` SET `auth_strings` = IF(`auth_strings` = '',CONCAT(@creds_name,`id_rt`),CONCAT(@creds_name,`id_rt`,',',`auth_strings`)) WHERE `snmp_version` = 3 AND `snmp_enabled` = 1;
COMMIT;

View File

@ -54,7 +54,7 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
// ======= Servers List ===============================================
if ((bool) check_acl($config['id_user'], 0, 'AW') !== false) {
$servers = [];
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
$servers['all'] = (int) count((servers_get_info() ?? []));
if ($servers['all'] != 0) {
$servers['up'] = (int) servers_check_status();
$servers['down'] = ($servers['all'] - $servers['up']);

View File

@ -708,6 +708,19 @@ if (enterprise_installed()) {
}
}
if ($id_os === '1') {
$modules = $agent_plugin->getModules();
foreach ($modules as $key => $row) {
if (preg_match('/Syslog/', $row['raw']) === 1) {
if ($row['disabled'] === 1) {
$enable_log_collector = 0;
} else {
$enable_log_collector = 1;
}
}
}
}
if ($id_os === '9') {
$modules = $agent_plugin->getModules();
foreach ($modules as $key => $row) {

View File

@ -1312,8 +1312,11 @@ if ($update_agent) {
}
$modules = $agent->getModules();
foreach ($modules as $key => $row) {
if (preg_match('/PandoraAgent_log/', $row['raw']) === 1) {
if (preg_match('/PandoraAgent_log/', $row['raw']) === 1
|| ($id_os === 1 && preg_match('/Syslog/', $row['raw']) === 1)
) {
if ($enable_log_collector === 1) {
if ($row['disabled'] === 1) {
$agent->enableModule($row['module_name'], $row);

View File

@ -697,7 +697,7 @@ if ($agents !== false) {
$tableAgents->head = [];
$tableAgents->data = [];
// Header.
$tableAgents->head[0] = '<span>'.__('Agent name').'</span>';
$tableAgents->head[0] = '<span>'.__('Agent alias').'</span>';
$tableAgents->head[0] .= ui_get_sorting_arrows($url_up_agente, $url_down_agente, $selectNameUp, $selectNameDown);
$tableAgents->head[1] = '<span title=\''.__('Remote agent configuration').'\'>'.__('R').'</span>';
$tableAgents->head[1] .= ui_get_sorting_arrows($url_up_remote, $url_down_remote, $selectRemoteUp, $selectRemoteDown);

View File

@ -150,7 +150,7 @@ if (is_ajax()) {
$component = db_get_row('tlocal_component', 'id', $id_component);
foreach ($component as $index => $element) {
$component[$index] = html_entity_decode(
$element,
(isset($element) === true) ? $element : '',
ENT_QUOTES,
'UTF-8'
);

View File

@ -505,7 +505,7 @@ $tableBasicThresholds->data['caption_switch_warning_inverse_string'][0] = html_p
$tableBasicThresholds->data['caption_warning_threshold'][0] .= '<span class="font_11" id="caption_str_warning">('.__('Str.').')</span>';
$tableBasicThresholds->data['warning_threshold'][0] .= html_print_input_text(
'str_warning',
str_replace('"', '', $str_warning),
str_replace('"', '', (isset($str_warning) === true) ? $str_warning : ''),
'',
10,
1024,
@ -602,7 +602,7 @@ $tableBasicThresholds->data['switch_critical_threshold'][0] .= html_print_div(
$tableBasicThresholds->data['caption_critical_threshold'][0] .= '<span class="font_11" id="caption_str_critical">('.__('Str.').')</span>';
$tableBasicThresholds->data['critical_threshold'][0] .= html_print_input_text(
'str_critical',
str_replace('"', '', $str_critical),
str_replace('"', '', (isset($str_critical) === true) ? $str_critical : ''),
'',
10,
1024,

View File

@ -60,7 +60,12 @@ $data[1] = html_print_select_from_sql(
$disabledBecauseInPolicy
);
// Store the macros in base64 into a hidden control to move between pages
$data[1] .= html_print_input_hidden('macros', base64_encode($macros), true);
$data[1] .= html_print_input_hidden(
'macros',
(isset($macros) === true) ? base64_encode($macros) : '',
true
);
$table_simple->colspan['plugin_1'][2] = 2;
if (!empty($id_plugin)) {

View File

@ -560,13 +560,13 @@ if ($is_management_allowed === true && $update_group === true) {
}
}
$id_group = (int) get_parameter('id_group');
// Delete group.
if ($is_management_allowed === true
&& $delete_group === true
&& ((bool) check_acl($config['id_user'], 0, 'PM') === true)
&& ((bool) check_acl($config['id_user'], $id_group, 'PM') === true)
) {
$id_group = (int) get_parameter('id_group');
$usedGroup = groups_check_used($id_group);
if (!$usedGroup['return']) {
@ -880,6 +880,28 @@ if ($tab == 'tree') {
echo "<div id='tree-controller-recipient'></div>";
if (users_can_manage_group_all('AR') === false) {
$user_groups_acl = users_get_groups(false, 'AR');
$groups_acl = implode('","', $user_groups_acl);
if (empty($groups_acl) === true) {
$is_management_allowed = false;
}
}
html_print_div(
[
'content' => ui_print_info_message(
[
'no_close' => true,
'message' => __('There are no defined groups'),
],
'',
true
),
'class' => 'invisible',
'id' => 'message-tree-info',
]
);
} else {
/*
* Group list view.
@ -1246,7 +1268,7 @@ $tab = 'group_edition';
treeController.init({
recipient: $("div#tree-controller-recipient"),
page: parameters['page'],
emptyMessage: "<?php echo __('No data found'); ?>",
emptyMessage: $("#message-tree-info").html(),
foundMessage: "<?php echo __('Found groups'); ?>",
tree: data.tree,
baseURL: "<?php echo ui_get_full_url(false, false, false, is_metaconsole()); ?>",

View File

@ -319,9 +319,8 @@ if ($update_agents) {
$secondary_groups_removed
);
$agents_values = agents_get_agent((int) $array_id[1]);
$agents_values = db_get_row_filter('tagente', ['id_agente' => (int) $array_id[1]]);
$node->disconnect();
if (empty($values) === false) {
update_agents_in_metaconsole(
(int) $array_id[1],

View File

@ -1500,7 +1500,7 @@ $table->data[39][0] = html_print_label_input_block(
'',
'',
true
).html_print_input_hidden('macros', base64_encode($macros), true)
).html_print_input_hidden('macros', base64_encode(($macros ?? '')), true)
);
require_once $config['homedir'].'/include/class/CredentialStore.class.php';

View File

@ -208,6 +208,9 @@ if ($access_console_node === true) {
$sub['godmode/setup/os']['text'] = __('Operating systems');
$sub['godmode/setup/os']['id'] = 'edit_OS';
$sub['godmode/resources/resources_export_import']['text'] = __('Resources export/import');
$sub['godmode/resources/resources_export_import']['id'] = 'resources_export_import';
}
if ((bool) check_acl($config['id_user'], 0, 'AW') === true) {

View File

@ -5941,6 +5941,7 @@ ui_require_javascript_file('pandora');
?>
<script type="text/javascript">
const ACTION = '<?php echo $actionParameter; ?>';
$(document).ready (function () {
chooseType();
chooseSQLquery();
@ -7601,6 +7602,12 @@ function chooseType() {
$("#row_ncm_group").hide();
$("#row_ncm_agent").hide();
if (ACTION !== 'update') {
// Set default period value, this value will be change for each report.
period_set_value($("#hidden-period").attr('class'), 300);
$("#row_period").find('select').val('300').trigger('change');
}
switch (type) {
case 'event_report_group':
$("#row_description").show();
@ -7763,8 +7770,10 @@ function chooseType() {
$("#row_agent").show();
$("#row_module").show();
$("#row_historical_db_check").hide();
if (ACTION !== 'update') {
period_set_value($("#hidden-period").attr('class'), 3600);
$("#row_period").find('select').val('3600').trigger('change');
}
break;
case 'SLA_monthly':

View File

@ -0,0 +1,404 @@
<?php
/**
* Server list view.
*
* @category Server
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2024 Pandora FMS
* Please see https://pandorafms.com/community/ 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.
global $config;
check_login();
if (check_acl($config['id_user'], 0, 'PM') === false) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access resources exportation and importation'
);
include 'general/noaccess.php';
exit;
}
require_once $config['homedir'].'/include/class/Prd.class.php';
// Instance of the prd class.
$prd = new Prd();
$msg = '';
if (isset($_FILES['resource_import']) === true) {
if (empty($_FILES['resource_import']['tmp_name']) === false) {
$data = parse_ini_file($_FILES['resource_import']['tmp_name'], true);
if ($data !== false) {
if (isset($data['prd_data']['name']) === true
&& isset($data['prd_data']['type']) === true
) {
$name = $data['prd_data']['name'];
$type = $data['prd_data']['type'];
}
$msg = $prd->importPrd($data);
} else {
$msg = [
'status' => false,
'items' => [],
'errors' => ['Unexpected error: Unable to parse PRD file.'],
];
}
} else {
$msg = [
'status' => false,
'items' => [],
'errors' => ['No files have selected'],
];
}
}
$msg = json_encode($msg);
echo '<div class="div-import-export">';
// Import section.
$label_import = html_print_label(
__('Import resources to').' '.get_product_name(),
'label_import',
true,
['style' => 'font-size: 13px; line-height: 16px'],
);
$div_label_import = html_print_div(
[
'style' => 'padding-bottom: 20px;',
'content' => $label_import,
],
true
);
$input_file = '<input class="input-file-style" style="padding-top: 1px; width: 100%;" type="file" value name="resource_import" id="file-resource_import" >';
$div_input_file = html_print_div(
[
'style' => 'padding-top: 20px;display: flex; justify-content: left;width:100%; height: 60px;',
'content' => $input_file,
],
true
);
$button_import = html_print_submit_button(
__('Import'),
'upload',
false,
[
'icon' => 'import',
'class' => 'disabled',
'disabled' => '',
],
true
);
$div_button_import = html_print_div(
[
'style' => 'padding-bottom: 20px',
'content' => $button_import,
],
true
);
$div_import = html_print_div(
[
'style' => 'width: 80%',
'content' => $div_label_import.$div_input_file.$div_button_import,
],
true
);
$img_import = html_print_image(
'images/import_to.svg',
true,
[
'border' => '0',
'width' => '100%',
]
);
$div_img_import = html_print_div(
[
'style' => 'margin-left: 40px; margin-right: 20px',
'content' => $img_import,
],
true
);
echo '<form class="form-import" name="submit_import" method="POST" enctype="multipart/form-data">';
echo html_print_div(
[
'class' => 'div-import',
'content' => $div_import.$div_img_import,
],
true
);
echo '</form>';
// Export section.
$label_export = html_print_label(
__('Export resources from').' '.get_product_name(),
'label_export',
true,
['style' => 'font-size: 13px; line-height: 16px'],
);
$div_label_export = html_print_div(
[
'style' => 'padding-bottom: 20px',
'content' => $label_export,
],
true
);
$export_type = $prd->getTypesPrd();
$select_export_type = html_print_label_input_block(
__('Export type'),
html_print_select(
$export_type,
'export_type',
'',
'',
__('None'),
0,
true,
false,
true,
'w90p'
),
['div_style' => 'display: flex; flex-direction: column; width: 50%'],
);
$div_select_export = html_print_div(
[
'id' => 'div_select_export',
'style' => 'padding-bottom: 20px;display: flex; flex-direction: row; height: 60px',
'content' => $select_export_type,
],
true
);
$button_export = html_print_button(
__('Export'),
'export_button',
false,
'',
[
'class' => 'flex_justify disabled',
'icon' => 'export',
'disabled' => '',
],
true
);
$div_button_export = html_print_div(
[
'style' => '',
'content' => $button_export,
],
true
);
$div_export = html_print_div(
[
'style' => 'padding-bottom: 20px; width: 80%',
'content' => $div_label_export.$div_select_export.$div_button_export,
],
true
);
$img_export = html_print_image(
'images/export_to.svg',
true,
[
'border' => '0',
'width' => '100%',
]
);
$div_img_export = html_print_div(
[
'style' => 'margin-left: 40px; margin-right: 20px',
'content' => $img_export,
],
true
);
echo html_print_div(
[
'class' => 'div-export',
'content' => $div_export.$div_img_export,
],
true
);
echo '</div>';
?>
<script type="text/javascript">
let msg = <?php echo $msg; ?>;
if (typeof msg === 'object' && Object.keys(msg).length > 0) {
let title = "";
let message = "";
if (msg.status === true) {
title = "<?php echo __('Importation successfully completed'); ?>";
message = "<?php echo __('PRD import successfull:'); ?>";
const name = "<?php echo $name; ?>";
const type = "<?php echo $type; ?>";
message += ` ${type} - ${name}`;
} else {
title = "<?php echo __('Import failure'); ?>";
Object.entries(msg.errors).forEach(([key, value]) => {
message += value + "<br>";
});
}
if (typeof msg.info === 'object' && Object.keys(msg.info).length > 0) {
message += "<br><br>";
Object.entries(msg.info).forEach(([key, value]) => {
message += value + "<br>";
});
}
confirmDialog({
title: title,
message: message,
hideCancelButton: true
},
"ResultDialog"
);
}
$('input[type="file"]').change(function() {
console.log($(this).val());
if ($(this).val() === '') {
$("#button-upload").addClass("disabled");
$('#button-upload').prop('disabled', true);
} else {
$("#button-upload").removeClass("disabled");
$('#button-upload').prop('disabled', false);
}
});
$("#export_type").change(function(e) {
if ($(this).val() === '0') {
$("#resource_type").remove();
$("#button-export_button").addClass("disabled");
$('#button-export_button').prop('disabled', true);
} else {
$.ajax({
type: "GET",
url: "ajax.php",
dataType: "html",
data: {
page: 'include/ajax/resources.ajax',
getResource: 1,
type: $(this).val(),
},
success: function(data) {
$("#resource_type").remove();
$("#div_select_export").append(`${data}`);
$('#select_value').select2();
$("#button-export_button").removeClass("disabled");
$('#button-export_button').prop('disabled', false);
},
error: function(data) {
console.error("Fatal error in AJAX call to interpreter order", data)
}
});
}
});
$("#button-export_button").click(function(e) {
const value = $("#select_value").val();
if (value !== '0') {
//Show dialog.
confirmDialog({
title: "<?php echo __('Exporting resource'); ?>",
message: "<?php echo __('Exporting resource and downloading, please wait'); ?>",
hideCancelButton: true
},
"downloadDialog"
);
const filename = '<?php echo uniqid().'.prd'; ?>';
$.ajax({
type: "GET",
url: "ajax.php",
dataType: 'json',
data: {
page: 'include/ajax/resources.ajax',
exportPrd: 1,
type: $("#export_type").val(),
value: value,
name: $("#select_value option:selected").text(),
filename: filename
},
success: function(data) {
if (data.error === -1 || data.error === -2) {
console.error("Failed to create file");
$("#confirm_downloadDialog").dialog("close");
} else {
let a = document.createElement('a');
const url = '<?php echo $config['homeurl'].'/attachment/'; ?>' + filename;
a.href = url;
a.download = data.name_download;
a.click();
setTimeout(() => {
$.ajax({
type: "DELETE",
url: "ajax.php",
data: {
page: 'include/ajax/resources.ajax',
deleteFile: 1,
filename: filename,
},
});
$("#confirm_downloadDialog").dialog("close");
}, 3000);
}
},
error: function(data) {
console.error("Fatal error in AJAX call to interpreter order", data);
$.ajax({
type: "DELETE",
url: "ajax.php",
data: {
page: 'include/ajax/resources.ajax',
deleteFile: 1,
filename: filename,
},
});
$("#confirm_downloadDialog").dialog("close");
}
});
}
});
</script>

View File

@ -115,7 +115,7 @@ foreach ($servers as $server) {
$table->cellclass[] = [
3 => 'progress_bar',
8 => 'table_action_buttons',
9 => 'table_action_buttons',
];
$data[0] = '<span title="'.$server['version'].'">'.strip_tags($server['name']).'</span>';

View File

@ -48,7 +48,7 @@ if ($idOS > 0) {
} else {
$name = io_safe_input(strip_tags(trim(io_safe_output((string) get_parameter('name')))));
$description = io_safe_input(strip_tags(io_safe_output((string) get_parameter('description'))));
$icon = get_parameter('icon', 0);
$icon = get_parameter('icon', 'os@svg.svg');
}
$icon_upload = get_parameter('icon_upload', null);
@ -246,7 +246,7 @@ $iconData[] = html_print_select(
'icon',
$icon,
'show_icon_OS();',
__('None'),
'',
0,
true
);
@ -356,6 +356,8 @@ function get_list_os_icons_dir()
}
}
$return['os@svg.svg'] = __('None');
return $return;
}

View File

@ -88,6 +88,14 @@ switch ($tab) {
break;
case 'manage_os':
$id_os = get_parameter('id_os', '');
if ($id_os !== '') {
$headerTitle = __('Edit OS');
} else {
$headerTitle = __('Create OS');
}
break;
case 'list':
if ($action === 'edit') {
$headerTitle = __('Edit OS');

View File

@ -386,7 +386,7 @@ if (empty($result) === false) {
$data[4] = $output;
$phone_large = io_safe_output($tag['phone']);
$phone_small = substr($phone_large, 0, 24);
$phone_small = substr(($phone_large ?? ''), 0, 24);
if ($phone_large == $phone_small) {
$output = $phone_large;
} else {

View File

@ -1581,7 +1581,7 @@ $autorefresh_list_out['operation/events/events'] = 'Events';
if (isset($autorefresh_list) === false || empty($autorefresh_list) === true || empty($autorefresh_list[0]) === true) {
$select = db_process_sql("SELECT autorefresh_white_list FROM tusuario WHERE id_user = '".$id."'");
$autorefresh_list = json_decode($select[0]['autorefresh_white_list']);
$autorefresh_list = json_decode(($select[0]['autorefresh_white_list'] ?? ''));
if ($autorefresh_list === null || $autorefresh_list === 0) {
$autorefresh_list = [];
$autorefresh_list[0] = __('None');

View File

@ -37,6 +37,20 @@ class Applications extends Wizard
*/
public $mode;
/**
* Task properties.
*
* @var array
*/
public $task;
/**
* Class of styles.
*
* @var string
*/
public $class;
/**
* Constructor.

View File

@ -37,6 +37,20 @@ class Custom extends Wizard
*/
public $mode;
/**
* Task properties.
*
* @var array
*/
public $task;
/**
* Class of styles.
*
* @var string
*/
public $class;
/**
* Constructor.

View File

@ -47,6 +47,13 @@ ui_require_javascript_file('simTree');
class DiscoveryTaskList extends HTML
{
/**
* Task properties.
*
* @var array
*/
public $task;
/**
* Constructor.
@ -1418,7 +1425,7 @@ class DiscoveryTaskList extends HTML
$table = new StdClasS();
$table->class = 'databox data';
$table->width = '75%';
$table->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white;';
$table->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white; overflow-wrap: anywhere';
$table->rowid = [];
$table->data = [];
@ -1426,7 +1433,7 @@ class DiscoveryTaskList extends HTML
$tableErrors = new StdClasS();
$tableErrors->class = 'databox data';
$tableErrors->width = '75%';
$tableErrors->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white;';
$tableErrors->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white; overflow-wrap: anywhere';
$tableErrors->rowid = [];
$tableErrors->data = [];

View File

@ -450,6 +450,35 @@ class HostDevices extends Wizard
if (isset($this->task['id_rt']) === false) {
// Create.
$default_templates = [
io_safe_input('Linux System'),
io_safe_input('Windows System'),
io_safe_input('Windows Hardware'),
io_safe_input('Network Management'),
];
$default_templates_ids = db_get_all_rows_sql(
'SELECT id_np
FROM tnetwork_profile
WHERE name IN ('.implode(
',',
array_map(
function ($template) {
return "'".$template."'";
},
$default_templates
)
).')
ORDER BY name'
);
if ($default_templates_ids !== false) {
$this->task['id_network_profile'] = implode(
',',
array_column($default_templates_ids, 'id_np'),
);
}
$this->task['id_rt'] = db_process_sql_insert(
'trecon_task',
$this->task
@ -1100,16 +1129,13 @@ class HostDevices extends Wizard
'arguments' => [
'name' => 'id_network_profile[]',
'type' => 'select_from_sql',
'sql' => 'SELECT tn.id_np, tn.name
FROM tnetwork_profile tn
LEFT JOIN `tnetwork_profile_pen` tp
ON tp.id_np = tn.id_np
WHERE tp.id_np IS NULL
ORDER BY tn.name',
'sql' => 'SELECT id_np, name
FROM tnetwork_profile
ORDER BY name',
'return' => true,
'selected' => explode(
',',
$this->task['id_network_profile']
(isset($this->task['id_network_profile']) === true) ? $this->task['id_network_profile'] : ''
),
'nothing_value' => 0,
'nothing' => __('None'),
@ -1273,114 +1299,86 @@ class HostDevices extends Wizard
],
];
// SNMP Options pack v3.
$show_snmp_auth = false;
if (isset($this->task['snmp_enabled']) && $this->task['snmp_enabled'] > 0
&& isset($this->task['snmp_version']) && $this->task['snmp_version'] == 3
) {
$show_snmp_auth = true;
}
include_once $config['homedir'].'/include/class/CredentialStore.class.php';
$all_snmp_keys = CredentialStore::getAll(
[
'cs.*',
'tg.nombre as `group`',
],
['product' => 'SNMP']
);
if (is_array($all_snmp_keys) === true) {
// Improve usage and decode output.
$snmp_available_keys = array_reduce(
$all_snmp_keys,
function ($carry, $item) {
$item['extra_1'] = io_output_password($item['extra_1']);
$extra1 = json_decode($item['extra_1'], true);
if ($extra1 !== null && $extra1['version'] == 3) {
$carry[$item['identifier']] = $item['identifier'];
}
return $carry;
},
[]
);
}
if (check_acl($config['id_user'], 0, 'UM')) {
$link_to_cs = '<a class="ext_link" href="'.ui_get_full_url(
'index.php?sec=gmodules&sec2=godmode/groups/group_list&tab=credbox'
).'" >';
$link_to_cs .= __('No credentials available').', ';
$link_to_cs .= strtolower(__('Manage credentials')).'</a>';
} else {
$link_to_cs = __('No credentials available');
}
if (count($snmp_available_keys) > 0) {
$form['inputs'][] = [
'hidden' => 1,
'block_id' => 'snmp_options_v3',
'block_id' => 'auth_block_snmp',
'class' => 'indented',
'hidden' => !$show_snmp_auth,
'block_content' => [
[
'label' => '<b>'.__('Context').'</b>',
'label' => __('Credentials to try with'),
'arguments' => [
'name' => 'snmp_context',
'type' => 'text',
'value' => $this->task['snmp_community'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth user').'</b>',
'arguments' => [
'name' => 'snmp_auth_user',
'type' => 'text',
'value' => $this->task['snmp_auth_user'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Security level').'</b>',
'arguments' => [
'name' => 'snmp_security_level',
'type' => 'select',
'fields' => [
'noAuthNoPriv' => __('Not auth and not privacy method'),
'authNoPriv' => __('Auth and not privacy method'),
'authPriv' => __('Auth and privacy method'),
],
'selected' => $this->task['snmp_security_level'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth method').'</b>',
'arguments' => [
'name' => 'snmp_auth_method',
'type' => 'select',
'fields' => [
'MD5' => __('MD5'),
'SHA' => __('SHA'),
],
'selected' => $this->task['snmp_auth_method'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth password').'</b>'.ui_print_help_tip(
__(
'The pass length must be eight character minimum.'
'name' => 'auth_strings[]',
'fields' => $snmp_available_keys,
'selected' => explode(
',',
$this->task['auth_strings']
),
true
),
'arguments' => [
'name' => 'snmp_auth_pass',
'type' => 'password',
'value' => $this->task['snmp_auth_pass'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Privacy method').'</b>',
'arguments' => [
'name' => 'snmp_privacy_method',
'type' => 'select',
'fields' => [
'DES' => __('DES'),
'AES' => __('AES'),
],
'selected' => $this->task['snmp_privacy_method'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Privacy pass').'</b>'.ui_print_help_tip(
__(
'The pass length must be eight character minimum.'
),
true
),
'arguments' => [
'name' => 'snmp_privacy_pass',
'type' => 'password',
'value' => $this->task['snmp_privacy_pass'],
'size' => 15,
'return' => true,
'multiple' => true,
'class' => 'select_multiple',
],
],
],
];
} else {
$form['inputs'][] = [
'block_id' => 'auth_block_snmp',
'class' => 'indented',
'hidden' => !$show_snmp_auth,
'block_content' => [
[
'label' => __('Credentials to try with'),
'extra' => $link_to_cs,
],
],
];
}
// Input: Enforce os detection.
$form['inputs'][] = [
@ -1453,14 +1451,12 @@ class HostDevices extends Wizard
// AUTH CONFIGURATION.
$show_auth = false;
if ((isset($this->task['wmi_enabled']) && $this->task['wmi_enabled'] > 0)
|| (isset($this->task['rcmd_enabled']) && $this->task['rcmd_enabled'] > 0)
) {
if (isset($this->task['wmi_enabled']) && $this->task['wmi_enabled'] > 0) {
$show_auth = true;
}
include_once $config['homedir'].'/include/class/CredentialStore.class.php';
$available_keys = CredentialStore::getKeys('WMI');
$wmi_available_keys = CredentialStore::getKeys('WMI');
if (check_acl($config['id_user'], 0, 'UM')) {
$link_to_cs = '<a class="ext_link" href="'.ui_get_full_url(
'index.php?sec=gmodules&sec2=godmode/groups/group_list&tab=credbox'
@ -1471,9 +1467,9 @@ class HostDevices extends Wizard
$link_to_cs = __('No credentials available');
}
if (count($available_keys) > 0) {
if (count($wmi_available_keys) > 0) {
$form['inputs'][] = [
'block_id' => 'auth_block',
'block_id' => 'auth_block_wmi',
'class' => 'indented',
'hidden' => !$show_auth,
'block_content' => [
@ -1482,7 +1478,7 @@ class HostDevices extends Wizard
'arguments' => [
'type' => 'select',
'name' => 'auth_strings[]',
'fields' => CredentialStore::getKeys('WMI'),
'fields' => $wmi_available_keys,
'selected' => explode(
',',
$this->task['auth_strings']
@ -1496,12 +1492,12 @@ class HostDevices extends Wizard
];
} else {
$form['inputs'][] = [
'block_id' => 'auth_block',
'block_id' => 'auth_block_wmi',
'class' => 'indented',
'hidden' => !$show_auth,
'block_content' => [
[
'label' => __('Credentials'),
'label' => __('Credentials to try with'),
'extra' => $link_to_cs,
],
],
@ -1520,11 +1516,11 @@ class HostDevices extends Wizard
function SNMPExtraShow(target) {
$("#snmp_options_basic").hide();
$("#snmp_options_skip_non_enabled_ifs").hide();
$("#snmp_options_v3").hide();
$("#auth_block_snmp").hide();
if (document.getElementsByName("snmp_enabled")[0].checked) {
$("#snmp_extra").show();
if (target == 3) {
$("#snmp_options_v3").show();
$("#auth_block_snmp").show();
} else {
$("#snmp_options_basic").show();
$("#snmp_options_skip_non_enabled_ifs").show();
@ -1554,7 +1550,7 @@ class HostDevices extends Wizard
$("#snmp_extra").hide();
$("#snmp_options_basic").hide();
$("#snmp_options_skip_non_enabled_ifs").hide();
$("#snmp_options_v3").hide();
$("#auth_block_snmp").hide();
// Disable snmp dependant checks
if (document.getElementsByName("parent_recursion")[0].checked)
@ -1572,13 +1568,17 @@ class HostDevices extends Wizard
}
function toggleAuth() {
if (document.getElementsByName("wmi_enabled")[0].checked
|| (typeof document.getElementsByName("rcmd_enabled")[0] != "undefined"
&& document.getElementsByName("rcmd_enabled")[0].checked)
) {
$("#auth_block").show();
if (document.getElementsByName("wmi_enabled")[0].checked) {
$("#auth_block_wmi").show();
} else {
$("#auth_block").hide();
$("#auth_block_wmi").hide();
}
if (typeof document.getElementsByName("rcmd_enabled")[0] != "undefined"
&& document.getElementsByName("rcmd_enabled")[0].checked) {
$("#auth_block_rcmd").show();
} else {
$("#auth_block_rcmd").hide();
}
}

View File

@ -97,6 +97,13 @@ class Wizard
*/
public $access = 'AR';
/**
* Root url.
*
* @var string
*/
public $rootUrl;
/**
* Setter for breadcrum
@ -550,7 +557,7 @@ class Wizard
}
echo '<ul class="bigbuttonlist">';
array_map('self::printBigButtonElement', $list_data);
array_map(['Wizard', 'printBigButtonElement'], $list_data);
echo '</ul>';
if ($return === true) {

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>E1DA0B54-BDFA-427E-9BFB-1315DFA5936F</title>
<g id="Import-/-Export" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Mockup---Import-&amp;-Export-expandido-1300" transform="translate(-406, -540)" fill="#FFFFFF" fill-rule="nonzero">
<g id="Right" transform="translate(310, 380)">
<g id="Group" transform="translate(20, 63)">
<g id="Acciones" transform="translate(0, 83)">
<g id="Export-Copy" transform="translate(76, 13.999)">
<path d="M13,7.00200086 C13.5522847,7.00200086 14,7.44971619 14,8.00200086 L14,13.0020009 C14,13.5542875 13.5522847,14.0020009 13,14.0020009 L1,14.0020009 C0.44771525,14.0020009 0,13.5542875 0,13.0020009 L0,8.00201259 C0,7.44972773 0.44771525,7.00200086 1,7.00200086 C1.55228475,7.00200086 2,7.44973046 2,8.00201532 L2,12.0020009 L12,12.0020009 L12,8.00200086 C12,7.48917088 12.3860402,7.06649675 12.8833789,7.00873163 L13,7.00200086 Z" id="Path-2"></path>
<path d="M7.42761656,0.098000218 L7.4722276,0.120228468 C7.48541492,0.127297151 7.4984771,0.134682814 7.51140295,0.142385459 C7.6034078,0.196864662 7.68458638,0.263207322 7.75402558,0.34146022 L8.64094412,1.22873471 C8.69800231,1.28579287 8.75962403,1.34741457 8.82669975,1.41449025 L10.1954614,2.78325124 C10.4003199,2.98810964 10.6267161,3.21450572 10.8776552,3.46544474 L11.4849524,4.07274159 L11.7071068,4.29489588 C12.0976311,4.68541998 12.0976311,5.31858465 11.7071068,5.70910875 C11.3165825,6.09963285 10.6834175,6.09963285 10.2928932,5.70910875 L10.1805423,5.59675789 L9.46344168,4.87965762 C9.21250254,4.62871859 8.98610634,4.40232251 8.78124784,4.19746411 L8,3.416 L8,10.0020035 C8,10.5542882 7.55228475,11.0020034 7,11.0020034 C6.44771525,11.0020034 6,10.5542882 6,10.0020035 L6,3.41600434 L3.70710678,5.70911084 C3.34662282,6.06959476 2.77939176,6.09732429 2.38710056,5.79229943 L2.29289322,5.70911084 C1.90236893,5.31858659 1.90236893,4.68542169 2.29289322,4.29489745 L6.29289322,0.294897937 C6.54710458,0.0406866046 6.87413362,-0.0382890141 7.1738163,0.0164817894 C7.17680504,0.0176633808 7.18016721,0.0182701476 7.18352681,0.0188942086 C7.21466801,0.0243205099 7.24513844,0.0316757505 7.2751983,0.0403969286 C7.28707112,0.0438108231 7.29913038,0.0474948538 7.31113021,0.0514117815 C7.32967787,0.0576595805 7.3480221,0.0642976796 7.3661634,0.0714484962 C7.37897252,0.0762161528 7.39150205,0.0814382808 7.40394259,0.0869264154 L7.42761656,0.098000218 Z" id="Path-4-Copy" transform="translate(7, 5.501) scale(1, -1) translate(-7, -5.501)"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="111px" height="111px" viewBox="0 0 111 111" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>868E520D-AB8E-4FB9-B511-A43C58B7C144</title>
<g id="Import-/-Export" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Mockup---Import-&amp;-Export-expandido-1300" transform="translate(-1140, -400)">
<g id="Right" transform="translate(310, 380)">
<g id="Export-to-PFMS" transform="translate(830, 21)">
<g id="Carpeta" transform="translate(50, 0)" fill="#FFFFFF" stroke="#C1CCDC" stroke-linejoin="round">
<path d="M30.24,10.8 C30.24,13.5952941 27.9846,15.8823529 25.2,15.8823529 L12.6,15.8823529 L5.04,15.8823529 C2.256408,15.8823529 0,18.1694118 0,20.9647059 L0,41.2941176 L0,48.9176471 C0,51.7129412 2.2564836,54 5.04,54 L55.44,54 C58.2246,54 60.48,51.7129412 60.48,48.9176471 L60.48,41.2941176 L60.48,15.8823529 C60.48,13.0870588 58.2246,10.8 55.44,10.8 L30.24,10.8 Z" id="Path"></path>
<path d="M5.04,0 C2.256408,0 0,2.28327 0,5.1 L0,17.85 L25.2,17.85 L25.2,20.4 L60.48,20.4 L60.48,7.65 C60.48,4.83327 58.2246,2.55 55.44,2.55 L29.53188,2.55 C28.65996,1.027905 27.0648,0 25.2,0 L5.04,0 Z" id="Path"></path>
<path d="M30.2012804,7.8 C30.2012804,10.4702795 27.9487682,12.6550537 25.1677337,12.6550537 L12.5838668,12.6550537 L5.03354673,12.6550537 C2.25351887,12.6550537 0,14.8398278 0,17.5101073 L0,36.9303219 L0,45.5682628 C0,48.2385423 2.33103356,50.4 5.11098592,50.4 L55.4464533,50.4 C58.2274878,50.4 60.48,48.2152259 60.48,45.5449463 L60.4025608,36.9303219 L60.4025608,12.6550537 C60.4025608,9.98477414 58.1500487,7.8 55.3690141,7.8 L30.2012804,7.8 Z" id="Path"></path>
</g>
<circle id="Oval" fill="#FFFFFF" cx="35" cy="74" r="32"></circle>
<path d="M54.3088808,87.6772425 C52.1910624,89.4538282 49.4009606,90.9797575 46.396587,91.7689771 C43.0303728,92.6582798 39.2495496,92.9008577 35.650332,92.4338784 C28.8630793,91.5566934 22.7682123,87.3527581 18.6666667,83.4113724 C19.1347294,82.3207818 19.2699628,81.9265086 19.7510463,80.8496064 C20.5585631,81.6760766 21.9897067,82.7738481 22.625669,83.2060452 C27.0292053,86.2139212 32.7855321,88.809123 40.4090843,88.3753552 C44.2696313,88.1675595 47.8530869,86.8543627 50.393738,84.850234 C52.8530663,82.9143234 54.9142328,80.131522 54.8683175,76.2630667 C54.8198893,72.1672929 52.7706013,68.8241613 50.5442764,66.5873284 C49.7769642,65.8178561 48.9509442,64.9958739 48.116929,64.389317 C46.7936066,63.4302255 45.3272841,62.687457 43.8481692,61.9841831 C42.3478099,61.2611618 40.8054186,60.5323062 39.0151756,60.1555363 C41.9656386,58.3102838 49.8973493,56.0487668 50.8341601,56.578354 C51.4180393,56.9050824 52.052631,57.4290596 52.5433088,57.8181716 C54.161312,59.093669 55.5481392,60.8882068 56.7296036,62.5510209 C58.4280159,64.9498716 59.8616722,67.7277362 60.3861584,70.8529741 C61.6553417,78.5710349 58.4405798,84.2228078 54.3088808,87.6772425 M7,75.782883 L7,75.7734567 C10.537516,70.0360569 14.6286486,64.8419341 19.4789374,60.4347927 C22.8258824,57.3887174 26.7653177,54.6679645 31.1310245,52.6946485 C31.8627009,52.3539221 32.5749405,51.9357161 33.365151,51.6710899 C34.1446378,51.4069235 34.9625515,51.1418375 35.8012426,50.8588185 C38.9895647,49.7768629 43.3820809,49.228298 46.9044049,49.6333991 C49.5377698,49.9403288 52.1590705,50.7197231 53.9097321,52.1203337 C54.5006586,52.5884301 55.2108874,53.1004393 55.5942636,53.6611894 C55.8138782,53.9853622 56.1228579,54.7344085 55.9490429,55.1808933 C55.7312155,55.7193421 54.9289407,55.7726812 54.2656285,55.7563576 C52.0051392,55.7126748 49.9296356,55.4641422 47.7422023,55.7393443 C44.6354259,56.1313406 42.0677443,57.0238505 39.8503736,57.9830343 C35.16474,59.9869283 31.143759,63.2941812 27.9737568,66.629713 C24.7778387,69.9861665 21.8236532,74.214668 19.4755862,78.5558254 C16.8565196,83.3878402 14.8822219,88.484941 13.2481818,93.8333333 C9.50624318,88.8098036 7.19012417,82.5918924 7,75.782883 M34.9998875,39 C15.6689898,39 0,54.666808 0,73.9997751 C0,93.3298184 15.6689898,109 34.9998875,109 C54.3319099,109 70,93.3298184 70,73.9997751 C70,54.666808 54.3319099,39 34.9998875,39" id="Fill-694" fill="#82B92E"></path>
<g id="Group-2" transform="translate(11, 8.5)" stroke="#C1CCDC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
<g id="Group-4">
<polygon id="Triangle" fill="#C1CCDC" transform="translate(31, 5) rotate(90) translate(-31, -5)" points="31 2.5 36 7.5 26 7.5"></polygon>
<path d="M0,39.5 C0,36.5833333 0,33.6666667 0,30.75 C-1.75851975e-15,16.3905965 11.6405965,4.75 26,4.75 L26,4.75 L26,4.75" id="Path-3" stroke-dasharray="2,4"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>6AE8E7E7-D5F8-4670-BCBD-08A30E381B8F</title>
<g id="Import-/-Export" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Mockup---Import-&amp;-Export-expandido-1300" transform="translate(-408, -309)" fill="#FFFFFF" fill-rule="nonzero">
<g id="Left" transform="translate(310, 150)">
<g id="Group" transform="translate(20, 63)">
<g id="Acciones" transform="translate(0, 83)">
<g id="Import" transform="translate(78, 12.998)">
<path d="M13,7.00200171 C13.5522847,7.00200171 14,7.4497171 14,8.00200171 L14,13.0020017 C14,13.5542892 13.5522847,14.0020017 13,14.0020017 L1,14.0020017 C0.44771525,14.0020017 0,13.5542892 0,13.0020017 L0,8.00201357 C0,7.44972864 0.44771525,7.00200171 1,7.00200171 C1.55228475,7.00200171 2,7.44973137 2,8.00201629 L2,12.0020017 L12,12.0020017 L12,8.00200171 C12,7.4891718 12.3860402,7.06649761 12.8833789,7.00873249 L13,7.00200171 Z" id="Path-2"></path>
<path d="M7.42761656,0.09800023 L7.4722276,0.120228483 C7.48541492,0.127297166 7.4984771,0.134682831 7.51140295,0.142385477 C7.6034078,0.196864686 7.68458638,0.263207354 7.75402558,0.341460261 L8.64094412,1.22873487 C8.69800231,1.28579303 8.75962403,1.34741473 8.82669975,1.41449043 L10.1954614,2.78325158 C10.4003199,2.98811 10.6267161,3.21450611 10.8776552,3.46544517 L11.4849524,4.07274209 L11.7071068,4.2948964 C12.0976311,4.68542055 12.0976311,5.3185853 11.7071068,5.70910945 C11.3165825,6.0996336 10.6834175,6.0996336 10.2928932,5.70910945 L10.1805423,5.59675858 L9.46344168,4.87965821 C9.21250254,4.62871916 8.98610634,4.40232305 8.78124784,4.19746462 L8,3.416 L8,10.0020048 C8,10.5542895 7.55228475,11.0020048 7,11.0020048 C6.44771525,11.0020048 6,10.5542895 6,10.0020048 L6,3.41600475 L3.70710678,5.70911154 C3.34662282,6.0695955 2.77939176,6.09732503 2.38710056,5.79230014 L2.29289322,5.70911154 C1.90236893,5.31858724 1.90236893,4.68542227 2.29289322,4.29489797 L6.29289322,0.294897973 C6.54710458,0.0406866095 6.87413362,-0.0382890188 7.1738163,0.0164817914 C7.17680504,0.017663383 7.18016721,0.0182701498 7.18352681,0.0188942109 C7.21466801,0.0243205129 7.24513844,0.0316757544 7.2751983,0.0403969336 C7.28707112,0.0438108284 7.29913038,0.0474948597 7.31113021,0.0514117877 C7.32967787,0.0576595875 7.3480221,0.0642976875 7.3661634,0.0714485049 C7.37897252,0.0762161621 7.39150205,0.0814382908 7.40394259,0.086926426 L7.42761656,0.09800023 Z" id="Path-4-Copy"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="111px" height="110px" viewBox="0 0 111 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>A981FD90-8ED5-4170-8C6A-8F4DFD0DCCD4</title>
<g id="Import-/-Export" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Mockup---Import-&amp;-Export-expandido-1300" transform="translate(-1139, -171)">
<g id="Left" transform="translate(310, 150)">
<g id="Import-to-PFMS" transform="translate(830, 21)">
<path d="M96.5504693,41.7233507 C94.7351964,43.2461384 92.3436805,44.5540779 89.7685032,45.2305518 C86.8831767,45.9928112 83.6424711,46.2007351 80.5574274,45.8004672 C74.7397823,45.0485944 69.5156105,41.4452213 66,38.0668907 C66.4011967,37.1320987 66.517111,36.7941502 66.9294683,35.8710912 C67.6216255,36.5794943 68.84832,37.5204413 69.3934306,37.8908959 C73.1678902,40.4690753 78.1018846,42.693534 84.636358,42.321733 C87.9453982,42.1436224 91.0169316,41.0180252 93.1946325,39.3002006 C95.3026282,37.6408486 97.0693424,35.2555903 97.0299864,31.9397715 C96.9884765,28.4291082 95.231944,25.5635668 93.3236655,23.6462815 C92.6659693,22.9867338 91.9579522,22.2821776 91.243082,21.7622717 C90.1088057,20.9401933 88.8519578,20.3035345 87.584145,19.7007283 C86.2981227,19.0809959 84.9760731,18.4562624 83.4415791,18.1333168 C85.9705473,16.5516718 92.7691565,14.6132287 93.5721372,15.0671606 C94.0726051,15.3472135 94.6165408,15.7963368 95.0371218,16.1298614 C96.4239817,17.2231448 97.6126908,18.7613201 98.6253745,20.1865894 C100.081156,22.2427471 101.310005,24.6237739 101.759564,27.3025492 C102.847436,33.9180299 100.091926,38.7624067 96.5504693,41.7233507 M56,31.5281854 L56,31.5201057 C59.0321566,26.6023345 62.5388416,22.1502293 66.696232,18.3726794 C69.565042,15.7617578 72.9417009,13.4296839 76.6837353,11.7382701 C77.3108865,11.446219 77.9213775,11.0877567 78.5987009,10.8609342 C79.2668324,10.6345059 79.9679013,10.4072893 80.6867794,10.1647016 C83.4196269,9.23731103 87.1846408,8.76711259 90.2037756,9.11434212 C92.4609456,9.37742465 94.7077748,10.0454769 96.2083418,11.2460003 C96.7148502,11.6472258 97.3236178,12.0860908 97.6522259,12.5667338 C97.840467,12.8445962 98.1053068,13.4866358 97.9563224,13.8693371 C97.7696133,14.3308647 97.0819491,14.3765839 96.5133958,14.3625923 C94.5758336,14.3251498 92.7968305,14.1121219 90.9218877,14.3480094 C88.2589365,14.6840062 86.0580665,15.4490147 84.1574631,16.2711723 C80.1412057,17.9887957 76.6946506,20.8235839 73.9775058,23.6826111 C71.2381475,26.5595713 68.7059884,30.1840012 66.6933596,33.9049932 C64.4484454,38.0467202 62.7561902,42.4156638 61.3555844,47 C58.1482084,42.6941174 56.1629636,37.3644792 56,31.5281854 M79.9999036,0 C63.4305627,0 50,13.4286926 50,29.9998072 C50,46.5684158 63.4305627,60 79.9999036,60 C96.5702085,60 110,46.5684158 110,29.9998072 C110,13.4286926 96.5702085,0 79.9999036,0" id="Fill-694" fill="#82B92E"></path>
<g id="Carpeta" transform="translate(0, 39)" fill="#FFFFFF" stroke="#C1CCDC" stroke-linejoin="round">
<path d="M39,14 C39,17.6235294 36.09125,20.5882353 32.5,20.5882353 L16.25,20.5882353 L6.5,20.5882353 C2.91005,20.5882353 0,23.5529412 0,27.1764706 L0,53.5294118 L0,63.4117647 C0,67.0352941 2.9101475,70 6.5,70 L71.5,70 C75.09125,70 78,67.0352941 78,63.4117647 L78,53.5294118 L78,20.5882353 C78,16.9647059 75.09125,14 71.5,14 L39,14 Z" id="Path"></path>
<path d="M6.5,0 C2.91005,0 0,2.95979444 0,6.61111111 L0,23.1388889 L32.5,23.1388889 L32.5,26.4444444 L78,26.4444444 L78,9.91666667 C78,6.26535 75.09125,3.30555556 71.5,3.30555556 L38.08675,3.30555556 C36.96225,1.33246944 34.905,0 32.5,0 L6.5,0 Z" id="Path"></path>
<path d="M38.950064,10.1111111 C38.950064,13.5725845 36.0450384,16.4046992 32.4583867,16.4046992 L16.2291933,16.4046992 L6.49167734,16.4046992 C2.90632394,16.4046992 0,19.2368138 0,22.6982872 L0,47.8726395 L0,59.0699703 C0,62.5314438 3.00629328,65.3333333 6.5915493,65.3333333 L71.5083227,65.3333333 C75.0949744,65.3333333 78,62.5012187 78,59.0397453 L77.900128,47.8726395 L77.900128,16.4046992 C77.900128,12.9432257 74.9951024,10.1111111 71.4084507,10.1111111 L38.950064,10.1111111 Z" id="Path"></path>
</g>
<g id="Group-2" transform="translate(11, 8.5)" stroke="#C1CCDC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
<g id="Group-4">
<polygon id="Triangle" fill="#C1CCDC" transform="translate(31, 5) rotate(90) translate(-31, -5)" points="31 2.5 36 7.5 26 7.5"></polygon>
<path d="M0,39.5 C0,36.5833333 0,33.6666667 0,30.75 C-1.75851975e-15,16.3905965 11.6405965,4.75 26,4.75 L26,4.75 L26,4.75" id="Path-3" stroke-dasharray="2,4"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -117,12 +117,25 @@ if ($method === 'draw') {
$where_name = 'name LIKE "%'.$filter['free_search'].'%"';
}
if (is_user_admin($config['id_user']) === false) {
$group_list = \users_get_groups(
$config['id_ser'],
'RR',
true
);
}
$where_group = '';
if (empty($filter['group']) === false && $filter['group'] !== '0') {
$where_group = sprintf('id_group = %s', $filter['group']);
if (empty($where_name) === false) {
$where_group = 'AND '.$where_group;
}
} else if (empty($group_list) === false) {
$where_group = sprintf('id_group IN (%s)', implode(',', array_keys($group_list)));
if (empty($where_name) === false) {
$where_group = 'AND '.$where_group;
}
}
$where = '';

View File

@ -2049,7 +2049,9 @@ if ($get_extended_event) {
$js .= '});';
$js .= '$("#link_comments").click(get_table_events_tabs(\''.base64_encode(json_encode($event)).'\',\''.base64_encode(json_encode($filter)).'\'));';
$js .= '$("#link_comments").on("click", () => {
get_table_events_tabs(\''.base64_encode(json_encode($event)).'\',\''.base64_encode(json_encode($filter)).'\')
});';
if (events_has_extended_info($event['id_evento']) === true) {
$js .= '

View File

@ -250,6 +250,7 @@ if (is_ajax() === true) {
if ($getInfo === true) {
enterprise_include_once('include/functions_agents.php');
include_once $config['homedir'].'/include/functions_graph.php';
$id = get_parameter('id', 0);
$id_server = get_parameter('id_server', 0);
if (empty($id_server) === false) {

View File

@ -0,0 +1,115 @@
<?php
/**
* Pandora FMS- https://pandorafms.com.
* ==================================================
* Copyright (c) 2005-2023 Pandora FMS
* Please see https://pandorafms.com/community/ for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; 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.
*/
global $config;
if ((bool) is_ajax() === true) {
include_once $config['homedir'].'/include/class/Prd.class.php';
$getResource = (bool) get_parameter('getResource', false);
$exportPrd = (bool) get_parameter('exportPrd', false);
$deleteFile = (bool) get_parameter('deleteFile', false);
$prd = new Prd();
if ($getResource === true) {
$type = (string) get_parameter('type', '');
$result = false;
$data = $prd->getOnePrdData($type);
if (empty($data) === false) {
$sql = sprintf(
'SELECT %s FROM %s',
reset($data['items']['value']).', '.reset($data['items']['show']),
$data['items']['table']
);
$result = html_print_label_input_block(
$data['label'],
io_safe_output(
html_print_select_from_sql(
$sql,
'select_value',
'',
'',
'',
0,
true,
false,
true,
false,
false,
false,
GENERIC_SIZE_TEXT,
'w90p',
),
),
[
'div_style' => 'display: flex; flex-direction: column; width: 50%',
'div_id' => 'resource_type',
],
);
}
echo $result;
return;
}
if ($exportPrd === true) {
$type = (string) get_parameter('type', '');
$value = (int) get_parameter('value', 0);
$name = (string) get_parameter('name', '');
$filename = (string) get_parameter('filename', '');
try {
$data = $prd->exportPrd($type, $value, $name);
} catch (\Exception $e) {
$data = '';
}
$return = [];
if (empty($data) === false) {
$filename_download = date('YmdHis').'-'.$type.'-'.$name.'.prd';
$file = $config['attachment_store'].'/'.$filename;
$file_pointer = fopen($file, 'a');
if ($file_pointer !== false) {
$write = fwrite($file_pointer, $data);
if ($write === false) {
$return['error'] = -2;
unlink($config['attachment_store'].'/'.$filename);
} else {
$return['name'] = $filename;
$return['name_download'] = $filename_download;
}
fclose($file_pointer);
} else {
$return['error'] = -1;
}
}
echo json_encode($return);
return;
}
if ($deleteFile === true) {
$filename = (string) get_parameter('filename', '');
unlink($config['attachment_store'].'/'.$filename);
}
}

View File

@ -129,7 +129,12 @@ if ($check_connectivity) {
if ($create_net_scan) {
$ip_target = get_parameter('ip_target', '192.168.10.0/24');
$id_net_scan = create_net_scan($ip_target);
$snmp_version = get_parameter('snmp_version', '1');
$snmp_communities = get_parameter('snmp_communities', 'public');
$wmi_credentials = get_parameter('wmi_credentials', []);
$rcmd_credentials = get_parameter('rcmd_credentials', []);
$id_net_scan = create_net_scan($ip_target, $snmp_version, $snmp_communities, $wmi_credentials, $rcmd_credentials);
if ($id_net_scan > 0) {
$id_recon_server = db_get_row_filter('tserver', ['server_type' => SERVER_TYPE_DISCOVERY], 'id_server')['id_server'];
ui_print_success_message(__('Basic net created and scan in progress. <a href='.ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist&server_id='.$id_recon_server.'&force='.$id_net_scan).'>Click here to view the data</a>. Please note that it may take a few seconds to see data if your server is busy'));

View File

@ -380,5 +380,7 @@ if (session_status() !== PHP_SESSION_DISABLED) {
// Could give a warning if no session file is created. Ignore.
@session_destroy();
header_remove('Set-Cookie');
if (isset($_COOKIE[session_name()]) === true) {
setcookie(session_name(), $_COOKIE[session_name()], (time() - 4800), '/');
}
}

View File

@ -172,12 +172,12 @@ function process_user_login_local($login, $pass, $api=false, $passAlreadyEncrypt
$credentials_check = $pass === $row['password'];
} else {
// Perform password check whether it is MD5-hashed (old hashing) or Bcrypt-hashed.
if (strlen($row['password']) === 32) {
if (strlen(($row['password'] ?? '')) === 32) {
// MD5.
$credentials_check = $row !== false && $row['password'] !== md5('') && $row['password'] == md5($pass);
} else {
// Bcrypt.
$credentials_check = password_verify($pass, $row['password']);
$credentials_check = password_verify($pass, ($row['password'] ?? ''));
}
}
@ -572,10 +572,10 @@ function get_user_info($user)
*
* @return array An array of user information
*/
function get_users($order='fullname', $filter=false, $fields=false)
function get_users($order='fullname', $filter=[], $fields=false)
{
if (is_array($order) === true) {
$filter['order'] = $order['field'].' '.$order['order'];
$filter['order'] = (string) $order['field'].' '.(string) $order['order'];
} else {
if ($order !== 'registered' || $order !== 'last_connect' || $order !== 'fullname') {
$order = 'fullname';

View File

@ -53,6 +53,48 @@ class AuditLog extends HTML
*/
private $ajaxController;
/**
* TableId
*
* @var integer
*/
public $tableId;
/**
* FilterIp
*
* @var array
*/
public $filterIp;
/**
* FilterPeriod
*
* @var integer
*/
public $filterPeriod;
/**
* FilterText
*
* @var string
*/
public $filterText;
/**
* FilterType
*
* @var string
*/
public $filterType;
/**
* FilterUser
*
* @var string
*/
public $filterUser;
/**
* Class constructor

View File

@ -66,6 +66,13 @@ class CalendarManager
*/
private $message;
/**
* Access
*
* @var string
*/
public $access;
/**
* Allowed methods to be called using AJAX request.
*

View File

@ -1510,17 +1510,42 @@ class ConsoleSupervisor
{
global $config;
$types_sql = sprintf(
' AND (
`server_type` != %d AND
`server_type` != %d
)',
SERVER_TYPE_AUTOPROVISION,
SERVER_TYPE_MIGRATION
);
if (is_metaconsole() === true && isset($config['ndbh']) === false) {
$types_sql = sprintf(
' AND (
`server_type` = %d OR
`server_type` = %d OR
`server_type` = %d OR
`server_type` = %d
)',
SERVER_TYPE_AUTOPROVISION,
SERVER_TYPE_EVENT,
SERVER_TYPE_MIGRATION,
SERVER_TYPE_PREDICTION
);
}
$servers = db_get_all_rows_sql(
'SELECT
id_server,
name,
sprintf(
'SELECT id_server,
`name`,
server_type,
server_keepalive,
status,
`status`,
unix_timestamp() - unix_timestamp(keepalive) as downtime
FROM tserver
WHERE
unix_timestamp() - unix_timestamp(keepalive) > server_keepalive'
WHERE unix_timestamp() - unix_timestamp(keepalive) > server_keepalive
%s',
$types_sql
)
);
if ($servers === false) {

View File

@ -850,7 +850,7 @@ class CredentialStore extends Wizard
'privilege' => 'AR',
'type' => 'select_groups',
'nothing' => false,
'selected' => (defined($id_group_filter) ? $id_group_filter : 0),
'selected' => ((isset($id_group_filter) === true) ? $id_group_filter : 0),
'return' => true,
'size' => '80%',
],

View File

@ -54,6 +54,13 @@ class Diagnostics extends Wizard
*/
public $pdf;
/**
* Product name.
*
* @var string
*/
public $product_name;
/**
* Constructor.

View File

@ -38,6 +38,62 @@ require_once $config['homedir'].'/include/class/HTML.class.php';
class ExternalTools extends HTML
{
/**
* Origin
*
* @var string
*/
public $origin;
/**
* PathCustomComm
*
* @var string
*/
public $pathCustomComm;
/**
* PathDig
*
* @var string
*/
public $pathDig;
/**
* PathNmap
*
* @var string
*/
public $pathNmap;
/**
* PathPing
*
* @var string
*/
public $pathPing;
/**
* PathSnmpget
*
* @var string
*/
public $pathSnmpget;
/**
* PathTraceroute
*
* @var string
*/
public $pathTraceroute;
/**
* UpdatePaths
*
* @var string
*/
public $updatePaths;
/**
* Constructor.

View File

@ -706,7 +706,7 @@ class NetworkMap
*/
public function setNodes($nodes)
{
$this->nodes = $nodes;
$this->nodes = (array) $nodes;
}

View File

@ -52,6 +52,13 @@ class OrderInterpreter extends Wizard
*/
public $ajaxController;
/**
* Pages menu
*
* @var array
*/
public $pages_menu;
/**
* Generates a JSON error.

File diff suppressed because it is too large Load Diff

View File

@ -67,6 +67,34 @@ class SatelliteAgent extends HTML
*/
private $ajaxController;
/**
* Satellite_name
*
* @var string
*/
public $satellite_name;
/**
* Satellite_server
*
* @var string
*/
public $satellite_server;
/**
* TableId
*
* @var integer
*/
public $tableId;
/**
* Satellite_config
*
* @var string
*/
public $satellite_config;
/**
* Class constructor

View File

@ -107,7 +107,7 @@ class Tree
$userGroupsACL = users_get_groups(false, $this->access);
$this->userGroupsACL = empty($userGroupsACL) ? false : $userGroupsACL;
$this->userGroupsACL = empty($userGroupsACL) ? [0] : $userGroupsACL;
$this->userGroups = $this->userGroupsACL;
$this->userGroupsArray = array_keys($this->userGroups);

View File

@ -848,13 +848,22 @@ class WelcomeWindow extends Wizard
</div>
<div id="dialog_basic_net" class="invisible">
<?php
$serverIP = $_SERVER['SERVER_ADDR'];
$ipParts = explode('.', $serverIP);
if (count($ipParts) === 4) {
$ipParts[3] = '0/24';
$network = implode('.', $ipParts);
} else {
$network = '192.168.10.0/24';
}
echo html_print_input_hidden('create_net_scan', 1);
echo html_print_label_input_block(
__('Ip target'),
html_print_input_text(
'ip_target_discovery',
'192.168.10.0/24',
'192.168.10.0/24',
$network,
$network,
false,
18,
true,
@ -874,8 +883,320 @@ class WelcomeWindow extends Wizard
)
);
echo html_print_div(
[
'class' => '',
'content' => '<br>To detect and find systems on your network we will need access credentials. The SNMP community for network devices, and at least one set of credentials for Linux and Windows environments (they do not need to be super administrators, but they do need to be able to connect remotely). Without the credentials, we will only be able to detect if the devices are connected to the network.<br><br>',
],
true
);
// SNMP Communities
echo html_print_label_input_block(
__('SNMP communities to try with').ui_print_help_tip(
__(
'You can specify several values, separated by commas, for example: public,mysecret,1234'
),
true
),
html_print_input(
[
'name' => 'community',
'type' => 'text',
'value' => 'public',
'size' => 25,
'return' => true,
],
'div',
true
),
['div_id' => 'snmp-communities-div']
);
ui_require_jquery_file('tag-editor.min', 'include/javascript/', true);
ui_require_jquery_file('caret.min', 'include/javascript/', true);
ui_require_css_file('jquery.tag-editor', 'include/styles/', true);
echo '<br>';
$spacing = '';
for ($i = 0; $i < 12; $i++) {
$spacing .= '&nbsp;';
}
// WMI Credentials
echo '<fieldset style="padding: 10px; padding-top: 0px">';
echo '<legend>'.__('WMI credentials').'</legend>';
echo html_print_div(
[
'id' => 'wmi-creds',
'content' => '',
],
true
);
echo html_print_div(
[
'id' => 'wmi-cred-form',
'hidden' => true,
'style' => 'margin: 10px; display: flex; align-items: center;',
'content' => html_print_div(
[
'id' => 'wmi-cred-user-div',
'style' => 'width: 260px;',
'content' => html_print_label_input_block(
__('User').'&nbsp;',
html_print_input_text(
'wmi-cred-user',
'',
'',
false,
50,
// Max length
true,
false,
true,
'',
'w100p',
'',
'off',
false,
'',
'',
'',
false,
'',
'Username'
),
['div_style' => 'display: flex; align-items: center;']
),
],
true
).html_print_div(
[
'id' => 'wmi-cred-pass-div',
'style' => 'width: 260px;',
'content' => html_print_label_input_block(
$spacing.__('Password').'&nbsp;',
html_print_input_password(
'wmi-cred-pass',
'',
'',
false,
50,
// Max length
true,
false,
true,
'w100p',
'off',
false,
''
),
['div_style' => 'display: flex; align-items: center;']
),
],
true
).html_print_div(
[
'id' => 'wmi-cred-namespace-div',
'style' => 'width: 260px;',
'content' => html_print_label_input_block(
$spacing.__('Namespace').'&nbsp;',
html_print_input_text(
'wmi-cred-namespace',
'',
'',
false,
50,
// Max length
true,
false,
true,
'',
'w100p',
'',
'off',
false,
'',
'',
'',
false,
'',
'Namespace'
),
['div_style' => 'display: flex; align-items: center;']
),
],
true
).'<a onClick="delete_discovery_credential(this);">'.html_print_image(
'images/delete.svg',
true,
[
'title' => __('Delete'),
'style' => 'cursor: pointer;',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
],
true
);
echo '<div style="height: 10px;"></div>';
echo html_print_button(
__('Add'),
'add-wmi-cred',
false,
'add_discovery_credential("wmi-cred-form","wmi-creds");',
[
'icon' => 'plus',
'mode' => 'secondary',
'class' => 'mini',
],
true,
false,
false,
''
);
echo '</fieldset>';
echo '<br>';
// RCM Credentials
echo '<fieldset style="padding: 10px; padding-top: 0px">';
echo '<legend>'.__('Remote commands credentials').'</legend>';
echo html_print_div(
[
'id' => 'rcmd-creds',
'content' => '',
],
true
);
echo html_print_div(
[
'id' => 'rcmd-cred-form',
'hidden' => true,
'style' => 'margin: 10px; display: flex; align-items: center;',
'content' => html_print_div(
[
'id' => 'rcmd-cred-user-div',
'style' => 'width: 260px;',
'content' => html_print_label_input_block(
__('User').'&nbsp;',
html_print_input_text(
'rcmd-cred-user',
'',
'',
false,
50,
// Max length
true,
false,
true,
'',
'w100p',
'',
'off',
false,
'',
'',
'',
false,
'',
'Username'
),
['div_style' => 'display: flex; align-items: center;']
),
],
true
).html_print_div(
[
'id' => 'rcmd-cred-pass-div',
'style' => 'width: 260px;',
'content' => html_print_label_input_block(
$spacing.__('Password').'&nbsp;',
html_print_input_password(
'rcmd-cred-pass',
'',
'',
false,
50,
// Max length
true,
false,
true,
'w100p',
'off',
false,
''
),
['div_style' => 'display: flex; align-items: center;']
),
],
true
).'<a onClick="delete_discovery_credential(this);">'.html_print_image(
'images/delete.svg',
true,
[
'title' => __('Delete'),
'style' => 'cursor: pointer;',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
],
true
);
echo '<div style="height: 10px;"></div>';
echo html_print_button(
__('Add'),
'add-rcmd-cred',
false,
'add_discovery_credential("rcmd-cred-form","rcmd-creds");',
[
'icon' => 'plus',
'mode' => 'secondary',
'class' => 'mini',
],
true,
false,
false,
''
);
echo '</fieldset>';
echo html_print_submit_button(__('Create'), 'basic_net', false, ['icon' => 'next', 'style' => 'margin-top:15px; float:right;']);
?>
<script type="text/javascript">
$(document).ready(function() {
$('#snmp-communities-div .tag-editor').remove();
$('#text-community').tagEditor({
forceLowercase: false
});
});
var credentialCounters = {};
function add_discovery_credential(sourceFormId, targetDivId) {
// Increment the counter for this type of credential
credentialCounters[targetDivId] = (credentialCounters[targetDivId] || 0) + 1;
// Clone the source form
var newCredential = $("#" + sourceFormId).clone();
// Generate a unique ID for the new credential
var uniqueId = targetDivId + "-" + credentialCounters[targetDivId];
// Set a new ID for the cloned form
newCredential.attr("id", uniqueId);
// Append the cloned form to the target div
$("#" + targetDivId).append(newCredential);
// Ensure the cloned div is visible
newCredential.show().css("display", "flex");
}
function delete_discovery_credential(clickedElement) {
$(clickedElement).parent().remove();
}
</script>
</div>
<div id="dialog_alert_mail" class="invisible">
<?php
@ -1308,8 +1629,8 @@ class WelcomeWindow extends Wizard
draggable: true,
modal: true,
close: false,
height: 200,
width: 480,
height: 590,
width: 925,
overlay: {
opacity: 0.5,
background: "black"
@ -1407,6 +1728,35 @@ class WelcomeWindow extends Wizard
});
$('#button-basic_net').click(function(){
var wmi_credentials = [];
$("#wmi-creds [id^='wmi-creds-']").each(function() {
var credentialId = $(this).attr("id");
var credentialValues = {
user: $(this).find('[name="wmi-cred-user"]').val(),
pass: $(this).find('[name="wmi-cred-pass"]').val(),
namespace: $(this).find('[name="wmi-cred-namespace"]').val()
};
wmi_credentials.push({
id: credentialId,
credential: credentialValues
});
});
var rcmd_credentials = [];
$("#rcmd-creds [id^='rcmd-creds-']").each(function() {
var credentialId = $(this).attr("id");
var credentialValues = {
user: $(this).find('[name="rcmd-cred-user"]').val(),
pass: $(this).find('[name="rcmd-cred-pass"]').val()
};
rcmd_credentials.push({
id: credentialId,
credential: credentialValues
});
});
$.ajax({
async: false,
type: "POST",
@ -1414,6 +1764,10 @@ class WelcomeWindow extends Wizard
data: {
create_net_scan: 1,
ip_target: $('#text-ip_target_discovery').val(),
snmp_version: 1,
snmp_communities: $('#text-community').val(),
wmi_credentials: wmi_credentials,
rcmd_credentials: rcmd_credentials
},
success: function(data) {
if (data !== 0) {

View File

@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC240208';
$build_version = 'PC240216';
$pandora_version = 'v7.0NG.775';
// Do not overwrite default timezone set if defined.

View File

@ -908,6 +908,9 @@ define('DEMO_DASHBOARD', 7);
define('DEMO_VISUAL_CONSOLE', 8);
define('DEMO_PLUGIN', 9);
// Export resources.
define('LINE_BREAK', "\n");
// OS.
define('LINUX', '1');
define('SOLARIS', '2');

View File

@ -2917,6 +2917,10 @@ function delete_dir($dir)
*/
function is_image_data($data)
{
if (isset($data) === false) {
return false;
}
return (substr($data, 0, 10) == 'data:image');
}
@ -2939,7 +2943,7 @@ function is_snapshot_data($data)
*/
function is_text_to_black_string($data)
{
if (is_image_data($data)) {
if (isset($data) === false || is_image_data($data)) {
return false;
}

View File

@ -4945,6 +4945,8 @@ function get_resume_agent_concat($id_agente, $all_groups, $agent)
// Optional data
// Position Information.
if ((bool) $config['activate_gis'] === true) {
include_once $config['homedir'].'/include/functions_gis.php';
$data = [];
$dataPositionAgent = gis_get_data_last_position_agent(

View File

@ -541,7 +541,7 @@ function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db)
}
function api_get_agent_module_name_last_value($agentName, $moduleName, $other=';', $returnType)
function api_get_agent_module_name_last_value($agentName, $moduleName, $other=';', $returnType='string')
{
$idAgent = agents_get_agent_id($agentName);
@ -558,7 +558,7 @@ function api_get_agent_module_name_last_value($agentName, $moduleName, $other=';
}
function api_get_agent_module_name_last_value_alias($alias, $moduleName, $other=';', $returnType)
function api_get_agent_module_name_last_value_alias($alias, $moduleName, $other=';', $returnType='string')
{
$sql = sprintf(
'SELECT tagente_modulo.id_agente_modulo FROM tagente_modulo
@ -573,7 +573,7 @@ function api_get_agent_module_name_last_value_alias($alias, $moduleName, $other=
}
function api_get_module_last_value($idAgentModule, $trash1, $other=';', $returnType)
function api_get_module_last_value($idAgentModule, $trash1, $other=';', $returnType='string')
{
global $config;
if (defined('METACONSOLE')) {

View File

@ -504,7 +504,7 @@ function cron_task_start_gotty(bool $restart_mode=true)
}
}
if ($start_proc === true) {
if ($start_proc === true && file_exists('/usr/bin/pandora_gotty') === true) {
$logFilePath = $config['homedir'].'/log/gotty_cron_tmp.log';
shell_exec('touch '.$logFilePath);
@ -527,7 +527,7 @@ function cron_task_start_gotty(bool $restart_mode=true)
while ((time() - $startTime) < $maxWaitTime) {
if ($start_proc === true) {
// Read command output.
$log_content = file_get_contents($logFilePath);
$log_content = @file_get_contents($logFilePath);
}
if ($start_proc === true

View File

@ -1177,14 +1177,18 @@ function events_get_all(
$array_search[] = 'lower(ta.alias)';
}
// Disregard repeated whitespaces in search string.
$collapsed_spaces_search = preg_replace('/(&#x20;)+/', '&#x20;', $filter['search']);
$sql_search = ' AND (';
foreach ($array_search as $key => $field) {
// Disregard repeated whitespaces in query searched string.
$sql_search .= sprintf(
'%s %s %s like lower("%%%s%%")',
'%s REGEXP_REPLACE(%s, "(&#x20;\\s*)+", "&#x20;") %s like lower("%%%s%%")',
($key === 0) ? '' : $nexo,
$field,
$not_search,
$filter['search']
$collapsed_spaces_search
);
$sql_search .= ' ';
}

View File

@ -440,7 +440,7 @@ function extensions_add_operation_menu_option($name, $fatherId=null, $icon=null,
$option_menu['acl'] = $acl;
$extension = &$config['extensions'][$extension_file];
$option_menu['sec2'] = $extension['dir'].'/'.mb_substr($extension_file, 0, -4);
$option_menu['sec2'] = $extension['dir'].'/'.mb_substr(($extension_file ?? ''), 0, -4);
$option_menu['fatherId'] = $fatherId;
$option_menu['subfatherId'] = $subfatherId;
$option_menu['icon'] = $icon;

View File

@ -100,7 +100,7 @@ function forecast_projection_graph(
$data[0] = '';
$data[1] = $cont;
$data[2] = date($config['date_format'], $row[0]);
$data[2] = date($config['date_format'], (int) $row[0]);
$data[3] = $row[0];
$data[4] = $row[1];
$data[5] = ($row[0] * $row[1]);

View File

@ -82,11 +82,11 @@ function io_safe_input($value)
return $value;
}
if (! mb_check_encoding($value, 'UTF-8')) {
if (isset($value) === true && !mb_check_encoding($value, 'UTF-8')) {
$value = utf8_encode($value);
}
$valueHtmlEncode = htmlentities($value, ENT_QUOTES, 'UTF-8', true);
$valueHtmlEncode = htmlentities(($value ?? ''), ENT_QUOTES, 'UTF-8', true);
// Replace the character '\' for the equivalent html entitie
$valueHtmlEncode = str_replace('\\', '&#92;', $valueHtmlEncode);
@ -561,10 +561,8 @@ function io_output_password($password, $wrappedBy='')
]
);
$output = ($plaintext === ENTERPRISE_NOT_HOOK) ? $password : $plaintext;
// If password already decrypt return same password.
$output = (empty($plaintext) === true) ? $password : $plaintext;
$output = (empty($plaintext) === true || $plaintext === ENTERPRISE_NOT_HOOK) ? $password : $plaintext;
return sprintf(
'%s%s%s',

View File

@ -819,7 +819,7 @@ function notifications_print_global_source_configuration($source)
$html_checkboxes = '';
$blacklist = json_decode($source['subtype_blacklist'], 1);
$blacklist = json_decode(($source['subtype_blacklist'] ?? ''), 1);
if (json_last_error() !== JSON_ERROR_NONE) {
$blacklist = [];
}

View File

@ -243,6 +243,7 @@ function profile_print_profile_table($id, $json_profile=false, $return=false, $c
$profile = json_decode($profile);
}
$result = [];
$result[] = [
'id_grupo' => $profile->group,
'id_perfil' => $profile->profile,

View File

@ -12546,7 +12546,7 @@ function reporting_get_stats_indicators($data, $width=280, $height=20, $html=tru
$table_ind = html_get_predefined_table();
$servers = [];
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
$servers['all'] = (int) count((servers_get_info() ?? []));
$servers['up'] = (int) servers_check_status();
$servers['down'] = ($servers['all'] - $servers['up']);
if ($servers['all'] == 0) {
@ -12607,7 +12607,7 @@ function reporting_get_stats_indicators_mobile($data, $width=280, $height=20, $h
$table_ind = html_get_predefined_table();
$servers = [];
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
$servers['all'] = (int) count((servers_get_info() ?? []));
$servers['up'] = (int) servers_check_status();
$servers['down'] = ($servers['all'] - $servers['up']);
if ($servers['all'] == 0) {
@ -16206,7 +16206,8 @@ function reporting_module_histogram_graph($report, $content, $pdf=0)
// Si viene de no iniciado busco el primer dato del modulo y si es de histórico.
$first_utimestamp = false;
$search_historydb = false;
$extract_first_data = modules_get_first_date($content['id_agent_module'], 0);
// Limitamos el primer dato al rango de tiempo seleccionado por el usuario.
$extract_first_data = modules_get_first_date($content['id_agent_module'], $date_start);
if (empty($extract_first_data) === false) {
$first_utimestamp = $extract_first_data['first_utimestamp'];
$search_historydb = (isset($extract_first_data['search_historydb']) === true) ? $extract_first_data['search_historydb'] : false;
@ -16311,7 +16312,8 @@ function reporting_module_histogram_graph($report, $content, $pdf=0)
$return['data_ok'] = $check_ok;
$return['data_total'] = $check_total;
if ($check_total > 0) {
$return['percent_ok'] = (($time_ok * 100) / $content['period']);
$percent_ok = (($time_ok * 100) / $content['period']);
$return['percent_ok'] = ($percent_ok > 100) ? 100 : $percent_ok;
} else {
$return['percent_ok'] = 0;
}

View File

@ -615,7 +615,7 @@ function servers_get_rate($avg_interval, $num_modules)
* This function will get all the server information in an array
* or a specific server.
*
* @param integer $id_server An optional integer or array of integers
* @param integer|array $id_server An optional integer or array of integers
* to select specific servers.
*
* @return mixed False in case the server doesn't exist or an array with info.
@ -624,28 +624,63 @@ function servers_get_info($id_server=-1, $sql_limit=-1)
{
global $config;
if (is_array($id_server)) {
$select_id = ' WHERE id_server IN ('.implode(',', $id_server).')';
} else if ($id_server > 0) {
$select_id = ' WHERE id_server IN ('.(int) $id_server.')';
} else {
$select_id = '';
if (is_array($id_server) === true) {
$select_id = ' AND id_server IN ('.implode(',', $id_server).')';
} else if ($id_server > 0) {
$select_id = ' AND id_server IN ('.(int) $id_server.')';
}
$sql = '
SELECT *
FROM tserver '.$select_id.'
ORDER BY server_type';
$types_sql = sprintf(
' AND (
`server_type` != %d AND
`server_type` != %d
)',
SERVER_TYPE_AUTOPROVISION,
SERVER_TYPE_MIGRATION
);
if (is_metaconsole() === true && isset($config['ndbh']) === false) {
$types_sql = sprintf(
' AND (
`server_type` = %d OR
`server_type` = %d OR
`server_type` = %d OR
`server_type` = %d
)',
SERVER_TYPE_AUTOPROVISION,
SERVER_TYPE_EVENT,
SERVER_TYPE_MIGRATION,
SERVER_TYPE_PREDICTION
);
}
$sql = sprintf(
'SELECT *
FROM tserver
WHERE 1=1
%s
%s
ORDER BY server_type',
$select_id,
$types_sql
);
if ($sql_limit !== -1) {
$sql = '
SELECT *
FROM tserver '.$select_id.'
ORDER BY server_type'.$sql_limit;
$sql = sprintf(
'SELECT *
FROM tserver
WHERE 1=1
%s
%s
ORDER BY server_type
%s',
$select_id,
$types_sql,
$sql_limit
);
}
$result = db_get_all_rows_sql($sql);
$time = get_system_time();
if (empty($result)) {
return false;
@ -1445,6 +1480,12 @@ function servers_get_server_string_name(int $server)
case SERVER_TYPE_NCM:
return __('NCM server');
case SERVER_TYPE_AUTOPROVISION:
return __('Autoprovision server');
case SERVER_TYPE_MIGRATION:
return __('Migration server');
default:
return __('N/A');
}

View File

@ -1039,7 +1039,7 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false)
echo "
<script>
function sendHash(url) {
window.open(url+'&loginhash=auto&loginhash_data=".$hashdata.'&loginhash_user='.str_rot13($user)."', '_blank');
window.open(url+'&loginhash=auto&loginhash_data=".$hashdata.'&loginhash_user='.str_rot13(($user ?? ''))."', '_blank');
}

View File

@ -148,7 +148,7 @@ function ui_print_truncate_text(
$text_html_decoded = io_safe_output($text);
$text_has_entities = $text != $text_html_decoded;
if (mb_strlen($text_html_decoded, 'UTF-8') > ($numChars)) {
if (isset($text_html_decoded) === true && mb_strlen($text_html_decoded, 'UTF-8') > ($numChars)) {
// '/2' because [...] is in the middle of the word.
$half_length = intval(($numChars - 3) / 2);
@ -969,6 +969,17 @@ function ui_print_os_icon(
$options['title'] = $os_name;
}
if ($icon === '.png') {
$output = html_print_image(
'images/os@svg.svg',
true,
$options,
false,
$relative,
$no_in_meta,
true
);
} else {
$output = html_print_image(
'images/'.$subfolder.'/'.$icon,
true,
@ -979,6 +990,7 @@ function ui_print_os_icon(
true
);
}
}
} else {
// $output = "<img src='images/os_icons/" . $icon . "' alt='" . $os_name . "' title='" . $os_name . "'>";
$output = 'images/'.$subfolder.'/'.$icon;

View File

@ -473,13 +473,123 @@ function create_module_packet_lost($id_agent, $id_group, $ip_target)
* Create module packet lost and return module id.
*
* @param string $ip_target Ip and red mask.
* @param string $snmp_communities SNMP Communities to use in recon task.
* @param array $wmi_credentials WMI Credentials to use in recon task.
* @param array $rcmd_credentials RCMD Credentials to use in recon task.
*
* @return interger Module id.
*/
function create_net_scan($ip_target)
function create_net_scan($ip_target, $snmp_version, $snmp_communities, $wmi_credentials, $rcmd_credentials)
{
global $config;
include_once $config['homedir'].'/godmode/wizards/HostDevices.class.php';
include_once $config['homedir'].'/include/functions_groups.php';
$group_name = 'AutoDiscovery';
$id_group = db_get_value('id_grupo', 'tgrupo', 'nombre', io_safe_input($group_name));
if (!($id_group > 0)) {
$id_group = groups_create_group(
io_safe_input($group_name),
[
'icon' => 'applications.png',
'description' => '',
'contact' => '',
'other' => '',
]
);
if (!($id_group > 0)) {
$id_group = 10;
}
}
$auth_strings = [];
$default_templates = [
io_safe_input('Linux System'),
io_safe_input('Windows System'),
io_safe_input('Windows Hardware'),
io_safe_input('Network Management'),
];
$default_templates_ids = db_get_all_rows_sql(
'SELECT id_np
FROM tnetwork_profile
WHERE name IN ('.implode(
',',
array_map(
function ($template) {
return "'".$template."'";
},
$default_templates
)
).')
ORDER BY name'
);
$id_base = 'autoDiscovery-WMI-';
$id = 0;
foreach ($wmi_credentials as $wmi) {
$id++;
$identifier = $id_base.$id;
while (db_get_value_sql(
sprintf(
'SELECT COUNT(*) AS count FROM tcredential_store WHERE identifier = "%s"',
$identifier
)
) > 0) {
$id++;
$identifier = $id_base.$id;
}
$storeKey = db_process_sql_insert(
'tcredential_store',
[
'identifier' => $identifier,
'id_group' => $id_group,
'product' => 'WMI',
'username' => $wmi['credential']['user'],
'password' => $wmi['credential']['pass'],
'extra_1' => $wmi['credential']['namespace'],
]
);
if ($storeKey !== false) {
$auth_strings[] = $identifier;
}
}
$id_base = 'autoDiscovery-RCMD-';
$id = 0;
foreach ($rcmd_credentials as $rcmd) {
$id++;
$identifier = $id_base.$id;
while (db_get_value_sql(
sprintf(
'SELECT COUNT(*) AS count FROM tcredential_store WHERE identifier = "%s"',
$identifier
)
) > 0) {
$id++;
$identifier = $id_base.$id;
}
$storeKey = db_process_sql_insert(
'tcredential_store',
[
'identifier' => $identifier,
'id_group' => $id_group,
'product' => 'CUSTOM',
'username' => $rcmd['credential']['user'],
'password' => $rcmd['credential']['pass'],
]
);
if ($storeKey !== false) {
$auth_strings[] = $identifier;
}
}
$HostDevices = new HostDevices(1);
$id_recon_server = db_get_row_filter('tserver', ['server_type' => SERVER_TYPE_DISCOVERY], 'id_server')['id_server'];
@ -493,7 +603,7 @@ function create_net_scan($ip_target)
'taskname' => __('Basic network'),
'id_recon_server' => $id_recon_server,
'network' => $ip_target,
'id_group' => '8',
'id_group' => $id_group,
'comment' => __('Created on welcome'),
];
$task_created = $HostDevices->parseNetScan();
@ -504,13 +614,13 @@ function create_net_scan($ip_target)
'page' => '2',
'recon_ports' => '',
'auto_monitor' => 'on',
'id_network_profile' => ['0' => '2'],
'id_network_profile' => array_column($default_templates_ids, 'id_np'),
'review_results' => 'on',
'review_limited' => '0',
'snmp_enabled' => 'on',
'snmp_version' => '1',
'snmp_version' => $snmp_version,
'snmp_skip_non_enabled_ifs' => 'on',
'community' => '',
'community' => $snmp_communities,
'snmp_context' => '',
'snmp_auth_user' => '',
'snmp_security_level' => 'authNoPriv',
@ -523,6 +633,9 @@ function create_net_scan($ip_target)
'parent_detection' => 'on',
'parent_recursion' => 'on',
'vlan_enabled' => 'on',
'wmi_enabled' => 'on',
'rcmd_enabled' => 'on',
'auth_strings' => $auth_strings,
];
$task_final_created = $HostDevicesFinal->parseNetScan();

View File

@ -301,6 +301,13 @@ function gd_progress_bubble($width, $height, $progress, $title, $font, $out_of_l
function ImageRectangleWithRoundedCorners(&$im, $x1, $y1, $x2, $y2, $radius, $color)
{
$x1 = (int) $x1;
$y1 = (int) $y1;
$x2 = (int) $x2;
$y2 = (int) $y2;
$radius = (int) $radius;
$color = (int) $color;
// Draw rectangle without corners
imagefilledrectangle($im, ($x1 + $radius), $y1, ($x2 - $radius), $y2, $color);
imagefilledrectangle($im, $x1, ($y1 + $radius), $x2, ($y2 - $radius), $color);

View File

@ -113,6 +113,13 @@ class ClusterWizard extends \HTML
*/
private $agent;
/**
* Id of clusters.
*
* @var integer
*/
public $id;
/**
* Builds a Cluster Wizard.

View File

@ -167,6 +167,20 @@ class Manager implements PublicLogin
*/
private $duplicateCellId;
/**
* Url
*
* @var string
*/
public $url;
/**
* Widget
*
* @var Widget
*/
public $cWidget;
/**
* Allowed methods to be called using AJAX request.
*
@ -1252,7 +1266,8 @@ class Manager implements PublicLogin
}
if (empty($cells) === false) {
$result = array_reduce(
$result = array_values(
array_reduce(
$cells,
function ($carry, $item) {
$carry[$item['order']]['id'] = $item['id'];
@ -1262,6 +1277,7 @@ class Manager implements PublicLogin
return $carry;
},
[]
)
);
}

View File

@ -65,6 +65,27 @@ class Widget
*/
private $dateTo;
/**
* Data cell
*
* @var array
*/
public $dataCell;
/**
* Overflow scrollbar.
*
* @var boolean
*/
public $overflow_scrollbars;
/**
* Position
*
* @var array
*/
public $position;
/**
* Contructor widget.

View File

@ -226,7 +226,7 @@ class AgentHive extends Widget
'name' => 'groups[]',
'returnAllGroup' => false,
'privilege' => 'AR',
'selected' => explode(',', $values['groups'][0]),
'selected' => (isset($values['groups'][0]) === true) ? explode(',', $values['groups'][0]) : [],
'return' => true,
'multiple' => true,
'required' => true,

View File

@ -117,6 +117,13 @@ class DataMatrix extends Widget
*/
protected $cellId;
/**
* Position
*
* @var array
*/
public $size;
/**
* Construct.

View File

@ -0,0 +1,541 @@
<?php
/**
* Widget agiss map Pandora FMS Console
*
* @category Console Class
* @package Pandora FMS
* @subpackage Widget
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2024 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.
* ============================================================================
*/
namespace PandoraFMS\Dashboard;
use PandoraFMS\Enterprise\Metaconsole\Node;
global $config;
/**
* URL Widgets
*/
class GisMap extends Widget
{
/**
* Name widget.
*
* @var string
*/
protected $name;
/**
* Title widget.
*
* @var string
*/
protected $title;
/**
* Page widget;
*
* @var string
*/
protected $page;
/**
* Class name widget.
*
* @var [type]
*/
protected $className;
/**
* Values options for each widget.
*
* @var [type]
*/
protected $values;
/**
* Configuration required.
*
* @var boolean
*/
protected $configurationRequired;
/**
* Error load widget.
*
* @var boolean
*/
protected $loadError;
/**
* Width.
*
* @var integer
*/
protected $width;
/**
* Heigth.
*
* @var integer
*/
protected $height;
/**
* Grid Width.
*
* @var integer
*/
protected $gridWidth;
/**
* Cell ID.
*
* @var integer
*/
protected $cellId;
/**
* Construct.
*
* @param integer $cellId Cell ID.
* @param integer $dashboardId Dashboard ID.
* @param integer $widgetId Widget ID.
* @param integer|null $width New width.
* @param integer|null $height New height.
* @param integer|null $gridWidth Grid width.
*/
public function __construct(
int $cellId,
int $dashboardId=0,
int $widgetId=0,
?int $width=0,
?int $height=0,
?int $gridWidth=0
) {
global $config;
// WARNING: Do not edit. This chunk must be in the constructor.
parent::__construct(
$cellId,
$dashboardId,
$widgetId
);
// Width.
$this->width = $width;
// Height.
$this->height = $height;
// Grid Width.
$this->gridWidth = $gridWidth;
// Cell Id.
$this->cellId = $cellId;
// Options.
$this->values = $this->decoders($this->getOptionsWidget());
// Page.
$this->page = basename(__FILE__);
// ClassName.
$class = new \ReflectionClass($this);
$this->className = $class->getShortName();
// Title.
$this->title = __('Gis map');
// Name.
if (empty($this->name) === true) {
$this->name = 'GisMap';
}
// This forces at least a first configuration.
$this->configurationRequired = false;
if (empty($this->values['gis_map']) === true) {
$this->configurationRequired = true;
}
}
/**
* Decoders hack for retrocompability.
*
* @param array $decoder Values.
*
* @return array Returns the values with the correct key.
*/
public function decoders(array $decoder): array
{
$values = [];
// Retrieve global - common inputs.
$values = parent::decoders($decoder);
if (isset($decoder['gis_map']) === true) {
$values['gis_map'] = $decoder['gis_map'];
}
return $values;
}
/**
* Generates inputs for form (specific).
*
* @return array Of inputs.
*
* @throws Exception On error.
*/
public function getFormInputs(): array
{
global $config;
include_once $config['homedir'].'/include/functions_gis.php';
// Retrieve global - common inputs.
$inputs = parent::getFormInputs();
if ((bool) $config['activate_gis'] === true) {
$maps = gis_get_maps();
}
$array_map = [];
foreach ($maps as $map) {
if (check_acl($config['id_user'], $map['group_id'], 'MR') === false
&& check_acl($config['id_user'], $map['group_id'], 'MW') === false
&& check_acl($config['id_user'], $map['group_id'], 'MM') === false
) {
continue;
}
$array_map[$map['id_tgis_map']] = $map['map_name'];
}
// Filters.
$inputs[] = [
'class' => 'flex flex-row',
'label' => __('GIS maps'),
'arguments' => [
'type' => 'select',
'fields' => $array_map,
'name' => 'gis_map',
'return' => true,
'selected' => ($this->values['gis_map'] === null) ? 0 : $this->values['gis_map'],
],
];
return $inputs;
}
/**
* Get Post for widget.
*
* @return array
*/
public function getPost(): array
{
// Retrieve global - common inputs.
$values = parent::getPost();
$values['gis_map'] = \get_parameter('gis_map', 0);
return $values;
}
/**
* Draw widget.
*
* @return string;
*/
public function load()
{
global $config;
include_once $config['homedir'].'/include/functions_gis.php';
include_once $config['homedir'].'/include/functions_agents.php';
\ui_require_javascript_file('openlayers.pandora', 'include/javascript/', true);
\ui_require_javascript_file('OpenLayers/OpenLayers', 'include/javascript/', true);
$map = db_get_row('tgis_map', 'id_tgis_map', $this->values['gis_map']);
$output = '';
if (check_acl($config['id_user'], $map['group_id'], 'MR') === false
&& check_acl($config['id_user'], $map['group_id'], 'MW') === false
&& check_acl($config['id_user'], $map['group_id'], 'MM') === false
) {
$output .= '<div class="container-center">';
$output .= ui_print_error_message(
__('You don\'t have access'),
'',
true
);
$output .= '</div>';
return $output;
}
$confMap = gis_get_map_conf($this->values['gis_map']);
// Default open map (used to overwrite unlicensed google map view).
$confMapDefault = get_good_con();
$confMapDefaultFull = json_decode($confMapDefault['conection_data'], true);
$confMapUrlDefault = $confMapDefaultFull['url'];
$num_baselayer = 0;
// Initialy there is no Gmap base layer.
$gmap_layer = false;
if ($confMap !== false) {
foreach ($confMap as $mapC) {
$baselayers[$num_baselayer]['typeBaseLayer'] = $mapC['connection_type'];
$baselayers[$num_baselayer]['name'] = $mapC['conection_name'];
$baselayers[$num_baselayer]['num_zoom_levels'] = $mapC['num_zoom_levels'];
$decodeJSON = json_decode($mapC['conection_data'], true);
switch ($mapC['connection_type']) {
case 'OSM':
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
break;
case 'Gmap':
if (!isset($decodeJSON['gmap_key']) || empty($decodeJSON['gmap_key'])) {
// If there is not gmap_key, show the default view.
$baselayers[$num_baselayer]['url'] = $confMapUrlDefault;
$baselayers[$num_baselayer]['typeBaseLayer'] = 'OSM';
} else {
$baselayers[$num_baselayer]['gmap_type'] = $decodeJSON['gmap_type'];
$baselayers[$num_baselayer]['gmap_key'] = $decodeJSON['gmap_key'];
$gmap_key = $decodeJSON['gmap_key'];
// Once a Gmap base layer is found we mark it to import the API.
$gmap_layer = true;
}
break;
case 'Static_Image':
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
$baselayers[$num_baselayer]['bb_left'] = $decodeJSON['bb_left'];
$baselayers[$num_baselayer]['bb_right'] = $decodeJSON['bb_right'];
$baselayers[$num_baselayer]['bb_bottom'] = $decodeJSON['bb_bottom'];
$baselayers[$num_baselayer]['bb_top'] = $decodeJSON['bb_top'];
$baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width'];
$baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height'];
break;
case 'WMS':
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
$baselayers[$num_baselayer]['layers'] = $decodeJSON['layers'];
break;
default:
// Do nothing.
break;
}
$num_baselayer++;
if ($mapC['default_map_connection'] == 1) {
$numZoomLevels = $mapC['num_zoom_levels'];
}
}
}
if ($gmap_layer === true) {
if (https_is_running()) {
?>
<script type="text/javascript" src="https://maps.google.com/maps?file=api&v=2&sensor=false&key=<?php echo $gmap_key; ?>" ></script>
<?php
} else {
?>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=<?php echo $gmap_key; ?>" ></script>
<?php
}
}
$controls = [
'PanZoomBar',
'ScaleLine',
'Navigation',
'MousePosition',
'layerSwitcher',
];
$layers = gis_get_layers($this->values['gis_map']);
$output .= '<div id="map_'.$this->cellId.'" style="width: 100%; height: 100%" />';
gis_print_map(
'map_'.$this->cellId,
$map['zoom_level'],
$map['initial_latitude'],
$map['initial_longitude'],
$baselayers,
$controls
);
$output .= '</div>';
if (empty($layers) === false) {
foreach ($layers as $layer) {
gis_make_layer(
$layer['layer_name'],
$layer['view_layer'],
null,
$layer['id_tmap_layer']
);
// Calling agents_get_group_agents with none to obtain the names in the same case as they are in the DB.
$agentNamesByGroup = [];
if ($layer['tgrupo_id_grupo'] >= 0) {
$agentNamesByGroup = agents_get_group_agents(
$layer['tgrupo_id_grupo'],
false,
'none',
true,
true,
false
);
}
$agentNamesByLayer = gis_get_agents_layer($layer['id_tmap_layer']);
$groupsByAgentId = gis_get_groups_layer_by_agent_id($layer['id_tmap_layer']);
$agentNamesOfGroupItems = [];
foreach ($groupsByAgentId as $agentId => $groupInfo) {
$agentNamesOfGroupItems[$agentId] = $groupInfo['agent_name'];
}
$agentNames = array_unique($agentNamesByGroup + $agentNamesByLayer + $agentNamesOfGroupItems);
foreach ($agentNames as $key => $agentName) {
$idAgent = $key;
$coords = gis_get_data_last_position_agent($idAgent);
if ($coords === false) {
$coords['stored_latitude'] = $map['default_latitude'];
$coords['stored_longitude'] = $map['default_longitude'];
} else {
if ($show_history == 'y') {
$lastPosition = [
'longitude' => $coords['stored_longitude'],
'latitude' => $coords['stored_latitude'],
];
gis_add_path($layer['layer_name'], $idAgent, $lastPosition);
}
}
$status = agents_get_status($idAgent, true);
$icon = gis_get_agent_icon_map($idAgent, true, $status);
$icon_size = getimagesize($icon);
$icon_width = $icon_size[0];
$icon_height = $icon_size[1];
// Is a group item.
if (empty($groupsByAgentId[$idAgent]) === false) {
$groupId = (int) $groupsByAgentId[$idAgent]['id'];
$groupName = $groupsByAgentId[$idAgent]['name'];
gis_add_agent_point(
$layer['layer_name'],
io_safe_output($groupName),
$coords['stored_latitude'],
$coords['stored_longitude'],
$icon,
$icon_width,
$icon_height,
$idAgent,
$status,
'point_group_info',
$groupId
);
} else {
$parent = db_get_value('id_parent', 'tagente', 'id_agente', $idAgent);
gis_add_agent_point(
$layer['layer_name'],
io_safe_output($agentName),
$coords['stored_latitude'],
$coords['stored_longitude'],
$icon,
$icon_width,
$icon_height,
$idAgent,
$status,
'point_agent_info',
$parent
);
}
}
}
gis_add_parent_lines();
$timestampLastOperation = db_get_value_sql('SELECT UNIX_TIMESTAMP()');
gis_activate_select_control();
gis_activate_ajax_refresh($layers, $timestampLastOperation);
}
return $output;
}
/**
* Get description.
*
* @return string.
*/
public static function getDescription()
{
return __('GIS map');
}
/**
* Get Name.
*
* @return string.
*/
public static function getName()
{
return 'GisMap';
}
/**
* Get size Modal Configuration.
*
* @return array
*/
public function getSizeModalConfiguration(): array
{
$size = [
'width' => 500,
'height' => 300,
];
return $size;
}
}

View File

@ -115,6 +115,13 @@ class ModulesByStatus extends Widget
*/
protected $cellId;
/**
* Size
*
* @var array
*/
public $size;
/**
* Construct.

View File

@ -355,7 +355,7 @@ class AgentModuleWidget extends Widget
*/
public function getIdCacheAgent($id_agents)
{
$target_agents = explode(',', $id_agents);
$target_agents = explode(',', ($id_agents ?? ''));
$cache_id_agents = [];
foreach ($target_agents as $agent_id) {
if (str_contains($agent_id, '|') === false) {

View File

@ -111,6 +111,20 @@ class EventsListWidget extends Widget
*/
protected $publicLink;
/**
* Overflow scrollbar.
*
* @var boolean
*/
public $overflow_scrollbars;
/**
* Position
*
* @var array
*/
public $position;
/**
* Construct.

View File

@ -271,7 +271,7 @@ class HeatmapWidget extends Widget
'name' => 'groups[]',
'returnAllGroup' => true,
'privilege' => 'AR',
'selected' => explode(',', $values['groups'][0]),
'selected' => (isset($values['groups'][0]) === true) ? explode(',', $values['groups'][0]) : [],
'return' => true,
'multiple' => true,
],
@ -305,7 +305,7 @@ class HeatmapWidget extends Widget
'type' => 'select',
'fields' => $tags,
'name' => 'tags[]',
'selected' => explode(',', $values['tags'][0]),
'selected' => (isset($values['tags'][0]) === true) ? explode(',', $values['tags'][0]) : [],
'return' => true,
'multiple' => true,
],
@ -332,7 +332,7 @@ class HeatmapWidget extends Widget
'type' => 'select',
'fields' => $module_groups,
'name' => 'module_groups[]',
'selected' => explode(',', $values['module_groups'][0]),
'selected' => (isset($values['module_groups'][0]) === true) ? explode(',', $values['module_groups'][0]) : [],
'return' => true,
'multiple' => true,
'nothing' => __('Not assigned'),

View File

@ -446,7 +446,7 @@ class SecurityHardening extends Widget
{
global $config;
$id_groups = explode(',', $group);
$id_groups = explode(',', ($group ?? ''));
if (in_array(0, $id_groups) === true) {
$id_groups = array_keys(users_get_groups($config['id_user'], 'AR', false));
}

View File

@ -83,10 +83,14 @@ class SnmpTraps extends Element
{
if ($this->isEnabled() === true) {
$value = $this->valueMonitoring('snmp_trap_queue');
if (isset($value[0]['data']) === true) {
$total = round($value[0]['data']);
} else {
$total = __('N/A');
}
} else {
$total = __('N/A');
}
return html_print_div(
[
@ -109,10 +113,14 @@ class SnmpTraps extends Element
{
if ($this->isEnabled() === true) {
$value = $this->valueMonitoring('total_trap');
if (isset($value[0]['data']) === true) {
$total = round($value[0]['data']);
} else {
$total = __('N/A');
}
} else {
$total = __('N/A');
}
return html_print_div(
[

View File

@ -108,9 +108,7 @@
cursor: default;
font-size: 14px;
}
.ui-front {
z-index: 9999;
}
.ui-menu {
list-style: none;
padding: 1px;

View File

@ -10954,6 +10954,18 @@ div.status_dot {
-webkit-mask: url(../../images/status_dot.svg) no-repeat center / contain;
}
button div.import {
mask: url(../../images/import.svg) no-repeat center / contain;
-webkit-mask: url(../../images/import.svg) no-repeat center / contain;
height: 1.5rem;
}
button div.export {
mask: url(../../images/export.svg) no-repeat center / contain;
-webkit-mask: url(../../images/export.svg) no-repeat center / contain;
height: 1.5rem;
}
.status_dot.ok {
background-color: #82b92e;
}
@ -13504,3 +13516,71 @@ tr.shown td.details-control {
mask: url(../../images/minimizar.svg) no-repeat right / contain;
-webkit-mask: url(../../images/minimizar.svg) no-repeat right / contain;
}
/* Import/export */
.div-import-export {
display: flex;
flex-direction: row;
}
.form-import {
width: 48%;
height: auto;
margin-right: 40px;
}
.div-import {
background-color: #ffffff;
border: 1px solid #e5e9ed;
border-radius: 8px;
width: 100%;
height: 180px;
display: flex;
flex-direction: row;
align-items: normal;
padding-top: 20px;
padding-left: 20px;
margin-bottom: 20px;
}
.div-export {
background-color: #ffffff;
border: 1px solid #e5e9ed;
border-radius: 8px;
width: 48%;
height: 180px;
display: flex;
flex-direction: row;
align-items: normal;
padding-top: 20px;
padding-left: 20px;
margin-bottom: 20px;
}
@media (max-width: 1300px) {
.div-import-export {
display: flex;
flex-direction: column;
}
.div-export {
width: calc(100% - 20px);
}
.form-import {
width: calc(100% - 20px);
}
}
.input-file-style::file-selector-button {
background-color: #ffffff;
border: 1px solid #979797;
border-radius: 4px;
width: 120px;
height: 32px;
}
button.disabled {
background: #c0ccdc !important;
border: 0px;
}

View File

@ -131,7 +131,7 @@
<div style='padding-bottom: 50px'>
<?php
$version = '7.0NG.775';
$build = '240208';
$build = '240216';
$banner = "v$version Build $build";
error_reporting(0);

Some files were not shown because too many files have changed in this diff Show More